I call it AFL Timer (A Flexible Logging Timer) and it doesn't quite have the final polish, but I wanted to let you and others test it and report bugs, refine features, etc. If anybody wants to play with the source, I can send that along too. Enjoy!

I call it AFL Timer (A Flexible Logging Timer) and it doesn't quite have the final polish, but I wanted to let you and others test it and report bugs, refine features, etc. If anybody wants to play with the source, I can send that along too. Enjoy!

I either I don't understand the interface or some stuff I would want as a main purpose is missing.

The key comparison is the Stopwatch part of my iPhone app, which mimics regular "sports" stopwatches. So you start a task with a big "Go" button, and then you can either hit "Stop" or "Lap". (Or both, in some sequential order.)

(Whether or not you have stopped the running timer), Lap (but it could be Phase or something) captures fragmentary chunks of time, which *may or may not have been edited, see below!*, which then add up to the total time.

Go and Stop seem simple enough to me.

So then what I see Edvard has already done that a "stopwatch" can't do, is fix "annoyances" with the logged time. So you can do all the add/delete chunks of the time measured by the Laps (or just the total time), and then you're left with a nice "clean" record of time spent on the project.

Is some or all of that stopwatch effect in there, and I am just having trouble with the interface GUI?

+ Stop / Start works well. When I make a second task:+ the task that is active remains highlighted, no matter which task has focus -- I think that's good (but see below)+ when I double-click [The Time] it (1) gets copied to clipboard & (2) stops/starts (as appropriate) - that is very nice + are you using Corbel for the timer? If not, it's something similar - makes very good legibility :up=>- The font size (for time) is too big here, and is cropped at the bottom (my monitor resolution is 90ppi - probably below average these days)

Changing tasks seems to be problematic:- I get confused about which task has focus:I currently have two tasks: when one is selected, the timer is still related to the other ( I listed this as a +ve above :-/ ) =>- even when I stop the timer on the active task, I cant find how to change to the other task.

OK, I'd seen the issue with the timer font and it's not an issue with your DPI, but with the GUI elements showing differently on different platforms (I am doing all development on Linux, so everything looks great for me ). I can fix that, just the clock window may have to be a bit larger. On my box, I use the Euromode font as my main font; I love the square-ish look and it's very legible, more so than the fonts it was inspired from (Microgramma and Eurostile) and makes a very nice clock face. I wish I could embed it in my program, but I'm sure there would be licensing issues or something. I didn't set the font, Lazarus just uses whatever the default is if I don't set it explicitly, so looks like it chose something funky

I considered a start/stop button, but I thought using the clock as button would be economical as far as UI goes; maybe I was wrong... As far as tasks, the last task in the list always has focus; at this stage of development, it's the only way I could keep things straight. When you click on another task to change the name, that's all that's allowed. Are you wanting to change between tasks to add more time on the selected task? Great idea, and I'm sure I can figure out how to do that. Let me know what you are needing exactly.

For the Reset function, I think I know what's going on there. It doesn't start with the Total, it starts from where the previous task stopped. So you want the clock to default to 0 for every new task? I can do that. In fact, it may be time to introduce saving preferences, and have the option be "New task - Reset to 00:00 or Continue from previous time".

@TaoPhoenix: It's not you, it's me I was trying to keep the timekeeping as simple as possible because even as it is I had a devil of a time keeping the time set-able but synchronized with real time, and the correct time showing up in the correct places. That's why I made it so when you make a new task, the old task is "closed out"; that is, the time is finalized. That can be changed in the final CSV file, but if I'm interpreting Tomos' comments correctly, maybe I should make it so you can switch between tasks to add time to a previous one.

I forgot I had made Corbel the default font (in my defense, it was years ago).

Corbel

I think it makes numbers especially easier to read

although in this example the 'g' and the '9' are a bit too similar maybe

I think I wanted the start/stop button just so as I could change tasks - so, no, I dont see any need for it.But I would like to be able to resume an older task.

Re new task starting with the end-amount of the previous task - I hadnt thought of it before but this is a very good way of working (like timing a lap). But if you can make it user-changeable - without too much stress - all the better.

I notice:

create, say, three tasks - without using reset (let each run for a time before creating the next)

then create a fourth task - it will show the endtime of task #3 in the timer

try Reset on task #4 - it reverts to endtime of task #2

should it not simply reset to zero? (again, I may be missing an application)

I considered a start/stop button, but I thought using the clock as button would be economical as far as UI goes; maybe I was wrong... ...As far as tasks, the last task in the list always has focus; at this stage of development, it's the only way I could keep things straight. When you click on another task to change the name, that's all that's allowed. Are you wanting to change between tasks to add more time on the selected task? Great idea, and I'm sure I can figure out how to do that. Let me know what you are needing exactly. ...@TaoPhoenix: It's not you, it's me I was trying to keep the timekeeping as simple as possible because even as it is I had a devil of a time keeping the time set-able but synchronized with real time, and the correct time showing up in the correct places. That's why I made it so when you make a new task, the old task is "closed out"; that is, the time is finalized. That can be changed in the final CSV file, but if I'm interpreting Tomos' comments correctly, maybe I should make it so you can switch between tasks to add time to a previous one.

Well, pointing out a "merge" of this program and the iPhone stopwatch, I'd suggest a row of buttons somewhere. Start Stop Lap. That way you know what a button does, but another reason is more important - the iPhone thing tries to do *three things with two buttons* and if you mis-click them in the wrong order it messes up or wipes out your time log!

And because I like fancy "implicit tricks", for "program-chainers" like me, a set of buttons means you can do things like using one of those automated mouse-movers (or other things) so that it does stuff like:

"start, wait until 50 min, stop (because you know the user is slacking somehow!), Lap to log the fragment, Wait 10 minutes, Start". So then theoretically you can even leave it sitting there in the background for days!

And yeah, I am *totally* a fan of clicking back and forth between tasks. So for me (so far!) it's as simple as Click to make a Task Active (possibly checking if you need to finish processing the old one, to help prevent misclicks!).

And I mentioned in passing but one reason the clock didn't work for me is because on my ... fading ... system, it didn't start anything! So if you imagine, "click the clock ... nothing happens ... okay..." !

If my logic is correct here, if the fourth task has not been started yet, it may (should?) reset to the beginning time of #3, which is the ending time of #2. Once the fourth task has started, reset should simply reset to the beginning time of #4. Sounds like I really do need to implement some choices and defaults like "Start new tasks at zero/Continue from previous."

Also, I have been working on some GUI changes, which I'd like your opinion on the layouts:- No "New Task" edit box; Since we can change the Title of the task in the grid anyway, why not just have it all happen there?- Start/Stop button- Larger Clock- Replaced the H/M/S buttons on either side of the clock with more compact Up/Down buttons- Direct editing of the time in the clock

Layout 1 (yes, the button order should be H/M/S, fixed in the other one):

I like version 2 for layout, though I wonder if it was a typo that the task-begin-end-total bar was left out?

It just seems we're so close to everything, because if there is a "stopwatch mode", then it can start with a timer of 0, start-stop works as normal, and "lap" creates its own "pseudo-tasks" aka the laps breaking down the segments of each task, below the main header of it.

I like version 2 for layout, though I wonder if it was a typo that the task-begin-end-total bar was left out?

It just seems we're so close to everything, because if there is a "stopwatch mode", then it can start with a timer of 0, start-stop works as normal, and "lap" creates its own "pseudo-tasks" aka the laps breaking down the segments of each task, below the main header of it.

... and I have no idea what happened in the screenshot for #2, but yeah, I like that layout better too. I may even have some ideas for a 3rd, but first I think I need to simply get the main stuff happening and get some feedback from Tomos as well.

If my logic is correct here, if the fourth task has not been started yet, it may (should?) reset to the beginning time of #3, which is the ending time of #2. Once the fourth task has started, reset should simply reset to the beginning time of #4. Sounds like I really do need to implement some choices and defaults like "Start new tasks at zero/Continue from previous."

I'm still confused by the above:-I'm not sure *why* would the user want it to revert to the beginning of task #3 in the example above? (Even if it is logical in terms of how it works.)

So, a group of tasks can ultimately be treated as one task, simply by looking at the end time of the last one.IF I can revert a new task to zero, it would have to be the start of a new group - this would be a great feature - but I dont know if it's possible (?)+Another feature could be to add a new task below the current group - i.e. I could add a new task to group #one, even after having created (and run) a second group. This could cause user-confusion though :-/ and again I have no ideas about difficulties of implementation. What do you think?

I admit it is confusing, but all I was saying is that if task #4 has been initialized, but not started, then the value that remains stored in the Reset variable is the beginning time of the previously active task, so that explains the behavior. Bug? Yes, that should count as a bug. But I'm left wondering what should be happening. Should hitting Reset at the point after a new task is initialized set the start time to Zero? Or the end time of the previous task? (Actually, I have an idea; more about that farther down...).

So, a group of tasks can ultimately be treated as one task, ...I have no ideas about difficulties of implementation. What do you think?

Task grouping sounds like a great idea, but I am at a loss as to how to implement it. For now, anyways...

Maybe this is not yet implemented:tasks are not saved on closing.

Whoops! Time to implement auto-save, or a reasonable facsimile. Should it ask the user to confirm on exit? Or simply save the session with a possibility to recall on the next start-up? Or a set-able option to automatically load the previous task list on start-up? So many possibilities...

OK, so with most of the internal logic pretty set, here's what I'm thinking for the next iteration of user interaction:

New Task:- Make a toggle for "Start at Zero" or "Continue from Previous".

Reset:- Reset should always reset to the beginning time of the current task, whether that is zero or something else depends on the New Task behavior.OR... - Make "Continue from Previous" the default 'New Task' action, but "Reset" will set the clock back to zero. Much simpler code that way...

Timer:- I don't like the idea of the end time updating in the list, I mean, it's not even there until you stop the timer, so I think "graying out" the end time and total when re-starting a current task is a great idea; takes your mind off the list and back on the timer, and also lets you know at a glance that this is a task that has been continued. Which leads to...

Tasks:- Going back to an old task to continue the time spent on it is a good idea as well. I know how it can be done, so that'll be in the next iteration.- Grouping tasks isn't as easy, maybe even impossible without a custom component. The StringGrid component has a lot of methods and properties to it, and is quite complex. Trying to wrangle sub-lists into it would be problematic at best.

Sessions:- Saving sessions should be a given by now, you're right; not saving the session is kind of unsettling. But how to implement? I'm thinking either offer the user to save the current session on exit, or simply auto-save and have an option to auto-load on next start-up. That will be easy to do. Hmmm... maybe even differentiate between saving a session and saving a final file; kind of like: if saving a session, then auto-load the session on the next start-up, but if saving a final file, the next start-up is blank. You can always manually load a saved file from the File menu and continue as well.

So that's what I got, I'm going to dive back in and get something ship-shape for you to test, hopefully not too far in the future. I'll keep the thread posted with any breakthroughs...