LibreOffice Module vcl (master)  1
weldutils.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9 
10 #include <com/sun/star/util/URLTransformer.hpp>
11 #include <com/sun/star/frame/Desktop.hpp>
13 #include <svl/zforlist.hxx>
14 #include <svl/zformat.hxx>
15 #include <vcl/builderpage.hxx>
17 #include <vcl/settings.hxx>
18 #include <vcl/svapp.hxx>
19 #include <vcl/weldutils.hxx>
20 
22  const OUString& rUIXMLDescription, const OString& rID, bool bIsMobile)
23  : m_pDialogController(pController)
24  , m_xBuilder(Application::CreateBuilder(pParent, rUIXMLDescription, bIsMobile))
25  , m_xContainer(m_xBuilder->weld_container(rID))
26 {
27 }
28 
30 
32 
33 BuilderPage::~BuilderPage() COVERITY_NOEXCEPT_FALSE {}
34 
35 namespace weld
36 {
37 bool DialogController::runAsync(const std::shared_ptr<DialogController>& rController,
38  const std::function<void(sal_Int32)>& func)
39 {
40  return rController->getDialog()->runAsync(rController, func);
41 }
42 
43 DialogController::~DialogController() COVERITY_NOEXCEPT_FALSE {}
44 
46 
48  const OString& rDialogId, bool bMobile)
49  : m_xBuilder(Application::CreateBuilder(pParent, rUIFile, bMobile))
50  , m_xDialog(m_xBuilder->weld_dialog(rDialogId))
51 {
52 }
53 
55 
57 
59  const OString& rDialogId,
60  const OString& rRelocateId)
61  : m_xBuilder(Application::CreateBuilder(pParent, rUIFile))
62  , m_xDialog(m_xBuilder->weld_message_dialog(rDialogId))
63  , m_xContentArea(m_xDialog->weld_message_area())
64 {
65  if (!rRelocateId.isEmpty())
66  {
67  m_xRelocate = m_xBuilder->weld_container(rRelocateId);
68  m_xOrigParent = m_xRelocate->weld_parent();
69  //fdo#75121, a bit tricky because the widgets we want to align with
70  //don't actually exist in the ui description, they're implied
71  m_xOrigParent->move(m_xRelocate.get(), m_xContentArea.get());
72  }
73 }
74 
76 {
77  if (m_xRelocate)
78  {
79  m_xContentArea->move(m_xRelocate.get(), m_xOrigParent.get());
80  }
81 }
82 
83 AssistantController::AssistantController(weld::Widget* pParent, const OUString& rUIFile,
84  const OString& rDialogId)
85  : m_xBuilder(Application::CreateBuilder(pParent, rUIFile))
86  , m_xAssistant(m_xBuilder->weld_assistant(rDialogId))
87 {
88 }
89 
91 
93 
95 {
96  if (bTriStateEnabled)
97  {
98  switch (eState)
99  {
100  case TRISTATE_INDET:
101  rToggle.set_state(TRISTATE_FALSE);
102  break;
103  case TRISTATE_TRUE:
104  rToggle.set_state(TRISTATE_INDET);
105  break;
106  case TRISTATE_FALSE:
107  rToggle.set_state(TRISTATE_TRUE);
108  break;
109  }
110  }
111  eState = rToggle.get_state();
112 }
113 
115 {
116  if (rTreeView.iter_has_child(rParent))
117  {
118  std::unique_ptr<weld::TreeIter> xNewParent(rTreeView.make_iterator(&rParent));
119  if (!rTreeView.iter_parent(*xNewParent))
120  xNewParent.reset();
121 
122  while (true)
123  {
124  std::unique_ptr<weld::TreeIter> xChild(rTreeView.make_iterator(&rParent));
125  if (!rTreeView.iter_children(*xChild))
126  break;
127  rTreeView.move_subtree(*xChild, xNewParent.get(), -1);
128  }
129  }
130  rTreeView.remove(rParent);
131 }
132 
134  : m_rEntry(rSpinButton)
135  , m_pSpinButton(&rSpinButton)
136  , m_eOptions(Application::GetSettings().GetStyleSettings().GetSelectionOptions())
137 {
138  Init();
139 }
140 
142  : m_rEntry(rEntry)
143  , m_pSpinButton(nullptr)
144  , m_eOptions(Application::GetSettings().GetStyleSettings().GetSelectionOptions())
145 {
146  Init();
147 }
148 
150 {
153  if (m_pSpinButton)
154  m_pSpinButton->SetFormatter(nullptr);
155 }
156 
158 {
159  m_rEntry.connect_changed(LINK(this, EntryFormatter, ModifyHdl));
160  m_rEntry.connect_focus_out(LINK(this, EntryFormatter, FocusOutHdl));
161  if (m_pSpinButton)
163 }
164 
166 {
167  int nStartPos, nEndPos;
168  m_rEntry.get_selection_bounds(nStartPos, nEndPos);
169  return Selection(nStartPos, nEndPos);
170 }
171 
172 OUString EntryFormatter::GetEntryText() const { return m_rEntry.get_text(); }
173 
174 void EntryFormatter::SetEntryText(const OUString& rText, const Selection& rSel)
175 {
176  m_rEntry.set_text(rText);
177  auto nMin = rSel.Min();
178  auto nMax = rSel.Max();
179  m_rEntry.select_region(nMin < 0 ? 0 : nMin, nMax == SELECTION_MAX ? -1 : nMax);
180 }
181 
183 {
184  m_rEntry.set_font_color(pColor ? *pColor : COL_AUTO);
185 }
186 
187 void EntryFormatter::UpdateCurrentValue(double dCurrentValue)
188 {
189  Formatter::UpdateCurrentValue(dCurrentValue);
190  if (m_pSpinButton)
192 }
193 
195 {
197  if (m_pSpinButton)
199 }
200 
202 {
204  if (m_pSpinButton)
206 }
207 
209 {
211  if (m_pSpinButton)
213 }
214 
216 {
218  if (m_pSpinButton)
220 }
221 
222 void EntryFormatter::SetSpinSize(double dStep)
223 {
224  Formatter::SetSpinSize(dStep);
225  if (m_pSpinButton)
227 }
228 
230 
232 
234 {
235  // This leads to FieldModified getting called at the end of Modify() and
236  // FieldModified then calls any modification callback
237  Modify();
238 }
239 
241 {
242  EntryLostFocus();
243  m_aFocusOutHdl.Call(m_rEntry);
244 }
245 
247  : EntryFormatter(rEntry)
248 {
250 }
251 
253  : EntryFormatter(rSpinButton)
254 {
256 }
257 
259 
261 {
264 }
265 
266 bool DoubleNumericFormatter::CheckText(const OUString& sText) const
267 {
268  // We'd like to implement this using the NumberFormatter::IsNumberFormat, but unfortunately, this doesn't
269  // recognize fragments of numbers (like, for instance "1e", which happens during entering e.g. "1e10")
270  // Thus, the roundabout way via a regular expression
271  return m_pNumberValidator->isValidNumericFragment(sText);
272 }
273 
275 {
276  // the thousands and the decimal separator are language dependent
277  const SvNumberformat* pFormatEntry = GetOrCreateFormatter()->GetEntry(m_nFormatKey);
278 
279  sal_Unicode cSeparatorThousand = ',';
280  sal_Unicode cSeparatorDecimal = '.';
281  if (pFormatEntry)
282  {
283  LocaleDataWrapper aLocaleInfo(LanguageTag(pFormatEntry->GetLanguage()));
284 
285  OUString sSeparator = aLocaleInfo.getNumThousandSep();
286  if (!sSeparator.isEmpty())
287  cSeparatorThousand = sSeparator[0];
288 
289  sSeparator = aLocaleInfo.getNumDecimalSep();
290  if (!sSeparator.isEmpty())
291  cSeparatorDecimal = sSeparator[0];
292  }
293 
294  m_pNumberValidator.reset(
295  new validation::NumberValidator(cSeparatorThousand, cSeparatorDecimal));
296 }
297 
299  : EntryFormatter(rEntry)
300  , m_bThousandSep(true)
301 {
302  Init();
303 }
304 
306  : EntryFormatter(rSpinButton)
307  , m_bThousandSep(true)
308 {
309  Init();
310 }
311 
313 {
314  SetOutputHdl(LINK(this, LongCurrencyFormatter, FormatOutputHdl));
315  SetInputHdl(LINK(this, LongCurrencyFormatter, ParseInputHdl));
316 }
317 
319 {
320  m_bThousandSep = b;
321  ReFormat();
322 }
323 
325 {
326  m_aCurrencySymbol = rStr;
327  ReFormat();
328 }
329 
331 
333  : EntryFormatter(rEntry)
334  , m_eFormat(TimeFieldFormat::F_NONE)
335  , m_eTimeFormat(TimeFormat::Hour24)
336  , m_bDuration(false)
337 {
338  Init();
339 }
340 
342  : EntryFormatter(rSpinButton)
343  , m_eFormat(TimeFieldFormat::F_NONE)
344  , m_eTimeFormat(TimeFormat::Hour24)
345  , m_bDuration(false)
346 {
347  Init();
348 }
349 
351 {
352  DisableRemainderFactor(); //so with hh::mm::ss, incrementing mm will not reset ss
353 
354  SetOutputHdl(LINK(this, TimeFormatter, FormatOutputHdl));
355  SetInputHdl(LINK(this, TimeFormatter, ParseInputHdl));
356 
357  SetMin(tools::Time(0, 0));
358  SetMax(tools::Time(23, 59, 59, 999999999));
359 
360  // so the spin size can depend on which zone the cursor is in
361  get_widget().connect_cursor_position(LINK(this, TimeFormatter, CursorChangedHdl));
362  // and set the initial spin size
363  CursorChangedHdl(get_widget());
364 }
365 
367 {
368  switch (eFormat)
369  {
371  {
373  m_bDuration = false;
375  }
376  break;
378  {
380  m_bDuration = false;
382  }
383  break;
385  {
387  m_bDuration = false;
389  }
390  break;
392  {
394  m_bDuration = false;
396  }
397  break;
399  {
400  m_bDuration = true;
402  }
403  break;
405  {
406  m_bDuration = true;
408  }
409  break;
410  }
411 
412  ReFormat();
413 }
414 
415 void TimeFormatter::SetDuration(bool bDuration)
416 {
417  m_bDuration = bDuration;
418  ReFormat();
419 }
420 
422 {
423  m_eFormat = eTimeFormat;
424  ReFormat();
425 }
426 
428 
430  : EntryFormatter(rEntry)
431  , m_eFormat(ExtDateFieldFormat::SystemShort)
432 {
433  Init();
434 }
435 
437 {
438  SetOutputHdl(LINK(this, DateFormatter, FormatOutputHdl));
439  SetInputHdl(LINK(this, DateFormatter, ParseInputHdl));
440 
441  SetMin(Date(1, 1, 1900));
442  SetMax(Date(31, 12, 2200));
443 }
444 
446 {
447  m_eFormat = eFormat;
448  ReFormat();
449 }
450 
452 
454  : m_rEntry(rEntry)
455  , m_bStrictFormat(false)
456  , m_bSameMask(true)
457  , m_bReformat(false)
458  , m_bInPattKeyInput(false)
459 {
460  m_rEntry.connect_changed(LINK(this, PatternFormatter, ModifyHdl));
461  m_rEntry.connect_focus_in(LINK(this, PatternFormatter, FocusInHdl));
462  m_rEntry.connect_focus_out(LINK(this, PatternFormatter, FocusOutHdl));
463  m_rEntry.connect_key_press(LINK(this, PatternFormatter, KeyInputHdl));
464 }
465 
467 
469 {
470  EntryLostFocus();
471  m_aFocusOutHdl.Call(m_rEntry);
472 }
473 
475 {
476  EntryGainFocus();
477  m_aFocusInHdl.Call(m_rEntry);
478 }
479 
481 {
484 }
485 
487 {
488  // load this little .ui just to measure the height of an Entry
489  std::unique_ptr<weld::Builder> xBuilder(
490  Application::CreateBuilder(nullptr, "cui/ui/namedialog.ui"));
491  std::unique_ptr<weld::Entry> xEntry(xBuilder->weld_entry("name_entry"));
492  return xEntry->get_preferred_size().Height();
493 }
494 
496  : mWidget(widget)
497 {
498  css::uno::Reference<css::uno::XComponentContext> xContext
499  = ::comphelper::getProcessComponentContext();
500  css::uno::Reference<css::frame::XDesktop2> xDesktop = css::frame::Desktop::create(xContext);
501 
502  css::uno::Reference<css::frame::XFrame> xFrame(xDesktop->getActiveFrame());
503  if (!xFrame.is())
504  xFrame = xDesktop;
505 
506  mxFrame = xFrame;
507 
508  maCommandURL.Complete = aCommand;
509  css::uno::Reference<css::util::XURLTransformer> xParser
510  = css::util::URLTransformer::create(xContext);
511  xParser->parseStrict(maCommandURL);
512 }
513 
515 {
516  if (mxDispatch.is())
517  mxDispatch->removeStatusListener(this, maCommandURL);
518 
519  css::uno::Reference<css::frame::XDispatchProvider> xDispatchProvider(mxFrame,
520  css::uno::UNO_QUERY);
521  if (!xDispatchProvider.is())
522  return;
523 
524  mxDispatch = xDispatchProvider->queryDispatch(maCommandURL, "", 0);
525  if (mxDispatch.is())
526  mxDispatch->addStatusListener(this, maCommandURL);
527 }
528 
529 void WidgetStatusListener::statusChanged(const css::frame::FeatureStateEvent& rEvent)
530 {
531  mWidget->set_sensitive(rEvent.IsEnabled);
532 }
533 
534 void WidgetStatusListener::disposing(const css::lang::EventObject& /*Source*/)
535 {
536  mxDispatch.clear();
537 }
538 
540 {
541  if (mxDispatch.is())
542  {
543  mxDispatch->removeStatusListener(this, maCommandURL);
544  mxDispatch.clear();
545  }
546  mxFrame.clear();
547  mWidget = nullptr;
548 }
549 }
550 
551 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
PatternFormatter(weld::Entry &rEntry)
Definition: weldutils.cxx:453
std::shared_ptr< weld::Dialog > m_xDialog
Definition: weld.hxx:2324
TimeFormatter(weld::Entry &rEntry)
Definition: weldutils.cxx:332
virtual void connect_changed(const Link< Entry &, void > &rLink)
Definition: weld.hxx:1509
virtual void connect_focus_out(const Link< Widget &, void > &rLink)
Definition: weld.hxx:184
virtual void SetMinValue(double dMin) override
Definition: weldutils.cxx:201
LongCurrencyFormatter(weld::Entry &rEntry)
Definition: weldutils.cxx:298
void SetDuration(bool bDuration)
Definition: weldutils.cxx:415
ExtTimeFieldFormat
Definition: vclenum.hxx:148
void SetCurrencySymbol(const OUString &rStr)
Definition: weldutils.cxx:324
TimeFieldFormat
Definition: vclenum.hxx:28
virtual bool iter_parent(TreeIter &rIter) const =0
void SetInputHdl(const Link< sal_Int64 *, TriState > &rLink)
Definition: formatter.hxx:236
virtual Dialog * getDialog() override
Definition: weldutils.cxx:90
virtual void SetEntryText(const OUString &rText, const Selection &rSel) override
Definition: weldutils.cxx:174
virtual SelectionOptions GetEntrySelectionOptions() const override
Definition: weldutils.cxx:229
SelectionOptions
Definition: settings.hxx:181
virtual void ClearMaxValue()
Definition: formatter.hxx:166
Reference< XFrame > xFrame
FORMAT_CHANGE_TYPE
Definition: formatter.hxx:74
void SetTimeFormat(TimeFieldFormat eTimeFormat)
Definition: weldutils.cxx:421
Link< weld::Entry &, void > m_aModifyHdl
Definition: weldutils.hxx:235
virtual ~TimeFormatter() override
Definition: field2.cxx:2648
the first 4 of these are only used by base/dbaccess
void SAL_CALL disposing(const css::lang::EventObject &) override
Definition: weldutils.cxx:534
static weld::Builder * CreateBuilder(weld::Widget *pParent, const OUString &rUIFile, bool bMobile=false)
Definition: builder.cxx:162
std::unique_ptr< weld::Builder > m_xBuilder
Definition: weld.hxx:2336
std::unique_ptr< weld::Widget > m_xRelocate
Definition: weld.hxx:2339
void RemoveParentKeepChildren(weld::TreeView &rTreeView, weld::TreeIter &rParent)
Definition: weldutils.cxx:114
virtual ~MessageDialogController() override
Definition: weldutils.cxx:75
void SetExtFormat(ExtTimeFieldFormat eFormat)
Definition: weldutils.cxx:366
void DisableRemainderFactor()
Definition: fmtfield.cxx:875
TimeFormat m_eTimeFormat
Definition: weldutils.hxx:315
virtual Dialog * getDialog() override
Definition: weldutils.cxx:45
virtual void set_text(const OUString &rText)=0
TRISTATE_TRUE
virtual void SetMinValue(double dMin)
Definition: fmtfield.cxx:701
void ReFormat()
Definition: fmtfield.cxx:685
virtual ~BuilderPage() COVERITY_NOEXCEPT_FALSE
Definition: weldutils.cxx:33
virtual void sync_increments_from_formatter()=0
virtual std::unique_ptr< TreeIter > make_iterator(const TreeIter *pOrig=nullptr) const =0
virtual void ClearMinValue() override
Definition: weldutils.cxx:194
std::unique_ptr< weld::Container > m_xOrigParent
Definition: weld.hxx:2340
constexpr::Color COL_AUTO(0xFF, 0xFF, 0xFF, 0xFF)
static bool runAsync(const std::shared_ptr< DialogController > &rController, const std::function< void(sal_Int32)> &)
Definition: weldutils.cxx:37
sal_uInt16 sal_Unicode
Reference< XNameAccess > m_xContainer
virtual ~DateFormatter() override
Definition: field2.cxx:1688
virtual void ClearMaxValue() override
Definition: weldutils.cxx:208
TimeFormat
Definition: vclenum.hxx:143
virtual void SetMaxValue(double dMin) override
Definition: weldutils.cxx:215
virtual void UpdateCurrentValue(double dCurrentValue)
Definition: formatter.hxx:311
css::uno::Reference< css::frame::XDispatch > mxDispatch
The widget on which actions are performed.
Definition: weldutils.hxx:177
virtual bool CheckText(const OUString &sText) const override
Definition: weldutils.cxx:266
void SetOutputHdl(const Link< LinkParamNone *, bool > &rLink)
Definition: formatter.hxx:237
css::util::URL maCommandURL
Definition: weldutils.hxx:178
virtual void Deactivate()
Definition: weldutils.cxx:31
ExtDateFieldFormat m_eFormat
Definition: weldutils.hxx:345
TRISTATE_INDET
weld::Entry & m_rEntry
Definition: weldutils.hxx:233
AssistantController(weld::Widget *pParent, const OUString &rUIFile, const OString &rDialogId)
Definition: weldutils.cxx:83
const OUString & getNumDecimalSep() const
long Min() const
virtual bool get_selection_bounds(int &rStartPos, int &rEndPos)=0
virtual ~DialogController() COVERITY_NOEXCEPT_FALSE
Definition: weldutils.cxx:43
virtual void ClearMinValue()
Definition: formatter.hxx:161
virtual ~GenericDialogController() COVERITY_NOEXCEPT_FALSE override
Definition: weldutils.cxx:54
virtual OUString GetEntryText() const override
Definition: weldutils.cxx:172
virtual void FormatChanged(FORMAT_CHANGE_TYPE nWhat) override
Definition: weldutils.cxx:260
virtual void connect_cursor_position(const Link< Entry &, void > &rLink)
Definition: weld.hxx:1513
virtual void FormatChanged(FORMAT_CHANGE_TYPE nWhat)
Definition: fmtfield.cxx:626
TRISTATE_FALSE
virtual bool iter_has_child(const TreeIter &rIter) const =0
std::unique_ptr< weld::Container > m_xContentArea
Definition: weld.hxx:2338
virtual void select_region(int nStartPos, int nEndPos)=0
virtual ~DoubleNumericFormatter() override
TimeFieldFormat m_eFormat
Definition: weldutils.hxx:314
weld::Entry & get_widget()
Definition: weldutils.hxx:199
virtual void connect_focus_in(const Link< Widget &, void > &rLink)
Definition: weld.hxx:178
virtual Selection GetEntrySelection() const override
Definition: weldutils.cxx:165
Base class used mainly for the LibreOffice Desktop class.
Definition: svapp.hxx:230
virtual void SetMaxValue(double dMax)
Definition: fmtfield.cxx:711
void SetUseThousandSep(bool b)
Definition: weldutils.cxx:318
void ButtonToggled(ToggleButton &rToggle)
Definition: weldutils.cxx:94
virtual void connect_key_press(const Link< const KeyEvent &, bool > &rLink)
Definition: weld.hxx:205
virtual OUString get_text() const =0
WidgetStatusListener(weld::Widget *widget, const OUString &rCommand)
Definition: weldutils.cxx:495
void SetMax(const Date &rNewMax)
Definition: field2.cxx:1731
virtual void Activate()
Definition: weldutils.cxx:29
void SAL_CALL statusChanged(const css::frame::FeatureStateEvent &rEvent) override
Definition: weldutils.cxx:529
virtual bool iter_children(TreeIter &rIter) const =0
virtual void remove(int pos)=0
virtual void UpdateCurrentValue(double dCurrentValue) override
Definition: weldutils.cxx:187
ExtDateFieldFormat
Definition: vclenum.hxx:156
EntryFormatter(weld::Entry &rEntry)
Definition: weldutils.cxx:141
void SetMin(const Date &rNewMin)
Definition: field2.cxx:1724
virtual Dialog * getDialog() override
Definition: weldutils.cxx:56
IMPL_LINK_NOARG(HexColorControl, OnAsyncModifyHdl, void *, void)
virtual ~EntryFormatter() override
Definition: weldutils.cxx:149
const SvNumberformat * GetEntry(sal_uInt32 nKey) const
void SetExtDateFormat(ExtDateFieldFormat eFormat)
Definition: weldutils.cxx:445
std::unique_ptr< validation::NumberValidator > m_pNumberValidator
Definition: weldutils.hxx:260
TriState get_state() const
Definition: weld.hxx:1304
virtual ~AssistantController() override
Definition: weldutils.cxx:92
virtual void FieldModified() override
Definition: weldutils.cxx:231
Reference< XExecutableDialog > m_xDialog
virtual void sync_value_from_formatter()=0
css::uno::Reference< css::frame::XFrame > mxFrame
Definition: weldutils.hxx:179
DateFormatter(weld::Entry &rEntry)
Definition: weldutils.cxx:429
virtual void SetEntryTextColor(const Color *pColor) override
Definition: weldutils.cxx:182
const OUString & getNumThousandSep() const
virtual ~LongCurrencyFormatter() override
Definition: longcurr.cxx:287
SvNumberFormatter * GetOrCreateFormatter() const
Definition: formatter.hxx:192
#define SELECTION_MAX
virtual void sync_range_from_formatter()=0
weld::Entry & m_rEntry
Definition: weldutils.hxx:373
void set_state(TriState eState)
Definition: weld.hxx:1313
long Max() const
SelectionOptions m_eOptions
Definition: weldutils.hxx:237
virtual void SetFormatter(weld::EntryFormatter *pFormatter)=0
void SetMax(const tools::Time &rNewMax)
Definition: field2.cxx:2664
std::unique_ptr< weld::Assistant > m_xAssistant
Definition: weld.hxx:2366
std::unique_ptr< weld::MessageDialog > m_xDialog
Definition: weld.hxx:2337
int GetMinimumEditHeight()
Definition: weldutils.cxx:486
sal_uLong m_nFormatKey
Definition: formatter.hxx:123
LanguageType GetLanguage() const
virtual void move_subtree(TreeIter &rNode, const TreeIter *pNewParent, int nIndexInNewParent)=0
virtual void set_sensitive(bool sensitive)=0
virtual void set_font_color(const Color &rColor)=0
virtual void SetSpinSize(double dStep)
Definition: formatter.hxx:224
DoubleNumericFormatter(weld::Entry &rEntry)
Definition: weldutils.cxx:246
GenericDialogController(weld::Widget *pParent, const OUString &rUIFile, const OString &rDialogId, bool bMobile=false)
Definition: weldutils.cxx:47
MessageDialogController(weld::Widget *pParent, const OUString &rUIFile, const OString &rDialogId, const OString &rRelocateId=OString())
Definition: weldutils.cxx:58
BuilderPage(weld::Widget *pParent, weld::DialogController *pController, const OUString &rUIXMLDescription, const OString &rID, bool bIsMobile=false)
Definition: weldutils.cxx:21
void SetMin(const tools::Time &rNewMin)
Definition: field2.cxx:2657
virtual void SetSpinSize(double dStep) override
Definition: weldutils.cxx:222
weld::FormattedSpinButton * m_pSpinButton
Definition: weldutils.hxx:234