summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/jsdialog/executor.hxx4
-rw-r--r--include/vcl/weld.hxx2
-rw-r--r--svtools/source/brwbox/ebbcontrols.cxx2
-rw-r--r--svtools/source/control/ctrlbox.cxx4
-rw-r--r--svtools/uiconfig/ui/datewindow.ui2
-rw-r--r--vcl/inc/jsdialog/jsdialogbuilder.hxx8
-rw-r--r--vcl/jsdialog/enabled.cxx1
-rw-r--r--vcl/jsdialog/executor.cxx21
-rw-r--r--vcl/jsdialog/jsdialogbuilder.cxx19
9 files changed, 59 insertions, 4 deletions
diff --git a/include/vcl/jsdialog/executor.hxx b/include/vcl/jsdialog/executor.hxx
index 005f9f36070d..26fd7070e86c 100644
--- a/include/vcl/jsdialog/executor.hxx
+++ b/include/vcl/jsdialog/executor.hxx
@@ -86,6 +86,10 @@ public:
rButton.signal_selected(rIdent);
}
+ static void trigger_selected(weld::Calendar& rCalendar) { rCalendar.signal_selected(); }
+
+ static void trigger_activated(weld::Calendar& rCalendar) { rCalendar.signal_activated(); }
+
static void trigger_value_changed(weld::SpinButton& rSpinButton)
{
rSpinButton.signal_value_changed();
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 8d1b5cf7722f..df1bb05c4575 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -1896,6 +1896,8 @@ public:
class VCL_DLLPUBLIC Calendar : virtual public Widget
{
+ friend class ::LOKTrigger;
+
Link<Calendar&, void> m_aSelectedHdl;
Link<Calendar&, void> m_aActivatedHdl;
diff --git a/svtools/source/brwbox/ebbcontrols.cxx b/svtools/source/brwbox/ebbcontrols.cxx
index dc86194576e2..45b1a3766e76 100644
--- a/svtools/source/brwbox/ebbcontrols.cxx
+++ b/svtools/source/brwbox/ebbcontrols.cxx
@@ -531,7 +531,7 @@ namespace svt
, m_xMenuButton(m_xBuilder->weld_menu_button("button"))
, m_xCalendarBuilder(Application::CreateBuilder(m_xMenuButton.get(), "svt/ui/datewindow.ui"))
, m_xTopLevel(m_xCalendarBuilder->weld_widget("date_popup_window"))
- , m_xCalendar(m_xCalendarBuilder->weld_calendar("date"))
+ , m_xCalendar(m_xCalendarBuilder->weld_calendar("date_picker"))
, m_xExtras(m_xCalendarBuilder->weld_widget("extras"))
, m_xTodayBtn(m_xCalendarBuilder->weld_button("today"))
, m_xNoneBtn(m_xCalendarBuilder->weld_button("none"))
diff --git a/svtools/source/control/ctrlbox.cxx b/svtools/source/control/ctrlbox.cxx
index ef6334a856c9..b33051f7c911 100644
--- a/svtools/source/control/ctrlbox.cxx
+++ b/svtools/source/control/ctrlbox.cxx
@@ -1576,8 +1576,8 @@ SvtCalendarBox::SvtCalendarBox(std::unique_ptr<weld::MenuButton> pControl, bool
: m_bUseLabel(bUseLabel)
, m_xControl(std::move(pControl))
, m_xBuilder(Application::CreateBuilder(m_xControl.get(), "svt/ui/datewindow.ui"))
- , m_xTopLevel(m_xBuilder->weld_widget("date_popup_window"))
- , m_xCalendar(m_xBuilder->weld_calendar("date"))
+ , m_xTopLevel(m_xBuilder->weld_popover("date_popup_window"))
+ , m_xCalendar(m_xBuilder->weld_calendar("date_picker"))
{
m_xControl->set_popover(m_xTopLevel.get());
m_xCalendar->connect_selected(LINK(this, SvtCalendarBox, SelectHdl));
diff --git a/svtools/uiconfig/ui/datewindow.ui b/svtools/uiconfig/ui/datewindow.ui
index 9467cbb73213..265affe4afcb 100644
--- a/svtools/uiconfig/ui/datewindow.ui
+++ b/svtools/uiconfig/ui/datewindow.ui
@@ -14,7 +14,7 @@
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
- <object class="GtkCalendar" id="date">
+ <object class="GtkCalendar" id="date_picker">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="year">2019</property>
diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 4d38d66fe9f1..06e2c6135171 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -314,6 +314,7 @@ public:
virtual std::unique_ptr<weld::Box> weld_box(const OUString& id) override;
virtual std::unique_ptr<weld::Widget> weld_widget(const OUString& id) override;
virtual std::unique_ptr<weld::Image> weld_image(const OUString& id) override;
+ virtual std::unique_ptr<weld::Calendar> weld_calendar(const OUString& id) override;
static weld::MessageDialog*
CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
@@ -861,4 +862,11 @@ public:
virtual void set_image(const css::uno::Reference<css::graphic::XGraphic>& rImage) override;
};
+class JSCalendar : public JSWidget<SalInstanceCalendar, ::Calendar>
+{
+public:
+ JSCalendar(JSDialogSender* pSender, ::Calendar* pCalendar, SalInstanceBuilder* pBuilder,
+ bool bTakeOwnership);
+};
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx
index bc80fa12109f..f82ded6c5cad 100644
--- a/vcl/jsdialog/enabled.cxx
+++ b/vcl/jsdialog/enabled.cxx
@@ -279,6 +279,7 @@ bool isBuilderEnabledForPopup(std::u16string_view rUIFile)
|| rUIFile == u"modules/scalc/ui/floatingborderstyle.ui"
|| rUIFile == u"modules/scalc/ui/floatinglinestyle.ui"
// svt
+ || rUIFile == u"svt/ui/datewindow.ui"
|| rUIFile == u"svt/ui/linewindow.ui"
// svx
|| rUIFile == u"svx/ui/colorwindow.ui"
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index af514bc70dde..98babfb65023 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -589,6 +589,27 @@ bool ExecuteAction(const OUString& nWindowId, const OUString& rWidget, StringMap
}
}
}
+ else if (sControlType == "calendar")
+ {
+ auto pCalendar = dynamic_cast<weld::Calendar*>(pWidget);
+ if (pCalendar && sAction == "selectdate")
+ {
+ // MM/DD/YYYY
+ OUString aDate = rData["data"];
+
+ if (aDate.getLength() < 10)
+ return false;
+
+ sal_Int32 aMonth = o3tl::toInt32(aDate.subView(0, 2));
+ sal_Int32 aDay = o3tl::toInt32(aDate.subView(3, 2));
+ sal_Int32 aYear = o3tl::toInt32(aDate.subView(6, 4));
+
+ pCalendar->set_date(Date(aDay, aMonth, aYear));
+ LOKTrigger::trigger_selected(*pCalendar);
+ LOKTrigger::trigger_activated(*pCalendar);
+ return true;
+ }
+ }
}
return false;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index d37c5c2ffb59..0f2f23950add 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -1258,6 +1258,19 @@ std::unique_ptr<weld::Image> JSInstanceBuilder::weld_image(const OUString& id)
return pWeldWidget;
}
+std::unique_ptr<weld::Calendar> JSInstanceBuilder::weld_calendar(const OUString& id)
+{
+ ::Calendar* pCalendar = m_xBuilder->get<::Calendar>(id);
+
+ auto pWeldWidget
+ = pCalendar ? std::make_unique<JSCalendar>(this, pCalendar, this, false) : nullptr;
+
+ if (pWeldWidget)
+ RememberWidget(id, pWeldWidget.get());
+
+ return pWeldWidget;
+}
+
weld::MessageDialog*
JSInstanceBuilder::CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType,
VclButtonsType eButtonType, const OUString& rPrimaryMessage,
@@ -2240,4 +2253,10 @@ void JSImage::set_image(const css::uno::Reference<css::graphic::XGraphic>& rImag
sendUpdate();
}
+JSCalendar::JSCalendar(JSDialogSender* pSender, ::Calendar* pCalendar, SalInstanceBuilder* pBuilder,
+ bool bTakeOwnership)
+ : JSWidget<SalInstanceCalendar, ::Calendar>(pSender, pCalendar, pBuilder, bTakeOwnership)
+{
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */