Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.63.87] |
|
Сообщ.
#1
,
|
|
|
начал практиковаться с gtk:
tname=gdirlist $(tname).exe : $(tname).c gcc -Wall -g $(tname).c -o $(tname).exe `/bin/pkg-config --cflags --libs gtk+-2.0` .PHONY : clean clean : rm $(tname).exe // перед компиляцией убедитесь, что pkg-config --libs --cflags gtk+-2.0 ссылается на правильный каталог gtk+-2.0 // компиляция под гигвином не требует никаких изменений в коде и майкфайле #include <gtk/gtk.h> int ev_num=0; static gboolean delete_event( GtkWidget *widget, GdkEvent *event, gpointer data ) { g_print ("delete event occurred\n"); return FALSE; } static void destroy( GtkWidget *widget, gpointer data ) { gtk_main_quit (); } GDir *dir; GtkWidget *box; GtkWidget *table; GtkWidget *entry ; void dirlist (GDir *pd,int ysize) { int i; const gchar *file; GtkWidget *label; gtk_widget_destroy(box); box = gtk_vbox_new (0,1); for ( i =0; i<ysize ; i++) { file = g_dir_read_name (pd); if ( ! file ) break; label = gtk_label_new(file); gtk_box_pack_start_defaults ( (GtkBox*) box,label); gtk_widget_show (label); } gtk_table_attach_defaults ( (GtkTable *) table,box,1,2,0,2); gtk_widget_show(box); } gboolean gev (GtkWidget *widget, GdkEvent *event, gpointer user_data){ if (event->type == GDK_KEY_PRESS) { const gchar *tentry; guint i; tentry=gtk_entry_get_text((GtkEntry*)entry); i=((GdkEventKey*) event)->keyval; if ( i == 65293 ) { g_print(tentry); g_print(" enter pressed \n"); dir = g_dir_open ( tentry,0,0); dirlist(dir,10); g_dir_close(dir); } else { g_print("gdk_event %d type: %d\n",ev_num,i); } } ev_num++; return FALSE; } int main( int argc, char *argv[] ) { //int ysize=10; GtkWidget *window; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete_event), NULL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL); g_signal_connect (G_OBJECT (window), "event", G_CALLBACK (gev), NULL); table = gtk_table_new (2,2,1); gtk_container_add ( (GtkContainer*) window, table); entry = gtk_entry_new(); gtk_table_attach_defaults ( (GtkTable *) table,entry,0,1,0,1); gtk_widget_show (entry); GtkWidget *image; image = gtk_image_new_from_file("r.png"); gtk_table_attach_defaults ( (GtkTable*) table,image,0,1,1,2); g_print("image size : %x\n",gtk_image_get_pixel_size((GtkImage*)image)); gtk_widget_show (image); gtk_widget_show (table); gtk_widget_show (window); gtk_main (); return 0; } соответсвенно возникло много нерешенных вопросов: - размещение виджетов в коде занимает слишком много времени, есть какие нить библиотеки способные считать из текстового файла расположение элементов и связать их с функциями обрабатывающими сообщения? а также записать изменения в интерфейсе сделаные пользователем в этот же файл? - чем можно заменить таблицу, чтобы растояние между элементами не менялось при изменении размеров окна? - как проще сделать листинг списка неопределенного количества файлов : путем пересоздания бокса каждый раз при скроллинге или есть возможность вывести на экран только часть элементов бокса соотвественно без его пересоздания? как перемещаться между элементами бокса ( расположены справа, содержат имена файлов ) через нажатия клавишь pgup\down с обработкой с привязкой сигнала о перемещении к заданной функции? чем лучше подсвечивать имя файла который в данный момент на изображении? как узнать размеры изображения ? как маштабировать изображение? какие библиотеки еще имеет смысл использовать для решения данных вопросов кроме gtk? присматриваюсь к pcre, image magic .... |
Сообщ.
#2
,
|
|
|
Цитата есть какие нить библиотеки способные считать из текстового файла расположение элементов и связать их с функциями обрабатывающими сообщения? libglade Цитата чем можно заменить таблицу, чтобы растояние между элементами не менялось при изменении размеров окна? http://library.gnome.org/devel/gtk/unstable/LayoutContainers.html Цитата как проще сделать листинг списка неопределенного количества файлов : путем пересоздания бокса каждый раз при скроллинге или есть возможность вывести на экран только часть элементов бокса соотвественно без его пересоздания? model-view есть моделька содержащие данные, есть view отображающие их http://library.gnome.org/devel/gtk/unstable/TreeWidget.html русские: http://linfoline.homedns.org/gtk/book1.html http://linfoline.homedns.org/gtk-2.10-reference-manual-ru/index.html http://linfoline.homedns.org/API/glib/index.html |