스크롤바 를 어찌 넣어야 할지........ㅜ.ㅜ
글쓴이: hbhha / 작성시간: 금, 2003/08/29 - 3:46오후
제가 요즘 GTK+로 탐색기를 만드는중입니다..
그런데..탐색기에서 보면..왼쪽창은 트리창..오른쪽 창은..파일보이는 창입니다..
그런데..트리창에는 스크롤바를 만들었는데..오른쪽 파일보이는 창에는 스크롤바가 안생깁니다..
어찌 해야 되는지 아시는분 조언좀..
제가 초보거든요.
너무 잘 안되니 힘드네요...
아시는분 자세한 설명 부탁드립니다...
좀더 자세히 알려주셔서..소스의 어디를 이렇게 한번 고쳐보라고 해주심 더욱더 고맙고요....^^;;
그럼 즐거운 날 되세요!!
소스...
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>
#include <gtk/gtk.h>
#define MAX_PATH 1024
static void PopulateListbox (char *szPath);
GtkWidget *listbox;
void AddListItem (GtkWidget *listbox, char *sText)
{
GtkWidget *item;
item = gtk_list_item_new_with_label (sText);
gtk_container_add (GTK_CONTAINER (listbox), item);
gtk_widget_show (item);
}
int IsDirectory (char *buffer)
{
struct stat buf;
if (stat (buffer, &buf) < 0) {
return (FALSE);
}
return (S_ISDIR (buf.st_mode));
}
void select_item (GtkWidget *widget, gpointer data)
{
printf ("item selected %s\n", (char *) data);
PopulateListbox ((char *) data);
}
static void CreateSubtree (char *szPath, char *szDir, GtkWidget* item)
{
DIR *directory;
struct dirent *dirEntry;
GtkWidget* item_subtree = NULL;
GtkWidget* item_new;
char buffer[MAX_PATH];
directory = opendir (szPath);
while (dirEntry = readdir (directory)) {
if (!strcmp (dirEntry->d_name, "..") ||
!strcmp (dirEntry->d_name, ".")) {
} else {
sprintf (buffer, "%s/%s", szPath, dirEntry->d_name);
if (IsDirectory (buffer)) {
if (item_subtree == NULL) {
item_subtree = gtk_tree_new ();
gtk_tree_item_set_subtree (GTK_TREE_ITEM (item), item_subtree);
}
item_new = gtk_tree_item_new_with_label (dirEntry->d_name);
gtk_tree_append (GTK_TREE (item_subtree), item_new);
CreateSubtree (buffer, dirEntry->d_name, item_new);
gtk_widget_show (item_new);
gtk_signal_connect (GTK_OBJECT (item_new),
"select",
GTK_SIGNAL_FUNC (select_item),
g_strdup (buffer));
}
}
}
closedir (directory);
gtk_widget_show (item);
}
static void PopulateListbox (char *szPath)
{
DIR *directory;
struct dirent *dirEntry;
char buffer[MAX_PATH];
gtk_list_clear_items (GTK_LIST (listbox),
0,
g_list_length (GTK_LIST (listbox)->children));
directory = opendir (szPath);
while (dirEntry = readdir (directory)) {
if (!strcmp (dirEntry->d_name, "..") ||
!strcmp (dirEntry->d_name, ".")) {
} else {
sprintf (buffer, "%s/%s", szPath, dirEntry->d_name);
if (!IsDirectory (buffer)) {
AddListItem (listbox, dirEntry->d_name);
}
}
}
closedir (directory);
}
static void CreateTree (GtkWidget *window)
{
char buffer[MAX_PATH];
GtkWidget *hbox;
GtkWidget *vbox;
GtkWidget *scrolled_win_left;
GtkWidget *tree;
GtkWidget *leaf;
hbox = gtk_hbox_new (FALSE, 5);
gtk_container_add (GTK_CONTAINER (window),hbox);
gtk_widget_show (hbox);
vbox = gtk_vbox_new(FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox),vbox, TRUE, TRUE, 0);
gtk_container_border_width(GTK_CONTAINER(vbox), 5);
gtk_widget_show(vbox);
scrolled_win_left = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win_left),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (vbox), scrolled_win_left, TRUE, TRUE, 0);
gtk_widget_set_usize (scrolled_win_left, 250, 250);
gtk_widget_show (scrolled_win_left);
tree = gtk_tree_new();
listbox = gtk_list_new ();
gtk_widget_set_usize (listbox, 250, 250);
gtk_box_pack_start (GTK_BOX (hbox), listbox, TRUE, TRUE, 0);
gtk_widget_show (listbox);
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_win_left),tree);
gtk_widget_show (tree);
leaf = gtk_tree_item_new_with_label (
getcwd (buffer, sizeof (buffer)));
gtk_tree_append (GTK_TREE (tree), leaf);
gtk_widget_show (leaf);
CreateSubtree (getcwd (buffer, sizeof (buffer)),
getcwd (buffer, sizeof (buffer)), leaf);
gtk_widget_show (window);
}
void delete_event (GtkWidget *widget, gpointer *data)
{
gtk_main_quit ();
}
int main (int argc, char *argv[])
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "탐색기테스트");
gtk_widget_set_usize (window, 250, 250);
gtk_signal_connect (GTK_OBJECT (window), "delete_event",
GTK_SIGNAL_FUNC (delete_event), NULL);
gtk_widget_show (window);
CreateTree (window);
gtk_main ();
return 0;
}
Makefile
CC = gcc -Wall all: tree tree: tree.c $(CC) `gtk-config --cflags` `gtk-config --libs` tree.c -o tree clean: rm -f *.o tree
Forums:


댓글 달기