OPEN SOURCE


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...