ocarina: Move tab page content into a table
This should make it easier to add or remove headers and footers so that I can share one widget between all pages.
This commit is contained in:
parent
83719838aa
commit
2c12cb80aa
|
@ -8,10 +8,15 @@ class Page
|
||||||
private:
|
private:
|
||||||
GtkWidget *table;
|
GtkWidget *table;
|
||||||
void add_content(GtkWidget *);
|
void add_content(GtkWidget *);
|
||||||
|
void add_footer(GtkWidget *);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Page(GtkWidget *);
|
Page(GtkWidget *);
|
||||||
~Page();
|
~Page();
|
||||||
|
|
||||||
|
GtkWidget *get_page();
|
||||||
|
void hide();
|
||||||
|
void show();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* OCARINA_PAGE_H */
|
#endif /* OCARINA_PAGE_H */
|
||||||
|
|
|
@ -1,10 +1,17 @@
|
||||||
|
|
||||||
#include <ocarina/page.h>
|
#include <ocarina/page.h>
|
||||||
|
#include <ocarina/footer.h>
|
||||||
|
|
||||||
|
#include <libsaria/print.h>
|
||||||
|
|
||||||
|
GtkAttachOptions GROW;
|
||||||
|
GtkAttachOptions SHRINK;
|
||||||
|
|
||||||
Page::Page(GtkWidget *content)
|
Page::Page(GtkWidget *content)
|
||||||
{
|
{
|
||||||
table = gtk_table_new(3, 1, FALSE);
|
table = gtk_table_new(3, 1, FALSE);
|
||||||
add_content(content);
|
add_content(content);
|
||||||
|
gtk_widget_show(table);
|
||||||
}
|
}
|
||||||
|
|
||||||
Page::~Page()
|
Page::~Page()
|
||||||
|
@ -13,5 +20,23 @@ Page::~Page()
|
||||||
|
|
||||||
void Page::add_content(GtkWidget *content)
|
void Page::add_content(GtkWidget *content)
|
||||||
{
|
{
|
||||||
gtk_table_attach_defaults(GTK_TABLE(table), content, 0, 1, 1, 2);
|
gtk_table_attach_defaults(GTK_TABLE(table), content, 0, 1, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Page::add_footer(GtkWidget *footer)
|
||||||
|
{
|
||||||
|
gtk_table_attach(GTK_TABLE(table), footer, 0, 1, 2, 3, GROW, SHRINK, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
GtkWidget *Page::get_page()
|
||||||
|
{
|
||||||
|
return table;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Page::hide()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Page::show()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,32 @@
|
||||||
|
|
||||||
#include <ocarina/gtk.h>
|
#include <ocarina/gtk.h>
|
||||||
|
#include <ocarina/page.h>
|
||||||
|
#include <libsaria/print.h>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
static GtkWidget *tabs = NULL;
|
static GtkWidget *tabs = NULL;
|
||||||
|
static vector<Page> pages;
|
||||||
|
|
||||||
|
static int cur_page()
|
||||||
|
{
|
||||||
|
return gtk_notebook_get_current_page(GTK_NOTEBOOK(tabs));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void switch_page(GtkWidget *notebook, GtkWidget *page, int pagenum)
|
||||||
|
{
|
||||||
|
int cur = cur_page();
|
||||||
|
if (cur != -1)
|
||||||
|
pages[cur].hide();
|
||||||
|
if (pagenum != -1)
|
||||||
|
pages[pagenum].show();
|
||||||
|
}
|
||||||
|
|
||||||
static void make_tabs()
|
static void make_tabs()
|
||||||
{
|
{
|
||||||
tabs = gtk_notebook_new();
|
tabs = gtk_notebook_new();
|
||||||
|
GTK_CONNECT(tabs, "switch-page", switch_page, NULL);
|
||||||
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tabs), GTK_POS_LEFT);
|
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tabs), GTK_POS_LEFT);
|
||||||
gtk_widget_show(tabs);
|
gtk_widget_show(tabs);
|
||||||
}
|
}
|
||||||
|
@ -19,12 +40,14 @@ GtkWidget *get_tabs()
|
||||||
|
|
||||||
void add_page(GtkWidget *label, GtkWidget *content, bool fill)
|
void add_page(GtkWidget *label, GtkWidget *content, bool fill)
|
||||||
{
|
{
|
||||||
gtk_notebook_append_page(GTK_NOTEBOOK(tabs), content, label);
|
Page page(content);
|
||||||
|
gtk_notebook_append_page(GTK_NOTEBOOK(tabs), page.get_page(), label);
|
||||||
if (fill == true) {
|
if (fill == true) {
|
||||||
gtk_notebook_set_tab_label_packing(GTK_NOTEBOOK(tabs),
|
gtk_notebook_set_tab_label_packing(GTK_NOTEBOOK(tabs),
|
||||||
content,
|
page.get_page(),
|
||||||
TRUE,
|
TRUE,
|
||||||
TRUE,
|
TRUE,
|
||||||
GTK_PACK_START);
|
GTK_PACK_START);
|
||||||
}
|
}
|
||||||
|
pages.push_back(page);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue