 |
GTK+ Forums Discussion forum for GTK+ and Programming. Ask questions, troubleshoot problems, view and post example code, or express your opinions.
|
|
|
| Author |
Message |
|
|
madsovenielsen Familiar Face
Joined: 14 Mar 2010 Posts: 5
|
Posted: Wed Mar 17, 2010 6:47 pm Post subject: Adding scrollbar to GTK app |
|
|
Hey all.
I am working on this application in C with GTK, i wouldt like to add scrollbars to the text view. but i have no idear how to do this. i have searched on google but can't find anything to get me in the right direction.
Heres the code.
----------------------------------------------------------------------------------------
#include <gtk/gtk.h>
update_statusbar(GtkTextBuffer *buffer,
GtkStatusbar *statusbar)
{
gchar *msg;
gint row, col;
GtkTextIter iter;
gtk_statusbar_pop(statusbar, 0);
gtk_text_buffer_get_iter_at_mark(buffer,
&iter, gtk_text_buffer_get_insert(buffer));
row = gtk_text_iter_get_line(&iter);
col = gtk_text_iter_get_line_offset(&iter);
msg = g_strdup_printf("Col %d Ln %d", col+1, row+1);
gtk_statusbar_push(statusbar, 0, msg);
g_free(msg);
}
static void
mark_set_callback(GtkTextBuffer *buffer,
const GtkTextIter *new_location, GtkTextMark *mark,
gpointer data)
{
update_statusbar(buffer, GTK_STATUSBAR(data));
}
int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *toolbar;
GtkWidget *view;
GtkWidget *statusbar;
GtkToolItem *open;
GtkToolItem *new;
GtkToolItem *find;
GtkToolItem *save;
GtkTextBuffer *buffer;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
gtk_window_set_title(GTK_WINDOW(window), "Escriba");
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
toolbar = gtk_toolbar_new();
gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);
find = gtk_tool_button_new_from_stock(GTK_STOCK_FIND);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), find, 0);
save = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), save, 0);
open = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), open, 0);
new = gtk_tool_button_new_from_stock(GTK_STOCK_NEW);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), new, 0);
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 3);
view = gtk_text_view_new();
gtk_box_pack_start(GTK_BOX(vbox), view, TRUE, TRUE, 5);
gtk_widget_grab_focus(view);
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
statusbar = gtk_statusbar_new();
gtk_box_pack_start(GTK_BOX(vbox), statusbar, FALSE, FALSE, 0);
g_signal_connect(buffer, "changed",
G_CALLBACK(update_statusbar), statusbar);
g_signal_connect_object(buffer, "mark_set",
G_CALLBACK(mark_set_callback), statusbar, 0);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
update_statusbar(buffer, GTK_STATUSBAR (statusbar));
gtk_main();
return 0;
}
------------------------------------------------------------------------------------------
Any help is greatly appriciated.
/mads |
|
| Back to top |
|
 |
Saniat Familiar Face
Joined: 24 Dec 2009 Posts: 23
|
Posted: Thu Mar 18, 2010 3:52 am Post subject: |
|
|
Hi,
Add your vbox into scroll window.
as like:
| Code: (C) | 1 2 3 4 5 6 7 8
| GtkWidget* scrolledwin;
scrolledwin = gtk_scrolled_window_new(NULL,NULL);
gtk_container_set_border_width(GTK_CONTAINER(scrolledwin), 0);
gtk_widget_set_size_request(scrolledwin, 800, 600);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),GTK_POLICY_NEVER,GTK_POLICY_AUTOMATIC);
gtk_widget_show(scrolledwin);
gtk_container_add(GTK_CONTAINER(scrolledwin), vbox);
gtk_container_add(GTK_CONTAINER(window), scrolledwin); |
Hope this code could be helpful for you.
Saniat |
|
| Back to top |
|
 |
madsovenielsen Familiar Face
Joined: 14 Mar 2010 Posts: 5
|
Posted: Thu Mar 18, 2010 4:41 pm Post subject: Thanks |
|
|
Thanks.
But i dont quite understand where i am supposed to put that code.
/mads |
|
| Back to top |
|
 |
Joel GTK+ Guru
Joined: 06 Apr 2008 Posts: 239 Location: Fortress of solitude
|
Posted: Thu Mar 18, 2010 5:06 pm Post subject: |
|
|
Hi madsovenielsen:
Is pretty easy, keep your documentation open to see details about unknown APIs.
Also, try to learn more code basics
| Code: (C) | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
GtkWidget *win; // toplevel
GtkWidget *layout; // main layout
GtkWidget *scroll; // scrollwindow container
GtkWidget *text; // text view widget
gtk_init(&argc,&argv);
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(win),GTK_WIN_POS_CENTER);
g_signal_connect(G_OBJECT(win),"destroy",G_CALLBACK(gtk_main_quit),NULL);
layout = gtk_vbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(win), layout);
// scroll creation
scroll = gtk_scrolled_window_new(NULL,NULL);
gtk_container_add(GTK_CONTAINER(layout), scroll); // add scroll into our panel
// show onlt when is need it
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
// textview creation
text = gtk_text_view_new();
gtk_container_add(GTK_CONTAINER(scroll), text); // add textview into scroll
gtk_widget_show_all(win);
gtk_main();
return 0;
}
| |
|
| Back to top |
|
 |
madsovenielsen Familiar Face
Joined: 14 Mar 2010 Posts: 5
|
Posted: Thu Mar 18, 2010 5:28 pm Post subject: Thanks |
|
|
Thanks.
it cleared things up |
|
| Back to top |
|
 |
|
Powered by phpBB © 2001, 2005 phpBB Group CodeBB 1.0 Beta 2
|