Linie cu linie
KEdit are putine elemente de meniu, asa ca voi acoperi doar o mica parte din ele
astfel incit sa va puteti face o imagine despre cum puteti face asta.
file = new QPopupMenu();
file->insertItem(BarIcon("filenew"),i18n("&New..."),
this, SLOT(file_new()), KStdAccel::openNew());
file->insertItem(BarIcon("fileopen"), i18n("&Open..."),
this, SLOT(file_open()), KStdAccel::open());
menuBar()->insertItem(i18n("&File"), file);
ORIG: setupMenuBar()
Aceasta creeaza meniul File si insereaza doua elemente de meniu:
itemii New si Open. Apoi ataseaza meniul File la bara de meniuri.
Dorim sa stergem aceste linii si sa le inlocuim cu urmatoarele:
KStdAction::openNew(this,SLOT(file_new()),actionCollection());
KStdAction::open(this,SLOT(file_open()),actionCollection());
NOU: setupActions()
Asta este tot. Nu trebuie sa va faceti griji caror meniuri le sint asociate
aceste actiuni si cum sint ele reprezentate vizual. Apelati doar metodele
statice corespunzatoare elementului dumneavoastra si pasati ca argumente SLOTUL
dumneavoastra si o colectie de actiuni si ati terminat.
Acesta este modul in care veti manipula 90% din toate elementele standard.
Elementul "Open Recent" merita o atentie mai deosebita deoarece este un
caz special. Urmatoarele linii de cod arata vechiul mod de tratare al itemului:
recentpopup = new QPopupMenu();
file->insertItem(i18n("Open &Recent..."), recentpopup);
connect(recentpopup, SIGNAL(activated(int)), SLOT(openRecent(int)));
VECHI: "Open Recent"
Aceste trei linii vor fi inlocuite cu urmatoarea:
recent = KStdAction::openRecent(this, SLOT(file_openRecent(const KURL&)),
actionCollection());
NOU: "Open Recent"
Pentru a incarca si salva aceste inregistrari veti avea nevoie de un pointer
catre un obiect KConfig setat pentru un grup adecvat. Acestea sint functiile
ce trebuie apelate:
recent->loadEntries(kc_ptr);
recent->saveEntries(kc_ptr);
Incarcare/Salvare "Open Recent"
Vom reveni asupra acestor lucruri mai tirziu.
Actiuni non-standard
Vom continua parcurgerea metodei setupMenuBar() si vom observa ca
majoritatea elementelor sint elementele standard. Mergem mai departe pina cind
intilnim elementele "Open URL" si "Save To URL". Acestea sint elemente specifice
aplicatiei.
file->insertItem(i18n("Open &URL..."),
this, SLOT(file_open_url()));
file->insertItem(i18n("Save &To URL..."),
this, SLOT(file_save_url()));
VECHI: "Open URL" si "Save To URL"
Asta e singura data cind codul corespunzator actiunilor este mai lung
decit codul original.
(void)new KAction(i18n("Open &URL..."),0,this, SLOT(file_open_url()),
actionCollection(), "file_open_url");
(void)new KAction(i18n("Save &To URL..."),0,this, SLOT(file_save_url()),
actionCollection(), "save_to_url");
NOU: "Open URL" si "Save To URL"
Numele interne ("file_open_url" si "save_to_url") sint cumva arbitrare,
dar va trebui sa retinem ceea ce reprezinta pentru mai tirziu.
Actiuni unice
Un alt exemplu pe care doresc sa-l prezint este folosirea itemilor
ce pot comuta (toggle items).
options->setCheckable(TRUE);
toolID = options->insertItem(i18n("Show &Toolbar"),
this,SLOT(toggleToolBar()));
statusID = options->insertItem(i18n("Show St&atusbar"),
this,SLOT(toggleStatusBar()));
VECHI: statusbar si toolbar
Retineti de asemenea ca acestea au fost validate in mod implicit in constructorul clasei.
Ei bine, vom inlocui aceste linii cu:
KStdAction::showToolbar(this,SLOT(toggleToolBar()),actionCollection());
KStdAction::showStatusbar(this,SLOT(toggleStatusBar()),actionCollection());
NOU: statusbar si toolbar
Elementele vor fi controlate implicit fara ca noi sa fim nevoiti sa
scriem nici o linie de cod. Vom vedea cum se vor schimba functiile de comutare
mai tirziu.
Ultimul exemplu pe care il voi prezenta este meniul "Help".
QString about = i18n(""
"KEdit %1\n\n"
"Copyright 1997-98\n"
"Bernd Johannes Wuebben\n"
"wuebben@kde.org").arg(KEDITVERSION);
menuBar()->insertItem(i18n("&Help"),helpMenu(about));
VECHI: Meniu "Help"
Nu este nici un pericol daca stergeti aceste linii fara sa mai adaugati nimic.
Meniul "Help" este manipulat in mod automat de catre program.
Remarca
In general puteti sterge metoda setupToolBar() definitiv.
Ultimul pas
Toata aceasta creare a "actiunilor" a fost frumoasa si grozava, dar este nefolositoare
daca uitati sa construiti interfata grafica cu utilizatorul (GUI). Acest lucru este
realizat cu urmatoarea metoda:
createGUI();
Crearea GUI
Citeva observatii despre aceasta metoda:
- Trebuie apelata dupa ce ati creat "actiunile". Nu va functiona
daca este apelata inainte de crearea lor.
- Apelati aceasta metoda o singura data.
- Asigurati-va ca ati construit aplicatia cu make install si nu doar cu make -
altfel nu veti observa nici un efect al schimbarilor in UI.
- Numele fisierului folosit este cel al fisierului XML specific aplicatiei.
Daca nu il specificati folosind calea absoluta, el va fi cautat in directorul de date al aplicatiei.
- Daca lasati parametrul fisier necompletat, atunci va fi folosit un fisier denumit
[app-name]ui.rc (asadar in exemplul nostru am omis numele fisierului deoarece avem keditui.rc).
Daca nu exista nici un fisier cu acest nume, doar elementele UI standard
vor fi construite. Acest lucru e la indemina daca nu aveti nici o
"actiune" specifica aplicatiei.
Din nou, trebuie sa apelati metoda createGUI() dupa ce creati
"actiunile" altfel nimic nu se va intimpla!
|