-*-outline-*-

Gnumeric Spread Sheet task list

* Workbook
   Have a new "manager" file that will take over the details of open
   workbooks and active servers, instead of the current approach we
   use to have this management in the workbook.c file

* Component

   Make sheet_selection_changed_hook execute a list of hooks 
   Remove the hard-coded workbook hooks from the sheet.
   Initialize the hooks on the workbook_new routine.

   The model is somewhat broken.  sheet_new creates a sheet_view by
   default. 

   I think we need something like: workbook_new and workbook_view_new
   to split this sort of thing.

* Cell editing

   * Support for entering multi-line cells, and <Alt-Enter> adding an
     embedded newline.

   * Colouring a parsed formula for editing.

   * The mouse can select a range as the current argument while editing a
     formula without changing to a different cell.

   * Support selecting a range on a different sheet.

   * C-Insert: Copy, S-Insert: Paste, S-Delete: cut; test.

* Implement Even More Functions

    * AREAS and GETPIVOTDATA
    * AMORDEGRC, AMORLINC, COUPDAYBS, COUPDAYS, COUPDAYSNC, COUPNCD,
      COUPNUM, COUPPCD, CUMIPMT, CUMPRINC, MDURATION, MIRR, ODDFPRICE,
      ODDFYIELD, ODDLPRICE, ODDLYIELD, PRICE, VDB, YIELD, YIELDDISC,
      and YIELDMAT.

* Fix the Following Functions

    * INDEX, MATCH, VLOOKUP, and LOOKUP

* Printing
  * Preview
    * Stroke support for zoom etc.
  * Print setup: 
    * Options buttons
    * Improve layout 
    * Provide GUI for margin editing.
    * Provide preview of the headers/footers
    * Make sure scaling works.
  * Add the missing options to the Print Dialog
  * Display printing status (pages to go).
  * Add column/row title printing
  * patterns.

* Font dialog

  * Get the list of *valid* fonts from GnomePrint
  * Create a simplistic dialog (to map to font-bold yes/no).

* Cell dimension computation is broken on font change for multi-lines.

* Number formatting

   The formatting code should take the current GtkFont for the cell
   being formatted as well as the width allowed and take this into
   account to render the number as well as possible given the space so
   that for small regions, numbers in scientific notation are displayed.

   - '*' does not work
   - 'General' is rather stupid.  It needs to take the size of the cell into account.

    FIXME : The formating is still incomplete.
	  - It does not support seconds fractions.
	  - It incorrectly accepts mmm:ss as some sort of minute spec.
	  - Add/remove decimal buttons on the toolbar are screwed for
	    items with different formats formegatives.
	  - There is too much replicated code for generating formats
	    and recognizing them in the format dialog.

    TODO :
	  - Too much parsing is taking place when formating.  We should
	    have set all that up beforehand when the format was parsed.
	    A methodology similar to that used by the regexp compiler should
	    be used.

* Sheet

   Should be possible to bind a name by typing the name on the
   region box and applying it to the selection
   
** Column sizes

   Columns should have an "auto-grow-up-to-this-point" feature.  Beyond that
   size, it would truncate as it does now.

** Parser
   * Improve error reporting.

** Cell data entry:
   double click on cell allows editing as in main editing box.

   double click on the magic little copy box fills the current
   column to the depth of the column to the left ??

** Headers for Columns and Rows

   The captions should be customizable, ie instead of "A1", it should
   be possible to display "Sales".  We can use this with Michael's
   name support. 

** Captions (ItemBar)

   It should be possible to set the dimensions of the cols, rows to
   contain information as "min_points", "max_points".  

   Interesting side effect: min_points == max_points means "fixed". 

* Auditing
   Write the sheet auditing code.

* Searching

   Searching text on the spreadsheet.

* EDITING

** Object Clipboard
   If sheet->mode is OBJECT_SELECTED cut/copy/paste should operate on
   the object.

   Object properties.

** Paste special 

  needs some little changes:
  - When formulas are pasted with an operation,
    the new ExprTree should be created with the operation.

** Style

  Protection:
    Bloqued/Hidden

* File Load/Save

  * Support for popular formats.  
    I have the specs for the XS3 format.  SC should be
    trivial to support as well (from the guile sources)

  * Applix, star office, kspread ?

  * Add "hints" to the file save routine based on the registered
    formats.

  * Supply default extension to use with a write operation
  * Improve error handling and display in file_read routines.
  * Add ability to send warnings, and progress while loading.

* Display Engine
  * drawing double line borders is broken
  * merged cells.
  * Continue cleaning cursor code.
  * Rework borders to agregate the lines and draw them after backgrounds

* Unicode support throughout

* Workbooks:
    * Consider addition of a cursor warping operation to jump between
      open workbooks.

** Notebook:

   Clicking on it chooses it		(DONE)
   Double clicking changes the name	(DONE)
   Right clicking gets:
     insert				(DONE)
     delete				(DONE)
     rename				(DONE)
     reorder				(DONE)
     copy		*(TODO)

 - Decrease flicker when paging between sheets.
 - Enable capability to select multiple sheets.

* Sheet Objects

  * Load / save, print of all objects + Bonobo objects.

* Office compatibility

Write an XML plugin to output 'Publish as Web' style XML for
Office 2000 and 'explorer' compatibility.

* Internals

  * Hack R[-1]C[3] type references fully into the parser.

* Internals

   Our current setup is *slow*.

   When filling large regions (ie, select, enter data, control-enter),
   we are taking ages.  In those cases, we could probably:

      1. Preallocate all cells.
      2. Pre-parse formulas
      3. Pre-render contents.

   struct _Cell should be optimized with a typed union; merge
   text, entered_text. Think about width, height, render_color
   merge flags + generation + move comments to a parallel hash.
   Use Memchunks for allocation of many things.

* Rendering

  * Sort out the cell span stuff
    * Have a 'merged cell' structure that can be overridden
    * have a 'user-set' feature for 'merge cells'

* Calculation

  * Rework 'Name' dependencies so we can re-express names.

  * Dependancies for - CELL, INDIRECT functions.
		     - Sheet objects

  * Teach dependencies about implicit intersections
    ( big speedup (assesed2.xls))

  * Rethink 'generation' mechanism.  It currently forces all cells to
    be recalculated when the value of any of them change.
    ie
	a1 : sum (b2:c3)
	changing b2 bumps the generation of the workbook.
	All 4 cells b2,b3,c2,c3 get recalculated even though
	only b2 needed it.

	Functions taking ranges as arguments are forced to do their own
	recalc checking for elements of the range.  They cheat and use
	the generation to test for recalc.  This is wrong!  It should be sufficent
	to only manually recalc a cell that has its recalc flag set.  However,
	in order to support that we need mark all cells that directly or indirectly
	depend on a cell as requiring recalc when a cell changes.

    * Implicit iteration.  For an array expression that returns scalar results
      which takes a range as a scalar argument, apply the expression to each element
      of the input range.

* Undo 
  * Commands to do
      - paste_cut
      - paste_copy
      - autofill
      - insert array.
  * Commands to link in
      - Row/Col resize.  The current linkage between itembar and sheet is odd.
        we seem to set the column size for the sheet several times.
  * Commands to fix
      - SetText.  The current scheme of popping the settext command produced
        before entering a non-singleton region is a kludge around to problem
	of why the top left cells value is changed in the first place.

* Make checks for inserting rows/cols more intelligent in the face of multiple
  selections.  Currently it just checks the first selected range for
  infiniteness we need to check all selected ranges.

* Excel Import
  * Localise sheet/workbook Name import,
  * Import names even if they arn't referenced.
  * Figure out the scaling and remove the hack to zoom.
  * The big SST re-write.

* Html export
  * Export style information for blank cells.

* Cell Changed
  * The graphics code uses a "cell has been modified" hook, and it
    scans the list of vectors for ranges that are covered, and need to
    be notified of changes.

    Needs to be optimized.

* Graphics component

  * Scatter plots are not being scaled to the dimensions of the allocated
    size for the graph inside the layout.

  * Stacked, and Stacked 100% are not working for line plots.

  * Need to support labels for categories (series)

  * Need to support list of series plotted (little box on the right)

  * Need to support all kinds of captions

  * Need to support axis drawing with all their features

  * Need to support pie-charts

  * Need to add 3D support

  * Need to add editing-facilities to each data plot type.

  * Need to provide menu/toolbar merging facilities with the graph component with 
    Gnumeric

  * Add printing support (not fun)

* Graphics Wizard

  * Need to high-light current graph type on the first page

  * Need to finish the wizard: manual data entry, better wizarding,

  * Need to split the wizard from the Gnumeric linking stage

* Gnumeric-side graph support

  * Need to save the settings for the plots.  Perhaps the wizard?

  * Need to restore the setting from the plots. 

  * Add component printing support.

* Sheet Object and Graphics support

  * Handle ownership of objects: from the wizard to the "finish"
    creation routine in the sheet-object.c code

  * Remove the sheet_object_set_type_full thing, and simplify the API
    everywhere by requiting the mode_data argument.
