This page will be updated blog-style with the latest activity in newest-to-oldest format. If you want to know what's up, subscribe to changes on this page however you prefer to do that sort of thing.
- The library is actually very close to it's initial release. Prior to this, the Recurrence is complex and will require extensive testing. Other minor tweaks are being made as testing continues.
- A Console app is included as a Test/Example suite. This shows several ways to read a ToDoList, and exercises reading properties. Changes are made regularly to this project to reflect changes to the library.
- Another Windows Forms app reads a .tdl and displays the data in a tree that's familiar to those who view their projects in the ToDoList application. This was recently updated to show in the tree nodes the icon associated with a CustomAttribute of type Icon.
This is facilitated by helper methods in the library. Recent enhancements account for icon transparency.
- Another sample project was created which makes a ToDoList available via a web service. After some initial thinking about how to properly serialize the strongly typed, complex objects, it occurred to me that the best serialization is in the .tdl XML file
itself. So the web service just passes back the XML string.
- Another ASP.NET Web Forms project was created which consumes the web service. This displays task items in a grid which refreshes through the web service every five seconds. Change a task in ToDoList, save it, and the web page refreshes to display the change.
(It's very simple technically, but it's very cool to see it working.)
- Many enhancements were made to allow contained objects to look up to their parent tasks and tasklist. For example, to validate whether an Icon is valid in a Custom Attribute, the objects must have access to the parent task list and the custom attribute
definitions. This is complicated by the idea that tasklists can be assembled in pieces . You don't need to start with a tasklist which establishes its relations in all nested objects. You can build components like a custom attribute or recurrence and then
add it into a new task, and the add the task into a new tasklist. When objects are added like this, their associations are established internally. Over time it's certain that people will find some of these associations are not occurring as expected, and it's
possible that we'll need flags to get the code to behave in specific ways.
- Many enhancements were made to allow developers to specify the file encoding desired for read and write operations. The default is always UTF-16 (Little Endian) which agrees with .tdl files.
- Touch-ups were made to standardize the use of variables across the code. All XML comments are now fully implemented for the documentation. And a new document was started to explain how the library works - beyond the basic syntax docs.
As you can see some of the changes are cosmetic, so we're getting close to a release.
Changes to v6.8B8 have been rolled into the library and normal testing has resumed. As I go through the code I'm writing documentation about how things work, in addition to the basic XML code comments for syntax.
Here is sample code and related output from one of the test routines. A task list is read, LINQ re-organizes it by Status and then by ID, and the results are sent to the console. The extension method Descendants() flattens out the nested hierarchy of tasks
for this sort of reporting. If you don't know LINQ, skip that part. What's important is that a strongly typed task list is read-in with a single line, and from there properties on individual tasks are used just like any other class object (task.Status, task.ID...).
That's the whole point of this library.
In addition to testing with some small sample applications that will be in this package with source, I've started experimenting with small steps toward commercial apps. There's no better way to prepare this for the real world than to actually use it in real
apps. One of the utilities that Dan said people might want is a monitor which shows Management people a live view of what's changing. Well, here's a screenshot of a prototype of such an application, of course created with this library. This application will
not be included with the samples but another one similar to it will be. The reason is that I use licensed Telerik controls for easy/attractive UI development, but controls distributed with the library need to be freeware. The grid I use facilitate loading
of hierarchical data - you may be able to see below the first task and the highlighted one are parent tasks, while others are at the root level or sub-tasks.
More testing, enhancements, and refinement are in-progress, along with code samples to profile the library use in different environments. The ToDoListLib.tdl for this library itself is growing with current activity as well as things that can or should be
I'll start updating this page more frequently just to show progress.
In preparation for ToDoList v6.9 minor schema changes were made to the format of the .tdl file through 6.8B8. After dealing with some difficulties in the xsd.exe utility from Microsoft, a new schema has been generated, the library updated, and testing has
The initial release of this library will be read-only. While the library supports write operations, I don't want to take a chance on damaging anyone's live .tdl file. So read operations will be thoroughly tested and when that seems stable then we'll move
toward writing. I'll continue to test writes, but to avoid accidents, published releases will have writing disabled. The ability to backup an existing file before-write will be built-in, and for initial releases will be hard-coded to be active.
Dan Godson and I have been talking about a bridge between this library and ToDoList to facilitate plugins. This will allow TDL to pass live data to an app written with this library, and for the data to be written back.
More and more request in the ToDoList forum are getting a response from me like "that will be possible with the new library". Developers will be encouraged to make use of this library to create solutions to common needs and publish them for consumption.
Dan is looking to add a feature to TDL that might make it easy for such solutions to be discovered and quickly added to a user environment.
- Many updates to CHM file - now published for
- There are some minor issues in the CHM file generation, like with optional parameters. Will address that as time permits.
- Classes that are all CAPS are deserialized XML from .tdl files. I haven't decided how to document these yet, please ignore them.
- Please feel free to look through the doc, email minor notes using link at bottom of every page, and ask questions in the Discussions area. If you notice something missing, please report it as an Issue.
- I'll add more code examples and some HowTo info and insight as time permits. This will contribute to the pool of keywords in the index and for Searching.
- Added VB.NET and C++ syntax for our non-C# friends.
- Added feature to SafeTaskList which sets all SafeTask.ParentID values on any reference to the list's Tasks property.
- Added SafeTask.SetParentIDs(int? parent) method which sets parent on current task, all subtasks get ParentID for current Task, all sub-sub-tasks get appropriate IDs.
- Added new project ToDoLibTests2. WinForm with a treeview to display values in nested nodes. Compare to ToDoLibTests1 which send a stream of data to the console. It's the same internals but a more readable format. Includes word counts for comments as requested
- Significant updates to CustomAtttributes to allow client code to verify if a task attribute is an icon, and to verify that the value in the task is valid.
- Many internal updates.
- Now using Sandcastle to create CHM file help docs. Sample image provides an idea of what this will look like.
2/17/2014 : I just published the README.htm just so I can publish this project. Unfortunately the page displays as HTML - it doesn't render. I should have known. I'm replacing this with a text version.
2/16/2014 : Completed updates to (I think) all doc pages. Created a new ReadMe.htm which will be the only page posted here for a while. CodePlex requires a project to have code posted in order to go live. I want to invite people to start
visiting so will post the ReadMe just to get started, and add code later.
The code is highly functional. Updates back into .tdl files have not been tested well, which is why I'm holding onto the code. I do have some basic testing in place, but not proper unit testing or mockups. I may add that into separate projects later which
will be distributed with the package.
I have a ToDoListLib tasklist which I share with Dan through Dropbox. At some point I may publish this for open read-only access, or I might XSLT the .tdl to HTML and link to it from here. The list includes things like:
- Add helpers for Tasks collections
- Add .Diff method to return list of differences if tasks are not the same
- Overload Equals operator to compare headers and tasks
- Provide documentation for LINQ queries to find tasks by ID, PID, External ID, with comment text, within date range, with status, with priority, etc.