Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Todolist for Linux

0.00/5 (No votes)
30 Sep 2008 1  
A simple todolist designed for an Asus Eee Pc

snapshot

Introduction

This application is a simple hierachical todolist that will run on linux under mono.

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 our 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 diagramtodolist.engine.png

There are two namespaces in this project, the UI namespace (uk.org.aspellclark.todolist) and a seperate 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 TodolistCtrl is 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 it's 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 it's 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 it's windows form's designer and debugger to write the aplication.

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 details tab
  2. I want to add some embedded fonts.

History

  • 1.0.0 (alpha) (20 December 2007)
    • First public offering after porting to mono
      This is not ready for actual use yet, but it may be usefull for people to view their todolists
  • 1.0.1 (alpha) (05 January 2008)
    • added saving todolists (but not tested re-loading them yet)
  • 1.1.0 (beta) (20 January 2008)
    • added reloading open todolists on application start

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here