diff options
author | Marco Cecchetti <marco.cecchetti@collabora.com> | 2017-05-08 00:26:08 +0200 |
---|---|---|
committer | pranavk <pranavk@collabora.co.uk> | 2017-05-11 17:56:09 +0200 |
commit | 9cc9300bc20e9367728aa4b7ec3a789fdd274aff (patch) | |
tree | ddde949f86a4b68e7864e22f293ba2da412abf31 /libreofficekit/qa/gtktiledviewer | |
parent | b973b184a0870ad70e2db4e0e3842cf208b87abf (diff) |
lok: sc: notify cell cursor position to address control in client
A new callback has been introduced for notifying the client:
LOK_CALLBACK_CELL_ADDRESS
Change-Id: I40b38a3cb8fb658c3f00332d56cfcbaf98e13771
Reviewed-on: https://gerrit.libreoffice.org/37357
Reviewed-by: pranavk <pranavk@collabora.co.uk>
Tested-by: pranavk <pranavk@collabora.co.uk>
Diffstat (limited to 'libreofficekit/qa/gtktiledviewer')
-rw-r--r-- | libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx index ed1d7f10a694..14bb2c1a2b6d 100644 --- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx @@ -138,6 +138,7 @@ public: GtkToolItem* m_pInsertAnnotation; GtkToolItem* m_pDeleteComment; GtkToolItem* m_pTrackChanges; + GtkWidget* m_pAddressbarEntry; GtkWidget* m_pFormulabarEntry; GtkWidget* m_pScrolledWindow; std::map<GtkToolItem*, std::string> m_aToolItemCommandNames; @@ -590,6 +591,7 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi } gtk_widget_show(rWindow.m_pColumnBar->m_pDrawingArea); gtk_widget_queue_draw(rWindow.m_pColumnBar->m_pDrawingArea); + gtk_widget_show(rWindow.m_pAddressbarEntry); gtk_widget_show(rWindow.m_pFormulabarEntry); } @@ -1402,6 +1404,39 @@ static gboolean signalFindbar(GtkWidget* pWidget, GdkEventKey* pEvent, gpointer return FALSE; } +/// Handles the key-press-event of the address entry widget. +static gboolean signalAddressbar(GtkWidget* pWidget, GdkEventKey* pEvent, gpointer /*pData*/) +{ + TiledWindow& rWindow = lcl_getTiledWindow(pWidget); + switch(pEvent->keyval) + { + case GDK_KEY_Return: + { + GtkEntry* pEntry = GTK_ENTRY(rWindow.m_pAddressbarEntry); + const char* pText = gtk_entry_get_text(pEntry); + + boost::property_tree::ptree aTree; + aTree.put(boost::property_tree::ptree::path_type("ToPoint/type", '/'), "string"); + aTree.put(boost::property_tree::ptree::path_type("ToPoint/value", '/'), pText); + std::stringstream aStream; + boost::property_tree::write_json(aStream, aTree); + std::string aArguments = aStream.str(); + + lok_doc_view_post_command(LOK_DOC_VIEW(rWindow.m_pDocView), ".uno:GoToCell", aArguments.c_str(), false); + gtk_widget_grab_focus(rWindow.m_pDocView); + return TRUE; + } + case GDK_KEY_Escape: + { + std::string aArguments; + lok_doc_view_post_command(LOK_DOC_VIEW(rWindow.m_pDocView), ".uno:Cancel", aArguments.c_str(), false); + gtk_widget_grab_focus(rWindow.m_pDocView); + return TRUE; + } + } + return FALSE; +} + /// Handles the key-press-event of the formula entry widget. static gboolean signalFormulabar(GtkWidget* /*pWidget*/, GdkEventKey* /*pEvent*/, gpointer /*pData*/) { @@ -1593,6 +1628,13 @@ static void cursorChanged(LOKDocView* pDocView, gint nX, gint nY, gtk_adjustment_set_value(hadj, lok_doc_view_twip_to_pixel(LOK_DOC_VIEW(pDocView), x)); } +/// LOKDocView the address has changed +static void addressChanged(LOKDocView* pLOKDocView, char* pPayload, gpointer /*pData*/) +{ + TiledWindow& rWindow = lcl_getTiledWindow(GTK_WIDGET(pLOKDocView)); + gtk_entry_set_text(GTK_ENTRY(rWindow.m_pAddressbarEntry), pPayload); +} + /// LOKDocView the formula has changed static void formulaChanged(LOKDocView* pLOKDocView, char* pPayload, gpointer /*pData*/) { @@ -2088,6 +2130,14 @@ static GtkWidget* createWindow(TiledWindow& rWindow) lcl_registerToolItem(rWindow, rWindow.m_pTrackChanges, ".uno:TrackChanges"); gtk_widget_set_sensitive(GTK_WIDGET(rWindow.m_pTrackChanges), false); + // Address bar + GtkToolItem* pAddressEntryContainer = gtk_tool_item_new(); + rWindow.m_pAddressbarEntry = gtk_entry_new(); + gtk_container_add(GTK_CONTAINER(pAddressEntryContainer), rWindow.m_pAddressbarEntry); + g_signal_connect(rWindow.m_pAddressbarEntry, "key-press-event", G_CALLBACK(signalAddressbar), 0); + gtk_toolbar_insert(GTK_TOOLBAR(pLowerToolbar), pAddressEntryContainer, -1); + gtk_box_pack_start(GTK_BOX(rWindow.m_pVBox), pLowerToolbar, FALSE, FALSE, 0 ); // Adds to top. + // Formula bar GtkToolItem* pFormulaEntryContainer = gtk_tool_item_new(); rWindow.m_pFormulabarEntry = gtk_entry_new(); @@ -2188,6 +2238,7 @@ static GtkWidget* createWindow(TiledWindow& rWindow) gtk_widget_hide(rWindow.m_pCornerButton->m_pDrawingArea); gtk_widget_hide(rWindow.m_pRowBar->m_pDrawingArea); gtk_widget_hide(rWindow.m_pColumnBar->m_pDrawingArea); + gtk_widget_hide(rWindow.m_pAddressbarEntry); gtk_widget_hide(rWindow.m_pFormulabarEntry); // Hide the non-progressbar children of the status bar by default. gtk_widget_hide(rWindow.m_pStatusbarLabel); @@ -2214,6 +2265,7 @@ static void setupDocView(GtkWidget* pDocView) g_signal_connect(pDocView, "part-changed", G_CALLBACK(signalPart), nullptr); g_signal_connect(pDocView, "hyperlink-clicked", G_CALLBACK(signalHyperlink), nullptr); g_signal_connect(pDocView, "cursor-changed", G_CALLBACK(cursorChanged), nullptr); + g_signal_connect(pDocView, "address-changed", G_CALLBACK(addressChanged), nullptr); g_signal_connect(pDocView, "formula-changed", G_CALLBACK(formulaChanged), nullptr); g_signal_connect(pDocView, "password-required", G_CALLBACK(passwordRequired), nullptr); g_signal_connect(pDocView, "comment", G_CALLBACK(commentCallback), nullptr); |