Warning, /office/calligra/sheets/TODO is written in an unsupported language. File is not indexed.

0001 This file describes the tasks at hand for making Calligra Sheets a better product.
0002 
0003 Legend
0004 ======
0005 
0006 Status field
0007 
0008 ----    No work has been done on this (sub)task yet.
0009 DONE    Task is all done
0010 done    This subtask is done
0011 ****    This (sub)task cannot be fixed with the current technology.
0012         It has to wait until something in the internals is fixed.
0013 
0014 Prio field
0015 
0016 S       Involves string changes.  Must be done before the freeze.
0017 1       Important task.  Should definitely be fixed.
0018 2       Semi-important task.  Should be fixed if possible, but can be
0019         moved to the next release if necessary.
0020 3       Nice to have.  Should be fixed if there is time. (yeah, right)
0021 
0022 
0023 
0024 BUGS
0025 ====
0026  ---    Painting shapes in RTL layouted sheet is still broken.
0027  ---    Printing shapes is broken.
0028  ---    AutoFormatCommand does not redo() properly.
0029  ---    Undo of "Subtotals..." action crashes.
0030 
0031 
0032 
0033 
0034 Things to do after the release of Calligra 2.0
0035 =============================================
0036 
0037 Item                                                                            Prio    Status
0038 ----------------------------------------------------------------------------------------------
0039 
0040 * Overhaul/Redesign dialogs:
0041   - "Conditional Styles...": port to .ui file(s); use QTableWidget;             3       ----
0042     allow more than three conditions; list all cell ranges holding a condition,
0043     that intersect the cell selection; display the cell range in an extra column
0044     in the list; allow to choose between those cell ranges and the current cell
0045     selection; if there are no stored condtions yet or the only stored one's
0046     range matches the cell selection, hide the list's cell range column; extend
0047     the conditions to allow cell content text length comparisons and formulas;
0048     'Reset' button to restore conditions; 'Clear'/'Defaults' button to clear all
0049     intersecting conditions or just the selected part of them (obsoletes 'Remove
0050     Conditional Styles' action); rename to just "Conditional Styles..."
0051   - "Validity...": same as for "Conditional Styles..."; move the error message
0052     and information panel into the list by using KExtenableItemDelegate
0053   - "Named Areas...": port to .ui file(s); use QTableWidget; move the cell range
0054     display into the list editable with a RegionSelector; remove the ability to
0055     select a named area by moving this functionality into the "Bookmarks" menu
0056   - "Custom Lists...": port to .ui file(s); use QListWidget; display as is, but
0057     edit with KTextEdit (one item per row); find a common place for storing
0058     the (pre-)defined lists (maybe store them all in the config file; if a
0059     predefined list gets removed, one can restore it by pressing "Defaults");
0060     the lists are used by the sort dialog and for auto-filling
0061   - "Insert Comment...": 'Reset' button to restore former comment after editing;
0062     'Clear'/'Defaults' button to remove comment (obsoletes 'Remove Comment'
0063     action); rename to just "Comment..."; range-based: put the cell ranges into
0064     the list as planned for "Conditional Styles..."?
0065   - "Insert Link...": same as for "Insert Comment...", if applicable
0066 
0067 * Source code organization                                                      3       ----
0068   - Move the .cpp/.h files in sheets/ to sheets/core/.
0069   - Move sheets/functions/ to sheets/plugins/functions/.
0070   - Move sheets/dialogs/ to sheets/ui/dialogs/.
0071   - Move sheets/commands/ to sheets/core/commands/.
0072 
0073 * User Interface                                                                1       ----
0074   - Add a 'Go' ('Navigation') menu to select the active sheet. Reuse the actions
0075     from the 'Navigation' toolbar and add a sheet list (use KSelectAction?).
0076     'View' -> 'Goto Cell' should be moved there, too.
0077   - 'Rename sheet', 'Duplicate sheet' are also missing in the menu. Move
0078     them into 'Edit' -> 'Sheet'?
0079   - 'Auto-Fill' (selection change with size grip) is missing in the menu.
0080   - Improve conformance to the standard menu layout:
0081     `kde4-config --install config`/ui/ui_standards.rc
0082   - Figure out, if it's feasible to add a 'Bookmarks' menu that handles
0083     named areas.
0084   - Figure out, if the 'Insert' menu could be merged into the 'Data' menu
0085     and the 'Data' menu moved in front of the 'Format' menu.
0086   - Figure out, which 'Data' entries are 'Tools'. They are all affecting
0087     the data, but also they act like tools. E.g. inserting a comment
0088     is not tool-like, it's definitely belonging to the 'Data' menu.
0089   - Would a 'Document' menu containing cell, column, row and sheet related
0090     actions be a sensible choice?
0091     'Document': actions, that act on the document (map/sheet) structure
0092     'Data': actions, that insert new data or remove data
0093     'Format': actions, that act on the visualization of existing data
0094     'Tools': actions, that manipulate existing data
0095     'Edit': difference to 'Data'? only standard editing actions?
0096   - Alternatives to 'Document':
0097     'Layout', 'Design', 'Structure', 'Scheme'
0098     two menus: 'Workbook' and 'Sheet', 'Table'
0099   - disable sub-menu entries, if all of their actions are disabled (KDElibs!)
0100 
0101 * Inform the user about unreachable/unsupported document data on loading.       1       ----
0102 
0103 * Load/Save of embedded objects for the old XML format                          1       ----
0104   see KSPREAD_KOPART_EMBEDDING
0105 
0106 * Copy shapes on copying sheet                                                  1       ----
0107   see KSPREAD_WIP_COPY_SHEET_(SHAPES)
0108 
0109 * Loading of old document attributes.                                           1       ----
0110   see KOXML_USE_QDOM
0111 
0112 * Check, if the DTD of the old XML format is up to date.                        2       ----
0113   Specifically, the border handling (see Sheet::convertObscuringBorders()).
0114   Implement conditional style saving for 1.1, 1.2 syntax.
0115 
0116 * User Interaction:                                                             2       ----
0117   The canvas does not react on context menu key events.
0118 
0119 * Loading/Saving of unreachable (e.g. rows > KS_rowMax) document data.          2       ----
0120 
0121 * Commands
0122   Undo of cell border setting does not restore the border of the adjacent cell. 2       ----
0123   see KSPREAD_WIP_STYLE_BORDER
0124 
0125 * User Interaction:                                                             2       ----
0126   Check, if the edit widget in the CellTool acts like the EditWidget before.
0127   see KSPREAD_DISCARD_FORMULA_BAR
0128 
0129 * User Interaction                                                              3       ----
0130   Implement a completion aware KTextEdit. (see Editors.cpp)
0131   see KSPREAD_COMPLETION_MODE_SETTING
0132 
0133 * Commands                                                                      3       ----
0134   CellStorage: Replace CellStorageUndoData* by a QStack<CellStorageUndoData>,
0135   so that cascaded undo recordings become possible.
0136 
0137 * Style-/RectStorage: Check, if QSharedPointer can be used instead of           3       ----
0138   Q(Explicitly)SharedDataPointer. This would automagically remove unused
0139   pointers/data.
0140 
0141 * SpellCheck: Save the ignored words to document.                               3       ----
0142   Doc::addIgnoreWord() et al.
0143 
0144 * D-Bus support                                                                 3       ----
0145   Some old DCOP code parts were not converted yet.
0146 
0147 * User Interaction:                                                             3       ----
0148   Implement a drag indicator. If possible in DragAndDropStrategy, but this
0149   needs KoInteractionTool/-Strategy to handle dragMove-/dropEvents.
0150   see KSPREAD_WIP_DRAG_REFERENCE_SELECTION
0151 
0152 * Thread support                                                                3       ----
0153   Move the dependency calculation and cell recalculation into a separate
0154   thread. In a first step the data manipulating actions should be disabled
0155   while running the cell recalculation. These actions could also become
0156   threaded later on. And as a final step, only actions acting on the
0157   affected cell ranges should be disabled, so the user can continue his/her
0158   work in other parts of the document.
0159 
0160 * Databases                                                                     3       ----
0161   Currently Database is used solely for the autofilter functionality.
0162   Generalize it: Rewrite the filter code, so that Database carries a data
0163   model. Such a generic data providing class will allow to add data imports of
0164   any textual kind.
0165   The OpenDocument spec urges to implement database queries, sorting and
0166   subtotal implementation this way.
0167 
0168 * Page View Mode                                                                3       ----
0169   Add a page view mode. This would be a more intuitive way to see the printing
0170   layout. The pages should be based on KoShapeContainer, so that the TableShape
0171   becomes a child of it and can rely on its dimension to layout the table
0172   pages.
0173   The column/row header have to be adjusted to be usable with the table shape.
0174   Or new, specialised classes take care of this.
0175 
0176 * Source-/TargetRange concept                                                   3       ----
0177   Currently, cell ranges, which data is exported, are called Binding. The
0178   opposite, cell ranges, that contain imported data, are called Database.
0179 
0180   Binding's only tasks are to track the movement of the range and to inform
0181   about value changes. To achieve this it contains a data model, which is used
0182   by those who want to work with the range's data. Nothing more; very
0183   minimalistic, very generic. The term SourceRange fits well here.
0184 
0185   Database, on the other hand, is more specialised, even if the filter code
0186   gets rewritten, so that Database contains a data model. That's because it
0187   was developed according to the database range in the OpenDocument spec and
0188   this consists of more than just a target range. For the case of filters or
0189   sorting, such a database always has got a source and optionally a target
0190   range, where the filtered or sorted output gets written to. Because of that
0191   the stored range should be separated from Database and named TargetRange.
0192 
0193   TargetRange will contain a data model, like SourceRange fka. Binding does,
0194   but retrieves data from it instead of feeding data to it. Additionally,
0195   both, SourceRange and TargetRange need a method delivering the current cell
0196   region name, because the range can be moved due to column/row/cell range
0197   insertions/removals.
0198 
0199   External apps or shapes or internal objects should work with an abstract
0200   interface, that provides the model and the cell region name, instead of
0201   directly working with the data model. E.g. KoChart needs the correct cell
0202   region names in the dialogs even after the source ranges have moved.
0203 
0204   Same should be true for the Database's target range, even though the
0205   OpenDocument spec does not distinguish between absolute and relative
0206   addresses. My interpretation is that this means the cell ranges are fixed.
0207   (e.g. OpenDocument v1.1, 8.7.1 Table Filters, Table Range Address: "A differ-
0208   entiation between absolute and relative addresses is not possible. Therefore,
0209   a table name has to exist in the address and dollar signs are ignored.")
0210   OpenOffice does allow their movement though; an autofilter moves there.
0211   Calligra Sheets should go the most generic way: allow range movements and allow
0212   to fix the ranges by dollar signs, even if these are ignored in the ODF in
0213   this case.
0214 
0215   Summary:
0216   1. Binding* becomes SourceRange*.
0217   2. Refactor Database, so that it refers to a TargetRangeModel.
0218   3. DatabaseStorage becomes TargetRangeStorage.
0219 
0220 * Port the editor's function auto-completion to KCompletion.                    3       ----
0221 
0222 * Implement a QValidator accepting cell locations, cell ranges and named areas. 3       ----
0223   Usable for LocationComboBox and RegionSelector.
0224 
0225 * Elaborate, if for the user input validation (Validity) a QValidator can be    3       ----
0226   used for the embedded/external editor.
0227 
0228 * Implement a PointStorage::Iterator, which iterates over the non-default data  3       ----
0229   in a cell range/region in horizontal or vertical direction.
0230 
0231 * Harmonize conditions for content validation, filters and conditional styles.  3       ----
0232      8.5.3 Table Cell Content Validations
0233             Condition ::= ExtendedTrueCondition | TrueFunction 'and' TrueCondition
0234             TrueFunction ::= cell-content-is-whole-number() | cell-content-is-decimal-number() | cell-content-is-date() | cell-content-is-time() | cell-content-is-text()
0235             ExtendedTrueCondition ::= ExtendedGetFunction | cell-content-text-length() Operator Value
0236             TrueCondition ::= GetFunction | cell-content() Operator Value
0237             GetFunction ::= cell-content-is-between(Value, Value) | cell- content-is-not-between(Value, Value)
0238             ExtendedGetFunction ::= cell-content-text-length-is-between(Value, Value) | cell-content-text-length-is-not-between(Value, Value) | cell-content-is-in-list( StringList )
0239             Operator ::= '<' | '>' | '<=' | '>=' | '=' | '!='
0240             Value ::= NumberValue | String | Formula
0241             StringList ::= StringList ';' String | String
0242             A Formula is a formula without an equals (=) sign at the beginning. See section 8.1.3 for
0243             more information.
0244             A String comprises one or more characters surrounded by quotation marks.
0245             A NumberValue is a whole or decimal number. It must not contain comma separators for
0246             numbers of 1000 or greater.
0247      8.7.4 Filter Condition
0248             match (matches)
0249             !match (does not match)
0250             In both case, the table:value attribute contains the regular expression that the table cells have
0251             to match or must not match.
0252             The relational operators that do not use regular expressions are:
0253             = (Equal to)
0254             != (Not equal to)
0255             < (Less than)
0256             > (Greater than)
0257             <= (Less than or equal to)
0258             >= (Greater than or equal to)
0259             In addition, operators “empty”, “!empty”, “bottom values”, “top values”, “bottom percent”, and “top
0260             percent” can be used. To filter for example the lowest and highest percentage values, the latter
0261             two operators can be used.
0262     14.1.1 Style Mappings (Conditional Styles)
0263             is-true-formula(formula)
0264             cell-content-is-between(value, value)
0265             cell-content-is-not-between(value, value)
0266             cell-content() operator value, where operator is one of; '<', '>', '<=', '>=',
0267             '=' or '!=', and value is a numberValue, a string or a formula.
0268             A numberValue is a whole or decimal number. The number cannot contain comma
0269             separators for numbers of 1000 or greater.
0270             A string comprises one or more characters surrounded by quotation marks.
0271             A formula is a formula (see 8.1.3) without the equals (=) sign at the beginning.
0272 
0273 * MapViewModel aka. ViewController (or CanvasController?)                       3       ----
0274     Inherit from QAbstractProxyModel with MapModel as source.
0275     Manages:
0276         - active sheet handling incl. sheet navigation ("Go" menu) and shape
0277           additions/removals
0278         - named areas ("Bookmarks" menu)
0279 
0280 * Modularization                                                                3       ----
0281     The goal is to make Calligra Sheets more modular. Functionality like cell content
0282     validation (Validity), source and target cell ranges for external data or
0283     named areas should become optional. Maybe even more like (conditional)
0284     styles, comments, cell fusions, etc, so that what's left is the bare
0285     minimum: user inputs, formulas and values (btw: all stored with
0286     PointStorage).
0287     [Point- and RectStorage could also become (low-level) plugins, in order to
0288     replace them more easily in the future. The storage plugins and the 'core'
0289     storages should then use these low-level plugins.]
0290     Plugin categories:
0291         - FunctionModule
0292             a set of functions
0293         - Tool
0294             cell tool derivative, that works with Selection; should leave actions from other tools
0295             working with Selection activated; viewers do not need editing tools
0296         - Storage
0297             viewers do not need all of them, e.g. cell content validation or cell range locks
0298         - Manager
0299         - (Dialog) [could be part of a tool]
0300             viewers do not need all of them
0301         - (Command) [could be part of a tool]
0302             not needed by viewers
0303         - (Feature) [could also be achieved with plugin dependencies]
0304             combines other categories, e.g. loads a storage, dialog and command for cell content
0305             validation
0306     Steps to go:
0307     - Extract an interface for RectStorages (or even better for both, Point-
0308       and RectStorage) based on QAbstractItemModel.
0309     - Refactor CellStorage to load storage plugins.
0310     - Combine these plugins with the neccessary dialogs/commands acting on the
0311       cell selection (they could all be placed in one shared object/library, if
0312       each plugin (storage/dialog/command) gets a corresponding .desktop file).
0313     - Some extra logic needs to be hard-coded into 'core', e.g. the check
0314       whether the user input fulfills the restrictions set by Validity. Those
0315       could hopefully be coded with the help of Qt's model system (item data
0316       roles). If not, extra interfaces have to be defined, at least for
0317       non-standard, non-Qt types.
0318 
0319 * Convert actions to CellTool/KPart plugins:                                    3       ----
0320     - "Consolidate..."
0321     - "Goal Seek..."
0322     - "Subtotals..."
0323     - "Text to Columns..."
0324     - "Validity..."
0325 
0326 
0327 Things to do before the release of Calligra 2.0
0328 ==============================================
0329 
0330 Item                                                               Prio Status
0331 ------------------------------------------------------------------------------
0332 
0333 Regressions
0334 -----------
0335 
0336 General bugs
0337 ------------
0338 * Autofill                                                            3 ----
0339   Fix the 'May'-may-be-a-short-or-long-month issue.
0340 
0341 Filter bugs
0342 -----------
0343 
0344 Things not in bugzilla
0345 ----------------------
0346 
0347 * Printing
0348   + Repeated rows and columns don't work if they don't start from     2 ----
0349     row/column 1.   Also it is not possible to enter just one
0350     row/column into the dialog, it always has to be a range (2:3).
0351   + Insert manual page break                                          2 done
0352   + If the used increases(/decreases) and the print settings are      2 ----
0353     configured to have page limits, trigger an update. The
0354     calculation of the zoom factor for page limits is an expensive
0355     operation. Better move it into an own thread first.
0356   + Expand selection to page                                          3 ----
0357   + Fit selection to page                                             3 done
0358     Use page limits of one page in each direction and print just the
0359     selection.
0360   + Multiline headers/footers                                         3 ----
0361 
0362 * OpenDocument file format
0363   - see TODO.opendocument                                             1 ----
0364 
0365 * OpenFormula compliance (Medium group)
0366   - implement all functions of the Small and Medium group             1 ----
0367     see calligra/sheets/functions/TODO
0368   - implement the calculation settings                                1 ----
0369     see section 8.5.2 in [1] and section 3.3 in [2]
0370 
0371 * Flake integration.
0372   + Cell anchoring                                                    1 ----
0373     - Saving                                                            ----
0374       Query the shape container of the sheet before iterating over
0375       the cells. Store the shapes anchored in cells in a QHash. Put
0376       that into a saving context and pass it to the cell saving
0377       methods. Write out the shape at the appropriate place.
0378     - Interaction                                                       ----
0379       Shapes anchored cells should be moved, if the cell itself
0380       got moved; either by column/row/cell range insertions/deletions
0381       or by column/row dimension changes.
0382 
0383 * Internals (See also DESIGN.html)
0384   + Cell Storage                                                      1 ----
0385     - (Re-)Adjust the saving algos to use the new (old) iteration       ----
0386       functionality.
0387     - Rewrite the MergeManipulator to work directly on the CellStorage. ----
0388     - PointStorage: Implement setLoadingEnabled(bool) that switches     ----
0389       the insertion method to a mode in which the value, column and
0390       row are just appended to the vectors.
0391     - Point-/RectStorage: All yet stored data is implicitly shared.     ----
0392       Make use of this fact: Implement book-keeping with a hash and
0393       reuse the already stored values. This is already done in
0394       StyleStorage.
0395 
0396   + Style Storage                                                     1 ----
0397     This would dramatically reduce memory consumption and allows
0398     styles for empty cells.
0399     - Improve the saving.                                               ----
0400       Only StyleStorage::Private::usedArea should track the occupied
0401       cells only - not those of columns or rows. Adjust the saving algo
0402       appropriately.
0403     - Add configure option to choose whether the style of the current   ----
0404       or of the previous (default) column/row is used on insertion.
0405     - Launch the garbage collection in a separate thread.               ----
0406 
0407   + Rich text in cells.                                               1 ----
0408     - Use KoText.                                                       ----
0409       Add a RichTextStorage containing one(!) QTextDocument consisting
0410       of a sole table. This obsoletes LinkStorage. Plain text can still
0411       be stored in ValueStorage, but does not have to: unsure what's
0412       best in this case.
0413     - Background spell check (necessary to have rich text)              ----
0414 
0415   + Evaluation of how best to increase floating point precision.      3 ----
0416         Suggestion:  GnuMP.    (Tomas)
0417         This will work by converting all functions to compute using
0418         ValueCalc, and nothing else, then modifying Value* to
0419         support GnuMP.  The conversion step shall be done as a part
0420         of converting to the new parser.
0421 
0422 * GUI
0423   + Indent and multiline doesn't work together                        2 ----
0424   + RegionSelector                                                    2 ----
0425     - add syntax highlighting
0426     - intialize choice on focus in events, if necessary
0427     - fix the line edit height
0428     - implement single cell restriction (maybe in Selection)
0429     - jump back to parent dialog on closing the mini dialog
0430   + Scrollbar that supports jumping one row/column forward or back    2 ----
0431   + New dialog for conditional cell styles                            3 ----
0432     The dialog should allow to define a variable amount of
0433     conditional styles - not just three.
0434 
0435 * Formula/Value engine
0436   + DependencyManager / RecalcManager                                 3 ----
0437     - Port to a threaded approach.                                      ----
0438 
0439   + Matrix operations                                                 2 ----
0440     - Determinant                                                       done
0441     - Dimension                                                         ----
0442     - Inverse                                                           done
0443     - Minima/Maxima elements                                            ----
0444     - Multiply                                                          done
0445     - Norm                                                              ----
0446     - Rank                                                              ----
0447     - Transpose                                                         done
0448 
0449   + References to cells in other files                                2 ----
0450 
0451   + Tools->Auditing:                                                  2 ----
0452     - Trace Precedents                                                  ----
0453     - Trace Dependants                                                  ----
0454     - Trace Error                                                       ----
0455     - Remove all arrows                                                 ----
0456 
0457 
0458 * General features
0459   + Split view                                                        1 ----
0460   + "Freeze/Unfreeze Panes"                                           2 ----
0461   + Function optimizer ('Solver')                                     2 ----
0462     - evaluate, if we're able to use linear methods (derivatives!)      ----
0463     - evaluate, how to include side conditions                          ----
0464     - check whether the formula cell carries a valid formulas           ----
0465       and further checks of used cell contents
0466 
0467 
0468 * Major features (big effort)
0469   + Pivot tables                                                      3 ----
0470   + Scenarios                                                         3 ----
0471     See [1], section 8.3.3 for details.
0472 
0473 
0474 Other things: (please add the things you are working on!)
0475 
0476 
0477 Not yet sorted (will be entered into categories above)
0478 
0479 - Multiple Operations (in Excel: "Data"->"Table")
0480 - Insert widgets like buttons, drop down lists,... + having the possibily to
0481   define action if pressed, or selection changes,...
0482 - Button + Drop-Down-List support (within cells)
0483 - interface for mail merge
0484 - for formulas: fit precision so the result fits in the cell or resize the cell
0485 
0486 - changing text angle should resize the cell height automatically
0487 - support for format strings (dd/mm/yyyy)
0488 - more font attributes (outline, shadow,...) + attributes for parts of the text
0489 - double borders
0490 - better AutoFormat dialog + better templates
0491 
0492 - more "Related Functions" in function help/desc text
0493 - improve function compatibility with MS Excel
0494 - more information functions (Excel compatible)
0495 
0496 - enhance the Gnumeric import filter
0497 - sync the Gnumeric export filter
0498 - StarCalc/OpenCalc import filter
0499 - StarCalc/OpenCalc filter for embedding/embedded objects
0500 - StarCalc/OpenCalc export filter
0501 - dBASE export filter
0502 
0503 
0504 
0505 References:
0506 ===========
0507 [1]     Open Document Format for Office Applications (OpenDocument) v1.0,
0508         http://docs.oasis-open.org/office/v1.0
0509 [2]     Open Document Format for Office Applications (OpenDocument),
0510         Recalculated Formula (OpenFormula)
0511         http://www.oasis-open.org/committees/office