Click here to Skip to main content
15,860,943 members
Articles / Programming Languages / C#
Article

Linux Todolist

Rate me:
Please Sign up or sign in to vote.
4.59/5 (15 votes)
28 Jan 2008GPL35 min read 73.5K   2.3K   53   9
A simple todolist designed for an Asus Eee Pc
Eee PC running Todolist

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

todolist engine class diagram

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.

todolist UI class diagram

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).

common project class diagram

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

  1. More details need to be shown in the details tab
  2. 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

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)


Written By
Software Developer (Senior) Airbus Defense and Space
United Kingdom United Kingdom
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Generalinstalling mono on the eee Pin
robert bouwens28-Jan-08 8:32
robert bouwens28-Jan-08 8:32 
Hi,

I like the project Rose | [Rose]
It would also be nice to see a howto about bootstrapping mono on the eee gadget.
Especially with reagrds to the space requirements...
Regards
Robert

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.