diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-07-15 12:10:32 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-07-21 10:25:42 +0200 |
commit | 6e7e19d9c300dbdd279789b09f94781e946fad52 (patch) | |
tree | 09155fadd224d8907d0dff7378e5041d3fe6cb1e /svtools | |
parent | 299638cab15831d31e7906d557d4f95239be4df9 (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.cxx | 69 | ||||
-rw-r--r-- | svtools/uiconfig/ui/datewindow.ui | 54 | ||||
-rw-r--r-- | svtools/uiconfig/ui/thineditcontrol.ui | 83 |
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> |