Difference between revisions of "KTimeTracker"

m (Add Language Bar Template)
(Moved Developing section to separate page)
Line 39: Line 39:
* needing support ? Ask and answer in the chat at irc.kde.org, channel #kde
* needing support ? Ask and answer in the chat at irc.kde.org, channel #kde
= Developing KTimeTracker =
If you are interested in helping to develop KTimeTracker, see '''[[KTimeTracker/Developing the Developing section]]'''
* look at [http://bugs.kde.org/buglist.cgi?short_desc_type=allwordssubstr&short_desc=&long_desc_type=allwordssubstr&long_desc=&product=KTimeTracker&component=general&component=reporting&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bugidtype=include&bug_id=&votes=&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&order=Reuse+same+sort+as+last+time&cmdtype=doit&newqueryname=&namedcmd=allKTimeTrackerbugs our Bugzilla]
* join our discussion on irc.kde.org, channel #kontact
* learn programming with KDE's [http://techbase.kde.org/Development/Tutorials Programming Tutorial]
== So you want to become a KTimeTracker developer ==
Here are your classes:
* mainwindow.*: Is the main window of the KDE application
* karm_part.*: Is the KPart of KTimeTracker
** timetrackerwidget.*: Is a widget with no or several tabs that contain
*** taskview.*: Is a treeListWidget that contains:
**** task.*: A QObject and QTreeWidgetItem. A task can be constructed from a taskview and a todo. As soon as you instanciate a task, it becomes visible in your TreeWidget.
**** karmstorage.*: Is the storage backend that contains a:
***** KCal::ResourceCalendar
== Nokia N810 ==
I got a Nokia N810 from Nokia to allow me porting KTimeTracker to it. I appreciate this a lot and am now kompiling KTimeTracker for arm. The project is not ready, here is what I found out:
To kompile KTimeTracker for the Nokia N810
* add the maemo repository
* install openssh
== dbus ==
dbus is clearly a developer topic. To test the dbus functionality of your KTimeTracker, have KTimeTracker running and proceed like in this example:
qdbus org.kde.KTimeTracker
qdbus org.kde.KTimeTracker /KTimeTracker
method void org.kde.KTimeTracker.KTimeTracker.quit()
qdbus org.kde.KTimeTracker /KTimeTracker org.kde.KTimeTracker.KTimeTracker.quit
== Internationalization ==
You want to test the translation of KTimeTracker. For this, you want to call KTimeTracker in, say, german. For this, you need to know how you at all can call a KDE 4 program in another language than english. Here is as an example how I call akregator in german:
wget http://websvn.kde.org/*checkout*/trunk/l10n-kde4/de/messages/kdepim /akregator.po 
msgfmt -o akregator.mo akregator.po
cp akregator.mo .kde4/share/locale/de/LC_MESSAGES/
KDE4_LANG=de akregator
The respective KTimeTracker translation is still stored in karm.*o, and it works.
== How to reproduce a stale lock ==
Here is an example to give you an idea:
touch .kde/share/apps/kabc/lock/_home_tom_.kde_share_apps_karm_karm.ics.lock
== How to get rid of debugging output ==
cmake -DCMAKE_BUILD_TYPE=Release
== Goals ==
* Unicode - I found out it is already capable of UTF-8.
== Where is what ? ==
* The latest development sourcecode is available via web at http://websvn.kde.org/trunk/KDE/kdepim/ktimetracker
* You can subscribe to watch code changes at
* You can get informed on irc about code changes at freenode,
* You can discuss about KDE pim development on freenode,
* The api documentation is available at http://developer.kde.org/documentation/library/cvs-api/kdepim-apidocs/karm/html/index.html
* The userdocumentation is generated from
* KTimeTracker all-you-need in the internet:
* KTimeTracker as part of pim, for developers:
http://pim.kde.org/components/karm.php / http://websvn.kde.org/trunk/www/areas/pim/components/karm.php
* KTimeTracker as part of pim, for users:
http://kontact.kde.org / http://websvn.kde.org/trunk/www/apps/kontact
== Development Direction ==
The following similar programs can give you inspiration how to move forward developing:
* hourglass
* gnotime
* titrax
* taskCoach
* Hamster
== Kontact plugin vs. Standalone ==
The Kontact plugin is realized via a KPart. The elegant solution would be to have one KPart that can be integrated into Kontact and one shell that just displays the KPart. This is not so far now. At the moment, karm_part.cpp implements the KTimeTracker part and mainwindow.cpp implements the standalone application.
Here's a patch that allows us to use the karm part (karm_part.cpp) as widget of mainwindow, not perfect yet, but showing a direction:
Index: mainwindow.cpp
--- mainwindow.cpp      (revision 618712)
+++ mainwindow.cpp      (working copy)
@@ -24,6 +24,7 @@
#include <qstring.h>
#include "karmerrors.h"
+#include "karm_part.h"
#include "karmutility.h"
#include "mainwindow.h"
#include "preferences.h"
@@ -43,9 +44,10 @@
    _sessionSum( 0 )
+  _karmpart  = new karmPart(this,"hi",this,"hi");
  _taskView  = new TaskView( this, 0, icsfile );
-  setCentralWidget( _taskView );
+  setCentralWidget( _karmpart->widget() );
  // status bar
@@ -85,7 +87,7 @@
  connect( _taskView, SIGNAL( tasksChanged( QPtrList<Task> ) ),
                      _tray, SLOT( updateToolTip( QPtrList<Task> ) ));
-  _taskView->load();
+  //_taskView->load();
  // Everything that uses Preferences has been created now, we can let it
  // emit its signals
Index: mainwindow.h
--- mainwindow.h        (revision 618621)
+++ mainwindow.h        (working copy)
@@ -5,6 +5,7 @@
#include "karmerrors.h"
#include <karmdcopiface.h>
+#include "karm_part.h"
#include "reportcriteria.h"
class KAccel;
@@ -34,7 +35,8 @@
    KAccel*          _accel;
    KAccelMenuWatch* _watcher;
-    TaskView*        _taskView;
+    TaskView*      _taskView;
+    karmPart*        _karmpart;
    long            _totalSum;
    long            _sessionSum;
    Preferences*    _preferences;
Index: Makefile.am
--- Makefile.am (revision 618621)
+++ Makefile.am (working copy)
@@ -21,7 +21,7 @@
libkarm_shared_la_LIBADD = $(top_builddir)/libkcal/libkcal.la \
            $(top_builddir)/kresources/remote/libkcal_resourceremote.la \
              $(top_builddir)/libkdepim/libkdepim.la $(LIBXSS) -lkdeprint
-karm_SOURCES = main.cpp
+karm_SOURCES = main.cpp karm_part.cpp
karm_LDADD = libkarm_shared.la
karm_LDFLAGS = $(all_libraries) $(KDE_RPATH)
noinst_HEADERS = desktoptracker.h edittaskdialog.h printdialog.h \
== IdleTimeDetector ==
The idletimedetector is in the equally-named .cpp and .h file. It starts a qtimer and at every timeout, checks, if the X extension delivers for the last user interaction a timepoint that is further away than the maxIdleTime.
== About storage ==
The storage of your KTimeTracker data takes place in an iCal file. That format needs a bit of explanation. A simple one looks like the following:
PRODID:-//K Desktop Environment//NONSGML libkcal 3.5//EN
=== A test case for kcal ===
PROJECT( kde4start )
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 )
#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");
'''kompile, link and run'''
cmake . && make && ./kde4start
= Related Projects =
= Readings =
* http://doc.trolltech.com/4.1/itemviews-simpletreemodel.html
* RFC 2445

Revision as of 11:15, 23 November 2008

Template:I18n/Language Navigation Bar

This is a test for an Infobox Software.

What is KTimeTracker

KTimeTracker tracks time spent on various tasks. It is useful for tracking billable hours and can report the hours logged by task and day. This time history can be exported to a comma-delimited text file for import into other billing and/or project management tools. KTimeTracker detects when your keyboard and mouse are idle and can associate different tasks with different desktops, two tools that can help keep the timer running on the correct task.


Using KTimeTracker

What KTimeTracker can do for you

The current stable version of KTimeTracker (4.1) can:

  • organize and stopwatch tasks, subtasks

KTimeTracker allows you to organize and stopwatch your work. You can put your daily todo-list into that tool. You can group your work by tasks, subtask and n-th level tasks, meaning that every subtask can still have a subtask below it, up to some 1000 levels.

  • edit task history and comments

KTimeTracker allows you to edit your task's history and to put a comment for every event that you have stopped:



KTimeTracker 4 has the following behavior options:



Up to KDE 3.1 (incl.), flat files were used to store the data. From KDE 3.2 on, the iCal format is used, but flat files can still be imported until KDE 4. With KDE 4, the custom fields X-KDE-karm-duration, X-KDE-karm-totalTaskTime, X-KDE-karm-totalSessionTime and X-KDE-karm-desktopList were renamed to X-KDE-KTimeTracker-duration and the respective other names. KTimeTracker 4 can still read karm iCal files, but not the other way round.

Does it scale

KTimeTracker scales well and it regularly tested with a 1.2 MB file (https://bugs.kde.org/attachment.cgi?id=14413&action=view) available from (https://bugs.kde.org/show_bug.cgi?id=110523). A ktimetracker benchmark is available from here.


  • needing support ? Ask and answer in the chat at irc.kde.org, channel #kde

If you are interested in helping to develop KTimeTracker, see KTimeTracker/Developing the Developing section

Content is available under Creative Commons License SA 4.0 unless otherwise noted.