summaryrefslogtreecommitdiff
path: root/libreofficekit
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2022-06-01 08:30:03 +0200
committerMiklos Vajna <vmiklos@collabora.com>2022-06-01 11:27:16 +0200
commitabb92442d6f36bf65a36735ee33451adb1f5df2e (patch)
tree413cabadc466408ac867c7baaa43170d55c83be0 /libreofficekit
parentcc549ee5be9026bdacfbc76db92b7adff4a05492 (diff)
sw content controls, date: add LOK API
- send a LOK_CALLBACK_CONTENT_CONTROL with date=true when entering a date content control - extend lok::Document::sendContentControlEvent() to be able to set the date of a date content control (after the client's date picker is closed) - update gtktiledviewer to work with these (cherry picked from commit 9cb1a07dc2760a30d7f321aa7fa4ce2a460dfa6c) Change-Id: I0abf21eb1d4ba233050f0aa2607b68740c048262 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135223 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'libreofficekit')
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx3
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx4
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.hxx1
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx27
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx1
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtv.ui45
6 files changed, 81 insertions, 0 deletions
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx b/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx
index eadcd1a01c76..6816a17fcc2f 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx
@@ -229,6 +229,9 @@ void LOKDocViewSigHandlers::contentControl(LOKDocView* pDocView, gchar* pJson, g
}
}
+ boost::optional<boost::property_tree::ptree&> oDate = aTree.get_child_optional("date");
+ gtk_widget_set_sensitive(GTK_WIDGET(toolbar->m_pContentControlDateSelector), bool(oDate));
+
gtv_application_window_set_part_broadcast(window, true);
}
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx b/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx
index afe6162f76fc..84c5335b32c2 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx
@@ -118,6 +118,8 @@ gtv_main_toolbar_init(GtvMainToolbar* toolbar)
toolbar->m_pFormulabar = GTK_WIDGET(gtk_builder_get_object(builder.get(), "formulabar_entry"));
toolbar->m_pContentControlSelector
= GTK_WIDGET(gtk_builder_get_object(builder.get(), "combo_contentcontrolselector"));
+ toolbar->m_pContentControlDateSelector
+ = GTK_WIDGET(gtk_builder_get_object(builder.get(), "menu_contentcontroldateselector"));
// TODO: compile with -rdynamic and get rid of it
gtk_builder_add_callback_symbol(builder.get(), "btn_clicked", G_CALLBACK(btn_clicked));
@@ -132,6 +134,8 @@ gtv_main_toolbar_init(GtvMainToolbar* toolbar)
gtk_builder_add_callback_symbol(builder.get(), "changePart", G_CALLBACK(changePart));
gtk_builder_add_callback_symbol(builder.get(), "changeContentControl",
G_CALLBACK(changeContentControl));
+ gtk_builder_add_callback_symbol(builder.get(), "changeDateContentControl",
+ G_CALLBACK(changeDateContentControl));
gtk_builder_add_callback_symbol(builder.get(), "changeZoom", G_CALLBACK(changeZoom));
gtk_builder_add_callback_symbol(builder.get(), "toggleFindbar", G_CALLBACK(toggleFindbar));
gtk_builder_add_callback_symbol(builder.get(), "documentRedline", G_CALLBACK(documentRedline));
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.hxx b/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.hxx
index e385e6e855d1..91827ef92695 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.hxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.hxx
@@ -30,6 +30,7 @@ struct GtvMainToolbar
GtkWidget* m_pAddressbar;
GtkWidget* m_pFormulabar;
GtkWidget* m_pContentControlSelector;
+ GtkWidget* m_pContentControlDateSelector;
};
struct GtvMainToolbarClass
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx
index 0afce9b671db..bb0e7edd390d 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx
@@ -334,6 +334,33 @@ void changeContentControl(GtkWidget* pSelector, gpointer /*pItem*/)
}
}
+void changeDateContentControl(GtkWidget* pSelector, gpointer /*pItem*/)
+{
+ GtvApplicationWindow* window = GTV_APPLICATION_WINDOW(gtk_widget_get_toplevel(pSelector));
+ if (gtv_application_window_get_part_broadcast(window) && window->lokdocview)
+ {
+ GtkPopover* pPopover = GTK_POPOVER(gtk_widget_get_parent(gtk_widget_get_parent(pSelector)));
+ guint nYear, nMonth, nDay;
+ gtk_calendar_get_date(GTK_CALENDAR(pSelector), &nYear, &nMonth, &nDay);
+ gtk_popover_popdown(pPopover);
+
+ std::stringstream aDate;
+ aDate << std::setfill('0') << std::setw(4) << nYear;
+ aDate << "-";
+ aDate << std::setfill('0') << std::setw(2) << (nMonth + 1);
+ aDate << "-";
+ aDate << std::setfill('0') << std::setw(2) << nDay;
+ aDate << "T00:00:00Z";
+ boost::property_tree::ptree aValues;
+ aValues.put("type", "date");
+ aValues.put("selected", aDate.str());
+ std::stringstream aStream;
+ boost::property_tree::write_json(aStream, aValues);
+ std::string aJson = aStream.str();
+ lok_doc_view_send_content_control_event(LOK_DOC_VIEW(window->lokdocview), aJson.c_str());
+ }
+}
+
void changeZoom( GtkWidget* pButton, gpointer /* pItem */ )
{
static const float fZooms[] = { 0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 3.0, 5.0 };
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx
index c5cf89c281fc..c06017d87414 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx
@@ -69,6 +69,7 @@ gboolean signalFormulabar(GtkWidget* /*pWidget*/, GdkEventKey* /*pEvent*/, gpoin
void changeContentControl(GtkWidget* pSelector, gpointer /*pItem*/);
+void changeDateContentControl(GtkWidget* pSelector, gpointer /*pItem*/);
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/libreofficekit/qa/gtktiledviewer/gtv.ui b/libreofficekit/qa/gtktiledviewer/gtv.ui
index 26e15a0a9e3d..79cb9a9ec409 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv.ui
+++ b/libreofficekit/qa/gtktiledviewer/gtv.ui
@@ -446,6 +446,27 @@
</packing>
</child>
<child>
+ <object class="GtkToolItem" id="contentcontroldateselectortoolitem">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuButton" id="menu_contentcontroldateselector">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text">Content control date</property>
+ <property name="popover">calendar</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkToggleToolButton" id="btn_editmode">
<property name="visible">True</property>
<property name="label" translatable="yes">Turn on/off edit mode</property>
@@ -779,4 +800,28 @@
</packing>
</child>
</object>
+ <object class="GtkPopover" id="calendar">
+ <property name="can-focus">False</property>
+ <property name="position">bottom</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCalendar" id="date">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <signal name="day-selected-double-click" handler="changeDateContentControl" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
</interface>