Отправляет email-рассылки с помощью сервиса Sendsay

Практические советы по GTK+

  Все выпуски  

Практические советы по GTK+ Image Viewer 1.6



Image Viewer 1.6

Продолжаем писать GTK приложение для просмотра графических файлов. На этот раз разобьём основное окно на несколько подокон, а точнее на три. Причём размеры подокон можно будет менять, двигая мышкой за границу подокон.
В первом будет обзор файловой системы для выбора каталога с графическими файлами,
во втором - предосмотр файлов: все графические файлы каталога представлены в виде иконок,
а в третьем - то, что есть сейчас в основном окне - просмотр графического файла.
В этом выпуске только разобьём основное окно на подокна.

Для нашей цели понадобятся новые виджеты:
GtkHPaned - Контейнер с двумя подокнами, разделёнными горизонтально.
GtkVPaned - Контейнер с двумя подокнами, разделёнными вертикально.
Эти виджеты создаются очень просто:

GtkWidget* gtk_hpaned_new(void) - для горизонтального контейнера
GtkWidget* gtk_vpaned_new(void) - для вертикального контейнера

Остаётся только добавить дочерние виджеты в первое и второе подокно контейнера. Делается это с помощью следующих функций:

void gtk_paned_pack1(GtkPaned *paned, GtkWidget *child, gboolean resize, gboolean shrink);
void gtk_paned_pack2(GtkPaned *paned, GtkWidget *child, gboolean resize, gboolean shrink);

gtk_paned_pack1() добавляет дочерний виджет child в первое подокно контейнера, а gtk_paned_pack2() во второе. Под первым подокном подразумевается левое или верхнее, а под вторым - соответственно правое или нижнее.
resize определяет, будет ли расширяться дочерний виджет при увеличении виджета paned.
shrink определяет возможность виджета быть уменьшенным меньше своего минимального размера.


Перейдём к практике.

Раскладка подокон может быть любая, остановимся на следующёй:
Делим рабочую область на два горизонтальных окна
paned1 = gtk_hpaned_new();
В правой половине будет окно просмотра графического файла.
gtk_paned_pack2(paned1,draw_area,TRUE,FALSE);
В левой половине будет вертикальный контейнер.
paned2 = gtk_vpaned_new();
gtk_paned_pack1(paned1,paned2,TRUE,TRUE);
В верхней части вертикального контейнера paned2 будет область обзора файловой системы. А в нижней части - окно предосмотра графических файлов.
gtk_paned_pack1(GTK_PANED(paned2),file_browser,TRUE,TRUE);
gtk_paned_pack2(GTK_PANED(paned2),pictures_preview,TRUE,TRUE);
Как всё получилось, можно увидеть в приложенном файле, или скачав исходные коды с откомпилированным приложением по ссылке внизу текста.

Вот реальный код, который мы добавили:

    // обзор файловой системы
    file_browser = create_file_browser();
    // предосмотр файлов в виде иконок
    pictures_preview = create_pictures_preview();

    // горизонтальный контейнер - основной виджет
    paned1 = gtk_hpaned_new();
    // вертикальный контейнер - будет в правой части горизонтального
    paned2 = gtk_vpaned_new();
    // упаковываем в горизонтальный контейнер
    gtk_paned_pack1(GTK_PANED(paned1),paned2,TRUE,TRUE);
    gtk_paned_pack2(GTK_PANED(paned1),draw_area,TRUE,FALSE);
    // упаковываем в вертикальный контейнер
    gtk_paned_pack1(GTK_PANED(paned2),file_browser,TRUE,TRUE);
    gtk_paned_pack2(GTK_PANED(paned2),pictures_preview,TRUE,TRUE);
    // упаковка горизонтального контейнера в vbox_in
    gtk_box_pack_start (GTK_BOX (vbox_in), paned1,TRUE, TRUE,2);

vbox_in - это родительский виджет в окне, а draw_area - область вывода графического файла на экран.
Создание виджетов:
file_browser = create_file_browser();
 и

pictures_preview = create_pictures_preview();
будет рассмотрено в следующих выпусках.

Ещё был изменён обработчик нажатия клавиши "пробел", в котором окно с картинкой разворачивалось на весь экран и сворачивалось обратно. При расширении окна с картинокой на весь экран добавлена функция скрытия левой половины основного горизонтального контейнера для того, чтобы на экране была только картинка:
gtk_widget_hide(paned2);
При свёртывании окна в обычное состояние, скрытое окно отображаем снова.
gtk_widget_hide(paned2);

Готовое приложение + исходные коды доступны по ссылке: image-viewer1.6.tar.gz [53 кб]

Все вопросы, замечания и пожелания можно отсылать по адресу: comp.soft.prog.gtk-owner@subscribe.ru

 


В избранное