bjoern@90: 2011-05-30	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@90: 
bjoern@90: 	* getan.py: Handle KeyboardInterrupt and shutdown getan
bjoern@90: 	carefully afterwards
bjoern@90: 
bjoern@89: 2011-05-30	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@89: 
bjoern@89: 	* getan/states.py: Save the current project when switching to Running state.
bjoern@89: 	Now it's possible to move up and down through the project list or even to
bjoern@89: 	the entry list while a project is running. This behaviour also changed the
bjoern@89: 	current project. Therefore it's necessary to keep the project while changing
bjoern@89: 	to other states.
bjoern@89: 
bjoern@88: 2011-05-30	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@88: 
bjoern@88: 	* getan/states.py: Move 'up' and 'down' keypress handling to
bjoern@88: 	general ProjectState class to make them available in all project
bjoern@88: 	states.
bjoern@88: 
bjoern@87: 2011-05-30	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@87: 
bjoern@87: 	* getan/states.py: Use footer of EntryList to display
bjoern@87: 	the editable description of an entry and not the general
bjoern@87: 	footer to be able to edit the desciption while running a
bjoern@87: 	project.
bjoern@87: 
bjoern@86: 2011-05-30	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@86: 
bjoern@86: 	* getan/view.py (ListWidget): Add new node_in_focus
bjoern@86: 	method to get the current node in list
bjoern@86: 
bjoern@85: 2011-05-25	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@85: 
bjoern@85: 	Fix for #1569
bjoern@85: 
bjoern@85: 	* getan/states.py: Don't crash if subtracted time is greater then the
bjoern@85: 	  current recorded time
bjoern@85: 
bjoern@84: 2011-05-25	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@84: 
bjoern@84: 	Be able to edit the description of a recorded entry
bjoern@84: 
bjoern@84: 	* getan/states.py: Add a new EditEntryState that reads the current
bjoern@84: 	  description of an entry, displays it in the footer and saves the text of
bjoern@84: 	  the footer in the database afterwards
bjoern@84: 	  Switch from DefaultEntryListState to EditEntryState when 'e' is pressed
bjoern@84: 
bjoern@83: 2011-05-25	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@83: 
bjoern@83: 	* getan/states.py: Only switch to the entry list if the current selected
bjoern@83: 	  project has entries
bjoern@83: 
bjoern@82: 2011-05-25	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@82: 
bjoern@82: 	Only update the focus of a List if it has some rows.
bjoern@82: 	This fixes a chash while switching to an empty entry list
bjoern@82: 
bjoern@82: 	* getan/view.py: Check if the current list view has some rows before
bjoern@82: 	  setting the new focus
bjoern@82: 
bjoern@81: 2011-05-25	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@81: 
bjoern@81: 	Be able to update the entry descriptions
bjoern@81: 
bjoern@81: 	* getan.py: Add update_entry method in GetanController that forwards an
bjoern@81: 	  entry to the backend
bjoern@81: 	* getan/backend.py: Add update_entry method in backend class that updates
bjoern@81: 	  the description of an entry in the database
bjoern@81: 
bjoern@80: 2011-05-25	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@80: 
bjoern@80: 	Make getan logging configureable to be able to different getan instances
bjoern@80: 	at the same time
bjoern@80: 
bjoern@80: 	* getan/config.py: Pass filename and loglevel parameters to
bjoern@80: 	  initialize and setup_logging functions. Both parameters are used to
bjoern@80: 	  setup  up the basic config of the logger
bjoern@80: 	* getan.py: Add an OptionParser to be able to switch the log file and
bjoern@80: 	  debug verbosity on the command line
bjoern@80: 
bjoern@78: 2011-05-25	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@78: 
bjoern@78: 	Minor changes in views
bjoern@78: 
bjoern@79: 	* getan/view.py: Improve codepath for updating view in ListWidget,
bjoern@79: 	  use set_footer_text in ProjectList instead of creating a new Text Widget
bjoern@79: 	  directly, clip project text in project list
bjoern@78: 
bjoern@77: 2011-05-25	Björn Ricks <bjoern.ricks@intevation.de>
bjoern@77: 
bjoern@77: 	Fix for #1571
bjoern@77: 
bjoern@77: 	* getan/view.py: Add scrolling in entry list to be able to select 
bjoern@79: 	  and modify all entries. (Modified patch from Ingo)
bjoern@77: 
teichmann@43: 2010-12-15	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@43: 
teichmann@43: 	Fix for #1638
teichmann@43: 
teichmann@43: 	* getan/view.py: use preferred encoding in uwid
teichmann@43: 	* getan/states.py: Fixed another no-project bug.
teichmann@43: 
teichmann@41: 2010-12-15	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@41: 
teichmann@41: 	Make getan runnable if there is no project in database.
teichmann@41: 
teichmann@41: 	* getan.py, getan/states.py, getan/view.py: Various checks
teichmann@41: 	  to ensure you really have a project.
teichmann@41: 
teichmann@40: 2010-12-15	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@40: 
teichmann@40: 	* getan/backend.py: Create database file if it does
teichmann@40: 	  not exist.
teichmann@40: 
teichmann@39: 2010-12-15	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@39: 
teichmann@39: 	Some minor fixes
teichmann@39: 
teichmann@39: 	* getan/config.py: Proper use of global logger.
teichmann@39: 	* getan/resources.py: Removed needless import
teichmann@39: 	* getan/states.py: Fixed state errors
teichmann@39: 
teichmann@37: 2010-12-15	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@37: 
teichmann@38: 	Fix for #1624
teichmann@37: 
teichmann@37: 	* getan/states.py, getan/utils.py: used a safe int conversion.
teichmann@37: 
ingo_weinzierl@36: 2010-10-02  Ingo Weinzierl <ingo.weinzierl@intevation.de>
ingo_weinzierl@36: 
ingo_weinzierl@36: 	* getan/config.py: Setup the language.
ingo_weinzierl@36: 
ingo_weinzierl@36: 	* getan/resources.py: New module that should serve functions for working
ingo_weinzierl@36: 	  with resources. Currently, there is just a single function to get a
ingo_weinzierl@36: 	  translated text based on gettext.
ingo_weinzierl@36: 
ingo_weinzierl@36: 	* getan/states.py,
ingo_weinzierl@36: 	  getan/view.py: Replaced hard coded texts with gettext calls.
ingo_weinzierl@36: 
ingo_weinzierl@36: 	* po/Makefile,
ingo_weinzierl@36: 	  po/README,
ingo_weinzierl@36: 	  po/de.po: Makefile, description and german translation for gettext.
ingo_weinzierl@36: 
ingo_weinzierl@36: 	  NOTE: It is necessary to call 'make mo' in the po directory to enable the
ingo_weinzierl@36: 	  german language.
ingo_weinzierl@36: 
ingo_weinzierl@34: 2010-09-02  Ingo Weinzierl <ingo.weinzierl@intevation.de>
ingo_weinzierl@34: 
ingo_weinzierl@34: 	  ISSUE1575
ingo_weinzierl@34: 
ingo_weinzierl@34: 	* getan/view.py: Verify that time values are not null before adding them to
ingo_weinzierl@34: 	  total time. Avoids getan crashing while switching the time mode.
ingo_weinzierl@34: 
ingo@33: 2010-08-31  Ingo Weinzierl <ingo.weinzierl@intevation.de>
ingo@33: 
ingo@33: 	* getan.py, getan/backend.py: Made getan Python-2.4 compatible.
ingo@33: 
ingo@32: 2010-08-31  Ingo Weinzierl <ingo.weinzierl@intevation.de>
ingo@32: 
ingo@32: 	* contrib/wochenbericht: Added a parameter 'year' that makes possible to
ingo@32: 	  filter out the week of a specific year only.
ingo@32: 
ingo@31: 2010-08-31  Ingo Weinzierl <ingo.weinzierl@intevation.de>
ingo@31: 
ingo@31: 	  ISSUE1566
ingo@31: 
ingo@31: 	* getan.py: Bugfix: removed 'with' statement, replaced by try/finally.
ingo@31: 
ingo_weinzierl@30: 2010-08-30  Ingo Weinzierl <ingo.weinzierl@intevation.de>
ingo_weinzierl@30: 
ingo_weinzierl@30: 	* getan.py: Added __enter__ and __exit__ methods. The exit method is used to
ingo_weinzierl@30: 	  stop still running projects - even if getan crashes. Therefor it was
ingo_weinzierl@30: 	  necessary to change the method signature of stop_project() in
ingo_weinzierl@30: 	  GetanController. The description for the running project is given into the
ingo_weinzierl@30: 	  method as parameter. If no desc parameter is specified, '-no description-'
ingo_weinzierl@30: 	  is used as description. This is the case if there are still running
ingo_weinzierl@30: 	  projects when we reach __exit__().
ingo_weinzierl@30: 
ingo_weinzierl@30: 	* getan/states.py: Added a description when calling stop_project() of
ingo_weinzierl@30: 	  GetanController.
ingo_weinzierl@30: 
ingo@28: 2010-08-30  Ingo Weinzierl <ingo.weinzierl@intevation.de>
ingo@28: 
ingo@28: 	* getan/view.py: Bugfix: Unified parameter names in ProjectList - some
ingo@28: 	  changes in rev25 did not fit to the current parameter names (head, foot).
ingo@28: 
ingo@27: 2010-08-30  Ingo Weinzierl <ingo.weinzierl@intevation.de>
ingo@27: 
ingo@27: 	* getan/states.py,
ingo@27: 	  getan/view.py: Bugfix: fixed wrong parameter name while accessing the raw
ingo@27: 	  project of a project node.
ingo@27: 
ingo_weinzierl@26: 2010-08-29  Ingo Weinzierl <ingo_weinzierl@web.de>
ingo_weinzierl@26: 
ingo_weinzierl@26: 	* getan.py: Catch a window resize event before calling keypress() of the
ingo_weinzierl@26: 	  states and trigger an update of the view - the view is resizable now!
ingo_weinzierl@26: 
ingo_weinzierl@25: 2010-08-29  Ingo Weinzierl <ingo_weinzierl@web.de>
ingo_weinzierl@25: 
ingo_weinzierl@25: 	* getan/states.py: Enter MoveEntryState and DeleteEntryState only if there
ingo_weinzierl@25: 	  are selected entries.
ingo_weinzierl@25: 
ingo_weinzierl@25: 	* getan/view.py: Updating the footer text of a ListWidget will update the
ingo_weinzierl@25: 	  attribute 'footer' in the ListWidget and call ListWidget._update_view().
ingo_weinzierl@25: 
ingo_weinzierl@25: 	* getan.py: Bugfix: changed the attribute name (entry -> item) when
ingo_weinzierl@25: 	  accessing the EntryList's entries.
ingo_weinzierl@25: 
ingo_weinzierl@24: 2010-08-29  Ingo Weinzierl <ingo_weinzierl@web.de>
ingo_weinzierl@24: 
ingo_weinzierl@24: 	* getan/view.py: Bugfix: switching the time mode in ProjectList will also
ingo_weinzierl@24: 	  update the displayed total time in the footer of ProjectList.
ingo_weinzierl@24: 
ingo_weinzierl@23: 2010-08-28  Ingo Weinzierl <ingo.weinzierl@intevation.de>
ingo_weinzierl@23: 
ingo_weinzierl@23: 	This commit introduces a new implementation of 'getan's user interface based
ingo_weinzierl@23: 	on urwid ( >= 0.9.9.1).
ingo_weinzierl@23: 
ingo_weinzierl@23: 	* getan.py: The 'getan' controller that is also used to start the
ingo_weinzierl@23: 	  application.
ingo_weinzierl@23: 
ingo_weinzierl@23: 	* classic/getan: Moved the 'old' getan to this folder - there is a new
ingo_weinzierl@23: 	  implementation based on python urwid library.
ingo_weinzierl@23: 
ingo_weinzierl@23: 	* getan/__init__.py,
ingo_weinzierl@23: 	  getan/backend.py,
ingo_weinzierl@23: 	  getan/config.py,
ingo_weinzierl@23: 	  getan/project.py,
ingo_weinzierl@23: 	  getan/states.py,
ingo_weinzierl@23: 	  getan/utils.py,
ingo_weinzierl@23: 	  getan/view.py: Model, backend, view and config modules used by getan.
ingo_weinzierl@23: 
ingo_weinzierl@23: 	* README: Added urwid >= 0.9.9.1 as further dependendy of getan and a hint
ingo_weinzierl@23: 	  of the classic version of 'getan' based on curses.
ingo_weinzierl@23: 
ingo_weinzierl@23: 	* TODO: Idea of implementing a 'Help-Widget' to display all available keys.
ingo_weinzierl@23: 
ingo_weinzierl@23: 	* INTRODUCTION: An overview about possible keys in the user interface.
ingo_weinzierl@23: 
thomas@22: 2009-08-18  Thomas Arendsen Hein  <thomas@intevation.de>
thomas@22: 
thomas@22: 	* contrib/zeiterfassung: left justify user sign in zeiterfassung
thomas@22: 
thomas@22: 	* getan: human_seconds: Use timespec instead of seconds and document it.
thomas@22: 
thomas@22: 	* getan: allow adding/subtracting times while a project is running
thomas@22: 
thomas@22: 	* getan: rename substract to subtract (substract might be correct, too,
thomas@22: 	but outdated)
thomas@22: 
thomas@22: 	* getan: Allow <timespec>+ and <timespec>- (RPN) to change time for the
thomas@22: 	current project
thomas@22: 
thomas@22: 	* getan: Handle empty input when adding/subtracting time of the running
thomas@22: 	project
thomas@22: 
teichmann@15: 2008-09-09	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@15: 
teichmann@15: 	* contrib/zeitsort: New. Sorts a zeiterfassung.txt file by
teichmann@15: 	  the dates in the lines. Useful to merge larger chunks
teichmann@15: 	  by simply append them and sort the result afterwards.
teichmann@15: 
teichmann@14: 2008-08-12	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@14: 
teichmann@14: 	* getan: When assiging a name to an anonym task remove and 
teichmann@14: 	  re-insert it into the project tree to make it selectable.
teichmann@14: 
teichmann@13: 2008-08-12	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@13: 
teichmann@13: 	* contrib/zeiterfassung: Applied Stephan Holl's week-option.patch which
teichmann@13: 	  adds the possibility to give an optional week of year.
teichmann@13: 
teichmann@12: 2008-08-11	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@12: 
teichmann@12: 	* getan: !!! Work in progress !!! Project Trees
teichmann@12: 	  The classic worklog only has one key to address a project.
teichmann@12: 	  This is major short comming. The getan database allows 
teichmann@12: 	  to store projects keys with more than one character.
teichmann@12: 	  This feature will be exploited to build trees of projects.
teichmann@12: 	  
teichmann@12: 	  Lets say you have two main tasks foo and bar with two sub 
teichmann@12: 	  tasks each you can name them f1, f2 and b1, b2. getan
teichmann@12: 	  stores these four tasks in a tree with top level f and b
teichmann@12: 	  and tow second level branches 1 and 2. To choose a task you 
teichmann@12: 	  have to press f or b followed by 1 or 2.
teichmann@12: 
teichmann@12: 	  At the moment only selection works.
teichmann@12: 
teichmann@12: 	  TODO and next steps: 
teichmann@12: 	  - Remove all old linear data structures.
teichmann@12: 	  - adjust rendering to only show active branches.
teichmann@12: 	  - sort anonymous task after naming into project tree.
teichmann@12: 
teichmann@11: 2008-08-04	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@11: 
teichmann@11: 	* contrib/zeiterfassung: Applied a variation of Stephan Holl's
teichmann@11: 	  zeiterfassung.non-utf8-chars-in-db.patch to force the  encoding
teichmann@11: 	  given by --encoding=.
teichmann@11: 
teichmann@10: 2008-08-03	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@10: 
teichmann@10: 	* contrib/zeiterfassung: Added parameter -e | --encoding=.
teichmann@10: 	  This enables e.g. the output as latin1 with --encoding=latin1.
teichmann@10: 
teichmann@9: 2008-08-03	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@9: 
teichmann@9: 	* contrib/zeiterfassung: Applied and completed Stephan Holl's
teichmann@9: 	  zeiterfassung.bessere-lesbarkeit.patch, fixed small issue with
teichmann@9: 	  --project= parameter.
teichmann@9: 
teichmann@8: 2008-08-01	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@8: 
teichmann@8: 	* contrib/zeiterfassung: New. generates lines for zeiterfassung.txt.
teichmann@8: 	  usage: ./contrib/zeiterfassung <options>
teichmann@8: 	  with <options>
teichmann@8: 	  [--user=|-u <user>]        : Name of user,   default: $USER
teichmann@8: 	  [--database=|-d <database>]: getan database, default: time.db
teichmann@8: 	  [--project|-p]             : Key of output project, default: all
teichmann@8: 	  [--list|-l]                : list all projects
teichmann@8: 	  [--help|-h]                : This text
teichmann@8: 	  
teichmann@7: 2008-07-31	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@7: 
teichmann@7: 	* getan: Feature wish 8: F1 is like <ESC>-1, F2 is like <ESC>-2
teichmann@7: 	  to F10 is like <ESC>-0.
teichmann@7: 
teichmann@6: 2008-07-31	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@6: 
teichmann@6: 	* getan: Feature wish 4: in +/- time defaults to minutes.
teichmann@6: 	  Strings like '1d:4h:3m', or '2m:4s' and so on are valid
teichmann@6: 	  times now. Feature wish 10: When adding time to project
teichmann@6: 	  is now possible to enter an optional description. 
teichmann@6: 
teichmann@5: 2008-07-31	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@5: 
teichmann@5: 	* contrib/wochenbericht: Applied patch from Stephan Holl to show 
teichmann@5: 	  usage on '-h' of '--help'. Added check for existence of db file.
teichmann@5: 
teichmann@4: 2008-07-31	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@4: 
teichmann@4: 	* contrib/wochenbericht: New. Little script to summarize the
teichmann@4: 	  entries for a given week number of year.
teichmann@4: 
teichmann@3: 2008-07-30	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@3: 
teichmann@3: 	* getan: Added total sum of all projects.
teichmann@3: 
teichmann@3: 	* README: Added hint to tac your old worklog config file to keep 
teichmann@3: 	  reversed order.
teichmann@3: 
teichmann@2: 2008-07-30	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@2: 
teichmann@2: 	* getan: Added +/- time to tasks. If in pause mode press + or -
teichmann@2: 	  to add or subtract time from a task in form of <key> <seconds>.
teichmann@2: 	  key is the effected task seconds is the among of time. seconds
teichmann@2: 	  can be postfixed by 's' for seconds, 'm' for minutes, 'h' for
teichmann@2: 	  hours and 'd' for days.
teichmann@2: 
teichmann@1: 2008-07-29	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@1: 
teichmann@1: 	* getan: To exit getan you now can use double BACKSPACE, too. 
teichmann@1: 
teichmann@1: 	* README: Fixed typo, added hint to Sascha Wilde's projects converter.
teichmann@1: 
teichmann@1: 	* contrib/convert-projects: Added Sascha Wilde's converter to import existing
teichmann@1: 	  worklog configuration files.
teichmann@1: 
teichmann@0: 2008-07-28	Sascha L. Teichmann <sascha.teichmann@intevation.de>
teichmann@0: 
teichmann@0: 	* ChangeLog, LICENSE, README, TODO, getan, schema.sql: Initial import