From c4214361200dc923d9aa8d62da1328d448dbe5c1 Mon Sep 17 00:00:00 2001 From: Pranav Kant Date: Thu, 13 Jul 2017 18:12:09 +0530 Subject: part selector etc. working now Change-Id: I99236357fcdecac2d2853fc9a8e94e3c59cc820b --- gtv.ui | 2 +- .../qa/gtktiledviewer/gtv-application-window.cxx | 34 +++++++++++++--- .../qa/gtktiledviewer/gtv-application-window.hxx | 4 ++ .../qa/gtktiledviewer/gtv-main-toolbar.cxx | 45 ++++++++++++++++++++-- .../qa/gtktiledviewer/gtv-signal-handlers.cxx | 26 +++++++++++++ 5 files changed, 101 insertions(+), 10 deletions(-) diff --git a/gtv.ui b/gtv.ui index 1f92c41aae22..e27f79714a4b 100644 --- a/gtv.ui +++ b/gtv.ui @@ -427,7 +427,7 @@ True False - + True False 0 diff --git a/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx b/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx index 3a81e9aa7b6e..fa25b97bbe20 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx @@ -32,6 +32,7 @@ struct GtvApplicationWindowPrivate gboolean toolbarBroadcast; gboolean partSelectorBroadcast; + gboolean partModeSelectorBroadcast; // Rendering args; options with which lokdocview was rendered in this window GtvRenderingArgs* m_pRenderingArgs; @@ -131,11 +132,6 @@ static void initWindow(GtvApplicationWindow* window) { GtvApplicationWindowPrivate* priv = getPrivate(window); - priv->partSelectorBroadcast = false; - //populatePartSelector(LOK_DOC_VIEW(rWindow.m_pDocView)); - priv->partSelectorBroadcast = true; - - //populatePartModeSelector( GTK_COMBO_BOX_TEXT(rWindow.m_pPartModeComboBox) ); //populateDialogs(GTK_COMBO_BOX_TEXT(rWindow.m_pDialogComboBox)); //registerSelectorHandlers(rWindow); @@ -386,6 +382,34 @@ gtv_application_window_get_toolbar_broadcast(GtvApplicationWindow* window) return priv->toolbarBroadcast; } +void +gtv_application_window_set_part_broadcast(GtvApplicationWindow* window, bool broadcast) +{ + GtvApplicationWindowPrivate* priv = getPrivate(window); + priv->partSelectorBroadcast = broadcast; +} + +gboolean +gtv_application_window_get_part_broadcast(GtvApplicationWindow* window) +{ + GtvApplicationWindowPrivate* priv = getPrivate(window); + return priv->partSelectorBroadcast; +} + +void +gtv_application_window_set_partmode_broadcast(GtvApplicationWindow* window, bool broadcast) +{ + GtvApplicationWindowPrivate* priv = getPrivate(window); + priv->partModeSelectorBroadcast = broadcast; +} + +gboolean +gtv_application_window_get_partmode_broadcast(GtvApplicationWindow* window) +{ + GtvApplicationWindowPrivate* priv = getPrivate(window); + return priv->partModeSelectorBroadcast; +} + GtvApplicationWindow* gtv_application_window_new(GtkApplication* app) { diff --git a/libreofficekit/qa/gtktiledviewer/gtv-application-window.hxx b/libreofficekit/qa/gtktiledviewer/gtv-application-window.hxx index 2337b74e1078..a3ac05b2158b 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-application-window.hxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-application-window.hxx @@ -79,6 +79,10 @@ void gtv_application_window_set_toolbar_broadcast(GtvApplicationWindow* window, gboolean gtv_application_window_get_toolbar_broadcast(GtvApplicationWindow* window); +void gtv_application_window_set_part_broadcast(GtvApplicationWindow* window, bool broadcast); + +gboolean gtv_application_window_get_part_broadcast(GtvApplicationWindow* window); + G_END_DECLS #endif /* GTV_APPLICATION_WINDOW_H */ diff --git a/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx b/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx index b37709976402..1743a7824846 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx @@ -30,8 +30,8 @@ struct GtvMainToolbarPrivateImpl GtkWidget* m_pRightpara; GtkWidget* m_pJustifypara; GtkWidget* m_pDeleteComment; - GtkWidget* m_pAddressbar; - GtkWidget* m_pFormulabar; + GtkWidget* m_pPartSelector; + GtkWidget* m_pPartModeSelector; /// Sensitivity (enabled or disabled) for each tool item, ignoring edit state std::map m_aToolItemSensitivities; @@ -82,6 +82,8 @@ gtv_main_toolbar_init(GtvMainToolbar* toolbar) priv->m_pRightpara = GTK_WIDGET(gtk_builder_get_object(builder, "btn_justifyright")); priv->m_pJustifypara = GTK_WIDGET(gtk_builder_get_object(builder, "btn_justifyfill")); priv->m_pDeleteComment = GTK_WIDGET(gtk_builder_get_object(builder, "btn_removeannotation")); + priv->m_pPartSelector = GTK_WIDGET(gtk_builder_get_object(builder, "combo_partselector")); + priv->m_pPartModeSelector = GTK_WIDGET(gtk_builder_get_object(builder, "combo_partsmodeselector")); toolbar->m_pAddressbar = GTK_WIDGET(gtk_builder_get_object(builder, "addressbar_entry")); toolbar->m_pFormulabar = GTK_WIDGET(gtk_builder_get_object(builder, "formulabar_entry")); @@ -92,8 +94,8 @@ gtv_main_toolbar_init(GtvMainToolbar* toolbar) gtk_builder_add_callback_symbol(builder, "createView", G_CALLBACK(createView)); gtk_builder_add_callback_symbol(builder, "unoCommandDebugger", G_CALLBACK(unoCommandDebugger)); gtk_builder_add_callback_symbol(builder, "toggleEditing", G_CALLBACK(toggleEditing)); -// gtk_builder_add_callback_symbol(builder, "changePartMode", G_CALLBACK(changePartMode)); -// gtk_builder_add_callback_symbol(builder, "changePart", G_CALLBACK(changePart)); + gtk_builder_add_callback_symbol(builder, "changePartMode", G_CALLBACK(changePartMode)); + gtk_builder_add_callback_symbol(builder, "changePart", G_CALLBACK(changePart)); gtk_builder_add_callback_symbol(builder, "changeZoom", G_CALLBACK(changeZoom)); gtk_builder_add_callback_symbol(builder, "toggleFindbar", G_CALLBACK(toggleFindbar)); gtk_builder_add_callback_symbol(builder, "documentRedline", G_CALLBACK(documentRedline)); @@ -135,6 +137,38 @@ gtv_main_toolbar_class_init(GtvMainToolbarClass* klass) G_OBJECT_CLASS(klass)->finalize = gtv_main_toolbar_finalize; } +static void populatePartSelector(GtvMainToolbar* toolbar) +{ + GtvMainToolbarPrivate& priv = getPrivate(toolbar); + GtvApplicationWindow* window = GTV_APPLICATION_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(toolbar))); + gtv_application_window_set_part_broadcast(window, false); + gtk_list_store_clear( GTK_LIST_STORE( + gtk_combo_box_get_model( + GTK_COMBO_BOX(priv->m_pPartSelector) )) ); + + if (!window->lokdocview) + { + return; + } + + const int nMaxLength = 50; + char sText[nMaxLength]; + + int nParts = lok_doc_view_get_parts(LOK_DOC_VIEW(window->lokdocview)); + for ( int i = 0; i < nParts; i++ ) + { + char* pName = lok_doc_view_get_part_name(LOK_DOC_VIEW(window->lokdocview), i); + assert( pName ); + snprintf( sText, nMaxLength, "%i (%s)", i+1, pName ); + free( pName ); + + gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(priv->m_pPartSelector), sText ); + } + gtk_combo_box_set_active(GTK_COMBO_BOX(priv->m_pPartSelector), lok_doc_view_get_part(LOK_DOC_VIEW(window->lokdocview))); + + gtv_application_window_set_part_broadcast(window, true); +} + void gtv_main_toolbar_doc_loaded(GtvMainToolbar* toolbar, LibreOfficeKitDocumentType eDocType, bool bEditMode) { @@ -158,6 +192,9 @@ gtv_main_toolbar_doc_loaded(GtvMainToolbar* toolbar, LibreOfficeKitDocumentType } gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(priv->m_pEnableEditing), bEditMode); + + // populate combo boxes + populatePartSelector(toolbar); } GtkContainer* diff --git a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx index f07f5f05644c..0a299a919810 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx @@ -253,6 +253,32 @@ void toggleEditing(GtkWidget* pButton, gpointer /*pItem*/) lok_doc_view_set_edit(LOK_DOC_VIEW(window->lokdocview), bActive); } +void changePart( GtkWidget* pSelector, gpointer /* pItem */ ) +{ + int nPart = gtk_combo_box_get_active( GTK_COMBO_BOX(pSelector) ); + GtvApplicationWindow* window = GTV_APPLICATION_WINDOW(gtk_widget_get_toplevel(pSelector)); + + if (gtv_application_window_get_part_broadcast(window) && window->lokdocview) + { + lok_doc_view_set_part( LOK_DOC_VIEW(window->lokdocview), nPart ); + lok_doc_view_reset_view(LOK_DOC_VIEW(window->lokdocview)); + } +} + +void changePartMode( GtkWidget* pSelector, gpointer /* pItem */ ) +{ + // Just convert directly back to the LibreOfficeKitPartMode enum. + // I.e. the ordering above should match the enum member ordering. + LibreOfficeKitPartMode ePartMode = + LibreOfficeKitPartMode( gtk_combo_box_get_active( GTK_COMBO_BOX(pSelector) ) ); + GtvApplicationWindow* window = GTV_APPLICATION_WINDOW(gtk_widget_get_toplevel(pSelector)); + + if ( window->lokdocview ) + { + lok_doc_view_set_partmode( LOK_DOC_VIEW(window->lokdocview), ePartMode ); + } +} + 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 }; -- cgit