Contents |
Her er dine klasser:
Jeg fik en Nokia N810 fra Nokia, sådan at jeg kan overføre KTimeTracker til den. Jeg sætter stor pris på dette og kompilerer nu KTimeTracker til ARM. Projektet er ikke færdigt, her er hvad jeg har fundet ud af:
For at kompilere KTimeTracker til Nokia N810
dbus er tydeligvis et emne for udviklere. For at teste KTimeTrackers dbus-funktionalitet skal KTimeTracker køre; du går så frem som i dette eksempel:
qdbus ... org.kde.KTimeTracker ... qdbus org.kde.KTimeTracker ... /KTimeTracker ... qdbus org.kde.KTimeTracker /KTimeTracker ... method void org.kde.KTimeTracker.KTimeTracker.quit() ... qdbus org.kde.KTimeTracker /KTimeTracker org.kde.KTimeTracker.KTimeTracker.quit
Du ønsker at teste oversættelsen af KTimeTracker. Til dette skal du kalde KTimeTracker i en (lad os sige) tysk udgave. Til dette skal du vide, hvordan du overhovedet kan kalde et KDE 4-program på et andet sprog end engelsk. Her er som et eksempel på, hvordan jeg kalder Akregator på tysk:
wget http://websvn.kde.org/*checkout*/trunk/l10n-kde4/de/messages/kdepim/ktimetracker.po msgfmt -o ktimetracker.mo ktimetracker.po cp ktimetracker.mo .kde4/share/locale/de/LC_MESSAGES/ KDE4_LANG=de ktimetracker
Her er et eksempel for at give dig en idé:
touch .kde/share/apps/kabc/lock/_home_tom_.kde_share_apps_karm_karm.ics.lock
cmake -DCMAKE_BUILD_TYPE=Release
Følgende lignende programmer kan give dig inspiration til, hvordan udviklingen kan skride frem:
Plugin'et til Kontact er realiseret som en KPart. Den elegante løsning ville være at have en KPart, som kan integreres i Kontact og en skal, som blot viser KPart'en. Vi er ikke så vidt endnu. I øjeblikket implementerer ktimetrackerpart.cpp KTimeTrackers KPart og mainwindow.cpp implementerer det selvstændige program.
Komponenten idletimedetector er i .cpp og .h filer med tilsvarende navne. Den starter en qtimer og tjekker ved hvert timeout om X-udvidelsen giver et timepoint for den sidste bruger, som er længere væk end maxIdleTime.
Dine KTimeTracker-data gemmes i en iCal-fil. Dette format kræver lidt forklaring. En simpel en af slagsen kan se sådan ud:
BEGIN:VCALENDAR PRODID:-//K Desktop Environment//NONSGML libkcal 3.5//EN VERSION:2.0 BEGIN:VTODO DTSTAMP:20060915T181010Z ORGANIZER;CN=root:MAILTO: X-KDE-karm-totalSessionTime:0 X-KDE-karm-totalTaskTime:19 CREATED:20060609T230212Z UID:libkcal-652058592.803 SEQUENCE:0 LAST-MODIFIED:20060915T181010Z SUMMARY:fg CLASS:PUBLIC PRIORITY:5 PERCENT-COMPLETE:0 END:VTODO BEGIN:VEVENT DTSTAMP:20060915T181010Z ORGANIZER:MAILTO: X-KDE-karm-duration:300 CREATED:20060915T174305Z UID:libkcal-6397995.845 SEQUENCE:0 LAST-MODIFIED:20060910T174305Z SUMMARY:fg CLASS:PUBLIC PRIORITY:5 CATEGORIES:KArm RELATED-TO:libkcal-652058592.803 DTSTART:20060910T172346Z DTEND:20060910T174305Z TRANSP:OPAQUE END:VEVENT END:VCALENDAR
CMakeLists.txt
PROJECT( kde4start )
FIND_PACKAGE(KDE4 REQUIRED)
INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} . )
SET(kde4startSources main.cpp )
KDE4_ADD_EXECUTABLE(kde4start ${kde4startSources} )
TARGET_LINK_LIBRARIES(kde4start ${KDE4_KDEUI_LIBS} ${KDE4_KCAL_LIBS} ${KDE4_KPARTS_LIBS} kdepim kcal_resourceremote )
main.cpp
#include <QString>
#include <kapplication.h>
#include <kaboutdata.h>
#include <kmessagebox.h>
#include <kcmdlineargs.h>
#include <KMainWindow>
#include <kcal/resourcecalendar.h>
#include <kcal/resourcecached.h>
#include <kcal/resourcelocal.h>
int main (int argc, char *argv[])
{
const QByteArray& ba=QByteArray("test");
const KLocalizedString name=ki18n("myName");
KAboutData aboutData( ba, ba, name, ba, name);
KCmdLineArgs::init( argc, argv, &aboutData );
KApplication khello;
KCal::ResourceCalendar* cal;
KCal::ResourceCached* resource;
resource=new KCal::ResourceLocal("/tmp/KTimeTrackerkonsole.ics");
cal=resource;
}
Compile, link and run
cmake . && make && ./kde4start
http://websvn.kde.org/trunk/playground/base/plasma/applets/timetracker/