# Statusbar (C)

Monica Kochofar
monicakochofar@gmail.com 2012
Oznamuje uživateli zprávy s nižší důležitostí

# Statusbar

Tato stavová lišta je použita jako názorný příklad, jak jsou zprávy ukládány do zásobníku v pořadí poslední-dovnitř-první-ven (LIFO). Zpráva na vrcholu zásobníku je vždy ta, která je zobrazená.

#include <gtk/gtk.h>

/* Funkce zpětného volání, ve které vložíme položku do stavové lišty */ static void push_item (GtkWidget *widget, gpointer data) { GtkWidget *status_bar = data;

/* Vytvoří ID kontextu, které slouží k jedinečné identifikaci * zdroje zprávy */ guint context_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (status_bar), "Statusbar example");

/* Počitadlo je použito k udržování přehledu o množství položek, * které uživatel vložil/vytáhl */ static int count = 1; char hold_output[20];

/* Toto je bezpečnější, než standardní funkce sprintf(). Je zaručno, že výstup * v tomto případě nepřesáhne 20 znaků a výsledek je uchován v proměnné * 'hold_output' */ g_snprintf (hold_output, 20, "Item %d", count++); gtk_statusbar_push (GTK_STATUSBAR (status_bar), context_id, hold_output); }

/* Funkce zpětného volání, která je použita k vytažení položky ze stavové lišty */ static void pop_item (GtkWidget *widget, gpointer data ) { GtkWidget *status_bar = data; guint context_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (status_bar), "Statusbar example");

gtk_statusbar_pop (GTK_STATUSBAR (status_bar), context_id); }

static void activate (GtkApplication *app, gpointer user_data) { GtkWidget *grid; GtkWidget *window; GtkWidget *status_bar; GtkWidget *pop_button; GtkWidget *push_button;

/* Vytvoří okno s názvem, šířkou okraje a výchozí velikostí */ window = gtk_application_window_new (app); gtk_window_set_default_size (GTK_WINDOW (window), 220, 100); gtk_window_set_title (GTK_WINDOW (window), "Statusbar Example"); gtk_container_set_border_width (GTK_CONTAINER(window), 10);

/* Vytvoří stavovou lištu, která udržuje globální proměnnou */ status_bar = gtk_statusbar_new ();

/* Vytvoří tlačítka s popisky */ push_button = gtk_button_new_with_label ("push item"); pop_button = gtk_button_new_with_label ("pop last item");

/* Vytvoří mřížku a správně do ní připojí tlačítka/stavovou lištu */ grid = gtk_grid_new (); gtk_grid_attach (GTK_GRID (grid), push_button, 0,1,1,1); gtk_grid_attach (GTK_GRID (grid), pop_button, 0,2,1,1); gtk_grid_attach (GTK_GRID (grid), status_bar, 0,3,1,1);

/* Napojí signály kliknutí k odpovídajícím funkcím zpětného volání */ g_signal_connect (GTK_BUTTON (push_button), "clicked", G_CALLBACK (push_item), status_bar); g_signal_connect (GTK_BUTTON (pop_button), "clicked", G_CALLBACK (pop_item), status_bar);

/* Připojí mřížku uchovávající synovské widgety do okna a zobrazí jej */ gtk_container_add (GTK_CONTAINER (window), grid); gtk_widget_show_all (window); }

int main (int argc, char **argv) { GtkApplication *app; int status;

app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE); g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); status = g_application_run (G_APPLICATION (app), argc, argv); g_object_unref (app);

return status; }

V této ukázce se používá následující:

GtkApplication

GtkWindow

GtkStatusBar

Funkce pro práci s řetězci

GtkGrid