Implement weld::IconView::[gs]et_item_width
[LibreOffice.git] / vcl / inc / salvtables.hxx
blob45e9700ad2c8e0a584f12deb774845348a112739
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.
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
11 #include <vcl/weld.hxx>
12 #include <vcl/svapp.hxx>
13 #include <vcl/syswin.hxx>
14 #include <vcl/settings.hxx>
15 #include <vcl/virdev.hxx>
16 #include <vcl/ctrl.hxx>
17 #include <vcl/toolkit/edit.hxx>
18 #include <vcl/formatter.hxx>
19 #include <vcl/toolkit/spinfld.hxx>
20 #include <vcl/toolkit/fixed.hxx>
21 #include <vcl/toolkit/lstbox.hxx>
22 #include <vcl/toolkit/menubtn.hxx>
23 #include <vcl/toolkit/combobox.hxx>
24 #include <vcl/tabctrl.hxx>
25 #include <vcl/layout.hxx>
26 #include <vcl/toolkit/svtabbx.hxx>
27 #include <vcl/toolkit/svlbitm.hxx>
28 #include <o3tl/sorted_vector.hxx>
29 #include "iconview.hxx"
30 #include "listbox.hxx"
31 #include "messagedialog.hxx"
33 class SalInstanceBuilder : public weld::Builder
35 protected:
36 std::unique_ptr<VclBuilder> m_xBuilder;
37 VclPtr<vcl::Window> m_aOwnedToplevel;
39 public:
40 SalInstanceBuilder(vcl::Window* pParent, const OUString& rUIRoot, const OUString& rUIFile,
41 const css::uno::Reference<css::frame::XFrame>& rFrame
42 = css::uno::Reference<css::frame::XFrame>());
44 virtual std::unique_ptr<weld::MessageDialog> weld_message_dialog(const OString& id) override;
46 virtual std::unique_ptr<weld::Dialog> weld_dialog(const OString& id) override;
48 virtual std::unique_ptr<weld::Assistant> weld_assistant(const OString& id) override;
50 virtual std::unique_ptr<weld::Window> create_screenshot_window() override;
52 virtual std::unique_ptr<weld::Widget> weld_widget(const OString& id) override;
54 virtual std::unique_ptr<weld::Container> weld_container(const OString& id) override;
56 virtual std::unique_ptr<weld::Box> weld_box(const OString& id) override;
58 virtual std::unique_ptr<weld::Paned> weld_paned(const OString& id) override;
60 virtual std::unique_ptr<weld::Frame> weld_frame(const OString& id) override;
62 virtual std::unique_ptr<weld::ScrolledWindow>
63 weld_scrolled_window(const OString& id, bool bUserManagedScrolling = false) override;
65 virtual std::unique_ptr<weld::Notebook> weld_notebook(const OString& id) override;
67 virtual std::unique_ptr<weld::Button> weld_button(const OString& id) override;
69 virtual std::unique_ptr<weld::MenuButton> weld_menu_button(const OString& id) override;
71 virtual std::unique_ptr<weld::MenuToggleButton>
72 weld_menu_toggle_button(const OString& id) override;
74 virtual std::unique_ptr<weld::LinkButton> weld_link_button(const OString& id) override;
76 virtual std::unique_ptr<weld::ToggleButton> weld_toggle_button(const OString& id) override;
78 virtual std::unique_ptr<weld::RadioButton> weld_radio_button(const OString& id) override;
80 virtual std::unique_ptr<weld::CheckButton> weld_check_button(const OString& id) override;
82 virtual std::unique_ptr<weld::Scale> weld_scale(const OString& id) override;
84 virtual std::unique_ptr<weld::ProgressBar> weld_progress_bar(const OString& id) override;
86 virtual std::unique_ptr<weld::Spinner> weld_spinner(const OString& id) override;
88 virtual std::unique_ptr<weld::Image> weld_image(const OString& id) override;
90 virtual std::unique_ptr<weld::Calendar> weld_calendar(const OString& id) override;
92 virtual std::unique_ptr<weld::Entry> weld_entry(const OString& id) override;
94 virtual std::unique_ptr<weld::SpinButton> weld_spin_button(const OString& id) override;
96 virtual std::unique_ptr<weld::MetricSpinButton>
97 weld_metric_spin_button(const OString& id, FieldUnit eUnit) override;
99 virtual std::unique_ptr<weld::FormattedSpinButton>
100 weld_formatted_spin_button(const OString& id) override;
102 virtual std::unique_ptr<weld::ComboBox> weld_combo_box(const OString& id) override;
104 virtual std::unique_ptr<weld::EntryTreeView>
105 weld_entry_tree_view(const OString& containerid, const OString& entryid,
106 const OString& treeviewid) override;
108 virtual std::unique_ptr<weld::TreeView> weld_tree_view(const OString& id) override;
110 virtual std::unique_ptr<weld::IconView> weld_icon_view(const OString& id) override;
112 virtual std::unique_ptr<weld::Label> weld_label(const OString& id) override;
114 virtual std::unique_ptr<weld::TextView> weld_text_view(const OString& id) override;
116 virtual std::unique_ptr<weld::Expander> weld_expander(const OString& id) override;
118 virtual std::unique_ptr<weld::DrawingArea>
119 weld_drawing_area(const OString& id, const a11yref& rA11yImpl = nullptr,
120 FactoryFunction pUITestFactoryFunction = nullptr,
121 void* pUserData = nullptr) override;
123 virtual std::unique_ptr<weld::Menu> weld_menu(const OString& id) override;
125 virtual std::unique_ptr<weld::Popover> weld_popover(const OString& id) override;
127 virtual std::unique_ptr<weld::Toolbar> weld_toolbar(const OString& id) override;
129 virtual std::unique_ptr<weld::SizeGroup> create_size_group() override;
131 OString get_current_page_help_id() const;
133 virtual ~SalInstanceBuilder() override;
136 class SAL_DLLPUBLIC_RTTI SalInstanceMenu final : public weld::Menu
138 private:
139 VclPtr<PopupMenu> m_xMenu;
141 bool m_bTakeOwnership;
142 sal_uInt16 m_nLastId;
144 DECL_DLLPRIVATE_LINK(SelectMenuHdl, ::Menu*, bool);
146 public:
147 SalInstanceMenu(PopupMenu* pMenu, bool bTakeOwnership);
148 virtual OString popup_at_rect(weld::Widget* pParent, const tools::Rectangle& rRect,
149 weld::Placement ePlace = weld::Placement::Under) override;
150 virtual void set_sensitive(const OString& rIdent, bool bSensitive) override;
151 virtual bool get_sensitive(const OString& rIdent) const override;
152 virtual void set_active(const OString& rIdent, bool bActive) override;
153 virtual bool get_active(const OString& rIdent) const override;
154 virtual void set_label(const OString& rIdent, const OUString& rLabel) override;
155 virtual OUString get_label(const OString& rIdent) const override;
156 virtual void set_visible(const OString& rIdent, bool bShow) override;
157 virtual void clear() override;
158 virtual void insert(int pos, const OUString& rId, const OUString& rStr,
159 const OUString* pIconName, VirtualDevice* pImageSurface,
160 const css::uno::Reference<css::graphic::XGraphic>& rImage,
161 TriState eCheckRadioFalse) override;
162 virtual void insert_separator(int pos, const OUString& rId) override;
163 virtual void remove(const OString& rId) override;
164 virtual OString get_id(int pos) const override;
165 virtual int n_children() const override;
166 PopupMenu* getMenu() const;
167 virtual ~SalInstanceMenu() override;
170 class SalFlashAttention;
172 class SalInstanceWidget : public virtual weld::Widget
174 protected:
175 VclPtr<vcl::Window> m_xWidget;
176 std::unique_ptr<SalFlashAttention> m_xFlashAttention;
177 SalInstanceBuilder* m_pBuilder;
179 private:
180 DECL_LINK(EventListener, VclWindowEvent&, void);
181 DECL_LINK(KeyEventListener, VclWindowEvent&, bool);
182 DECL_LINK(MouseEventListener, VclWindowEvent&, void);
183 DECL_LINK(MnemonicActivateHdl, vcl::Window&, bool);
185 static void DoRecursivePaint(vcl::Window* pWindow, const Point& rPos, OutputDevice& rOutput);
187 const bool m_bTakeOwnership;
188 bool m_bEventListener;
189 bool m_bKeyEventListener;
190 bool m_bMouseEventListener;
191 int m_nBlockNotify;
192 int m_nFreezeCount;
194 protected:
195 void ensure_event_listener();
197 // we want the ability to mark key events as handled, so use this variant
198 // for those, we get all keystrokes in this case, so we will need to filter
199 // them later
200 void ensure_key_listener();
202 // we want the ability to know about mouse events that happen in our children
203 // so use this variant, we will need to filter them later
204 void ensure_mouse_listener();
206 bool IsFirstFreeze() const { return m_nFreezeCount == 0; }
207 bool IsLastThaw() const { return m_nFreezeCount == 1; }
209 virtual void HandleEventListener(VclWindowEvent& rEvent);
210 virtual bool HandleKeyEventListener(VclWindowEvent& rEvent);
211 virtual void HandleMouseEventListener(VclWindowEvent& rEvent);
213 public:
214 SalInstanceWidget(vcl::Window* pWidget, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
216 virtual void set_sensitive(bool sensitive) override;
218 virtual bool get_sensitive() const override;
220 virtual bool get_visible() const override;
222 virtual bool is_visible() const override;
224 virtual void set_can_focus(bool bCanFocus) override;
226 virtual void grab_focus() override;
228 virtual bool has_focus() const override;
230 virtual bool is_active() const override;
232 virtual bool has_child_focus() const override;
234 virtual void show() override;
236 virtual void hide() override;
238 virtual void set_size_request(int nWidth, int nHeight) override;
240 virtual Size get_size_request() const override;
242 virtual Size get_preferred_size() const override;
244 virtual float get_approximate_digit_width() const override;
246 virtual int get_text_height() const override;
248 virtual Size get_pixel_size(const OUString& rText) const override;
250 virtual vcl::Font get_font() override;
252 virtual OString get_buildable_name() const override;
254 virtual void set_buildable_name(const OString& rId) override;
256 virtual void set_help_id(const OString& rId) override;
258 virtual OString get_help_id() const override;
260 virtual void set_grid_left_attach(int nAttach) override;
262 virtual int get_grid_left_attach() const override;
264 virtual void set_grid_width(int nCols) override;
266 virtual void set_grid_top_attach(int nAttach) override;
268 virtual int get_grid_top_attach() const override;
270 virtual void set_hexpand(bool bExpand) override;
272 virtual bool get_hexpand() const override;
274 virtual void set_vexpand(bool bExpand) override;
276 virtual bool get_vexpand() const override;
278 virtual void set_margin_top(int nMargin) override;
280 virtual void set_margin_bottom(int nMargin) override;
282 virtual void set_margin_start(int nMargin) override;
284 virtual void set_margin_end(int nMargin) override;
286 virtual int get_margin_top() const override;
288 virtual int get_margin_bottom() const override;
290 virtual int get_margin_start() const override;
292 virtual int get_margin_end() const override;
294 virtual void set_accessible_name(const OUString& rName) override;
296 virtual void set_accessible_description(const OUString& rDescription) override;
298 virtual OUString get_accessible_name() const override;
300 virtual OUString get_accessible_description() const override;
302 virtual void set_accessible_relation_labeled_by(weld::Widget* pLabel) override;
304 virtual void set_tooltip_text(const OUString& rTip) override;
306 virtual OUString get_tooltip_text() const override;
308 virtual void connect_focus_in(const Link<Widget&, void>& rLink) override;
310 virtual void connect_mnemonic_activate(const Link<Widget&, bool>& rLink) override;
312 virtual void connect_focus_out(const Link<Widget&, void>& rLink) override;
314 virtual void connect_size_allocate(const Link<const Size&, void>& rLink) override;
316 virtual void connect_mouse_press(const Link<const MouseEvent&, bool>& rLink) override;
318 virtual void connect_mouse_move(const Link<const MouseEvent&, bool>& rLink) override;
320 virtual void connect_mouse_release(const Link<const MouseEvent&, bool>& rLink) override;
322 virtual void connect_key_press(const Link<const KeyEvent&, bool>& rLink) override;
324 virtual void connect_key_release(const Link<const KeyEvent&, bool>& rLink) override;
326 virtual bool get_extents_relative_to(const Widget& rRelative, int& x, int& y, int& width,
327 int& height) const override;
329 virtual void grab_add() override;
331 virtual bool has_grab() const override;
333 virtual void grab_remove() override;
335 virtual bool get_direction() const override;
337 virtual void set_direction(bool bRTL) override;
339 virtual void freeze() override;
341 virtual void thaw() override;
343 virtual void set_busy_cursor(bool bBusy) override;
345 virtual std::unique_ptr<weld::Container> weld_parent() const override;
347 virtual ~SalInstanceWidget() override;
349 vcl::Window* getWidget() const;
351 void disable_notify_events();
353 bool notify_events_disabled() const;
355 void enable_notify_events();
357 virtual void queue_resize() override;
359 virtual void help_hierarchy_foreach(const std::function<bool(const OString&)>& func) override;
361 virtual OUString strip_mnemonic(const OUString& rLabel) const override;
363 virtual VclPtr<VirtualDevice> create_virtual_device() const override;
365 virtual css::uno::Reference<css::datatransfer::dnd::XDropTarget> get_drop_target() override;
366 virtual css::uno::Reference<css::datatransfer::clipboard::XClipboard>
367 get_clipboard() const override;
369 virtual void connect_get_property_tree(const Link<tools::JsonWriter&, void>& rLink) override;
371 virtual void get_property_tree(tools::JsonWriter& rJsonWriter) override;
373 virtual void call_attention_to() override;
375 virtual void set_stack_background() override;
377 virtual void set_title_background() override;
379 virtual void set_toolbar_background() override;
381 virtual void set_highlight_background() override;
383 virtual void set_background(const Color& rColor) override;
385 virtual void draw(OutputDevice& rOutput, const Point& rPos, const Size& rSizePixel) override;
387 SystemWindow* getSystemWindow();
390 class SalInstanceLabel : public SalInstanceWidget, public virtual weld::Label
392 private:
393 // Control instead of FixedText so we can also use this for
394 // SelectableFixedText which is derived from Edit. We just typically need
395 // [G|S]etText which exists in their shared baseclass
396 VclPtr<Control> m_xLabel;
398 public:
399 SalInstanceLabel(Control* pLabel, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
401 virtual void set_label(const OUString& rText) override;
403 virtual OUString get_label() const override;
405 virtual void set_mnemonic_widget(Widget* pTarget) override;
407 virtual void set_label_type(weld::LabelType eType) override;
409 virtual void set_font(const vcl::Font& rFont) override;
411 virtual void set_font_color(const Color& rColor) override;
414 class SalInstanceContainer : public SalInstanceWidget, public virtual weld::Container
416 protected:
417 VclPtr<vcl::Window> m_xContainer;
419 public:
420 SalInstanceContainer(vcl::Window* pContainer, SalInstanceBuilder* pBuilder,
421 bool bTakeOwnership);
422 virtual void HandleEventListener(VclWindowEvent& rEvent) override;
423 virtual void connect_container_focus_changed(const Link<Container&, void>& rLink) override;
424 virtual void child_grab_focus() override;
425 virtual void move(weld::Widget* pWidget, weld::Container* pNewParent) override;
426 virtual css::uno::Reference<css::awt::XWindow> CreateChildFrame() override;
429 class SalInstanceWindow : public SalInstanceContainer, public virtual weld::Window
431 private:
432 VclPtr<vcl::Window> m_xWindow;
434 DECL_LINK(HelpHdl, vcl::Window&, bool);
436 void override_child_help(vcl::Window* pParent);
438 void clear_child_help(vcl::Window* pParent);
440 void recursively_unset_default_buttons();
442 void implResetDefault(const vcl::Window* _pWindow);
444 public:
445 SalInstanceWindow(vcl::Window* pWindow, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
447 virtual void set_title(const OUString& rTitle) override;
449 virtual OUString get_title() const override;
451 void help();
453 virtual css::uno::Reference<css::awt::XWindow> GetXWindow() override;
455 virtual void resize_to_request() override;
457 virtual void set_modal(bool bModal) override;
459 virtual bool get_modal() const override;
461 virtual void window_move(int x, int y) override;
463 virtual Size get_size() const override;
465 virtual Point get_position() const override;
467 virtual tools::Rectangle get_monitor_workarea() const override;
469 virtual void set_centered_on_parent(bool /*bTrackGeometryRequests*/) override;
471 virtual bool get_resizable() const override;
473 virtual bool has_toplevel_focus() const override;
475 virtual void present() override;
477 virtual void change_default_widget(weld::Widget* pOld, weld::Widget* pNew) override;
479 virtual bool is_default_widget(const weld::Widget* pCandidate) const override;
481 virtual void set_window_state(const OString& rStr) override;
483 virtual OString get_window_state(WindowStateMask nMask) const override;
485 virtual SystemEnvData get_system_data() const override;
487 virtual weld::ScreenShotCollection collect_screenshot_data() override;
489 virtual VclPtr<VirtualDevice> screenshot() override;
491 virtual ~SalInstanceWindow() override;
494 class SalInstanceDialog : public SalInstanceWindow, public virtual weld::Dialog
496 private:
497 VclPtr<::Dialog> m_xDialog;
499 // for calc ref dialog that shrink to range selection widgets and resize back
500 VclPtr<vcl::Window> m_xRefEdit;
501 std::vector<VclPtr<vcl::Window>> m_aHiddenWidgets; // vector of hidden Controls
502 tools::Long m_nOldEditWidthReq; // Original width request of the input field
503 sal_Int32 m_nOldBorderWidth; // border width for expanded dialog
505 DECL_LINK(PopupScreenShotMenuHdl, const CommandEvent&, bool);
507 public:
508 SalInstanceDialog(::Dialog* pDialog, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
510 virtual bool runAsync(std::shared_ptr<weld::DialogController> aOwner,
511 const std::function<void(sal_Int32)>& rEndDialogFn) override;
513 virtual bool runAsync(std::shared_ptr<Dialog> const& rxSelf,
514 const std::function<void(sal_Int32)>& rEndDialogFn) override;
516 virtual void collapse(weld::Widget* pEdit, weld::Widget* pButton) override;
518 virtual void undo_collapse() override;
520 virtual void
521 SetInstallLOKNotifierHdl(const Link<void*, vcl::ILibreOfficeKitNotifier*>& rLink) override;
523 virtual int run() override;
525 virtual void response(int nResponse) override;
527 virtual void add_button(const OUString& rText, int nResponse,
528 const OString& rHelpId = OString()) override;
530 virtual void set_modal(bool bModal) override;
532 virtual bool get_modal() const override;
534 virtual weld::Button* weld_widget_for_response(int nResponse) override;
536 virtual void set_default_response(int nResponse) override;
538 virtual weld::Container* weld_content_area() override;
541 class WeldTextFilter final : public TextFilter
543 private:
544 Link<OUString&, bool>& m_rInsertTextHdl;
546 public:
547 WeldTextFilter(Link<OUString&, bool>& rInsertTextHdl);
549 virtual OUString filter(const OUString& rText) override;
552 class SalInstanceEntry : public SalInstanceWidget, public virtual weld::Entry
554 private:
555 VclPtr<::Edit> m_xEntry;
557 DECL_LINK(ChangeHdl, Edit&, void);
558 DECL_LINK(CursorListener, VclWindowEvent&, void);
559 DECL_LINK(ActivateHdl, Edit&, bool);
561 WeldTextFilter m_aTextFilter;
563 public:
564 SalInstanceEntry(::Edit* pEntry, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
566 virtual void set_text(const OUString& rText) override;
568 virtual OUString get_text() const override;
570 virtual void set_width_chars(int nChars) override;
572 virtual int get_width_chars() const override;
574 virtual void set_max_length(int nChars) override;
576 virtual void select_region(int nStartPos, int nEndPos) override;
578 bool get_selection_bounds(int& rStartPos, int& rEndPos) override;
580 virtual void replace_selection(const OUString& rText) override;
582 virtual void set_position(int nCursorPos) override;
584 virtual int get_position() const override;
586 virtual void set_editable(bool bEditable) override;
588 virtual bool get_editable() const override;
590 virtual void set_overwrite_mode(bool bOn) override;
592 virtual bool get_overwrite_mode() const override;
594 virtual void set_message_type(weld::EntryMessageType eType) override;
596 virtual void set_font(const vcl::Font& rFont) override;
598 virtual void set_font_color(const Color& rColor) override;
600 virtual void connect_cursor_position(const Link<Entry&, void>& rLink) override;
602 virtual void set_placeholder_text(const OUString& rText) override;
604 Edit& getEntry();
606 void fire_signal_changed();
608 virtual void cut_clipboard() override;
610 virtual void copy_clipboard() override;
612 virtual void paste_clipboard() override;
614 virtual void set_alignment(TxtAlign eXAlign) override;
616 virtual ~SalInstanceEntry() override;
619 class SalInstanceSpinButton : public SalInstanceEntry, public virtual weld::SpinButton
621 private:
622 VclPtr<FormattedField> m_xButton;
623 Formatter& m_rFormatter;
625 DECL_LINK(UpDownHdl, SpinField&, void);
626 DECL_LINK(LoseFocusHdl, Control&, void);
627 DECL_LINK(OutputHdl, LinkParamNone*, bool);
628 DECL_LINK(InputHdl, sal_Int64*, TriState);
629 DECL_LINK(ActivateHdl, Edit&, bool);
631 double toField(sal_Int64 nValue) const;
633 sal_Int64 fromField(double fValue) const;
635 public:
636 SalInstanceSpinButton(FormattedField* pButton, SalInstanceBuilder* pBuilder,
637 bool bTakeOwnership);
639 virtual sal_Int64 get_value() const override;
641 virtual void set_value(sal_Int64 value) override;
643 virtual void set_range(sal_Int64 min, sal_Int64 max) override;
645 virtual void get_range(sal_Int64& min, sal_Int64& max) const override;
647 virtual void set_increments(int step, int /*page*/) override;
649 virtual void get_increments(int& step, int& page) const override;
651 virtual void set_digits(unsigned int digits) override;
653 // SpinButton may be comprised of multiple subwidgets, consider the lot as
654 // one thing for focus
655 virtual bool has_focus() const override;
657 //off by default for direct SpinButtons, MetricSpinButton enables it
658 void SetUseThousandSep();
660 virtual unsigned int get_digits() const override;
662 virtual ~SalInstanceSpinButton() override;
665 //ComboBox and ListBox have similar apis, ComboBoxes in LibreOffice have an edit box and ListBoxes
666 //don't. This distinction isn't there in Gtk. Use a template to sort this problem out.
667 template <class vcl_type>
668 class SalInstanceComboBox : public SalInstanceWidget, public virtual weld::ComboBox
670 protected:
671 // owner for ListBox/ComboBox UserData
672 std::vector<std::shared_ptr<OUString>> m_aUserData;
673 VclPtr<vcl_type> m_xComboBox;
674 ScopedVclPtr<MenuButton> m_xMenuButton;
675 OUString m_sMenuButtonRow;
677 public:
678 SalInstanceComboBox(vcl_type* pComboBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
679 : SalInstanceWidget(pComboBox, pBuilder, bTakeOwnership)
680 , m_xComboBox(pComboBox)
684 virtual int get_active() const override
686 const sal_Int32 nRet = m_xComboBox->GetSelectedEntryPos();
687 if (nRet == LISTBOX_ENTRY_NOTFOUND)
688 return -1;
689 return nRet;
692 const OUString* getEntryData(int index) const
694 return static_cast<const OUString*>(m_xComboBox->GetEntryData(index));
697 // ComboBoxes are comprised of multiple subwidgets, consider the lot as
698 // one thing for focus
699 virtual bool has_focus() const override
701 return m_xWidget->HasChildPathFocus()
702 || (m_xMenuButton && (m_xMenuButton->HasFocus() || m_xMenuButton->InPopupMode()));
705 virtual OUString get_active_id() const override
707 sal_Int32 nPos = m_xComboBox->GetSelectedEntryPos();
708 const OUString* pRet;
709 if (nPos != LISTBOX_ENTRY_NOTFOUND)
710 pRet = getEntryData(m_xComboBox->GetSelectedEntryPos());
711 else
712 pRet = nullptr;
713 if (!pRet)
714 return OUString();
715 return *pRet;
718 virtual void set_active_id(const OUString& rStr) override
720 for (int i = 0; i < get_count(); ++i)
722 const OUString* pId = getEntryData(i);
723 if (!pId)
724 continue;
725 if (*pId == rStr)
726 m_xComboBox->SelectEntryPos(i);
730 virtual void set_active(int pos) override
732 if (pos == -1)
734 m_xComboBox->SetNoSelection();
735 return;
737 m_xComboBox->SelectEntryPos(pos);
740 virtual OUString get_text(int pos) const override { return m_xComboBox->GetEntry(pos); }
742 virtual OUString get_id(int pos) const override
744 const OUString* pRet = getEntryData(pos);
745 if (!pRet)
746 return OUString();
747 return *pRet;
750 virtual void set_id(int row, const OUString& rId) override
752 m_aUserData.emplace_back(std::make_unique<OUString>(rId));
753 m_xComboBox->SetEntryData(row, m_aUserData.back().get());
756 virtual void insert_vector(const std::vector<weld::ComboBoxEntry>& rItems,
757 bool bKeepExisting) override
759 freeze();
760 if (!bKeepExisting)
761 clear();
762 for (const auto& rItem : rItems)
764 insert(-1, rItem.sString, rItem.sId.isEmpty() ? nullptr : &rItem.sId,
765 rItem.sImage.isEmpty() ? nullptr : &rItem.sImage, nullptr);
767 thaw();
770 virtual int get_count() const override { return m_xComboBox->GetEntryCount(); }
772 virtual int find_text(const OUString& rStr) const override
774 const sal_Int32 nRet = m_xComboBox->GetEntryPos(rStr);
775 if (nRet == LISTBOX_ENTRY_NOTFOUND)
776 return -1;
777 return nRet;
780 virtual int find_id(const OUString& rStr) const override
782 for (int i = 0; i < get_count(); ++i)
784 const OUString* pId = getEntryData(i);
785 if (!pId)
786 continue;
787 if (*pId == rStr)
788 return i;
790 return -1;
793 virtual void clear() override
795 m_xComboBox->Clear();
796 m_aUserData.clear();
799 virtual void make_sorted() override
801 m_xComboBox->SetStyle(m_xComboBox->GetStyle() | WB_SORT);
804 virtual bool get_popup_shown() const override { return m_xComboBox->IsInDropDown(); }
806 virtual void connect_popup_toggled(const Link<ComboBox&, void>& rLink) override
808 weld::ComboBox::connect_popup_toggled(rLink);
809 ensure_event_listener();
812 void call_signal_custom_render(UserDrawEvent* pEvent)
814 vcl::RenderContext* pRenderContext = pEvent->GetRenderContext();
815 auto nPos = pEvent->GetItemId();
816 const tools::Rectangle& rRect = pEvent->GetRect();
817 const OUString sId = get_id(nPos);
818 signal_custom_render(*pRenderContext, rRect, pEvent->IsSelected(), sId);
819 m_xComboBox->DrawEntry(*pEvent); // draw separator
821 if (m_xMenuButton && m_xMenuButton->IsVisible() && m_sMenuButtonRow == sId)
823 vcl::Window* pEventWindow = m_xComboBox->GetMainWindow();
824 if (m_xMenuButton->GetParent() != pEventWindow)
825 m_xMenuButton->SetParent(pEventWindow);
826 int nButtonWidth = get_menu_button_width();
827 m_xMenuButton->SetSizePixel(Size(nButtonWidth, rRect.GetHeight()));
828 m_xMenuButton->SetPosPixel(Point(rRect.GetWidth() - nButtonWidth, rRect.Top()));
832 VclPtr<VirtualDevice> create_render_virtual_device() const override
834 auto xRet = VclPtr<VirtualDevice>::Create();
835 xRet->SetBackground(Application::GetSettings().GetStyleSettings().GetFieldColor());
836 return xRet;
839 virtual void set_item_menu(const OString& rIdent, weld::Menu* pMenu) override
841 SalInstanceMenu* pInstanceMenu = dynamic_cast<SalInstanceMenu*>(pMenu);
843 PopupMenu* pPopup = pInstanceMenu ? pInstanceMenu->getMenu() : nullptr;
845 if (!m_xMenuButton)
846 m_xMenuButton
847 = VclPtr<MenuButton>::Create(m_xComboBox, WB_FLATBUTTON | WB_NOPOINTERFOCUS);
849 m_xMenuButton->SetPopupMenu(pPopup);
850 m_xMenuButton->Show(pPopup != nullptr);
851 m_sMenuButtonRow = OUString::fromUtf8(rIdent);
854 int get_menu_button_width() const override
856 OutputDevice* pDefault = Application::GetDefaultDevice();
857 return 20 * (pDefault ? pDefault->GetDPIScaleFactor() : 1.0);
860 void CallHandleEventListener(VclWindowEvent& rEvent)
862 if (rEvent.GetId() == VclEventId::DropdownPreOpen
863 || rEvent.GetId() == VclEventId::DropdownClose)
865 signal_popup_toggled();
866 return;
868 SalInstanceWidget::HandleEventListener(rEvent);
872 class SalInstanceComboBoxWithoutEdit : public SalInstanceComboBox<ListBox>
874 private:
875 DECL_LINK(SelectHdl, ListBox&, void);
877 public:
878 SalInstanceComboBoxWithoutEdit(ListBox* pListBox, SalInstanceBuilder* pBuilder,
879 bool bTakeOwnership);
881 virtual OUString get_active_text() const override;
883 virtual void remove(int pos) override;
885 virtual void insert(int pos, const OUString& rStr, const OUString* pId,
886 const OUString* pIconName, VirtualDevice* pImageSurface) override;
888 virtual void insert_separator(int pos, const OUString& /*rId*/) override;
890 virtual bool has_entry() const override;
892 virtual bool changed_by_direct_pick() const override;
894 virtual void set_entry_message_type(weld::EntryMessageType /*eType*/) override;
896 virtual void set_entry_text(const OUString& /*rText*/) override;
898 virtual void select_entry_region(int /*nStartPos*/, int /*nEndPos*/) override;
900 virtual bool get_entry_selection_bounds(int& /*rStartPos*/, int& /*rEndPos*/) override;
902 virtual void set_entry_width_chars(int /*nChars*/) override;
904 virtual void set_entry_max_length(int /*nChars*/) override;
906 virtual void set_entry_completion(bool, bool bCaseSensitive = false) override;
908 virtual void set_entry_placeholder_text(const OUString&) override;
910 virtual void set_entry_editable(bool bEditable) override;
912 virtual void cut_entry_clipboard() override;
914 virtual void copy_entry_clipboard() override;
916 virtual void paste_entry_clipboard() override;
918 virtual void set_font(const vcl::Font& rFont) override;
920 virtual void set_entry_font(const vcl::Font&) override;
922 virtual vcl::Font get_entry_font() override;
924 virtual void set_custom_renderer(bool bOn) override;
926 virtual int get_max_mru_count() const override;
928 virtual void set_max_mru_count(int) override;
930 virtual OUString get_mru_entries() const override;
932 virtual void set_mru_entries(const OUString&) override;
934 virtual void HandleEventListener(VclWindowEvent& rEvent) override;
936 virtual ~SalInstanceComboBoxWithoutEdit() override;
939 class SalInstanceComboBoxWithEdit : public SalInstanceComboBox<ComboBox>
941 private:
942 DECL_LINK(ChangeHdl, Edit&, void);
943 DECL_LINK(EntryActivateHdl, Edit&, bool);
944 DECL_LINK(SelectHdl, ::ComboBox&, void);
945 DECL_LINK(UserDrawHdl, UserDrawEvent*, void);
946 WeldTextFilter m_aTextFilter;
947 bool m_bInSelect;
949 public:
950 SalInstanceComboBoxWithEdit(::ComboBox* pComboBox, SalInstanceBuilder* pBuilder,
951 bool bTakeOwnership);
953 virtual bool has_entry() const override;
955 virtual bool changed_by_direct_pick() const override;
957 virtual void set_entry_message_type(weld::EntryMessageType eType) override;
959 virtual OUString get_active_text() const override;
961 virtual void remove(int pos) override;
963 virtual void insert(int pos, const OUString& rStr, const OUString* pId,
964 const OUString* pIconName, VirtualDevice* pImageSurface) override;
966 virtual void insert_separator(int pos, const OUString& /*rId*/) override;
968 virtual void set_entry_text(const OUString& rText) override;
970 virtual void set_entry_width_chars(int nChars) override;
972 virtual void set_entry_max_length(int nChars) override;
974 virtual void set_entry_completion(bool bEnable, bool bCaseSensitive = false) override;
976 virtual void set_entry_placeholder_text(const OUString& rText) override;
978 virtual void set_entry_editable(bool bEditable) override;
980 virtual void cut_entry_clipboard() override;
982 virtual void copy_entry_clipboard() override;
984 virtual void paste_entry_clipboard() override;
986 virtual void select_entry_region(int nStartPos, int nEndPos) override;
988 virtual bool get_entry_selection_bounds(int& rStartPos, int& rEndPos) override;
990 virtual void set_font(const vcl::Font& rFont) override;
992 virtual void set_entry_font(const vcl::Font& rFont) override;
994 virtual vcl::Font get_entry_font() override;
996 virtual void set_custom_renderer(bool bOn) override;
998 virtual int get_max_mru_count() const override;
1000 virtual void set_max_mru_count(int nCount) override;
1002 virtual OUString get_mru_entries() const override;
1004 virtual void set_mru_entries(const OUString& rEntries) override;
1006 virtual void HandleEventListener(VclWindowEvent& rEvent) override;
1008 virtual void call_attention_to() override;
1010 virtual ~SalInstanceComboBoxWithEdit() override;
1013 class SalInstanceButton : public SalInstanceWidget, public virtual weld::Button
1015 private:
1016 VclPtr<::Button> m_xButton;
1017 Link<::Button*, void> const m_aOldClickHdl;
1019 DECL_LINK(ClickHdl, ::Button*, void);
1021 protected:
1022 void set_label_wrap(bool bWrap);
1024 public:
1025 SalInstanceButton(::Button* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1027 virtual void set_label(const OUString& rText) override;
1029 virtual void set_image(VirtualDevice* pDevice) override;
1031 virtual void set_image(const css::uno::Reference<css::graphic::XGraphic>& rImage) override;
1033 virtual void set_from_icon_name(const OUString& rIconName) override;
1035 virtual OUString get_label() const override;
1037 virtual void set_font(const vcl::Font& rFont) override;
1039 virtual void set_custom_button(VirtualDevice* pDevice) override;
1041 virtual ~SalInstanceButton() override;
1044 class SalInstanceNotebook : public SalInstanceWidget, public virtual weld::Notebook
1046 private:
1047 VclPtr<TabControl> m_xNotebook;
1048 mutable std::vector<std::shared_ptr<SalInstanceContainer>> m_aPages;
1049 std::map<OString, std::pair<VclPtr<TabPage>, VclPtr<VclGrid>>> m_aAddedPages;
1051 DECL_LINK(DeactivatePageHdl, TabControl*, bool);
1052 DECL_LINK(ActivatePageHdl, TabControl*, void);
1054 public:
1055 SalInstanceNotebook(TabControl* pNotebook, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1057 virtual int get_current_page() const override;
1059 virtual int get_page_index(const OString& rIdent) const override;
1061 virtual OString get_page_ident(int nPage) const override;
1063 virtual OString get_current_page_ident() const override;
1065 virtual weld::Container* get_page(const OString& rIdent) const override;
1067 virtual void set_current_page(int nPage) override;
1069 virtual void set_current_page(const OString& rIdent) override;
1071 virtual void remove_page(const OString& rIdent) override;
1073 virtual void insert_page(const OString& rIdent, const OUString& rLabel, int nPos) override;
1075 virtual int get_n_pages() const override;
1077 virtual OUString get_tab_label_text(const OString& rIdent) const override;
1079 virtual void set_tab_label_text(const OString& rIdent, const OUString& rText) override;
1081 virtual ~SalInstanceNotebook() override;
1084 class SalInstanceMessageDialog : public SalInstanceDialog, public virtual weld::MessageDialog
1086 protected:
1087 VclPtr<::MessageDialog> m_xMessageDialog;
1089 public:
1090 SalInstanceMessageDialog(::MessageDialog* pDialog, SalInstanceBuilder* pBuilder,
1091 bool bTakeOwnership);
1093 virtual void set_primary_text(const OUString& rText) override;
1095 virtual OUString get_primary_text() const override;
1097 virtual void set_secondary_text(const OUString& rText) override;
1099 virtual OUString get_secondary_text() const override;
1101 virtual weld::Container* weld_message_area() override;
1104 class SalInstanceCheckButton : public SalInstanceButton, public virtual weld::CheckButton
1106 private:
1107 VclPtr<CheckBox> m_xCheckButton;
1109 DECL_LINK(ToggleHdl, CheckBox&, void);
1111 public:
1112 SalInstanceCheckButton(CheckBox* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1114 virtual void set_active(bool active) override;
1116 virtual bool get_active() const override;
1118 virtual void set_inconsistent(bool inconsistent) override;
1120 virtual bool get_inconsistent() const override;
1122 virtual void set_label(const OUString& rText) override { SalInstanceButton::set_label(rText); }
1124 virtual OUString get_label() const override { return SalInstanceButton::get_label(); }
1126 virtual void set_label_wrap(bool wrap) override { SalInstanceButton::set_label_wrap(wrap); }
1128 virtual ~SalInstanceCheckButton() override;
1131 class SalInstanceDrawingArea : public SalInstanceWidget, public virtual weld::DrawingArea
1133 private:
1134 VclPtr<VclDrawingArea> m_xDrawingArea;
1136 typedef std::pair<vcl::RenderContext&, const tools::Rectangle&> target_and_area;
1137 DECL_LINK(PaintHdl, target_and_area, void);
1138 DECL_LINK(ResizeHdl, const Size&, void);
1139 DECL_LINK(MousePressHdl, const MouseEvent&, bool);
1140 DECL_LINK(MouseMoveHdl, const MouseEvent&, bool);
1141 DECL_LINK(MouseReleaseHdl, const MouseEvent&, bool);
1142 DECL_LINK(KeyPressHdl, const KeyEvent&, bool);
1143 DECL_LINK(KeyReleaseHdl, const KeyEvent&, bool);
1144 DECL_LINK(StyleUpdatedHdl, VclDrawingArea&, void);
1145 DECL_LINK(CommandHdl, const CommandEvent&, bool);
1146 DECL_LINK(QueryTooltipHdl, tools::Rectangle&, OUString);
1147 DECL_LINK(GetSurroundingHdl, OUString&, int);
1148 DECL_LINK(DeleteSurroundingHdl, const Selection&, bool);
1149 DECL_LINK(StartDragHdl, VclDrawingArea*, bool);
1151 // SalInstanceWidget has a generic listener for all these
1152 // events, ignore the ones we have specializations for
1153 // in VclDrawingArea
1154 virtual void HandleEventListener(VclWindowEvent& rEvent) override;
1156 virtual void HandleMouseEventListener(VclWindowEvent& rEvent) override;
1158 virtual bool HandleKeyEventListener(VclWindowEvent& /*rEvent*/) override;
1160 public:
1161 SalInstanceDrawingArea(VclDrawingArea* pDrawingArea, SalInstanceBuilder* pBuilder,
1162 const a11yref& rAlly, FactoryFunction pUITestFactoryFunction,
1163 void* pUserData, bool bTakeOwnership);
1165 virtual void queue_draw() override;
1167 virtual void queue_draw_area(int x, int y, int width, int height) override;
1169 virtual void connect_size_allocate(const Link<const Size&, void>& rLink) override;
1171 virtual void connect_key_press(const Link<const KeyEvent&, bool>& rLink) override;
1173 virtual void connect_key_release(const Link<const KeyEvent&, bool>& rLink) override;
1175 virtual void set_cursor(PointerStyle ePointerStyle) override;
1177 virtual Point get_pointer_position() const override;
1179 virtual void set_input_context(const InputContext& rInputContext) override;
1181 virtual void im_context_set_cursor_location(const tools::Rectangle& rCursorRect,
1182 int nExtTextInputWidth) override;
1184 virtual a11yref get_accessible_parent() override;
1186 virtual a11yrelationset get_accessible_relation_set() override;
1188 virtual Point get_accessible_location_on_screen() override;
1190 virtual void enable_drag_source(rtl::Reference<TransferDataContainer>& rHelper,
1191 sal_uInt8 eDNDConstants) override;
1193 virtual ~SalInstanceDrawingArea() override;
1195 virtual OutputDevice& get_ref_device() override;
1197 virtual void click(const Point& rPos) override;
1200 class SalInstanceToolbar : public SalInstanceWidget, public virtual weld::Toolbar
1202 protected:
1203 VclPtr<ToolBox> m_xToolBox;
1204 std::map<ToolBoxItemId, VclPtr<vcl::Window>> m_aFloats;
1205 std::map<ToolBoxItemId, VclPtr<PopupMenu>> m_aMenus;
1207 OString m_sStartShowIdent;
1209 DECL_LINK(ClickHdl, ToolBox*, void);
1210 DECL_LINK(DropdownClick, ToolBox*, void);
1211 DECL_LINK(MenuToggleListener, VclWindowEvent&, void);
1213 public:
1214 SalInstanceToolbar(ToolBox* pToolBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1216 virtual void set_item_sensitive(const OString& rIdent, bool bSensitive) override;
1218 virtual bool get_item_sensitive(const OString& rIdent) const override;
1220 virtual void set_item_visible(const OString& rIdent, bool bVisible) override;
1222 virtual void set_item_help_id(const OString& rIdent, const OString& rHelpId) override;
1224 virtual bool get_item_visible(const OString& rIdent) const override;
1226 virtual void set_item_active(const OString& rIdent, bool bActive) override;
1228 virtual bool get_item_active(const OString& rIdent) const override;
1230 void set_menu_item_active(const OString& rIdent, bool bActive) override;
1232 bool get_menu_item_active(const OString& rIdent) const override;
1234 virtual void set_item_popover(const OString& rIdent, weld::Widget* pPopover) override;
1236 virtual void set_item_menu(const OString& rIdent, weld::Menu* pMenu) override;
1238 virtual void insert_item(int pos, const OUString& rId) override;
1240 virtual void insert_separator(int pos, const OUString& /*rId*/) override;
1242 virtual int get_n_items() const override;
1244 virtual OString get_item_ident(int nIndex) const override;
1246 virtual void set_item_ident(int nIndex, const OString& rIdent) override;
1248 virtual void set_item_label(int nIndex, const OUString& rLabel) override;
1250 virtual OUString get_item_label(const OString& rIdent) const override;
1252 virtual void set_item_label(const OString& rIdent, const OUString& rLabel) override;
1254 virtual void set_item_icon_name(const OString& rIdent, const OUString& rIconName) override;
1256 virtual void set_item_image(const OString& rIdent,
1257 const css::uno::Reference<css::graphic::XGraphic>& rIcon) override;
1259 virtual void set_item_image(const OString& rIdent, VirtualDevice* pDevice) override;
1261 virtual void set_item_image(int nIndex,
1262 const css::uno::Reference<css::graphic::XGraphic>& rIcon) override;
1264 virtual void set_item_tooltip_text(int nIndex, const OUString& rTip) override;
1266 virtual void set_item_tooltip_text(const OString& rIdent, const OUString& rTip) override;
1268 virtual OUString get_item_tooltip_text(const OString& rIdent) const override;
1270 virtual vcl::ImageType get_icon_size() const override;
1272 virtual void set_icon_size(vcl::ImageType eType) override;
1274 virtual sal_uInt16 get_modifier_state() const override;
1276 virtual int get_drop_index(const Point& rPoint) const override;
1278 virtual ~SalInstanceToolbar() override;
1281 class SalInstanceTextView : public SalInstanceWidget, public virtual weld::TextView
1283 private:
1284 VclPtr<VclMultiLineEdit> m_xTextView;
1285 Link<ScrollBar*, void> m_aOrigVScrollHdl;
1287 DECL_LINK(ChangeHdl, Edit&, void);
1288 DECL_LINK(VscrollHdl, ScrollBar*, void);
1289 DECL_LINK(CursorListener, VclWindowEvent&, void);
1291 public:
1292 SalInstanceTextView(VclMultiLineEdit* pTextView, SalInstanceBuilder* pBuilder,
1293 bool bTakeOwnership);
1295 virtual void set_text(const OUString& rText) override;
1297 virtual void replace_selection(const OUString& rText) override;
1299 virtual OUString get_text() const override;
1301 bool get_selection_bounds(int& rStartPos, int& rEndPos) override;
1303 virtual void select_region(int nStartPos, int nEndPos) override;
1305 virtual void set_editable(bool bEditable) override;
1306 virtual bool get_editable() const override;
1307 virtual void set_max_length(int nChars) override;
1309 virtual void set_monospace(bool bMonospace) override;
1311 virtual void set_font(const vcl::Font& rFont) override;
1313 virtual void set_font_color(const Color& rColor) override;
1315 virtual void connect_cursor_position(const Link<TextView&, void>& rLink) override;
1317 virtual bool can_move_cursor_with_up() const override;
1319 virtual bool can_move_cursor_with_down() const override;
1321 virtual void cut_clipboard() override;
1323 virtual void copy_clipboard() override;
1325 virtual void paste_clipboard() override;
1327 virtual void set_alignment(TxtAlign eXAlign) override;
1329 virtual int vadjustment_get_value() const override;
1331 virtual void vadjustment_set_value(int value) override;
1333 virtual int vadjustment_get_upper() const override;
1335 virtual int vadjustment_get_lower() const override;
1337 virtual int vadjustment_get_page_size() const override;
1339 virtual bool has_focus() const override;
1341 virtual ~SalInstanceTextView() override;
1344 struct SalInstanceTreeIter final : public weld::TreeIter
1346 SalInstanceTreeIter(const SalInstanceTreeIter* pOrig)
1347 : iter(pOrig ? pOrig->iter : nullptr)
1350 SalInstanceTreeIter(SvTreeListEntry* pIter)
1351 : iter(pIter)
1354 virtual bool equal(const TreeIter& rOther) const override
1356 return iter == static_cast<const SalInstanceTreeIter&>(rOther).iter;
1358 SvTreeListEntry* iter;
1361 class SalInstanceTreeView : public SalInstanceWidget, public virtual weld::TreeView
1363 protected:
1364 // owner for UserData
1365 std::vector<std::unique_ptr<OUString>> m_aUserData;
1366 VclPtr<SvTabListBox> m_xTreeView;
1367 SvLBoxButtonData m_aCheckButtonData;
1368 SvLBoxButtonData m_aRadioButtonData;
1369 // currently expanding parent that logically, but not currently physically,
1370 // contain placeholders
1371 o3tl::sorted_vector<SvTreeListEntry*> m_aExpandingPlaceHolderParents;
1372 // which columns should be custom rendered
1373 o3tl::sorted_vector<int> m_aCustomRenders;
1374 bool m_bTogglesAsRadio;
1375 int m_nSortColumn;
1377 DECL_LINK(SelectHdl, SvTreeListBox*, void);
1378 DECL_LINK(DeSelectHdl, SvTreeListBox*, void);
1379 DECL_LINK(DoubleClickHdl, SvTreeListBox*, bool);
1380 DECL_LINK(ExpandingHdl, SvTreeListBox*, bool);
1381 DECL_LINK(EndDragHdl, HeaderBar*, void);
1382 DECL_LINK(HeaderBarClickedHdl, HeaderBar*, void);
1383 DECL_LINK(ToggleHdl, SvLBoxButtonData*, void);
1384 DECL_LINK(ModelChangedHdl, SvTreeListBox*, void);
1385 DECL_LINK(StartDragHdl, SvTreeListBox*, bool);
1386 DECL_STATIC_LINK(SalInstanceTreeView, FinishDragHdl, SvTreeListBox*, void);
1387 DECL_LINK(EditingEntryHdl, SvTreeListEntry*, bool);
1388 typedef std::pair<SvTreeListEntry*, OUString> IterString;
1389 DECL_LINK(EditedEntryHdl, IterString, bool);
1390 DECL_LINK(VisibleRangeChangedHdl, SvTreeListBox*, void);
1391 DECL_LINK(CompareHdl, const SvSortData&, sal_Int32);
1392 DECL_LINK(PopupMenuHdl, const CommandEvent&, bool);
1393 DECL_LINK(TooltipHdl, const HelpEvent&, bool);
1394 DECL_LINK(CustomRenderHdl, svtree_render_args, void);
1395 DECL_LINK(CustomMeasureHdl, svtree_measure_args, Size);
1397 // Each row has a cell for the expander image, (and an optional cell for a
1398 // checkbutton if enable_toggle_buttons has been called) which precede
1399 // index 0
1400 int to_internal_model(int col) const;
1402 int to_external_model(int col) const;
1404 bool IsDummyEntry(SvTreeListEntry* pEntry) const;
1406 SvTreeListEntry* GetPlaceHolderChild(SvTreeListEntry* pEntry) const;
1408 static void set_font_color(SvTreeListEntry* pEntry, const Color& rColor);
1410 void AddStringItem(SvTreeListEntry* pEntry, const OUString& rStr, int nCol);
1412 void do_insert(const weld::TreeIter* pParent, int pos, const OUString* pStr,
1413 const OUString* pId, const OUString* pIconName,
1414 const VirtualDevice* pImageSurface, bool bChildrenOnDemand, weld::TreeIter* pRet,
1415 bool bIsSeparator);
1417 void update_checkbutton_column_width(SvTreeListEntry* pEntry);
1419 void InvalidateModelEntry(SvTreeListEntry* pEntry);
1421 void do_set_toggle(SvTreeListEntry* pEntry, TriState eState, int col);
1423 static TriState do_get_toggle(SvTreeListEntry* pEntry, int col);
1425 TriState get_toggle(SvTreeListEntry* pEntry, int col) const;
1427 void set_toggle(SvTreeListEntry* pEntry, TriState eState, int col);
1429 bool get_text_emphasis(SvTreeListEntry* pEntry, int col) const;
1431 void set_header_item_width(const std::vector<int>& rWidths);
1433 public:
1434 SalInstanceTreeView(SvTabListBox* pTreeView, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1436 virtual void connect_query_tooltip(const Link<const weld::TreeIter&, OUString>& rLink) override;
1438 virtual void columns_autosize() override;
1440 virtual void freeze() override;
1442 virtual void thaw() override;
1444 virtual void set_column_fixed_widths(const std::vector<int>& rWidths) override;
1446 virtual void set_column_editables(const std::vector<bool>& rEditables) override;
1448 virtual void set_centered_column(int nCol) override;
1450 virtual int get_column_width(int nColumn) const override;
1452 virtual OUString get_column_title(int nColumn) const override;
1454 virtual void set_column_title(int nColumn, const OUString& rTitle) override;
1456 virtual void set_column_custom_renderer(int nColumn, bool bEnable) override;
1458 virtual void queue_draw() override;
1460 virtual void show() override;
1462 virtual void hide() override;
1464 virtual void insert(const weld::TreeIter* pParent, int pos, const OUString* pStr,
1465 const OUString* pId, const OUString* pIconName,
1466 VirtualDevice* pImageSurface, bool bChildrenOnDemand,
1467 weld::TreeIter* pRet) override;
1469 virtual void insert_separator(int pos, const OUString& /*rId*/) override;
1471 virtual void
1472 bulk_insert_for_each(int nSourceCount,
1473 const std::function<void(weld::TreeIter&, int nSourceIndex)>& func,
1474 const weld::TreeIter* pParent = nullptr,
1475 const std::vector<int>* pFixedWidths = nullptr) override;
1477 virtual void set_font_color(int pos, const Color& rColor) override;
1479 virtual void set_font_color(const weld::TreeIter& rIter, const Color& rColor) override;
1481 virtual void remove(int pos) override;
1483 virtual int find_text(const OUString& rText) const override;
1485 virtual int find_id(const OUString& rId) const override;
1487 virtual void swap(int pos1, int pos2) override;
1489 virtual void clear() override;
1491 virtual int n_children() const override;
1493 virtual int iter_n_children(const weld::TreeIter& rIter) const override;
1495 virtual void select(int pos) override;
1497 virtual int get_cursor_index() const override;
1499 virtual void set_cursor(int pos) override;
1501 virtual void scroll_to_row(int pos) override;
1503 virtual bool is_selected(int pos) const override;
1505 virtual void unselect(int pos) override;
1507 virtual std::vector<int> get_selected_rows() const override;
1509 OUString get_text(SvTreeListEntry* pEntry, int col) const;
1511 virtual OUString get_text(int pos, int col = -1) const override;
1513 void set_text(SvTreeListEntry* pEntry, const OUString& rText, int col);
1515 virtual void set_text(int pos, const OUString& rText, int col = -1) override;
1517 void set_sensitive(SvTreeListEntry* pEntry, bool bSensitive, int col);
1519 using SalInstanceWidget::set_sensitive;
1521 virtual void set_sensitive(int pos, bool bSensitive, int col = -1) override;
1523 virtual void set_sensitive(const weld::TreeIter& rIter, bool bSensitive, int col = -1) override;
1525 virtual TriState get_toggle(int pos, int col = -1) const override;
1527 virtual TriState get_toggle(const weld::TreeIter& rIter, int col = -1) const override;
1529 virtual void enable_toggle_buttons(weld::ColumnToggleType eType) override;
1531 virtual void set_toggle(int pos, TriState eState, int col = -1) override;
1533 virtual void set_toggle(const weld::TreeIter& rIter, TriState eState, int col = -1) override;
1535 virtual void set_clicks_to_toggle(int nToggleBehavior) override;
1537 virtual void set_extra_row_indent(const weld::TreeIter& rIter, int nIndentLevel) override;
1539 void set_text_emphasis(SvTreeListEntry* pEntry, bool bOn, int col = -1);
1541 virtual void set_text_emphasis(const weld::TreeIter& rIter, bool bOn, int col) override;
1543 virtual void set_text_emphasis(int pos, bool bOn, int col) override;
1545 virtual bool get_text_emphasis(const weld::TreeIter& rIter, int col) const override;
1547 virtual bool get_text_emphasis(int pos, int col) const override;
1549 void set_text_align(SvTreeListEntry* pEntry, double fAlign, int col);
1551 virtual void set_text_align(const weld::TreeIter& rIter, double fAlign, int col) override;
1553 virtual void set_text_align(int pos, double fAlign, int col) override;
1555 virtual void connect_editing(const Link<const weld::TreeIter&, bool>& rStartLink,
1556 const Link<const iter_string&, bool>& rEndLink) override;
1558 virtual void start_editing(const weld::TreeIter& rIter) override;
1560 virtual void end_editing() override;
1562 void set_image(SvTreeListEntry* pEntry, const Image& rImage, int col);
1564 virtual void set_image(int pos, const OUString& rImage, int col = -1) override;
1566 virtual void set_image(int pos, const css::uno::Reference<css::graphic::XGraphic>& rImage,
1567 int col = -1) override;
1569 virtual void set_image(int pos, VirtualDevice& rImage, int col = -1) override;
1571 virtual void set_image(const weld::TreeIter& rIter, const OUString& rImage,
1572 int col = -1) override;
1574 virtual void set_image(const weld::TreeIter& rIter,
1575 const css::uno::Reference<css::graphic::XGraphic>& rImage,
1576 int col = -1) override;
1578 virtual void set_image(const weld::TreeIter& rIter, VirtualDevice& rImage,
1579 int col = -1) override;
1581 const OUString* getEntryData(int index) const;
1583 virtual OUString get_id(int pos) const override;
1585 void set_id(SvTreeListEntry* pEntry, const OUString& rId);
1587 virtual void set_id(int pos, const OUString& rId) override;
1589 virtual int get_selected_index() const override;
1591 virtual OUString get_selected_text() const override;
1593 virtual OUString get_selected_id() const override;
1595 virtual std::unique_ptr<weld::TreeIter> make_iterator(const weld::TreeIter* pOrig
1596 = nullptr) const override;
1598 virtual void copy_iterator(const weld::TreeIter& rSource, weld::TreeIter& rDest) const override;
1600 virtual bool get_selected(weld::TreeIter* pIter) const override;
1602 virtual bool get_cursor(weld::TreeIter* pIter) const override;
1604 virtual void set_cursor(const weld::TreeIter& rIter) override;
1606 virtual bool get_iter_first(weld::TreeIter& rIter) const override;
1608 virtual bool get_iter_abs_pos(weld::TreeIter& rIter, int nPos) const;
1610 virtual bool iter_next_sibling(weld::TreeIter& rIter) const override;
1612 virtual bool iter_previous_sibling(weld::TreeIter& rIter) const override;
1614 virtual bool iter_next(weld::TreeIter& rIter) const override;
1616 virtual bool iter_previous(weld::TreeIter& rIter) const override;
1618 virtual bool iter_children(weld::TreeIter& rIter) const override;
1620 virtual bool iter_parent(weld::TreeIter& rIter) const override;
1622 virtual void remove(const weld::TreeIter& rIter) override;
1624 virtual void select(const weld::TreeIter& rIter) override;
1626 virtual void scroll_to_row(const weld::TreeIter& rIter) override;
1628 virtual void unselect(const weld::TreeIter& rIter) override;
1630 virtual int get_iter_depth(const weld::TreeIter& rIter) const override;
1632 virtual bool iter_has_child(const weld::TreeIter& rIter) const override;
1634 virtual bool get_row_expanded(const weld::TreeIter& rIter) const override;
1636 virtual bool get_children_on_demand(const weld::TreeIter& rIter) const override;
1638 virtual void set_children_on_demand(const weld::TreeIter& rIter,
1639 bool bChildrenOnDemand) override;
1641 virtual void expand_row(const weld::TreeIter& rIter) override;
1643 virtual void collapse_row(const weld::TreeIter& rIter) override;
1645 virtual OUString get_text(const weld::TreeIter& rIter, int col = -1) const override;
1647 virtual void set_text(const weld::TreeIter& rIter, const OUString& rText,
1648 int col = -1) override;
1650 virtual OUString get_id(const weld::TreeIter& rIter) const override;
1652 virtual void set_id(const weld::TreeIter& rIter, const OUString& rId) override;
1654 virtual void enable_drag_source(rtl::Reference<TransferDataContainer>& rHelper,
1655 sal_uInt8 eDNDConstants) override;
1657 virtual void set_selection_mode(SelectionMode eMode) override;
1659 virtual void all_foreach(const std::function<bool(weld::TreeIter&)>& func) override;
1661 virtual void selected_foreach(const std::function<bool(weld::TreeIter&)>& func) override;
1663 virtual void visible_foreach(const std::function<bool(weld::TreeIter&)>& func) override;
1665 virtual void connect_visible_range_changed(const Link<weld::TreeView&, void>& rLink) override;
1667 virtual void remove_selection() override;
1669 virtual bool is_selected(const weld::TreeIter& rIter) const override;
1671 virtual int get_iter_index_in_parent(const weld::TreeIter& rIter) const override;
1673 virtual int iter_compare(const weld::TreeIter& a, const weld::TreeIter& b) const override;
1675 virtual void move_subtree(weld::TreeIter& rNode, const weld::TreeIter* pNewParent,
1676 int nIndexInNewParent) override;
1678 virtual int count_selected_rows() const override;
1680 virtual int get_height_rows(int nRows) const override;
1682 virtual void make_sorted() override;
1684 virtual void set_sort_func(
1685 const std::function<int(const weld::TreeIter&, const weld::TreeIter&)>& func) override;
1687 virtual void make_unsorted() override;
1689 virtual void set_sort_order(bool bAscending) override;
1691 virtual bool get_sort_order() const override;
1693 virtual void set_sort_indicator(TriState eState, int col) override;
1695 virtual TriState get_sort_indicator(int col) const override;
1697 virtual int get_sort_column() const override;
1699 virtual void set_sort_column(int nColumn) override;
1701 SvTabListBox& getTreeView();
1703 virtual bool get_dest_row_at_pos(const Point& rPos, weld::TreeIter* pResult,
1704 bool bDnDMode) override;
1706 virtual void unset_drag_dest_row() override;
1708 virtual tools::Rectangle get_row_area(const weld::TreeIter& rIter) const override;
1710 virtual TreeView* get_drag_source() const override;
1712 virtual int vadjustment_get_value() const override;
1714 virtual void vadjustment_set_value(int nValue) override;
1716 virtual void set_show_expanders(bool bShow) override;
1718 virtual bool changed_by_hover() const override;
1720 virtual ~SalInstanceTreeView() override;
1723 class SalInstanceExpander : public SalInstanceWidget, public virtual weld::Expander
1725 private:
1726 VclPtr<VclExpander> m_xExpander;
1728 DECL_LINK(ExpandedHdl, VclExpander&, void);
1730 public:
1731 SalInstanceExpander(VclExpander* pExpander, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1733 virtual void set_label(const OUString& rText) override;
1735 virtual OUString get_label() const override;
1737 virtual bool get_expanded() const override;
1739 virtual void set_expanded(bool bExpand) override;
1741 virtual bool has_focus() const override;
1743 virtual void grab_focus() override;
1745 virtual ~SalInstanceExpander() override;
1748 class SalInstanceIconView : public SalInstanceWidget, public virtual weld::IconView
1750 private:
1751 // owner for UserData
1752 std::vector<std::unique_ptr<OUString>> m_aUserData;
1753 VclPtr<::IconView> m_xIconView;
1755 DECL_LINK(SelectHdl, SvTreeListBox*, void);
1756 DECL_LINK(DeSelectHdl, SvTreeListBox*, void);
1757 DECL_LINK(DoubleClickHdl, SvTreeListBox*, bool);
1758 DECL_LINK(CommandHdl, const CommandEvent&, bool);
1759 DECL_LINK(TooltipHdl, const HelpEvent&, bool);
1761 public:
1762 SalInstanceIconView(::IconView* pIconView, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1764 virtual int get_item_width() const override;
1765 virtual void set_item_width(int width) override;
1767 virtual void freeze() override;
1769 virtual void thaw() override;
1771 virtual void insert(int pos, const OUString* pStr, const OUString* pId,
1772 const OUString* pIconName, weld::TreeIter* pRet) override;
1774 virtual void insert(int pos, const OUString* pStr, const OUString* pId,
1775 const VirtualDevice* pIcon, weld::TreeIter* pRet) override;
1777 virtual void connect_query_tooltip(const Link<const weld::TreeIter&, OUString>& rLink) override;
1779 virtual OUString get_selected_id() const override;
1781 virtual OUString get_selected_text() const override;
1783 virtual int count_selected_items() const override;
1785 virtual void select(int pos) override;
1787 virtual void unselect(int pos) override;
1789 virtual int n_children() const override;
1791 virtual std::unique_ptr<weld::TreeIter> make_iterator(const weld::TreeIter* pOrig
1792 = nullptr) const override;
1794 virtual bool get_selected(weld::TreeIter* pIter) const override;
1796 virtual bool get_cursor(weld::TreeIter* pIter) const override;
1798 virtual void set_cursor(const weld::TreeIter& rIter) override;
1800 virtual bool get_iter_first(weld::TreeIter& rIter) const override;
1802 virtual void scroll_to_item(const weld::TreeIter& rIter) override;
1804 virtual void selected_foreach(const std::function<bool(weld::TreeIter&)>& func) override;
1806 virtual OUString get_id(const weld::TreeIter& rIter) const override;
1808 virtual void clear() override;
1810 virtual ~SalInstanceIconView() override;
1813 class SalInstanceRadioButton : public SalInstanceButton, public virtual weld::RadioButton
1815 private:
1816 VclPtr<::RadioButton> m_xRadioButton;
1818 DECL_LINK(ToggleHdl, ::RadioButton&, void);
1820 public:
1821 SalInstanceRadioButton(::RadioButton* pButton, SalInstanceBuilder* pBuilder,
1822 bool bTakeOwnership);
1824 virtual void set_active(bool active) override;
1826 virtual bool get_active() const override;
1828 virtual void set_image(VirtualDevice* pDevice) override;
1830 virtual void set_image(const css::uno::Reference<css::graphic::XGraphic>& rImage) override;
1832 virtual void set_from_icon_name(const OUString& rIconName) override;
1834 virtual void set_inconsistent(bool /*inconsistent*/) override;
1836 virtual bool get_inconsistent() const override;
1838 virtual void set_label(const OUString& rText) override { SalInstanceButton::set_label(rText); }
1840 virtual OUString get_label() const override { return SalInstanceButton::get_label(); }
1842 virtual void set_label_wrap(bool wrap) override { SalInstanceButton::set_label_wrap(wrap); }
1844 virtual ~SalInstanceRadioButton() override;
1847 class SalInstanceFrame : public SalInstanceContainer, public virtual weld::Frame
1849 private:
1850 VclPtr<VclFrame> m_xFrame;
1852 public:
1853 SalInstanceFrame(VclFrame* pFrame, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1855 virtual void set_label(const OUString& rText) override;
1857 virtual OUString get_label() const override;
1859 virtual std::unique_ptr<weld::Label> weld_label_widget() const override;
1862 class SalInstanceMenuButton : public SalInstanceButton, public virtual weld::MenuButton
1864 protected:
1865 VclPtr<::MenuButton> m_xMenuButton;
1866 sal_uInt16 m_nLastId;
1868 DECL_LINK(MenuSelectHdl, ::MenuButton*, void);
1869 DECL_LINK(ActivateHdl, ::MenuButton*, void);
1871 public:
1872 SalInstanceMenuButton(::MenuButton* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1874 virtual void set_active(bool active) override;
1876 virtual bool get_active() const override;
1878 virtual void set_inconsistent(bool /*inconsistent*/) override;
1880 virtual bool get_inconsistent() const override;
1882 virtual void insert_item(int pos, const OUString& rId, const OUString& rStr,
1883 const OUString* pIconName, VirtualDevice* pImageSurface,
1884 TriState eCheckRadioFalse) override;
1886 virtual void insert_separator(int pos, const OUString& rId) override;
1888 virtual void set_item_sensitive(const OString& rIdent, bool bSensitive) override;
1890 virtual void remove_item(const OString& rId) override;
1892 virtual void clear() override;
1894 virtual void set_item_active(const OString& rIdent, bool bActive) override;
1896 virtual void set_item_label(const OString& rIdent, const OUString& rText) override;
1898 virtual OUString get_item_label(const OString& rIdent) const override;
1900 virtual void set_item_visible(const OString& rIdent, bool bShow) override;
1902 virtual void set_popover(weld::Widget* pPopover) override;
1904 virtual ~SalInstanceMenuButton() override;
1907 class SalInstancePopover : public SalInstanceContainer, public virtual weld::Popover
1909 private:
1910 VclPtr<DockingWindow> m_xPopover;
1912 DECL_LINK(PopupModeEndHdl, FloatingWindow*, void);
1914 void ImplPopDown();
1916 public:
1917 SalInstancePopover(DockingWindow* pPopover, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1919 ~SalInstancePopover();
1921 virtual void popup_at_rect(weld::Widget* pParent, const tools::Rectangle& rRect,
1922 weld::Placement ePlace = weld::Placement::Under) override;
1924 virtual void popdown() override;
1926 virtual void resize_to_request() override;
1929 class SalInstanceBox : public SalInstanceContainer, public virtual weld::Box
1931 private:
1932 VclPtr<VclBox> m_xBox;
1934 public:
1935 SalInstanceBox(VclBox* pContainer, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1936 virtual void reorder_child(weld::Widget* pWidget, int nNewPosition) override;
1937 virtual void sort_native_button_order() override;
1940 class SalInstanceImage : public SalInstanceWidget, public virtual weld::Image
1942 private:
1943 VclPtr<FixedImage> m_xImage;
1945 public:
1946 SalInstanceImage(FixedImage* pImage, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
1948 virtual void set_from_icon_name(const OUString& rIconName) override;
1950 virtual void set_image(VirtualDevice* pDevice) override;
1952 virtual void set_image(const css::uno::Reference<css::graphic::XGraphic>& rImage) override;
1955 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */