Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Saturday, April 20, 2024

File: [Platon] / libplaton / utils / phone-list / telzozn-gtk.c (download)

Revision 1.1, Wed Aug 16 21:22:44 2006 UTC (17 years, 8 months ago) by nepto

Added phone-list (tel-zozn) into CVS

/* Řádek pro editaci textu (GtkEntry) */

#include <gtk/gtk.h>
#include <stdio.h>
#include <string.h>

GtkWidget *window; /* GtkWindow, hlavní okno programu */
GtkWidget *view; /* Label v hlavním okně, který zobrazuje obsah dialog_data */
GtkWidget *toggle; /* Toggle button pro zobrazování dialogu */
GtkWidget *dialog; /* GtkDialog */
GtkWidget *scale; /* GtkScale v dialogu */
GSList *radios; /* Radio buttons v dialogu */
gboolean modal; /* TRUE pro modální dialog */
gint delete_event_handler; /* Handler dialogu pro "delete-event" */

/* Vyžaduje potvrzení před zavřením hlavního okna */
static gboolean main_delete(GtkWidget *widget, GdkEvent *event, gpointer data) /* {{{ */
{
    GtkWidget *dialog;
    gint resp;
    dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL,
            GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Naozaj ukoncit program?");
    resp = gtk_dialog_run(GTK_DIALOG(dialog));
    gtk_widget_destroy(dialog);
    switch (resp)
    {
        case GTK_RESPONSE_NONE:
            g_printerr("No response from message dialog\n");
            return TRUE;
        case GTK_RESPONSE_YES:
            g_printerr("Response YES from message dialog\n");
            return FALSE;
        case GTK_RESPONSE_NO:
            g_printerr("Response NO from message dialog\n");
            return TRUE;
        case GTK_RESPONSE_DELETE_EVENT:
            g_printerr("Message dialog deleted\n");
            return TRUE;
        default:
            g_printerr("Response %d from message dialog\n", resp);
            return TRUE;
    }
} /* }}} */

/* Událost "delete-event" nezruší dialog. Standardní obsluha "delete-event"
 * vygeneruje signál "response" s hodnotou GTK_RESPONSE_DELETE_EVENT. Tato
 * standardní obsluha se volá jako první, takže proběhne, i když
 * dialog_delete() vratí TRUE. Funkce gtk_dialog_run() si přidá ještě svůj
 * handler, který ukončuje rekurzivně volanou smyčku událostí. Tento handler
 * se nezavolá díky návratové hodnotě TRUE z dialog_delete(). To ale nevadí,
 * protože standardní obsluha "response" také ukončí vnořenou smyčku událostí.
 */
static gboolean dialog_delete(GtkWidget *widget, GdkEvent *event, gpointer data) /* {{{ */
{
    g_printerr("dialog_delete() called\n");
    return TRUE;
} /* }}} */

/* Zobrazení/schování dialogu (modální nebo nemodální) */
static void show_dialog(GtkWidget *widget, gpointer data) /* {{{ */
{
    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
    /* Zobrazit */
    if(modal) {
        gtk_dialog_run(GTK_DIALOG(data));
    } else
        gtk_widget_show(GTK_WIDGET(data));
    } else
    gtk_widget_hide(GTK_WIDGET(data));
} /* }}} */

/* Handler signálu "response", volá se při zavření dialogu */
static void response_handler(GtkDialog *dialog, gint resp, gpointer data) /* {{{ */
{
    switch(resp) {
        case GTK_RESPONSE_NONE:
            g_printerr("No response from dialog\n");
            break;
        case GTK_RESPONSE_OK:
            g_printerr("Response OK from dialog\n");
        //    get_dialog_data(GTK_WIDGET(dialog), &dialog_data);
        //    update_label(GTK_LABEL(view));
            break;
        case GTK_RESPONSE_CANCEL:
            g_printerr("Response Cancel from dialog\n");
            break;
        case GTK_RESPONSE_DELETE_EVENT:
            g_printerr("Dialog deleted\n");
            break;
        default:
            g_printerr("Response %d from dialog\n", resp);
            break;
    }
    /* Vygeneruje "toggled", zavolá se show_dialog() a schová dialog. */
    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), FALSE);
} /* }}} */

/* Aktivace editačního řádku (stisk Enter) */
static void activate(GtkWidget *widget, gpointer data)
{
    g_print("ACTIVATED: %s\n", gtk_entry_get_text(GTK_ENTRY(widget)));
}

int main(int argc, char *argv[])
{
    int i;
    char buf[20];
    GtkWidget *box, *buttons, *widget, *entry, *notebook;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);
    gtk_window_set_title(GTK_WINDOW(window), "TELZOZN");
    g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(main_delete), NULL);
    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    box = gtk_vbox_new(FALSE, 5);
    gtk_container_add(GTK_CONTAINER(window), box);

    /* Label */
    view = gtk_label_new("Enter phone number:");
    gtk_label_set_justify(GTK_LABEL(view), GTK_JUSTIFY_LEFT);
    gtk_misc_set_alignment(GTK_MISC(view), 0, 0.5);
    gtk_box_pack_start(GTK_BOX(box), view, FALSE, FALSE, 0);

    /* Edit line */
    entry = gtk_entry_new();
    gtk_entry_set_max_length(GTK_ENTRY(entry), 15);
    g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(activate), NULL);
    gtk_box_pack_start(GTK_BOX(box), entry, FALSE, FALSE, 0);

    /* Submit button */
    toggle = gtk_toggle_button_new_with_mnemonic("_Show dialog");
    GTK_WIDGET_SET_FLAGS(toggle, GTK_CAN_DEFAULT);
    gtk_box_pack_end(GTK_BOX(box), toggle, FALSE, FALSE, 0);
    gtk_widget_grab_default(toggle);

    /* Dialog */
    dialog = gtk_dialog_new();
    delete_event_handler = g_signal_connect(G_OBJECT(dialog), "delete-event", G_CALLBACK(dialog_delete), NULL);
    g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(response_handler), toggle);
    gtk_window_set_title(GTK_WINDOW(dialog), "A dialog");
    gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window));
    gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);
    gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), 5);

    /* Vytvořit notebook a vložit do okna */
    notebook = gtk_notebook_new();
    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook, TRUE, TRUE, 0);
    /* Povolit scrollování, pokud je záložek více, než se vejde do okna */
    gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE);
    /* Povolit popup menu se seznamem stránek */
    gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook));
    
    /* Vytvořit stránky notebooku */
    for(i=1; i<=10; i++) {
        box = gtk_alignment_new(0.5, 0.5, 0, 0);
        g_snprintf(buf, 20, "Button %d", i);
        widget = gtk_button_new_with_label(buf);
        gtk_container_add(GTK_CONTAINER(box), widget);
        g_snprintf(buf, 20, "Page %d", i);
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, 
                                 gtk_label_new(buf));
    }
/*
    box = gtk_hbox_new(FALSE, 5);
    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), box, FALSE, FALSE, 0);
    widget = gtk_label_new_with_mnemonic("_Scale:");
    gtk_box_pack_start(GTK_BOX(box), widget, FALSE, FALSE, 0);
    scale = gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, -10, 10, 0.1, 1, 0)));
    g_object_set_data(G_OBJECT(scale), "get-data-fun", get_scale_val);
    g_object_set_data(G_OBJECT(scale), "data-offset", GINT_TO_POINTER(G_STRUCT_OFFSET(struct dialog_data, scale)));
    gtk_label_set_mnemonic_widget(GTK_LABEL(widget), scale);
    gtk_scale_set_value_pos(GTK_SCALE(scale), GTK_POS_RIGHT);
    gtk_box_pack_start(GTK_BOX(box), scale, TRUE, TRUE, 0);
    frame = gtk_frame_new("Radio buttons in frame");
    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, FALSE, FALSE, 0);
    box = gtk_vbox_new(FALSE, 5);
    gtk_container_add(GTK_CONTAINER(frame), box);
    widget = gtk_radio_button_new_with_mnemonic(NULL, "_A");
    g_object_set_data(G_OBJECT(widget), "get-data-fun", get_radio_val);
    g_object_set_data(G_OBJECT(widget), "data-offset", GINT_TO_POINTER(G_STRUCT_OFFSET(struct dialog_data, radio)));
    gtk_box_pack_start(GTK_BOX(box), widget, FALSE, FALSE, 0);
    widget = gtk_radio_button_new_with_mnemonic_from_widget( GTK_RADIO_BUTTON(widget), "_B");
    g_object_set_data(G_OBJECT(widget), "get-data-fun", get_radio_val);
    g_object_set_data(G_OBJECT(widget), "data-offset", GINT_TO_POINTER(G_STRUCT_OFFSET(struct dialog_data, radio)));
    gtk_box_pack_start(GTK_BOX(box), widget, FALSE, FALSE, 0);
    widget = gtk_radio_button_new_with_mnemonic_from_widget( GTK_RADIO_BUTTON(widget), "_C");
    g_object_set_data(G_OBJECT(widget), "get-data-fun", get_radio_val);
    g_object_set_data(G_OBJECT(widget), "data-offset", GINT_TO_POINTER(G_STRUCT_OFFSET(struct dialog_data, radio)));
    gtk_box_pack_start(GTK_BOX(box), widget, FALSE, FALSE, 0);
    widget = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_OK, GTK_RESPONSE_OK);
    GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_DEFAULT);
    gtk_widget_grab_default(widget);
    gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
*/
    g_signal_connect(G_OBJECT(toggle), "toggled", G_CALLBACK(show_dialog), dialog);
    gtk_container_foreach(GTK_CONTAINER(dialog), (GtkCallback)gtk_widget_show_all, NULL);
    gtk_widget_show_all(window);
    gtk_main();

    return 0;
}

/* Modeline for ViM {{{
 * vim: set ts=4:
 * vim600: fdm=marker fdl=0 fdc=3:
 * }}} */


Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top