Coverage Report

Created: 2025-11-16 09:57

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/vcl/inc/salvtables.hxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
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
#pragma once
10
11
#include <vcl/builder.hxx>
12
#include <vcl/weld.hxx>
13
#include <vcl/svapp.hxx>
14
#include <vcl/syswin.hxx>
15
#include <vcl/settings.hxx>
16
#include <vcl/virdev.hxx>
17
#include <vcl/ctrl.hxx>
18
#include <vcl/toolkit/edit.hxx>
19
#include <vcl/formatter.hxx>
20
#include <vcl/toolkit/spinfld.hxx>
21
#include <vcl/toolkit/fixed.hxx>
22
#include <vcl/toolkit/fixedhyper.hxx>
23
#include <vcl/toolkit/lstbox.hxx>
24
#include <vcl/toolkit/MenuButton.hxx>
25
#include <vcl/toolkit/prgsbar.hxx>
26
#include <vcl/toolkit/combobox.hxx>
27
#include <vcl/tabctrl.hxx>
28
#include <vcl/layout.hxx>
29
#include <vcl/toolkit/svtabbx.hxx>
30
#include <vcl/toolkit/svlbitm.hxx>
31
#include <o3tl/sorted_vector.hxx>
32
#include "calendar.hxx"
33
#include "iconview.hxx"
34
#include "messagedialog.hxx"
35
#include "verticaltabctrl.hxx"
36
37
namespace vcl
38
{
39
class RoadmapWizard;
40
};
41
42
class SalInstanceBuilder : public weld::Builder
43
{
44
protected:
45
    std::unique_ptr<VclBuilder> m_xBuilder;
46
    VclPtr<vcl::Window> m_aOwnedToplevel;
47
48
public:
49
    SalInstanceBuilder(vcl::Window* pParent, std::u16string_view sUIRoot, const OUString& rUIFile,
50
                       const css::uno::Reference<css::frame::XFrame>& rFrame
51
                       = css::uno::Reference<css::frame::XFrame>());
52
53
    virtual std::unique_ptr<weld::MessageDialog> weld_message_dialog(const OUString& id) override;
54
55
    virtual std::unique_ptr<weld::Dialog> weld_dialog(const OUString& id) override;
56
57
    virtual std::unique_ptr<weld::Assistant> weld_assistant(const OUString& id) override;
58
59
    virtual std::unique_ptr<weld::Window> create_screenshot_window() override;
60
61
    virtual std::unique_ptr<weld::Widget> weld_widget(const OUString& id) override;
62
63
    virtual std::unique_ptr<weld::Container> weld_container(const OUString& id) override;
64
65
    virtual std::unique_ptr<weld::Box> weld_box(const OUString& id) override;
66
67
    virtual std::unique_ptr<weld::Grid> weld_grid(const OUString& id) override;
68
69
    virtual std::unique_ptr<weld::Paned> weld_paned(const OUString& id) override;
70
71
    virtual std::unique_ptr<weld::Frame> weld_frame(const OUString& id) override;
72
73
    virtual std::unique_ptr<weld::ScrolledWindow>
74
    weld_scrolled_window(const OUString& id, bool bUserManagedScrolling = false) override;
75
76
    virtual std::unique_ptr<weld::Notebook> weld_notebook(const OUString& id) override;
77
78
    virtual std::unique_ptr<weld::Button> weld_button(const OUString& id) override;
79
80
    virtual std::unique_ptr<weld::MenuButton> weld_menu_button(const OUString& id) override;
81
82
    virtual std::unique_ptr<weld::LinkButton> weld_link_button(const OUString& id) override;
83
84
    virtual std::unique_ptr<weld::ToggleButton> weld_toggle_button(const OUString& id) override;
85
86
    virtual std::unique_ptr<weld::RadioButton> weld_radio_button(const OUString& id) override;
87
88
    virtual std::unique_ptr<weld::CheckButton> weld_check_button(const OUString& id) override;
89
90
    virtual std::unique_ptr<weld::Scale> weld_scale(const OUString& id) override;
91
92
    virtual std::unique_ptr<weld::ProgressBar> weld_progress_bar(const OUString& id) override;
93
94
    virtual std::unique_ptr<weld::LevelBar> weld_level_bar(const OUString& id) override;
95
96
    virtual std::unique_ptr<weld::Spinner> weld_spinner(const OUString& id) override;
97
98
    virtual std::unique_ptr<weld::Image> weld_image(const OUString& id) override;
99
100
    virtual std::unique_ptr<weld::Calendar> weld_calendar(const OUString& id) override;
101
102
    virtual std::unique_ptr<weld::Entry> weld_entry(const OUString& id) override;
103
104
    virtual std::unique_ptr<weld::SpinButton> weld_spin_button(const OUString& id) override;
105
106
    virtual std::unique_ptr<weld::MetricSpinButton>
107
    weld_metric_spin_button(const OUString& id, FieldUnit eUnit) override;
108
109
    virtual std::unique_ptr<weld::FormattedSpinButton>
110
    weld_formatted_spin_button(const OUString& id) override;
111
112
    virtual std::unique_ptr<weld::ComboBox> weld_combo_box(const OUString& id) override;
113
114
    virtual std::unique_ptr<weld::EntryTreeView>
115
    weld_entry_tree_view(const OUString& containerid, const OUString& entryid,
116
                         const OUString& treeviewid) override;
117
118
    virtual std::unique_ptr<weld::TreeView> weld_tree_view(const OUString& id) override;
119
120
    virtual std::unique_ptr<weld::IconView> weld_icon_view(const OUString& id) override;
121
122
    virtual std::unique_ptr<weld::Label> weld_label(const OUString& id) override;
123
124
    virtual std::unique_ptr<weld::TextView> weld_text_view(const OUString& id) override;
125
126
    virtual std::unique_ptr<weld::Expander> weld_expander(const OUString& id) override;
127
128
    virtual std::unique_ptr<weld::DrawingArea> weld_drawing_area(
129
        const OUString& id, const rtl::Reference<comphelper::OAccessible>& rA11yImpl = nullptr,
130
        FactoryFunction pUITestFactoryFunction = nullptr, void* pUserData = nullptr) override;
131
132
    virtual std::unique_ptr<weld::Menu> weld_menu(const OUString& id) override;
133
134
    virtual std::unique_ptr<weld::Popover> weld_popover(const OUString& id) override;
135
136
    virtual std::unique_ptr<weld::Toolbar> weld_toolbar(const OUString& id) override;
137
138
    virtual std::unique_ptr<weld::Scrollbar> weld_scrollbar(const OUString& id) override;
139
140
    virtual std::unique_ptr<weld::SizeGroup> create_size_group() override;
141
142
    OUString get_current_page_help_id() const;
143
144
    virtual ~SalInstanceBuilder() override;
145
};
146
147
class SAL_DLLPUBLIC_RTTI SalInstanceMenu : public weld::Menu
148
{
149
protected:
150
    VclPtr<PopupMenu> m_xMenu;
151
152
private:
153
    bool m_bTakeOwnership;
154
    sal_uInt16 m_nLastId;
155
156
    DECL_DLLPRIVATE_LINK(SelectMenuHdl, ::Menu*, bool);
157
158
public:
159
    SalInstanceMenu(PopupMenu* pMenu, bool bTakeOwnership);
160
    virtual OUString popup_at_rect(weld::Widget* pParent, const tools::Rectangle& rRect,
161
                                   weld::Placement ePlace = weld::Placement::Under) override;
162
    virtual void set_sensitive(const OUString& rIdent, bool bSensitive) override;
163
    virtual bool get_sensitive(const OUString& rIdent) const override;
164
    virtual void set_active(const OUString& rIdent, bool bActive) override;
165
    virtual bool get_active(const OUString& rIdent) const override;
166
    virtual void set_label(const OUString& rIdent, const OUString& rLabel) override;
167
    virtual OUString get_label(const OUString& rIdent) const override;
168
    virtual void set_visible(const OUString& rIdent, bool bShow) override;
169
    virtual void clear() override;
170
    virtual void insert(int pos, const OUString& rId, const OUString& rStr,
171
                        const OUString* pIconName, VirtualDevice* pImageSurface,
172
                        const css::uno::Reference<css::graphic::XGraphic>& rImage,
173
                        TriState eCheckRadioFalse) override;
174
    virtual void insert_separator(int pos, const OUString& rId) override;
175
    virtual void set_item_help_id(const OUString& rIdent, const OUString& rHelpId) override;
176
    virtual void remove(const OUString& rId) override;
177
    virtual OUString get_id(int pos) const override;
178
    virtual int n_children() const override;
179
    PopupMenu* getMenu() const;
180
    virtual ~SalInstanceMenu() override;
181
};
182
183
class SalFlashAttention;
184
185
class VCL_DLLPUBLIC SalInstanceWidget : public virtual weld::Widget
186
{
187
protected:
188
    VclPtr<vcl::Window> m_xWidget;
189
    std::unique_ptr<SalFlashAttention> m_xFlashAttention;
190
    SalInstanceBuilder* m_pBuilder;
191
192
private:
193
    DECL_LINK(EventListener, VclWindowEvent&, void);
194
    DECL_LINK(KeyEventListener, VclWindowEvent&, bool);
195
    DECL_LINK(MouseEventListener, VclWindowEvent&, void);
196
    DECL_LINK(SettingsChangedHdl, VclWindowEvent&, void);
197
    DECL_LINK(MnemonicActivateHdl, vcl::Window&, bool);
198
199
    static void DoRecursivePaint(vcl::Window* pWindow, const Point& rPos, OutputDevice& rOutput);
200
201
    const bool m_bTakeOwnership;
202
    bool m_bEventListener;
203
    bool m_bKeyEventListener;
204
    bool m_bMouseEventListener;
205
    int m_nFreezeCount;
206
207
protected:
208
    void ensure_event_listener();
209
210
    // we want the ability to mark key events as handled, so use this variant
211
    // for those, we get all keystrokes in this case, so we will need to filter
212
    // them later
213
    void ensure_key_listener();
214
215
    // we want the ability to know about mouse events that happen in our children
216
    // so use this variant, we will need to filter them later
217
    void ensure_mouse_listener();
218
219
0
    bool IsFirstFreeze() const { return m_nFreezeCount == 0; }
220
0
    bool IsLastThaw() const { return m_nFreezeCount == 1; }
221
222
    virtual void HandleEventListener(VclWindowEvent& rEvent);
223
    virtual bool HandleKeyEventListener(VclWindowEvent& rEvent);
224
    virtual void HandleMouseEventListener(VclWindowEvent& rEvent);
225
226
public:
227
    SalInstanceWidget(vcl::Window* pWidget, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
228
229
    virtual void set_sensitive(bool sensitive) override;
230
231
    virtual bool get_sensitive() const override;
232
233
    virtual bool get_visible() const override;
234
235
    virtual bool is_visible() const override;
236
237
    virtual void set_can_focus(bool bCanFocus) override;
238
239
    virtual void grab_focus() override;
240
241
    virtual bool has_focus() const override;
242
243
    virtual bool is_active() const override;
244
245
    virtual bool has_child_focus() const override;
246
247
    virtual void show() override;
248
249
    virtual void hide() override;
250
251
    virtual void set_size_request(int nWidth, int nHeight) override;
252
253
    virtual Size get_size_request() const override;
254
255
    virtual Size get_preferred_size() const override;
256
257
    virtual float get_approximate_digit_width() const override;
258
259
    virtual int get_text_height() const override;
260
261
    virtual Size get_pixel_size(const OUString& rText) const override;
262
263
    virtual vcl::Font get_font() override;
264
265
    virtual OUString get_buildable_name() const override;
266
267
    virtual void set_buildable_name(const OUString& rId) override;
268
269
    virtual void set_help_id(const OUString& rId) override;
270
271
    virtual OUString get_help_id() const override;
272
273
    virtual void set_hexpand(bool bExpand) override;
274
275
    virtual bool get_hexpand() const override;
276
277
    virtual void set_vexpand(bool bExpand) override;
278
279
    virtual bool get_vexpand() const override;
280
281
    virtual void set_margin_top(int nMargin) override;
282
283
    virtual void set_margin_bottom(int nMargin) override;
284
285
    virtual void set_margin_start(int nMargin) override;
286
287
    virtual void set_margin_end(int nMargin) override;
288
289
    virtual int get_margin_top() const override;
290
291
    virtual int get_margin_bottom() const override;
292
293
    virtual int get_margin_start() const override;
294
295
    virtual int get_margin_end() const override;
296
297
    virtual void set_accessible_name(const OUString& rName) override;
298
299
    virtual void set_accessible_description(const OUString& rDescription) override;
300
301
    virtual OUString get_accessible_name() const override;
302
303
    virtual OUString get_accessible_description() const override;
304
305
    virtual OUString get_accessible_id() const override;
306
307
    virtual void set_accessible_relation_labeled_by(weld::Widget* pLabel) override;
308
309
    virtual void set_tooltip_text(const OUString& rTip) override;
310
311
    virtual OUString get_tooltip_text() const override;
312
313
    virtual void set_cursor_data(void* pData) override;
314
315
    virtual void connect_focus_in(const Link<Widget&, void>& rLink) override;
316
317
    virtual void connect_mnemonic_activate(const Link<Widget&, bool>& rLink) override;
318
319
    virtual void connect_focus_out(const Link<Widget&, void>& rLink) override;
320
321
    virtual void connect_size_allocate(const Link<const Size&, void>& rLink) override;
322
323
    virtual void connect_mouse_press(const Link<const MouseEvent&, bool>& rLink) override;
324
325
    virtual void connect_mouse_move(const Link<const MouseEvent&, bool>& rLink) override;
326
327
    virtual void connect_mouse_release(const Link<const MouseEvent&, bool>& rLink) override;
328
329
    virtual void connect_key_press(const Link<const KeyEvent&, bool>& rLink) override;
330
331
    virtual void connect_key_release(const Link<const KeyEvent&, bool>& rLink) override;
332
333
    virtual void connect_style_updated(const Link<Widget&, void>& rLink) override;
334
335
    virtual bool get_extents_relative_to(const Widget& rRelative, int& x, int& y, int& width,
336
                                         int& height) const override;
337
338
    virtual void grab_mouse() override;
339
340
    virtual bool has_mouse_grab() const override;
341
342
    virtual void release_mouse() override;
343
344
    virtual bool get_direction() const override;
345
346
    virtual void set_direction(bool bRTL) override;
347
348
    virtual void freeze() override;
349
350
    virtual void thaw() override;
351
352
    virtual void set_busy_cursor(bool bBusy) override;
353
354
    virtual std::unique_ptr<weld::Container> weld_parent() const override;
355
356
    virtual ~SalInstanceWidget() override;
357
358
    vcl::Window* getWidget() const;
359
360
    virtual void queue_resize() override;
361
362
    virtual void help_hierarchy_foreach(const std::function<bool(const OUString&)>& func) override;
363
364
    virtual OUString strip_mnemonic(const OUString& rLabel) const override;
365
    virtual OUString escape_ui_str(const OUString& rLabel) const override;
366
367
    virtual VclPtr<VirtualDevice> create_virtual_device() const override;
368
369
    virtual css::uno::Reference<css::datatransfer::dnd::XDropTarget> get_drop_target() override;
370
    virtual css::uno::Reference<css::datatransfer::clipboard::XClipboard>
371
    get_clipboard() const override;
372
373
    virtual void connect_get_property_tree(const Link<tools::JsonWriter&, void>& rLink) override;
374
375
    virtual void get_property_tree(tools::JsonWriter& rJsonWriter) override;
376
377
    virtual void call_attention_to() override;
378
379
    virtual void set_stack_background() override;
380
381
    virtual void set_title_background() override;
382
383
    virtual void set_toolbar_background() override;
384
385
    virtual void set_highlight_background() override;
386
387
    virtual void set_background(const Color& rColor) override;
388
389
    virtual void set_background() override;
390
391
    virtual void draw(OutputDevice& rOutput, const Point& rPos, const Size& rSizePixel) override;
392
393
    SystemWindow* getSystemWindow();
394
};
395
396
class SalInstanceLabel : public SalInstanceWidget, public virtual weld::Label
397
{
398
private:
399
    // Control instead of FixedText so we can also use this for
400
    // SelectableFixedText which is derived from Edit. We just typically need
401
    // [G|S]etText which exists in their shared baseclass
402
    VclPtr<Control> m_xLabel;
403
404
public:
405
    SalInstanceLabel(Control* pLabel, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
406
407
    virtual void set_label(const OUString& rText) override;
408
409
    virtual OUString get_label() const override;
410
411
    virtual void set_mnemonic_widget(Widget* pTarget) override;
412
413
    virtual void set_label_type(weld::LabelType eType) override;
414
415
    virtual void set_font(const vcl::Font& rFont) override;
416
417
    virtual void set_font_color(const Color& rColor) override;
418
};
419
420
class SalInstanceContainer : public SalInstanceWidget, public virtual weld::Container
421
{
422
    VclPtr<vcl::Window> m_xContainer;
423
424
public:
425
    SalInstanceContainer(vcl::Window* pContainer, SalInstanceBuilder* pBuilder,
426
                         bool bTakeOwnership);
427
    virtual void HandleEventListener(VclWindowEvent& rEvent) override;
428
    virtual void connect_container_focus_changed(const Link<Container&, void>& rLink) override;
429
    virtual void child_grab_focus() override;
430
    virtual void move(weld::Widget* pWidget, weld::Container* pNewParent) override;
431
    virtual css::uno::Reference<css::awt::XWindow> CreateChildFrame() override;
432
};
433
434
class SalInstanceWindow : public SalInstanceContainer, public virtual weld::Window
435
{
436
private:
437
    VclPtr<vcl::Window> m_xWindow;
438
439
    DECL_LINK(HelpHdl, vcl::Window&, bool);
440
441
    void override_child_help(vcl::Window* pParent);
442
443
    void clear_child_help(vcl::Window* pParent);
444
445
public:
446
    SalInstanceWindow(vcl::Window* pWindow, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
447
448
    virtual void set_title(const OUString& rTitle) override;
449
450
    virtual OUString get_title() const override;
451
452
    void help();
453
454
    virtual css::uno::Reference<css::awt::XWindow> GetXWindow() override;
455
456
    virtual void resize_to_request() override;
457
458
    virtual void window_move(int x, int y) override;
459
460
    virtual Size get_size() const override;
461
462
    virtual Point get_position() const override;
463
464
    virtual AbsoluteScreenPixelRectangle get_monitor_workarea() const override;
465
466
    virtual bool get_resizable() const override;
467
468
    virtual bool has_toplevel_focus() const override;
469
470
    virtual void present() override;
471
472
    virtual void set_window_state(const OUString& rStr) override;
473
474
    virtual OUString get_window_state(vcl::WindowDataMask nMask) const override;
475
476
    virtual SystemEnvData get_system_data() const override;
477
478
    virtual weld::ScreenShotCollection collect_screenshot_data() override;
479
480
    virtual VclPtr<VirtualDevice> screenshot() override;
481
482
    virtual const vcl::ILibreOfficeKitNotifier* GetLOKNotifier() override;
483
484
    virtual ~SalInstanceWindow() override;
485
};
486
487
class SalInstanceDialog : public SalInstanceWindow, public virtual weld::Dialog
488
{
489
protected:
490
    VclPtr<::Dialog> m_xDialog;
491
492
private:
493
    // for calc ref dialog that shrink to range selection widgets and resize back
494
    VclPtr<vcl::Window> m_xRefEdit;
495
    std::vector<VclPtr<vcl::Window>> m_aHiddenWidgets; // vector of hidden Controls
496
    tools::Long m_nOldEditWidthReq; // Original width request of the input field
497
    sal_Int32 m_nOldBorderWidth; // border width for expanded dialog
498
499
    DECL_LINK(PopupScreenShotMenuHdl, const CommandEvent&, bool);
500
501
    void recursively_unset_default_buttons();
502
503
    void implResetDefault(const vcl::Window* _pWindow);
504
505
public:
506
    SalInstanceDialog(::Dialog* pDialog, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
507
508
    virtual bool runAsync(std::shared_ptr<weld::DialogController> const& rxOwner,
509
                          const std::function<void(sal_Int32)>& rEndDialogFn) override;
510
511
    virtual bool runAsync(std::shared_ptr<Dialog> const& rxSelf,
512
                          const std::function<void(sal_Int32)>& rEndDialogFn) override;
513
514
    virtual void collapse(weld::Widget& rEdit, weld::Widget* pButton) override;
515
516
    virtual void undo_collapse() override;
517
518
    virtual void
519
    SetInstallLOKNotifierHdl(const Link<void*, vcl::ILibreOfficeKitNotifier*>& rLink) override;
520
521
    virtual int run() override;
522
523
    virtual void response(int nResponse) override;
524
525
    virtual void add_button(const OUString& rText, int nResponse,
526
                            const OUString& rHelpId = {}) override;
527
528
    virtual void set_modal(bool bModal) override;
529
530
    virtual bool get_modal() const override;
531
532
    virtual void set_centered_on_parent(bool /*bTrackGeometryRequests*/) override;
533
534
    virtual std::unique_ptr<weld::Button> weld_button_for_response(int nResponse) override;
535
536
    virtual void set_default_response(int nResponse) override;
537
538
    virtual std::unique_ptr<weld::Container> weld_content_area() override;
539
540
    virtual void change_default_button(weld::Button* pOld, weld::Button* pNew) override;
541
542
    virtual bool is_default_button(const weld::Button* pCandidate) const override;
543
544
0
    ::Dialog* getDialog() { return m_xDialog; }
545
};
546
547
class SalInstanceAssistant : public SalInstanceDialog, public virtual weld::Assistant
548
{
549
protected:
550
    VclPtr<vcl::RoadmapWizard> m_xWizard;
551
552
private:
553
    std::vector<std::unique_ptr<SalInstanceContainer>> m_aPages;
554
    std::vector<VclPtr<TabPage>> m_aAddedPages;
555
    std::vector<int> m_aIds;
556
    std::vector<VclPtr<VclGrid>> m_aAddedGrids;
557
    Idle m_aUpdateRoadmapIdle;
558
559
    int find_page(std::u16string_view rIdent) const;
560
    int find_id(int nId) const;
561
562
    DECL_LINK(OnRoadmapItemSelected, LinkParamNone*, void);
563
    DECL_LINK(UpdateRoadmap_Hdl, Timer*, void);
564
565
public:
566
    SalInstanceAssistant(vcl::RoadmapWizard* pDialog, SalInstanceBuilder* pBuilder,
567
                         bool bTakeOwnership);
568
    virtual int get_current_page() const override;
569
    virtual int get_n_pages() const override;
570
    virtual OUString get_page_ident(int nPage) const override;
571
    virtual OUString get_current_page_ident() const override;
572
    virtual void do_set_current_page(int nPage) override;
573
    virtual void do_set_current_page(const OUString& rIdent) override;
574
    virtual void do_set_page_index(const OUString& rIdent, int nNewIndex) override;
575
    virtual weld::Container* append_page(const OUString& rIdent) override;
576
    virtual OUString get_page_title(const OUString& rIdent) const override;
577
    virtual void do_set_page_title(const OUString& rIdent, const OUString& rTitle) override;
578
    virtual void do_set_page_sensitive(const OUString& rIdent, bool bSensitive) override;
579
    virtual void set_page_side_help_id(const OUString& rHelpId) override;
580
    virtual void set_page_side_image(const OUString& rImage) override;
581
    std::unique_ptr<weld::Button> weld_button_for_response(int nResponse) override;
582
583
    virtual ~SalInstanceAssistant() override;
584
};
585
586
class WeldTextFilter final : public TextFilter
587
{
588
private:
589
    Link<OUString&, bool>& m_rInsertTextHdl;
590
591
public:
592
    WeldTextFilter(Link<OUString&, bool>& rInsertTextHdl);
593
594
    virtual OUString filter(const OUString& rText) override;
595
};
596
597
class SalInstanceEntry : public SalInstanceWidget, public virtual weld::Entry
598
{
599
private:
600
    VclPtr<::Edit> m_xEntry;
601
602
    DECL_LINK(ChangeHdl, Edit&, void);
603
    DECL_LINK(CursorListener, VclWindowEvent&, void);
604
    DECL_LINK(ActivateHdl, Edit&, bool);
605
606
    WeldTextFilter m_aTextFilter;
607
608
public:
609
    SalInstanceEntry(::Edit* pEntry, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
610
611
    virtual void do_set_text(const OUString& rText) override;
612
613
    virtual OUString get_text() const override;
614
615
    virtual void set_width_chars(int nChars) override;
616
617
    virtual int get_width_chars() const override;
618
619
    virtual void set_max_length(int nChars) override;
620
621
    virtual void do_select_region(int nStartPos, int nEndPos) override;
622
623
    bool get_selection_bounds(int& rStartPos, int& rEndPos) override;
624
625
    virtual void replace_selection(const OUString& rText) override;
626
627
    virtual void do_set_position(int nCursorPos) override;
628
629
    virtual int get_position() const override;
630
631
    virtual void set_editable(bool bEditable) override;
632
633
    virtual bool get_editable() const override;
634
635
    virtual void set_visibility(bool bVisible) override;
636
637
    virtual void set_overwrite_mode(bool bOn) override;
638
639
    virtual bool get_overwrite_mode() const override;
640
641
    virtual void set_message_type(weld::EntryMessageType eType) override;
642
643
    virtual void set_font(const vcl::Font& rFont) override;
644
645
    virtual void set_font_color(const Color& rColor) override;
646
647
    virtual void connect_cursor_position(const Link<Entry&, void>& rLink) override;
648
649
    virtual void set_placeholder_text(const OUString& rText) override;
650
651
    Edit& getEntry();
652
653
    void fire_signal_changed();
654
655
    virtual void cut_clipboard() override;
656
657
    virtual void copy_clipboard() override;
658
659
    virtual void paste_clipboard() override;
660
661
    virtual void set_alignment(TxtAlign eXAlign) override;
662
663
    virtual ~SalInstanceEntry() override;
664
};
665
666
class SalInstanceSpinButton : public SalInstanceEntry, public virtual weld::SpinButton
667
{
668
    VclPtr<FormattedField> m_xButton;
669
670
protected:
671
    Formatter& m_rFormatter;
672
673
private:
674
    DECL_LINK(UpDownHdl, SpinField&, void);
675
    DECL_LINK(LoseFocusHdl, Control&, void);
676
    DECL_LINK(OutputHdl, double, std::optional<OUString>);
677
    DECL_LINK(InputHdl, const OUString&, Formatter::ParseResult);
678
    DECL_LINK(ActivateHdl, Edit&, bool);
679
680
public:
681
    SalInstanceSpinButton(FormattedField* pButton, SalInstanceBuilder* pBuilder,
682
                          bool bTakeOwnership);
683
684
    virtual double get_floating_point_value() const override;
685
686
    virtual void set_floating_point_value(double fValue) override;
687
688
    virtual void set_floating_point_range(double fMin, double fMax) override;
689
690
    virtual void get_floating_point_range(double& rMin, double& rMax) const override;
691
692
    virtual void set_floating_point_increments(double fStep, double /*fPage*/) override;
693
694
    virtual void get_floating_point_increments(double& rStep, double& rPage) const override;
695
696
    virtual void set_digits(unsigned int digits) override;
697
698
    // SpinButton may be comprised of multiple subwidgets, consider the lot as
699
    // one thing for focus
700
    virtual bool has_focus() const override;
701
702
    //off by default for direct SpinButtons, MetricSpinButton enables it
703
    void SetUseThousandSep();
704
705
    virtual unsigned int get_digits() const override;
706
707
    virtual ~SalInstanceSpinButton() override;
708
};
709
710
//ComboBox and ListBox have similar apis, ComboBoxes in LibreOffice have an edit box and ListBoxes
711
//don't. This distinction isn't there in Gtk. Use a template to sort this problem out.
712
template <class vcl_type>
713
class SalInstanceComboBox : public SalInstanceWidget, public virtual weld::ComboBox
714
{
715
protected:
716
    // owner for ListBox/ComboBox UserData
717
    std::vector<std::shared_ptr<OUString>> m_aUserData;
718
    VclPtr<vcl_type> m_xComboBox;
719
    ScopedVclPtr<MenuButton> m_xMenuButton;
720
    OUString m_sMenuButtonRow;
721
722
public:
723
    SalInstanceComboBox(vcl_type* pComboBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
724
0
        : SalInstanceWidget(pComboBox, pBuilder, bTakeOwnership)
725
0
        , m_xComboBox(pComboBox)
726
0
    {
727
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::SalInstanceComboBox(ListBox*, SalInstanceBuilder*, bool)
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::SalInstanceComboBox(ComboBox*, SalInstanceBuilder*, bool)
728
729
    virtual int get_active() const override
730
0
    {
731
0
        const sal_Int32 nRet = m_xComboBox->GetSelectedEntryPos();
732
0
        if (nRet == LISTBOX_ENTRY_NOTFOUND)
733
0
            return -1;
734
0
        return nRet;
735
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::get_active() const
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::get_active() const
736
737
    const OUString* getEntryData(int index) const
738
0
    {
739
0
        return static_cast<const OUString*>(m_xComboBox->GetEntryData(index));
740
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::getEntryData(int) const
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::getEntryData(int) const
741
742
    // ComboBoxes are comprised of multiple subwidgets, consider the lot as
743
    // one thing for focus
744
    virtual bool has_focus() const override
745
0
    {
746
0
        return m_xWidget->HasChildPathFocus()
747
0
               || (m_xMenuButton && (m_xMenuButton->HasFocus() || m_xMenuButton->InPopupMode()));
748
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::has_focus() const
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::has_focus() const
749
750
    virtual OUString get_active_id() const override
751
0
    {
752
0
        sal_Int32 nPos = m_xComboBox->GetSelectedEntryPos();
753
0
        const OUString* pRet;
754
0
        if (nPos != LISTBOX_ENTRY_NOTFOUND)
755
0
            pRet = getEntryData(m_xComboBox->GetSelectedEntryPos());
756
0
        else
757
0
            pRet = nullptr;
758
0
        if (!pRet)
759
0
            return OUString();
760
0
        return *pRet;
761
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::get_active_id() const
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::get_active_id() const
762
763
    virtual void set_active_id(const OUString& rStr) override
764
0
    {
765
0
        for (int i = 0; i < get_count(); ++i)
766
0
        {
767
0
            const OUString* pId = getEntryData(i);
768
0
            if (!pId)
769
0
                continue;
770
0
            if (*pId == rStr)
771
0
                m_xComboBox->SelectEntryPos(i);
772
0
        }
773
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::set_active_id(rtl::OUString const&)
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::set_active_id(rtl::OUString const&)
774
775
    virtual void set_active(int pos) override
776
0
    {
777
0
        assert(m_xComboBox->IsUpdateMode()
778
0
               && "don't set_active when frozen, set_active after thaw. Note selection doesn't "
779
0
                  "survive a "
780
0
                  "freeze");
781
0
        if (pos == -1)
782
0
        {
783
0
            m_xComboBox->SetNoSelection();
784
0
            return;
785
0
        }
786
0
        m_xComboBox->SelectEntryPos(pos);
787
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::set_active(int)
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::set_active(int)
788
789
0
    virtual OUString get_text(int pos) const override { return m_xComboBox->GetEntry(pos); }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::get_text(int) const
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::get_text(int) const
790
791
    virtual OUString get_id(int pos) const override
792
0
    {
793
0
        const OUString* pRet = getEntryData(pos);
794
0
        if (!pRet)
795
0
            return OUString();
796
0
        return *pRet;
797
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::get_id(int) const
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::get_id(int) const
798
799
    virtual void set_id(int row, const OUString& rId) override
800
0
    {
801
0
        m_aUserData.emplace_back(std::make_unique<OUString>(rId));
802
0
        m_xComboBox->SetEntryData(row, m_aUserData.back().get());
803
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::set_id(int, rtl::OUString const&)
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::set_id(int, rtl::OUString const&)
804
805
    virtual void insert_vector(const std::vector<weld::ComboBoxEntry>& rItems,
806
                               bool bKeepExisting) override
807
0
    {
808
0
        freeze();
809
0
        if (!bKeepExisting)
810
0
            clear();
811
0
        for (const auto& rItem : rItems)
812
0
        {
813
0
            insert(-1, rItem.sString, rItem.sId.isEmpty() ? nullptr : &rItem.sId,
814
0
                   rItem.sImage.isEmpty() ? nullptr : &rItem.sImage, nullptr);
815
0
        }
816
0
        thaw();
817
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::insert_vector(std::__1::vector<weld::ComboBoxEntry, std::__1::allocator<weld::ComboBoxEntry> > const&, bool)
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::insert_vector(std::__1::vector<weld::ComboBoxEntry, std::__1::allocator<weld::ComboBoxEntry> > const&, bool)
818
819
0
    virtual int get_count() const override { return m_xComboBox->GetEntryCount(); }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::get_count() const
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::get_count() const
820
821
    virtual int find_text(const OUString& rStr) const override
822
0
    {
823
0
        const sal_Int32 nRet = m_xComboBox->GetEntryPos(rStr);
824
0
        if (nRet == LISTBOX_ENTRY_NOTFOUND)
825
0
            return -1;
826
0
        return nRet;
827
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::find_text(rtl::OUString const&) const
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::find_text(rtl::OUString const&) const
828
829
    virtual int find_id(const OUString& rStr) const override
830
0
    {
831
0
        for (int i = 0; i < get_count(); ++i)
832
0
        {
833
0
            const OUString* pId = getEntryData(i);
834
0
            if (!pId)
835
0
                continue;
836
0
            if (*pId == rStr)
837
0
                return i;
838
0
        }
839
0
        return -1;
840
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::find_id(rtl::OUString const&) const
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::find_id(rtl::OUString const&) const
841
842
    virtual void clear() override
843
0
    {
844
0
        m_xComboBox->Clear();
845
0
        m_aUserData.clear();
846
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::clear()
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::clear()
847
848
    virtual void make_sorted() override
849
0
    {
850
0
        m_xComboBox->SetStyle(m_xComboBox->GetStyle() | WB_SORT);
851
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::make_sorted()
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::make_sorted()
852
853
0
    virtual bool get_popup_shown() const override { return m_xComboBox->IsInDropDown(); }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::get_popup_shown() const
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::get_popup_shown() const
854
855
    virtual void connect_popup_toggled(const Link<ComboBox&, void>& rLink) override
856
0
    {
857
0
        weld::ComboBox::connect_popup_toggled(rLink);
858
0
        ensure_event_listener();
859
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::connect_popup_toggled(Link<weld::ComboBox&, void> const&)
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::connect_popup_toggled(Link<weld::ComboBox&, void> const&)
860
861
    void call_signal_custom_render(UserDrawEvent* pEvent)
862
0
    {
863
0
        vcl::RenderContext* pRenderContext = pEvent->GetRenderContext();
864
0
        auto nPos = pEvent->GetItemId();
865
0
        const tools::Rectangle& rRect = pEvent->GetRect();
866
0
        const OUString sId = get_id(nPos);
867
0
        signal_custom_render(*pRenderContext, rRect, pEvent->IsSelected(), sId);
868
0
        m_xComboBox->DrawEntry(*pEvent); // draw separator
869
870
0
        if (m_xMenuButton && m_xMenuButton->IsVisible() && m_sMenuButtonRow == sId)
871
0
        {
872
0
            vcl::Window* pEventWindow = m_xComboBox->GetMainWindow();
873
0
            if (m_xMenuButton->GetParent() != pEventWindow)
874
0
                m_xMenuButton->SetParent(pEventWindow);
875
0
            int nButtonWidth = get_menu_button_width();
876
0
            m_xMenuButton->SetSizePixel(Size(nButtonWidth, rRect.GetHeight()));
877
0
            m_xMenuButton->SetPosPixel(Point(rRect.GetWidth() - nButtonWidth, rRect.Top()));
878
0
        }
879
0
    }
880
881
    virtual void set_item_menu(const OUString& rIdent, weld::Menu* pMenu) override
882
0
    {
883
0
        SalInstanceMenu* pInstanceMenu = dynamic_cast<SalInstanceMenu*>(pMenu);
884
885
0
        PopupMenu* pPopup = pInstanceMenu ? pInstanceMenu->getMenu() : nullptr;
886
887
0
        if (!m_xMenuButton)
888
0
            m_xMenuButton
889
0
                = VclPtr<MenuButton>::Create(m_xComboBox, WB_FLATBUTTON | WB_NOPOINTERFOCUS);
890
891
0
        m_xMenuButton->SetPopupMenu(pPopup, false);
892
0
        m_xMenuButton->Show(pPopup != nullptr);
893
0
        m_sMenuButtonRow = rIdent;
894
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::set_item_menu(rtl::OUString const&, weld::Menu*)
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::set_item_menu(rtl::OUString const&, weld::Menu*)
895
896
    int get_menu_button_width() const override
897
0
    {
898
0
        OutputDevice* pDefault = Application::GetDefaultDevice();
899
0
        return 20 * (pDefault ? pDefault->GetDPIScaleFactor() : 1.0);
900
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::get_menu_button_width() const
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::get_menu_button_width() const
901
902
0
    void set_max_drop_down_rows(int nRows) override { m_xComboBox->SetDropDownLineCount(nRows); }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::set_max_drop_down_rows(int)
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::set_max_drop_down_rows(int)
903
904
    void CallHandleEventListener(VclWindowEvent& rEvent)
905
0
    {
906
0
        if (rEvent.GetId() == VclEventId::DropdownPreOpen
907
0
            || rEvent.GetId() == VclEventId::DropdownClose)
908
0
        {
909
0
            signal_popup_toggled();
910
0
            return;
911
0
        }
912
0
        SalInstanceWidget::HandleEventListener(rEvent);
913
0
    }
Unexecuted instantiation: SalInstanceComboBox<ListBox>::CallHandleEventListener(VclWindowEvent&)
Unexecuted instantiation: SalInstanceComboBox<ComboBox>::CallHandleEventListener(VclWindowEvent&)
914
};
915
916
class SalInstanceComboBoxWithoutEdit : public SalInstanceComboBox<ListBox>
917
{
918
private:
919
    DECL_LINK(SelectHdl, ListBox&, void);
920
921
public:
922
    SalInstanceComboBoxWithoutEdit(ListBox* pListBox, SalInstanceBuilder* pBuilder,
923
                                   bool bTakeOwnership);
924
925
    virtual OUString get_active_text() const override;
926
927
    virtual void remove(int pos) override;
928
929
    virtual void insert(int pos, const OUString& rStr, const OUString* pId,
930
                        const OUString* pIconName, VirtualDevice* pImageSurface) override;
931
932
    virtual void insert_separator(int pos, const OUString& /*rId*/) override;
933
934
    virtual bool has_entry() const override;
935
936
    virtual bool changed_by_direct_pick() const override;
937
938
    virtual void set_entry_message_type(weld::EntryMessageType /*eType*/) override;
939
940
    virtual void set_entry_text(const OUString& /*rText*/) override;
941
942
    virtual void select_entry_region(int /*nStartPos*/, int /*nEndPos*/) override;
943
944
    virtual bool get_entry_selection_bounds(int& /*rStartPos*/, int& /*rEndPos*/) override;
945
946
    virtual void set_entry_width_chars(int /*nChars*/) override;
947
948
    virtual void set_entry_max_length(int /*nChars*/) override;
949
950
    virtual void set_entry_completion(bool, bool bCaseSensitive = false) override;
951
952
    virtual void set_entry_placeholder_text(const OUString&) override;
953
954
    virtual void set_entry_editable(bool bEditable) override;
955
956
    virtual void cut_entry_clipboard() override;
957
958
    virtual void copy_entry_clipboard() override;
959
960
    virtual void paste_entry_clipboard() override;
961
962
    virtual void set_font(const vcl::Font& rFont) override;
963
964
    virtual void set_entry_font(const vcl::Font&) override;
965
966
    virtual vcl::Font get_entry_font() override;
967
968
    virtual void set_custom_renderer(bool bOn) override;
969
970
    virtual int get_max_mru_count() const override;
971
972
    virtual void set_max_mru_count(int) override;
973
974
    virtual OUString get_mru_entries() const override;
975
976
    virtual void set_mru_entries(const OUString&) override;
977
978
    virtual void HandleEventListener(VclWindowEvent& rEvent) override;
979
980
    virtual ~SalInstanceComboBoxWithoutEdit() override;
981
};
982
983
class SalInstanceComboBoxWithEdit : public SalInstanceComboBox<ComboBox>
984
{
985
private:
986
    DECL_LINK(ChangeHdl, Edit&, void);
987
    DECL_LINK(EntryActivateHdl, Edit&, bool);
988
    DECL_LINK(SelectHdl, ::ComboBox&, void);
989
    DECL_LINK(UserDrawHdl, UserDrawEvent*, void);
990
    WeldTextFilter m_aTextFilter;
991
    bool m_bInSelect;
992
993
public:
994
    SalInstanceComboBoxWithEdit(::ComboBox* pComboBox, SalInstanceBuilder* pBuilder,
995
                                bool bTakeOwnership);
996
997
    virtual bool has_entry() const override;
998
999
    virtual bool changed_by_direct_pick() const override;
1000
1001
    virtual void set_entry_message_type(weld::EntryMessageType eType) override;
1002
1003
    virtual OUString get_active_text() const override;
1004
1005
    virtual void remove(int pos) override;
1006
1007
    virtual void insert(int pos, const OUString& rStr, const OUString* pId,
1008
                        const OUString* pIconName, VirtualDevice* pImageSurface) override;
1009
1010
    virtual void insert_separator(int pos, const OUString& /*rId*/) override;
1011
1012
    virtual void set_entry_text(const OUString& rText) override;
1013
1014
    virtual void set_entry_width_chars(int nChars) override;
1015
1016
    virtual void set_entry_max_length(int nChars) override;
1017
1018
    virtual void set_entry_completion(bool bEnable, bool bCaseSensitive = false) override;
1019
1020
    virtual void set_entry_placeholder_text(const OUString& rText) override;
1021
1022
    virtual void set_entry_editable(bool bEditable) override;
1023
1024
    virtual void cut_entry_clipboard() override;
1025
1026
    virtual void copy_entry_clipboard() override;
1027
1028
    virtual void paste_entry_clipboard() override;
1029
1030
    virtual void select_entry_region(int nStartPos, int nEndPos) override;
1031
1032
    virtual bool get_entry_selection_bounds(int& rStartPos, int& rEndPos) override;
1033
1034
    virtual void set_font(const vcl::Font& rFont) override;
1035
1036
    virtual void set_entry_font(const vcl::Font& rFont) override;
1037
1038
    virtual vcl::Font get_entry_font() override;
1039
1040
    virtual void set_custom_renderer(bool bOn) override;
1041
1042
    virtual int get_max_mru_count() const override;
1043
1044
    virtual void set_max_mru_count(int nCount) override;
1045
1046
    virtual OUString get_mru_entries() const override;
1047
1048
    virtual void set_mru_entries(const OUString& rEntries) override;
1049
1050
    virtual void HandleEventListener(VclWindowEvent& rEvent) override;
1051
1052
    virtual void call_attention_to() override;
1053
1054
    virtual ~SalInstanceComboBoxWithEdit() override;
1055
};
1056
1057
class SalInstanceButton : public SalInstanceWidget, public virtual weld::Button
1058
{
1059
private:
1060
    VclPtr<::Button> m_xButton;
1061
    Link<::Button*, void> const m_aOldClickHdl;
1062
1063
    DECL_LINK(ClickHdl, ::Button*, void);
1064
1065
public:
1066
    SalInstanceButton(::Button* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1067
1068
    virtual void set_label(const OUString& rText) override;
1069
1070
    virtual void set_image(VirtualDevice* pDevice) override;
1071
1072
    virtual void set_image(const css::uno::Reference<css::graphic::XGraphic>& rImage) override;
1073
1074
    virtual void set_from_icon_name(const OUString& rIconName) override;
1075
1076
    virtual OUString get_label() const override;
1077
1078
    virtual void set_font(const vcl::Font& rFont) override;
1079
1080
    virtual void set_custom_button(VirtualDevice* pDevice) override;
1081
1082
    virtual ~SalInstanceButton() override;
1083
};
1084
1085
class SalInstanceToggleButton : public SalInstanceButton, public virtual weld::ToggleButton
1086
{
1087
private:
1088
    VclPtr<PushButton> m_xToggleButton;
1089
1090
    DECL_LINK(ToggleListener, VclWindowEvent&, void);
1091
1092
public:
1093
    SalInstanceToggleButton(PushButton* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
1094
0
        : SalInstanceButton(pButton, pBuilder, bTakeOwnership)
1095
0
        , m_xToggleButton(pButton)
1096
0
    {
1097
0
        m_xToggleButton->setToggleButton(true);
1098
0
    }
Unexecuted instantiation: SalInstanceToggleButton::SalInstanceToggleButton(PushButton*, SalInstanceBuilder*, bool)
Unexecuted instantiation: SalInstanceToggleButton::SalInstanceToggleButton(PushButton*, SalInstanceBuilder*, bool)
1099
1100
    virtual void connect_toggled(const Link<Toggleable&, void>& rLink) override
1101
0
    {
1102
0
        assert(!m_aToggleHdl.IsSet());
1103
0
        m_xToggleButton->AddEventListener(LINK(this, SalInstanceToggleButton, ToggleListener));
1104
0
        weld::ToggleButton::connect_toggled(rLink);
1105
0
    }
1106
1107
0
    virtual void do_set_active(bool active) override { m_xToggleButton->Check(active); }
1108
1109
0
    virtual bool get_active() const override { return m_xToggleButton->IsChecked(); }
1110
1111
    virtual ~SalInstanceToggleButton() override
1112
0
    {
1113
0
        if (m_aToggleHdl.IsSet())
1114
0
            m_xToggleButton->RemoveEventListener(
1115
0
                LINK(this, SalInstanceToggleButton, ToggleListener));
1116
0
    }
1117
};
1118
1119
class SalInstanceNotebook : public SalInstanceWidget, public virtual weld::Notebook
1120
{
1121
private:
1122
    VclPtr<TabControl> m_xNotebook;
1123
    /// Constructed on-demand.
1124
    mutable std::map<OUString, std::shared_ptr<SalInstanceContainer>> m_aPages;
1125
    std::map<OUString, std::pair<VclPtr<TabPage>, VclPtr<VclGrid>>> m_aAddedPages;
1126
1127
    DECL_LINK(DeactivatePageHdl, TabControl*, bool);
1128
    DECL_LINK(ActivatePageHdl, TabControl*, void);
1129
1130
public:
1131
    SalInstanceNotebook(TabControl* pNotebook, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1132
1133
    virtual int get_current_page() const override;
1134
1135
    virtual int get_page_index(const OUString& rIdent) const override;
1136
1137
    virtual OUString get_page_ident(int nPage) const override;
1138
1139
    virtual OUString get_current_page_ident() const override;
1140
1141
    virtual weld::Container* get_page(const OUString& rIdent) const override;
1142
1143
    virtual void set_current_page(int nPage) override;
1144
1145
    virtual void set_current_page(const OUString& rIdent) override;
1146
1147
    virtual void remove_page(const OUString& rIdent) override;
1148
1149
    virtual void insert_page(const OUString& rIdent, const OUString& rLabel, int nPos,
1150
                             const OUString* pIconName = nullptr) override;
1151
1152
    virtual int get_n_pages() const override;
1153
1154
    virtual OUString get_tab_label_text(const OUString& rIdent) const override;
1155
1156
    virtual void set_tab_label_text(const OUString& rIdent, const OUString& rText) override;
1157
1158
    virtual void set_show_tabs(bool bShow) override;
1159
1160
    virtual ~SalInstanceNotebook() override;
1161
};
1162
1163
class SalInstanceMessageDialog : public SalInstanceDialog, public virtual weld::MessageDialog
1164
{
1165
protected:
1166
    VclPtr<::MessageDialog> m_xMessageDialog;
1167
1168
public:
1169
    SalInstanceMessageDialog(::MessageDialog* pDialog, SalInstanceBuilder* pBuilder,
1170
                             bool bTakeOwnership);
1171
1172
    virtual void set_primary_text(const OUString& rText) override;
1173
1174
    virtual OUString get_primary_text() const override;
1175
1176
    virtual void set_secondary_text(const OUString& rText) override;
1177
1178
    virtual OUString get_secondary_text() const override;
1179
1180
    virtual std::unique_ptr<weld::Container> weld_message_area() override;
1181
};
1182
1183
class SalInstanceLinkButton : public SalInstanceWidget, public virtual weld::LinkButton
1184
{
1185
private:
1186
    VclPtr<FixedHyperlink> m_xButton;
1187
    Link<FixedHyperlink&, void> m_aOrigClickHdl;
1188
1189
    DECL_LINK(ClickHdl, FixedHyperlink&, void);
1190
1191
public:
1192
    SalInstanceLinkButton(FixedHyperlink* pButton, SalInstanceBuilder* pBuilder,
1193
                          bool bTakeOwnership)
1194
0
        : SalInstanceWidget(pButton, pBuilder, bTakeOwnership)
1195
0
        , m_xButton(pButton)
1196
0
    {
1197
0
        m_aOrigClickHdl = m_xButton->GetClickHdl();
1198
0
        m_xButton->SetClickHdl(LINK(this, SalInstanceLinkButton, ClickHdl));
1199
0
    }
Unexecuted instantiation: SalInstanceLinkButton::SalInstanceLinkButton(FixedHyperlink*, SalInstanceBuilder*, bool)
Unexecuted instantiation: SalInstanceLinkButton::SalInstanceLinkButton(FixedHyperlink*, SalInstanceBuilder*, bool)
1200
1201
0
    virtual void set_label(const OUString& rText) override { m_xButton->SetText(rText); }
1202
1203
0
    virtual OUString get_label() const override { return m_xButton->GetText(); }
1204
1205
0
    virtual void set_uri(const OUString& rUri) override { m_xButton->SetURL(rUri); }
1206
1207
0
    virtual OUString get_uri() const override { return m_xButton->GetURL(); }
1208
1209
    virtual void set_label_wrap(bool wrap) override;
1210
1211
0
    virtual ~SalInstanceLinkButton() override { m_xButton->SetClickHdl(m_aOrigClickHdl); }
1212
};
1213
1214
class SalInstanceCheckButton : public SalInstanceButton, public virtual weld::CheckButton
1215
{
1216
private:
1217
    VclPtr<CheckBox> m_xCheckButton;
1218
1219
    DECL_LINK(ToggleHdl, CheckBox&, void);
1220
1221
public:
1222
    SalInstanceCheckButton(CheckBox* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1223
1224
    virtual void do_set_state(TriState eState) override;
1225
1226
    virtual TriState get_state() const override;
1227
1228
0
    virtual void set_label(const OUString& rText) override { SalInstanceButton::set_label(rText); }
1229
1230
0
    virtual OUString get_label() const override { return SalInstanceButton::get_label(); }
1231
1232
    virtual void set_label_wrap(bool wrap) override;
1233
1234
    virtual ~SalInstanceCheckButton() override;
1235
};
1236
1237
class SalInstanceDrawingArea : public SalInstanceWidget, public virtual weld::DrawingArea
1238
{
1239
private:
1240
    VclPtr<VclDrawingArea> m_xDrawingArea;
1241
1242
    typedef std::pair<vcl::RenderContext&, const tools::Rectangle&> target_and_area;
1243
    DECL_LINK(PaintHdl, target_and_area, void);
1244
    DECL_LINK(ResizeHdl, const Size&, void);
1245
    DECL_LINK(MousePressHdl, const MouseEvent&, bool);
1246
    DECL_LINK(MouseMoveHdl, const MouseEvent&, bool);
1247
    DECL_LINK(MouseReleaseHdl, const MouseEvent&, bool);
1248
    DECL_LINK(KeyPressHdl, const KeyEvent&, bool);
1249
    DECL_LINK(KeyReleaseHdl, const KeyEvent&, bool);
1250
    DECL_LINK(StyleUpdatedHdl, VclDrawingArea&, void);
1251
    DECL_LINK(CommandHdl, const CommandEvent&, bool);
1252
    DECL_LINK(QueryTooltipHdl, tools::Rectangle&, OUString);
1253
    DECL_LINK(GetSurroundingHdl, OUString&, int);
1254
    DECL_LINK(DeleteSurroundingHdl, const Selection&, bool);
1255
    DECL_LINK(StartDragHdl, VclDrawingArea*, bool);
1256
1257
    // SalInstanceWidget has a generic listener for all these
1258
    // events, ignore the ones we have specializations for
1259
    // in VclDrawingArea
1260
    virtual void HandleEventListener(VclWindowEvent& rEvent) override;
1261
1262
    virtual void HandleMouseEventListener(VclWindowEvent& rEvent) override;
1263
1264
    virtual bool HandleKeyEventListener(VclWindowEvent& /*rEvent*/) override;
1265
1266
public:
1267
    SalInstanceDrawingArea(VclDrawingArea* pDrawingArea, SalInstanceBuilder* pBuilder,
1268
                           const rtl::Reference<comphelper::OAccessible>& rAlly,
1269
                           FactoryFunction pUITestFactoryFunction, void* pUserData,
1270
                           bool bTakeOwnership);
1271
1272
    virtual void queue_draw() override;
1273
1274
    virtual void queue_draw_area(int x, int y, int width, int height) override;
1275
1276
    virtual void connect_size_allocate(const Link<const Size&, void>& rLink) override;
1277
1278
    virtual void connect_key_press(const Link<const KeyEvent&, bool>& rLink) override;
1279
1280
    virtual void connect_key_release(const Link<const KeyEvent&, bool>& rLink) override;
1281
1282
    virtual void connect_style_updated(const Link<Widget&, void>& rLink) override;
1283
1284
    virtual void set_cursor(PointerStyle ePointerStyle) override;
1285
1286
    virtual Point get_pointer_position() const override;
1287
1288
    virtual void set_input_context(const InputContext& rInputContext) override;
1289
1290
    virtual void im_context_set_cursor_location(const tools::Rectangle& rCursorRect,
1291
                                                int nExtTextInputWidth) override;
1292
1293
    virtual rtl::Reference<comphelper::OAccessible> get_accessible_parent() override;
1294
1295
    virtual a11yrelationset get_accessible_relation_set() override;
1296
1297
    virtual AbsoluteScreenPixelPoint get_accessible_location_on_screen() override;
1298
1299
    virtual void enable_drag_source(rtl::Reference<TransferDataContainer>& rHelper,
1300
                                    sal_uInt8 eDNDConstants) override;
1301
1302
    virtual ~SalInstanceDrawingArea() override;
1303
1304
    virtual OutputDevice& get_ref_device() override;
1305
1306
    virtual void click(const Point& rPos) override;
1307
1308
    virtual void dblclick(const Point& rPos) override;
1309
1310
    virtual void mouse_up(const Point& rPos) override;
1311
1312
    virtual void mouse_down(const Point& rPos) override;
1313
1314
    virtual void mouse_move(const Point& rPos) override;
1315
};
1316
1317
class SalInstanceToolbar : public SalInstanceWidget, public virtual weld::Toolbar
1318
{
1319
protected:
1320
    VclPtr<ToolBox> m_xToolBox;
1321
    std::map<ToolBoxItemId, VclPtr<vcl::Window>> m_aFloats;
1322
    std::map<ToolBoxItemId, VclPtr<PopupMenu>> m_aMenus;
1323
1324
    OUString m_sStartShowIdent;
1325
1326
    DECL_LINK(ClickHdl, ToolBox*, void);
1327
    DECL_LINK(DropdownClick, ToolBox*, void);
1328
    DECL_LINK(MenuToggleListener, VclWindowEvent&, void);
1329
1330
public:
1331
    SalInstanceToolbar(ToolBox* pToolBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1332
1333
    virtual void set_item_sensitive(const OUString& rIdent, bool bSensitive) override;
1334
1335
    virtual bool get_item_sensitive(const OUString& rIdent) const override;
1336
1337
    virtual void set_item_visible(const OUString& rIdent, bool bVisible) override;
1338
1339
    virtual void set_item_help_id(const OUString& rIdent, const OUString& rHelpId) override;
1340
1341
    virtual bool get_item_visible(const OUString& rIdent) const override;
1342
1343
    virtual void set_item_active(const OUString& rIdent, bool bActive) override;
1344
1345
    virtual bool get_item_active(const OUString& rIdent) const override;
1346
1347
    void set_menu_item_active(const OUString& rIdent, bool bActive) override;
1348
1349
    bool get_menu_item_active(const OUString& rIdent) const override;
1350
1351
    virtual void set_item_popover(const OUString& rIdent, weld::Widget* pPopover) override;
1352
1353
    virtual void set_item_menu(const OUString& rIdent, weld::Menu* pMenu) override;
1354
1355
    virtual void insert_item(int pos, const OUString& rId) override;
1356
1357
    virtual void insert_separator(int pos, const OUString& /*rId*/) override;
1358
1359
    virtual int get_n_items() const override;
1360
1361
    virtual OUString get_item_ident(int nIndex) const override;
1362
1363
    virtual void set_item_ident(int nIndex, const OUString& rIdent) override;
1364
1365
    virtual void set_item_label(int nIndex, const OUString& rLabel) override;
1366
1367
    virtual OUString get_item_label(const OUString& rIdent) const override;
1368
1369
    virtual void set_item_label(const OUString& rIdent, const OUString& rLabel) override;
1370
1371
    virtual void set_item_icon_name(const OUString& rIdent, const OUString& rIconName) override;
1372
1373
    virtual void set_item_image_mirrored(const OUString& rIdent, bool bMirrored) override;
1374
1375
    virtual void set_item_image(const OUString& rIdent,
1376
                                const css::uno::Reference<css::graphic::XGraphic>& rIcon) override;
1377
1378
    virtual void set_item_image(const OUString& rIdent, VirtualDevice* pDevice) override;
1379
1380
    virtual void set_item_image(int nIndex,
1381
                                const css::uno::Reference<css::graphic::XGraphic>& rIcon) override;
1382
1383
    virtual void set_item_tooltip_text(int nIndex, const OUString& rTip) override;
1384
1385
    virtual void set_item_tooltip_text(const OUString& rIdent, const OUString& rTip) override;
1386
1387
    virtual void set_item_accessible_name(int nIndex, const OUString& rName) override;
1388
1389
    virtual void set_item_accessible_name(const OUString& rIdent, const OUString& rName) override;
1390
1391
    virtual OUString get_item_tooltip_text(const OUString& rIdent) const override;
1392
1393
    virtual vcl::ImageType get_icon_size() const override;
1394
1395
    virtual void set_icon_size(vcl::ImageType eType) override;
1396
1397
    virtual sal_uInt16 get_modifier_state() const override;
1398
1399
    virtual int get_drop_index(const Point& rPoint) const override;
1400
1401
    virtual ~SalInstanceToolbar() override;
1402
};
1403
1404
class SalInstanceTextView : public SalInstanceWidget, public virtual weld::TextView
1405
{
1406
private:
1407
    VclPtr<VclMultiLineEdit> m_xTextView;
1408
    Link<ScrollBar*, void> m_aOrigVScrollHdl;
1409
1410
    DECL_LINK(ChangeHdl, Edit&, void);
1411
    DECL_LINK(VscrollHdl, ScrollBar*, void);
1412
    DECL_LINK(CursorListener, VclWindowEvent&, void);
1413
1414
public:
1415
    SalInstanceTextView(VclMultiLineEdit* pTextView, SalInstanceBuilder* pBuilder,
1416
                        bool bTakeOwnership);
1417
1418
    virtual void do_set_text(const OUString& rText) override;
1419
1420
    virtual void do_replace_selection(const OUString& rText) override;
1421
1422
    virtual OUString get_text() const override;
1423
1424
    bool get_selection_bounds(int& rStartPos, int& rEndPos) override;
1425
1426
    virtual void do_select_region(int nStartPos, int nEndPos) override;
1427
1428
    virtual void set_editable(bool bEditable) override;
1429
    virtual bool get_editable() const override;
1430
    virtual void set_max_length(int nChars) override;
1431
1432
    virtual void set_monospace(bool bMonospace) override;
1433
1434
    virtual void set_font(const vcl::Font& rFont) override;
1435
1436
    virtual void set_font_color(const Color& rColor) override;
1437
1438
    virtual void connect_cursor_position(const Link<TextView&, void>& rLink) override;
1439
1440
    virtual bool can_move_cursor_with_up() const override;
1441
1442
    virtual bool can_move_cursor_with_down() const override;
1443
1444
    virtual void cut_clipboard() override;
1445
1446
    virtual void copy_clipboard() override;
1447
1448
    virtual void paste_clipboard() override;
1449
1450
    virtual void set_alignment(TxtAlign eXAlign) override;
1451
1452
    virtual int vadjustment_get_value() const override;
1453
1454
    virtual void vadjustment_set_value(int value) override;
1455
1456
    virtual int vadjustment_get_upper() const override;
1457
1458
    virtual int vadjustment_get_page_size() const override;
1459
1460
    virtual bool has_focus() const override;
1461
1462
    virtual ~SalInstanceTextView() override;
1463
};
1464
1465
struct SalInstanceTreeIter final : public weld::TreeIter
1466
{
1467
    SalInstanceTreeIter(const SalInstanceTreeIter* pOrig)
1468
0
        : iter(pOrig ? pOrig->iter : nullptr)
1469
0
    {
1470
0
    }
1471
    SalInstanceTreeIter(SvTreeListEntry* pIter)
1472
0
        : iter(pIter)
1473
0
    {
1474
0
    }
1475
    virtual bool equal(const TreeIter& rOther) const override
1476
0
    {
1477
0
        return iter == static_cast<const SalInstanceTreeIter&>(rOther).iter;
1478
0
    }
1479
    SvTreeListEntry* iter;
1480
};
1481
1482
class SalInstanceTreeView : public SalInstanceWidget, public virtual weld::TreeView
1483
{
1484
protected:
1485
    // owner for UserData
1486
    std::vector<std::unique_ptr<OUString>> m_aUserData;
1487
    VclPtr<SvTabListBox> m_xTreeView;
1488
    SvLBoxButtonData m_aCheckButtonData;
1489
    SvLBoxButtonData m_aRadioButtonData;
1490
    // currently expanding parent that logically, but not currently physically,
1491
    // contain placeholders
1492
    o3tl::sorted_vector<SvTreeListEntry*> m_aExpandingPlaceHolderParents;
1493
    // which columns should be custom rendered
1494
    o3tl::sorted_vector<int> m_aCustomRenders;
1495
    bool m_bTogglesAsRadio;
1496
    int m_nSortColumn;
1497
1498
    DECL_LINK(SelectHdl, SvTreeListBox*, void);
1499
    DECL_LINK(DeSelectHdl, SvTreeListBox*, void);
1500
    DECL_LINK(DoubleClickHdl, SvTreeListBox*, bool);
1501
    DECL_LINK(ExpandingHdl, SvTreeListBox*, bool);
1502
    DECL_LINK(EndDragHdl, HeaderBar*, void);
1503
    DECL_LINK(HeaderBarClickedHdl, HeaderBar*, void);
1504
    DECL_LINK(ToggleHdl, SvLBoxButtonData*, void);
1505
    DECL_LINK(ModelChangedHdl, SvTreeListBox*, void);
1506
    DECL_LINK(StartDragHdl, SvTreeListBox*, bool);
1507
    DECL_STATIC_LINK(SalInstanceTreeView, FinishDragHdl, SvTreeListBox*, void);
1508
    DECL_LINK(EditingEntryHdl, SvTreeListEntry*, bool);
1509
    DECL_LINK(EditedEntryHdl, const IterString&, bool);
1510
    DECL_LINK(VisibleRangeChangedHdl, SvTreeListBox*, void);
1511
    DECL_LINK(CompareHdl, const SvSortData&, sal_Int32);
1512
    DECL_LINK(PopupMenuHdl, const CommandEvent&, bool);
1513
    DECL_LINK(TooltipHdl, SvTreeListEntry*, OUString);
1514
    DECL_LINK(CustomRenderHdl, svtree_render_args, void);
1515
    DECL_LINK(CustomMeasureHdl, svtree_measure_args, Size);
1516
1517
    bool ExpandRow(const SalInstanceTreeIter& rIter);
1518
1519
    // Each row has a cell for the expander image, (and an optional cell for a
1520
    // checkbutton if enable_toggle_buttons has been called) which precede
1521
    // index 0
1522
    int to_internal_model(int col) const;
1523
1524
    int to_external_model(int col) const;
1525
1526
    bool IsDummyEntry(SvTreeListEntry* pEntry) const;
1527
1528
    SvTreeListEntry* GetPlaceHolderChild(SvTreeListEntry* pEntry) const;
1529
1530
    static void set_font_color(SvTreeListEntry* pEntry, const Color& rColor);
1531
1532
    void AddStringItem(SvTreeListEntry* pEntry, const OUString& rStr, int nCol);
1533
1534
    void do_insert(const weld::TreeIter* pParent, int pos, const OUString* pStr,
1535
                   const OUString* pId, const OUString* pIconName,
1536
                   const VirtualDevice* pImageSurface, bool bChildrenOnDemand, weld::TreeIter* pRet,
1537
                   bool bIsSeparator);
1538
1539
    void update_checkbutton_column_width(SvTreeListEntry* pEntry);
1540
1541
    void InvalidateModelEntry(SvTreeListEntry* pEntry);
1542
1543
    void do_set_toggle(SvTreeListEntry* pEntry, TriState eState, int col);
1544
1545
    static TriState do_get_toggle(SvTreeListEntry* pEntry, int col);
1546
    static bool do_get_sensitive(SvTreeListEntry* pEntry, int col);
1547
1548
    TriState get_toggle(SvTreeListEntry* pEntry, int col) const;
1549
1550
    void set_toggle(SvTreeListEntry* pEntry, TriState eState, int col);
1551
1552
    bool get_text_emphasis(SvTreeListEntry* pEntry, int col) const;
1553
1554
    void set_header_item_width(const std::vector<int>& rWidths);
1555
1556
public:
1557
    SalInstanceTreeView(SvTabListBox* pTreeView, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1558
1559
    virtual void connect_query_tooltip(const Link<const weld::TreeIter&, OUString>& rLink) override;
1560
1561
    virtual void columns_autosize() override;
1562
1563
    virtual void freeze() override;
1564
1565
    virtual void thaw() override;
1566
1567
    virtual void set_column_fixed_widths(const std::vector<int>& rWidths) override;
1568
1569
    virtual void set_column_editables(const std::vector<bool>& rEditables) override;
1570
1571
    virtual void set_centered_column(int nCol) override;
1572
1573
    virtual int get_column_width(int nColumn) const override;
1574
1575
    virtual OUString get_column_title(int nColumn) const override;
1576
1577
    virtual void set_column_title(int nColumn, const OUString& rTitle) override;
1578
1579
    virtual void set_column_custom_renderer(int nColumn, bool bEnable) override;
1580
1581
    virtual void queue_draw() override;
1582
1583
    virtual void show() override;
1584
1585
    virtual void hide() override;
1586
1587
    virtual void do_insert(const weld::TreeIter* pParent, int pos, const OUString* pStr,
1588
                           const OUString* pId, const OUString* pIconName,
1589
                           VirtualDevice* pImageSurface, bool bChildrenOnDemand,
1590
                           weld::TreeIter* pRet) override;
1591
1592
    virtual void do_insert_separator(int pos, const OUString& /*rId*/) override;
1593
1594
    virtual void bulk_insert_for_each(
1595
        int nSourceCount, const std::function<void(weld::TreeIter&, int nSourceIndex)>& func,
1596
        const weld::TreeIter* pParent = nullptr, const std::vector<int>* pFixedWidths = nullptr,
1597
        bool bGoingToSetText = false) override;
1598
1599
    virtual void set_font_color(int pos, const Color& rColor) override;
1600
1601
    virtual void set_font_color(const weld::TreeIter& rIter, const Color& rColor) override;
1602
1603
    virtual void do_remove(int pos) override;
1604
1605
    virtual int find_text(const OUString& rText) const override;
1606
1607
    virtual int find_id(const OUString& rId) const override;
1608
1609
    virtual void swap(int pos1, int pos2) override;
1610
1611
    virtual void do_clear() override;
1612
1613
    virtual void select_all() override;
1614
    virtual void unselect_all() override;
1615
1616
    virtual int n_children() const override;
1617
1618
    virtual int iter_n_children(const weld::TreeIter& rIter) const override;
1619
1620
    virtual void do_select(int pos) override;
1621
1622
    virtual int get_cursor_index() const override;
1623
1624
    virtual void do_set_cursor(int pos) override;
1625
1626
    virtual void do_scroll_to_row(int pos) override;
1627
1628
    virtual bool is_selected(int pos) const override;
1629
1630
    virtual void do_unselect(int pos) override;
1631
1632
    virtual std::vector<int> get_selected_rows() const override;
1633
1634
    OUString get_text(SvTreeListEntry* pEntry, int col) const;
1635
1636
    virtual OUString get_text(int pos, int col = -1) const override;
1637
1638
    void set_text(SvTreeListEntry* pEntry, const OUString& rText, int col);
1639
1640
    virtual void set_text(int pos, const OUString& rText, int col = -1) override;
1641
1642
    using SalInstanceWidget::set_sensitive;
1643
    using SalInstanceWidget::get_sensitive;
1644
1645
    void set_sensitive(SvTreeListEntry* pEntry, bool bSensitive, int col);
1646
    bool get_sensitive(SvTreeListEntry* pEntry, int col) const;
1647
1648
    virtual void set_sensitive(int pos, bool bSensitive, int col = -1) override;
1649
1650
    virtual void set_sensitive(const weld::TreeIter& rIter, bool bSensitive, int col = -1) override;
1651
1652
    virtual bool get_sensitive(int pos, int col) const override;
1653
1654
    virtual bool get_sensitive(const weld::TreeIter& rIter, int col) const override;
1655
1656
    virtual TriState get_toggle(int pos, int col = -1) const override;
1657
1658
    virtual TriState get_toggle(const weld::TreeIter& rIter, int col = -1) const override;
1659
1660
    virtual void enable_toggle_buttons(weld::ColumnToggleType eType) override;
1661
1662
    virtual void set_toggle(int pos, TriState eState, int col = -1) override;
1663
1664
    virtual void set_toggle(const weld::TreeIter& rIter, TriState eState, int col = -1) override;
1665
1666
    virtual void set_clicks_to_toggle(int nToggleBehavior) override;
1667
1668
    virtual void set_extra_row_indent(const weld::TreeIter& rIter, int nIndentLevel) override;
1669
1670
    void set_text_emphasis(SvTreeListEntry* pEntry, bool bOn, int col = -1);
1671
1672
    virtual void set_text_emphasis(const weld::TreeIter& rIter, bool bOn, int col) override;
1673
1674
    virtual void set_text_emphasis(int pos, bool bOn, int col) override;
1675
1676
    virtual bool get_text_emphasis(const weld::TreeIter& rIter, int col) const override;
1677
1678
    virtual bool get_text_emphasis(int pos, int col) const override;
1679
1680
    void set_text_align(SvTreeListEntry* pEntry, double fAlign, int col);
1681
1682
    virtual void set_text_align(const weld::TreeIter& rIter, double fAlign, int col) override;
1683
1684
    virtual void set_text_align(int pos, double fAlign, int col) override;
1685
1686
    virtual void connect_editing(const Link<const weld::TreeIter&, bool>& rStartLink,
1687
                                 const Link<const iter_string&, bool>& rEndLink) override;
1688
1689
    virtual void start_editing(const weld::TreeIter& rIter) override;
1690
1691
    virtual void end_editing() override;
1692
1693
    void set_image(SvTreeListEntry* pEntry, const Image& rImage, int col);
1694
1695
    virtual void set_image(int pos, const OUString& rImage, int col = -1) override;
1696
1697
    virtual void set_image(int pos, const css::uno::Reference<css::graphic::XGraphic>& rImage,
1698
                           int col = -1) override;
1699
1700
    virtual void set_image(int pos, VirtualDevice& rImage, int col = -1) override;
1701
1702
    virtual void set_image(const weld::TreeIter& rIter, const OUString& rImage,
1703
                           int col = -1) override;
1704
1705
    virtual void set_image(const weld::TreeIter& rIter,
1706
                           const css::uno::Reference<css::graphic::XGraphic>& rImage,
1707
                           int col = -1) override;
1708
1709
    virtual void set_image(const weld::TreeIter& rIter, VirtualDevice& rImage,
1710
                           int col = -1) override;
1711
1712
    const OUString* getEntryData(int index) const;
1713
1714
    virtual OUString get_id(int pos) const override;
1715
1716
    void set_id(SvTreeListEntry* pEntry, const OUString& rId);
1717
1718
    virtual void set_id(int pos, const OUString& rId) override;
1719
1720
    virtual int get_selected_index() const override;
1721
1722
    virtual OUString get_selected_text() const override;
1723
1724
    virtual OUString get_selected_id() const override;
1725
1726
    virtual std::unique_ptr<weld::TreeIter> make_iterator(const weld::TreeIter* pOrig
1727
                                                          = nullptr) const override;
1728
1729
    virtual void copy_iterator(const weld::TreeIter& rSource, weld::TreeIter& rDest) const override;
1730
1731
    virtual bool get_selected(weld::TreeIter* pIter) const override;
1732
1733
    virtual bool get_cursor(weld::TreeIter* pIter) const override;
1734
1735
    virtual void do_set_cursor(const weld::TreeIter& rIter) override;
1736
1737
    virtual bool get_iter_first(weld::TreeIter& rIter) const override;
1738
1739
    bool get_iter_abs_pos(weld::TreeIter& rIter, int nPos) const;
1740
1741
    virtual bool iter_next_sibling(weld::TreeIter& rIter) const override;
1742
1743
    virtual bool iter_previous_sibling(weld::TreeIter& rIter) const override;
1744
1745
    virtual bool iter_next(weld::TreeIter& rIter) const override;
1746
1747
    virtual bool iter_previous(weld::TreeIter& rIter) const override;
1748
1749
    virtual bool iter_children(weld::TreeIter& rIter) const override;
1750
1751
    virtual bool iter_parent(weld::TreeIter& rIter) const override;
1752
1753
    virtual void do_remove(const weld::TreeIter& rIter) override;
1754
1755
    virtual void do_select(const weld::TreeIter& rIter) override;
1756
1757
    virtual void do_scroll_to_row(const weld::TreeIter& rIter) override;
1758
1759
    virtual void do_unselect(const weld::TreeIter& rIter) override;
1760
1761
    virtual int get_iter_depth(const weld::TreeIter& rIter) const override;
1762
1763
    virtual bool iter_has_child(const weld::TreeIter& rIter) const override;
1764
1765
    virtual bool get_row_expanded(const weld::TreeIter& rIter) const override;
1766
1767
    virtual bool get_children_on_demand(const weld::TreeIter& rIter) const override;
1768
1769
    virtual void do_set_children_on_demand(const weld::TreeIter& rIter,
1770
                                           bool bChildrenOnDemand) override;
1771
1772
    virtual void expand_row(const weld::TreeIter& rIter) override;
1773
1774
    virtual void collapse_row(const weld::TreeIter& rIter) override;
1775
1776
    virtual OUString get_text(const weld::TreeIter& rIter, int col = -1) const override;
1777
1778
    virtual void set_text(const weld::TreeIter& rIter, const OUString& rText,
1779
                          int col = -1) override;
1780
1781
    virtual OUString get_id(const weld::TreeIter& rIter) const override;
1782
1783
    virtual void set_id(const weld::TreeIter& rIter, const OUString& rId) override;
1784
1785
    virtual void enable_drag_source(rtl::Reference<TransferDataContainer>& rHelper,
1786
                                    sal_uInt8 eDNDConstants) override;
1787
1788
    virtual void set_selection_mode(SelectionMode eMode) override;
1789
1790
    virtual void all_foreach(const std::function<bool(weld::TreeIter&)>& func) override;
1791
1792
    virtual void selected_foreach(const std::function<bool(weld::TreeIter&)>& func) override;
1793
1794
    virtual void visible_foreach(const std::function<bool(weld::TreeIter&)>& func) override;
1795
1796
    virtual void connect_visible_range_changed(const Link<weld::TreeView&, void>& rLink) override;
1797
1798
    virtual void do_remove_selection() override;
1799
1800
    virtual bool is_selected(const weld::TreeIter& rIter) const override;
1801
1802
    virtual int get_iter_index_in_parent(const weld::TreeIter& rIter) const override;
1803
1804
    virtual int iter_compare(const weld::TreeIter& a, const weld::TreeIter& b) const override;
1805
1806
    virtual void move_subtree(weld::TreeIter& rNode, const weld::TreeIter* pNewParent,
1807
                              int nIndexInNewParent) override;
1808
1809
    virtual int count_selected_rows() const override;
1810
1811
    virtual int get_height_rows(int nRows) const override;
1812
1813
    virtual void make_sorted() override;
1814
1815
    virtual void set_sort_func(
1816
        const std::function<int(const weld::TreeIter&, const weld::TreeIter&)>& func) override;
1817
1818
    virtual void make_unsorted() override;
1819
1820
    virtual void set_sort_order(bool bAscending) override;
1821
1822
    virtual bool get_sort_order() const override;
1823
1824
    virtual void set_sort_indicator(TriState eState, int col) override;
1825
1826
    virtual TriState get_sort_indicator(int col) const override;
1827
1828
    virtual int get_sort_column() const override;
1829
1830
    virtual void set_sort_column(int nColumn) override;
1831
1832
    SvTabListBox& getTreeView();
1833
1834
    virtual bool get_dest_row_at_pos(const Point& rPos, weld::TreeIter* pResult, bool bDnDMode,
1835
                                     bool bAutoScroll = true) override;
1836
1837
    virtual void unset_drag_dest_row() override;
1838
1839
    virtual tools::Rectangle get_row_area(const weld::TreeIter& rIter) const override;
1840
1841
    virtual TreeView* get_drag_source() const override;
1842
1843
    virtual int vadjustment_get_value() const override;
1844
1845
    virtual void vadjustment_set_value(int nValue) override;
1846
1847
    virtual void set_show_expanders(bool bShow) override;
1848
1849
    virtual bool changed_by_hover() const override;
1850
1851
    virtual ~SalInstanceTreeView() override;
1852
1853
    // public version of protected weld::Widget methods
1854
0
    void disableNotifyEvents() { disable_notify_events(); }
1855
0
    void enableNotifyEvents() { enable_notify_events(); }
1856
};
1857
1858
class SalInstanceExpander : public SalInstanceWidget, public virtual weld::Expander
1859
{
1860
private:
1861
    VclPtr<VclExpander> m_xExpander;
1862
1863
    DECL_LINK(ExpandedHdl, VclExpander&, void);
1864
1865
public:
1866
    SalInstanceExpander(VclExpander* pExpander, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1867
1868
    virtual void set_label(const OUString& rText) override;
1869
1870
    virtual OUString get_label() const override;
1871
1872
    virtual bool get_expanded() const override;
1873
1874
    virtual void set_expanded(bool bExpand) override;
1875
1876
    virtual bool has_focus() const override;
1877
1878
    virtual void grab_focus() override;
1879
1880
    virtual ~SalInstanceExpander() override;
1881
};
1882
1883
class SalInstanceIconView : public SalInstanceWidget, public virtual weld::IconView
1884
{
1885
protected:
1886
    VclPtr<::IconView> m_xIconView;
1887
1888
private:
1889
    bool m_bFixedItemWidth = false;
1890
1891
    // owner for UserData
1892
    std::vector<std::unique_ptr<OUString>> m_aUserData;
1893
1894
    DECL_LINK(SelectHdl, SvTreeListBox*, void);
1895
    DECL_LINK(DeSelectHdl, SvTreeListBox*, void);
1896
    DECL_LINK(DoubleClickHdl, SvTreeListBox*, bool);
1897
    DECL_LINK(CommandHdl, const CommandEvent&, bool);
1898
    DECL_LINK(TooltipHdl, SvTreeListEntry*, OUString);
1899
    DECL_LINK(DumpImageHdl, const ::IconView::encoded_image_query&, bool);
1900
1901
    void do_insert(int pos, const OUString* pStr, const OUString* pId, const Image& rImage,
1902
                   weld::TreeIter* pRet);
1903
1904
public:
1905
    SalInstanceIconView(::IconView* pIconView, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1906
1907
    virtual int get_item_width() const override;
1908
    virtual void set_item_width(int width) override;
1909
1910
    virtual void freeze() override;
1911
1912
    virtual void thaw() override;
1913
1914
    virtual void do_insert(int pos, const OUString* pStr, const OUString* pId,
1915
                           const OUString* pIconName, weld::TreeIter* pRet) override;
1916
1917
    virtual void do_insert(int pos, const OUString* pStr, const OUString* pId, const Bitmap* pIcon,
1918
                           weld::TreeIter* pRet) override;
1919
1920
    virtual void insert_separator(int pos, const OUString* pId) override;
1921
1922
    virtual void connect_query_tooltip(const Link<const weld::TreeIter&, OUString>& rLink) override;
1923
1924
    virtual void
1925
    connect_get_image(const Link<const weld::encoded_image_query&, bool>& rLink) override;
1926
1927
    virtual OUString get_selected_id() const override;
1928
1929
    virtual OUString get_selected_text() const override;
1930
1931
    virtual int count_selected_items() const override;
1932
1933
    virtual void do_select(int pos) override;
1934
1935
    virtual void do_unselect(int pos) override;
1936
1937
    virtual void select_all() override;
1938
    virtual void unselect_all() override;
1939
1940
    virtual int n_children() const override;
1941
1942
    virtual std::unique_ptr<weld::TreeIter> make_iterator(const weld::TreeIter* pOrig
1943
                                                          = nullptr) const override;
1944
1945
    virtual bool get_selected(weld::TreeIter* pIter) const override;
1946
1947
    virtual bool get_cursor(weld::TreeIter* pIter) const override;
1948
1949
    virtual void do_set_cursor(const weld::TreeIter& rIter) override;
1950
1951
    virtual bool get_iter_first(weld::TreeIter& rIter) const override;
1952
1953
    virtual bool iter_next_sibling(weld::TreeIter& rIter) const override;
1954
1955
    virtual void do_scroll_to_item(const weld::TreeIter& rIter) override;
1956
1957
    virtual void selected_foreach(const std::function<bool(weld::TreeIter&)>& func) override;
1958
1959
    virtual OUString get_id(const weld::TreeIter& rIter) const override;
1960
1961
    virtual OUString get_id(int pos) const override;
1962
1963
    virtual void do_remove(int pos) override;
1964
1965
    const OUString* getEntryData(int index) const;
1966
1967
    virtual void set_image(int pos, VirtualDevice& rImage) override;
1968
1969
    virtual void set_text(int pos, const OUString& rText) override;
1970
1971
    virtual void set_id(int pos, const OUString& rId) override;
1972
1973
    virtual void set_item_accessible_name(int pos, const OUString& rName) override;
1974
1975
    virtual OUString get_text(const weld::TreeIter& rIter) const override;
1976
1977
    virtual tools::Rectangle get_rect(int pos) const override;
1978
1979
    virtual void do_clear() override;
1980
1981
    virtual ~SalInstanceIconView() override;
1982
};
1983
1984
class SalInstanceRadioButton : public SalInstanceButton, public virtual weld::RadioButton
1985
{
1986
private:
1987
    VclPtr<::RadioButton> m_xRadioButton;
1988
1989
    DECL_LINK(ToggleHdl, ::RadioButton&, void);
1990
1991
public:
1992
    SalInstanceRadioButton(::RadioButton* pButton, SalInstanceBuilder* pBuilder,
1993
                           bool bTakeOwnership);
1994
1995
    virtual void do_set_active(bool active) override;
1996
1997
    virtual bool get_active() const override;
1998
1999
    virtual void set_image(VirtualDevice* pDevice) override;
2000
2001
    virtual void set_image(const css::uno::Reference<css::graphic::XGraphic>& rImage) override;
2002
2003
    virtual void set_from_icon_name(const OUString& rIconName) override;
2004
2005
0
    virtual void set_label(const OUString& rText) override { SalInstanceButton::set_label(rText); }
2006
2007
0
    virtual OUString get_label() const override { return SalInstanceButton::get_label(); }
2008
2009
    virtual void set_label_wrap(bool wrap) override;
2010
2011
    virtual ~SalInstanceRadioButton() override;
2012
};
2013
2014
class SalInstanceFrame : public SalInstanceContainer, public virtual weld::Frame
2015
{
2016
private:
2017
    VclPtr<VclFrame> m_xFrame;
2018
2019
public:
2020
    SalInstanceFrame(VclFrame* pFrame, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
2021
2022
    virtual void set_label(const OUString& rText) override;
2023
2024
    virtual OUString get_label() const override;
2025
};
2026
2027
class SalInstanceMenuButton : public SalInstanceButton, public virtual weld::MenuButton
2028
{
2029
protected:
2030
    VclPtr<::MenuButton> m_xMenuButton;
2031
    sal_uInt16 m_nLastId;
2032
2033
    DECL_LINK(MenuSelectHdl, ::MenuButton*, void);
2034
    DECL_LINK(ActivateHdl, ::MenuButton*, void);
2035
2036
public:
2037
    SalInstanceMenuButton(::MenuButton* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
2038
2039
    virtual void do_set_active(bool active) override;
2040
2041
    virtual bool get_active() const override;
2042
2043
    virtual void insert_item(int pos, const OUString& rId, const OUString& rStr,
2044
                             const OUString* pIconName, VirtualDevice* pImageSurface,
2045
                             TriState eCheckRadioFalse) override;
2046
2047
    virtual void insert_separator(int pos, const OUString& rId) override;
2048
2049
    virtual void set_item_sensitive(const OUString& rIdent, bool bSensitive) override;
2050
2051
    virtual void remove_item(const OUString& rId) override;
2052
2053
    virtual void clear() override;
2054
2055
    virtual void set_item_active(const OUString& rIdent, bool bActive) override;
2056
2057
    virtual void set_item_label(const OUString& rIdent, const OUString& rText) override;
2058
2059
    virtual OUString get_item_label(const OUString& rIdent) const override;
2060
2061
    virtual void set_item_visible(const OUString& rIdent, bool bShow) override;
2062
2063
    virtual void set_popover(weld::Widget* pPopover) override;
2064
2065
    virtual ~SalInstanceMenuButton() override;
2066
};
2067
2068
class SalInstancePopover : public SalInstanceContainer, public virtual weld::Popover
2069
{
2070
private:
2071
    VclPtr<DockingWindow> m_xPopover;
2072
2073
    DECL_LINK(PopupModeEndHdl, FloatingWindow*, void);
2074
2075
    void ImplPopDown();
2076
2077
public:
2078
    SalInstancePopover(DockingWindow* pPopover, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
2079
2080
    ~SalInstancePopover();
2081
2082
    virtual void popup_at_rect(weld::Widget* pParent, const tools::Rectangle& rRect,
2083
                               weld::Placement ePlace = weld::Placement::Under) override;
2084
2085
    virtual void popdown() override;
2086
2087
    virtual void resize_to_request() override;
2088
};
2089
2090
class SalInstanceBox : public SalInstanceContainer, public virtual weld::Box
2091
{
2092
private:
2093
    VclPtr<VclBox> m_xBox;
2094
2095
public:
2096
    SalInstanceBox(VclBox* pContainer, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
2097
    virtual void reorder_child(weld::Widget* pWidget, int nNewPosition) override;
2098
    virtual void sort_native_button_order() override;
2099
};
2100
2101
class SalInstanceGrid : public SalInstanceContainer, public virtual weld::Grid
2102
{
2103
public:
2104
    SalInstanceGrid(VclGrid* pGrid, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
2105
2106
public:
2107
    virtual void set_child_left_attach(weld::Widget& rWidget, int nAttach) override;
2108
    virtual int get_child_left_attach(weld::Widget& rWidget) const override;
2109
    virtual void set_child_column_span(weld::Widget& rWidget, int nCols) override;
2110
    virtual void set_child_top_attach(weld::Widget& rWidget, int nAttach) override;
2111
    virtual int get_child_top_attach(weld::Widget& rWidget) const override;
2112
};
2113
2114
class SalInstanceImage : public SalInstanceWidget, public virtual weld::Image
2115
{
2116
private:
2117
    VclPtr<FixedImage> m_xImage;
2118
2119
public:
2120
    SalInstanceImage(FixedImage* pImage, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
2121
2122
    virtual void set_from_icon_name(const OUString& rIconName) override;
2123
2124
    virtual void set_image(VirtualDevice* pDevice) override;
2125
2126
    virtual void set_image(const css::uno::Reference<css::graphic::XGraphic>& rImage) override;
2127
};
2128
2129
class SalInstanceScrolledWindow : public SalInstanceContainer, public virtual weld::ScrolledWindow
2130
{
2131
private:
2132
    VclPtr<VclScrolledWindow> m_xScrolledWindow;
2133
    Link<ScrollBar*, void> m_aOrigVScrollHdl;
2134
    Link<ScrollBar*, void> m_aOrigHScrollHdl;
2135
    bool m_bUserManagedScrolling;
2136
2137
    DECL_LINK(VscrollHdl, ScrollBar*, void);
2138
    DECL_LINK(HscrollHdl, ScrollBar*, void);
2139
2140
    static void customize_scrollbars(ScrollBar& rScrollBar, const Color& rButtonTextColor,
2141
                                     const Color& rBackgroundColor, const Color& rShadowColor,
2142
                                     const Color& rFaceColor);
2143
2144
public:
2145
    SalInstanceScrolledWindow(VclScrolledWindow* pScrolledWindow, SalInstanceBuilder* pBuilder,
2146
                              bool bTakeOwnership, bool bUserManagedScrolling);
2147
2148
    virtual void hadjustment_configure(int value, int upper, int step_increment, int page_increment,
2149
                                       int page_size) override;
2150
    virtual int hadjustment_get_value() const override;
2151
    virtual void hadjustment_set_value(int value) override;
2152
    virtual int hadjustment_get_upper() const override;
2153
    virtual void hadjustment_set_upper(int upper) override;
2154
    virtual int hadjustment_get_page_size() const override;
2155
    virtual void hadjustment_set_page_size(int size) override;
2156
    virtual void hadjustment_set_page_increment(int size) override;
2157
    virtual void hadjustment_set_step_increment(int size) override;
2158
    virtual void set_hpolicy(VclPolicyType eHPolicy) override;
2159
    virtual VclPolicyType get_hpolicy() const override;
2160
2161
    virtual void vadjustment_configure(int value, int upper, int step_increment, int page_increment,
2162
                                       int page_size) override;
2163
    virtual int vadjustment_get_value() const override;
2164
    virtual void vadjustment_set_value(int value) override;
2165
    virtual int vadjustment_get_upper() const override;
2166
    virtual void vadjustment_set_upper(int upper) override;
2167
    virtual int vadjustment_get_page_size() const override;
2168
    virtual void vadjustment_set_page_size(int size) override;
2169
    virtual void vadjustment_set_page_increment(int size) override;
2170
    virtual void vadjustment_set_step_increment(int size) override;
2171
2172
    virtual void set_vpolicy(VclPolicyType eVPolicy) override;
2173
    virtual VclPolicyType get_vpolicy() const override;
2174
    virtual int get_scroll_thickness() const override;
2175
    virtual void set_scroll_thickness(int nThickness) override;
2176
    virtual void customize_scrollbars(const Color& rBackgroundColor, const Color& rShadowColor,
2177
                                      const Color& rFaceColor) override;
2178
    virtual ~SalInstanceScrolledWindow() override;
2179
};
2180
2181
class SalInstanceLevelBar : public SalInstanceWidget, public virtual weld::LevelBar
2182
{
2183
private:
2184
    VclPtr<::ProgressBar> m_xLevelBar;
2185
2186
public:
2187
    SalInstanceLevelBar(::ProgressBar* pLevelBar, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
2188
0
        : SalInstanceWidget(pLevelBar, pBuilder, bTakeOwnership)
2189
0
        , m_xLevelBar(pLevelBar)
2190
0
    {
2191
0
    }
Unexecuted instantiation: SalInstanceLevelBar::SalInstanceLevelBar(ProgressBar*, SalInstanceBuilder*, bool)
Unexecuted instantiation: SalInstanceLevelBar::SalInstanceLevelBar(ProgressBar*, SalInstanceBuilder*, bool)
2192
2193
    virtual void set_percentage(double fPercentage) override
2194
0
    {
2195
0
        m_xLevelBar->SetValue(static_cast<sal_uInt16>(fPercentage));
2196
0
    }
2197
};
2198
2199
class SalInstanceCalendar : public SalInstanceWidget, public virtual weld::Calendar
2200
{
2201
private:
2202
    VclPtr<::Calendar> m_xCalendar;
2203
2204
    DECL_LINK(SelectHdl, ::Calendar*, void);
2205
    DECL_LINK(ActivateHdl, ::Calendar*, void);
2206
2207
public:
2208
    SalInstanceCalendar(::Calendar* pCalendar, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
2209
0
        : SalInstanceWidget(pCalendar, pBuilder, bTakeOwnership)
2210
0
        , m_xCalendar(pCalendar)
2211
0
    {
2212
0
        m_xCalendar->SetSelectHdl(LINK(this, SalInstanceCalendar, SelectHdl));
2213
0
        m_xCalendar->SetActivateHdl(LINK(this, SalInstanceCalendar, ActivateHdl));
2214
0
    }
Unexecuted instantiation: SalInstanceCalendar::SalInstanceCalendar(Calendar*, SalInstanceBuilder*, bool)
Unexecuted instantiation: SalInstanceCalendar::SalInstanceCalendar(Calendar*, SalInstanceBuilder*, bool)
2215
2216
0
    virtual void set_date(const Date& rDate) override { m_xCalendar->SetCurDate(rDate); }
2217
2218
0
    virtual Date get_date() const override { return m_xCalendar->GetFirstSelectedDate(); }
2219
2220
    virtual ~SalInstanceCalendar() override
2221
0
    {
2222
0
        m_xCalendar->SetSelectHdl(Link<::Calendar*, void>());
2223
0
        m_xCalendar->SetActivateHdl(Link<::Calendar*, void>());
2224
0
    }
2225
};
2226
2227
class SalInstanceFormattedSpinButton : public SalInstanceEntry,
2228
                                       public virtual weld::FormattedSpinButton
2229
{
2230
private:
2231
    VclPtr<FormattedField> m_xButton;
2232
    weld::EntryFormatter* m_pFormatter;
2233
    Link<weld::Widget&, void> m_aLoseFocusHdl;
2234
2235
    DECL_LINK(UpDownHdl, SpinField&, void);
2236
    DECL_LINK(LoseFocusHdl, Control&, void);
2237
2238
public:
2239
    SalInstanceFormattedSpinButton(FormattedField* pButton, SalInstanceBuilder* pBuilder,
2240
                                   bool bTakeOwnership);
2241
2242
    virtual void do_set_text(const OUString& rText) override;
2243
2244
    virtual void connect_changed(const Link<weld::Entry&, void>& rLink) override;
2245
2246
    virtual void connect_focus_out(const Link<weld::Widget&, void>& rLink) override;
2247
2248
    virtual void SetFormatter(weld::EntryFormatter* pFormatter) override;
2249
2250
    virtual void sync_value_from_formatter() override
2251
0
    {
2252
        // no-op for gen
2253
0
    }
2254
2255
    virtual void sync_range_from_formatter() override
2256
0
    {
2257
        // no-op for gen
2258
0
    }
2259
2260
    virtual void sync_increments_from_formatter() override
2261
0
    {
2262
        // no-op for gen
2263
0
    }
2264
2265
    virtual Formatter& GetFormatter() override;
2266
2267
    virtual ~SalInstanceFormattedSpinButton() override;
2268
};
2269
2270
class SalInstanceVerticalNotebook : public SalInstanceWidget, public virtual weld::Notebook
2271
{
2272
private:
2273
    VclPtr<VerticalTabControl> m_xNotebook;
2274
    /// Constructed on-demand.
2275
    mutable std::map<OUString, std::shared_ptr<SalInstanceContainer>> m_aPages;
2276
2277
    DECL_LINK(DeactivatePageHdl, VerticalTabControl*, bool);
2278
    DECL_LINK(ActivatePageHdl, VerticalTabControl*, void);
2279
2280
public:
2281
    SalInstanceVerticalNotebook(VerticalTabControl* pNotebook, SalInstanceBuilder* pBuilder,
2282
                                bool bTakeOwnership);
2283
2284
    virtual int get_current_page() const override;
2285
2286
    virtual OUString get_page_ident(int nPage) const override;
2287
2288
    virtual OUString get_current_page_ident() const override;
2289
2290
    virtual int get_page_index(const OUString& rIdent) const override;
2291
2292
    virtual weld::Container* get_page(const OUString& rIdent) const override;
2293
2294
    virtual void set_current_page(int nPage) override;
2295
2296
    virtual void set_current_page(const OUString& rIdent) override;
2297
2298
    virtual void remove_page(const OUString& rIdent) override;
2299
2300
    virtual void insert_page(const OUString& rIdent, const OUString& rLabel, int nPos,
2301
                             const OUString* pIconName = nullptr) override;
2302
2303
    virtual int get_n_pages() const override;
2304
2305
    virtual void set_tab_label_text(const OUString& rIdent, const OUString& rText) override;
2306
2307
    virtual OUString get_tab_label_text(const OUString& rIdent) const override;
2308
2309
    virtual void set_show_tabs(bool /*bShow*/) override;
2310
2311
    virtual ~SalInstanceVerticalNotebook() override;
2312
};
2313
2314
class SalInstanceColorChooserDialog : public SalInstanceDialog,
2315
                                      public virtual weld::ColorChooserDialog
2316
{
2317
    ScopedVclPtr<AbstractColorPickerDialog> m_pAbstractColorPickerDialog;
2318
2319
public:
2320
    SalInstanceColorChooserDialog(AbstractColorPickerDialog* pColorDialog);
2321
    virtual ~SalInstanceColorChooserDialog() override;
2322
2323
    virtual void set_color(const Color& rColor) override;
2324
    virtual Color get_color() const override;
2325
};
2326
2327
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */