がんばって英語で書くブログ
英語勉強中なので、ブログも英語で書こうかと。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GTK+ studying10
This is GTK+ memo. using progress bar.


#include <gtk/gtk.h>

struct progress_data {
GtkWidget *bar;
int counter;
int timer;
};

static inline gchar *make_string(struct progress_data *progress)
{
return g_strdup_printf("count is %d\n", progress->counter++);
}

static gboolean progressbar_timeout(gpointer data)
{
struct progress_data *progress = (struct progress_data *) data;
gdouble new_val;
gchar *p = NULL;

new_val = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(progress->bar)) + 0.01;
if (new_val > 1.0)
new_val = 0.0;

gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress->bar), new_val);

p = make_string(progress);
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress->bar), p);
g_free(p);

if (progress->counter > 100) {
GtkWidget *dlg;

gtk_timeout_remove(progress->timer);
dlg = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
"finished");
gtk_dialog_run(GTK_DIALOG(dlg));

g_free(progress);

gtk_main_quit();
}


return TRUE;
}

void create_window(void)
{
GtkWidget *window;
GtkWidget *vbox1;
GtkWidget *align;
gchar *p;
struct progress_data *progress;

progress = g_malloc(sizeof(struct progress_data));
progress->counter = 0;
progress->timer = 0;

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "progress bar test");

gtk_container_set_border_width(GTK_CONTAINER(window), 5);
g_signal_connect(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);

vbox1 = gtk_vbox_new(FALSE,0);

align = gtk_alignment_new(0.5, 0.5, 0, 0);
gtk_box_pack_start(GTK_BOX(vbox1), align, FALSE, FALSE, 0);
gtk_widget_show(align);

progress->bar = gtk_progress_bar_new();
gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress->bar), GTK_PROGRESS_LEFT_TO_RIGHT);

p = make_string(progress);
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress->bar), p);
g_free(p);

gtk_container_add(GTK_CONTAINER(align), progress->bar);
gtk_widget_show(progress->bar);

progress->timer = gtk_timeout_add(10, progressbar_timeout, progress);

gtk_container_add(GTK_CONTAINER(window), vbox1);
gtk_widget_show(vbox1);

gtk_widget_show(window);

}

int main(int argc, char **argv)
{
gtk_init(&argc, &argv);

create_window();

gtk_main();

return 0;
}


スポンサーサイト

テーマ:英語日記 - ジャンル:学問・文化・芸術

この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://foobar.blog23.fc2.com/tb.php/166-7ec65611
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。