[RIJEŠENO] KDE - Kako dodati novi plasma widget?
Moderator/ica: Moderatori/ce
Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?
prelaskom na openSUSE , leap 42.2, odustao sam od ove putanje , preko KDESRC-BUILD , naprosto sam pokupio 'project template' kako ga nudi KDEVELOP i na taj način manje brinem o usklađenosti verzija.
ajmo napraviti inventuru, kinfocenter daje
++ PLASMA 5.8.2
++ KF5 5.26.0
++ Qt_5.6.1
ajmo napraviti inventuru, kinfocenter daje
++ PLASMA 5.8.2
++ KF5 5.26.0
++ Qt_5.6.1
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?
DISCLAIMER: iskusni sam programer (vidi potpis: preko 30 godina), ali u ovom području - plasma appleti - sam početnik
ajmo dodati python u torbu s alatima za izradu plasma appleta.
++ IDE: dopao mi se pyCharm alat i toplo ga preporučam !
++ PyQt5 dobra poveznica između Qt UI te python
ajmo dodati PyQt5.
++ prvi pokušaj preko repozitorija, koji dodaje paket python3-qt5 se slomio na zahtijevu da instaliram Qt_5.7
neće moći, s tim sam se opekao, ajmo drugim putem
++ na stranici autora, riverbankcomputing.com , postoji dobra uputa
http://pyqt.sourceforge.net/Docs/PyQt5/ ... rom-source
skinuo sam oba kompresirana paketa ( sip te pyqt5 ) otpakirao, kompajlirao i instalirao prema uputi, najprije SIP
to je prošlo bez problema, ali kad sam zadao python configure.py naredbu u PyQt5 direktoriju , dobijem ovakav odgovor
pojavi se nekoliko rezultata, ali ova dva su bitna
dalje ide normalno
zapisat ću i ovaj link, popis klasa (biblija) u pyqt5 paketu
popis klasa pyQt5
ajmo dodati python u torbu s alatima za izradu plasma appleta.
++ IDE: dopao mi se pyCharm alat i toplo ga preporučam !
++ PyQt5 dobra poveznica između Qt UI te python
ajmo dodati PyQt5.
++ prvi pokušaj preko repozitorija, koji dodaje paket python3-qt5 se slomio na zahtijevu da instaliram Qt_5.7
neće moći, s tim sam se opekao, ajmo drugim putem
++ na stranici autora, riverbankcomputing.com , postoji dobra uputa
http://pyqt.sourceforge.net/Docs/PyQt5/ ... rom-source
skinuo sam oba kompresirana paketa ( sip te pyqt5 ) otpakirao, kompajlirao i instalirao prema uputi, najprije SIP
Kod: Označi sve
python configure.py
make
sudo make installočito je da postoje dvije verzije: qt4 i qt5, samo trebamo naći ispravne putanje i dojaviti preko --qmake flaga, kako je rečeno. kako se nađe fajl na linuxu. znam da ide find ... nešto ali ajmo mi to zapisati , sutra ću opet zaboravitiError: PyQt5 requires Qt v5.0 or later. You seem to be using v4.8.6. Use the --qmake flag to specify the correct version of qmake.
Kod: Označi sve
find / -xdev -name qmake 2>/dev/nullsad može proći konfiguracija pyQt5 , ovako/usr/lib64/qt5/bin/qmake
/usr/bin/qmake
Kod: Označi sve
python configure.py --qmake=/usr/lib64/qt5/bin/qmakeKod: Označi sve
make
sudo make installpopis klasa pyQt5
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?
XMLGUI je naziv za sekciju KF5 koja dodaje elemente forme - ovdje se to zove widget, u plasmi je sve widget - u toku izvođenja aplikacije. dizajner snima te podatke u rc fajl, koji mora biti dostupan za vrijeme izvođenja. to je lako za reći, ali nije jednostavno shvatiti kako ???
koristim IDE Kdevelop koji sve direktive za kompajler i linker stavlja u CMAKE fajl. recimo dodamo ovakve direktive u CMAKE , projekt se zove 'tapete'
install direktiva u suradnji s CMAKE_INSTALL_PREFIX direktivom kreira dva foldera: bin te share, u prvi ide sama aplikacija, u drugi ide rc fajl s xml opisom kontrola koje dodajete na formu. kad otvaram novi projekt u KDevelop definiram CMAKE prefix u $HOME folderu, što je normalno za razvojni ciklus projekta
sada pokrenemo aplikaciju u KDevelop-eru , ali na formi nema kontrola koje sam dodao ?! ako odem u bin ili share foldere vidim da je sve na svom mjestu, ali KF5 još uvijek ne zna gdje se nalazi rc fajl ?!
rješenje je u konfiguraciji lančera aplikacije. na KDeveloper meni RUN > CONFIGURE LAUNCHES potrebno je dodati environment varijablu

evo sada cjeline - kako složim sve elemente konfiguracije lančera za aplikaciju u KDEVELOP

koristim IDE Kdevelop koji sve direktive za kompajler i linker stavlja u CMAKE fajl. recimo dodamo ovakve direktive u CMAKE , projekt se zove 'tapete'
Kod: Označi sve
install(TARGETS tapete ${INSTALL_TARGETS_DEFAULT_ARGS})
install(FILES tapeteui.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/tapete)install direktiva u suradnji s CMAKE_INSTALL_PREFIX direktivom kreira dva foldera: bin te share, u prvi ide sama aplikacija, u drugi ide rc fajl s xml opisom kontrola koje dodajete na formu. kad otvaram novi projekt u KDevelop definiram CMAKE prefix u $HOME folderu, što je normalno za razvojni ciklus projekta
sada pokrenemo aplikaciju u KDevelop-eru , ali na formi nema kontrola koje sam dodao ?! ako odem u bin ili share foldere vidim da je sve na svom mjestu, ali KF5 još uvijek ne zna gdje se nalazi rc fajl ?!
rješenje je u konfiguraciji lančera aplikacije. na KDeveloper meni RUN > CONFIGURE LAUNCHES potrebno je dodati environment varijablu
Kod: Označi sve
XDG_DATA_DIRS=$HOME/share:$XDG_DATA_DIRS 
evo sada cjeline - kako složim sve elemente konfiguracije lančera za aplikaciju u KDEVELOP

- Executable = putanja u izvornom projektu , projekt se nalazi na putanji $HOME/projects
- Working Directory = $HOME odnosno kamo ide instalacija (bin i share subfolderi se tamo dodaju)
- Environment = taj detalj smo vidjeli na prethodnoj slici
- Dependencies = nepotrebno za rc fajl ali ne škodi
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?
sviđa mi se kako fejs šalje obavijesti o aktivnosti na KDE desktop, u blizini 'system tray' javi se mali 'pop-up' sa slikom korisnika i porukom. možemo li tu opciju dodati u našu torbu s alatima ?
danas sam uspio nešto slično, ili barem na tragu toga

za ovu poruku sam koristio klasu KStatusNotifierItem , zapravo metodu showMessage navedene klase. Ikona se poziva imenom ( dakle mora biti u temi ) a tekst je slobodan
nekoliko je zamjerki ovom alatu - javlja se desno dole , a ne pored 'sys-tray' - na mom ekranu panel sa 'sys-tray' je na lijevom rubu i tamo se obavijest bolje primjeti ( vrlo subjektivno , ali tako je ). najveća zamjerka je što koristi gotove ikone, dakle ne bi mogao pokazati sliku avatara, kako to radi fejs
... korak po korak, zadovoljan sam napretkom !
danas sam uspio nešto slično, ili barem na tragu toga

za ovu poruku sam koristio klasu KStatusNotifierItem , zapravo metodu showMessage navedene klase. Ikona se poziva imenom ( dakle mora biti u temi ) a tekst je slobodan
nekoliko je zamjerki ovom alatu - javlja se desno dole , a ne pored 'sys-tray' - na mom ekranu panel sa 'sys-tray' je na lijevom rubu i tamo se obavijest bolje primjeti ( vrlo subjektivno , ali tako je ). najveća zamjerka je što koristi gotove ikone, dakle ne bi mogao pokazati sliku avatara, kako to radi fejs
... korak po korak, zadovoljan sam napretkom !
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?
KF5 obavijesti u balončiću pored 'sys-tray' , drugi pokušaj

danas sam 'nacrtao' ovaj balončić i sad je to već sasvim zadovoljavajuće !
klasa se zove KPassivePopup , metoda se zove message možeš podesiti sve što želiš

danas sam 'nacrtao' ovaj balončić i sad je to već sasvim zadovoljavajuće !
klasa se zove KPassivePopup , metoda se zove message možeš podesiti sve što želiš
- popupStyle = Baloon ili Boxed
- caption = tekst poruke
- text = tekst u footer-u
- pixmap = slika ( jpg, png ... šta ti srce poželi )
- parent = pointer
- timeout = vrijeme, ako staviš 0 onda se ne miče s ekrana dok korisnik ne klikne
- point(x,y) = gdje će se pojaviti na ekranu
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?
Nije li PySide bolja opcija i s tehničke i s licenčne strane
http://askubuntu.com/questions/140740/s ... qt-project
https://wiki.qt.io/PySide-QtQuick-Tutorials
http://askubuntu.com/questions/140740/s ... qt-project
https://wiki.qt.io/PySide-QtQuick-Tutorials
Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?
vrijedna informacija hrvoje - HVALAhrvooje je napisao/la:Nije li PySide bolja opcija i s tehničke i s licenčne strane
http://askubuntu.com/questions/140740/s ... qt-project
https://wiki.qt.io/PySide-QtQuick-Tutorials
nisam nikad čuo za PySide, što ne čudi ako znaš da sam s python na Vi ( vi kao gospodine nepoznati, a ne kao vi linux editor ).
originalni widget koji me potakao na ovaj projekt jest bio u pythonu , ali sam u međuvremenu našao ovu stranicu za OAuth (najvažnija kvaka) koja otvara mnoga vrata (twiter, fejs) :
https://oauth.net/code/
na toj stranici je lijepo navedeno da postoji Qt projekt na GitHub stranici koji se odlično uklapa u moju priču:
https://github.com/pipacs/o2
o tome kako se koristi OAuth upravo učim, kad naučim, napisat ću ovdje kratku uputu. originalna ideja jest bila da 'bekend' servis bude u python, a 'fensi' widget da odradi QML , ali sam se zaželio dobrog starog C++ pa ću cijeli projekt napisati uz pomoć KF5 klasa.
a što se tiće licenci, tu sam potpuno izgubljen, ali ne marim previše - ovo sam izabrao kao rekreaciju, i ne razmišljam o prodaji, kad projekt bude gotov stavit ću ga negdje ( valjda GitHub )
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?
Hvala tebi na dijeljenim informacijama. Ja se učim Pythona pa možda i za mene bude nešto korisno, npr. kako napraviti svoj prvi widget. U Qt-u sam napravio par svojih programčića pri učenju Pythona, a PySide izabrao, jer je jednostavno za njega u tom trenutku bilo tutorijala. Inače, dokumentacija im je odlična
http://srinikom.github.io/pyside-docs/PySide/QtGui/
http://srinikom.github.io/pyside-docs/PySide/QtGui/
Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?
uh uh koji gadan bug u CMAKE
nakon što kopiram cijelu mapu /src od gore spomenutog projekta za OAuth u svoj projekt dobijem grešku
https://stackoverflow.com/questions/197 ... ith-inc-sr
od svih predloženih 'obilaznica' meni se čini najbrži izlaz - NE KORISTIM sub-direktorije u CMAKE projektu - naprosto kopiram sve (cpp / h) fajlove u jedan (zajednićki) folder s glavnim projektom
DODATAK:
bizarni detalj, nakon premetanja svih fajlova, zaboravio sam CLEAN prije BUILD - greška stoji, frka-panika he he
sad to više nikad ne preskačem, prvo Clean onda Build !!!
ovo je bilo bolno uh uh ( qmake nema takvih problema, ali KF5 radi s CMAKE )
nakon što kopiram cijelu mapu /src od gore spomenutog projekta za OAuth u svoj projekt dobijem grešku
nekoliko je sajtova koji dobro opisuju problem, recimo ovaj ovdjecmake fails with undefined reference to 'vtable in ...
https://stackoverflow.com/questions/197 ... ith-inc-sr
od svih predloženih 'obilaznica' meni se čini najbrži izlaz - NE KORISTIM sub-direktorije u CMAKE projektu - naprosto kopiram sve (cpp / h) fajlove u jedan (zajednićki) folder s glavnim projektom
DODATAK:
bizarni detalj, nakon premetanja svih fajlova, zaboravio sam CLEAN prije BUILD - greška stoji, frka-panika he he
sad to više nikad ne preskačem, prvo Clean onda Build !!!
ovo je bilo bolno uh uh ( qmake nema takvih problema, ali KF5 radi s CMAKE )
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.
Re: [RIJEŠENO] KDE - Kako dodati novi plasma widget?
postigao sam osnovnu funkcionalnost koju nudi OAuth protokol
rješenje je došlo u paketu s alatom koji sam naveo ranije - qt projekt s GitHub. još uvijek nisam shvatio kako trajno pohranim autorizacijski token i za sada moram svaki put proći cijeli ovaj ciklus
no dobro , ovo ću još provjeriti ... evo nekoliko uputa za korištenje
++ flickr koristi OAuth ver 1.0 stoga je od cijelog projekta kojeg sam skinuo s GitHub najkorisnija klasa O1. za iniciranje autorizacije ( kako je gore opisano ) dovoljno je ovo
sve drugo se nalazi u paketu s GitHub projekta ! ovaj slot onOpenBrowser naprosto okida ovu naredbu
i to je to, aplikacija sada ima spremljen 'token i secret' za ovu sesiju. ako želite provjeriti da li je sve ispravno, jednostavno pozovemo flickr.test.login ili bilo koji drugi API poziv prema Flickr servisu. evo kako izgleda poziv API metode
ovaj URL upučuje na metodu upita REST ( običan http GET ili POST ), osim toga postoji opcija XMLRPC , također SOAP
metoda upita REST je jedina podržana u projektu koji sam skinuo s GitHub - autor AKOS POLSTER - držimo se jednostavnih metoda !
ovdje vidimo kako se slažu parametri za običan http, jasno je da ovdje zapravo pišemo &method=flickr.test.login
još jedan obavezan parametar, api-key naše aplikacije, ovdje smo napisali &api-key=stvarni-api-key-koji-dobijemo-na-flickr obavezan kod svakog poziva
ovdje slažemo naše parametre zajedno s linkom u običan HTTP header, koristimo metodu POST objekta requestor (kako ga definira naš junak AKOS ). u naredbi connect ( reply , SIGNAL() , dole , SLOT() ) ovaj pointer dole naprosto je THIS pointer na klasu . imao sam sreće da sam radio u multijezičnim projektima, i uvijek sam prkosio s hrvatskim riječima ( unatoč molbi i preklinjanju da koristim engleski). najslađa mi je zamka korištenje hrvatske riječi KOJI za index he he
s tim da sam ova tri objekta definirao na nivou klase, pa ih ne moram inicirati neprestano
osnovni 'engine' Flickr klijenta je spreman. pali pilu !
rješenje je došlo u paketu s alatom koji sam naveo ranije - qt projekt s GitHub. još uvijek nisam shvatio kako trajno pohranim autorizacijski token i za sada moram svaki put proći cijeli ovaj ciklus
- LINK naredba u mojoj aplikaciji otvori internet preglednik s Flickr stranicom
- u pregledniku se prijavim kao redovni korisnik
- potvrdim da mi je aplikacija poznata i odobravam pristup mojim podacima
- preglednik me automatski prebaci na localhost s tokenom i secret kodom za autorizaciju
- moja aplikacija pokupi te podatke za autorizaciju iz preglednika i sesija može započeti
- sada mogu slati autorizirane upite prema flickr servisu
no dobro , ovo ću još provjeriti ... evo nekoliko uputa za korištenje
++ flickr koristi OAuth ver 1.0 stoga je od cijelog projekta kojeg sam skinuo s GitHub najkorisnija klasa O1. za iniciranje autorizacije ( kako je gore opisano ) dovoljno je ovo
Kod: Označi sve
o1 = new O1(this);
o1->setClientId(O1_KEY);
o1->setClientSecret(O1_SECRET);
Kod: Označi sve
o1->setRequestTokenUrl(QUrl("https://www.flickr.com/services/oauth/request_token"));
o1->setAuthorizeUrl(QUrl("https://www.flickr.com/services/oauth/authorize?perms=write"));
o1->setAccessTokenUrl(QUrl("https://www.flickr.com/services/oauth/access_token"));
Kod: Označi sve
connect(o1, SIGNAL(openBrowser(QUrl)), this, SLOT(onOpenBrowser(QUrl)));
o1->link();
sve drugo se nalazi u paketu s GitHub projekta ! ovaj slot onOpenBrowser naprosto okida ovu naredbu
Kod: Označi sve
QDesktopServices::openUrl(url);
Kod: Označi sve
QUrl url = QUrl("https://www.flickr.com/services/rest/");
QList<O0RequestParameter> reqParams = QList<O0RequestParameter>();
metoda upita REST je jedina podržana u projektu koji sam skinuo s GitHub - autor AKOS POLSTER - držimo se jednostavnih metoda !
Kod: Označi sve
QByteArray paramName1("method");
QString mes1 = QString("flickr.test.login");
reqParams << O0RequestParameter(paramName1, mes1.toLatin1());
Kod: Označi sve
QByteArray paramName2("api-key");
QString mes2 = QString(O1_KEY);
reqParams << O0RequestParameter(paramName2, mes2.toLatin1());
Kod: Označi sve
QByteArray postData = O1::createQueryParameters(reqParams);
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, O2_MIME_TYPE_XFORM);
QNetworkReply *reply = requestor->post(request, reqParams, postData);
connect(reply, SIGNAL(finished()), dole, SLOT( flikResponse() ) );
ovdje slažemo naše parametre zajedno s linkom u običan HTTP header, koristimo metodu POST objekta requestor (kako ga definira naš junak AKOS ). u naredbi connect ( reply , SIGNAL() , dole , SLOT() ) ovaj pointer dole naprosto je THIS pointer na klasu . imao sam sreće da sam radio u multijezičnim projektima, i uvijek sam prkosio s hrvatskim riječima ( unatoč molbi i preklinjanju da koristim engleski). najslađa mi je zamka korištenje hrvatske riječi KOJI za index he he
s tim da sam ova tri objekta definirao na nivou klase, pa ih ne moram inicirati neprestano
Kod: Označi sve
O1 *o1;
QNetworkAccessManager *manager;
O1Requestor *requestor;
'81: ZX81 '83:ZX spectrum '85: Apple IIe '86:C-64 *** '87:PC-XT *** '88:PC-AT *** '90:386 *** 'itd.