Wiki
Instrukcja integracji klasy TCKontrolkaDaty z Boa Constructorem
[----------- sprawdzone dla Boa 0.6.1 (pod Ubuntu Linux) -----------]
A. W Boa:
* w "Preferences" [menu okna edytora: Windows -> Preferences]
wybierz obiekt "General", a jego własnościach [zakładka "Props"
w oknie inspektora] ustaw opcję InstallBCRTL
* wyjdź z Boa
B. W Twoim systemie:
* w podkatalogu "lib" katalogu, gdzie zainstalowana jest zasadnicza
część WX-Pythona, utwórz podkatalog "bcrtl" i zapewnij w nim
uprawnienia do zapisu użytkownikowi, którego używasz do
uruchamiania Boa, np.:
$ cd /usr/lib/python2.5/site-packages/wx-2.6-gtk2-unicode/wx/lib/
$ sudo mkdir bcrtl
$ sudo chown uzytkownik bcrtl
* do podkatalogu ".boa-constructor/Plug-ins/" katalogu domowego
przekopiuj lub dolinkuj plik "rs_anakonda_boa.plug-in.py", np.:
$ cd /home/uzytkownik/.boa-constructor/Plug-ins
$ ln -s /home/uzytkownik/rs/rs-anakonda/ac25/rs_anakonda_boa.plug-in.py
C. W owym "~/.boa-constructor/Plug-ins/rs_anakonda_boa.plug-in.py":
* dostosuj wartość stałej "SCIEZKA_DO_KLIENTA_ANAKONDY", np.
SCIEZKA_DO_KLIENTA_ANAKONDY = '/home/uzytkownik/rs/rs-anakonda/ac25'
Po ponownym uruchomieniu Boa ikonka nowej klasy powinna być dostępna
w grupie "User". W razie problemów z wykryciem nowego plug-in'u
spróbuj przekopiować plik "rs_anakonda_boa.plug-in.py" do katalogu:
"/usr/share/boa-constructor/Plug-ins/".
TCKontrolkaDaty
* UWAGA WSTĘPNA: w typowej sytuacji sposób działania kontrolki w kodzie definiują argumenty wywołania konstruktora -- na ogół *jedyne*, co dodajemy w kodzie pod wywołaniem konstruktora, to przypięcie kontrolce obsługi zdarzeń (Bind). Np. nie ma potrzeby ustawiać "ręcznie" BestFittingSize na taką samą wartość jak size (już jest ustawiane przez kontrolkę.
* UWAGA TERMINOLOGICZNA: Wszędzie, gdzie w opisach używam określenia "pola", mam na myśli 3 elementy zawartości kontrolki: rok (4-znakowe pole), miesiąc (2-znakowe pole), dzień (2-znakowe pole). W kontrolce pola przedzielone są separatorami (znak '-').
* Tworzenie kontrolki (wywołanie konstruktora):
obiekt_kontrolki = TCKontrolkaDaty() -- gdzie możliwe argumenty (podaję wraz z domyślnymi wartościami), to:
parent,
name,
id,
# wartość domyślna (początkowa):
domyslna = '-1', # '-1' symbolizuje globalną wartość
# domyślną (obecnie ustawiona na pusty napis)
pos = wx.DefaultPosition,
size = wx.Size(85, 22),
# domyślny styl sensowny, więc raczej nie trzeba zmieniać:
style = wx.TE_PROCESS_TAB | wx.TE_PROCESS_ENTER,
# czy i jakie wartości dopisywać przy przeskakiwaniu pustych pól:
# * liczba większa niż 0 to wartość, która będzie dopisywana
# * 0 oznacza, że dopisywanie jest wyłączone
# * -1 (globalne zachowanie domyślne)
# oznacza, że zastosowanie mieć będzie jedna z pozostałych
# wymienionych tu (wyżej i niżej) wartości -- taka, jaka
# została ustawiona w stałych _d_dopisuj... (patrz:
# stałe na początku definicji całej klasy),
# * -2 oznacza, że dopisywana będzie wartość wpisana ostatnio
# w jakąkolwiek kontrolkę daty, a za pierwszym razem
# wartość z aktualnej (dzisiejszej) daty,
# * -3 oznacza, że dopisywana będzie wartość z aktualnej
# (dzisiejszej) daty.
dopisuj_rok = -1, # <- globalne zachowanie domyślne: -2
dopisuj_miesiac = -1, # <- globalne zachowanie domyślne: -2
dopisuj_dzien = -1, # <- globalne zachowanie domyślne: -2
# czy wartości spoza sensownego zakresu automatycznie
# przerabiać na sensowniejsze:
poprawiaj_rok = -1, # <- globalne zachowanie domyślne: 1 # (gdy opcja wł., to np.: 9=>2009, 99 => 1999)
poprawiaj_miesiac = -1, # <- globalne zachowanie domyślne: 0 # (gdy opcja wł.: 1 <= miesiac <= 12)
poprawiaj_dzien = -1, # <- globalne zachowanie domyślne: 0 # (gdy opcja wł.: 1 <= dzien <= 31)
# granice prawidłowej wartości roku (0 -- wyłączone)
# (dot. walidacji oraz dodatkowej reguły dla poprawiania):
min_rok = -1, # <- globalne zachowanie domyślne: 0
max_rok = -1, # <- globalne zachowanie domyślne: 0
# czy pusta kontrolka walidowana jest jako prawidłowa:
pusta_ok = -1, # <- globalne zachowanie domyślne: 1
# czy za pustymi polami wyświetlać separatory:
# (lepiej widać w pustych kontrolkach, że to data)
zawsze_sep = -1, # <- globalne zachowanie domyślne: 1
* UWAGA dot. *poprawionego ustawiania wartości*: jest możliwość inicjowania zawartości kontrolki (argument konstruktora wartosc_domyślna) lub ustawiania wartości w trakcie działania (metoda SetValue) z użyciem znaków-symboli:
'd' -- oznacza podstawienie wartości danego pola z aktualnej (dzisiejszej) daty,
'*' -- oznacza podstawienie wartości danego pola wg ustawień dopisywania dla danej kontrolki.
Na przykład, jeżeli mamy dziś 21 lipca 2009:
'd-d-d' -> 2009-07-21
'd-d' -> '2009-07-'
'd' -> '2009-'
## 3. Uwagi dot. testowania i funkcjonalności kontrolki ##
* Do próbowania funkcjonalności kontrolki (z różnymi opcjami konstruktora) przyda się programik ac25/demo-kontrolki-daty.py.
* Kontrolka powinna być wygodniejsza w obsłudze, niż poprzednie rozwiązanie, bowiem:
* pewne subtelne szczegóły dot. wpisywania wartości, przesuwania się kursora itp. zostały nieco inaczej rozwiązane,
* kontrolka oferuje opcje (patrz opis parametrów powyżej oraz po części objaśnienia w programuku demo-kontrolki-daty.py), dzięki którym można dostosować jej zachowanie do naszych potrzeb, zarówno ogólnie (ergonomia obługi), jak i dla poszczególnych okien, jeżeli zajdzie taka potrzeba (np. potrzeba zasugerowania konkretnej daty lub oznaczenie pustej daty jako nieprawidłowej).
* Warto w czasie testowania zastanowić się, jakie opcje wybrać ostatecznie jako domyślne (przed rozpoczęciem globalnego zastępowania nową kontrolką starego rozwiązania).
## 5. Klawiszologia ##
' ' lub '-', lub '.', lub ',', lub '/'
- przeskok do następnego pola w kontrolce
(jeżeli pole jest puste lub zawiera nieprawidłową treść, zostanie
wypełnione zgodnie z zachowaniem ustawionym w atrybucie
dopisuj_<nazwa pola>; patrz: argumenty metody __init__())
'd' - bieżąca data (dzisiaj) - rok, miesiąc, dzień
'm' - bieżący (dzisiejszy) miesiąc - bez zmieniania wpisanego dnia
'r' - bieżący (dzisiejszy) rok - bez zmieniania wpisanego miesiąca i
dnia
'p' - początek miesiąca (tego, który jest w kontrolce)
'k' - koniec miesiąca (tego, który jest w kontrolce)
'c' - cofnij o miesiąc (względem zawartości kontrolki)
'n' - do przodu o miesiąc (względem zawartości kontrolki)
Plus stardardowe klawisze kasowania, zaznaczania, kopiowania,
wklejania...