summaryrefslogtreecommitdiff
path: root/svtools
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-07-15 12:10:32 +0100
committerCaolán McNamara <caolanm@redhat.com>2020-07-21 10:25:42 +0200
commit6e7e19d9c300dbdd279789b09f94781e946fad52 (patch)
tree09155fadd224d8907d0dff7378e5041d3fe6cb1e /svtools
parent299638cab15831d31e7906d557d4f95239be4df9 (diff)
weld DateControl
replace SpinButton when WB_SPINBUTTON is set on a date field to always use a popover with a calendar in it to make it possible to integrate this with native widgets Change-Id: I36a26599a154bddf9aec9b50b6570e13477a1f63 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98858 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'svtools')
-rw-r--r--svtools/source/brwbox/ebbcontrols.cxx69
-rw-r--r--svtools/uiconfig/ui/datewindow.ui54
-rw-r--r--svtools/uiconfig/ui/thineditcontrol.ui83
3 files changed, 182 insertions, 24 deletions
diff --git a/svtools/source/brwbox/ebbcontrols.cxx b/svtools/source/brwbox/ebbcontrols.cxx
index ba90f7f5a3a2..3f1c0196e838 100644
--- a/svtools/source/brwbox/ebbcontrols.cxx
+++ b/svtools/source/brwbox/ebbcontrols.cxx
@@ -18,6 +18,7 @@
#include <svtools/editbrowsebox.hxx>
#include <vcl/spinfld.hxx>
+#include <vcl/svapp.hxx>
#include <vcl/xtextedt.hxx>
#include <vcl/textview.hxx>
#include <vcl/virdev.hxx>
@@ -467,6 +468,74 @@ namespace svt
InitFormattedControlBase();
}
+ DateControl::DateControl(BrowserDataWin* pParent, bool bDropDown)
+ : FormattedControlBase(pParent, false)
+ , 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_xTodayBtn(m_xCalendarBuilder->weld_button("today"))
+ , m_xNoneBtn(m_xCalendarBuilder->weld_button("none"))
+ {
+ m_xEntryFormatter.reset(new weld::DateFormatter(*m_xEntry));
+ InitFormattedControlBase();
+
+ m_xMenuButton->set_popover(m_xTopLevel.get());
+ m_xMenuButton->set_visible(bDropDown);
+ m_xMenuButton->connect_toggled(LINK(this, DateControl, ToggleHdl));
+
+ m_xTodayBtn->connect_clicked(LINK(this, DateControl, ImplClickHdl));
+ m_xNoneBtn->connect_clicked(LINK(this, DateControl, ImplClickHdl));
+
+ m_xCalendar->connect_activated(LINK(this, DateControl, ActivateHdl));
+ }
+
+ IMPL_LINK(DateControl, ImplClickHdl, weld::Button&, rBtn, void)
+ {
+ m_xMenuButton->set_active(false);
+ get_widget().grab_focus();
+
+ if (&rBtn == m_xTodayBtn.get())
+ {
+ Date aToday(Date::SYSTEM);
+ SetDate(aToday);
+ }
+ else if (&rBtn == m_xNoneBtn.get())
+ {
+ get_widget().set_text(OUString());
+ }
+ }
+
+ IMPL_LINK(DateControl, ToggleHdl, weld::ToggleButton&, rButton, void)
+ {
+ if (rButton.get_active())
+ m_xCalendar->set_date(static_cast<weld::DateFormatter&>(get_formatter()).GetDate());
+ }
+
+ IMPL_LINK_NOARG(DateControl, ActivateHdl, weld::Calendar&, void)
+ {
+ if (m_xMenuButton->get_active())
+ m_xMenuButton->set_active(false);
+ static_cast<weld::DateFormatter&>(get_formatter()).SetDate(m_xCalendar->get_date());
+ }
+
+ void DateControl::SetDate(const Date& rDate)
+ {
+ static_cast<weld::DateFormatter&>(get_formatter()).SetDate(rDate);
+ m_xCalendar->set_date(rDate);
+ }
+
+ void DateControl::dispose()
+ {
+ m_xTodayBtn.reset();
+ m_xNoneBtn.reset();
+ m_xCalendar.reset();
+ m_xTopLevel.reset();
+ m_xCalendarBuilder.reset();
+ m_xMenuButton.reset();
+ FormattedControlBase::dispose();
+ }
+
EditCellController::EditCellController(EditControlBase* pEdit)
: CellController(pEdit)
, m_pEditImplementation(new EntryImplementation(*pEdit))
diff --git a/svtools/uiconfig/ui/datewindow.ui b/svtools/uiconfig/ui/datewindow.ui
index bce2ff038a94..0e7729afe74e 100644
--- a/svtools/uiconfig/ui/datewindow.ui
+++ b/svtools/uiconfig/ui/datewindow.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.1 -->
+<!-- Generated with glade 3.36.0 -->
<interface domain="svt">
<requires lib="gtk+" version="3.18"/>
<object class="GtkPopover" id="date_popup_window">
@@ -26,6 +26,58 @@
<property name="position">0</property>
</packing>
</child>
+ <child>
+ <object class="GtkSeparator">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButtonBox" id="buttonbox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <property name="layout_style">spread</property>
+ <child>
+ <object class="GtkButton" id="today">
+ <property name="label" context="calendar|STR_SVT_CALENDAR_TODAY">Today</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="none">
+ <property name="label" context="calendar|STR_SVT_CALENDAR_NONE">None</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
</child>
</object>
diff --git a/svtools/uiconfig/ui/thineditcontrol.ui b/svtools/uiconfig/ui/thineditcontrol.ui
index 8fd8f891d778..d734a8f269b8 100644
--- a/svtools/uiconfig/ui/thineditcontrol.ui
+++ b/svtools/uiconfig/ui/thineditcontrol.ui
@@ -1,42 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.2 -->
+<!-- Generated with glade 3.36.0 -->
<interface domain="svt">
<requires lib="gtk+" version="3.18"/>
+ <object class="GtkImage" id="image7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">sc/res/date.png</property>
+ <property name="icon_size">2</property>
+ </object>
<object class="GtkBox" id="EditControl">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkEntry" id="entry">
- <property name="can_focus">True</property>
- <property name="no_show_all">True</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <property name="has_frame">False</property>
- <property name="activates_default">True</property>
- <property name="width_chars">1</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
<child>
- <object class="GtkSpinButton" id="spinbutton">
- <property name="can_focus">True</property>
- <property name="no_show_all">True</property>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
- <property name="has_frame">False</property>
+ <child>
+ <object class="GtkSpinButton" id="spinbutton">
+ <property name="can_focus">True</property>
+ <property name="no_show_all">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="has_frame">False</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry">
+ <property name="can_focus">True</property>
+ <property name="no_show_all">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="has_frame">False</property>
+ <property name="activates_default">True</property>
+ <property name="width_chars">1</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="button">
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="no_show_all">True</property>
+ <property name="halign">end</property>
+ <property name="image">image7</property>
+ <property name="margin_left">1</property>
+ <property name="always_show_image">True</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="button-atkobject">
+ <property name="AtkObject::accessible-name" translatable="yes" context="thineditcontrol|button">Pick Date</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>