//----------------------------------------------------------------------------------------
// 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.22 2003/12/29 22:29:16 robertoconnor Exp $
//----------------------------------------------------------------------------------------

PRERELEASE:

[ ] InnoSetup writes value of PLUCKERHOME to the convert batch file (else just put 
    whole thing in registry. (Only bad part about DOS/full registry is that the black
    DOS box doesn't close on own (is there a command to close the DOS box?)
    DOS box has DOS-like filename also, though this does address the 31 character limit.

//----------------------------------------------------------------------------------------
// Priority 1
//----------------------------------------------------------------------------------------

[ ] MSW console progress won't work.

[ ] OSX update Card install location for MemoryStick.

[ ] Redo the update code to multiply the update jump, not loop. If update_base is 1940,
    then will appear to hang while looping all the way up to 2003.

[ ] Do something with the style tags on the toolbar for GTK.

[ ] Hide the unused parts of the handheld_dest_dialog/hhictrl. Set columns to zero on the 
    pda_listctrl, and make the widgets invisible on the handheld_dest_dialog.

[ ] OSX handle a "Quit" command from Dock if there is modal dialogs (this goes along
    with MSW computer shutdown request when modals are visible). 

[ ] Rename configuration.cpp's copy_section2 to copy_section, replacing the existing
    copy_section code wherever it is used.

[ ] Mac shell will now launch a commandline version.

[ ] plkrOS_DIR_SEPARATOR replaced with '/' since ':' not used by commandline Mac OS. 
    [ ] Remove MSW ones too if okay, and remove the define. 
    [X] Removed common ones.

[ ] Extra menuitem separators get stripped after moving or compiling out certain
    features.

[ ] Config setting to only show certain viewers (or viewers that are installed)

[ ] wxWindows MSW bug (in CVS but not 2.4.0) in which selecting a channel
    (mouse down the channel name or date in main_listctrl) and dragging it would cause
    crash. Only happens on older versions, like Win95, (not 2000, etc). Related to
    comctrl.dll versions.

//----------------------------------------------------------------------------------------
// 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 OK buttons on dialogs should be the defaults (pulsate blue on OSX).

[ ] Translations should have %s for replaceable bits, for languages that have different 
    syntax.

[ ] 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.

[ ] On OSX, showing startup tips at startup on OSX in which:
    - Shows tips, then click close.
    - After click close, crash.
    - Doesn't crash if show the tips via the menu.
    - The code is currently commented out while think about this.

[ ] 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. However, a bug was found in this new call in wx2.4.0 
    so later.

[ ] 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

[ ] Add subject and message body to email dialog in editor.

[/] 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:
//----------------------------------------------------------------------------------------

[ ] wxMac wxCalendarCtrl:
    - Selected dates don't highlight.
    - It returns the day after the clicked date.
    - The year portion is truncated.

[ ] wxMac wxSpinCtrl:
    - The value for the spin control on scheduling page gets reported as zero,
      unless I spin it again.

[ ] wxMac wxShell:
    - Does this work?

[ ] wxMac wxTreeCtrl:
    - A single click on the side arrow should expand a root, not just a double click.

[ ] 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.













