|
 |
f325b2 |
From 380e289f5d0a7af5df0d0ed7b4a8d940e01a35b1 Mon Sep 17 00:00:00 2001
|
|
 |
f325b2 |
From: Miklos Vajna <vmiklos@collabora.co.uk>
|
|
 |
f325b2 |
Date: Mon, 2 Nov 2015 17:03:08 +0100
|
|
 |
f325b2 |
Subject: [PATCH 260/398] gtktiledviewer: adjust spreadsheet row/column headers
|
|
 |
f325b2 |
on scrolling
|
|
 |
f325b2 |
|
|
 |
f325b2 |
Change-Id: I7ed9e19df071b6baf1e941faee24c332c7b5e804
|
|
 |
f325b2 |
(cherry picked from commit 7c4733661b0a80098e84413fbc91b84b4c14cfc1)
|
|
 |
f325b2 |
---
|
|
 |
f325b2 |
.../qa/gtktiledviewer/gtktiledviewer.cxx | 43 ++++++++++++++++++++--
|
|
 |
f325b2 |
1 file changed, 39 insertions(+), 4 deletions(-)
|
|
 |
f325b2 |
|
|
 |
f325b2 |
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
index 7e6379124678..795fb4ed7ff7 100644
|
|
 |
f325b2 |
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
@@ -57,12 +57,16 @@ public:
|
|
 |
f325b2 |
std::vector<Header> m_aHeaders;
|
|
 |
f325b2 |
/// Height for row bar, width for column bar.
|
|
 |
f325b2 |
int m_nSizePixel;
|
|
 |
f325b2 |
+ /// Left/top position for the column/row bar -- initially 0, then may grow due to scrolling.
|
|
 |
f325b2 |
+ int m_nPositionPixel;
|
|
 |
f325b2 |
TiledBarType m_eType;
|
|
 |
f325b2 |
|
|
 |
f325b2 |
TiledRowColumnBar(TiledBarType eType);
|
|
 |
f325b2 |
static gboolean draw(GtkWidget* pWidget, cairo_t* pCairo, gpointer pData);
|
|
 |
f325b2 |
gboolean drawImpl(GtkWidget* pWidget, cairo_t* pCairo);
|
|
 |
f325b2 |
static gboolean docConfigureEvent(GtkWidget* pWidget, GdkEventConfigure* pEvent, gpointer pData);
|
|
 |
f325b2 |
+ /// Adjustments of the doc widget changed -- horizontal or vertical scroll.
|
|
 |
f325b2 |
+ static void docAdjustmentChanged(GtkAdjustment* pAdjustment, gpointer pData);
|
|
 |
f325b2 |
/// Draws rText at the center of rRectangle on pCairo.
|
|
 |
f325b2 |
static void drawText(cairo_t* pCairo, const GdkRectangle& rRectangle, const std::string& rText);
|
|
 |
f325b2 |
};
|
|
 |
f325b2 |
@@ -233,17 +237,26 @@ gboolean TiledRowColumnBar::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo)
|
|
 |
f325b2 |
return FALSE;
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
+void TiledRowColumnBar::docAdjustmentChanged(GtkAdjustment* /*pAdjustment*/, gpointer pData)
|
|
 |
f325b2 |
+{
|
|
 |
f325b2 |
+ GtkWidget* pDocView = static_cast<GtkWidget*>(pData);
|
|
 |
f325b2 |
+ docConfigureEvent(pDocView, 0, 0);
|
|
 |
f325b2 |
+}
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfigure* /*pEvent*/, gpointer /*pData*/)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
TiledWindow& rWindow = lcl_getTiledWindow(pDocView);
|
|
 |
f325b2 |
GtkAdjustment* pVAdjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(rWindow.m_pScrolledWindow));
|
|
 |
f325b2 |
rWindow.m_pRowBar->m_nSizePixel = gtk_adjustment_get_page_size(pVAdjustment);
|
|
 |
f325b2 |
+ rWindow.m_pRowBar->m_nPositionPixel = gtk_adjustment_get_value(pVAdjustment);
|
|
 |
f325b2 |
GtkAdjustment* pHAdjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(rWindow.m_pScrolledWindow));
|
|
 |
f325b2 |
rWindow.m_pColumnBar->m_nSizePixel = gtk_adjustment_get_page_size(pHAdjustment);
|
|
 |
f325b2 |
+ rWindow.m_pColumnBar->m_nPositionPixel = gtk_adjustment_get_value(pHAdjustment);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
LibreOfficeKitDocument* pDocument = lok_doc_view_get_document(LOK_DOC_VIEW(pDocView));
|
|
 |
f325b2 |
if (pDocument && pDocument->pClass->getDocumentType(pDocument) == LOK_DOCTYPE_SPREADSHEET)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
+ g_info("lok::Document::getCommandValues(.uno:ViewRowColumnHeaders)");
|
|
 |
f325b2 |
char* pValues = pDocument->pClass->getCommandValues(pDocument, ".uno:ViewRowColumnHeaders");
|
|
 |
f325b2 |
std::stringstream aStream(pValues);
|
|
 |
f325b2 |
free(pValues);
|
|
 |
f325b2 |
@@ -254,21 +267,39 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi
|
|
 |
f325b2 |
gtk_widget_show(rWindow.m_pCornerButton->m_pDrawingArea);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
rWindow.m_pRowBar->m_aHeaders.clear();
|
|
 |
f325b2 |
+ int nTotal = 0;
|
|
 |
f325b2 |
for (boost::property_tree::ptree::value_type& rValue : aTree.get_child("rows"))
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
int nSize = lok_doc_view_twip_to_pixel(LOK_DOC_VIEW(pDocView), std::atof(rValue.second.get<std::string>("size").c_str()));
|
|
 |
f325b2 |
- Header aHeader(nSize, rValue.second.get<std::string>("text"));
|
|
 |
f325b2 |
- rWindow.m_pRowBar->m_aHeaders.push_back(aHeader);
|
|
 |
f325b2 |
+ int nScrolledSize = nSize;
|
|
 |
f325b2 |
+ if (nTotal + nSize >= rWindow.m_pRowBar->m_nPositionPixel)
|
|
 |
f325b2 |
+ {
|
|
 |
f325b2 |
+ if (nTotal < rWindow.m_pRowBar->m_nPositionPixel)
|
|
 |
f325b2 |
+ // First visible row: reduce height because the row is only partially visible.
|
|
 |
f325b2 |
+ nScrolledSize = nTotal + nSize - rWindow.m_pRowBar->m_nPositionPixel;
|
|
 |
f325b2 |
+ Header aHeader(nScrolledSize, rValue.second.get<std::string>("text"));
|
|
 |
f325b2 |
+ rWindow.m_pRowBar->m_aHeaders.push_back(aHeader);
|
|
 |
f325b2 |
+ }
|
|
 |
f325b2 |
+ nTotal += nSize;
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
gtk_widget_show(rWindow.m_pRowBar->m_pDrawingArea);
|
|
 |
f325b2 |
gtk_widget_queue_draw(rWindow.m_pRowBar->m_pDrawingArea);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
rWindow.m_pColumnBar->m_aHeaders.clear();
|
|
 |
f325b2 |
+ nTotal = 0;
|
|
 |
f325b2 |
for (boost::property_tree::ptree::value_type& rValue : aTree.get_child("columns"))
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
int nSize = lok_doc_view_twip_to_pixel(LOK_DOC_VIEW(pDocView), std::atof(rValue.second.get<std::string>("size").c_str()));
|
|
 |
f325b2 |
- Header aHeader(nSize, rValue.second.get<std::string>("text"));
|
|
 |
f325b2 |
- rWindow.m_pColumnBar->m_aHeaders.push_back(aHeader);
|
|
 |
f325b2 |
+ int nScrolledSize = nSize;
|
|
 |
f325b2 |
+ if (nTotal + nSize >= rWindow.m_pColumnBar->m_nPositionPixel)
|
|
 |
f325b2 |
+ {
|
|
 |
f325b2 |
+ if (nTotal < rWindow.m_pColumnBar->m_nPositionPixel)
|
|
 |
f325b2 |
+ // First visible column: reduce width because the column is only partially visible.
|
|
 |
f325b2 |
+ nScrolledSize = nTotal + nSize - rWindow.m_pColumnBar->m_nPositionPixel;
|
|
 |
f325b2 |
+ Header aHeader(nScrolledSize, rValue.second.get<std::string>("text"));
|
|
 |
f325b2 |
+ rWindow.m_pColumnBar->m_aHeaders.push_back(aHeader);
|
|
 |
f325b2 |
+ }
|
|
 |
f325b2 |
+ nTotal += nSize;
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
gtk_widget_show(rWindow.m_pColumnBar->m_pDrawingArea);
|
|
 |
f325b2 |
gtk_widget_queue_draw(rWindow.m_pColumnBar->m_pDrawingArea);
|
|
 |
f325b2 |
@@ -1094,6 +1125,10 @@ static GtkWidget* createWindow(TiledWindow& rWindow)
|
|
 |
f325b2 |
gtk_grid_attach(GTK_GRID(pGrid), rWindow.m_pScrolledWindow, 1, 1, 1, 1);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
gtk_container_add(GTK_CONTAINER(rWindow.m_pScrolledWindow), rWindow.m_pDocView);
|
|
 |
f325b2 |
+ GtkAdjustment* pHAdjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(rWindow.m_pScrolledWindow));
|
|
 |
f325b2 |
+ g_signal_connect(pHAdjustment, "value-changed", G_CALLBACK(TiledRowColumnBar::docAdjustmentChanged), rWindow.m_pDocView);
|
|
 |
f325b2 |
+ GtkAdjustment* pVAdjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(rWindow.m_pScrolledWindow));
|
|
 |
f325b2 |
+ g_signal_connect(pVAdjustment, "value-changed", G_CALLBACK(TiledRowColumnBar::docAdjustmentChanged), rWindow.m_pDocView);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
rWindow.m_pProgressBar = gtk_progress_bar_new ();
|
|
 |
f325b2 |
g_signal_connect(rWindow.m_pDocView, "load-changed", G_CALLBACK(loadChanged), rWindow.m_pProgressBar);
|
|
 |
f325b2 |
--
|
|
 |
f325b2 |
2.12.0
|
|
 |
f325b2 |
|