Introduction
This application is a simple hierarchical todolist that will run on Linux under mono.
Installing 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
Background
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.
The Code
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.
The 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 TodolistCtrl
.
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
The PreferencesXml
object allows application preferences to be stored in an XML file and re-loaded when an application is started.
The 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 1.2.2.1 (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 1.2.2.1 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.
Known Issues
- More details need to be shown in the details tab
- I want to add some embedded fonts
History
- 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