├── .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 |
4 |
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 |
4 |
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 |
4 |
5 |
6 |
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 |
5 |
6 |
7 |
8 |
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 |
5 |
6 |
7 | http://www.w3.org/1999/xhtml
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/main/resources/net/sf/timecult/images/icons/delete.svg:
--------------------------------------------------------------------------------
1 |
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 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/.idea/copyright/TimeCult.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/main/resources/net/sf/timecult/images/icons/timer-stop.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
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 |
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/main/resources/net/sf/timecult/images/icons/about.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/main/resources/net/sf/timecult/images/icons/timer-start.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/main/resources/net/sf/timecult/images/icons/tasklist.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------