The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

GTK+ 2.0 Tutorial

<<< Previous

Разные виджеты (Miscellaneous Widgets)

Next >>>


Строка состояния

Строка состояния, это простой виджет для отображения текстовых сообщений. Она содержит сообщения в стеке, таким образом каждое сообщение может быть выведено повторно после перекрытия новым сообщением.

Чтобы позволить различным частям приложения использовать туже самую строку состояния (statusbar), для отображения сообщений, statusbar виджет использует Идентификаторы Контекста, которые используются, чтобы идентифицировать различных "пользователей". На экран выводится сообщение находящееся в данный момент сверху в стеке, не зависимо от контекста. Сообщения помещаются в стек по принципу - "последний вошёл первый вышел", независимо от контекста.

Строка состояния создаётся вызовом:

GtkWidget *gtk_statusbar_new( void );

Новый контекстный идентификатор (Context Identifier) создаётся используя функцию с коротким текстовым описанием контекста:

guint gtk_statusbar_get_context_id( GtkStatusbar *statusbar,
                                    const gchar  *context_description );

Существует три функции для работы со statusbars:

guint gtk_statusbar_push( GtkStatusbar *statusbar,
                          guint         context_id,
                          const gchar  *text );
void gtk_statusbar_pop( GtkStatusbar *statusbar)
                        guint         context_id );
void gtk_statusbar_remove( GtkStatusbar *statusbar,
                           guint         context_id,
                           guint         message_id ); 

Первая, gtk_statusbar_push(), используется для добавления сообщений в строку состояния. Она возвращает идентификатор сообщения (Message Identifier), который может быть использован функцией gtk_statusbar_remove для удаления данного сообщения из стека строки состояния.

Функция gtk_statusbar_pop() перемещает на вершину стека сообщение с определенным идентификатором (Context Identifier).

В дополнение к текстовым сообщениям может отображаться небольшая область для изменения размера основного окна при захвате курсором мыши. Следующие функции предназначены для отображения области контроля размера окна в строке состояния.

void     gtk_statusbar_set_has_resize_grip( GtkStatusbar *statusbar,
                                            gboolean      setting );
gboolean gtk_statusbar_get_has_resize_grip( GtkStatusbar *statusbar );

В следующем примере в окне расположена строка состояния и две кнопки, первая размещает дополнительный пункт в стеке, а вторая выводит предыдущий пункт.

#include <stdlib.h>
#include <gtk/gtk.h>
#include <glib.h>
GtkWidget *status_bar;
void push_item( GtkWidget *widget,
                gpointer   data )
{
  static int count = 1;
  char buff[20];
  g_snprintf (buff, 20, "Item %d", count++);
  gtk_statusbar_push (GTK_STATUSBAR (status_bar), GPOINTER_TO_INT (data), buff);
  return;
}
void pop_item( GtkWidget *widget,
               gpointer   data )
{
  gtk_statusbar_pop (GTK_STATUSBAR (status_bar), GPOINTER_TO_INT (data));
  return;
}
int main( int   argc,
          char *argv[] )
{
    GtkWidget *window;
    GtkWidget *vbox;
    GtkWidget *button;
    gint context_id;
    gtk_init (&argc, &argv);
    /* создаём новое окно */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_set_size_request (GTK_WIDGET (window), 200, 100);
    gtk_window_set_title (GTK_WINDOW (window), "GTK statusbar");
    g_signal_connect (G_OBJECT (window), "delete_event",
                      G_CALLBACK (exit), NULL);
 
    vbox = gtk_vbox_new (FALSE, 1);
    gtk_container_add (GTK_CONTAINER (window), vbox);
    gtk_widget_show (vbox);
          
    status_bar = gtk_statusbar_new ();      
    gtk_box_pack_start (GTK_BOX (vbox), status_bar, TRUE, TRUE, 0);
    gtk_widget_show (status_bar);
    context_id = gtk_statusbar_get_context_id(
                          GTK_STATUSBAR (status_bar), "Statusbar example");
    button = gtk_button_new_with_label ("push item");
    g_signal_connect (G_OBJECT (button), "clicked",
                      G_CALLBACK (push_item), GINT_TO_POINTER (context_id));
    gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 2);
    gtk_widget_show (button);              
    button = gtk_button_new_with_label ("pop last item");
    g_signal_connect (G_OBJECT (button), "clicked",
                      G_CALLBACK (pop_item), GINT_TO_POINTER (context_id));
    gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 2);
    gtk_widget_show (button);
    /* выводим на экран всё содержимое окна */
    gtk_widget_show (window);
    gtk_main ();
    return 0;
}

<<< Previous

Home

Next >>>

Rulers

Up

Text Entries






Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру