diff options
author | Pranav Kant <pranavk@collabora.co.uk> | 2017-07-12 22:43:39 +0530 |
---|---|---|
committer | Pranav Kant <pranavk@collabora.co.uk> | 2017-07-12 22:43:39 +0530 |
commit | 75b40d031d9ce80838e1e6c31ab8f832a1d3355f (patch) | |
tree | dafdb3982207d981ee51965cc50a90bcc82ff100 | |
parent | row column bar compilable (diff) | |
download | core-75b40d031d9ce80838e1e6c31ab8f832a1d3355f.tar.gz core-75b40d031d9ce80838e1e6c31ab8f832a1d3355f.zip |
working row colum headers
Change-Id: Id19871ed0f4ed8e8c8fe32277389eb635d0f040d
6 files changed, 50 insertions, 39 deletions
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx b/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx index 6456ecf2ab09..cf3986518c45 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx @@ -15,6 +15,7 @@ #include <gtv-application-window.hxx> #include <gtv-main-toolbar.hxx> #include <gtv-helpers.hxx> +#include <gtv-signal-handlers.hxx> #include <gtv-lokdocview-signal-handlers.hxx> #include <gtv-calc-header-bar.hxx> @@ -57,18 +58,22 @@ gtv_application_window_init(GtvApplicationWindow* win) gtk_box_pack_start(GTK_BOX(priv->container), priv->toolbarcontainer, false, false, false); gtk_box_reorder_child(GTK_BOX(priv->container), priv->toolbarcontainer, 0); - priv->gridcontainer = GTK_WIDGET(gtk_builder_get_object(builder, "maingrid")); // scrolled window containing the main drawing area win->scrolledwindow = GTK_WIDGET(gtk_builder_get_object(builder, "scrolledwindow")); + GtkAdjustment* pHAdjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(win->scrolledwindow)); + g_signal_connect(pHAdjustment, "value-changed", G_CALLBACK(docAdjustmentChanged), win); + GtkAdjustment* pVAdjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(win->scrolledwindow)); + g_signal_connect(pVAdjustment, "value-changed", G_CALLBACK(docAdjustmentChanged), win); + // calc header row bar win->cornerarea = gtv_calc_header_bar_new(); - gtv_calc_header_bar_set_type(GTV_CALC_HEADER_BAR(win->cornerarea), CalcHeaderType::CORNER); + gtv_calc_header_bar_set_type_and_width(GTV_CALC_HEADER_BAR(win->cornerarea), CalcHeaderType::CORNER); win->rowbar = gtv_calc_header_bar_new(); - gtv_calc_header_bar_set_type(GTV_CALC_HEADER_BAR(win->rowbar), CalcHeaderType::ROW); + gtv_calc_header_bar_set_type_and_width(GTV_CALC_HEADER_BAR(win->rowbar), CalcHeaderType::ROW); win->columnbar = gtv_calc_header_bar_new(); - gtv_calc_header_bar_set_type(GTV_CALC_HEADER_BAR(win->columnbar), CalcHeaderType::COLUMN); + gtv_calc_header_bar_set_type_and_width(GTV_CALC_HEADER_BAR(win->columnbar), CalcHeaderType::COLUMN); // attach row/colum/corner to the container gtk_grid_attach(GTK_GRID(priv->gridcontainer), win->cornerarea, 0, 0, 1, 1); diff --git a/libreofficekit/qa/gtktiledviewer/gtv-calc-header-bar.cxx b/libreofficekit/qa/gtktiledviewer/gtv-calc-header-bar.cxx index 14fc944b50d4..fe10069b7259 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-calc-header-bar.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-calc-header-bar.cxx @@ -21,11 +21,6 @@ #include <boost/property_tree/json_parser.hpp> #include <boost/optional.hpp> -struct _GtvCalcHeaderBar -{ - GtkDrawingArea parent; -}; - struct GtvCalcHeaderBarPrivateImpl { /// Stores size and content of a single row header. @@ -40,10 +35,6 @@ struct GtvCalcHeaderBarPrivateImpl }; std::vector<Header> m_aHeaders; - /// Height for row bar, width for column bar. - int m_nSizePixel; - /// Left/top position for the column/row bar -- initially 0, then may grow due to scrolling. - int m_nPositionPixel; CalcHeaderType m_eType; }; @@ -97,7 +88,8 @@ void gtv_calc_header_bar_draw_text(cairo_t* pCairo, const GdkRectangle& rRectang gboolean gtv_calc_header_bar_draw_impl(GtkWidget* pWidget, cairo_t* pCairo) { - GtvCalcHeaderBarPrivate& priv = getPrivate(GTV_CALC_HEADER_BAR(pWidget)); + GtvCalcHeaderBar* self = GTV_CALC_HEADER_BAR(pWidget); + GtvCalcHeaderBarPrivate& priv = getPrivate(GTV_CALC_HEADER_BAR(self)); cairo_set_source_rgb(pCairo, 0, 0, 0); int nPrevious = 0; @@ -139,7 +131,7 @@ gboolean gtv_calc_header_bar_draw_impl(GtkWidget* pWidget, cairo_t* pCairo) gtv_calc_header_bar_draw_text(pCairo, aRectangle, rHeader.m_aText); nPrevious = rHeader.m_nSize; - if (rHeader.m_nSize > priv->m_nSizePixel) + if (rHeader.m_nSize > self->m_nSizePixel) break; } @@ -164,19 +156,7 @@ gtv_calc_header_bar_class_init(GtvCalcHeaderBarClass* klass) G_OBJECT_CLASS(klass)->finalize = gtv_calc_header_bar_finalize; } -int gtv_calc_header_bar_get_pos_pixel(GtvCalcHeaderBar* bar) -{ - GtvCalcHeaderBarPrivate& priv = getPrivate(bar); - return priv->m_nPositionPixel; -} - -int gtv_calc_header_bar_get_size_pixel(GtvCalcHeaderBar* bar) -{ - GtvCalcHeaderBarPrivate& priv = getPrivate(bar); - return priv->m_nSizePixel; -} - -void gtv_calc_header_bar_configure(GtvCalcHeaderBar* bar, const boost::property_tree::ptree* values, int nPositionPixel) +void gtv_calc_header_bar_configure(GtvCalcHeaderBar* bar, const boost::property_tree::ptree* values) { GtvApplicationWindow* window = GTV_APPLICATION_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(bar))); GtvCalcHeaderBarPrivate& priv = getPrivate(bar); @@ -189,9 +169,9 @@ void gtv_calc_header_bar_configure(GtvCalcHeaderBar* bar, const boost::property_ for (boost::property_tree::ptree::value_type& rValue : val) { int nSize = std::round(lok_doc_view_twip_to_pixel(LOK_DOC_VIEW(window->lokdocview), std::atof(rValue.second.get<std::string>("size").c_str()))); - if (nSize >= nPositionPixel) + if (nSize >= bar->m_nPositionPixel) { - const int nScrolledSize = nSize - nPositionPixel; + const int nScrolledSize = nSize - bar->m_nPositionPixel; GtvCalcHeaderBarPrivateImpl::Header aHeader(nScrolledSize, rValue.second.get<std::string>("text")); priv->m_aHeaders.push_back(aHeader); } @@ -206,11 +186,16 @@ void gtv_calc_header_bar_configure(GtvCalcHeaderBar* bar, const boost::property_ } void -gtv_calc_header_bar_set_type(GtvCalcHeaderBar* bar, CalcHeaderType eType) +gtv_calc_header_bar_set_type_and_width(GtvCalcHeaderBar* bar, CalcHeaderType eType) { // TODO: Install type property for this class GtvCalcHeaderBarPrivate& priv = getPrivate(bar); priv->m_eType = eType; + + if (eType == CalcHeaderType::ROW) + gtk_widget_set_size_request(GTK_WIDGET(bar), ROW_HEADER_WIDTH, -1); + else if (eType == CalcHeaderType::COLUMN) + gtk_widget_set_size_request(GTK_WIDGET(bar), -1, COLUMN_HEADER_HEIGHT); } GtkWidget* diff --git a/libreofficekit/qa/gtktiledviewer/gtv-calc-header-bar.hxx b/libreofficekit/qa/gtktiledviewer/gtv-calc-header-bar.hxx index 957b0104e916..daf29803b254 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-calc-header-bar.hxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-calc-header-bar.hxx @@ -19,17 +19,26 @@ G_BEGIN_DECLS #define GTV_CALC_HEADER_BAR_TYPE (gtv_calc_header_bar_get_type()) G_DECLARE_FINAL_TYPE(GtvCalcHeaderBar, gtv_calc_header_bar, GTV, CALC_HEADER_BAR, GtkDrawingArea); +struct _GtvCalcHeaderBar +{ + GtkDrawingArea parent; + /// Height for row bar, width for column bar. + int m_nSizePixel; + /// Left/top position for the column/row bar -- initially 0, then may grow due to scrolling. + int m_nPositionPixel; +}; + enum CalcHeaderType { ROW, COLUMN, CORNER }; GtkWidget* gtv_calc_header_bar_new(); -void gtv_calc_header_bar_configure(GtvCalcHeaderBar* bar, const boost::property_tree::ptree* values, int nPositionPixel); +void gtv_calc_header_bar_configure(GtvCalcHeaderBar* bar, const boost::property_tree::ptree* values); int gtv_calc_header_bar_get_pos_pixel(GtvCalcHeaderBar* bar); int gtv_calc_header_bar_get_size_pixel(GtvCalcHeaderBar* bar); -void gtv_calc_header_bar_set_type(GtvCalcHeaderBar* bar, CalcHeaderType eType); +void gtv_calc_header_bar_set_type_and_width(GtvCalcHeaderBar* bar, CalcHeaderType eType); G_END_DECLS diff --git a/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx b/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx index ea1c10769e65..fec8742cfdd2 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx @@ -222,15 +222,16 @@ void lokdocview_commentCallback(LOKDocView* pDocView, gchar* pComment, gpointer) gboolean lokdocview_configureEvent(GtkWidget* pWidget, GdkEventConfigure* pEvent, gpointer pData) { GtvApplicationWindow* window = GTV_APPLICATION_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(pWidget))); + printf("configuring"); LibreOfficeKitDocument* pDocument = lok_doc_view_get_document(LOK_DOC_VIEW(window->lokdocview)); if (pDocument && pDocument->pClass->getDocumentType(pDocument) == LOK_DOCTYPE_SPREADSHEET) { GtkAdjustment* pVAdjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(window->scrolledwindow)); - int rowSizePixel = gtk_adjustment_get_page_size(pVAdjustment); - int rowPosPixel = gtk_adjustment_get_value(pVAdjustment); + int rowSizePixel = GTV_CALC_HEADER_BAR(window->rowbar)->m_nSizePixel = gtk_adjustment_get_page_size(pVAdjustment); + int rowPosPixel = GTV_CALC_HEADER_BAR(window->rowbar)->m_nPositionPixel = gtk_adjustment_get_value(pVAdjustment); GtkAdjustment* pHAdjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(window->scrolledwindow)); - int colSizePixel = gtk_adjustment_get_page_size(pHAdjustment); - int colPosPixel = gtk_adjustment_get_value(pHAdjustment); + int colSizePixel = GTV_CALC_HEADER_BAR(window->columnbar)->m_nSizePixel = gtk_adjustment_get_page_size(pHAdjustment); + int colPosPixel = GTV_CALC_HEADER_BAR(window->columnbar)->m_nPositionPixel = gtk_adjustment_get_value(pHAdjustment); std::stringstream aCommand; aCommand << ".uno:ViewRowColumnHeaders"; @@ -249,8 +250,8 @@ gboolean lokdocview_configureEvent(GtkWidget* pWidget, GdkEventConfigure* pEvent boost::property_tree::ptree aTree; boost::property_tree::read_json(aStream, aTree); - gtv_calc_header_bar_configure(GTV_CALC_HEADER_BAR(window->rowbar), &aTree.get_child("rows"), rowPosPixel); - gtv_calc_header_bar_configure(GTV_CALC_HEADER_BAR(window->columnbar), &aTree.get_child("columns"), colPosPixel); + gtv_calc_header_bar_configure(GTV_CALC_HEADER_BAR(window->rowbar), &aTree.get_child("rows")); + gtv_calc_header_bar_configure(GTV_CALC_HEADER_BAR(window->columnbar), &aTree.get_child("columns")); // for corner ? gtv_calc_header_bar_configure(window->rowbar); } } diff --git a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx index 4d41abd804e0..a02c110f8f4f 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx @@ -11,6 +11,7 @@ #include <gtv-application-window.hxx> #include <gtv-helpers.hxx> +#include <gtv-lokdocview-signal-handlers.hxx> #include <sal/types.h> @@ -522,4 +523,12 @@ void toggleFindbar(GtkWidget* pButton, gpointer /*pItem*/) gtv_application_window_toggle_findbar(window); } +void docAdjustmentChanged(GtkAdjustment*, gpointer pData) +{ + GtvApplicationWindow* window = GTV_APPLICATION_WINDOW(pData); + printf("doc adjust ch : %p", window->lokdocview); + if (window->lokdocview) + lokdocview_configureEvent(window->lokdocview, nullptr, nullptr); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx index ee9350bee976..a918bc731053 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx @@ -36,6 +36,8 @@ void documentRedline(GtkWidget* pButton, gpointer /*pItem*/); void documentRepair(GtkWidget* pButton, gpointer /*pItem*/); +void docAdjustmentChanged(GtkAdjustment*, gpointer); + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |