├── .idea ├── .name ├── copyright │ ├── profiles_settings.xml │ └── TimeCult.xml ├── scopes │ └── scope_settings.xml ├── codeStyles │ ├── codeStyleConfig.xml │ └── Project.xml ├── dictionaries │ └── dyadix.xml ├── vcs.xml ├── ant.xml ├── modules.xml ├── inspectionProfiles │ ├── profiles_settings.xml │ └── Project_Default.xml ├── encodings.xml ├── misc.xml ├── codeStyleSettings.xml ├── compiler.xml └── runConfigurations │ └── TimeCult.xml ├── main ├── version.number ├── timecult.ico ├── wiz_icon.bmp ├── wiz_image.bmp ├── tools │ ├── docmc.jar │ └── lib │ │ └── xmlenc-0.52.jar ├── doc │ ├── de │ │ ├── license.dmi │ │ ├── using.dmi │ │ ├── options.dmi │ │ ├── manual.dm │ │ ├── concepts.dmi │ │ ├── features.dmi │ │ └── whatsnew.dmi │ └── manual │ │ ├── license.dmi │ │ ├── using.dmi │ │ ├── whatsnew.dmi │ │ ├── manual.dm │ │ ├── features.dmi │ │ ├── concepts.dmi │ │ └── options.dmi ├── lib │ ├── iText-5.0.2.jar │ ├── junit-4.8.2.jar │ ├── swtcalendar.jar │ ├── xmlenc-0.52.jar │ ├── swtcalendar-license.txt │ └── xmlenc-license.txt ├── wizard_side_image.bmp ├── build.number ├── timecult.ini ├── resources │ └── net │ │ └── sf │ │ └── timecult │ │ ├── fonts │ │ ├── repet.ttf │ │ ├── LiberationSans-Bold.ttf │ │ ├── LiberationSans-Italic.ttf │ │ ├── LiberationSans-Regular.ttf │ │ └── LiberationSans-BoldItalic.ttf │ │ ├── images │ │ ├── cog.png │ │ ├── doc.png │ │ ├── edit.png │ │ ├── find.png │ │ ├── link.png │ │ ├── notes.gif │ │ ├── pencil.png │ │ ├── reopen.png │ │ ├── splash.bmp │ │ ├── splash.png │ │ ├── calendar.png │ │ ├── decrease.png │ │ ├── edit-copy.png │ │ ├── filenew.png │ │ ├── increase.png │ │ ├── past_due.png │ │ ├── project2.png │ │ ├── timecult.ico │ │ ├── arrow_join.png │ │ ├── min_to_tray.png │ │ ├── qtimesheet.png │ │ ├── close_project.png │ │ ├── icons │ │ │ ├── about-16.png │ │ │ ├── about-24.png │ │ │ ├── add-16.png │ │ │ ├── add-24.png │ │ │ ├── cut-16.png │ │ │ ├── cut-24.png │ │ │ ├── done-16.png │ │ │ ├── done-24.png │ │ │ ├── edit-16.png │ │ │ ├── edit-24.png │ │ │ ├── idle-16.png │ │ │ ├── idle-24.png │ │ │ ├── join-16.png │ │ │ ├── join-24.png │ │ │ ├── lock-16.png │ │ │ ├── lock-24.png │ │ │ ├── paste-16.png │ │ │ ├── paste-24.png │ │ │ ├── pdf-16.png │ │ │ ├── pdf-24.png │ │ │ ├── save-16.png │ │ │ ├── save-24.png │ │ │ ├── star-16.png │ │ │ ├── star-24.png │ │ │ ├── task-16.png │ │ │ ├── task-24.png │ │ │ ├── timer-16.png │ │ │ ├── timer-24.png │ │ │ ├── tray-16.png │ │ │ ├── tray-24.png │ │ │ ├── wait-16.png │ │ │ ├── wait-24.png │ │ │ ├── wiki-16.png │ │ │ ├── wiki-24.png │ │ │ ├── cancel-16.png │ │ │ ├── cancel-24.png │ │ │ ├── delete-16.png │ │ │ ├── delete-24.png │ │ │ ├── pin-red-16.png │ │ │ ├── pin-red-24.png │ │ │ ├── project-16.png │ │ │ ├── project-24.png │ │ │ ├── tomato-16.png │ │ │ ├── tomato-24.png │ │ │ ├── activity-16.png │ │ │ ├── activity-24.png │ │ │ ├── edit-find-16.png │ │ │ ├── edit-find-24.png │ │ │ ├── home-page-16.png │ │ │ ├── home-page-24.png │ │ │ ├── pin-blue-16.png │ │ │ ├── pin-blue-24.png │ │ │ ├── pin-green-16.png │ │ │ ├── pin-green-24.png │ │ │ ├── pin-orange-16.png │ │ │ ├── pin-orange-24.png │ │ │ ├── properties-16.png │ │ │ ├── properties-24.png │ │ │ ├── settings-16.png │ │ │ ├── settings-24.png │ │ │ ├── tasklist-16.png │ │ │ ├── tasklist-24.png │ │ │ ├── timer-stop-16.png │ │ │ ├── timer-stop-24.png │ │ │ ├── workspace-16.png │ │ │ ├── workspace-24.png │ │ │ ├── pin-magenta-16.png │ │ │ ├── pin-magenta-24.png │ │ │ ├── quick-report-16.png │ │ │ ├── quick-report-24.png │ │ │ ├── timer-pause-16.png │ │ │ ├── timer-pause-24.png │ │ │ ├── timer-start-16.png │ │ │ ├── timer-start-24.png │ │ │ ├── document-open-16.png │ │ │ ├── document-open-24.png │ │ │ ├── measured_time-16.png │ │ │ ├── measured_time-24.png │ │ │ ├── workspace-new-16.png │ │ │ ├── workspace-new-24.png │ │ │ ├── measured_time_part-16.png │ │ │ ├── measured_time_part-24.png │ │ │ ├── delete.svg │ │ │ ├── timer-stop.svg │ │ │ ├── document-open.svg │ │ │ ├── done.svg │ │ │ ├── home-page.svg │ │ │ ├── star.svg │ │ │ ├── pin.svg │ │ │ ├── timer-pause.svg │ │ │ ├── join.svg │ │ │ ├── about.svg │ │ │ ├── timer-start.svg │ │ │ ├── cancel.svg │ │ │ ├── tasklist.svg │ │ │ ├── add.svg │ │ │ └── tomato.svg │ │ ├── project_closed.png │ │ ├── record-partial.png │ │ ├── timecult_icon.png │ │ ├── timecult_logo.png │ │ ├── timer │ │ │ ├── timer0.png │ │ │ ├── timer1.png │ │ │ ├── timer2.png │ │ │ └── timer3.png │ │ ├── notif │ │ │ └── notif_info.png │ │ ├── arrow_refresh_small.png │ │ └── timecult_icon_32x32.png │ │ ├── timetracker_ru.cp1251 │ │ ├── timetracker_de.properties │ │ └── appinfo.properties ├── src │ └── net │ │ └── sf │ │ └── timecult │ │ ├── io │ │ ├── AutosaveManagerListener.java │ │ └── InvalidFormatException.java │ │ ├── ui │ │ ├── swt │ │ │ ├── help │ │ │ │ ├── HelpContentsListener.java │ │ │ │ └── HelpProvider.java │ │ │ ├── MissingSelectionObjectException.java │ │ │ ├── calendar │ │ │ │ ├── ICalendarDialogListener.java │ │ │ │ └── CalendarDialog.java │ │ │ ├── SWTTaskEditDialog.java │ │ │ ├── ItemStyle.java │ │ │ ├── SplashScreen.java │ │ │ ├── DialogFactory.java │ │ │ ├── ActivityEditDialog.java │ │ │ ├── notifications │ │ │ │ └── NotificationManager.java │ │ │ ├── SWTProjectEditDialog.java │ │ │ ├── timer │ │ │ │ └── TimerTrayImage.java │ │ │ ├── SWTDetailsView.java │ │ │ ├── filter │ │ │ │ └── TimeFilterToolbar.java │ │ │ ├── SWTMainTabFolder.java │ │ │ ├── ReasonDialog.java │ │ │ └── IdleTaskEditDialog.java │ │ └── GenericUIManager.java │ │ ├── util │ │ ├── StringHelper.java │ │ └── ObjectInfoHelper.java │ │ ├── conf │ │ └── AppPreferencesListener.java │ │ ├── model │ │ ├── DescriptionHolder.java │ │ ├── WorkspaceListener.java │ │ ├── IdGenerator.java │ │ ├── Activity.java │ │ ├── TotalsCalculator.java │ │ ├── ContainerFactory.java │ │ ├── TaskContainer.java │ │ ├── ProjectContainer.java │ │ ├── mem │ │ │ ├── LocalIdGenerator.java │ │ │ ├── MemContainerFactory.java │ │ │ ├── MemTaskContainer.java │ │ │ └── MemProjectContainer.java │ │ ├── CustomFilterList.java │ │ ├── WorkspaceSettings.java │ │ ├── Totals.java │ │ ├── WaitReason.java │ │ ├── TimeLog.java │ │ ├── Duration.java │ │ ├── IdleTask.java │ │ ├── WorkspaceEvent.java │ │ └── TimeUtil.java │ │ ├── stopwatch │ │ ├── StopwatchListener.java │ │ └── StopwatchEvent.java │ │ ├── PlatformUtil.java │ │ └── ResourceHelper.java ├── build.properties ├── launch4j.xml ├── linux │ └── timecult.sh ├── changelog.txt ├── main.iml └── timecult-win32.iss ├── README.md └── .gitignore /.idea/.name: -------------------------------------------------------------------------------- 1 | TimeCult -------------------------------------------------------------------------------- /main/version.number: -------------------------------------------------------------------------------- 1 | major=1 2 | minor=7 3 | -------------------------------------------------------------------------------- /main/timecult.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/timecult.ico -------------------------------------------------------------------------------- /main/wiz_icon.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/wiz_icon.bmp -------------------------------------------------------------------------------- /main/wiz_image.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/wiz_image.bmp -------------------------------------------------------------------------------- /main/tools/docmc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/tools/docmc.jar -------------------------------------------------------------------------------- /main/doc/de/license.dmi: -------------------------------------------------------------------------------- 1 | @section License 2 | 3 | @!include ../../gpl.txt 4 | 5 | @section \end -------------------------------------------------------------------------------- /main/doc/manual/license.dmi: -------------------------------------------------------------------------------- 1 | @section License 2 | 3 | @!include ../../gpl.txt 4 | 5 | @section \end -------------------------------------------------------------------------------- /main/lib/iText-5.0.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/lib/iText-5.0.2.jar -------------------------------------------------------------------------------- /main/lib/junit-4.8.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/lib/junit-4.8.2.jar -------------------------------------------------------------------------------- /main/lib/swtcalendar.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/lib/swtcalendar.jar -------------------------------------------------------------------------------- /main/lib/xmlenc-0.52.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/lib/xmlenc-0.52.jar -------------------------------------------------------------------------------- /main/wizard_side_image.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/wizard_side_image.bmp -------------------------------------------------------------------------------- /main/build.number: -------------------------------------------------------------------------------- 1 | #Build Number for ANT. Do not edit! 2 | #Thu Dec 14 11:27:49 CET 2023 3 | build.number=18 4 | -------------------------------------------------------------------------------- /main/tools/lib/xmlenc-0.52.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/tools/lib/xmlenc-0.52.jar -------------------------------------------------------------------------------- /main/timecult.ini: -------------------------------------------------------------------------------- 1 | main.class=net.sf.timecult.TimeTracker 2 | classpath.1=*.jar 3 | splash.image=splash.gif 4 | 5 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/fonts/repet.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/fonts/repet.ttf -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/cog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/cog.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/doc.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/edit.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/find.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/link.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/notes.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/notes.gif -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/pencil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/pencil.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/reopen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/reopen.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/splash.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/splash.bmp -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/splash.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/calendar.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/decrease.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/decrease.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/edit-copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/edit-copy.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/filenew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/filenew.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/increase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/increase.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/past_due.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/past_due.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/project2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/project2.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/timecult.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/timecult.ico -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/arrow_join.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/arrow_join.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/min_to_tray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/min_to_tray.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/qtimesheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/qtimesheet.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/timetracker_ru.cp1251: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/timetracker_ru.cp1251 -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/close_project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/close_project.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/about-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/about-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/about-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/about-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/add-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/add-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/add-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/add-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/cut-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/cut-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/cut-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/cut-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/done-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/done-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/done-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/done-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/edit-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/edit-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/edit-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/edit-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/idle-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/idle-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/idle-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/idle-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/join-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/join-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/join-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/join-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/lock-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/lock-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/lock-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/lock-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/paste-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/paste-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/paste-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/paste-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pdf-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pdf-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pdf-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pdf-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/save-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/save-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/save-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/save-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/star-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/star-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/star-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/star-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/task-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/task-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/task-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/task-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/timer-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/timer-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/timer-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/timer-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/tray-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/tray-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/tray-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/tray-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/wait-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/wait-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/wait-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/wait-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/wiki-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/wiki-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/wiki-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/wiki-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/project_closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/project_closed.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/record-partial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/record-partial.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/timecult_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/timecult_icon.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/timecult_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/timecult_logo.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/timer/timer0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/timer/timer0.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/timer/timer1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/timer/timer1.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/timer/timer2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/timer/timer2.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/timer/timer3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/timer/timer3.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/timetracker_de.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/timetracker_de.properties -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/cancel-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/cancel-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/cancel-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/cancel-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/delete-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/delete-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/delete-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/delete-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pin-red-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pin-red-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pin-red-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pin-red-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/project-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/project-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/project-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/project-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/tomato-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/tomato-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/tomato-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/tomato-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/notif/notif_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/notif/notif_info.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/fonts/LiberationSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/fonts/LiberationSans-Bold.ttf -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/arrow_refresh_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/arrow_refresh_small.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/activity-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/activity-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/activity-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/activity-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/edit-find-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/edit-find-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/edit-find-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/edit-find-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/home-page-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/home-page-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/home-page-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/home-page-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pin-blue-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pin-blue-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pin-blue-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pin-blue-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pin-green-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pin-green-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pin-green-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pin-green-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pin-orange-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pin-orange-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pin-orange-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pin-orange-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/properties-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/properties-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/properties-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/properties-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/settings-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/settings-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/settings-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/settings-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/tasklist-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/tasklist-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/tasklist-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/tasklist-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/timer-stop-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/timer-stop-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/timer-stop-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/timer-stop-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/workspace-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/workspace-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/workspace-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/workspace-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/timecult_icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/timecult_icon_32x32.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/fonts/LiberationSans-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/fonts/LiberationSans-Italic.ttf -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/fonts/LiberationSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/fonts/LiberationSans-Regular.ttf -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pin-magenta-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pin-magenta-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pin-magenta-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/pin-magenta-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/quick-report-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/quick-report-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/quick-report-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/quick-report-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/timer-pause-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/timer-pause-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/timer-pause-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/timer-pause-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/timer-start-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/timer-start-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/timer-start-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/timer-start-24.png -------------------------------------------------------------------------------- /main/src/net/sf/timecult/io/AutosaveManagerListener.java: -------------------------------------------------------------------------------- 1 | package net.sf.timecult.io; 2 | 3 | public interface AutosaveManagerListener { 4 | 5 | void doSave(); 6 | } 7 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/fonts/LiberationSans-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/fonts/LiberationSans-BoldItalic.ttf -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/document-open-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/document-open-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/document-open-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/document-open-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/measured_time-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/measured_time-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/measured_time-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/measured_time-24.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/workspace-new-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/workspace-new-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/workspace-new-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/workspace-new-24.png -------------------------------------------------------------------------------- /.idea/scopes/scope_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/measured_time_part-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/measured_time_part-16.png -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/measured_time_part-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dyadix/TimeCult/HEAD/main/resources/net/sf/timecult/images/icons/measured_time_part-24.png -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/dictionaries/dyadix.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | subproject 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/help/HelpContentsListener.java: -------------------------------------------------------------------------------- 1 | package net.sf.timecult.ui.swt.help; 2 | 3 | public interface HelpContentsListener { 4 | 5 | public void pageRequested(String ref); 6 | } 7 | -------------------------------------------------------------------------------- /.idea/ant.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/appinfo.properties: -------------------------------------------------------------------------------- 1 | appname=TimeCult 2 | author=Rustam Vishnyakov 3 | eMail=dyadix@gmail.com 4 | majorVersion=0 5 | minorVersion=1 6 | versionType=Beta 7 | build=dev 8 | buildDate=November 21, 2005 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | TimeCult 2 | ======== 3 | Personal time tracking and task management application written in Java. Allows to group tasks in projects and 4 | subprojects, record time spent for each task, calculate summaries of used time for any given period, create weekly 5 | time sheets and etc. -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/MissingSelectionObjectException.java: -------------------------------------------------------------------------------- 1 | package net.sf.timecult.ui.swt; 2 | 3 | public class MissingSelectionObjectException extends Exception { 4 | 5 | public MissingSelectionObjectException(Object o) { 6 | super(o.toString()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /main/build.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copy the file to local.build.properties with your own environment settings 3 | # 4 | launch4j.dir= 5 | innosetup.dir= 6 | swt.dir= 7 | jre.dir= -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /.idea/shelf/ 3 | /.idea/workspace.xml 4 | 5 | # Project exclude paths 6 | /main/build/ 7 | /main/dist/ 8 | /out/production/main/ 9 | /out/test/main/ 10 | 11 | # Datasource local storage ignored files 12 | /.idea/dataSources/ 13 | dataSources.local.xml 14 | 15 | # Editor-based HTTP Client requests 16 | /.idea/httpRequests/ 17 | rest-client.private.env.json 18 | http-client.private.env.json -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | http://www.w3.org/1999/xhtml 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/delete.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/util/StringHelper.java: -------------------------------------------------------------------------------- 1 | package net.sf.timecult.util; 2 | 3 | /** 4 | * Additional string manipulation methods. 5 | * @author rvishnyakov (rvishnyakov@yahoo.com) 6 | * 7 | */ 8 | public class StringHelper { 9 | 10 | public enum AddMode { 11 | TO_LEFT, TO_RIGHT 12 | }; 13 | 14 | public static String addSpaces(String str, int len, AddMode mode) { 15 | StringBuffer strBuf = new StringBuffer(); 16 | if (mode.equals(AddMode.TO_RIGHT)) { 17 | strBuf.append(str); 18 | } 19 | for (int i = 0; i < len - str.length(); i++) { 20 | strBuf.append(' '); 21 | } 22 | if (mode.equals(AddMode.TO_LEFT)) { 23 | strBuf.append(str); 24 | } 25 | return strBuf.toString(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /.idea/codeStyleSettings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 19 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /.idea/copyright/TimeCult.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/timer-stop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /main/launch4j.xml: -------------------------------------------------------------------------------- 1 | 2 | true 3 | gui 4 | timecult.jar 5 | dist\timecult.exe 6 | 7 | 8 | 9 | normal 10 | http://java.com/download 11 | 12 | true 13 | false 14 | 15 | timecult.ico 16 | 17 | %EXEDIR%/jre 18 | true 19 | 1.6.0 20 | 21 | preferJre 22 | -Djava.library.path="%EXEDIR%/lib" -Dhelp.dir="%EXEDIR%/help" 23 | 24 | 25 | .\resources\net\sf\timecult\images\splash.bmp 26 | true 27 | 60 28 | true 29 | 30 | -------------------------------------------------------------------------------- /main/lib/swtcalendar-license.txt: -------------------------------------------------------------------------------- 1 | Permission is hereby granted, free of charge, to any person obtaining a copy of 2 | this software and associated documentation files (the "Software"), to deal in the 3 | Software without restriction, including without limitation the rights to use, copy, 4 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 5 | and to permit persons to whom the Software is furnished to do so, subject to the 6 | following conditions: 7 | 8 | The above copyright notice and this permission notice shall be included in all copies 9 | or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 12 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 13 | PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR ANY CLAIM, 14 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 15 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /main/src/net/sf/timecult/conf/AppPreferencesListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2009 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: AppPreferencesListener.java,v 1.1 2009/01/24 10:55:05 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.conf; 21 | 22 | public interface AppPreferencesListener { 23 | 24 | public void preferenceChanged(String prefName); 25 | } 26 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/DescriptionHolder.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | */ 18 | package net.sf.timecult.model; 19 | 20 | /** 21 | * Must be implemented by an element which may contain attached notes. 22 | * @author rvishnyakov 23 | */ 24 | public interface DescriptionHolder { 25 | 26 | String getDescription(); 27 | 28 | void setDescription(String notes); 29 | } 30 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/WorkspaceListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Created on Jul 21, 2005 3 | * 4 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License along 17 | * with this program; if not, write to the Free Software Foundation, Inc., 18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | */ 20 | package net.sf.timecult.model; 21 | 22 | /** 23 | * Must be implemented to recieve workspace notifications. 24 | * 25 | * @author rvishnyakov 26 | */ 27 | public interface WorkspaceListener { 28 | 29 | void workspaceChanged(WorkspaceEvent we); 30 | } 31 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/stopwatch/StopwatchListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * File: StopwatchListener.java Created: 30.05.2005 3 | * 4 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License along 17 | * with this program; if not, write to the Free Software Foundation, Inc., 18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | */ 20 | package net.sf.timecult.stopwatch; 21 | 22 | /** 23 | * Receives stopwatch notification events. 24 | * 25 | * @author rvishnyakov (rvishnyakov@yahoo.com) 26 | */ 27 | public interface StopwatchListener { 28 | 29 | public void stateChanged(StopwatchEvent evt); 30 | } 31 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/calendar/ICalendarDialogListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2008-2009 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: ICalendarDialogListener.java,v 1.2 2009/09/15 18:50:40 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.ui.swt.calendar; 21 | 22 | import java.util.Calendar; 23 | 24 | import org.eclipse.swt.widgets.Text; 25 | 26 | public interface ICalendarDialogListener { 27 | 28 | public void dateSelected(Calendar data, Text dateField); 29 | } 30 | -------------------------------------------------------------------------------- /.idea/runConfigurations/TimeCult.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 25 | -------------------------------------------------------------------------------- /main/linux/timecult.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # TimeCult startup script. 4 | # Author: Rustam Vishnyakov 5 | # 6 | # Software requirements: 7 | # - openjdk 7 (or Oracle jdk1.7.x) 8 | # - java-wrappers: 9 | # sudo apt-get install java-wrappers 10 | # 11 | DESKTOP_FILE=~/.local/share/applications/timecult.desktop 12 | VERSION=1.6 13 | grep "Version=${VERSION}" ${DESKTOP_FILE} > /dev/null 14 | if [ $? -ne 0 ] 15 | then 16 | echo Creating TimeCult desktop entry... 17 | mkdir -p ~/.local/share/applications 18 | pushd `dirname $0` > /dev/null 19 | SCRIPT_PATH=`pwd` 20 | popd > /dev/null 21 | echo [Desktop Entry] > ${DESKTOP_FILE} 22 | echo Version=${VERSION} >> ${DESKTOP_FILE} 23 | echo Type=Application >> ${DESKTOP_FILE} 24 | echo Terminal=false >> ${DESKTOP_FILE} 25 | echo Exec=${SCRIPT_PATH}/timecult.sh >> ${DESKTOP_FILE} 26 | echo Icon=${SCRIPT_PATH}/timecult.ico >> ${DESKTOP_FILE} 27 | echo Name=Timecult >> ${DESKTOP_FILE} 28 | echo Comment=Track time and manage your tasks >> ${DESKTOP_FILE} 29 | echo Categories=Office\;Productivity\; >> ${DESKTOP_FILE} 30 | echo Done 31 | fi 32 | . /usr/lib/java-wrappers/java-wrappers.sh 33 | find_java_runtime java7 34 | find_jars ${0%.*}.jar 35 | run_java net.sf.timecult.TimeTracker & 36 | 37 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/IdGenerator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * File: IdGenerator.java Created on 12.07.2005 3 | * 4 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License along 17 | * with this program; if not, write to the Free Software Foundation, Inc., 18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | */ 20 | package net.sf.timecult.model; 21 | 22 | /** 23 | * Generates unique IDs. Implementations may use different strategies for that. 24 | * 25 | * @author rvishnyakov 26 | */ 27 | public interface IdGenerator { 28 | 29 | String getNewId(); 30 | 31 | String getLastId(); 32 | 33 | boolean setCurrentId(String id); 34 | } 35 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/Activity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: Activity.java,v 1.1 2008/07/12 06:48:48 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.model; 21 | 22 | public class Activity extends Task { 23 | 24 | public Activity(Project parent, String id, String name) { 25 | super(parent, id, name); 26 | setStatus(TaskStatus.IN_PROGRESS); 27 | } 28 | 29 | @Override 30 | public ItemType getItemType() { 31 | return ItemType.ACTIVITY; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/TotalsCalculator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * File: Totals.java 3 | * Created: 10.06.2005 4 | * 5 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License along 18 | * with this program; if not, write to the Free Software Foundation, Inc., 19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 | */ 21 | package net.sf.timecult.model; 22 | 23 | /** 24 | * Base interface for classes which may calculate totals. 25 | * @author rvishnyakov (rvishnyakov@yahoo.com) 26 | */ 27 | public interface TotalsCalculator { 28 | 29 | /** 30 | * @return Total duration in milliseconds. 31 | * @param timeLog The time log to use. 32 | */ 33 | Totals getTotals(TimeLog timeLog, TimeRecordFilter filter); 34 | } 35 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/ContainerFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * File: ElementFactory.java Created: 21.05.2005 3 | * 4 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License along 17 | * with this program; if not, write to the Free Software Foundation, Inc., 18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | */ 20 | package net.sf.timecult.model; 21 | 22 | /** 23 | * Creates containers depending on storage type. Contains also a method to 24 | * generate unique IDs. 25 | * 26 | * @author rvishnyakov (rvishnyakov@yahoo.com) 27 | */ 28 | public interface ContainerFactory { 29 | 30 | ProjectContainer createProjectContainer(); 31 | 32 | TaskContainer createTaskContainer(); 33 | 34 | TimeLog createTimeLog(); 35 | } 36 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/io/InvalidFormatException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * TimeCult JE: Time tracking and task management program, Java Edition 3 | * File: InvalidFormatException.java 4 | * Created on Sep 5, 2005 5 | * 6 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 7 | * 8 | * This program is free software; you can redistribute it and/or modify 9 | * it under the terms of the GNU General Public License as published by 10 | * the Free Software Foundation; either version 2 of the License, or 11 | * (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License along 19 | * with this program; if not, write to the Free Software Foundation, Inc., 20 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 21 | */ 22 | package net.sf.timecult.io; 23 | 24 | /** 25 | * @author rvishnyakov 26 | * 27 | * TODO To change the template for this generated type comment go to 28 | * Window - Preferences - Java - Code Style - Code Templates 29 | */ 30 | public class InvalidFormatException extends Exception { 31 | 32 | public InvalidFormatException(String message) { 33 | super(message); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/PlatformUtil.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) TimeCult Project Team, 2005-2011 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: $ 19 | */ 20 | 21 | package net.sf.timecult; 22 | 23 | import org.eclipse.swt.SWT; 24 | 25 | /** 26 | * Utility methods for platform detection 27 | */ 28 | public class PlatformUtil { 29 | public final static boolean isGtk = SWT.getPlatform().contains("gtk"); 30 | private final static String OS_NAME = System.getProperty("os.name"); 31 | 32 | public static boolean isOSWindows() { 33 | return OS_NAME.contains("Win"); 34 | } 35 | 36 | public static boolean isOSLinux() { 37 | return OS_NAME.contains("Linux"); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /main/changelog.txt: -------------------------------------------------------------------------------- 1 | 1.7 2 | 3 | * Adaptive project tree view item colors, work for dark themes 4 | * Fixed Task list size/location for multiple monitors 5 | * Fixed a problem when the main window goes out of display area on app restart when one of the monitors 6 | is disconnected. 7 | 8 | 1.6 9 | 10 | * Removed buttons' size hints (caused some button labels be truncated). 11 | * Resizable task list window. 12 | * Include swt.jar to linux binary distro to stick with precise SWT version. 13 | * Modern looking flat icons, modified notification popup. 14 | * Updated status line. 15 | * A built-in LCD font is used in timer window. 16 | * Disabled "hide when minimized" option on Linux (works unreliably). 17 | * File logging (/logs) 18 | * Correct workspace unlocking on exit. 19 | * Bug fix: a dialog was closing on Enter when there was an error message. 20 | 21 | 1.5 22 | 23 | * Workspace locking correctly works on Linux (utilizes /run/lock). 24 | * "New", "Closed", "Open" columns in "Summary" table. 25 | * timecult.sh fixed to overwrite an old desktop entry upon version change. 26 | * Allow https: for hyperlinks 27 | * FIXED: Clear a background of due tasks when they are closed or cancelled 28 | 29 | 1.4 30 | 31 | * Versioning scheme changed 0.14->1.4 32 | * [Enter] expands/collapses project tree branch. 33 | * launch4j is used for Win launcher, bundled JRE. 34 | * A flag can be set using one of the numeric keys '1'..'5' or cleared with '0' key. 35 | * Deadline field for project items. -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/TaskContainer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * File: TaskContainer.java 3 | * Created: 21.05.2005 4 | * 5 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License along 18 | * with this program; if not, write to the Free Software Foundation, Inc., 19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 | */ 21 | package net.sf.timecult.model; 22 | 23 | /** 24 | * Defines an abstract task container. Implementations may use different storage types. 25 | * @author rvishnyakov (rvishnyakov@yahoo.com) 26 | */ 27 | public interface TaskContainer { 28 | 29 | /** 30 | * @return A list of project tasks. 31 | */ 32 | Task[] getTasks(); 33 | 34 | /** 35 | * Adds a task to the project. 36 | * @param task The task to add. 37 | */ 38 | void addTask(Task task); 39 | 40 | void removeTask(String id); 41 | 42 | void removeAll(); 43 | } 44 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/stopwatch/StopwatchEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) TimeCult Project Team, 2005-2023 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: $ 19 | */ 20 | package net.sf.timecult.stopwatch; 21 | 22 | /** 23 | * Stopwatch event. 24 | */ 25 | public class StopwatchEvent { 26 | 27 | public enum Type { 28 | START, 29 | STOP, 30 | TICK 31 | } 32 | 33 | private final Stopwatch _source; 34 | private final Type _eventType; 35 | 36 | public StopwatchEvent(Type eventType, Stopwatch source) { 37 | _eventType = eventType; 38 | _source = source; 39 | } 40 | 41 | public Type getType() { 42 | return _eventType; 43 | } 44 | 45 | public Stopwatch getSource() { 46 | return _source; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/help/HelpProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2007-2010 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: HelpProvider.java,v 1.3 2010/03/02 12:13:59 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.ui.swt.help; 21 | 22 | import java.io.File; 23 | import java.io.IOException; 24 | 25 | import net.sf.timecult.ResourceHelper; 26 | import net.sf.timecult.util.LinkHelper; 27 | 28 | import org.eclipse.swt.program.Program; 29 | 30 | /** 31 | * Creates and manages the help window. 32 | */ 33 | public class HelpProvider { 34 | 35 | 36 | /** 37 | * Opens help window. 38 | */ 39 | public static void openHelp() { 40 | String baseUrl = ResourceHelper.getString("help.baseUrl"); 41 | Program.launch(baseUrl); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /main/doc/manual/using.dmi: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: using.dmi,v 1.1 2008/03/14 21:37:52 dyadix Exp $ 19 | * 20 | 21 | @section Using Timecult 22 | 23 | @section Creating Projects and Tasks 24 | 25 | The content of this topic is not available yet. 26 | 27 | @section \end 28 | 29 | @section Measuring Time 30 | 31 | The content of this topic is not available yet. 32 | 33 | @section \end 34 | 35 | @section Manually Adding Time Records 36 | 37 | The content of this topic is not available yet. 38 | 39 | @section \end 40 | 41 | @section Browsing Summaries 42 | 43 | The content of this topic is not available yet. 44 | 45 | @section \end 46 | 47 | @section \end -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/ProjectContainer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * File: ProjectContainer.java 3 | * Created: 21.05.2005 4 | * 5 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License along 18 | * with this program; if not, write to the Free Software Foundation, Inc., 19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 | */ 21 | package net.sf.timecult.model; 22 | 23 | /** 24 | * Abstract container for projects. Implementations may use different storage types. 25 | * @author rvishnyakov (rvishnyakov@yahoo.com) 26 | */ 27 | public interface ProjectContainer { 28 | 29 | /** 30 | * @return Array of projects in the container. 31 | */ 32 | Project[] getProjects(); 33 | 34 | /** 35 | * Adds a project to container. 36 | * @param project The project to add. 37 | */ 38 | void addProject(Project project); 39 | 40 | void removeProject(String id); 41 | 42 | void removeAll(); 43 | 44 | Project getProjectById(String id); 45 | } 46 | -------------------------------------------------------------------------------- /main/lib/xmlenc-license.txt: -------------------------------------------------------------------------------- 1 | Copyright 2003-2005, Ernst de Haan 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | 1. Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | 2. Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | 3. Neither the name of the copyright holder nor the names of its contributors 15 | may be used to endorse or promote products derived from this software 16 | without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /main/doc/manual/whatsnew.dmi: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008-2010 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: whatsnew.dmi,v 1.17 2011/01/21 10:03:23 dyadix Exp $ 19 | * 20 | 21 | @section What's New in Version 0.12 22 | 23 | @list 24 | 25 | @* Fixed 3110187: Index out of range exception. 26 | @* Fixed 3150290: Invalid date range calculation for quick time sheet if start/end dates belong to 27 | different years. 28 | @* Alt+T keyboard shortcut to add a task. 29 | @* Alt+S keyboard shortcut to start a timer. 30 | @* New search feature ("Search" menu or Ctrl+F). 31 | @* Migration to WinRun4j, a possibility to pin the program to Windows 7 task bar. 32 | @* Join records feature. 33 | @* Running timer data is saved periodically to the journal. 34 | 35 | @list \end 36 | 37 | @section \end -------------------------------------------------------------------------------- /main/doc/de/using.dmi: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: using.dmi,v 1.2 2008/05/29 06:15:43 dyadix Exp $ 19 | * 20 | 21 | @section Verwendung von TimeCult 22 | 23 | @section Projekte und Aufgaben anlegen \id creating_projects_tasks 24 | 25 | Der Inhalt dieses Abschnitts ist noch nicht verfügbar. 26 | 27 | @section \end 28 | 29 | @section Zeitmessung \id measure_time 30 | 31 | Der Inhalt dieses Abschnitts ist noch nicht verfügbar. 32 | 33 | @section \end 34 | 35 | @section Manuelles Hinzufügen von Zeiten \id adding_time_recs 36 | 37 | Der Inhalt dieses Abschnitts ist noch nicht verfügbar. 38 | 39 | @section \end 40 | 41 | @section Verwendung der Gesamtübersicht \id browsing_summaries 42 | 43 | Der Inhalt dieses Abschnitts ist noch nicht verfügbar. 44 | 45 | @section \end 46 | 47 | @section \end -------------------------------------------------------------------------------- /main/doc/de/options.dmi: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: options.dmi,v 1.1 2008/04/22 22:02:57 kstruck Exp $ 19 | * 20 | 21 | @section Options 22 | 23 | Um Programmoptionen und Einstellungen vorzunehmen, benutzen Sie im Menü "Extras" den Menüpunkt "Optionen...". 24 | 25 | @section Allgemeine Optionen (Registerkarte Allgemein) 26 | 27 | @list 28 | @* Fenster verstecken wenn minimiert: wenn diese Option aktiviert ist, wird TimeCult versteckt, wenn es minimiert wird. Es ist dann nicht mehr in der Taskleiste sichtbar. 29 | TimeCult kann durch Klick auf das Icon im System Tray wieder in den Vordergrund geholt werden. 30 | @* Timer Position beibehalten: Wenn aktiviert, benutzt TimeCult immer die gleiche Position für die Anzeige des Timers. 31 | Wenn nicht aktiviert, wird die Timer Position bei jedem Start neu festgelegt. 32 | @list \end 33 | 34 | @section \end 35 | 36 | @section \end -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/mem/LocalIdGenerator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2005-2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: LocalIdGenerator.java,v 1.2 2008/07/12 06:49:12 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.model.mem; 21 | import net.sf.timecult.model.*; 22 | 23 | /** 24 | * Generates local IDs. 25 | * @author rvishnyakov 26 | */ 27 | public class LocalIdGenerator implements IdGenerator 28 | { 29 | 30 | /* (non-Javadoc) 31 | * @see dyadix.timetracker.model.IdGenerator#getNewId() 32 | */ 33 | public String getNewId() 34 | { 35 | _currId ++; 36 | return Integer.toString(_currId); 37 | } 38 | 39 | public String getLastId() 40 | { 41 | return Integer.toString(_currId); 42 | } 43 | 44 | public boolean setCurrentId(String id) 45 | { 46 | setCurrentId(Integer.parseInt(id)); 47 | return true; 48 | } 49 | 50 | public void setCurrentId(int id) 51 | { 52 | _currId = id; 53 | } 54 | 55 | private int _currId = 0; 56 | 57 | } 58 | -------------------------------------------------------------------------------- /main/doc/manual/manual.dm: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: manual.dm,v 1.7 2010/10/24 14:11:49 dyadix Exp $ 19 | * 20 | 21 | @title TimeCult Manual 22 | 23 | @set stylesheet \= style.css 24 | @set stylesheet-fo \= style.css 25 | @set left-margin \= 40pt 26 | @set generate-section-numbers \= no 27 | 28 | @!include whatsnew.dmi 29 | 30 | @section Introduction 31 | 32 | @section General Info 33 | 34 | TimeCult is a personal project/task management and time tracking application. 35 | It started as a simple time tracker growing towards complete project/task management 36 | solution allowing to have all the needed information at hand. 37 | 38 | @section \end 39 | 40 | @section About This Help 41 | 42 | Please note that this help is under development and more information will be added to it over time. 43 | 44 | @section \end 45 | 46 | @!include features.dmi 47 | @!include concepts.dmi 48 | 49 | @section \end 50 | 51 | @!include using.dmi 52 | @!include options.dmi 53 | @!include history.dmi 54 | @!include license.dmi 55 | 56 | @footer Copyright (c) Rustam Vishnyakov, 2007-2010 -------------------------------------------------------------------------------- /main/doc/de/manual.dm: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: manual.dm,v 1.2 2008/05/29 06:15:59 dyadix Exp $ 19 | * 20 | 21 | @title TimeCult Handbuch 22 | 23 | @set stylesheet \= style.css 24 | @set stylesheet-fo \= style.css 25 | @set left-margin \= 40pt 26 | @set generate-section-numbers \= no 27 | 28 | @!include whatsnew.dmi 29 | 30 | @section Einleitung 31 | 32 | @section Überblick \id general_info 33 | 34 | TimeCult ist die persönliche Projekt- und Zeitmanagement-Software. 35 | Es wurde als einfaches Programm zur Zeiterfassung entwickelt 36 | und ist nun auf dem Weg zu einer kompletten Projektmanagement-Lösung, mit dem Ziel, 37 | alle benötigten Informationen schnell zur Hand zu haben. 38 | 39 | @section \end 40 | 41 | @section Über dieses Dokument \id about_this_doc 42 | 43 | Wie TimeCult selbst ist auch dieses Dokument in Entwicklung und wird ständig erweitert. 44 | 45 | @section \end 46 | 47 | @!include features.dmi 48 | @!include concepts.dmi 49 | 50 | @section \end 51 | 52 | @!include using.dmi 53 | @!include options.dmi 54 | @!include license.dmi 55 | 56 | @footer Copyright (c) Rustam Vishnyakov, 2007-2008 -------------------------------------------------------------------------------- /main/main.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/SWTTaskEditDialog.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) TimeCult Project Team, 2005-2023 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | */ 18 | package net.sf.timecult.ui.swt; 19 | 20 | import net.sf.timecult.ResourceHelper; 21 | import net.sf.timecult.TimeTracker; 22 | import net.sf.timecult.model.Task; 23 | import net.sf.timecult.model.ProjectTreeItem.ItemType; 24 | 25 | public class SWTTaskEditDialog extends ProjectItemEditDialog { 26 | 27 | public SWTTaskEditDialog(SWTMainWindow parent, Task task) { 28 | super(parent, task); 29 | _task = task; 30 | } 31 | 32 | 33 | public SWTTaskEditDialog(SWTMainWindow parent) { 34 | super(parent, ItemType.TASK); 35 | } 36 | 37 | 38 | @Override 39 | protected String getTitle() { 40 | if (_task == null) { 41 | return ResourceHelper.getString("dialog.newTask"); 42 | } 43 | else { 44 | return ResourceHelper.getString("dialog.properties.task"); 45 | } 46 | } 47 | 48 | 49 | @Override 50 | protected boolean afterUpdate() { 51 | TimeTracker.getInstance().updateTask(); 52 | return true; 53 | } 54 | 55 | 56 | private Task _task; 57 | 58 | } 59 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/ItemStyle.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) TimeCult Project Team, 2005-2019 (dev@codeflections.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: $ 19 | */ 20 | 21 | package net.sf.timecult.ui.swt; 22 | 23 | import org.eclipse.swt.graphics.Color; 24 | import org.eclipse.swt.graphics.Font; 25 | import org.eclipse.swt.graphics.Image; 26 | 27 | public class ItemStyle { 28 | private Image _image; 29 | private Font _font; 30 | private Color _foreground; 31 | private Color _background; 32 | 33 | public Font getFont() { 34 | return _font; 35 | } 36 | 37 | public void setFont(Font _font) { 38 | this._font = _font; 39 | } 40 | 41 | public Color getForeground() { 42 | return _foreground; 43 | } 44 | 45 | public void setForeground(Color _foreground) { 46 | this._foreground = _foreground; 47 | } 48 | 49 | public Color getBackground() { 50 | return _background; 51 | } 52 | 53 | public void setBackground(Color _background) { 54 | this._background = _background; 55 | } 56 | 57 | public Image getImage() { 58 | return _image; 59 | } 60 | 61 | public void setImage(Image _image) { 62 | this._image = _image; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/SplashScreen.java: -------------------------------------------------------------------------------- 1 | package net.sf.timecult.ui.swt; 2 | 3 | import net.sf.timecult.ResourceHelper; 4 | import org.eclipse.swt.SWT; 5 | import org.eclipse.swt.graphics.Image; 6 | import org.eclipse.swt.layout.GridLayout; 7 | import org.eclipse.swt.widgets.Display; 8 | import org.eclipse.swt.widgets.Label; 9 | import org.eclipse.swt.widgets.Shell; 10 | 11 | public class SplashScreen { 12 | private final int MIN_DISPLAY_TIME = 2000; 13 | 14 | public SplashScreen(Display display) { 15 | _display = display; 16 | } 17 | 18 | public void open() { 19 | _shell = new Shell(_display, SWT.ON_TOP); 20 | setup(_shell); 21 | _shell.pack(); 22 | SWTMainWindow.centerShell(_shell); 23 | _shell.open(); 24 | _display.asyncExec(new Runnable() { 25 | @Override 26 | public void run() { 27 | try { 28 | Thread.sleep(MIN_DISPLAY_TIME); 29 | } catch (InterruptedException e) { 30 | // ignore 31 | } 32 | if (isOpen()) close(); 33 | } 34 | }); 35 | } 36 | 37 | private void setup(Shell shell) { 38 | GridLayout gl = new GridLayout(); 39 | gl.numColumns = 1; 40 | gl.marginHeight = 0; 41 | gl.marginWidth = 0; 42 | gl.verticalSpacing = 0; 43 | shell.setLayout(gl); 44 | Image splash = new Image(shell.getDisplay(), ResourceHelper 45 | .openStream("images/splash.png")); 46 | Label splashLabel = new Label(shell, SWT.NULL); 47 | splashLabel.setImage(splash); 48 | } 49 | 50 | public void close() { 51 | if (!_shell.isDisposed() && _shell.isVisible()) { 52 | _shell.close(); 53 | } 54 | } 55 | 56 | public boolean isOpen() { 57 | return _shell != null && _shell.isVisible(); 58 | } 59 | 60 | private Display _display; 61 | 62 | private Shell _shell; 63 | } 64 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/CustomFilterList.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2009 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: CustomFilterList.java,v 1.3 2009/09/20 18:53:21 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.model; 21 | 22 | import java.util.HashMap; 23 | 24 | /** 25 | * Contains custom filters created by end user. 26 | */ 27 | public class CustomFilterList { 28 | 29 | private HashMap filters; 30 | private Workspace workspace; 31 | 32 | public CustomFilterList(Workspace workspace) { 33 | this.filters = new HashMap(); 34 | this.workspace = workspace; 35 | } 36 | 37 | public void addFilter(TimeRecordFilter filter) { 38 | this.filters.put(filter.getLabel(), filter); 39 | } 40 | 41 | public TimeRecordFilter getFilter(String label) { 42 | return this.filters.get(label); 43 | } 44 | 45 | public TimeRecordFilter[] asArray() { 46 | return this.filters.values().toArray(new TimeRecordFilter[0]); 47 | } 48 | 49 | public void removeFilter(TimeRecordFilter filter) { 50 | this.filters.remove(filter.getLabel()); 51 | this.workspace.setFilter(null); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/WorkspaceSettings.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2010 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | */ 18 | package net.sf.timecult.model; 19 | 20 | /** 21 | * Contains main workspace configuration settings. 22 | * @author rvishnyakov 23 | */ 24 | public class WorkspaceSettings { 25 | 26 | private long roundUpInterval = 0; // in milliseconds 27 | private Workspace workspace; 28 | 29 | public WorkspaceSettings(Workspace workspace) { 30 | this.workspace = workspace; 31 | } 32 | 33 | public long getRoundUpInterval() { 34 | return roundUpInterval; 35 | } 36 | 37 | public void setRoundUpInterval(long interval) { 38 | this.roundUpInterval = interval; 39 | fireSettingsUpdated(); 40 | } 41 | 42 | public void setRoundUpIntervalInMinutes(int roundUpMin) { 43 | this.roundUpInterval = roundUpMin * 60000; 44 | fireSettingsUpdated(); 45 | } 46 | 47 | public int getRoundUpIntervalInMinutes() { 48 | return (int) (roundUpInterval / 60000); 49 | } 50 | 51 | public void fireSettingsUpdated() { 52 | this.workspace.fireWorkspaceChanged(new WorkspaceEvent(WorkspaceEvent.SETTINGS_UPDATED, this)); 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/DialogFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2010 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: DialogFactory.java,v 1.2 2010/11/30 13:43:13 dyadix Exp $ 19 | */ 20 | 21 | package net.sf.timecult.ui.swt; 22 | 23 | import net.sf.timecult.model.Activity; 24 | import net.sf.timecult.model.IdleTask; 25 | import net.sf.timecult.model.Project; 26 | import net.sf.timecult.model.ProjectTreeItem; 27 | import net.sf.timecult.model.Task; 28 | import net.sf.timecult.model.Workspace; 29 | 30 | public class DialogFactory { 31 | 32 | public static SWTDialog createPropertyDialog(SWTMainWindow mainWindow, 33 | ProjectTreeItem item) { 34 | switch (item.getItemType()) { 35 | case WORKSPACE: 36 | return new WorkspaceEditDialog(mainWindow, (Workspace) item); 37 | case PROJECT: 38 | return new SWTProjectEditDialog(mainWindow, (Project) item); 39 | case TASK: 40 | return new SWTTaskEditDialog(mainWindow, (Task) item); 41 | case ACTIVITY: 42 | return new ActivityEditDialog(mainWindow, (Activity) item); 43 | case IDLE_TASK: 44 | return new IdleTaskEditDialog(mainWindow, (IdleTask) item); 45 | } 46 | return null; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/ActivityEditDialog.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) TimeCult Project Team, 2005-2023 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | */ 18 | package net.sf.timecult.ui.swt; 19 | 20 | import net.sf.timecult.ResourceHelper; 21 | import net.sf.timecult.TimeTracker; 22 | import net.sf.timecult.model.Activity; 23 | import net.sf.timecult.model.ProjectTreeItem.ItemType; 24 | 25 | public class ActivityEditDialog extends ProjectItemEditDialog { 26 | 27 | private Activity activity; 28 | 29 | public ActivityEditDialog(SWTMainWindow parent, Activity activity) { 30 | super(parent, activity); 31 | this.activity = activity; 32 | } 33 | 34 | public ActivityEditDialog(SWTMainWindow parent) { 35 | super(parent, ItemType.ACTIVITY); 36 | } 37 | 38 | 39 | @Override 40 | protected boolean afterUpdate() { 41 | TimeTracker.getInstance().updateTask(); 42 | return true; 43 | } 44 | 45 | 46 | @Override 47 | protected String getTitle() { 48 | if (this.activity == null) { 49 | return ResourceHelper.getString("dialog.newActivity"); 50 | } 51 | else { 52 | return ResourceHelper.getString("dialog.properties.activity"); 53 | } 54 | } 55 | 56 | 57 | 58 | } 59 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/mem/MemContainerFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * File: MemContainerFactory.java 3 | * Created: 23.05.2005 4 | * 5 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License along 18 | * with this program; if not, write to the Free Software Foundation, Inc., 19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 | */ 21 | package net.sf.timecult.model.mem; 22 | 23 | import net.sf.timecult.model.*; 24 | 25 | /** 26 | * A factory for project/task containers residing in memory. 27 | * @author rvishnyakov (rvishnyakov@yahoo.com) 28 | */ 29 | public class MemContainerFactory implements ContainerFactory 30 | { 31 | 32 | /** 33 | * @return Memory project container. 34 | * @see dyadix.timetracker.model.ContainerFactory#createProjectContainer() 35 | */ 36 | public ProjectContainer createProjectContainer() 37 | { 38 | return new MemProjectContainer(); 39 | } 40 | 41 | /** 42 | * @return Memory task container. 43 | * @see dyadix.timetracker.model.ContainerFactory#createTaskContainer() 44 | */ 45 | public TaskContainer createTaskContainer() 46 | { 47 | return new MemTaskContainer(); 48 | } 49 | 50 | /** 51 | * @return Time log. 52 | * @see dyadix.timetracker.model.ContainerFactory#createTimeLog() 53 | */ 54 | public TimeLog createTimeLog() 55 | { 56 | return new MemTimeLog(); 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/notifications/NotificationManager.java: -------------------------------------------------------------------------------- 1 | package net.sf.timecult.ui.swt.notifications; 2 | 3 | import net.sf.timecult.ui.swt.SWTMainWindow; 4 | 5 | public class NotificationManager { 6 | 7 | private NotificationWindow notificationWindow; 8 | private Thread notificationThread; 9 | private String message; 10 | 11 | public NotificationManager(SWTMainWindow mainWindow) { 12 | this.notificationWindow = new NotificationWindow(mainWindow); 13 | this.notificationThread = new Thread(new Notifier()); 14 | } 15 | 16 | 17 | public void sendMessage(String message) { 18 | synchronized (message) { 19 | if (!this.notificationThread.isAlive()) { 20 | this.notificationThread.start(); 21 | } 22 | this.message = message; 23 | } 24 | } 25 | 26 | private class Notifier implements Runnable { 27 | 28 | public void run() { 29 | while (true) { 30 | if (message != null) { 31 | synchronized (message) { 32 | notificationWindow.showMessage(message); 33 | for (int i = 0; i <= 255; i += 10) { 34 | notificationWindow.setAlpha(i); 35 | doWait(100); 36 | } 37 | doWait(1000); 38 | for (int i = 255; i >= 0; i -= 10) { 39 | notificationWindow.setAlpha(i); 40 | doWait(100); 41 | } 42 | notificationWindow.close(); 43 | message = null; 44 | } 45 | } 46 | doWait(1000); 47 | } 48 | } 49 | 50 | } 51 | 52 | private void doWait(long ms) { 53 | try { 54 | Thread.sleep(ms); 55 | } 56 | catch (InterruptedException e) { 57 | // ignore 58 | } 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/GenericUIManager.java: -------------------------------------------------------------------------------- 1 | package net.sf.timecult.ui; 2 | 3 | import java.awt.Rectangle; 4 | import java.io.File; 5 | 6 | import net.sf.timecult.model.Project; 7 | import net.sf.timecult.model.Task; 8 | import net.sf.timecult.model.Workspace; 9 | 10 | /** 11 | * Defines basic operations for any UI type regardless of its 12 | * implementation platform. 13 | * 14 | * @author rustam 15 | */ 16 | public interface GenericUIManager { 17 | 18 | void initUI(); 19 | 20 | void startUI(); 21 | 22 | void setLookAndFeel(String name); 23 | 24 | String getLookAndFeel(); 25 | 26 | void setBounds(int left, int top, int width, int height); 27 | 28 | Rectangle getBounds(); 29 | 30 | /** 31 | * Rebind all the UI elements interested in receiving workspace 32 | * event notifications. 33 | * 34 | * @param workspace 35 | */ 36 | void rebindWorkspaceListeners(Workspace workspace); 37 | 38 | void showError(String message); 39 | 40 | void setCurrentSelection(Object object); 41 | 42 | void displaySplashScreen(); 43 | 44 | void startTimer(Workspace workspace, Task task, long initTime); 45 | 46 | void updateProjectTree(); 47 | 48 | void updateOnSelection(Object object); 49 | 50 | void updateOnRemove(Object object); 51 | 52 | void updateAll(); 53 | 54 | File chooseFile(boolean forOpen); 55 | 56 | File chooseTargetCsvFile(); 57 | 58 | void setSaveEnabled(boolean enabled); 59 | 60 | void updateFileMenu(); 61 | 62 | void updateTimeLog(Object source); 63 | 64 | void updateTotals(); 65 | 66 | boolean confirmTaskDeletion(Task task); 67 | 68 | boolean confirmProjectDeletion(Project project); 69 | 70 | boolean confirmExit(String message); 71 | 72 | boolean confirmSave(); 73 | 74 | void cancelExit(); 75 | 76 | boolean activeTimersExist(); 77 | 78 | void setIdleTime(long duration); 79 | 80 | void clearIdleTime(); 81 | 82 | void displayWarning(String message); 83 | 84 | void showNotification(String message); 85 | } 86 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/calendar/CalendarDialog.java: -------------------------------------------------------------------------------- 1 | package net.sf.timecult.ui.swt.calendar; 2 | 3 | import java.util.Calendar; 4 | 5 | import org.eclipse.swt.SWT; 6 | import org.eclipse.swt.layout.GridLayout; 7 | import org.eclipse.swt.widgets.Composite; 8 | import org.eclipse.swt.widgets.Shell; 9 | import org.eclipse.swt.widgets.Text; 10 | import org.vafada.swtcalendar.SWTCalendar; 11 | import org.vafada.swtcalendar.SWTCalendarEvent; 12 | import org.vafada.swtcalendar.SWTCalendarListener; 13 | 14 | import net.sf.timecult.ui.swt.SWTDialog; 15 | 16 | public class CalendarDialog extends SWTDialog { 17 | 18 | private SWTCalendar swtCal; 19 | private ICalendarDialogListener listener; 20 | private Calendar calendar; 21 | private Text dateField; 22 | 23 | public CalendarDialog(Shell parent, Text dateField) { 24 | super(parent, true); 25 | this.dateField = dateField; 26 | } 27 | 28 | 29 | @Override 30 | protected Composite createContentPanel(Shell shell) { 31 | Composite contentPanel = new Composite(shell, SWT.None); 32 | GridLayout gl = new GridLayout(); 33 | contentPanel.setLayout(gl); 34 | 35 | swtCal = new SWTCalendar(contentPanel); 36 | this.calendar = swtCal.getCalendar(); 37 | 38 | swtCal.addSWTCalendarListener(new SWTCalendarListener() { 39 | public void dateChanged(SWTCalendarEvent evt) { 40 | CalendarDialog.this.calendar = evt.getCalendar(); 41 | } 42 | }); 43 | 44 | return contentPanel; 45 | } 46 | 47 | 48 | @Override 49 | protected String getTitle() { 50 | return "Calendar"; //TODO: Localize 51 | } 52 | 53 | 54 | @Override 55 | protected boolean handleOk() { 56 | if (this.listener != null) { 57 | this.listener.dateSelected(this.calendar, this.dateField); 58 | } 59 | return true; 60 | } 61 | 62 | 63 | public void setListener(ICalendarDialogListener listener) { 64 | this.listener = listener; 65 | } 66 | 67 | } 68 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/SWTProjectEditDialog.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) TimeCult Project Team, 2005-2023 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | */ 18 | package net.sf.timecult.ui.swt; 19 | 20 | import net.sf.timecult.ResourceHelper; 21 | import net.sf.timecult.TimeTracker; 22 | import net.sf.timecult.model.Project; 23 | import net.sf.timecult.model.Workspace; 24 | import net.sf.timecult.model.ProjectTreeItem.ItemType; 25 | 26 | public class SWTProjectEditDialog extends ProjectItemEditDialog { 27 | 28 | 29 | public SWTProjectEditDialog(SWTMainWindow parent, Project project) { 30 | super(parent, project); 31 | _project = project; 32 | } 33 | 34 | 35 | public SWTProjectEditDialog(SWTMainWindow parent) { 36 | super(parent, ItemType.PROJECT); 37 | } 38 | 39 | 40 | @Override 41 | protected boolean afterUpdate() { 42 | TimeTracker.getInstance().updateProject(); 43 | if (_project instanceof Workspace) { 44 | getMainWindow().updateTitle(); 45 | } 46 | return true; 47 | } 48 | 49 | 50 | @Override 51 | protected String getTitle() { 52 | if (_project == null) { 53 | return ResourceHelper.getString("dialog.newProject"); 54 | } else { 55 | return ResourceHelper.getString("dialog.properties.project"); 56 | } 57 | } 58 | 59 | private Project _project; 60 | 61 | } 62 | -------------------------------------------------------------------------------- /main/timecult-win32.iss: -------------------------------------------------------------------------------- 1 | ; 2 | ; TimeCult InnoSetup configuration file for Win64 3 | ; Copyright (c) Rustam Vishnyakov, 2007-2013 4 | ; 5 | #include "build\temp\version.iss" 6 | 7 | [Setup] 8 | AppName=TimeCult 9 | AppPublisher=TimeCult Project Team 10 | AppPublisherURL=http://timecult.sf.net 11 | AppSupportURL=http://timecult.sf.net 12 | AppUpdatesURL=http://timecult.sf.net 13 | ArchitecturesAllowed=x64 14 | ArchitecturesInstallIn64BitMode=x64 15 | DefaultDirName={pf}\TimeCult 16 | DefaultGroupName=TimeCult 17 | LicenseFile=gpl.txt 18 | WizardImageFile=wiz_image.bmp 19 | WizardSmallImageFile=wiz_icon.bmp 20 | ShowLanguageDialog=yes 21 | 22 | [Languages] 23 | Name: "en"; MessagesFile: "compiler:Default.isl" 24 | Name: "de"; MessagesFile: "compiler:Languages\German.isl" 25 | Name: "fr"; MessagesFile: "compiler:Languages\French.isl" 26 | Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl" 27 | 28 | [Tasks] 29 | Name: "desktopicon"; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; MinVersion: 4,4 30 | 31 | [Files] 32 | Source: "dist\*.*"; DestDir: "{app}"; Flags: ignoreversion 33 | Source: "dist\lib\*.*"; DestDir: "{app}\lib"; Flags: ignoreversion 34 | Source: "dist\jre\*.*"; DestDir: "{app}\jre"; Flags: ignoreversion recursesubdirs 35 | 36 | [Icons] 37 | Name: "{group}\TimeCult"; Filename: "{app}\timecult.exe" ; WorkingDir: "{app}\" 38 | Name: "{group}\Uninstall"; Filename: "{app}\unins000.exe" ; WorkingDir: "{app}\" 39 | Name: "{userdesktop}\TimeCult"; Filename: "{app}\timecult.exe"; MinVersion: 4,4; Tasks: desktopicon ; WorkingDir: "{app}\" 40 | 41 | 42 | [Run] 43 | Filename: "{app}\timecult.exe"; Description: "Run TimeCult now"; Flags: shellexec postinstall skipifsilent 44 | 45 | [Registry] 46 | Root: HKCR; Subkey: ".tmt"; ValueType: string; ValueData: "TmtFile"; Flags: uninsdeletekey; 47 | Root: HKCR; Subkey: "TmtFile"; ValueType: string; ValueData: "TimeCult Data File"; Flags: uninsdeletekey; 48 | Root: HKCR; Subkey: "TmtFile\shell\open\command"; ValueType: string; ValueData: """{app}\timecult.exe"" ""%1"""; 49 | 50 | [Code] 51 | function GetSwtDir: String; 52 | begin 53 | Result := GetIniString('setup','SwtDir','','setup.ini'); 54 | end; 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/Totals.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) TimeCult Project Team, 2005-2014 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: $ 19 | */ 20 | 21 | package net.sf.timecult.model; 22 | 23 | /** 24 | * @author rvishnyakov 25 | */ 26 | public class Totals { 27 | private Duration duration = new Duration(0); 28 | private int newItems = 0; 29 | private int closedItems = 0; 30 | private int openItems = 0; 31 | 32 | public Duration getDuration() { 33 | return duration; 34 | } 35 | 36 | public void addDuration(Duration toAdd) { 37 | duration.inc(toAdd.getValue()); 38 | } 39 | 40 | public int getNewItems() { 41 | return newItems; 42 | } 43 | 44 | public int getClosedItems() { 45 | return closedItems; 46 | } 47 | 48 | public void incNewItems(int increment) { 49 | newItems += increment; 50 | } 51 | 52 | public void incClosedItems(int increment) { 53 | closedItems += increment; 54 | } 55 | 56 | public int getOpenItems() { 57 | return openItems; 58 | } 59 | 60 | public void incOpenItems(int increment) { 61 | openItems += increment; 62 | } 63 | 64 | public void addTotals(Totals toAdd) { 65 | if (toAdd == null) return; 66 | newItems += toAdd.getNewItems(); 67 | closedItems += toAdd.getClosedItems(); 68 | openItems += toAdd.getOpenItems(); 69 | duration.inc(toAdd.getDuration().getValue()); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/WaitReason.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2007 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: WaitReason.java,v 1.1 2007/12/07 21:30:33 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.model; 21 | 22 | import java.util.Collection; 23 | import java.util.TreeMap; 24 | 25 | /** 26 | * Contains a detailed description of the task's wait reason. In the future it may have 27 | * more properties to describe task dependencies. The class also keeps track on all the previously 28 | * defined wait reasons so that a user can reuse them for several tasks at a time. 29 | * @author Rustam Vishnyakov 30 | */ 31 | public class WaitReason { 32 | 33 | private String reasonText; 34 | private static TreeMap allReasons = new TreeMap(); 35 | 36 | private WaitReason(String reasonText) { 37 | this.reasonText = reasonText; 38 | } 39 | 40 | public static WaitReason newInstance(String reasonText) { 41 | WaitReason instance = allReasons.get(reasonText); 42 | if (instance == null) { 43 | instance = new WaitReason(reasonText); 44 | allReasons.put(reasonText, instance); 45 | } 46 | return instance; 47 | } 48 | 49 | public String getText() { 50 | return this.reasonText; 51 | } 52 | 53 | public static WaitReason[] getAllReasons() { 54 | Collection values = allReasons.values(); 55 | return values.toArray(new WaitReason[values.size()]); 56 | } 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/mem/MemTaskContainer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * File: MemTaskContainer.java 3 | * Created: 21.05.2005 4 | * 5 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 6 | * 7 | * This program is free software; you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation; either version 2 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License along 18 | * with this program; if not, write to the Free Software Foundation, Inc., 19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 | */ 21 | package net.sf.timecult.model.mem; 22 | import java.util.*; 23 | import net.sf.timecult.model.*; 24 | 25 | /** 26 | * Container for the tasks residing in memory. 27 | * @author rvishnyakov (rvishnyakov@yahoo.com) 28 | */ 29 | public class MemTaskContainer implements TaskContainer 30 | { 31 | 32 | /** 33 | * @return Array of tasks for the project. 34 | */ 35 | public Task[] getTasks() 36 | { 37 | Task taskArray[] = new Task[_tasks.size()]; 38 | int i = 0; 39 | for (Iterator iter = _tasks.values().iterator(); iter.hasNext();) 40 | { 41 | taskArray[i] = (Task) iter.next(); 42 | i++; 43 | } 44 | return taskArray; 45 | } 46 | 47 | /** 48 | * Adds a task. 49 | * @param task The task to add. 50 | */ 51 | public void addTask(Task task) 52 | { 53 | _tasks.put(task.getId(), task); 54 | } 55 | 56 | /** 57 | * Removes the task 58 | * @param id The id of the task to be removed. 59 | */ 60 | public void removeTask(String id) 61 | { 62 | if(_tasks.containsKey(id)) 63 | { 64 | _tasks.remove(id); 65 | } 66 | } 67 | 68 | public void removeAll() 69 | { 70 | _tasks.clear(); 71 | } 72 | 73 | private TreeMap _tasks = new TreeMap(); 74 | 75 | } 76 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/timer/TimerTrayImage.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) TimeCult Project Team, 2005-2023 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: $ 19 | */ 20 | 21 | package net.sf.timecult.ui.swt.timer; 22 | 23 | import net.sf.timecult.ui.swt.IconSet; 24 | import org.eclipse.swt.SWT; 25 | import org.eclipse.swt.graphics.Color; 26 | import org.eclipse.swt.graphics.GC; 27 | import org.eclipse.swt.graphics.Image; 28 | import org.eclipse.swt.widgets.Display; 29 | 30 | public class TimerTrayImage { 31 | 32 | private final Image _image; 33 | private final GC _gc; 34 | private final Color _blackColor; 35 | private final Color _whiteColor; 36 | private final Color _darkGrayColor; 37 | 38 | public TimerTrayImage(Display display) { 39 | _image = new Image(display, IconSet.ICON_SIZE, IconSet.ICON_SIZE); 40 | _gc = new GC(_image); 41 | _blackColor = display.getSystemColor(SWT.COLOR_BLACK); 42 | _whiteColor = display.getSystemColor(SWT.COLOR_WHITE); 43 | _darkGrayColor = display.getSystemColor(SWT.COLOR_DARK_GRAY); 44 | } 45 | 46 | public void fill(int degrees) { 47 | _gc.setBackground(_blackColor); 48 | _gc.fillRectangle(0, 0, IconSet.ICON_SIZE, IconSet.ICON_SIZE); 49 | _gc.setBackground(_darkGrayColor); 50 | _gc.fillOval(1,1, IconSet.ICON_SIZE - 1, IconSet.ICON_SIZE - 1); 51 | _gc.setBackground(_whiteColor); 52 | _gc.fillArc(1, 1, IconSet.ICON_SIZE - 1, IconSet.ICON_SIZE - 1, 0, degrees); 53 | } 54 | 55 | public Image get() { 56 | return _image; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/TimeLog.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2005-2007 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: TimeLog.java,v 1.4 2011/01/18 02:57:53 dragulceo Exp $ 19 | */ 20 | package net.sf.timecult.model; 21 | 22 | /** 23 | * Defines methods to store and access time records. Particular implementations may use 24 | * different types of storages. 25 | * @author rvishnyakov (rvishnyakov@yahoo.com) 26 | */ 27 | public interface TimeLog { 28 | 29 | /** 30 | * Adds a time record to the log. 31 | * @param timeRec The time record to add. 32 | */ 33 | void addTimeRecord(TimeRecord timeRec); 34 | 35 | /** 36 | * @param filter The filter to select time records. If the filter is null, all time 37 | * records will be returned. 38 | * @return Array of time records matching the given criteria specified by the filter. 39 | */ 40 | TimeRecord[] getTimeRecords(TimeRecordFilter filter); 41 | 42 | void joinRecords(TimeRecord timeRecs[]); 43 | /** 44 | * Removes all the time records specified by the given filter. If the filter 45 | * is null, all the records are removed (the time log is cleaned up). 46 | * @param filter The filter to select time records. 47 | */ 48 | void removeRecords(TimeRecordFilter filter); 49 | 50 | /** 51 | * Removes a given set of time records. 52 | * @param timeRecs The array of time records to be removed. 53 | */ 54 | void removeRecords(TimeRecord timeRecs[]); 55 | 56 | /** 57 | * Removes all the time log records. 58 | */ 59 | void clear(); 60 | 61 | } 62 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/document-open.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 20 | 21 | 23 | image/svg+xml 24 | 26 | 27 | 28 | 29 | 30 | 32 | 52 | 59 | 66 | 67 | -------------------------------------------------------------------------------- /main/doc/manual/features.dmi: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: features.dmi,v 1.2 2008/06/19 17:52:24 dyadix Exp $ 19 | * 20 | 21 | @section Key Features \id features 22 | @section Manage Project and Tasks 23 | @list 24 | @* Create a hierarchy of projects, subprojects and tasks. 25 | @* Add any detailed comments to a project or task. 26 | @* At any time change task state to one of the following: in progress, finished, cancelled. 27 | @* Flag tasks which need attention (since version 0.5.1). Browse flagged items. 28 | @list \end 29 | @section \end 30 | 31 | @section Collect Time Metrics 32 | @list 33 | @* Measure time spent for a task in real time. Several timers can be used if needed. 34 | @* Keep detailed records of used time and comments on what has been done. 35 | @* Quickly get a summary of time spent for each of projects, tasks over a specified 36 | period of time: one day, current week, month or year. Just click to a filter name to 37 | change a time scope. 38 | @list \end 39 | @section \end 40 | 41 | @section Exchange Data With Other Applications 42 | @list 43 | @* Export data to a comma-separated (CSV) format understood by MS Excel and many other applications. 44 | @* Copy and paste data from Time Log (journal) or from Summary to MS Excel or OpenOffice.org Calc. 45 | @* Directly work with TimeCult XML file from other applications. 46 | @list \end 47 | @section \end 48 | 49 | @section \end -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/done.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/SWTDetailsView.java: -------------------------------------------------------------------------------- 1 | package net.sf.timecult.ui.swt; 2 | 3 | import net.sf.timecult.ResourceHelper; 4 | import net.sf.timecult.TimeTracker; 5 | import net.sf.timecult.model.DescriptionHolder; 6 | import net.sf.timecult.model.Workspace; 7 | import net.sf.timecult.model.WorkspaceEvent; 8 | 9 | import org.eclipse.swt.SWT; 10 | import org.eclipse.swt.events.ModifyEvent; 11 | import org.eclipse.swt.events.ModifyListener; 12 | import org.eclipse.swt.widgets.TabItem; 13 | import org.eclipse.swt.widgets.Text; 14 | 15 | public class SWTDetailsView { 16 | 17 | public SWTDetailsView(SWTMainWindow mainWindow) { 18 | _mainWindow = mainWindow; 19 | setup(); 20 | } 21 | 22 | 23 | private void setup() { 24 | TabItem detailsTab = new TabItem(_mainWindow.getMainTabFolder() 25 | .getTabs(), SWT.BORDER); 26 | detailsTab.setText(ResourceHelper.getString("tab.notes")); 27 | _descriptionText = new Text(detailsTab.getParent(), 28 | SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); 29 | _descriptionText.addModifyListener(new ModifyListener() { 30 | public void modifyText(ModifyEvent evt) { 31 | updateText(); 32 | } 33 | }); 34 | detailsTab.setControl(_descriptionText); 35 | } 36 | 37 | public void updateOnSelection(Object selection) { 38 | if (selection instanceof DescriptionHolder) { 39 | _holder = (DescriptionHolder) selection; 40 | updateDescription(_holder.getDescription()); 41 | _descriptionText.setEnabled(true); 42 | } 43 | else { 44 | updateDescription(""); 45 | _descriptionText.setEnabled(false); 46 | } 47 | } 48 | 49 | private void updateDescription(String description) { 50 | _descriptionText.setText(description); 51 | } 52 | 53 | 54 | private void updateText() { 55 | String changedDescription = _descriptionText.getText(); 56 | if (_holder != null && _holder.getDescription() != null 57 | && !_holder.getDescription().equals(changedDescription)) { 58 | _holder.setDescription(changedDescription); 59 | Workspace ws = TimeTracker.getInstance().getWorkspace(); 60 | ws.fireWorkspaceChanged(new WorkspaceEvent( 61 | WorkspaceEvent.NOTES_UPDATED, _holder)); 62 | } 63 | } 64 | 65 | 66 | private SWTMainWindow _mainWindow = null; 67 | private DescriptionHolder _holder = null; 68 | private Text _descriptionText = null; 69 | 70 | } 71 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/mem/MemProjectContainer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: MemProjectContainer.java,v 1.3 2007/05/30 17:57:17 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.model.mem; 21 | 22 | import java.util.TreeMap; 23 | import net.sf.timecult.model.*; 24 | 25 | /** 26 | * Stores the projects in memory. 27 | * @author rvishnyakov (rvishnyakov@yahoo.com) 28 | */ 29 | public class MemProjectContainer implements ProjectContainer 30 | { 31 | 32 | 33 | /** 34 | * @return Subprojects 35 | */ 36 | public Project[] getProjects() 37 | { 38 | Project subprojArray[] = new Project[_projects.size()]; 39 | int i = 0; 40 | for (Project project : _projects.values()) { 41 | subprojArray[i] = project; 42 | i++; 43 | } 44 | return subprojArray; 45 | } 46 | 47 | 48 | /** 49 | * Adds a project. 50 | * @param project The project to add. 51 | */ 52 | public void addProject(Project project) 53 | { 54 | _projects.put(project.getId(), project); 55 | } 56 | 57 | 58 | /** 59 | * Removes a project 60 | * @param id The id of the project to be removed. 61 | */ 62 | public void removeProject(String id) 63 | { 64 | if(_projects.containsKey(id)) 65 | { 66 | _projects.remove(id); 67 | } 68 | } 69 | 70 | public void removeAll() 71 | { 72 | _projects.clear(); 73 | } 74 | 75 | public Project getProjectById(String id) 76 | { 77 | return _projects.get(id); 78 | } 79 | 80 | private TreeMap _projects = new TreeMap(); 81 | } 82 | -------------------------------------------------------------------------------- /main/doc/de/concepts.dmi: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: concepts.dmi,v 1.2 2008/05/29 06:16:08 dyadix Exp $ 19 | * 20 | 21 | @section Konzepte 22 | 23 | @section Arbeitsbereich 24 | 25 | Der Arbeitsbereich bündelt alle Informationen zu den Projekten und deren Aufgaben. 26 | Sie können unzählige Arbeitsbereiche verwenden, aber gewöhnlich werden Sie nur mit einem 27 | der Arbeitsbereiche arbeiten, es sei denn, Ihre Aufgaben unterscheiden sich zu sehr voneinander. 28 | 29 | Aus der Sicht des Dateisystems, ist ein Arbeitsbereich eine XML-Datei mit der Endung ".tmt". 30 | 31 | @section \end 32 | 33 | @section Projekt 34 | 35 | Ein Projekt enthält die einzelnen Aufgaben und kann selbst wieder (Unter-)Projekte enthalten. 36 | Sie können keinen Zeiten nur für ein Projekt erfassen, es wird mindestens eine Aufgabe 37 | unterhalb des Projektes benötigt. 38 | 39 | Projekte sind optional. Sie brauchen keine Projekte zu verwenden, sondern können die 40 | Aufgaben auch direkt unterhalb des Arbeitsbereiches anlegen. 41 | 42 | @section \end 43 | 44 | @section Aufgabe 45 | 46 | Eine Aufgabe ist die kleinste Einheit, für welche Sie Zeiten erfassen können. 47 | Im Gegensatz zu den Projekten gibt es keine weitere Untergliederung der Aufgaben. 48 | Somit bleiben die erfassten Zeiten klar und eindeutig. 49 | 50 | @section \end 51 | 52 | @section Untätigkeit / Leerlauf \id idle 53 | 54 | Der Arbeitsbereich ermöglicht die Erfassung von Untätigkeit oder Leerlaufzeiten 55 | mit der dafür vorgesehenen Aufgabe "Untätig". Diese Aufgabe ist Bestandteil eines 56 | jeden Arbeitsbereiches aber ist standardmässig deaktiviert. 57 | 58 | @section \end 59 | 60 | @section \end -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/Duration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2005-2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | */ 18 | package net.sf.timecult.model; 19 | 20 | import net.sf.timecult.util.Formatter; 21 | 22 | public class Duration { 23 | 24 | private long duration = 0; 25 | 26 | public Duration(long duration) { 27 | this.duration = duration; 28 | } 29 | 30 | public String toString() { 31 | return Formatter.toDurationString(this.duration, false); 32 | } 33 | 34 | public long getValue() { 35 | return this.duration; 36 | } 37 | 38 | /** 39 | * Adjust the duration to a given interval in milliseconds upwards or 40 | * increase it by that interval if the duration is already adjusted. 41 | * @param ms The interval in milliseconds. 42 | */ 43 | public void incTo(long ms) { 44 | this.duration = (this.duration / ms + 1) * ms; 45 | } 46 | 47 | /** 48 | * Adjust the duration to a given interval in milliseconds downwards or 49 | * decrease it by that interval if the duration is already adjusted. Sets 50 | * the duration to 0 if it has reached the 0 limit. 51 | * @param ms The interval in milliseconds. 52 | */ 53 | public void decTo(long ms) { 54 | long newDuration = (this.duration / ms) * ms; 55 | if (newDuration == this.duration) { 56 | newDuration -= ms; 57 | } 58 | if (newDuration < 0) { 59 | newDuration = 0; 60 | } 61 | this.duration = newDuration; 62 | } 63 | 64 | /** 65 | * Increase duration by the given number of milliseconds. 66 | * @param ms The number of milliseconds to increase the duration by. 67 | */ 68 | public void inc(long ms) { 69 | duration += ms; 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/IdleTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2005-2008 (rvishnyakov@yahoo.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | */ 18 | package net.sf.timecult.model; 19 | 20 | import net.sf.timecult.ResourceHelper; 21 | 22 | /** 23 | * Idle task is a special case which redefines some standard behaviour. 24 | * For example, it doesn't allow to launch standalone timers for it. 25 | * @author rvishnyakov 26 | */ 27 | public class IdleTask extends Task { 28 | 29 | public final static String ID = "idle"; 30 | private final Totals EMPTY_TOTALS = new Totals(); 31 | 32 | private boolean isEnabled = false; 33 | private Workspace workspace = null; 34 | private String defaultNote; 35 | 36 | public IdleTask(Workspace workspace) { 37 | super(workspace, ID, ResourceHelper.getString("workspace.idle")); 38 | this.workspace = workspace; 39 | } 40 | 41 | public boolean isStandaloneTimerEnabled() { 42 | return false; 43 | } 44 | 45 | public boolean isDeletable() { 46 | return false; 47 | } 48 | 49 | public boolean isEnabled() { 50 | return isEnabled; 51 | } 52 | 53 | public void setEnabled(boolean enabled) { 54 | isEnabled = enabled; 55 | workspace.fireWorkspaceChanged(new WorkspaceEvent( 56 | WorkspaceEvent.TASK_STATUS_CHANGED, this)); 57 | } 58 | 59 | @Override 60 | public ItemType getItemType() { 61 | return ItemType.IDLE_TASK; 62 | } 63 | 64 | @Override 65 | public boolean mayHaveDeadline() { 66 | return false; 67 | } 68 | 69 | 70 | public String getDefaultNote() { 71 | return defaultNote; 72 | } 73 | 74 | public void setDefaultNote(String defaultNote) { 75 | this.defaultNote = defaultNote; 76 | } 77 | 78 | 79 | } 80 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/home-page.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/WorkspaceEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Created on Jul 21, 2005 3 | * 4 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License along 17 | * with this program; if not, write to the Free Software Foundation, Inc., 18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | */ 20 | package net.sf.timecult.model; 21 | 22 | /** 23 | * Contains information about workspace changes. 24 | * @author rvishnyakov 25 | */ 26 | public class WorkspaceEvent { 27 | 28 | public final static int WORKSPACE_SAVED = 0; 29 | public final static int WORKSPACE_TASK_ADDED = 1; 30 | public final static int WORKSPACE_PROJECT_ADDED = 2; 31 | public final static int WORKSPACE_TASK_REMOVED = 3; 32 | public final static int WORKSPACE_PROJECT_REMOVED = 4; 33 | public final static int WORKSPACE_TIME_REC_ADDED = 5; 34 | public final static int WORKSPACE_TIME_LOG_CLEARED = 6; 35 | public final static int WORKSPACE_TASK_CHANGED = 7; 36 | public final static int WORKSPACE_PROJECT_CHANGED = 8; 37 | public final static int TASK_STATUS_CHANGED = 9; 38 | public final static int NOTES_UPDATED = 10; 39 | public final static int TIME_REC_CHANGED = 11; 40 | public final static int TIME_RECS_REMOVED = 12; 41 | public final static int TIME_RECS_JOINED = 13; 42 | public final static int FILTER_CHANGED = 14; 43 | public final static int SETTINGS_UPDATED = 15; 44 | 45 | public WorkspaceEvent(int eventId) { 46 | _id = eventId; 47 | } 48 | 49 | public WorkspaceEvent(int eventId, Object source) { 50 | _id = eventId; 51 | _source = source; 52 | } 53 | 54 | public Object getSource() { 55 | return _source; 56 | } 57 | 58 | public int getId() { 59 | return _id; 60 | } 61 | 62 | private int _id = WORKSPACE_SAVED; 63 | private Object _source = null; 64 | } 65 | -------------------------------------------------------------------------------- /main/doc/manual/concepts.dmi: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: concepts.dmi,v 1.2 2008/11/02 09:14:07 dyadix Exp $ 19 | * 20 | 21 | @section Concepts 22 | 23 | @section Workspace 24 | 25 | Workspace is a place where all project and task information is stored. 26 | You may have any number of workspaces but usually you need just one unless you simultaneously 27 | work in completely different areas. 28 | 29 | In terms of file system workspace is a single XML file with .tmt extension. 30 | 31 | @section \end 32 | 33 | @section Project 34 | 35 | Project is a container for other (sub)projects and tasks. Note that you can't track time 36 | directly for a project, you need at least one task under it. 37 | 38 | Projects are optional. You may not use those at all and create tasks directly at workspace 39 | root. 40 | 41 | @section \end 42 | 43 | @section Task 44 | 45 | Task is an atomic unit for which you can track time. From the other hand, tasks in TimeCult 46 | may not have subtasks. This is done to avoid ambiguity when choosing whether to track time 47 | for the top level task or its subtasks. 48 | 49 | @section \end 50 | 51 | @section Activity 52 | 53 | Activity is another form of task. But unlike a regular task, it can only be cancelled (stopped). 54 | An example of activity is "Customer technical support". Activities have no particular deadlines, 55 | they last as long as they are needed. 56 | 57 | @section \end 58 | 59 | @section Idle Task 60 | 61 | Idle task was introduced to allow tracking (wasted) time when no other tasks have been 62 | started (being tracked). Idle task is always created with a new workspace but disabled 63 | by default. 64 | 65 | @section \end 66 | 67 | @section \end -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /main/doc/de/features.dmi: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: features.dmi,v 1.1 2008/04/22 22:02:57 kstruck Exp $ 19 | * 20 | 21 | @section Grundfunktionen 22 | @section Verwaltung von Projekten und Aufgaben 23 | @list 24 | @* Arbeiten Sie mit Projekten, Sub-Projekten und Aufgaben. 25 | @* Versehen Sie Ihre Projekte und Aufgaben mit detaillierten Kommentaren. 26 | @* Die Status der Aufgaben können jederzeit gesetzt werden: In Bearbeitung, Beendet, Abgebrochen. 27 | @* Versehen Sie die Aufgaben mit besonderer Wichtigkeit mit einer Markierung (verfügbar seit Version 0.5.1). 28 | @list \end 29 | @section \end 30 | 31 | @section Erfassung der Zeiten von Projekten und Aufgaben 32 | @list 33 | @* Messen Sie die Zeiten, die für eine Aufgabe aufgewendet werden in Echtzeit. Bei Bedarf können mehrere Timer gleichzeitig verwendet werden. 34 | @* Sie bekommen detaillierte Informationen über aufgewendete Zeiten und Kommentare, was getan wurde. 35 | @* Sie bekommen schnell einen Überblick über Zeiten einzelner Projekte und Aufgaben in einem speziellen Zeitraum: 36 | ein Tag, die aktuelle Woche, den aktuellen Monat oder das aktuelle Jahr. Klicken Sie einfach auf den Namen des 37 | gewünschten Filters, um den Bereich zu ändern. 38 | @list \end 39 | @section \end 40 | 41 | @section Datenaustausch mit anderen Anwendungen 42 | @list 43 | @* Exportieren Sie Ihre Daten als Komma-separiertes Format (CSV), welches von MS Excel und anderen Anwendungen verarbeitet werden kann. 44 | @* Benutzen Sie Kopieren und Einfügen im Zeitprotokoll oder in der Gesamtübersicht, um Daten in MS Excel or OpenOffice.org Calc zu übernehmen. 45 | @* Verwenden Sie die TimeCult XML Datei direkt aus anderen Applikationen. 46 | @list \end 47 | @section \end 48 | 49 | @section \end -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/pin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /main/src/net/sf/timecult/util/ObjectInfoHelper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2007-2010 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: ObjectInfoHelper.java,v 1.3 2010/04/12 14:58:49 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.util; 21 | 22 | import net.sf.timecult.ResourceHelper; 23 | import net.sf.timecult.model.ProjectTreeItem; 24 | import net.sf.timecult.model.Task; 25 | import net.sf.timecult.model.TaskStatus; 26 | 27 | public class ObjectInfoHelper { 28 | 29 | public static String getObjectInfo(Object o) { 30 | StringBuilder infoBuf = new StringBuilder(); 31 | if (o instanceof ProjectTreeItem) { 32 | ProjectTreeItem item = (ProjectTreeItem) o; 33 | if (item instanceof Task) { 34 | infoBuf.append(taskStatusToLocalizedString((Task)item)); 35 | } 36 | if (infoBuf.length() != 0) { 37 | infoBuf.append(". "); 38 | } 39 | if (item.getCloseDateTime() != null) { 40 | infoBuf.append(ResourceHelper.getString("status.closed")).append(": "); 41 | infoBuf.append(item.getCloseDateTime().toString()); 42 | } 43 | else if (item.getCreationDateTime().getTime() != 0) { 44 | infoBuf.append(ResourceHelper.getString("status.created")).append(": "); 45 | infoBuf.append(Formatter.toDateTimeString(item.getCreationDateTime(), true)); 46 | } 47 | } 48 | return infoBuf.toString(); 49 | } 50 | 51 | 52 | public static String taskStatusToLocalizedString(Task task) { 53 | String statusStr = task.getStatusAsString(); 54 | String localStr = ResourceHelper.getString("task.status." + statusStr); 55 | if (task.getStatus().getId() == TaskStatus.WAITING 56 | && task.getWaitReason() != null) { 57 | localStr = localStr + " " + task.getWaitReason().getText(); 58 | } 59 | return localStr; 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /main/doc/de/whatsnew.dmi: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: whatsnew.dmi,v 1.1 2008/04/22 22:02:57 kstruck Exp $ 19 | * 20 | 21 | @section Was ist neu in Version 0.7.0 22 | 23 | @list 24 | 25 | @* Das TimeCult .TMT Dateiformat hat sich geändert. It supports now project/task creation and closing date/time among 26 | other things. Eine Datei im neuen Format kann nicht mehr mit einer älteren Version von TimeCult geöffnet werden. 27 | @* Es wurde ein neuer Status für Aufgaben eingeführt: "Wartend". Der Grund für das Warten kann als Notiz angegeben werden. 28 | @* TimeCult kann in den System Tray minimiert werden (feature request # 1848847). 29 | @* Time record editing dialog has got additional buttons to select a date (calendar picker) and 30 | set up start time and duration. 31 | @* For time records added manually there is a smarter algorithm which creates an adjacent record by default: 32 | a default start time for the new record is set to the end time of the previous record. 33 | @* A timer can be mimized to system tray with animated icon (feature request # 1818554). 34 | @* Default timer position is saved for subsequent application launches (optionally). 35 | @* Project tree selection and expansion status is saved to .tmt file and restored when the file 36 | is reopened. 37 | @* New "View"/"Flagged Items" menu item instead of "Go". The menu item has a shortcut Ctrl+T to 38 | make it much easier to choose a flagged task. 39 | @* More informative summary for tasks: time usage per date. 40 | @* Notes are exported to CSV (feature request #1818543). 41 | @* When a project is deleted, any associated time records are deleted too. Previously those had been kept until a workspace 42 | was closed and opened again (bug #1557454). 43 | @* A task can be reopened (new "Reopen" menu item in project tree context menu). 44 | @* Other minor improvements. 45 | 46 | @list \end 47 | 48 | @section \end -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/filter/TimeFilterToolbar.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2009-2010 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: TimeFilterToolbar.java,v 1.4 2010/09/26 12:13:31 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.ui.swt.filter; 21 | 22 | import net.sf.timecult.ui.swt.ToolBarBase; 23 | import org.eclipse.swt.SWT; 24 | import org.eclipse.swt.events.SelectionAdapter; 25 | import org.eclipse.swt.events.SelectionEvent; 26 | import org.eclipse.swt.widgets.Composite; 27 | import org.eclipse.swt.widgets.ToolItem; 28 | 29 | public class TimeFilterToolbar extends ToolBarBase { 30 | 31 | private AdvancedTimeFilterView filterView; 32 | private ToolItem deleteFilter; 33 | 34 | public TimeFilterToolbar(AdvancedTimeFilterView filterView, Composite contentPanel) { 35 | super(contentPanel, filterView.getMainWindow().getIconSet(), 1); 36 | this.filterView = filterView; 37 | } 38 | 39 | @Override 40 | protected void setup(int toolBarNumber) { 41 | switch (toolBarNumber) { 42 | case 0: 43 | 44 | ToolItem customFilter = createButton("filter.add", SWT.PUSH); 45 | customFilter.addSelectionListener(new SelectionAdapter() { 46 | public void widgetSelected(SelectionEvent evt) { 47 | FilterSetupDialog addDialog = FilterSetupDialog.getInstance(filterView); 48 | addDialog.open(); 49 | } 50 | }); 51 | 52 | this.deleteFilter = createButton("filter.delete", SWT.PUSH); 53 | this.deleteFilter.addSelectionListener(new SelectionAdapter() { 54 | public void widgetSelected(SelectionEvent evt) { 55 | filterView.deleteSelectedFilter(); 56 | } 57 | }); 58 | this.deleteFilter.setEnabled(false); 59 | } 60 | } 61 | 62 | public void setDeleteEnabled(boolean enabled) { 63 | this.deleteFilter.setEnabled(enabled); 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /main/doc/manual/options.dmi: -------------------------------------------------------------------------------- 1 | @~ 2 | * Copyright (c) Rustam Vishnyakov, 2008 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: options.dmi,v 1.3 2010/10/23 13:37:14 dyadix Exp $ 19 | * 20 | 21 | @section Options 22 | 23 | To set up application-level options choose "Tools"->"Options..." menu item. 24 | 25 | @section General Options (General Tab) 26 | 27 | @list 28 | @* Hide when minimized: if the flag is set, main window will be hidden when it is minimized (not visible in a 29 | task bar). The window can be restored back by clicking to the icon in system tray. 30 | @* Keep timer position: tells to use the latest timer position every time a new timer is launched. If the flag 31 | is unchecked, a timer position is defined automatically for every new timer launch. 32 | @* Automatically Open the Most Recent File: open the most recent file upon every application restart. 33 | @* Hide Closed Items: show only those items which are not closed or if their close date/time is within the 34 | date/time range of the currently selected filter. Hide other closed items. 35 | @* Autosave: automatically save the current workspace (by default every 30 seconds) if there are changes. 36 | @list \end 37 | 38 | @section \end 39 | 40 | @section Time Recoding 41 | 42 | @list 43 | @* Edit time and notes before recording: Allow editing time and notes before a time record is 44 | added to the journal. 45 | @* Don't save empty records: If record's time is zero and no notes are provided, don't save it. 46 | @list \end 47 | 48 | @section \end 49 | 50 | @section Notifications 51 | 52 | @list 53 | @* Running timer(s): Periodically display a notification when timer(s) is/are running. 54 | @* Idle Time: Periodically display a notification when in idle state (no timers are running). 55 | Idle Time tracking must be on. 56 | @list \end 57 | @section \end 58 | 59 | @section \end -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/timer-pause.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/SWTMainTabFolder.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2005-2007 (rvishnyakov@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: SWTMainTabFolder.java,v 1.6 2008/09/13 06:35:08 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.ui.swt; 21 | 22 | import net.sf.timecult.conf.AppPreferences; 23 | 24 | import org.eclipse.swt.SWT; 25 | import org.eclipse.swt.events.SelectionAdapter; 26 | import org.eclipse.swt.events.SelectionEvent; 27 | import org.eclipse.swt.widgets.TabFolder; 28 | import org.eclipse.swt.widgets.TabItem; 29 | 30 | /** 31 | * Main tab folder 32 | * @author rvishnyakov 33 | * 34 | */ 35 | public class SWTMainTabFolder { 36 | 37 | public SWTMainTabFolder(SWTMainWindow mainWindow) { 38 | _mainWindow = mainWindow; 39 | this.appPrefs = AppPreferences.getInstance(); 40 | setup(); 41 | } 42 | 43 | 44 | private void setup() { 45 | tabs = new TabFolder(_mainWindow.getMainTabFolderSash(), SWT.NONE); 46 | this.tabs.addSelectionListener(new SelectionAdapter(){ 47 | public void widgetSelected(SelectionEvent e) { 48 | TabItem[] selected = tabs.getSelection(); 49 | if (selected != null && selected.length > 0) { 50 | int index = getTabIndex(selected[0].getText()); 51 | appPrefs.setSelectedTab(index); 52 | } 53 | }}); 54 | } 55 | 56 | public TabFolder getTabs() { 57 | return tabs; 58 | } 59 | 60 | 61 | public void selectTab(int index) { 62 | if (index >= 0 && index < this.tabs.getItemCount()) { 63 | this.tabs.setSelection(index); 64 | } 65 | } 66 | 67 | 68 | private int getTabIndex(String tabText) { 69 | if (tabText == null) 70 | return -1; 71 | for (int i = 0; i < this.tabs.getItemCount(); i++) { 72 | if (tabText.equals(this.tabs.getItem(i).getText())) { 73 | return i; 74 | } 75 | } 76 | return -1; 77 | } 78 | 79 | private TabFolder tabs; 80 | private SWTMainWindow _mainWindow = null; 81 | private AppPreferences appPrefs; 82 | } 83 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/join.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/about.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/timer-start.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/ReasonDialog.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2005-2007 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: ReasonDialog.java,v 1.1 2007/12/07 21:28:53 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.ui.swt; 21 | 22 | import net.sf.timecult.ResourceHelper; 23 | import net.sf.timecult.model.WaitReason; 24 | 25 | import org.eclipse.swt.SWT; 26 | import org.eclipse.swt.layout.GridData; 27 | import org.eclipse.swt.layout.GridLayout; 28 | import org.eclipse.swt.widgets.Composite; 29 | import org.eclipse.swt.widgets.Label; 30 | import org.eclipse.swt.widgets.Shell; 31 | import org.eclipse.swt.widgets.Text; 32 | 33 | public class ReasonDialog extends SWTDialog { 34 | 35 | private Text reasonText; 36 | private SWTProjectTreePopup popup; 37 | 38 | public ReasonDialog(SWTProjectTreePopup popup) { 39 | super(popup.getShell(), false); 40 | this.popup = popup; 41 | } 42 | 43 | @Override 44 | protected Composite createContentPanel(Shell shell) { 45 | Composite textPanel = new Composite(shell, SWT.None); 46 | GridLayout grid = new GridLayout(); 47 | grid.numColumns = 2; 48 | textPanel.setLayout(grid); 49 | Label label = new Label(textPanel, SWT.None); 50 | label.setText(ResourceHelper.getString("message.reasonText") + ":"); 51 | GridData projectNameLayout = new GridData(GridData.FILL_HORIZONTAL); 52 | projectNameLayout.widthHint = 500; 53 | this.reasonText = new Text(textPanel, SWT.LEFT | SWT.BORDER ); 54 | this.reasonText.setLayoutData(projectNameLayout); 55 | this.reasonText.addKeyListener(getDefaultKeyListener()); 56 | this.reasonText.setFocus(); 57 | return textPanel; 58 | } 59 | 60 | @Override 61 | protected String getTitle() { 62 | return ResourceHelper.getString("dialog.waitReason"); 63 | } 64 | 65 | @Override 66 | protected boolean handleOk() { 67 | WaitReason waitReason = WaitReason.newInstance(this.reasonText.getText()); 68 | this.popup.setWaiting(waitReason); 69 | return true; 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ui/swt/IdleTaskEditDialog.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2010 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: IdleTaskEditDialog.java,v 1.2 2010/04/02 14:31:34 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.ui.swt; 21 | 22 | import org.eclipse.swt.SWT; 23 | import org.eclipse.swt.widgets.Composite; 24 | import org.eclipse.swt.widgets.Label; 25 | import org.eclipse.swt.widgets.Shell; 26 | import org.eclipse.swt.widgets.Text; 27 | 28 | import net.sf.timecult.ResourceHelper; 29 | import net.sf.timecult.model.IdleTask; 30 | 31 | public class IdleTaskEditDialog extends SWTTaskEditDialog { 32 | 33 | private Text noteText; 34 | private IdleTask idleTask; 35 | 36 | public IdleTaskEditDialog(SWTMainWindow parent) { 37 | super(parent); 38 | } 39 | 40 | public IdleTaskEditDialog(SWTMainWindow parent, IdleTask task) { 41 | super(parent, task); 42 | this.idleTask = task; 43 | } 44 | 45 | @Override 46 | protected boolean isHyperlinkAvailable() { 47 | return false; 48 | } 49 | 50 | @Override 51 | protected boolean isCloseDateAvailable() { 52 | return false; 53 | } 54 | 55 | @Override 56 | protected boolean isCreationDateAvailable() { 57 | return false; 58 | } 59 | 60 | @Override 61 | protected Composite createContentPanel(Shell shell) { 62 | Composite panel = super.createContentPanel(shell); 63 | Label noteLabel = new Label(panel, SWT.None); 64 | noteLabel.setText(ResourceHelper.getString("dialog.defaultNote") + ":"); 65 | this.noteText = createTextField(panel, "", 500); 66 | this.noteText.addKeyListener(getDefaultKeyListener()); 67 | if (this.idleTask != null && this.idleTask.getDefaultNote() != null) { 68 | this.noteText.setText(this.idleTask.getDefaultNote()); 69 | } 70 | return panel; 71 | } 72 | 73 | @Override 74 | protected boolean afterUpdate() { 75 | if (this.idleTask != null) { 76 | this.idleTask.setDefaultNote(noteText.getText()); 77 | } 78 | return true; 79 | } 80 | 81 | 82 | } 83 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/cancel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/tasklist.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 16 | 19 | 22 | 23 | 24 | 26 | 27 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /main/src/net/sf/timecult/model/TimeUtil.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2009 (dyadix@gmail.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: TimeUtil.java,v 1.3 2009/05/13 12:58:55 dyadix Exp $ 19 | */ 20 | package net.sf.timecult.model; 21 | 22 | import java.util.Date; 23 | 24 | /** 25 | * A collection of algorithms for miscellaneous time/date calculations. 26 | */ 27 | public class TimeUtil { 28 | 29 | /** 30 | * Forms a time record as an intersection of the original time record and a given 31 | * filter (interval). If no filter is given or the filter fully contains the time 32 | * record, the original record is returned. 33 | * 34 | * @param filter The filter to use (can be null). 35 | * @param timeRec The original time record. 36 | * @return Time record with applied filter OR the original record if it 37 | * fits inside filter interval. 38 | */ 39 | public static TimeRecord getFilteredTimeRec(TimeRecordFilter filter, 40 | TimeRecord timeRec) { 41 | if (filter == null) { 42 | return timeRec; 43 | } 44 | long recStartTime = timeRec.getStart().getTime(); 45 | long recEndTime = timeRec.getEnd().getTime(); 46 | long resultStartTime = recStartTime; 47 | long resultEndTime = recEndTime; 48 | boolean isPartial = false; 49 | if (filter.getSinceDate() != null && filter.getToDate() != null) { 50 | long filterEndTime = filter.getToDate().getTime(); 51 | long filterStartTime = filter.getSinceDate().getTime(); 52 | if (recEndTime > filterEndTime) { 53 | resultEndTime = filterEndTime; 54 | isPartial = true; 55 | } 56 | if (recStartTime < filterStartTime) { 57 | resultStartTime = filterStartTime; 58 | isPartial = true; 59 | } 60 | } 61 | if (isPartial) { 62 | long resultDuration = resultEndTime - resultStartTime; 63 | return new TimeRecord(timeRec.getTask(), new Date( 64 | resultStartTime), resultDuration, timeRec.getNotes()); 65 | } 66 | else { 67 | return timeRec; 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /main/src/net/sf/timecult/ResourceHelper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Rustam Vishnyakov, 2005-2006 (rvishnyakov@yahoo.com) 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License along 15 | * with this program; if not, write to the Free Software Foundation, Inc., 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 | * 18 | * $Id: ResourceHelper.java,v 1.5 2008/04/28 18:57:18 dyadix Exp $ 19 | */ 20 | package net.sf.timecult; 21 | 22 | import java.io.InputStream; 23 | import java.net.URL; 24 | import java.util.Locale; 25 | import java.util.ResourceBundle; 26 | 27 | /** 28 | * Retrieves TimeTracker resources. 29 | * @author rvishnyakov 30 | */ 31 | public class ResourceHelper { 32 | 33 | public static String getString(String key) { 34 | return bundle.getString(key); 35 | } 36 | 37 | /** 38 | * @param key 39 | * The key by which a resource must be found. 40 | * @return Resource URL. 41 | */ 42 | public static URL getUrl(String key) { 43 | return ResourceHelper.class.getResource(key); 44 | } 45 | 46 | /** 47 | * Opens a stream associated with the specified resource 48 | * @param key The resource key. 49 | * @return Open resource stream or null if the stream can not be 50 | * opened; 51 | */ 52 | public static InputStream openStream(String key) { 53 | InputStream in = null; 54 | try { 55 | in = ResourceHelper.class.getResource(key) 56 | .openStream(); 57 | } 58 | catch (Exception e) { 59 | } 60 | return in; 61 | } 62 | 63 | private static ResourceBundle createBundle(Locale locale) { 64 | return ResourceBundle.getBundle(ResourceHelper.class.getPackage() 65 | .getName() 66 | + ".timetracker", locale); 67 | } 68 | 69 | private static ResourceBundle bundle; 70 | 71 | static { 72 | Locale locale; 73 | String lang = System.getProperty("lang"); 74 | if (lang != null) { 75 | locale = new Locale(lang); 76 | } 77 | else { 78 | locale = Locale.getDefault(); 79 | } 80 | bundle = createBundle(locale); 81 | // 82 | // Check if we are using a localized bundle. If not, use 83 | // english by default. 84 | // 85 | if ("no".equals(getString("localized"))) { 86 | locale = new Locale("en"); 87 | bundle = createBundle(locale); 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /main/resources/net/sf/timecult/images/icons/tomato.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 24 | 26 | 28 | 30 | 32 | 34 | 36 | 38 | 39 | --------------------------------------------------------------------------------