abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

9.12. 20:11 | Nová verze

Byl vydán Debian 9.3, tj. třetí opravná verze Debianu 9 s kódovým názvem Stretch a Debian 8.10, tj. desátá opravná verze Debianu 8 s kódovým názvem Jessie. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 9 a Debianu 8 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

Ladislav Hagara | Komentářů: 0
9.12. 00:44 | Nová verze

Po 6 měsících vývoje od vydání verze 0.13.0 byla vydána verze 0.14.0 správce balíčků GNU Guix a na něm postavené systémové distribuce GuixSD (Guix System Distribution). Na vývoji se podílelo 88 vývojářů. Přibylo 1 211 nových balíčků. Jejich aktuální počet je 6 668. Aktualizována byla také dokumentace.

Ladislav Hagara | Komentářů: 2
8.12. 21:33 | Nová verze

Po půl roce vývoje od vydání verze 5.9 byla vydána nová stabilní verze 5.10 toolkitu Qt. Přehled novinek na wiki stránce. Současně byla vydána nová verze 4.5.0 integrovaného vývojového prostředí (IDE) Qt Creator nebo verze 1.10 nástroje pro překlad a sestavení programů ze zdrojových kódů Qbs.

Ladislav Hagara | Komentářů: 0
7.12. 11:11 | Komunita

Naprostá většina příjmů Mozilly pochází od výchozích webových vyhledávačů ve Firefoxu. Do konce listopadu 2014 měla Mozilla globální smlouvu se společností Google. Následně bylo místo jedné globální smlouvy uzavřeno několik smluv s konkrétními vyhledávači pro jednotlivé země. V USA byla podepsána pětiletá smlouva s vyhledávačem Yahoo. Dle příspěvku na blogu Mozilly podala společnost Yahoo na Mozillu žalobu ohledně porušení této

… více »
Ladislav Hagara | Komentářů: 0
7.12. 05:55 | Zajímavý článek

V Londýně probíhá konference věnovaná počítačové bezpečnosti Black Hat Europe 2017. Průběžně jsou zveřejňovány prezentace. Videozáznamy budou na YouTube zveřejněny o několik měsíců. Zveřejněna byla například prezentace (pdf) k přednášce "Jak se nabourat do vypnutého počítače, a nebo jak v Intel Management Engine spustit vlastní nepodepsaný kód". Dle oznámení na Twitteru, aktualizace vydaná společností Intel nevylučuje možnost útoku.

Ladislav Hagara | Komentářů: 5
7.12. 04:44 | Komunita

Virtualizační nástroj GNOME Boxy ve Fedoře 27 umožňuje jednoduše stáhnout a nainstalovat Red Hat Enterprise Linux, který je pro vývojáře zdarma. Vývojová verze GNOME Boxy již umožňuje jednoduše stáhnout a nainstalovat další linuxové distribuce. Ukázka na YouTube. Seznam distribucí a jejich verze, nastavení a cesty k ISO obrazům je udržován v knihovně a databázi libosinfo (GitLab).

Ladislav Hagara | Komentářů: 0
7.12. 03:33 | Nová verze

Google Chrome 63 byl prohlášen za stabilní (YouTube). Nejnovější stabilní verze 63.0.3239.84 tohoto webového prohlížeče přináší řadu oprav a vylepšení. Vylepšeny byly také nástroje pro vývojáře. Opraveno bylo 37 bezpečnostních chyb.

Ladislav Hagara | Komentářů: 9
6.12. 22:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 147. brněnský sraz, který proběhne v pátek 15. prosince od 18:00 hodin v restauraci Severka na rohu Tučkové a Zahradníkové.

Ladislav Hagara | Komentářů: 0
6.12. 22:33 | Komunita

V roce 2013 byl představen projekt Debsources, jehož cílem bylo a je poskytnout webové rozhraní ke zdrojovým kódům balíčků obsažených v Debianu. Projekt doteď běžel na doméně debian.net. Dnes bylo oznámeno, že projekt byl přesunut na oficiální infrastrukturu Debianu. Služba Debian Sources nově běží na doméně debian.org. V plánů je řada vylepšení. Již dnes je ke službě k dispozici API a procházet lze také patche a licence.

Ladislav Hagara | Komentářů: 0
6.12. 05:55 | IT novinky

Hodnota Bitcoinu, decentralizované kryptoměny, překonala hranici 12 000 dolarů. Před týdnem byla překonána hranice 10 000 dolarů [reddit].

Ladislav Hagara | Komentářů: 153
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (8%)
 (1%)
 (1%)
 (1%)
 (75%)
 (14%)
Celkem 943 hlasů
 Komentářů: 45, poslední 1.12. 19:00
    Rozcestník

    Vytváření modulů pro KMyMoney

    6. 12. 2010 | Petr Bravenec | Programování | Návody | 2372×

    V dalším díle seriálu se podíváme na to, jak si můžete naprogramovat jednoduchý modul do KMyMoney.

    Obsah

    Co budeme vyrábět

    link

    V tomto článku se pokusím vysvětlit, jak vytvořit jednoduchý modul pro domácí účetníctví KMyMoney. U čtenářů předpokládám znalost programování v C++, výhodou je znalost Qt (na AbcLinuxu vycházel/vychází seriál o knihovně Qt) a případná znalost programování pro platformu KDE. V článku nebudu zacházet do přílišných detailů, protože předpokládám, že případní zájemci o tvorbu modulů v KMyMoney nebudou naprostí programátorští zelenáči.

    Co bude náš modul dělat

    link

    Ukázkový modul by neměl být příliš složitý. Vytvoříme tedy jednoduchý modul, který bude umět otevřít dokument spojený s příslušnou transakcí v peněžním deníku – například fakturu. Transakci budeme identifikovat podle čísla dokladu (při vydávání faktur určuje číslo faktury účtující, u přijatých faktur jsme odkázáni na vydavatele faktury).

    Máme-li faktury uložené v pdf, můžeme do nastavení napsat například:

    okular /home/uzivatel/Dokumenty/Faktury/Faktura-%1.pdf

    Parametr %1 se nahradí číslem dokladu z transakce v KMyMoney a výsledné jméno souboru se pak použije jako parametr pro aplikaci okular.

    Abychom dosáhli požadované funkčnosti, potřebujeme ve skutečnosti vyrobit dva provázané moduly – jeden modul se bude starat o nastavení (cesta k uloženým dokumentům), druhý modul se bude starat o fungování – spuštění požadované akce. Nastavení najdeme v menu Nastavení - Nastavení KMyMoney - Moduly, akci samotnou pak v kontextovém menu transakce a v menu Transakce. Akci samotnou bude možné spustit pouze v případě, že vybraná transakce má vyplněné číslo dokladu, jinak nebude akce povolená.

    Struktura modulu

    link

    Nejsem žádný velký programátor, natožpak pro KDE. Naštěstí pro vytvoření takto jednoduchého modulu není nutné nic složitého studovat, stačí se podívat do jiných modulů a prostě opsat, co už je hotové. Další informace proto mohou být poněkud nepřesné, důležité však je, že to funguje.

    Jednotlivé části modulu jsou různě pojmenované. Výkonný modul používá prefix kmm_, nastavovací modul pak kcm_kmm_ - podle těchto předpon můžete identifikovat v adresáři /usr/lib/kde moduly pro KMyMoney. Náš modul bude tvořen dvěma soubory: kmm_openattachedfile.so a kcm_kmm_openattachedfile.so.

    Každý modul má vlastní adresář ve stromu zdrojových tvarů v kmymoney/kmymoney/plugins. V adresáři najdeme několik souborů (názvy beru z už hotového modulu):

    • CMakeLists.txt
    • Výkonná část modulu

      link
    • kmm_openattachedfile.desktop - popis služby.
    • kmm_openattachedfile.rc - umístění akce v menu
    • openattachedfile.cpp - zdrojový tvar vlastního modulu
    • openattachedfile.h - hlavičkový soubor modulu
    • Nastavení modulu

      link
    • kcm_kmm_openattachedfile.desktop - popis služby pro nastavení
    • kcm_kmm_openattachedfile.ui - nastavovací formulář
    • kcm_openattachedfile.cpp - zdrojový tvar nastavení modulu
    • kcm_openattachedfile.h - hlavičkový soubor nastavení modulu
    • pluginsettings.kcfg - xml soubor pro tvorbu rc souboru (uložení nastavení)
    • pluginsettings.kcfgc - předpis pro přeložení pluginsettings.kcfg

    Výkonná část modulu

    link

    Vlastní objekt modulu je deklarován v hlavičkovém souboru openattachedfile.h. Měl by být potomkem třídy KMyMoneyPlugin::Plugin. Protože se jedná o klasický QObject, musíte v hlavičkovém souboru uvést i makro Q_OBJECT. Modul tak může obsahovat různé sloty, které můžete napojit na signály generované v KMyMoney.

    V souboru openattachedfile.cpp najdete vlastní zdrojový tvar akce. Po nezbytných hlavičkách a includech následuje povinné "byl jednou jeden král", kterým se zaregistruje modul v KDE (KGenericFactory, K_EXPORT_COMPONENT_FACTORY atd). Při opisování dbejte pečlivě na to, abyste přepsali všechna místa vlastními řetězci a názvy. Úvod pohádky pokračuje i v konstruktoru.

    http://api.kde.org/4.x-api/kdelibs-apidocs/kdecore/html/classKGenericFactory.html
    http://kmymoney2.sourceforge.net/kmymoney2-api/html/classKMyMoneyPlugin_1_1Plugin.html

     
    typedef KGenericFactory openattachedfileFactory;
     
    K_EXPORT_COMPONENT_FACTORY(kmm_openattachedfile, openattachedfileFactory("kmm_openattachedfile"))
     
    /**
     * Konstruktor pluginu
     * Přidává akci do menu (podrobnosti jsou v kmm_openattachedfile.rc)
     * Propojuje vytvořenou akci v menu se slotem v pluginu
     */
    KMMOpenAttachedFilePlugin::KMMOpenAttachedFilePlugin(QObject *parent, const QStringList&)
        : KMyMoneyPlugin::Plugin(parent, "Open Attached File" /* Musí být shodné s  X-KDE-PluginInfo-Name */) {
     
      setComponentData(openattachedfileFactory::componentData());
      setXMLFile("kmm_openattachedfile.rc");
    

    V konstruktoru dále vytvoříme akci a napojíme ji na náš slot. Dále propojíme sloty slotPlug a slotUnPlug. Při zasunutí modulu se propojují další sloty se signály generovanými aplikací KMyMoney. Netuším, jestli se dají tyto sloty a signály propojit i v konstruktoru – zde jsem se nechal plně inspirovat předlohou, ze které jsem opisoval (modul printcheck). Předpokládám ale, že modul je možné propojit se signály KMyMoney až po zasunutí proto, že při vytvoření (volání konstruktoru) není ještě vytvořené prostředí KMyMoney a funkce viewInterface() by vrátila neužitečnou hodnotu. Chcete-li experimentovat, můžete.

     
      m_action = actionCollection()->addAction("openattachedfile", this, SLOT(slotOpenAttachedFile()));
      m_action->setText(i18n("Open Attached File"));
      m_action->setEnabled(false);
     
      connect(KMyMoneyPlugin::PluginLoader::instance(), SIGNAL(plug(KPluginInfo*)), 
                this, SLOT(slotPlug(KPluginInfo*)));
      connect(KMyMoneyPlugin::PluginLoader::instance(), SIGNAL(unplug(KPluginInfo*)), 
                this, SLOT(slotUnplug(KPluginInfo*)));
    

    Další sloty už se týkají vlastní funkce modulu. Vybrané transakce se zapamatují v našem modulu (změna výběru je signalizovaná do slotu slotTransactionsSelected) a při vyvolání akce se s vybranými transakcemi provede požadovaná činnost.

    V seznamu vybraných transakcí se pracuje s objektem MyMoneyTransaction (ten je v seznamu transakcí trochu schovaný). Popis tohoto objektu můžete najít zde:

    http://kmymoney2.sourceforge.net/kmymoney2-api/html/classMyMoneyTransaction.html

    V našem modulu se z objektu využívá pouze volání *it.split().number(), které vrací číslo dokladu. Podle tohoto čísla se otevírá příslušný dokument.

     
    /**
     * Slot volaný při změně výběru transakcí.
     * Pokud vybrané transakce obsahují číslo dokumentu, povolí se akce spojená s transakcí, jinak
     * je akce v menu neaktivní.
     */
    void KMMOpenAttachedFilePlugin::slotTransactionsSelected(const KMyMoneyRegister::SelectedTransactions& transactions) {
      bool actionEnabled = false;
      m_transactions = transactions;
      KMyMoneyRegister::SelectedTransactions::const_iterator it;
      for (it = transactions.constBegin(); it != transactions.constEnd(); it++) {
        if ( (*it).split().number() != "" ) {
          actionEnabled = true;
          break;
          }
        }
      m_action->setEnabled(actionEnabled);
    }
    

    U vybraných transakcí se startuje externí aplikace podle uloženého nastavení. K tomu se dostaneme voláním funkce PluginSettings::path(). Využívá se zde automatického ukládání nastavení v KDE modulech do rc souborů. Po zaregistrování v souboru pluginsettings.kcfg je možné k hodnotám v nastavovacím formuláři přistupovat tímto jednoduchým voláním (path je jméno formulářového políčka). U widgetů z KDE je tato vlastnost bezproblémová, kolem widgetů z KMyMoney je někdy potřeba vytvořit jednoduchý wrapper, který tuto funkčnost doplní.

     
    /**
     * Tento slot je volaný při vyvolání akce z kontextového menu transakce.
     * Pro každou vybranou transakci se zadaným číslem dokladu
     * zavolá funkci pro otevření příslušného dokumentu.
     */
    void KMMOpenAttachedFilePlugin::slotOpenAttachedFile() {
      qDebug() << "KMMOpenAttachedFilePlugin::slotOpenAttachedFile()";
      KMyMoneyRegister::SelectedTransactions::const_iterator it;
      for (it = m_transactions.constBegin(); it != m_transactions.constEnd(); ++it) {
        if ( (*it).split().number() == "" ) {
          continue;
          }
        openFile((*it).split().number());
        }
    }
     
     
    /**
     * Funkce pro otevření dokumentu v zadaném programu.
     * Program se startuje nezávisle na KMyMoney. Po ukončení
     * programu se volá slotProcessFinished, aby se po nastartovaném
     * a ukončeném programu uklidilo.
     */
    void KMMOpenAttachedFilePlugin::openFile(const QString& number) {
      QStringList params = PluginSettings::path().split(' ');
      if (params.isEmpty()) return;
      KProcess *process = new KProcess();
      process->setProgram(params.takeFirst());
     
      for (int i=0; i

    Při programování modulů pro KMyMoney využijete často i další dva objekty (zde nepoužité) – MyMoneyFile a MyMoneyTransactionFilter. Objekt MyMoneyFile vám zprostředkuje přístup do všech vašich dat uložených v KMyMoney, pomocí objektu MyMoneyTransactionFilter pak můžete vybrat pouze transakce, které vás zajímají.

    http://kmymoney2.sourceforge.net/kmymoney2-api/html/classMyMoneyTransactionFilter.html
    http://kmymoney2.sourceforge.net/kmymoney2-api/html/classMyMoneyFile.html

    Umístění akce v menu

    link

    Akci lze doplnit do prakticky libovolného menu v aplikaci KMyMoney. Umístění je určeno souborem kmm_openattachedfile.rc. Jde o jednoduchý xml soubor. Chcete-li se zorientovat ve struktuře menu aplikace KMyMoney, podívejte se do souboru kmymoneyui.rc (o dva adresáře výše, jste-li v  adresáři s modulem).

    Vyvoj modulu pro KMyMoney

    Nastavení modulu

    link

    Díky automatickému ukládání hodnot může být modul pro nastavení velmi jednoduchý. Prakticky nám stačí jen naklikat nastavovací formulář (vytvářejte widget, nikoli okno nebo dialog) a ve vlastním objektu jej pouze vytvořit (setupUi()) a připojit k objektu pluginu. Hezký popis tvorby nastavovací části pluginu najdete v dokumentaci KDE:

    http://api.kde.org/4.x-api/kdelibs-apidocs/kdeui/html/classKCModule.html

    Vyvoj modulu pro KMyMoney

    Při klikání formuláře aplikací Designer z Qt vybírejte pouze widgety určené pro KDE. Jména polí uvádějte prefixem kcfg_ - naše pole pro nastavení aplikace se tak jmenuje kcfg_path. Když uvedete takové pole v souboru pluginsettings.kcfg, bude se hodnota ukládat automaticky a ve výkonné části modulu se k ní dostanete jednoduše voláním PluginSettings::path().

    Překlady do různých jazyků

    link

    Chcete-li, aby byl modul začlenitelný do hlavního stromu aplikace KMyMoney, všechny řetězce, které se zobrazují uživateli, pište anglicky a uzavírejte je do volání funkce i18n(). Asi takto: i18n("This is an English string").

    Překlad a linkování

    link

    Aby se váš nový modul překládal spolu s aplikací KMyMoney, musíte upravit soubor CMakeLists.txt v nadřízeném adresáři. Prakticky stačí doplnit řádek

     
    ADD_SUBDIRECTORY( openattachedfile )
    

    V tomto souboru se popisuje, co a jak se má při překladu a linkování dělat. Soubor CMakeLists.txt musí být i v adresáři openattachedfile, kde jsou uloženy naše zdrojové kódy. Jeho obsah už je složitější, ale nejjednodušším řešením je opět opisování odjinud. Já jsem opsal a upravil údaje v souboru připojeném k modulu printcheck.

    Náš ukázkový modul je jednoduchý, vystačí si s minimem knihoven z KMyMoney. Sáhnete-li po některých dialozích či widgetech z KMyMoney (datum, výběr účtu), může být potřeba přilinkovat i některé další (bohužel statické) knihovny.

    Ověření funkce

    link

    Jakmile je modul přeložený a nainstalovaný, měli byste nalézt jeho nastavení v menu Nastavení - Nastavení KMyMoney - Moduly. Mimo to můžete vyzkoušet modul pro nastavení i bez startu KMyMoney, použijte program kcmshell4: kcmshell4 kcm_kmm_openattachedfile.

    Vyvoj modulu pro KMyMoney

    Vlastní výkonnou část najdete v kontextovém menu transakce – v peněžním deníku klikněte levým tlačítkem na zvolenou transakci. Na konci menu byste měli vidět naši akci "Open attached file".

    Vyvoj modulu pro KMyMoney

    Odkazy na dokumentaci

    link

    Množství odkazů jsem uvedl již v textu, zde najdete alespoň krátké shrnutí:

    Popis knihovny Qt
    Popis API prostředí KDE
    Popis API aplikace KMyMoney

    Zdrojové tvary

    link

    I když je modul poměrně jednoduchý, zdrojových souborů je docela dost. Kompletní zdrojové tvary jsou proto ke stažení extra:

    openattachedfile.tgz

    Zveřejnění modulu

    link

    Máte-li modul přeložený a odladěný na vlastní kopii KMyMoney, můžete se pokusit o jeho začlenění do KMyMoney. Mně se to dosud nepodařilo, nejsem dostatečně vytvalý a vtěrný. Nebo mi nechodí pošta (to by byla ostuda). Zamýšlel jsem tento článek završit vítězným virtuálním poplácáním po vlastním rameni, ale plugin openattachedfile v hlavním stromu dosud není. Článek mám rozepsaný už nějakou dobu a dospěl jsem k názoru, že bude lepší jej zveřejnit i bez vítězného konce. Případné oznámení o úspěšném začlenění modulu a použitý postup tak najdete nejspíš v mém blogu zde na AbcLinuxu.

           

    Hodnocení: 80 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Josef Kufner avatar 6.12.2010 01:44 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Vytváření modulů pro KMyMoney
    Btw, řešil jste někdo propojení s KMymoney s nějakým měřičem času? A třeba přímý převod času na peníze na nějakém (virtuálním) účtu odkud by se při zaplacení převedly na účet reprezentující reálné peníze...
    Hello world ! Segmentation fault (core dumped)
    8.12.2010 13:16 minix
    Rozbalit Rozbalit vše Re: Vytváření modulů pro KMyMoney
    jiz delsi dobu (vlastne celou dobu aktivniho internetu) pozoruji Vase aktivity ohledne vsech moznych ucetnictvi. Kdyz si tak sectu ty hodiny, ktere jste patrne s celou tou problematikou stravil (vcetne tech nespocetnych clanku), tak mi vychazi, ze uz byste musel mit davno svuj vlastni softvarovy ucetni balik, ktery by se nemusel pred temi vsemi Pohodami a Winstromy stydet.

    Mohl bych se zeptat, proc jste se do toho nikdy nepustil? Pak byste napr. nemusel u tech vsech cizich systemu, ktere jste kdy testoval a/nebo provozoval psat nejake takove moduly, ktere jsou napr.popsany v tomto clanku.
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.