This application is a simple hierarchical todolist that will run on Linux under mono.
To install mono on the eee pc, you need to follow the tutorials on adding repositories from here.
Then you can install mono using the following command:
sudo apt-get install mono monodoc mono-devel mono-gmcs mono-mcs mono-utils
I have been using .dan.g's ToDoList for quite a while now. It is a great todolist and I have not found anything to match it anywhere else.
But, it only runs on Windows and that is a drawback. I have tried to run it using wine on Linux but can't figure out how to 'install' the msxml DLLs which todolist needs. I have recently got an Asus eee PC and have been looking for a todolist to run on it. I have found nothing that can live up to dan.g's todolist. I have tried running todolist under wine, but it doesn't work easily, so I decided to port my TodolistPPC to run on Linux under mono, and get that running on the Eee PC.
At the moment, it will read in files from dan.g's todolist version 5.3.11. I may continue to read and write dan.g's files, but probably not. I think that I will expand this application, and start using it on mono under Windows as my main todolist.
There are two namespaces in this project, the UI namespace (
uk.org.aspellclark.todolist) and a separate namespace for the data (
uk.org.aspellclark.todolist.engine). I have reused a number of classes from my todolist for PocketPc (TodolistPPC).
The engine namespace contains just one class (for now)
The main task class (
CTask) contains all of the data for a single task. This class has members to read and write that data from/to XML. This class was originally written by Kyle Tillman for his Pocket PC TodoListViewer. I updated it and added saving todolists back out in my TodoListPPC project and now the class ends up here running under mono on Linux.
The UI starts out with the class
MainForm. This class is the main window of the application and contains a menubar, status and an empty tabcontrol.
Yes, an empty tab control. It starts out empty because there are no todolists loaded at startup. When a todolist is created or opened, a new
TabPage containing a
TodolistCtrl is dynamically created which is placed inside the tabcontrol.
TodolistCtrl is a custom
UserControl that contains a tree view control and a panel. This control loads the todolist information from the file into its
TreeView. Each task from the file is loaded into a
TodolistTreeNode which contains a
CTask object. When a task is selected (clicked on) in the tree view, the
CTask object is extracted from the selected
TodolistTreeNode and a
TaskDetails custom User Control is created. This new control displays the details of the selected task and is placed into the panel inside the
AppVersion object has functions that return the current version number of the application (including its alpha/beta status).
This project contains some classes that I use in all of my projects
It has a
CommonFunctions class which contains some general functions to get information about the environment
PreferencesXml object allows application preferences to be stored in an XML file and re-loaded when an application is started.
FontHandler object is still under development but will allow me to load fonts from an embedded resource file and use them in the UI.
Points of Interest
The most surprising thing I have found is that the mono projects WinForms implementation is so complete that I can use icSharpCode's Sharpdevelop to create the application. This is a nice IDE and being able to use it allows me to use its Windows form's designer and debugger to write the application.
I can then compile the application (with a couple of minor tweaks) with nant and mono (which I have added to the SharpDevelop tools menu), copy the executable to my eee PC and it 'just works'.
The tweaks that I have to do to the code for running on my eee PC are:
Mono 188.8.131.52 (the version I have running on my eeePc) does not support
StatusBar.Name properties. I have to comment these out.
I also have to change the construction of the MainMenu from
this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components); to
this.mainMenu1 = new System.Windows.Forms.MainMenu(); as mono 184.108.40.206 will throw a missing method exception.
It's a pity that SharpDevelop keeps putting these back into the code automagically every time I open the Winforms designer, so I have to keep removing them.
These are the only two changes I have to make to get it running on mono on my eeePc. If I can get mono 1.2.6 installed on the eee, then I should not have to change these two items as it will run with the above two things unchanged when I execute the app on my Windows box under mono 1.2.6.
- More details need to be shown in the details tab
- I want to add some embedded fonts
- 1.0.0 (alpha) (20th December, 2007)
- First public offering after porting to mono
This is not ready for actual use yet, but it may be useful for people to view their todolists
- 1.0.1 (alpha) (5th January, 2008)
- Added saving todolists (but not tested re-loading them yet)
- 1.1.0 (beta) (20th January, 2008)
- Added reloading open todolists on application start