Kaydet (Commit) f5ab3e84 authored tarafından Miklos Vajna's avatar Miklos Vajna

gtktiledviewer: add missing spreadsheet corner button

Change-Id: I3a7af693ccdce2012ddbaa6a3ac8321f29b6356c
üst 3bdce53c
...@@ -67,6 +67,16 @@ public: ...@@ -67,6 +67,16 @@ public:
static void drawText(cairo_t* pCairo, const GdkRectangle& rRectangle, const std::string& rText); static void drawText(cairo_t* pCairo, const GdkRectangle& rRectangle, const std::string& rText);
}; };
/// Represents the button at the top left corner for spreadsheets.
class TiledCornerButton
{
public:
GtkWidget* m_pDrawingArea;
TiledCornerButton();
static gboolean draw(GtkWidget* pWidget, cairo_t* pCairo, gpointer pData);
gboolean drawImpl(GtkWidget* pWidget, cairo_t* pCairo);
};
/// Represents all the state that is specific to one GtkWindow of this app. /// Represents all the state that is specific to one GtkWindow of this app.
class TiledWindow class TiledWindow
{ {
...@@ -93,6 +103,7 @@ public: ...@@ -93,6 +103,7 @@ public:
bool m_bFindAll; bool m_bFindAll;
std::shared_ptr<TiledRowColumnBar> m_pRowBar; std::shared_ptr<TiledRowColumnBar> m_pRowBar;
std::shared_ptr<TiledRowColumnBar> m_pColumnBar; std::shared_ptr<TiledRowColumnBar> m_pColumnBar;
std::shared_ptr<TiledCornerButton> m_pCornerButton;
TiledWindow() TiledWindow()
: m_pDocView(0), : m_pDocView(0),
...@@ -169,6 +180,9 @@ gboolean TiledRowColumnBar::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo) ...@@ -169,6 +180,9 @@ gboolean TiledRowColumnBar::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo)
aRectangle.y = nTotal - 1; aRectangle.y = nTotal - 1;
aRectangle.width = ROW_HEADER_WIDTH - 1; aRectangle.width = ROW_HEADER_WIDTH - 1;
aRectangle.height = rHeader.m_nSize; aRectangle.height = rHeader.m_nSize;
// Left line.
cairo_rectangle(pCairo, aRectangle.x, aRectangle.y, 1, aRectangle.height);
cairo_fill(pCairo);
// Bottom line. // Bottom line.
cairo_rectangle(pCairo, aRectangle.x, aRectangle.y + aRectangle.height, aRectangle.width, 1); cairo_rectangle(pCairo, aRectangle.x, aRectangle.y + aRectangle.height, aRectangle.width, 1);
cairo_fill(pCairo); cairo_fill(pCairo);
...@@ -178,10 +192,13 @@ gboolean TiledRowColumnBar::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo) ...@@ -178,10 +192,13 @@ gboolean TiledRowColumnBar::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo)
} }
else else
{ {
aRectangle.x = nTotal -1; aRectangle.x = nTotal - 1;
aRectangle.y = 0; aRectangle.y = 0;
aRectangle.width = rHeader.m_nSize; aRectangle.width = rHeader.m_nSize;
aRectangle.height = COLUMN_HEADER_HEIGHT - 1; aRectangle.height = COLUMN_HEADER_HEIGHT - 1;
// Top line.
cairo_rectangle(pCairo, aRectangle.x, aRectangle.y, aRectangle.width, 1);
cairo_fill(pCairo);
// Right line. // Right line.
cairo_rectangle(pCairo, aRectangle.x + aRectangle.width , aRectangle.y, 1, aRectangle.height); cairo_rectangle(pCairo, aRectangle.x + aRectangle.width , aRectangle.y, 1, aRectangle.height);
cairo_fill(pCairo); cairo_fill(pCairo);
...@@ -216,6 +233,8 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi ...@@ -216,6 +233,8 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi
boost::property_tree::ptree aTree; boost::property_tree::ptree aTree;
boost::property_tree::read_json(aStream, aTree); boost::property_tree::read_json(aStream, aTree);
gtk_widget_show(rWindow.m_pCornerButton->m_pDrawingArea);
rWindow.m_pRowBar->m_aHeaders.clear(); rWindow.m_pRowBar->m_aHeaders.clear();
for (boost::property_tree::ptree::value_type& rValue : aTree.get_child("rows")) for (boost::property_tree::ptree::value_type& rValue : aTree.get_child("rows"))
{ {
...@@ -238,6 +257,33 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi ...@@ -238,6 +257,33 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi
return TRUE; return TRUE;
} }
TiledCornerButton::TiledCornerButton()
: m_pDrawingArea(gtk_drawing_area_new())
{
gtk_widget_set_size_request(m_pDrawingArea, TiledRowColumnBar::ROW_HEADER_WIDTH, TiledRowColumnBar::COLUMN_HEADER_HEIGHT);
g_signal_connect(m_pDrawingArea, "draw", G_CALLBACK(TiledCornerButton::draw), this);
}
gboolean TiledCornerButton::draw(GtkWidget* pWidget, cairo_t* pCairo, gpointer pData)
{
return static_cast<TiledCornerButton*>(pData)->drawImpl(pWidget, pCairo);
}
gboolean TiledCornerButton::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo)
{
cairo_set_source_rgb(pCairo, 0, 0, 0);
GdkRectangle aRectangle;
aRectangle.x = 0;
aRectangle.y = 0;
aRectangle.width = TiledRowColumnBar::ROW_HEADER_WIDTH;
aRectangle.height = TiledRowColumnBar::COLUMN_HEADER_HEIGHT;
cairo_rectangle(pCairo, aRectangle.x, aRectangle.y, aRectangle.width, aRectangle.height);
cairo_stroke(pCairo);
return FALSE;
}
static void lcl_registerToolItem(TiledWindow& rWindow, GtkToolItem* pItem, const std::string& rName) static void lcl_registerToolItem(TiledWindow& rWindow, GtkToolItem* pItem, const std::string& rName)
{ {
rWindow.m_aToolItemCommandNames[pItem] = rName; rWindow.m_aToolItemCommandNames[pItem] = rName;
...@@ -947,6 +993,9 @@ static GtkWidget* createWindow(TiledWindow& rWindow) ...@@ -947,6 +993,9 @@ static GtkWidget* createWindow(TiledWindow& rWindow)
// Grid for the row/column bar + doc view. // Grid for the row/column bar + doc view.
GtkWidget* pGrid = gtk_grid_new(); GtkWidget* pGrid = gtk_grid_new();
gtk_container_add(GTK_CONTAINER(rWindow.m_pVBox), pGrid); gtk_container_add(GTK_CONTAINER(rWindow.m_pVBox), pGrid);
rWindow.m_pCornerButton.reset(new TiledCornerButton());
// "A1" cell of the grid.
gtk_grid_attach(GTK_GRID(pGrid), rWindow.m_pCornerButton->m_pDrawingArea, 0, 0, 1, 1);
rWindow.m_pRowBar.reset(new TiledRowColumnBar(TiledRowColumnBar::ROW)); rWindow.m_pRowBar.reset(new TiledRowColumnBar(TiledRowColumnBar::ROW));
// "A2" cell of the grid. // "A2" cell of the grid.
gtk_grid_attach(GTK_GRID(pGrid), rWindow.m_pRowBar->m_pDrawingArea, 0, 1, 1, 1); gtk_grid_attach(GTK_GRID(pGrid), rWindow.m_pRowBar->m_pDrawingArea, 0, 1, 1, 1);
...@@ -977,6 +1026,7 @@ static GtkWidget* createWindow(TiledWindow& rWindow) ...@@ -977,6 +1026,7 @@ static GtkWidget* createWindow(TiledWindow& rWindow)
// Hide the findbar by default. // Hide the findbar by default.
gtk_widget_hide(rWindow.m_pFindbar); gtk_widget_hide(rWindow.m_pFindbar);
// Same for the row/column bar. // Same for the row/column bar.
gtk_widget_hide(rWindow.m_pCornerButton->m_pDrawingArea);
gtk_widget_hide(rWindow.m_pRowBar->m_pDrawingArea); gtk_widget_hide(rWindow.m_pRowBar->m_pDrawingArea);
gtk_widget_hide(rWindow.m_pColumnBar->m_pDrawingArea); gtk_widget_hide(rWindow.m_pColumnBar->m_pDrawingArea);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment