The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

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

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




АКЦИЯ! ПОДПИШИСЬ на журнал Linux Format до 31 января 2012 года и выиграй СУПЕРПРИЗ!

Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

Подробнее о проведении акции вы можете прочитать на странице сайта.


  Закладки на сайте
  Проследить за страницей
Created 1996-2012 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList