//----------------------------------------------------------------------------------------
// Name: TODO.txt
// Purpose: A listing of what there is to be done for Plucker Desktop.
// [X]: has been addressed, awaits testing before going off the TODO list.
// [-]: on hold, or removed from queue.
// Author: Robert O'Connor
// Modified by:
// Created: 2001/10/20
// Copyright: (c) Robert O'Connor ( rob@medicalmnemonics.com )
// Licence: GPL
// RCS-ID: $Id: TODO.txt,v 1.16 2003/03/09 01:38:04 robertoconnor Exp $
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
// Priority 1
//----------------------------------------------------------------------------------------
[ ] Rename configuration.cpp's copy_section2 to copy_section, replacing the existing
copy_section code wherever it is used.
[X] Doxygenate the import_controller.cpp
[X] Implement the Linux compared filedates in import_controller
[X] Load a array key of the filenames
[X] Load an array key of filedates
[X] Compare the array of filenames/filedates to existing
[X] Merge any new/updated files
[X] Save array key of current filenames
[X] Save array key of current filedates
[ ] Config setting to only show certain viewers (or viewers that are installed)
[ ] Add ini file option (daemon?) for USB pause on GTK (palm_installer::...).
Place into setup wizard on viewer_wizardpage, and a setting the UI or somewhere.
Perhaps there should be a is_usb_pause on the handheld_dest_type struct, and set
that, so tha the palm_installer class is fully separate from plucker.
[X] "m_did_close_dialog_code_execute_yet" code removed from details_progress_dialog.cpp/.h
after testing that it isn't needed anymore (test for shutting off computer during
progress dialog crawl and see if makes a difference).
//----------------------------------------------------------------------------------------
// Priority 2
//----------------------------------------------------------------------------------------
[ ] The setup wizard should have a checkbox wizard page asking if they want to change
all the destinations/bpp etc in their list to what they have in the wizard, before
doing it. (Default for first run is checked, for after first run is not checked).
[ ] The uninstall conduit just exits silently if the conduit is already removed
(arises since the uninstall run executions "stack", so that the uninstall
conduit will run multiple times, if they installed multiple times.
[ ] wxFileName::MakeRelativeTo() for the image dialog's checkbox for relative path.
[ ] Replace wxMakeDir() with wxFileName::Mkdir with the wxPATH_MKDIR_FULL flag set,
so that will recursively make all the needed subdirs, and not error out if
the dir already exists.
[ ] Unix makefile installs message catalogs.
[ ] Expunge before/after command from parser and docs.
[ ] Add before/after command to desktop.
[ ] Ask Michael about Makefile dir locations.
[ ] The default config object should always be the wxwindows config file, as it will
read/write unwelcomely some settings. One thing is the generic wxFileDialog on GTK,
(which is currently hacked around), but another is the wxFontEncoder, which gets
called up on a on a MSW ME in Thai, but would happen on GTK and MAC too, most
likely. The stuff that wxwindows is writing to plucker.ini will cause the
parser to crash. When fixed, drop a note to
Witit Sajjapong <witits@ttt.co.th>
for testing.
[ ] Pasting a URL must strip out any line returns from the url, or channel_dialog
write configuration must strip out any returns or file_configuration should strip
out any carriage returns so that won't write a line break in the middle of the
key which would screw up the confige file.
[ ] Do a popup ask of where the plucker, resource and langs dirs are if cant find them?
Channels too? A temp dir also?
A tab on the preferences dialog to specify where these locations are (perhaps a
warning icon on the page telling the dangers of modifying them).
Or add as an options menu item.
//----------------------------------------------------------------------------------------
// Priority 3
//----------------------------------------------------------------------------------------
[ ] Single instance / Lock plucker.ini
[X] Basics
[ ] Allow customization
[/] MSW: shortcut icons don't install to correct place in start menu? Why is that?
The install script appears correct to me. Must be something XP specific in
InnoSetup.
[ ] Do something with the showcase_field_names when rewrite that dialog. Currently, they
are reproduced in the showcase_listctrl, and the preferences_dialog. Can't be a
global or else they won't get translated.
[ ] Default dialog sizes fit on a 640x480 screen by default for remaining dialogs
[ ] Hyperlink dialog->probably needs tabs
[ ] Configure dialog--difficult
[ ] The default font in the wxStyledTextCtrl on GTK isn't a fixed width font for some reason.
It is wxMODERN alright. The sample isn't fixed width either. The control just doesn't
seem to care.
--This should use a font selector anyways (along with word wrap) in the
Preferences Dialog > Editor tab.
--There is a function wxFont::GetNativeFontDesc() or something that will give a
savable string for a complete font description. Use that to save to config,
then load in the editor.
[ ] Rebrand icon/wizards/about_dialog to the final plucker icon.
[ ] Commandline additions:
channels list all the channels one per line
sections list all sections one per line
chandue list all channels due one per line
secdue list all sections due one per line
version return version info of this desktop
options to set the progress display method (so can use a different method than
the GUI version)
[ ] Add none to progress display options, and perhaps a checkbox/editbox to allow turning
on of logging to a specified file.
[ ] Better exit status on commandline mode: Example
1 = failed channel
2 = more than one failed channel
10 = no channels to process (none due)
11 = can't write log file(s)
//----------------------------------------------------------------------------------------
// Priority 4
//----------------------------------------------------------------------------------------
[ ] Include a column in mainscreen for success/fail/new of channel success.
[ ] Main frame > About dialog: the post update size doesn't seem to work.
[ ] Postponed, just using some extra spaces for now.
Will be using expanded variables in XRC which will fix this anyways
it will just be a $(version) where the application version number gets filled
in. Waiting for implementation.
[ ] Will have to do something with close progress dialog if no errors, as now it
doesn't know if an error occurred, since stdout changed.
[ ] Hide dialog items if compiled out. These should go into a similar function
yes a function for each to remove items for code order.
[ ] viewer_wizardpage.cpp should have a read_configuration and write_configuration
of its controlls to all better VAR customization and also in case run again, don't
accidently put in the wrong ones.
[ ] Use a modified "Add channel wizard" wizard for the basic toolbar's add hyperlink button.
[ ] Add note in online help that can't use spaces on MSW in before_command and after_command
(the 2 parser ones) if they aren't fixed in the CVS parser (before_group_commmand and the
rest of the pure Desktop ones can use spaces OK).
--->Bill wants it out of the parser. Excise it and add to Desktop.
[ ] Autoupate: on the ShowModal() of the parent
get the autoupdate precision before and after showing the modal. If has changed, then
restart the timer with a interfaced call to main_listctrl->start_timer(); otherwise
will keep the same timer until shut down and restart the application.
[ ] "Compact", other properties into parser.
[ ] "Popup" into parser, viewer.
[ ] Image dialog: checkbox 'Relative to page location' works (do after editor loads up
any page).
--->There is a function specifically for this purpose. wxFileName::MakeRelativeTo()
[ ] Should set CWD to the html file so that html window can find these images now, once relative.
[ ] Make relative the default.
[ ] Drag and drop files/text into main frame listctrl.
[X] Basic classes added to main listctrl
[-] Drop a string URL as the home_url
[X] Drop a set of filenames as the home_url
[-] Drop XML text as a channel
[ ] Drop XML files as channels.
[X] Finish the longs and the datetimes (should probably change config
path to the section first, since so many)
[ ] Paste:
[X] Paste URL as new channel.
[-] Paste XML string as new channel [should check string on clip board first
to see if starts with <xml...].
[ ] Menu creates and enables the entries depending what is on clipboard.
[ ] Paste files as a single channel (makes a home.html, with links to all files).
[X] Paste each file as an individual channel
[ ] Could either:
- prompt to create one channel for all/or channel for each
- popup menu items for these 2 cases
- pref to decide
[ ] Don't allow the "a single file pointing to all the subfiles" option,
unless it there is more than one filename
[ ] Paste XML file as channel (need an extension, like .plkr?)
[ ] Add the parser's "filename_extension" value to the UI?
//----------------------------------------------------------------------------------------
// OS Specific Issues: Mac
//----------------------------------------------------------------------------------------
[ ] Add in the commented out "About relocation" in main_frame.cpp
[ ] On MacOSX there is a special application menu for preferences. It should be moved, like
the about menu relocation but code to do it isn't in wx cvs yet (june 25).
> under Mac OS X there is a special preferences menu in every
> application menu.
--->Dominic says that this will get its own function soon.
//----------------------------------------------------------------------------------------
// OS Specific Issues: GTK
//----------------------------------------------------------------------------------------
[ ] Install application/desktop links for KDE and GNOME (currently they are sitting in
installer/unix directory)
[ ] Right click on the progress-dialog listbox. The popup menu location isn't under the
mouse, but a point relative to the listbox if it wasn't inside a scrolled window
(though if that point was offscreen, the menu will move up to be visible).
Either something in listbox, or something with my code.
[ ] Have a look at ::wxGetMousePosition() It will return it in screen coordinates.
[ ] When start plucker-desktop from console, GTK will give some warnings about a clipping
region being NULL somewhere along the splashscreen creation. It doesn't seem to harm
anything.
//----------------------------------------------------------------------------------------
// OS Specific Issues: MSW
//----------------------------------------------------------------------------------------
[ ] Configure channel: "Edit file" button flickers if box is empty.
---> Need a check to see if already disabled before disabling again or vice versa.
---> Added the code, but still flickers. Unknown why.
[ ] Better default channels for install. The current one was used because (a) I know the
channel won't change on me (b) I know it works and doesn't go offsite or have
invalid HTML, nor will it (c) I looks good in the viewer and shows off most of the
formatting features. However, having some defaults of more broad interest (tech,
PDAs, etc would be better. Probably better to take from the showcase).
[ ] My MSW test machine on wx2.3.3 no longer seems to connect automatically to the
Internet if starting a parse. Machine specific, or need a wxDialUpManager?
//----------------------------------------------------------------------------------------
// Non-essentials
//----------------------------------------------------------------------------------------
[-] Freeze on preferences dialog > autoupdate tab in use time control. To reproduce:
- Have one of the radio-buttons other than the offpeak radiobutton (3rd one) selected
- Select the off peak radiobutton
- Select one of the other radiobuttons.
- Program is now frozen, processing away at some calculation somewhere. Infinite
recursion of an update event? A duplicate ID? Other?
[ ] Ability to cycle through all tips. (Perhaps move to checklistbox of
basic/advanced/trivia).
[ ] Add depth-first to showcase entries, that can be parsed depth-first.
[ ] Add .hhp cached file to installers (WIN and maybe Linux)
[ ] A dialog for setting the desired directories. Has to be non-XML so that can run it
at startup before try to load the XML resources (which would segfault the program)
Perhaps a layout of:
Name of directory (and description): [Verify button] [status]
[Edit box] [Choose directory button]
---Make each as a component so that can put 6 of the suckers on the same page.
---Read/write to the config file.
---Perhaps lead in with a checkbox dialog specifying that one or more directories
were not found. Do you wish to locate them? (Don't show this again).
[ ] Checks for pilot-xfer before attempting a handheld install of channel/software:
Here is the python code from plucker-setup:
if not os.system('pilot-xfer > /dev/null 2>&1'):
install_viewer()
else:
print "\nThe program 'pilot-xfer' is missing so the Palm applications cannot be installed. You'll find them in %s." % PALMDIR
[ ] Include the DOC converter into channel dialog start page tab.
[ ] Hyperlink dialog: add a POST="" parameter field. Doesn't work? (See mail archive)
[ ] When popping up dialog asking for a Channel name, have the function take an extra
argument to override the default plkr_UNNAMED_CHANNEL_NAME with something better for the
default text (and send that argument). Get the orginal argument by looking at the
filename, or the URL and making something useful and compliant from that.
[ ] A commandline parameter for uninstalling, to launch a dialog asking if want to
clear out the channels dir. More efficent that maintaining a separate uninstall run
program.
[ ] Add support to parse the timezone and/or convert from GMT (perhaps add a wxDateTime::FromGMT()
function).
[ ] Capacity to build a channel of channel homepages (either a wizard or a note in the docs).
[ ] Option to ask "For what user?" when updating channel(s).
[ ] DOS-like-syntax ( ? and * ) wizard for regular expressions (with a checkbox for only
if at the end). Stick them as a "Wizard.." button at the end of the url-pattern and
blocked dialog buttons.
[ ] Make external editor a combo box containing some strings to popular editors.
[ ] Make the utils_controls::file_control have a final parameter of whether should quote the file returned,
and turn it on for the external editor one, if under MSW. Else just quote the returned
file.
[ ] HR dialog width values >100% inserts as 100% (validate?).
[ ] HR dialog spinner upper limit of width is 150 pixels, or a warning, or just a note
in Docs.
--->Just a note in docs will do fine, as plucker documents aren't just for
handhelds anymore.
[ ] Hyperlink "color" property (may need to split into basic and advanced tabs).
[ ] Span "color" property.
[ ] Bookmark dialog prevents non-kosher letters in the "name" field (use a Validator).
[-] Exclusion list dialog currently inverts list order if edit an entry (probably due
to insert putting it in the first position). Marked non-essential since probably
more sense to specify an alpha or priorty sort before loading anyways. Is one of
the load or saves in reverse lines though. Could it be?
[ ] Delete plkr* (or plk* since truncates) files from system's temp directory on program
exit. wx* also? Or use a different temp directory and delete everything?
--->There is no temp files unless downloading something.
[ ] Set calendar to have a beveled appearance. Tried it, doesn't seem to work.
[ ] Option to set calendar to start with Mondays first, not Sundays.
[ ] Autoupdate: behaviour for disconnecting after sync.
( ) Stay on
( ) Auto off
( ) Ask
--->Add note to docs that have to config OS dialup to automatically finish
the connect when called by an app, since autofilling in login/pass isn't possible
(nor should it be, that is an OS item, not the responsibility of Plucker Desktop).
[ ] A getmultiplesections for choosing which global exclusion list to edit (in the
exclusionlist dialog constructor. Currently always opens/creates it in the expected
places.
[ ] Use a custom listctrl checklistbox instead of a normal checklistbox for multiple
selections, such as the showcase fields. See cpp code in /unused_source.
//----------------------------------------------------------------------------------------
// Pre-release
//----------------------------------------------------------------------------------------
[X] Add any extra OS reserved characters to the illegal_section_name_characters wxString
at the top of configuration.cpp (like perhaps a tab \t or a newline or any Linux
or Mac restrictions).
--->Due to infinite characters possible, we now go the other way: only allow
legal chars.
[ ] Handheld software install directories to their final resting places. (esp usermanual
where is that in a default install?
--->Michael: Use a plucker.ini key to tell what directory to look for it.
[ ] Array Memory clearing
[ ] Ones not using a & (hence a copy constructor). There is a good few in configuration.cpp
[ ] Ones returning a wxArrayString instead of taking it as a reference parameter
[ ] Proper character-sets to use for po files.
[X] 4byte magic number for Handspring (see plucker-dev list patch to the Pascal conduit).
--->Also fixed the 01 80 problem when finding a list of users.
[X] Full resources in Makefile.in so know what to copy to system directory.
[X] Plucker team translations to po files, or a notice about it.
//----------------------------------------------------------------------------------------
// Source code formatting
//----------------------------------------------------------------------------------------
[X] Main frame should load from XRC (see my new wx/contrib/samples/xrc/demo).
[ ] The install_file_by_username (convenience function to install_files_by_username)
should be moved out of the derived classes and into the base class.
[ ] Consider a listctrl instead of a listbox for the progress dialog, so that don't
have the 2000 lines barrrier.
---->Ask if this limitation is still in GtK 2.0.
---->Use a virtual listctrl. With that there is an infinite upper limit since the
data isn't actually in the control, the application just serves on demand.
You can have a million rows.
---->While there, implement "IRC-like" scrolling, where it will autoscroll if
you are at the bottom, if you scroll up a bit, though, it stays at where
you put it. There is a wxListCtrl::ScrollList() function.
[ ] Progress dialog Try an onshow again instead of an on paint.
-->Onhold, since GTK doesn't have an OnShow() yet.
[ ] Doxygenate.
[X] Publics
[ ] Anything else useful.
[ ] To save space, use "event." used in events instead of another XRCID (see main_frame.cpp).
[ ] Add DECLARE_DYNAMIC_CLASS macros to rest of classes where possible.
[ ] Save a bit of space too by a utils_controls:: to read a config key into the hhictrl,
and write it out, as it is repeated in both the channel_dialog.cpp and the
destinations_wizardpage.cpp
[ ] Change rest of true and false to TRUE and FALSE, for older compilers that don't have a
built-in bool type.
[ ] Better makefile to generate/merge the po files.
[ ] Makefile should copy over the authors and GPL files (and PluckerDesktop.tex) from
the main CVS tree locations.
[ ] Add #error messages to setup.h to send a message for things that don't make sense
such as turning on setupUSE_MSW_DIALOG_TASKBAR_ICON on Linux.
[ ] Put a -v switch on the mo file's msgfmt command so can monitor any abnormalities in
the input file that would cause failure to generate a mo file (such as invalid header).
[ ] Standardize variable names involving parts of a filename / path:
|<-------------------------------------fullname----------------------------------------->|
|<----------------------path--------------------------------->|<--------filename---------|
|<-volume->|<----------------nondrivepath------------------->|<-basename->|<-extension->|
|<-------------rootpath----------------->|<---subdirectory--->|
Example: C:\projects\plucker\readme.txt
Fullname = C:\projects\plucker\readme.txt
Path = C:\projects\plucker (note no trailing slash)
Filename = readme.txt
Basename = readme
Extension = txt
Rootpath = C:\projects (note no trailing slash)
Subdirectory = plucker
Volume = C: (or C:\)?
Use term subdirectory when talking about a group of known directories inside another
for example, the channel subdirectories inside the /channels folder.
Drive and nondrivepath shouldn't ever be needed.
[ ] channel_type.cpp and plucker_controller::add_channel(): perhaps have the initial
illegal value for the strings to be "-1" in quotes?
[ ] Move external functions into static classes:
[ ] configuration.cpp (query first how that will fit in with whole ).
[-] Strip out the icons_dnd from CVS and source if never making Plucker a drop
_Source_ (not just a drop target).
[X] drop source
[ ] icons (will probably leave in for later).
Perhaps put the code in utils_clipboard that takes an argument of a window and
exportable string, so can recycle the code among different windows/apps.
[X] read_user_dat() function in palm_installer.cpp could be prettier.
[ ] Reserved sections: to a wxString[] instead? Should be a member variable of
configuration class anyways. Beware though of wxString as a member: easy to memory
trash, since goes out of scope easy.
[ ] In configuration/pluckercontroller, check that the_configuration->HasGroup[] before
try to copy or delete a section.
--->Think these are done. But double check.
[ ] & and const where appropriate in argument lists.
[ ] Consider use of tokenizer functions in utils_string::string_to_array_int() and
related..
[ ] Better handling of translation selection, autogeneration of a selection list from
the /langs directory.
//----------------------------------------------------------------------------------------
// wxWindows patches TODO:
//----------------------------------------------------------------------------------------
[ ] Why does multiple wx apps bundle on top of each other in the KDE Kicker panel
(eg Plucker Desktop and poEdit)?
[ ] Tooltips are in incorrect character set in translation (on MSW anyways).
[ ] MSW on a wxShell() the app's window doesn't return the focus after the console
application has finished.
[ ] Addition of accessor to set the color of a wxSplitterWindow sash from black to
something else.
[ ] Tex2RTF: should obey sections for the names of anchors, so that can have a
multiple language support mechanism for same program calls to help, but different
translated help files.
[ ] wxDateTime::FromGMT() (the opposite of wxDateTime::ToGMT).
[ ] wxDateTime Parse W3C Date (and addition of Read to the wxFileConfig() ).
[ ] wxMSW: wxMultipleChoiceDialog erroneously selects the first item always, when loaded.
(Note: this is likely a Win95 bug, not wx, works correctly on Win2000).
-->Not relevant if go to a wxListCtrl based one anyways.
[ ] Generic: Color dialog: the "add to custom colors" doesn't work as expected.
[ ] Busy info dialog less flat.
//----------------------------------------------------------------------------------------
// wxWindows bugs, that have already been updated in their CVS:
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
// wxWindows known limitations, that are there because trivial (All Platforms):
//----------------------------------------------------------------------------------------
[-] Can't download a channel preview or showcase listing from the shared virtual servers
For example:
http://www.afflatus.com/rob.md/projects/plucker/showcase/plucker_showcase.htm
will download, but
http://www.rob.md/projects/plucker/showcase/plucker_showcase.htm
will not, since not HTTP 1.1. Workaround for this was on a wx mailing list
(send a header with the domain).
[-] Non 16-color images will be drawn in incorrect palettes on 256 color systems. Shown
fine once pump up the color-depth.
//----------------------------------------------------------------------------------------
// Plucker Desktop known limitations
//----------------------------------------------------------------------------------------
[-] Unknown whether mixed case protocols are found, such as fIlE:// or plUckER:/.
configuration.cpp: the conversion of a protocol filename to a regular one.
[-] In .ini file, only 1 and 0 are supported booleans, not TRUE or FALSE strings.
[-] If update period is monthly, and set to update on the 29/30/31 of the month, then will
move to last day of month and then stay there to the shortest day of month hit.
For example, if Update monthly, with base date of Jan31, then next month will be Feb28,
Then next month will be Mar28. Reason is that only increasing month from last due date,
and can't store a feb31.
[-] Can't use a ; (semicolon) in a Sync username, since that is what is used to separate
entries. This is also true in other things like category, etc.
[-] Exclusion dialog: if on the extensions tab, and you insert a http:// exclusion, it
will appear in the file blocks, until the dialog is closed and you reopen it, and
it will have moved to URLs tab. This is because everything is in one file. They
are just sorted into one tab or the other on loadup for clarity.