Pagina principala
Informatii
Internationalizarea
pROgrame KDE/Qt
Download
Documentatii
Despre LKR
Contact
Resurse
Harta site-ului

Tutorial interfata grafica XML KDE


   Kurt Granroth
   5 Septembrie 2000

Note suplimentare

Activarea/dezactivarea actiunilor

Acum deoarece ati optat pentru folosirea obiectelor KAction, veti descoperi ca activarea si dezactivarea este foarte simpla; nu mai este necesar sa memorati toate locurile in care aveti nevoie sa activati/dezactivati un element (in special cind actiunea dumneavoastra poate fi invocata din trei locuri diferite, de exemplu din bara cu unelte, meniu si dintr-un un meniu contextual!).

Sint doua modalitati de a dezactiva sau activa o actiune. Prima modalitate implica salvarea unui pointer (ar trebui sa faceti acest pointer o data membru astfel incit sa-l puteti accesa prin intermediul a diferite functii membru).


 KAction *open_action =
   KStdAction::open(this, SLOT(file_open()), actionCollection());

 ...

 open_action->setEnabled(false);

A doua modalitate este obtinerea unui pointer numai atunci cAnd este necesar:


 KAction *open_action =
   actionCollection()->action(KStdAction::stdName(KStdAction::open));
 open_action->setEnabled(false);

Dar asta poate deveni dificil cind aveti un numar mare de KAction-uri de tratat. Din aceasta cauza veti dori sa folositi "schimbarile de stare ale aplicatiei" (application state changes).

Schimbarile de stare

Schimbarile de stare sint o cale de a preciza ce actiuni trebuie sa fie activate sau dezactivate in functie de starea in care se afla aplicatia ("un document nou a fost creat" sau "documentul a fost modificat" sau "utilizatorul a selectat ceva"). Aceste "stari" sint doar niste siruri de caractere neformatate pe care sinteti liber sa le definiti asa cum credeti de cuviinta. Iata un exemplu:


<State name="file_changed">
  <enable>
    <Action name="file_save"/>
    <Action name="edit_undo"/>
  </enable>
</State>

<State name="have_selection">
  <enable>
    <Action name="edit_cut"/>
    <Action name="edit_copy"/>
  </enable>
  <disable>
    <Action name="edit_paste"/>
  </disable>
</State>

Pentru a folosi aceste stari trebuie sa folositi metoda KMainWindow::stateChanged() (mostenita din KXMLGUIClient) astfel:


stateChanged("file_changed");

Aceasta declaratie va activa cele doua actiuni "file_save" si "edit_undo". KMainWindow::stateChanged() de asemenea accepta, optional, un al doilea argument care va indica daca starea trebuie sa fie "inversata", asta insemnind ca actiunile de activat vor fi dezactivate si actiunile de dezactivat vor fi activate. De exemplu:


stateChanged("file_loaded", StateReverse);

va activa "edit_paste" si va dezactiva "edit_cut" si "edit_copy".

Aceasta metoda usureaza lucrul cu activarea/dezactivarea KAction la nivel de aplicare. Exista de asemenea slotul KMainWindow::slotStateChanged() la care puteti conecta semnalele altor componente ale aplicatiei dumveavoastra.

Crearea meniurilor contextuale

Pentru a creea un meniu contextual, trebuie sa definiti modul de dispunere a itemilor de meniu in fisierul rc. In exemplul urmator avem numele standard pentru actiunea Open File si numele unui obiect KAction definit de programatorul aplicatiei:


<Menu name="popup">
  <Action name="file_open"/>
  <Action name="myaction"/>
</Menu>

Urmatoarea bucata de cod arata cum sa invocam un meniu de tip popup, dind un QPoint "aPoint" la care sa fie afisat meniul:


QPopupMenu *pop = (QPopupMenu *)factory()->container("popup", this);
pop->popup(aPoint);

Configurarea proprietatilor actiunii

Uneori poate doriti sa configurati modul in care o actiune standard se manifesta in aplicatia dumneavoastra. Aici este un exemplu dintr-un fisier rc care arata cum sa schimbati iconita pentru actiunea standard New File:


<ActionProperties>
  <Action name="file_new" icon="my_new_icon"/>
</ActionProperties>

Vedeti si functia KStdAction::stdName() din fisierul kdelibs/kdeui/kstdaction.cpp pentru o lista cu numele actiunilor standard.

Aici este un exemplu despre cum se poate schimba textul afisat (acest lucru trebuie sa se faca in fisierul sursa si nu in fisierul rc astfel incit textul va fi "internationalizat" in mod corespunzator):


newAction = KStdAction::openNew(this, SLOT(file_new()),
              actionCollection());
newAction->setText(i18n("New Foo"));

Folosirea metodei KKeyDialog::configureKeys

Daca ati folosit un KAccel in codul dumneavoastra si l-ati eliminat ca sa aflati apoi ca aveti nevoie de un obiect KAccel pentru a apela KKeyDialog::configureKeys, codul urmator va poate ajuta:


KKeyDialog::configureKeys(actionCollection(), xmlFile());

Adaugarea separatorilor

Daca doriti sa adaugati un separator invizibil in bara de unelte sau bara de meniuri, puneti aceasta in locul adecvat din fisierul XML:


<Separator/>

Pentru un separator vizibil folositi urmatoarea declaratie:


<Separator lineSeparator="true"/>



Traducere de Daniel Ionescu. Adaptare de Claudiu Costin.