65.9K
CodeProject 正在变化。 阅读更多。
Home

Linux 的 Todolist

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2007年12月27日

CPOL

5分钟阅读

viewsIcon

33038

downloadIcon

909

专为 Asus Eee Pc 设计的简单待办事项列表。

snapshot

引言

这个应用程序是一个简单的分层待办事项列表,可以在 Linux 下通过 Mono 运行。

背景

我使用 .dan.gToDoList 已经有一段时间了。它是一个很棒的待办事项列表,我在其他任何地方都找不到能与之媲美的。

但是,它只能在 Windows 上运行,这是一个缺点。我曾尝试在 Linux 上使用 Wine 运行它,但无法弄清楚如何“安装”待办事项列表所需的 msxml dll。我最近得到了一台 Asus eee PC,一直在寻找一个可以在上面运行的待办事项列表。我没有找到任何能与 dan.g 的待办事项列表媲美的。我尝试在 Wine 下运行待办事项列表,但并不容易,所以我决定将我的 TodolistPPC 移植到 Linux 下的 Mono 上运行,并在 Eee PC 上运行它。

目前,它可以读取 dan.g 的待办事项列表版本 5.3.11 的文件。我可能会继续读取和写入 dan.g 的文件,但可能不会。我认为我会扩展这个应用程序,并开始在 Windows 上的 Mono 中将其作为我的主要待办事项列表使用。

代码

todolist engine class diagramtodolist.engine.png

这个项目有两个命名空间:UI 命名空间 (uk.org.aspellclark.todolist) 和一个用于数据的独立命名空间 (uk.org.aspellclark.todolist.engine)。我重用了我为 Pocket PC 编写的待办事项列表 (TodolistPPC) 中的一些类。

引擎命名空间(目前)只包含一个类。

主任务类 (CTask) 包含单个任务的所有数据。此类具有从/到 XML 读取和写入数据的成员。此类最初由 **Kyle Tillman** 为他的 Pocket PC TodoListViewer 编写。我在我的 TodoListPPC 项目中更新了它并添加了将待办事项列表写回的功能。现在,该类最终在这里,在 Linux 上的 Mono 中运行。

todolist UI class diagram

UI 以 MainForm 类开始。此类是应用程序的主窗口,包含一个菜单栏、状态栏和一个空的 TabControl。

是的,一个空的 TabControl。它在启动时为空,因为没有加载任何待办事项列表。当创建或打开一个待办事项列表时,会创建一个新的 TodolistCtrl,并将其放置在 TabControl 内部。

TodolistCtrl 是一个自定义 UserControl,包含一个 TreeView 控件和一个 Panel。此控件将待办事项列表信息从文件加载到其 TreeView 中。文件中的每个任务都被加载到一个 TodolistTreeNode 中,该节点包含一个 CTask 对象。当在 TreeView 中选择(单击)一个任务时,CTask 对象会从选定的 TodolistTreeNode 中提取出来,然后创建一个 TaskDetails 自定义 User Control。这个新控件显示选定任务的详细信息,并被放置在 TodolistCtrl 内部的 Panel 中。

AppVersion 对象具有返回应用程序当前版本号(包括其 alpha/beta 状态)的函数。

common project class diagram

这个项目包含一些我在所有项目中使用的类。

它有一个 CommonFunctions 类,其中包含一些用于获取环境信息的通用函数。

PreferencesXml 对象允许应用程序首选项存储在 XML 文件中,并在应用程序启动时重新加载。

FontHandler 对象仍在开发中,但它允许我从嵌入的资源文件中加载字体并在 UI 中使用它们。

关注点

我发现最令人惊讶的是,Mono 的 WinForms 实现是如此完整,以至于我可以使用 icSharpCode 的 SharpDevelop 来创建应用程序。这是一个不错的 IDE,能够使用它允许我使用其 Windows 窗体设计器和调试器来编写应用程序。

然后,我可以(经过一些小的调整)使用 nant 和 mono(我已将其添加到 SharpDevelop 的工具菜单中)编译应用程序,将可执行文件复制到我的 eee PC 上,它就能“正常工作”。

为了在我的 eee PC 上运行,我需要对代码进行的一些调整是:

Mono 1.2.2.1(我在我的 eeePc 上运行的版本)不支持 StatusBar.Name 属性。我必须将它们注释掉。

我还必须将 MainMenu 的构造从
this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components); 更改为
this.mainMenu1 = new System.Windows.Forms.MainMenu(); 因为 mono 1.2.2.1 会抛出缺少方法异常。

可惜的是,每次我打开 WinForms 设计器时,SharpDevelop 都会自动将这些代码重新添加进去,所以我必须不断地删除它们。

这是我为在我的 eeePc 的 Mono 上运行而必须做的仅有的两个更改。如果我能在 eee 上安装 mono 1.2.6,那么我就不必更改这两项,因为当我在 Windows 机器上使用 mono 1.2.6 运行应用程序时,这两项将保持不变。

已知问题

  1. 详细信息标签中需要显示更多内容。
  2. 我想添加一些嵌入式字体。

历史

  • 1.0.0 (alpha) (2007 年 12 月 20 日)
    • 移植到 mono 后的第一个公开版本。
      这还没有准备好实际使用,但对于人们查看他们的待办事项列表可能很有用。
  • 1.0.1 (alpha) (2008 年 1 月 5 日)
    • 添加了保存待办事项列表功能(但尚未测试重新加载它们)。
  • 1.1.0 (beta) (2008 年 1 月 20 日)
    • 添加了在应用程序启动时重新加载已打开的待办事项列表的功能。
© . All rights reserved.