forked from jaden/SnapTimer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Todo.txt
266 lines (179 loc) · 13.7 KB
/
Todo.txt
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
Transparency (code from Peazip) http://www.lazarus.freepascal.org/index.php/topic,8488.0.html
http://delphi.about.com/od/graphics/l/aa022202a.htm
{$IFDEF MSWINDOWS}
type //used for transparency
TSetLayeredWindowAttributes = function(hwnd: HWND; crKey: COLORREF; bAlpha: Byte; dwFlags: Longint): Longint;
stdcall;
What to do when time is up
Blink the time
Shake the window http://delphi.about.com/od/adptips2005/qt/windowshake.htm (set how many seconds)
Bring app to front
Play system beep (MessageBeep(-1); in MMSystem, http://sheepdogguides.com/dt2g.htm
Restart or shutdown windows (this can already be done by running a command - document it? add examples to choose from?)
Flip colors of background and foreground (set them back when timer is restarted)
Flash the whole screen
Keep counting (going negative) to show the user how long it's been since the time was up
Make tray alert customizable (color, background color, size and duration of being visible)
Add more options to dialog - ask if user wants to restart timer, start a new timer, etc
Add option to give warnings before time is up, so kids can save their game. 5 minute, 2 minute, custom? Also have place for message, "Warning, there are %minutes% left" that pops up as notification without having to be dealt with.
Option to restore defaults (equivalent of deleting the .ini file)
Implement compact mode / mini - show just the time without buttons or menus
Always on top
Add a progress bar, visible from far away.
Show the wall-clock time in a small font
Have setting so it opens in that mode.
Write directly on the desktop? http://www.delphitricks.com/source-code/graphic/draw_directly_to_the_desktop.html
Keyboard shortcuts
Global shortcut to show window (configurable)
p to pause
r to reset
m to minimize the window
Spacebar to start/stop (like media players)
a - Toggle always on top
More command line arguments, like the alarm, auto start, etc. Add a parameter to use different .ini files.
Formats of command lines to accept:
http://sourceforge.net/projects/launchy/forums/forum/766269/topic/2089292
http://www.orzeszek.org/dev/timer/
Create parental mode where parents can set it up for the kids to use. It would remove the ability to close the window and disable pausing the timer. Read configuration data all from the .ini file.
Allow creation of saved settings for timers - alarm method and countdown time
Different .ini file for each setting, load the ini file from command line?
Instead of storing the values in a single .ini, read the .ini for settings and alarms separately, and have the main one tell you where to read it from
Then have a dropdown in the options that shows the names of the ini files (without the .ini) for the various sessions.
Provide save as option to save .ini files
Alarm option to kill a running task
Is there a way to not need to have it run as administrator to write to the .ini file? If it's not in Program Files, it shouldn't need to
Allow setting of hours or seconds as an option? hh:mm or hh:mm:ss
Option to hide the hours from displaying - or hide the hours if the total amount of time is less than 1 hour?
Change the text to look like a digital clock instead of plain text
Use images for the numbers?
Draw the numbers on a canvas - LED controls?
It would keep text from shifting slightly when a 1 goes in the minutes' tens place. If that bothers you, use a monospace font
Add an analog mode that shows a clock face and draw the hands going around
Test with different font sizes for the controls (huge fonts, small fonts)
Add progress bar that counts down until it's done
In blog entry about the timer, write about productivity methods
http://productivegeek.com/articles/increase-your-efficiency-by-timing-your-tasks/
http://www.pomodorotechnique.com/
http://lifehacker.com/178048/download-of-the-day-the-two-minute-timer
http://lifehacker.com/5638746/use-a-timer-as-a-productivity-booster-and-sanity-minder
http://hwebbjr.typepad.com/openloops/2006/04/boosting_produc.html
http://www.43folders.com/2005/09/08/kick-procrastinations-ass-run-a-dash
http://www.43folders.com/2005/09/28/jeff-covey-running-a-progressive-dash
http://www.43folders.com/2005/10/11/procrastination-hack-1025
http://download.cnet.com/windows/alarms-and-clock-software/
Steve Pavlina's newsletter to do 15 minute chunks
30 minutes of uninterrupted work for the Now Habit
2 minutes of relaxing to get ready for a task
Make stopwatch mode show tenths of seconds instead of just seconds?
Have option to show tenths of seconds for timer mode too
Bug: Stopwatch mode goes immediately to 1s
Look at http://gtd-timer.com/moreinfo.htm for settings and ideas
Big screen view: http://www.portablefreeware.com/?id=1920&ts=1280016601
Make it an option to hide the menu bar
Fix settings dialog to look okay with large text (best practice for that sort of thing?)
Play other audio files in addition to wavs
http://www.un4seen.com/
http://symmetrica.net/newac/
http://wiki.lazarus.freepascal.org/ACS
Create themes to choose from (color combinations that look good)
Run notifications at a certain clock time instead of when the timer reaches 0
Make dialogs not show up in taskbar (so nothing appears if the main form is minimized to tray and you open about page or options) I set ShowInTaskBar to stNever, but it still shows up.
When font size changes, automatically resize the window using the viewable rectangle to show all the text. If I set the form's AutoSize to true, it works on startup (but could use some tweaks), but I can't seem to get it to work after the options dialog is displayed. What about creating a simple example to see if I can get it to resize the form?
Automatic resize with font change - if it proves too challenging, what about drawing the fonts on a canvas? (post on lazarus forum for help, resize works on startup, how can I get it to work after font size change?)
What about using vector graphics?
What about drawing with the font?
I can set the width of the window, and I should be able to get the length of the text - make sure there is enough space to show all the text.
Answer from forum: http://wiki.lazarus.freepascal.org/Developing_with_Graphics#Create_a_custom_control_which_draws_itself
You can draw your clock-style digits with narrow hexagons (TCanvas.Polygon)
What about writing text on a canvas to dynamically size?
http://wiki.lazarus.freepascal.org/Developing_with_Graphics#Drawing_a_text_limited_on_the_width
http://www.delphitricks.com/source-code/graphic/draw_multiple_text_lines_on_a_canvas.html
Change start/pause images into an image list TImageList - resizing seems to be messing this up a bit, so it would be good to do
Maximize window and display about or options dialogs, window should remain maximized after dialog is closed.
If custom location is going to be off the screen, ignore the location and go with default of centered
Write unit tests - fpcunit module has Junit-like syntax
Get rid of flickering of the menu when timer is started/stopped or window is resized. Why is it getting redrawn?
Turn README into a CHM file (at least the content section)
Add screenshots
use chmcmd.exe from c:\lazarus\fpc\2.4.0\bin\i386-win32
http://lifehacker.com/5638746/use-a-timer-as-a-productivity-booster-and-sanity-minder?skyline=true&s=i
Snarl support
http://www.fullphat.net/
Option to start the program minimized
Option to change the window title
Host the files on Google Code as another mirror (link to them, add to release steps to update those files)
Find out why Windows-Home shortcut in Win7 (minimize all other windows) doesn't work when focused on SnapTimer - low priority
Snap to edges (as an option?)
Compile for Linux - besides opening links (which we could do without on Linux), other windows-specific calls are playing audio. Find method to play audio on Linux (or cross platform solution that works for more kinds of audio files)
Update the time in the tooltip as you hover over the tray icon
Add option to close to tray when you hit escape or close button
Add option to not close when Esc is hit.
Support parsing times on the command line (3.5, 3:15, 3m15s)
Rework the code to use Model, View, Controller
Add a license (GPLv3?)
Add an option to prevent windows from going into standby/sleep while timer is active.
Defect: Set to remember position but this only works when closing and reopening the program. It should work on minimize and restore from system tray. To reproduce set to minimize to tray and remember position. Move window somewhere, minimize, then right click tray icon and hit show application. application reappears at place it was opened to instead of place it was minimized from. Windows 7
Also in Windows 7, if you shake another window to make all other windows disappear with Snaptimer being one of those, it gets the following error:
[TCustomForm.SetFocus] Mainform: TMainForm Can not focus.
Press OK to ignore and risk data corruption.
Press Cancel to kill the program.
Have an option to continue counting down once the timer hits zero so people can see how much time passed since the alarm
Add way to make Snaptimer start with Windows
Updates
Integrate with DonationCoder's update checker
Add option in Help menu to check for updates
Some other way to check for updates
Set a time to display alarm instead of a countdown time (can still do the countdown, just based on the countdown time instead of a fixed set of minutes)
Add command-line parameter support to accept hh:mm:ss, mm:ss, and just seconds rather than minutes?
Add a /start parameter so the .ini would not have to be configured with AutoStart=1 if it is only needed on occasion
Allow parameters to be specified in the "Run program" field, for example: "C:/Program Files/Windows NT/Accessories/wordpad.exe" document.rtf
Add .ini option to not create a tray icon
Add support for a series of named alarms (so you could do 10 minutes on, 5 minutes for a break, etc) and be able to chain them together in any order and cycle through them automatically - making it work better for pomodoro method.
Add dropdown below the timer to let them choose from the named alarms
Optional title of the alarm - to be displayed in the titlebar?
Option to stop a repeating alarm after some number of cycles or certain period of time
Be able to enter seconds with minutes - 1.5 or 1:5 would be 1:30
Timer isn't accurate (tested against iPod timer and it was a few seconds slow) - create separate thread for timer? Use TFPTimer instead (more accurate?) http://www.freepascal.org/docs-html/fcl/fptimer/tfptimer.html How do I set the event for it when it's not found in the GUI? - It's in the LFM file but I when I added it manually it couldn't find the unit. Add the unit somehow to Lazarus? Could also look at the code in fptimer.pp http://stackoverflow.com/questions/4562598/tfptimer-not-ticking
https://forums.codegear.com/thread.jspa?messageID=59018&tstart=0
https://forums.embarcadero.com/thread.jspa?messageID=175226𪱺 Instead of using ttimer alone, set time to stop
Set interval to 500ms, when user hits start, set the time to end, then in countdown see if current time is higher than time to stop
http://wiki.lazarus.freepascal.org/EpikTimer - it's in there, just need to try it out
What about stopwatch mode? That's still inaccurate on old systems, but I can't use a fixed time - how do I get that to work?
Make about page a unit that can be included for other apps (like SnapMD5)
Let user set (and display) the target time (like an alarm clock)
Show time updating in tooltip (or another small window that appears when you mouse over the tray icon, like tomighty
Add option to only allow one instance
Set shortcut to start minimized, but app still opens w/o being minimized
Make color of alarm in systray less pink, more red
Get more ideas for timer from TinyCountdown http://code.google.com/p/tinytool/source/checkout
Double-click on the tray icon to show application, single click to toggle timer.
Have option to disable single-click to toggle timer.
If write's fail to Snaptimer.ini in current directory, try writing to the user profile folder or program data, then give an error message if that fails too.
If user forgets to unzip file, is there a way for Snaptimer to tell and either cope with the sound files being in a zip file or alert the user that sounds won't work?
Add button for countdown repeat (or add another way to do it that doesn't require an extra button). Add visual on how many times the counter has been repeated.
Add random countdown within a range for random check-ins (like tracking students for a study)
Show countdown in tray icon
Set times to play a sound at certain points during the countdown, e.g. 20 minute countdown, play sound at 10 minutes and 5 minutes.
Add option to hide seconds during countdown
Fix bug with Chrome where it stops showing URLs in status bar - is it something I can fix?
A way to title different, parallel Snaptimer windows to identify what the timer represents.
Instead of a fixed message, have the option of specifying a file of messages and show a random line for each elapsed timer.
Make increment/decrement amount configurable from 5 minutes to whatever the user wants.
Tray popup doesn't work in Windows 10 x64.
========================
Features for version 0.2
========================
Done
* Create seconds mode option to toggle between minutes and seconds - updated label too.
* Improved behavior of Always on top setting
* Time no longer flickers
* Alarm message box on top when countdown is complete
In plan
* Support multiple .ini files (specified on the command line)
Aspirational
* Compact mode
* Global keyboard shortcut to show window (configurable)
* Refactor to MVC
* Reorganize the options dialog
* Create installer
* Full suite of unit tests