📄 pack.c
字号:
info->widgets = NULL; info->packer = packer; info->button_top = button_top; info->button_bottom = button_bottom; info->button_left = button_left; info->button_right = button_right; info->button_n = button_n; info->button_nw = button_nw; info->button_ne = button_ne; info->button_e = button_e; info->button_w = button_w; info->button_center = button_center; info->button_s = button_s; info->button_sw = button_sw; info->button_se = button_se; info->button_fillx = button_fillx; info->button_filly = button_filly; info->button_expand = button_expand; add_widget(NULL, (gpointer) info); gtk_widget_show_all(window); gtk_main(); return 0;}void toggle_options (GtkWidget *widget, gpointer data){ Info *info; gint option; GList *list; GtkPackerChild *pchild; gint fillx, filly, expand; info = (Info*) data; option = (gint) gtk_object_get_data(GTK_OBJECT(widget), "option"); pchild = info->pchild; if (pchild == NULL) { abort(); }; fillx = filly = expand = 0; if (GTK_TOGGLE_BUTTON(info->button_fillx)->active) fillx = GTK_FILL_X; if (GTK_TOGGLE_BUTTON(info->button_filly)->active) filly = GTK_FILL_Y; if (GTK_TOGGLE_BUTTON(info->button_expand)->active) expand = GTK_PACK_EXPAND; gtk_packer_configure(GTK_PACKER(info->packer), info->current, pchild->side, pchild->anchor, fillx | filly | expand, pchild->border_width, pchild->pad_x, pchild->pad_y, pchild->i_pad_x, pchild->i_pad_y);}void toggle_anchor (GtkWidget *widget, gpointer data){ Info *info; gint anchor; GList *list; GtkPackerChild *pchild; info = (Info*) data; if (GTK_TOGGLE_BUTTON(widget)->active) { anchor = (gint) gtk_object_get_data(GTK_OBJECT(widget), "anchor"); pchild = info->pchild; if (pchild == NULL) { abort(); }; gtk_packer_configure(GTK_PACKER(info->packer), info->current, pchild->side, anchor, pchild->options, pchild->border_width, pchild->pad_x, pchild->pad_y, pchild->i_pad_x, pchild->i_pad_y); if (info->button_n != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_n),0); gtk_widget_set_sensitive(info->button_n, 1); } if (info->button_nw != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_nw),0); gtk_widget_set_sensitive(info->button_nw, 1); } if (info->button_ne != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_ne),0); gtk_widget_set_sensitive(info->button_ne, 1); } if (info->button_s != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_s),0); gtk_widget_set_sensitive(info->button_s, 1); } if (info->button_sw != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_sw),0); gtk_widget_set_sensitive(info->button_sw, 1); } if (info->button_se != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_se),0); gtk_widget_set_sensitive(info->button_se, 1); } if (info->button_e != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_e),0); gtk_widget_set_sensitive(info->button_e, 1); } if (info->button_w != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_w),0); gtk_widget_set_sensitive(info->button_w, 1); } if (info->button_center != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_center),0); gtk_widget_set_sensitive(info->button_center, 1); } gtk_widget_set_sensitive(widget, 0); }}void toggle_side (GtkWidget *widget, gpointer data){ Info *info; gint side; GList *list; GtkPackerChild *pchild; info = (Info*) data; if (GTK_TOGGLE_BUTTON(widget)->active) { side = (gint) gtk_object_get_data(GTK_OBJECT(widget), "side"); pchild = info->pchild; if (pchild == NULL) { abort(); }; gtk_packer_configure(GTK_PACKER(info->packer), info->current, side, pchild->anchor, pchild->options, pchild->border_width, pchild->pad_x, pchild->pad_y, pchild->i_pad_x, pchild->i_pad_y); if (info->button_top != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_top),0); gtk_widget_set_sensitive(info->button_top, 1); } if (info->button_bottom != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_bottom),0); gtk_widget_set_sensitive(info->button_bottom, 1); } if (info->button_left != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_left),0); gtk_widget_set_sensitive(info->button_left, 1); } if (info->button_right != widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_right),0); gtk_widget_set_sensitive(info->button_right, 1); } gtk_widget_set_sensitive(widget, 0); }}voidset_widget (GtkWidget *w, gpointer data) { Info *info; GList *list; GtkWidget *widget; GtkPackerChild *pchild; gint options; if (GTK_TOGGLE_BUTTON(w)->active) { info = (Info*) data; info->current = w; pchild = NULL; list = g_list_first(GTK_PACKER(info->packer)->children); while (list) { if (((GtkPackerChild*)(list->data))->widget == info->current) { pchild = (GtkPackerChild*)(list->data); break; } list = g_list_next(list); } if (pchild == NULL) { abort(); }; info->pchild = pchild; switch (pchild->side) { case GTK_SIDE_TOP: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_top),1); break; case GTK_SIDE_BOTTOM: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_bottom),1); break; case GTK_SIDE_LEFT: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_left),1); break; case GTK_SIDE_RIGHT: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_right),1); break; default: printf("foo... side == %d\n", pchild->side); }; switch (pchild->anchor) { case GTK_ANCHOR_N: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_n),1); break; case GTK_ANCHOR_NW: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_nw),1); break; case GTK_ANCHOR_NE: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_ne),1); break; case GTK_ANCHOR_S: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_s),1); break; case GTK_ANCHOR_SW: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_sw),1); break; case GTK_ANCHOR_SE: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_se),1); break; case GTK_ANCHOR_W: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_w),1); break; case GTK_ANCHOR_E: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_e),1); break; case GTK_ANCHOR_CENTER: gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_center),1); break; default: }; options = pchild->options; if (options & GTK_PACK_EXPAND) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_expand),1); } else { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_expand),0); } if (options & GTK_FILL_X) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_fillx),1); } else { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_fillx),0); } if (options & GTK_FILL_Y) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_filly),1); } else { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(info->button_filly),0); } gtk_widget_set_sensitive(w, 0); list = g_list_first(info->widgets); while (list) { widget = (GtkWidget*)(list->data); if (widget != info->current) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(widget),0); gtk_widget_set_sensitive(widget, 1); } list = g_list_next(list); } }}void add_widget (GtkWidget *w, gpointer data){ static gint n = 0; GtkPacker *packer; GtkWidget *widget; gchar str[255]; Info *info; info = (Info*) data; packer = GTK_PACKER(info->packer); sprintf(str, "%d", n); widget = gtk_toggle_button_new_with_label(str); gtk_widget_set_usize(widget, 50, 50); gtk_container_add(GTK_CONTAINER(packer), widget); gtk_widget_show(widget); gtk_signal_connect (GTK_OBJECT (widget), "toggled", GTK_SIGNAL_FUNC (set_widget), (gpointer) info); info->widgets = g_list_append(info->widgets, (gpointer) widget); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(widget),1); set_widget(widget, info); n++;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -