WidgetFocus
Dokumentacja programistyczna OpenTTD
Linki zewnętrzne

OpenTTD GitHub
Wkład w OpenTTD - wytyczne
OpenTTD Doxygen

Informacje Ogólne

Styl kodowania
Kompilowanie OpenTTD
Debugowanie
Dodanie ustawienia
Dodanie funkcji squirrel
Zrozumienie obsługi SaveGame
Wyznaczenie wersji gry zapisanej
Wykonanie wydania OpenTTD

Języki i Ciągi znaków

Podręcznik stylu
Format plików lang
Użycie ciągów OpenTTD
Lista ciągów specjalnych

System Okna

Użycie systemu okna
Kody kolorów istniejących w OpenTTD
Dodawanie pola tekstowego
Zrozumienie widget focus system
Przewodnik stylu GUI

Tryb wieloosobowy

OpenTTD TCP protokół
OpenTTD UDP protokół
Debugowanie desynchronizacji
Rozwój Portu Administratora Serwera

Konsola (w grze)

Okno konsoli
Komendy konsoli
Zmienne konsoli
Używanie skryptu konsoli
Dodanie funkcji/komend do konsoli
Dodanie zmiennych do konsoli
Historia rozwoju Konsoli

Interfejsy API (ramy modowania)

Grafika i podobne (NewGRFy)
Środowisko AI (NoAI)
Framework GS (NoGO)

Inne odniesienia

Tablica map (siatka pozioma)
Pojazdy
Wyszukiwanie trasy
Przyspieszenie pociągu

Ten dokument ma na celu krótkie wprowadzenie do systemu fokusowania widgetów.

Contents

Focus poziomy

System fokusowy w OpenTTD ma dwa poziomy. Najpierw jest wskaźnik, który śledzi, które okno ma fokus. Następnie każde wystąpienie okna śledzi, który widget jest ustawiony w tym oknie. Oznacza to, że okno, które nie jest aktywne, nadal pamięta, który widżet był globalnie ustawiony, zanim inne okno nie ukradło go. Ten widget może później stać się widgetem zorientowanym globalnie, jeśli jego okno zostanie zogniskowane bez zmiany tego widgetu. (na przykład klikając pasek tytułu)

Termin globally focused widget odnosi się do skupionego widżetu skoncentrowanego okna. Window::IsWidgetGloballyFocused zwróci tylko, jeśli dany widget, a także instancja okna jest skoncentrowana. Z drugiej strony Window::IsWidgetFocused wymaga tylko, aby dany widżet był zogniskowany w instancji okna, ale samo okno nie musi być zogniskowane.

Termin local focus odnosi się do fokusa w oknie, niezależnie od tego, czy okno jest aktywne, czy nie.

Jak wchodzić w interakcje z systemem ustawiania ostrości

Ostatnie i najdokładniejsze szczegóły znajdują się w kodzie źródłowym.

Funkcje globalne

Okno members

Unfocus

Jeśli chcesz cofnąć fokus na aktualnie lokalnie skoncentrowanym widżecie, ale nie chcesz nadawać innego fokusa widżetowi, musisz użyć następującego kodu: (napisany jako sposób pisania z poziomu okna)

if (this->nested_focus != NULL) {
  this->nested_focus->SetDirty(this);
  this->nested_focus = NULL;
}

Jeśli jednak okno używa starego nie zagnieżdżonego systemu widgetów, powyższy kod staje się:

if (this->focused_widget != NULL) {
  this->InvalidateWidget(this->focused_widget - this->widget);
  this->focused_widget = NULL;
}