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