Продолжаем писать GTK приложение для просмотра графических файлов. На этот
раз разобьём основное окно на несколько подокон, а точнее на три. Причём размеры
подокон можно будет менять, двигая мышкой за границу подокон. В первом будет
обзор файловой системы для выбора каталога с графическими файлами, во втором
- предосмотр файлов: все графические файлы каталога представлены в виде
иконок, а в третьем - то, что есть сейчас в основном окне - просмотр
графического файла. В этом выпуске только разобьём основное окно на подокна.
Для нашей цели понадобятся новые виджеты: GtkHPaned - Контейнер с двумя
подокнами, разделёнными горизонтально. GtkVPaned - Контейнер с двумя
подокнами, разделёнными вертикально. Эти виджеты создаются очень просто:
GtkWidget*
gtk_hpaned_new(void) - для горизонтального контейнера GtkWidget* gtk_vpaned_new(void) - для
вертикального контейнера
Остаётся только добавить дочерние виджеты в
первое и второе подокно контейнера. Делается это с помощью следующих
функций:
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);