conceptual operational class structure
======================================

moonshine---|---navigator...
            |---brew...
            |---captured commands...

navigator-----|---tab window---|---project
              |---menubar      |---module
              |---toolbar      |---root
              |---statusbar
              |---open with dialog
              |---project dialog
              |---about
              |---visible file attributes

brew---|---color text widget---|---syntax highlighting
       |---menubar             |---search replace
       |---toolbar             |---undo redo
       |---statusbar           |---macros

captured commands--|---color text widget...
                   |---toolbar
                   |---history list
                   |---command window


to do list
==========

__ understand and mark executable files as such in navigator



Ideas
=====

Not all of these are to be implemented.  This is simply a list of everything 
anyone has thought of that we know about

?  Ideas
__ to be implemented



General Ideas
-------------
The ability to download and install the latest version of moonshine automatically
The ability to download and intall new or updated modules or syntaxes

__ 


navigator
---------

?  reload the active module on refresh

?  (un)install modules from navigator

__ abstract all file system specific code into a moonFile class so that support
   for alternate fs can be dropped in (archives, ftp, etc)

?  add virtual folders to navigator, based on file types, so that a group of
   file types can be expanded/collapsed and so that operations can be done 
   on all of those files

__ allow multiple projects to be open at once using a tabbed window

?  put the active action menu on the main menu

__ add a toolbar to navigator

__ allow font and color to be specified for navigator

?  always add a 'module' folder to navigator for each project that displays 
   the module, its includes, pixmaps, and anything in moules/bin referenced

__ reloading of the last loaded project file on open

__ customizable tool bar

__ print

?  Support for PgUp/PgDown, Insert/Delete, Home/End

__ Renaming of a file in the list view should rename it in any open brew editor
   as well

-- remember what brews are open and optionally reopn them when a project reopens

-- Hot key to reload the current project.

-- Allow a module option to specify the type name for directories and 
   executables.


captured commands window
------------------------

__ allow commands to be attached to buttons

__ add a one line command input window

?  stay at the bottom only when AT the bottom

__ a method for capture dialog to parse the output of command, such as for 
   finding file name and line number pairs then invoking or updating brew
   
__ command-specific syntax highlighting

__ Ability to run a shell inside of window.  Like an xterm.


project
-------

__ allow the definition of project commands to be added to the project menu
   these would operate out of the root folder

__ allow a project to add a file-specific action block to be added to the bottom of 
   the right-click menu for that file.

__ allow project to specify HIDE FILES and HIDE DIRECTORIES

?  allow multiple root folders to be specified for a project

?  commands to run when a project is opened


module
------

?  allow captured and system commands to request run-time completion.  This 
   would invoke a dialog similar to the print dialog   

?  enhance/update module command syntax as follows
   name, pixmap, captured/builtin, foreach source, command

?  allow conditional inclusion of actions for folders based on the existance
   of a specified file type in the folder.  for example:
   (contains Imakefile) name, pixmap, captured/builtin, command

__ allow before/after hooks to be specified for builtins such as open, save, 
   new file/folder, import
   
__ allow more variables in commands, such as:
   %d - the folder containing the selected item
   %f - synonym for %s
   %r - the root folder 
   
   $saveas - 'get new file name' dialog
   $openfile - 'get existing file name' dialog
   $openfolder - 'get existing folder name' dialog

__ a module parameter (such as %e) that expands to the list of visible files 
   (those not hidden via 'hide files' and are not inside a collapsed folder.  a
   command that gets executed when this list changes
  
__ allow the specification of directory types

?  allow more complete scripting within modules

__ allow directives such as #include and #define to be used to include an external file

?  support line continuation in modules

__ add support for module-controlled navigator columns.  captured output
   of a specified command will specify a pixmap name and/or text to display

__ allow a <root> action block; these will be added to the bottom of the root
   folder's normal <directory> action block
   
__ Break syntax highlighting out into its own file and reference that file in 
   the module.
   
__ allow actions to define more than one command, separated by semicolons.  this includes
   mixing builtin commands anywhere in the list of commands

?  the ability to build one module on another.  this would be more than a simple
   #include becuase duplicate action blocks would be merged into a single block
   


brew
----

__ keyword completion on keystroke

__ context sensitive right click menus for keywords

__ distribute a brew executable?  make this a brew server like NEdit's nc?
   
__ exclusive block syntax highlighting

__ allowing syntaxes to set the background color for matched text.

__ replay a macro a set number of times

?  line numbers to the left of the lines (very vi like) in brew

__ drag-n-drop text replacement

__ the ability to highlight blocks of text and move them en mass
   forward with a key such as tab (this would be great for re-indenting code when you 
   put that extra for loop around it later because you forgot it or are upgrading
   the code)

__ a 'Select All' menu option

__ Read DOS files and ignore carrage returns in them.

__ Some sort of goto function to find the start of functions (language 
   independant?)
   
__ A builtin macro language that can be referenced in modules.

__ Allow the user to customize the accellator keys for menus.

__ A generic data dictionary for variables or other keyword that hold meaning
   across multiple files.
   
__ Make the search and replace linked lists static so that all brews reference
   the same history list of searches or replaces.
   
__ Store the search and replace history to a file and restore on opening.

__ Save open brew windows when a project closes and restore them when it is
   reopened.
   
__ Close all open brews when a project is closed.

__ Store in the project a list of files that were open in brew when the project
   was last closed and relaunch them the next time the project is opened.
   
__ Save selected text into a new file.

__ Shift+Ctrl+F Shift+Ctrl+G to extend the selection on searches.

__ Allow brew to store multiple open files in a single editor window.

__ Have brew poll the file it has open to see if the write status has changed.

__ Combine syntax highlighting position list, text array, and word wrapping
   list into one contents list.
   
__ Allow the user to configure the control key sequences.

__ Keep the search dialog on the screen.  (make an option)

?  an option that can be enabled/disabled that will prompy the user to save 
   preferences or not on brew close
   
