Miklos Vajna 94e683b5e1 cool#11226 sw per-view redline on: fix bad record mode change on undo
Have 2 Writer views, enable recording for "this view", type a few
characters, undo. The recording is now enabled for all views, not just
this view.

The problem is that sw::DocumentRedlineManager::SetRedlineFlags_intern()
only gets flags, so in case UndoRedoRedlineGuard sets new temporary
flags & then restores those flags later, then that guard assumes that we
return to the old state, but it implicitly calls
SetRedlineFlags_intern() with 'bRecordAllViews = true', so the record
mode changes from "this view" to "all views" at the end.

Fix the problem by changing the RecordAllViews boolean to an enum and
introducing a "view agnostic" mode: here we don't care too much about
views, since these calls are typically just temporary, but what we care
is that 1) if they enable recording, then IsRedlineOn() reports true and
2) if they set new flags & later restore the old flags, the state is
unchanged.

Alternatives considered:
- It would be possible to just touch the model in the "view agnostic"
  case, but then IsRedlineOn() would still get the recording bool from
  the view, leading to a stack overflow: lcl_DoWithBreaks() ->
  sw::DocumentContentOperationsManager::DeleteAndJoinWithRedlineImpl() ->
  sw::DocumentRedlineManager::AppendRedline() ->
  sw::DocumentContentOperationsManager::DeleteAndJoin() ->
  lcl_DoWithBreaks() again.
- It would be possible to fix this on the undo side (to query the record
  mode and restore that mode explicitly when restoring flags), but we
  have many other use-cases for setting & restoring flags: e.g.
  autocorrect or autoformat.

Change-Id: I75697c6b5b3767ad8db899cda080be312eb6c821
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183792
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2025-04-07 17:38:54 +02:00
..
2025-04-04 13:07:06 +02:00
2024-11-28 12:38:02 +01:00
2024-11-28 12:38:02 +01:00
2024-12-22 22:41:19 +01:00

Spreadsheet Application Code

You can dump some information in a dbgutil build:

Shortcuts

CTRL+SHIFT+F12

Dumps the column width of the first 20 columns.

CTRL+SHIFT+F11

Dumps the graphic objects and their position and size in pixel.

CTRL+SHIFT+F6

Dumps the SfxItemSet representing the cell properties' of the current selection as a xml file. The file will be named dump.xml

The Cache Format

ScDocument::StoreTabToCache allows storing the content (not the formatting) of a table to a binary cache format.

The format is column orientated which allows quick serialization of the table.

  • Header:

    • Number of Columns: 64 bit unsigned integer
  • Column:

    • Column Index: 64 bit unsigned integer
    • Column Size: 64 bit unsigned integer
    • For each cell type block a new ColumnBlock
  • ColumnBlock:

    • Start Row: 64 bit unsigned integer
    • Block Size: 64 bit unsigned integer
    • Type: 8 bit unsigned integer
      • 0 : empty
      • 1 : numeric
        • for each cell: 64 bit IEEE 754 double precision value
      • 2 : string
        • for each cell: 32 bit signed string length followed by string length bytes of the string (UTF-8)
      • 3 : formula
        • for each cell: 32 bit signed string length followed by the formula in R1C1 notation as a string

Functions Supporting Wildcards or Regular Expressions

As this comes up every now and then, and rather should be documented in an extra list of the Help system, functions that support Wildcards or Regular Expressions and depend on the setting under Tools -> Options -> Calc -> Calculate are those that in ODF OpenFormula (ODFF) are defined to depend on the HOST-USE-REGULAR-EXPRESSIONS or HOST-USE-WILDCARDS properties, see ODF v1.3 part4 3.4 Host-Defined Behaviors https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html#__RefHeading__1017868_715980110

  • Array Functions
    • CHOOSECOLS
    • CHOOSEROWS
    • DROP
    • EXPAND
    • HSTACK
    • VSTACK
    • TAKE
    • TOCOL
    • TOROW
    • WRAPCOLS
    • WRAPROWS
  • Database Functions
    • DAVERAGE
    • DCOUNT
    • DCOUNTA
    • DGET
    • DMAX
    • DMIN
    • DPRODUCT
    • DSTDEV
    • DSTDEVP
    • DSUM
    • DVAR
    • DVARP
  • Information Functions
    • COUNTIF
    • COUNTIFS
  • Lambda Functions
    • LET
  • Lookup Functions
    • HLOOKUP
    • LOOKUP
    • MATCH
    • XMATCH
    • VLOOKUP
    • XLOOKUP
    • FILTER
    • SORT
    • SORTBY
    • UNIQUE
  • Mathematical Functions
    • RANDARRAY
    • SEQUENCE
    • SUMIF
    • SUMIFS
  • Statistical Functions
    • AVERAGEIF
    • AVERAGEIFS
  • Text Functions
    • SEARCH