xref: /core/include/LibreOfficeKit/LibreOfficeKitEnums.h (revision 2c2d84fefc5b3cc35c1db0d8244902362dc0531c)
1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9 
10 #ifndef INCLUDED_LIBREOFFICEKIT_LIBREOFFICEKITENUMS_H
11 #define INCLUDED_LIBREOFFICEKIT_LIBREOFFICEKITENUMS_H
12 
13 #include <assert.h>
14 
15 #ifdef __cplusplus
16 extern "C"
17 {
18 #endif
19 
20 #if defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
21 typedef enum
22 {
23   LOK_DOCTYPE_TEXT,
24   LOK_DOCTYPE_SPREADSHEET,
25   LOK_DOCTYPE_PRESENTATION,
26   LOK_DOCTYPE_DRAWING,
27   LOK_DOCTYPE_OTHER
28 }
29 LibreOfficeKitDocumentType;
30 
31 typedef enum
32 {
33     LOK_PARTMODE_SLIDES,
34     LOK_PARTMODE_NOTES
35 }
36 LibreOfficeKitPartMode;
37 
38 typedef enum
39 {
40     LOK_TILEMODE_RGBA,
41     LOK_TILEMODE_BGRA
42 }
43 LibreOfficeKitTileMode;
44 
45 typedef enum
46 {
47     LOK_WINDOW_CLOSE,
48     LOK_WINDOW_PASTE
49 }
50 LibreOfficeKitWindowAction;
51 
52 typedef enum
53 {
54     LOK_SELTYPE_NONE,
55     LOK_SELTYPE_TEXT,
56     LOK_SELTYPE_LARGE_TEXT, // unused (same as LOK_SELTYPE_COMPLEX)
57     LOK_SELTYPE_COMPLEX
58 }
59 LibreOfficeKitSelectionType;
60 
61 /** Optional features of LibreOfficeKit, in particular callbacks that block
62  *  LibreOfficeKit until the corresponding reply is received, which would
63  *  deadlock if the client does not support the feature.
64  *
65  *  @see lok::Office::setOptionalFeatures().
66  */
67 typedef enum
68 {
69     /**
70      * Handle LOK_CALLBACK_DOCUMENT_PASSWORD by prompting the user
71      * for a password.
72      *
73      * @see lok::Office::setDocumentPassword().
74      */
75     LOK_FEATURE_DOCUMENT_PASSWORD = (1ULL << 0),
76 
77     /**
78      * Handle LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY by prompting the user
79      * for a password.
80      *
81      * @see lok::Office::setDocumentPassword().
82      */
83     LOK_FEATURE_DOCUMENT_PASSWORD_TO_MODIFY = (1ULL << 1),
84 
85     /**
86      * Request to have the part number as an 5th value in the
87      * LOK_CALLBACK_INVALIDATE_TILES payload.
88      */
89     LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK = (1ULL << 2),
90 
91     /**
92      * Turn off tile rendering for annotations
93      */
94     LOK_FEATURE_NO_TILED_ANNOTATIONS = (1ULL << 3),
95 
96     /**
97      * Enable range based header data
98      */
99     LOK_FEATURE_RANGE_HEADERS = (1ULL << 4),
100 
101     /**
102      * Request to have the active view's Id as the 1st value in the
103      * LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR payload.
104      */
105     LOK_FEATURE_VIEWID_IN_VISCURSOR_INVALIDATION_CALLBACK = (1ULL << 5)
106 }
107 LibreOfficeKitOptionalFeatures;
108 
109 // This enumerates the types of callbacks emitted to a LibreOfficeKit
110 // object's callback function or to a LibreOfficeKitDocument object's
111 // callback function. No callback type will be emitted to both. It is a
112 // bit unfortunate that the same enum contains both kinds of
113 // callbacks.
114 
115 // TODO: We should really add some indication at the documentation for
116 // each enum value telling which type of callback it is.
117 
118 typedef enum
119 {
120     /**
121      * Any tiles which are over the rectangle described in the payload are no
122      * longer valid.
123      *
124      * Rectangle format: "x, y, width, height", where all numbers are document
125      * coordinates, in twips. When all tiles are supposed to be dropped, the
126      * format is the "EMPTY" string.
127      *
128      * @see LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK.
129      */
130     LOK_CALLBACK_INVALIDATE_TILES = 0,
131     /**
132      * The size and/or the position of the visible cursor changed.
133      *
134      * Old format is the same as LOK_CALLBACK_INVALIDATE_TILES.
135      * New format is a JSON with 3 elements the 'viewId' element represented by
136      * an integer value, a 'rectangle' element in the format "x, y, width, height",
137      * and a 'misspelledWord' element represented by an integer value: '1' when
138      * a misspelled word is at the cursor position, '0' when the word is
139      * not misspelled.
140      */
141     LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR = 1,
142     /**
143      * The list of rectangles representing the current text selection changed.
144      *
145      * List format is "rectangle1[; rectangle2[; ...]]" (without quotes and
146      * brackets), where rectangleN has the same format as
147      * LOK_CALLBACK_INVALIDATE_TILES. When there is no selection, an empty
148      * string is provided.
149      */
150     LOK_CALLBACK_TEXT_SELECTION = 2,
151     /**
152      * The position and size of the cursor rectangle at the text
153      * selection start. It is used to draw the selection handles.
154      *
155      * This callback must be called prior to LOK_CALLBACK_TEXT_SELECTION every
156      * time the selection is updated.
157      *
158      * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
159      */
160     LOK_CALLBACK_TEXT_SELECTION_START = 3,
161     /**
162      * The position and size of the cursor rectangle at the text
163      * selection end. It is used to draw the selection handles.
164      *
165      * This callback must be called prior to LOK_CALLBACK_TEXT_SELECTION every
166      * time the selection is updated.
167      *
168      * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
169      */
170     LOK_CALLBACK_TEXT_SELECTION_END = 4,
171     /**
172      * The blinking text cursor is now visible or not.
173      *
174      * Clients should assume that this is true initially and are expected to
175      * hide the blinking cursor at the rectangle described by
176      * LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR once it becomes false. Payload is
177      * either the "true" or the "false" string.
178      */
179     LOK_CALLBACK_CURSOR_VISIBLE = 5,
180     /**
181      * The size and/or the position of the graphic selection changed,
182      * the rotation angle of the embedded graphic object, and a property list
183      * which can be used for informing the client about several properties.
184      *
185      * Format is "x, y, width, height, angle, { list of properties }",
186      * where angle is in 100th of degree, and the property list is optional.
187      *
188      * The "{ list of properties }" part is in JSON format.
189      * Follow some examples of the property list part:
190      *
191      * 1) when the selected object is an image inserted in Writer:
192      *
193      *      { "isWriterGraphic": true }
194      *
195      * 2) when the selected object is a chart legend:
196      *
197      *      { "isDraggable": true, "isResizable": true, "isRotatable": false }
198      *
199      * 3) when the selected object is a pie segment in a chart:
200      *
201      *      {
202      *          "isDraggable": true,
203      *          "isResizable": false,
204      *          "isRotatable": false,
205      *          "dragInfo": {
206      *              "dragMethod": "PieSegmentDragging",
207      *              "initialOffset": 50,
208      *              "dragDirection": [x, y],
209      *              "svg": "<svg ..."
210      *          }
211      *      }
212      *
213      *      where the "svg" property is a string containing an svg document
214      *      which is a representation of the pie segment.
215      */
216     LOK_CALLBACK_GRAPHIC_SELECTION = 6,
217 
218     /**
219      * User clicked on a hyperlink that should be handled by other
220      * applications accordingly.
221      */
222     LOK_CALLBACK_HYPERLINK_CLICKED = 7,
223 
224     /**
225      * Emit state update to the client.
226      * For example, when cursor is on bold text, this callback is triggered
227      * with payload: ".uno:Bold=true"
228      */
229     LOK_CALLBACK_STATE_CHANGED = 8,
230 
231     /**
232      * Start a "status indicator" (here restricted to a progress bar type
233      * indicator). The payload is the descriptive text (or empty). Even if
234      * there is no documentation that would promise so, we assume that de facto
235      * for a document being viewed or edited, there will be at most one status
236      * indicator, and its descriptive text will not change.
237      *
238      * Note that for the case of the progress indication during loading of a
239      * document, the status indicator callbacks will arrive to the callback
240      * registered for the LibreOfficeKit (singleton) object, not a
241      * LibreOfficeKitDocument one, because we are in the very progress of
242      * loading a document and then constructing a LibreOfficeKitDocument
243      * object.
244      */
245     LOK_CALLBACK_STATUS_INDICATOR_START = 9,
246 
247     /**
248      * Sets the numeric value of the status indicator.
249      * The payload should be a percentage, an integer between 0 and 100.
250      */
251     LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE = 10,
252 
253     /**
254      * Ends the status indicator.
255      *
256      * Not necessarily ever emitted.
257      */
258     LOK_CALLBACK_STATUS_INDICATOR_FINISH = 11,
259 
260     /**
261      * No match was found for the search input
262      */
263     LOK_CALLBACK_SEARCH_NOT_FOUND = 12,
264 
265     /**
266      * Size of the document changed.
267      *
268      * Payload format is "width, height", i.e. clients get the new size without
269      * having to do an explicit lok::Document::getDocumentSize() call.
270      *
271      * A size change is always preceded by a series of
272      * LOK_CALLBACK_INVALIDATE_TILES events invalidating any areas
273      * need re-rendering to adapt.
274      */
275     LOK_CALLBACK_DOCUMENT_SIZE_CHANGED = 13,
276 
277     /**
278      * The current part number is changed.
279      *
280      * Payload is a single 0-based integer.
281      */
282     LOK_CALLBACK_SET_PART = 14,
283 
284     /**
285      * Selection rectangles of the search result when find all is performed.
286      *
287      * Payload format example, in case of two matches:
288      *
289      * {
290      *     "searchString": "...",
291      *     "highlightAll": true|false, // this is a result of 'search all'
292      *     "searchResultSelection": [
293      *         {
294      *             "part": "...",
295      *             "rectangles": "..."
296      *         },
297      *         {
298      *             "part": "...",
299      *             "rectangles": "..."
300      *         }
301      *     ]
302      * }
303      *
304      * - searchString is the search query
305      * - searchResultSelection is an array of part-number and rectangle list
306      *   pairs, in LOK_CALLBACK_SET_PART / LOK_CALLBACK_TEXT_SELECTION format.
307      */
308     LOK_CALLBACK_SEARCH_RESULT_SELECTION = 15,
309 
310     /**
311      * Result of the UNO command execution when bNotifyWhenFinished was set
312      * to 'true' during the postUnoCommand() call.
313      *
314      * The result returns a success / failure state, and potentially
315      * additional data:
316      *
317      * {
318      *     "commandName": "...",    // the command for which this is the result
319      *     "success": true/false,   // when the result is "don't know", this is missing
320      *     // TODO "result": "..."  // UNO Any converted to JSON (not implemented yet)
321      * }
322      */
323     LOK_CALLBACK_UNO_COMMAND_RESULT = 16,
324 
325     /**
326      * The size and/or the position of the cell cursor changed.
327      *
328      * Payload format: "x, y, width, height, column, row", where the first
329      * 4 numbers are document coordinates, in twips, and the last 2 are table
330      * coordinates starting from 0.
331      * When the cursor is not shown the payload format is the "EMPTY" string.
332      *
333      * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
334      */
335     LOK_CALLBACK_CELL_CURSOR = 17,
336 
337     /**
338      * The current mouse pointer style.
339      *
340      * Payload is a css mouse pointer style.
341      */
342     LOK_CALLBACK_MOUSE_POINTER = 18,
343 
344     /**
345      * The text content of the formula bar in Calc.
346      */
347     LOK_CALLBACK_CELL_FORMULA = 19,
348 
349     /**
350      * Loading a document requires a password.
351      *
352      * Loading the document is blocked until the password is provided via
353      * lok::Office::setDocumentPassword().  The document cannot be loaded
354      * without the password.
355      */
356     LOK_CALLBACK_DOCUMENT_PASSWORD = 20,
357 
358     /**
359      * Editing a document requires a password.
360      *
361      * Loading the document is blocked until the password is provided via
362      * lok::Office::setDocumentPassword().
363      */
364     LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY = 21,
365 
366     /**
367      * An error happened.
368      *
369      * The payload returns information further identifying the error, like:
370      *
371      * {
372      *     "classification": "error" | "warning" | "info"
373      *     "kind": "network" etc.
374      *     "code": a structured 32-bit error code, the ErrCode from LibreOffice's <comphelper/errcode.hxx>
375      *     "message": freeform description
376      * }
377      */
378     LOK_CALLBACK_ERROR = 22,
379 
380     /**
381      * Context menu structure
382      *
383      * Returns the structure of context menu.  Contains all the separators &
384      * submenus, example of the returned structure:
385      *
386      * {
387      *     "menu": [
388      *         { "text": "label text1", "type": "command", "command": ".uno:Something1", "enabled": "true" },
389      *         { "text": "label text2", "type": "command", "command": ".uno:Something2", "enabled": "false" },
390      *         { "type": "separator" },
391      *         { "text": "label text2", "type": "menu", "menu": [ { ... }, { ... }, ... ] },
392      *         ...
393      *     ]
394      * }
395      *
396      * The 'command' can additionally have a checkable status, like:
397      *
398      *     {"text": "label text3", "type": "command", "command": ".uno:Something3", "checktype": "checkmark|radio|auto", "checked": "true|false"}
399      */
400     LOK_CALLBACK_CONTEXT_MENU = 23,
401 
402     /**
403      * The size and/or the position of the view cursor changed. A view cursor
404      * is a cursor of another view, the current view can't change it.
405      *
406      * The payload format:
407      *
408      * {
409      *     "viewId": "..."
410      *     "rectangle": "..."
411      * }
412      *
413      * - viewId is a value returned earlier by lok::Document::createView()
414      * - rectangle uses the format of LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR
415      */
416     LOK_CALLBACK_INVALIDATE_VIEW_CURSOR = 24,
417 
418     /**
419      * The text selection in one of the other views has changed.
420      *
421      * The payload format:
422      *
423      * {
424      *     "viewId": "..."
425      *     "selection": "..."
426      * }
427      *
428      * - viewId is a value returned earlier by lok::Document::createView()
429      * - selection uses the format of LOK_CALLBACK_TEXT_SELECTION.
430      */
431     LOK_CALLBACK_TEXT_VIEW_SELECTION = 25,
432 
433     /**
434      * The cell cursor in one of the other views has changed.
435      *
436      * The payload format:
437      *
438      * {
439      *     "viewId": "..."
440      *     "rectangle": "..."
441      * }
442      *
443      * - viewId is a value returned earlier by lok::Document::createView()
444      * - rectangle uses the format of LOK_CALLBACK_CELL_CURSOR.
445      */
446     LOK_CALLBACK_CELL_VIEW_CURSOR = 26,
447 
448     /**
449      * The size and/or the position of a graphic selection in one of the other
450      * views has changed.
451      *
452      * The payload format:
453      *
454      * {
455      *     "viewId": "..."
456      *     "selection": "..."
457      * }
458      *
459      * - viewId is a value returned earlier by lok::Document::createView()
460      * - selection uses the format of LOK_CALLBACK_INVALIDATE_TILES.
461      */
462     LOK_CALLBACK_GRAPHIC_VIEW_SELECTION = 27,
463 
464     /**
465      * The blinking text cursor in one of the other views is now visible or
466      * not.
467      *
468      * The payload format:
469      *
470      * {
471      *     "viewId": "..."
472      *     "visible": "..."
473      * }
474      *
475      * - viewId is a value returned earlier by lok::Document::createView()
476      * - visible uses the format of LOK_CALLBACK_CURSOR_VISIBLE.
477      */
478     LOK_CALLBACK_VIEW_CURSOR_VISIBLE = 28,
479 
480     /**
481      * The size and/or the position of a lock rectangle in one of the other
482      * views has changed.
483      *
484      * The payload format:
485      *
486      * {
487      *     "viewId": "..."
488      *     "rectangle": "..."
489      * }
490      *
491      * - viewId is a value returned earlier by lok::Document::createView()
492      * - rectangle uses the format of LOK_CALLBACK_INVALIDATE_TILES.
493      */
494     LOK_CALLBACK_VIEW_LOCK = 29,
495 
496     /**
497      * The size of the change tracking table has changed.
498      *
499      * The payload example:
500      * {
501      *     "redline": {
502      *         "action": "Remove",
503      *         "index": "1",
504      *         "author": "Unknown Author",
505      *         "type": "Delete",
506      *         "comment": "",
507      *         "description": "Delete 'abc'",
508      *         "dateTime": "2016-08-18T12:14:00"
509      *     }
510      * }
511      *
512      * The format is the same as an entry of
513      * lok::Document::getCommandValues('.uno:AcceptTrackedChanges'), extra
514      * fields:
515      *
516      * - 'action' is either 'Add' or 'Remove', depending on if this is an
517      *   insertion into the table or a removal.
518      */
519     LOK_CALLBACK_REDLINE_TABLE_SIZE_CHANGED = 30,
520 
521     /**
522      * An entry in the change tracking table has been modified.
523      *
524      * The payload example:
525      * {
526      *     "redline": {
527      *         "action": "Modify",
528      *         "index": "1",
529      *         "author": "Unknown Author",
530      *         "type": "Insert",
531      *         "comment": "",
532      *         "description": "Insert 'abcd'",
533      *         "dateTime": "2016-08-18T13:13:00"
534      *     }
535      * }
536      *
537      * The format is the same as an entry of
538      * lok::Document::getCommandValues('.uno:AcceptTrackedChanges'), extra
539      * fields:
540      *
541      * - 'action' is 'Modify'.
542      */
543     LOK_CALLBACK_REDLINE_TABLE_ENTRY_MODIFIED = 31,
544 
545     /**
546      * There is some change in comments in the document
547      *
548      * The payload example:
549      * {
550      *     "comment": {
551      *         "action": "Add",
552      *         "id": "11",
553      *         "parent": "4",
554      *         "author": "Unknown Author",
555      *         "text": "",
556      *         "dateTime": "2016-08-18T13:13:00",
557      *         "anchorPos": "4529, 3906",
558      *         "textRange": "1418, 3906, 3111, 919"
559      *     }
560      * }
561      *
562      * The format is the same as an entry of
563      * lok::Document::getCommandValues('.uno:ViewAnnotations'), extra
564      * fields:
565      *
566      * - 'action' can be 'Add', 'Remove' or 'Modify' depending on whether
567      *    comment has been added, removed or modified.
568      */
569     LOK_CALLBACK_COMMENT = 32,
570 
571     /**
572      * The column/row header is no more valid because of a column/row insertion
573      * or a similar event. Clients must query a new column/row header set.
574      *
575      * The payload says if we are invalidating a row or column header. So,
576      * payload values can be: "row", "column", "all".
577      */
578     LOK_CALLBACK_INVALIDATE_HEADER = 33,
579     /**
580      * The text content of the address field in Calc. Eg: "A7"
581      */
582     LOK_CALLBACK_CELL_ADDRESS = 34,
583     /**
584      * The key horizontal ruler related properties on change are reported by this.
585      *
586      * The payload format is:
587      *
588      * {
589      *      "margin1": "...",
590      *      "margin2": "...",
591      *      "leftOffset": "...",
592      *      "pageOffset": "...",
593      *      "pageWidth": "...",
594      *      "unit": "..."
595      *  }
596      *
597      * Here all aproperties are same as described in svxruler.
598      */
599     LOK_CALLBACK_RULER_UPDATE = 35,
600     /**
601      * Window related callbacks are emitted under this category. It includes
602      * external windows like dialogs, autopopups for now.
603      *
604      * The payload format is:
605      *
606      * {
607      *    "id": "unique integer id of the dialog",
608      *    "action": "<see below>",
609      *    "type": "<see below>"
610      *    "rectangle": "x, y, width, height"
611      * }
612      *
613      * "type" tells the type of the window the action is associated with
614      *  - "dialog" - window is a dialog
615      *  - "child" - window is a floating window (combo boxes, etc.)
616      *  - "deck" - window is a docked/floating deck (i.e. the sidebar)
617      *  - "tooltip" - window is a tooltip popup
618      *
619      * "action" can take following values:
620      * - "created" - window is created in the backend, client can render it now
621      * - "title_changed" - window's title is changed
622      * - "size_changed" - window's size is changed
623      * - "invalidate" - the area as described by "rectangle" is invalidated
624      *    Clients must request the new area
625      * - "cursor_invalidate" - cursor is invalidated. New position is in "rectangle"
626      * - "cursor_visible" - cursor visible status is changed. Status is available
627      *    in "visible" field
628      * - "close" - window is closed
629      * - "show" - show the window
630      * - "hide" - hide the window
631      */
632     LOK_CALLBACK_WINDOW = 36,
633 
634     /**
635      * When for the current cell is defined a validity list we need to show
636      * a drop down button in the form of a marker.
637      *
638      * The payload format is: "x, y, visible" where x, y are the current
639      * cell cursor coordinates and visible is set to 0 or 1.
640      */
641     LOK_CALLBACK_VALIDITY_LIST_BUTTON = 37,
642 
643     /**
644      * Notification that the clipboard contents have changed.
645      * Typically fired in response to copying to clipboard.
646      *
647      * Payload is optional. When payload is empty, Online gets string from selected text.
648      * Payload format is JSON.
649      * Example: { "mimeType": "text/plain", "content": "some content" }
650      */
651     LOK_CALLBACK_CLIPBOARD_CHANGED = 38,
652 
653     /**
654      * When the (editing) context changes - like the user switches from
655      * editing textbox in Impress to editing a shape there.
656      *
657      * Payload is the application ID and context, delimited by space.
658      * Eg. com.sun.star.presentation.PresentationDocument TextObject
659      */
660     LOK_CALLBACK_CONTEXT_CHANGED = 39,
661 
662     /**
663      * On-load notification of the document signature status.
664      */
665     LOK_CALLBACK_SIGNATURE_STATUS = 40,
666 
667     /**
668      * Profiling tracing information single string of multiple lines
669      * containing <pid> <timestamp> and zone start/stop information
670      */
671     LOK_CALLBACK_PROFILE_FRAME = 41,
672 
673     /**
674      * The position and size of the cell selection area. It is used to
675      * draw the selection handles for cells in Calc documents.
676      *
677      * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
678      */
679     LOK_CALLBACK_CELL_SELECTION_AREA = 42,
680 
681     /**
682      * The position and size of the cell auto fill area. It is used to
683      * trigger auto fill functionality if that area is hit.
684      *
685      * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
686      */
687     LOK_CALLBACK_CELL_AUTO_FILL_AREA = 43,
688 
689     /**
690      * When the cursor is in a table or a table is selected in the
691      * document, this sends the table's column and row border positions
692      * to the client. If the payload is empty (empty JSON object), then
693      * no table is currently selected or the cursor is not inside a table
694      * cell.
695      */
696     LOK_CALLBACK_TABLE_SELECTED = 44,
697 
698     /*
699      * Show reference marks from payload.
700      *
701      * Example payload:
702      * {
703      *     "marks": [
704      *         { "rectangle": "3825, 3315, 1245, 2010", "color": "0000ff", "part": "0" },
705      *         { "rectangle": "8925, 4335, 2520, 735", "color": "ff0000", "part": "0" },
706      *         ...
707      *     ]
708      * }
709      */
710     LOK_CALLBACK_REFERENCE_MARKS = 45,
711 
712     /**
713      * Callback related to native dialogs generated in JavaScript from
714      * the description.
715      */
716     LOK_CALLBACK_JSDIALOG = 46,
717 
718     /**
719      * Send the list of functions whose name starts with the characters entered
720      * by the user in the formula input bar.
721      */
722     LOK_CALLBACK_CALC_FUNCTION_LIST = 47,
723 
724     /**
725      * Sends the tab stop list for the current of the current cursor position.
726      */
727     LOK_CALLBACK_TAB_STOP_LIST = 48,
728 
729     /**
730      * Sends all information for displaying form field button for a text based field.
731      *
732      * It contains the position where the frame with the button should be displayed and
733      * also contains all information that the popup window needs.
734      *
735      * The payload example:
736      * {
737      *      "action": "show",
738      *      "type": "drop-down",
739      *      "textArea": "1418, 3906, 3111, 919",
740      *      "params": {
741      *           "items": ["January", "February", "July"],
742      *           "selected": "2",
743      *           "placeholder": "No items specified"
744      *      }
745      * }
746      *
747      * or
748      * {
749      *      "action": "hide",
750      *      "type": "drop-down"
751      * }
752      */
753     LOK_CALLBACK_FORM_FIELD_BUTTON = 49,
754 
755     /**
756      * This is Calc specific. Indicates that some or all of the current sheet's
757      * geometry data has changed. Clients must request a full or partial sheet
758      * geometry data set.
759      *
760      * The payload specifies what part of the sheet geometry data has changed.
761      * The payload format is:
762      * 'all|rows|columns [sizes [hidden [filtered [groups]]]]'
763      *
764      * For example, the payload 'rows sizes groups' indicates that the row heights
765      * and row-groups data have changed.
766      */
767     LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY = 50,
768 
769     /**
770      * When for the current cell is defined an input help text.
771      *
772      * The payload format is JSON: { "title": "title text", "content": "content text" }
773      */
774     LOK_CALLBACK_VALIDITY_INPUT_HELP = 51,
775 
776     /**
777      * Indicates the document background color in the payload as a RGB hex string (RRGGBB).
778      */
779     LOK_CALLBACK_DOCUMENT_BACKGROUND_COLOR = 52,
780 
781     /**
782      * When a user tries to use command which is restricted for that user
783      */
784     LOK_COMMAND_BLOCKED = 53,
785 
786     /**
787      * The position of the cell cursor jumped to.
788      *
789      * Payload format: "x, y, width, height, column, row", where the first
790      * 4 numbers are document coordinates, in twips, and the last 2 are table
791      * coordinates starting from 0.
792      * When the cursor is not shown the payload format is the "EMPTY" string.
793      *
794      * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES.
795      */
796     LOK_CALLBACK_SC_FOLLOW_JUMP = 54,
797 
798     /**
799      * Sends all information for displaying metadata for a text based content control.
800      *
801      * Examples:
802      * Entered a rich text content control:
803      * {
804      *     "action": "show",
805      *     "alias": "my alias", // omitted if empty
806      *     "rectangles": "1418, 1694, 720, 551; 10291, 1418, 1099, 275"
807      * }
808      *
809      * Left a rich text content control:
810      * {
811      *     "action": "hide"
812      * }
813      *
814      * Entered a dropdown content control:
815      * {
816      *     "action": "show",
817      *     "rectangles": "...",
818      *     "items": ["red", "green", "blue"]
819      * }
820      *
821      * Clicked on a picture content control's placeholder:
822      * {
823      *     "action": "change-picture"
824      * }
825      *
826      * Entered a date content control:
827      * {
828      *     "action": "show",
829      *     "rectangles": "...",
830      *     "date": "true"
831      * }
832      */
833     LOK_CALLBACK_CONTENT_CONTROL = 55,
834 
835     /**
836      * This is Calc specific. The payload contains print ranges of all
837      * sheets in the document.
838      *
839      * Payload example:
840      * {
841      *     "printranges" : [
842      *         {
843      *             "sheet": 0,
844      *             "ranges": [
845      *                 [0, 0, 4, 5],
846      *                 [5, 100, 8, 150]
847      *             ]
848      *         },
849      *         {
850      *             "sheet": 3,
851      *             "ranges": [
852      *                 [1, 0, 6, 10],
853      *                 [3, 200, 6, 230]
854      *             ]
855      *         }
856      *     ]
857      * }
858      *
859      * The format of the inner "ranges" array for each sheet is
860      * [<startColumn>, <startRow>, <endColumn>, <endRow>]
861      */
862     LOK_CALLBACK_PRINT_RANGES = 56,
863 
864     /**
865      * Informs the LibreOfficeKit client that a font specified in the
866      * document is missing.
867      *
868      * This callback is emitted right after the document has been loaded.
869      *
870      * Payload example:
871      * {
872      *     "fontsmissing": [
873      *         "Some Random Font",
874      *         "Another Font"
875      *     ]
876      * }
877      *
878      * The names are those of the font family. Sadly it is currently
879      * not possible to know the name of the font style that is
880      * missing.
881      *
882      */
883     LOK_CALLBACK_FONTS_MISSING = 57,
884 
885     /**
886      * Insertion, removal, movement, and selection of a media shape.
887      * The payload is a json with the relevant details.
888      *
889      *      {
890      *          "action": "insert",
891      *          "id": 123456,
892      *          "url": "file:// ..."
893      *          "x": ...,
894      *          "y": ...,
895      *      }
896      *
897      *      where the "svg" property is a string containing an svg document
898      *      which is a representation of the pie segment.
899      */
900     LOK_CALLBACK_MEDIA_SHAPE = 58,
901 
902     /**
903      * The document is available to download by the client.
904      *
905      * Payload example:
906      * "file:///tmp/hello-world.pdf"
907      */
908     LOK_CALLBACK_EXPORT_FILE = 59,
909 
910     /**
911      * Some attribute of this view has changed, that will cause it
912      * to completely re-render, eg. non-printing characters or
913      * or dark mode was toggled, and then distinct from other views.
914      *
915      * Payload is an opaque string that matches this set of states.
916      * this will be emitted after creating a new view.
917      */
918     LOK_CALLBACK_VIEW_RENDER_STATE = 60,
919 
920     /**
921      * Informs the LibreOfficeKit client that the background color surrounding
922      * the document has changed.
923     */
924    LOK_CALLBACK_APPLICATION_BACKGROUND_COLOR = 61,
925 
926     /**
927      * Accessibility event: a paragraph got focus.
928      * The payload is a json with the following structure.
929      *
930      *   {
931      *       "content": "<paragraph text>"
932      *       "position": N
933      *       "start": N1
934      *       "end": N2
935      *       "listPrefixLength": L
936      *   }
937      *   where N is the position of the text cursor inside the focused paragraph,
938      *   and [N1,N2] is the range of the text selection inside the focused paragraph.
939      *   In case the paragraph is a list item, L is the length of the bullet/number prefix.
940      */
941     LOK_CALLBACK_A11Y_FOCUS_CHANGED = 62,
942 
943     /**
944      * Accessibility event: text cursor position has changed.
945      *
946      *  {
947      *      "position": N
948      *  }
949      *  where N is the position of the text cursor inside the focused paragraph.
950      */
951     LOK_CALLBACK_A11Y_CARET_CHANGED = 63,
952 
953     /**
954      * Accessibility event: text selection has changed.
955      *
956      *  {
957      *      "start": N1
958      *      "end": N2
959      *  }
960      *  where [N1,N2] is the range of the text selection inside the focused paragraph.
961      */
962     LOK_CALLBACK_A11Y_TEXT_SELECTION_CHANGED = 64,
963 
964     /**
965      * Informs the LibreOfficeKit client that the color palettes have changed.
966     */
967     LOK_CALLBACK_COLOR_PALETTES = 65,
968 
969     /**
970      * Informs that the document password has been successfully changed.
971      * The payload contains the new password and the type.
972     */
973     LOK_CALLBACK_DOCUMENT_PASSWORD_RESET = 66,
974 
975     /**
976      * Accessibility event: a cell got focus.
977      * The payload is a json with the following structure.
978      *
979      *   {
980      *       "outCount": <number of tables user gets out of>
981      *       "inList": [
982      *           {
983      *               "rowCount": <number of rows for outer table user got in>
984      *               "colCount": <number of columns for outer table user got in>
985      *           },
986      *           ...
987      *           {
988      *               "rowCount": <number of rows for inner table user got in>
989      *               "colCount": <number of columns for inner table user got in>
990      *           }
991      *       ]
992      *       "row": <current row index>
993      *       "col": <current column index>
994      *       "rowSpan": <row span for current cell>
995      *       "colSpan": <column span for current cell>
996      *       "paragraph": {
997      *           <same structure as for LOK_CALLBACK_A11Y_FOCUS_CHANGED>
998      *        }
999      *   }
1000      *   where row/column indexes start from 0, inList is the list of tables
1001      *   the user got in from the outer to the inner; row/column span default
1002      *   value is 1; paragraph is the cell text content.
1003      */
1004     LOK_CALLBACK_A11Y_FOCUSED_CELL_CHANGED = 67,
1005 
1006     /**
1007      * Accessibility event: text editing in a shape or cell has been enabled/disabled
1008      *
1009      *  {
1010      *      "cell": true/false (editing a cell ?)
1011      *      "enabled": true|false
1012      *      "selection": a selection description
1013      *      "paragraph": focused paragraph
1014      *  }
1015      */
1016     LOK_CALLBACK_A11Y_EDITING_IN_SELECTION_STATE = 68,
1017 
1018     /**
1019      * Accessibility event: a selection (of a shape/graphic, etc.) has changed
1020      *
1021      *  {
1022      *      "cell": true/false (selected object is a cell ?)
1023      *      "action": "create"|"add"|"remove"
1024      *      "name": selected object name
1025      *      "text": text content if any
1026      *  }
1027      */
1028     LOK_CALLBACK_A11Y_SELECTION_CHANGED = 69,
1029 
1030     /**
1031      * Forwarding logs from core to client can be useful
1032      * for keep track of the real core/client event sequence
1033      *
1034      * Payload is the log to be sent
1035      */
1036     LOK_CALLBACK_CORE_LOG = 70,
1037 
1038     /**
1039      * Tooltips shown in the documents, like redline author and date.
1040      *
1041      *  {
1042      *      "text": "text of tooltip",
1043      *      "rectangle": "x, y, width, height"
1044      *  }
1045      */
1046     LOK_CALLBACK_TOOLTIP = 71,
1047 
1048     /**
1049      * Used for sending the rectangle for text inside a shape/textbox
1050      *
1051      *  Payload contains the rectangle details
1052      */
1053     LOK_CALLBACK_SHAPE_INNER_TEXT = 72,
1054         /**
1055      * The key vertical ruler related properties on change are reported by this.
1056      *
1057      * The payload format is:
1058      *
1059      * {
1060      *      "margin1": "...",
1061      *      "margin2": "...",
1062      *      "leftOffset": "...",
1063      *      "pageOffset": "...",
1064      *      "pageWidth": "...",
1065      *      "unit": "..."
1066      *  }
1067      *
1068      * Here all aproperties are same as described in svxruler.
1069      */
1070     LOK_CALLBACK_VERTICAL_RULER_UPDATE = 73
1071 
1072 }
1073 LibreOfficeKitCallbackType;
1074 
1075 typedef enum
1076 {
1077     /// A key on the keyboard is pressed.
1078     LOK_KEYEVENT_KEYINPUT,
1079     /// A key on the keyboard is released.
1080     LOK_KEYEVENT_KEYUP
1081 }
1082 LibreOfficeKitKeyEventType;
1083 
1084 typedef enum
1085 {
1086     /// cf. SalEvent::ExtTextInput
1087     LOK_EXT_TEXTINPUT,
1088     /// cf. SalEvent::ExtTextInputPos
1089     LOK_EXT_TEXTINPUT_POS,
1090     /// cf. SalEvent::EndExtTextInput
1091     LOK_EXT_TEXTINPUT_END
1092 }
1093 LibreOfficeKitExtTextInputType;
1094 
1095 /// Returns the string representation of a LibreOfficeKitCallbackType enumeration element.
lokCallbackTypeToString(int nType)1096 static inline const char* lokCallbackTypeToString(int nType)
1097 {
1098     switch (static_cast<LibreOfficeKitCallbackType>(nType))
1099     {
1100     case LOK_CALLBACK_INVALIDATE_TILES:
1101         return "LOK_CALLBACK_INVALIDATE_TILES";
1102     case LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR:
1103         return "LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR";
1104     case LOK_CALLBACK_TEXT_SELECTION:
1105         return "LOK_CALLBACK_TEXT_SELECTION";
1106     case LOK_CALLBACK_TEXT_SELECTION_START:
1107         return "LOK_CALLBACK_TEXT_SELECTION_START";
1108     case LOK_CALLBACK_TEXT_SELECTION_END:
1109         return "LOK_CALLBACK_TEXT_SELECTION_END";
1110     case LOK_CALLBACK_CURSOR_VISIBLE:
1111         return "LOK_CALLBACK_CURSOR_VISIBLE";
1112     case LOK_CALLBACK_VIEW_CURSOR_VISIBLE:
1113         return "LOK_CALLBACK_VIEW_CURSOR_VISIBLE";
1114     case LOK_CALLBACK_GRAPHIC_SELECTION:
1115         return "LOK_CALLBACK_GRAPHIC_SELECTION";
1116     case LOK_CALLBACK_GRAPHIC_VIEW_SELECTION:
1117         return "LOK_CALLBACK_GRAPHIC_VIEW_SELECTION";
1118     case LOK_CALLBACK_CELL_CURSOR:
1119         return "LOK_CALLBACK_CELL_CURSOR";
1120     case LOK_CALLBACK_HYPERLINK_CLICKED:
1121         return "LOK_CALLBACK_HYPERLINK_CLICKED";
1122     case LOK_CALLBACK_MOUSE_POINTER:
1123         return "LOK_CALLBACK_MOUSE_POINTER";
1124     case LOK_CALLBACK_STATE_CHANGED:
1125         return "LOK_CALLBACK_STATE_CHANGED";
1126     case LOK_CALLBACK_STATUS_INDICATOR_START:
1127         return "LOK_CALLBACK_STATUS_INDICATOR_START";
1128     case LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE:
1129         return "LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE";
1130     case LOK_CALLBACK_STATUS_INDICATOR_FINISH:
1131         return "LOK_CALLBACK_STATUS_INDICATOR_FINISH";
1132     case LOK_CALLBACK_SEARCH_NOT_FOUND:
1133         return "LOK_CALLBACK_SEARCH_NOT_FOUND";
1134     case LOK_CALLBACK_DOCUMENT_SIZE_CHANGED:
1135         return "LOK_CALLBACK_DOCUMENT_SIZE_CHANGED";
1136     case LOK_CALLBACK_SET_PART:
1137         return "LOK_CALLBACK_SET_PART";
1138     case LOK_CALLBACK_SEARCH_RESULT_SELECTION:
1139         return "LOK_CALLBACK_SEARCH_RESULT_SELECTION";
1140     case LOK_CALLBACK_DOCUMENT_PASSWORD:
1141         return "LOK_CALLBACK_DOCUMENT_PASSWORD";
1142     case LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY:
1143         return "LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY";
1144     case LOK_CALLBACK_CONTEXT_MENU:
1145         return "LOK_CALLBACK_CONTEXT_MENU";
1146     case LOK_CALLBACK_INVALIDATE_VIEW_CURSOR:
1147         return "LOK_CALLBACK_INVALIDATE_VIEW_CURSOR";
1148     case LOK_CALLBACK_TEXT_VIEW_SELECTION:
1149         return "LOK_CALLBACK_TEXT_VIEW_SELECTION";
1150     case LOK_CALLBACK_CELL_VIEW_CURSOR:
1151         return "LOK_CALLBACK_CELL_VIEW_CURSOR";
1152     case LOK_CALLBACK_CELL_ADDRESS:
1153         return "LOK_CALLBACK_CELL_ADDRESS";
1154     case LOK_CALLBACK_CELL_FORMULA:
1155         return "LOK_CALLBACK_CELL_FORMULA";
1156     case LOK_CALLBACK_UNO_COMMAND_RESULT:
1157         return "LOK_CALLBACK_UNO_COMMAND_RESULT";
1158     case LOK_CALLBACK_ERROR:
1159         return "LOK_CALLBACK_ERROR";
1160     case LOK_CALLBACK_VIEW_LOCK:
1161         return "LOK_CALLBACK_VIEW_LOCK";
1162     case LOK_CALLBACK_REDLINE_TABLE_SIZE_CHANGED:
1163         return "LOK_CALLBACK_REDLINE_TABLE_SIZE_CHANGED";
1164     case LOK_CALLBACK_REDLINE_TABLE_ENTRY_MODIFIED:
1165         return "LOK_CALLBACK_REDLINE_TABLE_ENTRY_MODIFIED";
1166     case LOK_CALLBACK_INVALIDATE_HEADER:
1167         return "LOK_CALLBACK_INVALIDATE_HEADER";
1168     case LOK_CALLBACK_COMMENT:
1169         return "LOK_CALLBACK_COMMENT";
1170     case LOK_CALLBACK_RULER_UPDATE:
1171         return "LOK_CALLBACK_RULER_UPDATE";
1172     case LOK_CALLBACK_VERTICAL_RULER_UPDATE:
1173         return "LOK_CALLBACK_VERTICAL_RULER_UPDATE";
1174     case LOK_CALLBACK_WINDOW:
1175         return "LOK_CALLBACK_WINDOW";
1176     case LOK_CALLBACK_VALIDITY_LIST_BUTTON:
1177         return "LOK_CALLBACK_VALIDITY_LIST_BUTTON";
1178     case LOK_CALLBACK_VALIDITY_INPUT_HELP:
1179         return "LOK_CALLBACK_VALIDITY_INPUT_HELP";
1180     case LOK_CALLBACK_CLIPBOARD_CHANGED:
1181         return "LOK_CALLBACK_CLIPBOARD_CHANGED";
1182     case LOK_CALLBACK_CONTEXT_CHANGED:
1183         return "LOK_CALLBACK_CONTEXT_CHANGED";
1184     case LOK_CALLBACK_SIGNATURE_STATUS:
1185         return "LOK_CALLBACK_SIGNATURE_STATUS";
1186     case LOK_CALLBACK_PROFILE_FRAME:
1187         return "LOK_CALLBACK_PROFILE_FRAME";
1188     case LOK_CALLBACK_CELL_SELECTION_AREA:
1189         return "LOK_CALLBACK_CELL_SELECTION_AREA";
1190     case LOK_CALLBACK_CELL_AUTO_FILL_AREA:
1191         return "LOK_CALLBACK_CELL_AUTO_FILL_AREA";
1192     case LOK_CALLBACK_TABLE_SELECTED:
1193         return "LOK_CALLBACK_TABLE_SELECTED";
1194     case LOK_CALLBACK_REFERENCE_MARKS:
1195         return "LOK_CALLBACK_REFERENCE_MARKS";
1196     case LOK_CALLBACK_JSDIALOG:
1197         return "LOK_CALLBACK_JSDIALOG";
1198     case LOK_CALLBACK_CALC_FUNCTION_LIST:
1199         return "LOK_CALLBACK_CALC_FUNCTION_LIST";
1200     case LOK_CALLBACK_TAB_STOP_LIST:
1201         return "LOK_CALLBACK_TAB_STOP_LIST";
1202     case LOK_CALLBACK_FORM_FIELD_BUTTON:
1203         return "LOK_CALLBACK_FORM_FIELD_BUTTON";
1204     case LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY:
1205         return "LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY";
1206     case LOK_CALLBACK_DOCUMENT_BACKGROUND_COLOR:
1207         return "LOK_CALLBACK_DOCUMENT_BACKGROUND_COLOR";
1208     case LOK_COMMAND_BLOCKED:
1209         return "LOK_COMMAND_BLOCKED";
1210     case LOK_CALLBACK_SC_FOLLOW_JUMP:
1211         return "LOK_CALLBACK_SC_FOLLOW_JUMP";
1212     case LOK_CALLBACK_CONTENT_CONTROL:
1213         return "LOK_CALLBACK_CONTENT_CONTROL";
1214     case LOK_CALLBACK_PRINT_RANGES:
1215         return "LOK_CALLBACK_PRINT_RANGES";
1216     case LOK_CALLBACK_FONTS_MISSING:
1217         return "LOK_CALLBACK_FONTS_MISSING";
1218     case LOK_CALLBACK_MEDIA_SHAPE:
1219         return "LOK_CALLBACK_MEDIA_SHAPE";
1220     case LOK_CALLBACK_EXPORT_FILE:
1221         return "LOK_CALLBACK_EXPORT_FILE";
1222     case LOK_CALLBACK_VIEW_RENDER_STATE:
1223         return "LOK_CALLBACK_VIEW_RENDER_STATE";
1224     case LOK_CALLBACK_APPLICATION_BACKGROUND_COLOR:
1225         return "LOK_CALLBACK_APPLICATION_BACKGROUND_COLOR";
1226     case LOK_CALLBACK_A11Y_FOCUS_CHANGED:
1227         return "LOK_CALLBACK_A11Y_FOCUS_CHANGED";
1228     case LOK_CALLBACK_A11Y_CARET_CHANGED:
1229         return "LOK_CALLBACK_A11Y_CARET_CHANGED";
1230     case LOK_CALLBACK_A11Y_TEXT_SELECTION_CHANGED:
1231         return "LOK_CALLBACK_A11Y_TEXT_SELECTION_CHANGED";
1232     case LOK_CALLBACK_COLOR_PALETTES:
1233         return "LOK_CALLBACK_COLOR_PALETTES";
1234     case LOK_CALLBACK_DOCUMENT_PASSWORD_RESET:
1235         return "LOK_CALLBACK_DOCUMENT_PASSWORD_RESET";
1236     case LOK_CALLBACK_A11Y_FOCUSED_CELL_CHANGED:
1237         return "LOK_CALLBACK_A11Y_FOCUSED_CELL_CHANGED";
1238     case LOK_CALLBACK_A11Y_EDITING_IN_SELECTION_STATE:
1239         return "LOK_CALLBACK_A11Y_EDITING_IN_SELECTION_STATE";
1240     case LOK_CALLBACK_A11Y_SELECTION_CHANGED:
1241         return "LOK_CALLBACK_A11Y_SELECTION_CHANGED";
1242     case LOK_CALLBACK_CORE_LOG:
1243         return "LOK_CALLBACK_CORE_LOG";
1244     case LOK_CALLBACK_TOOLTIP:
1245         return "LOK_CALLBACK_TOOLTIP";
1246     case LOK_CALLBACK_SHAPE_INNER_TEXT:
1247         return "LOK_CALLBACK_SHAPE_INNER_TEXT";
1248     }
1249 
1250     assert(!"Unknown LibreOfficeKitCallbackType type.");
1251     return nullptr;
1252 }
1253 
1254 typedef enum
1255 {
1256     /// A mouse button has been pressed down.
1257     LOK_MOUSEEVENT_MOUSEBUTTONDOWN,
1258     /// A mouse button has been let go.
1259     LOK_MOUSEEVENT_MOUSEBUTTONUP,
1260     /// The mouse has moved while a button is pressed.
1261     LOK_MOUSEEVENT_MOUSEMOVE
1262 }
1263 LibreOfficeKitMouseEventType;
1264 
1265 typedef enum
1266 {
1267     /// The start of selection is to be adjusted.
1268     LOK_SETTEXTSELECTION_START,
1269     /// The end of selection is to be adjusted.
1270     LOK_SETTEXTSELECTION_END,
1271     /// Both the start and the end of selection is to be adjusted.
1272     LOK_SETTEXTSELECTION_RESET
1273 }
1274 LibreOfficeKitSetTextSelectionType;
1275 
1276 typedef enum
1277 {
1278     /**
1279      * A move or a resize action starts. It is assumed that there is a valid
1280      * graphic selection (see LOK_CALLBACK_GRAPHIC_SELECTION) and the supplied
1281      * coordinates are the ones the user tapped on.
1282      *
1283      * The type of the action is move by default, unless the coordinates are
1284      * the position of a handle (see below), in which case it's a resize.
1285      *
1286      * There are 8 handles for a graphic selection:
1287      * - top-left, top-center, top-right
1288      * - middle-left, middle-right
1289      * - bottom-left, bottom-center, bottom-right
1290      */
1291     LOK_SETGRAPHICSELECTION_START,
1292     /**
1293      * A move or resize action stops. It is assumed that this is always used
1294      * only after a LOK_SETTEXTSELECTION_START. The supplied coordinates are
1295      * the ones where the user released the screen.
1296      */
1297     LOK_SETGRAPHICSELECTION_END
1298 }
1299 LibreOfficeKitSetGraphicSelectionType;
1300 
1301 #endif // defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
1302 
1303 #ifdef __cplusplus
1304 }
1305 #endif
1306 
1307 #endif // INCLUDED_LIBREOFFICEKIT_LIBREOFFICEKITENUMS_H
1308 
1309 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
1310