GTK+ Forums Forum Index GTK+ Forums
Discussion forum for GTK+ and Programming. Ask questions, troubleshoot problems, view and post example code, or express your opinions.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Adding scrollbar to GTK app

 
Post new topic   Reply to topic    GTK+ Forums Forum Index -> GTK+ Programming
Author Message
madsovenielsen
Familiar Face


Joined: 14 Mar 2010
Posts: 5

PostPosted: Wed Mar 17, 2010 6:47 pm    Post subject: Adding scrollbar to GTK app Reply with quote

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

PostPosted: Thu Mar 18, 2010 3:52 am    Post subject: Reply with quote

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

PostPosted: Thu Mar 18, 2010 4:41 pm    Post subject: Thanks Reply with quote

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

PostPosted: Thu Mar 18, 2010 5:06 pm    Post subject: Reply with quote

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

PostPosted: Thu Mar 18, 2010 5:28 pm    Post subject: Thanks Reply with quote

Thanks.

it cleared things up
Back to top
Display posts from previous:   
Post new topic   Reply to topic    GTK+ Forums Forum Index -> GTK+ Programming All times are GMT
Page 1 of 1

 


Powered by phpBB © 2001, 2005 phpBB Group
CodeBB 1.0 Beta 2
Protected by Anti-Spam ACP