From The Document Foundation Wiki
Jump to navigation Jump to search

Adding a new feature

If you're adding a completely new feature, here is a checklist:

  • Document model: extend the relevant SwFoo class or SfxPoolItem, etc.
  • UNO API: start with (the document model and) this or with the UI, so that you can test the read/write of the document model
  • Layout: let the layout paint something according to the document model
  • Filters: at least update the ODF filter, if it makes sense, then updating DOCX/DOC/RTF/etc is also welcome
  • Tests: at least add a test to the odfexport testsuite, see here for details
  • UI: so that users can create a document taking advantage of your new feature just by clicking around
  • Documentation: update help.git, so when users hit F1 (on the new dialog on the UI, or so), the upcoming help page contains something relevant about your new feature
  • Specification: if you had to extend ODF, see here

Code pointers

Selection overlay

  • The selection overlay is a set of rectangles, SwSelPaintRects::Show() does the painting.
  • SwSelPaintRects is inheriting from an std::vector; SwRootFrm::CalcFrmRects() calculates that vector of rectangles. (For tables, it's SwShellTableCrsr::FillRects().)

Undo / Redo

  • SwUndoRenameBookmark is a small, self-contained example on how to add undo/redo support for something


See here for rationale. Currently the following UNO objects support this property:

  • OfficeDocument (document-level props, used for docx theme.xml)
  • Shapes (used for docx smartart)
  • Writer characters (CharInteropGrabBag)
  • Writer paragraphs (ParaInteropGrabBag)
  • Writer textframes (FrameInteropGrabBag)
  • Writer styles: paragraph, character and list (StyleInteropGrabBag)

Partially implemented features

Document model, UNO API, filters (ODT and DOCX) are implemented for these features. UI, layout and documentation are needed.