📄 gtkdateedit.c.svn-base
字号:
if (strlen(gtk_entry_get_text (GTK_ENTRY (entry))) == 0) gtk_editable_insert_text (editable, result, count, position); else if (strlen(gtk_entry_get_text (GTK_ENTRY (entry))) == 1) { gint date = atoi (gtk_entry_get_text (GTK_ENTRY (entry))); date = date * 10 + atoi (result); if (date <= 31) gtk_editable_insert_text (editable, result, count, position); else { date = 31; sprintf (result,"%d",date); gtk_entry_set_text (entry, result); } gtk_widget_child_focus (gtk_widget_get_parent (GTK_WIDGET (entry)), GTK_DIR_TAB_BACKWARD); gtk_widget_child_focus (gtk_widget_get_parent (GTK_WIDGET (entry)), GTK_DIR_TAB_BACKWARD); } g_signal_handlers_unblock_by_func (G_OBJECT (editable), G_CALLBACK (day_edit_insert_text_handler), data); } g_signal_stop_emission_by_name (G_OBJECT (editable), "insert_text"); g_free (result); }static gboolean year_key_press_handler (GtkWidget *widget, GdkEventKey *k, gpointer user_data){ if (k->keyval == GDK_Right) { gtk_widget_child_focus (gtk_widget_get_parent (widget), GTK_DIR_TAB_FORWARD); return TRUE; } else if (k->keyval == GDK_Left) { gtk_widget_child_focus (gtk_widget_get_parent (widget), GTK_DIR_TAB_FORWARD); gtk_widget_child_focus (gtk_widget_get_parent (widget), GTK_DIR_TAB_FORWARD); return TRUE; } else return FALSE;}static gboolean mon_key_press_handler (GtkWidget *widget, GdkEventKey *k, gpointer user_data){ if (k->keyval == GDK_Right) { gtk_widget_child_focus (gtk_widget_get_parent (widget), GTK_DIR_TAB_FORWARD); return TRUE; } else if (k->keyval == GDK_Left) { gtk_widget_child_focus (gtk_widget_get_parent (widget), GTK_DIR_TAB_BACKWARD); return TRUE; } else return FALSE;}static gboolean day_key_press_handler (GtkWidget *widget, GdkEventKey *k, gpointer user_data){ if (k->keyval == GDK_Right) { gtk_widget_child_focus (gtk_widget_get_parent (widget), GTK_DIR_TAB_BACKWARD); gtk_widget_child_focus (gtk_widget_get_parent (widget), GTK_DIR_TAB_BACKWARD); return TRUE; } else if (k->keyval == GDK_Left) { gtk_widget_child_focus (gtk_widget_get_parent (widget), GTK_DIR_TAB_BACKWARD); return TRUE; } else return FALSE;}void gtk_date_edit_set_widget_width (GtkDateEdit *entry, guint pad1w, guint entry1w, guint entry2w, guint entry3w, guint pad2w){ gtk_widget_set_size_request (entry->pad1, pad1w, -1); gtk_widget_set_size_request (entry->entry1, entry1w, -1); gtk_widget_set_size_request (entry->entry2, entry2w, -1); gtk_widget_set_size_request (entry->entry3, entry3w, -1); gtk_widget_set_size_request (entry->pad2, pad2w, -1);}static gboolean entry_focus_out_cb (GtkWidget * widget, GdkEventFocus * event, gpointer user_data){ gtk_editable_select_region(GTK_EDITABLE(widget), 0, 0); return FALSE; }static voidgtk_date_edit_init (GtkDateEdit * date_edit){ date_edit->pad1 = gtk_label_new (""); date_edit->entry1 = gtk_entry_new(); date_edit->entry2 = gtk_entry_new (); date_edit->entry3 = gtk_entry_new (); date_edit->eventbox1 = gtk_event_box_new (); date_edit->eventbox2 = gtk_event_box_new (); date_edit->pad2 = gtk_label_new (""); g_signal_connect(G_OBJECT(date_edit->entry1), "insert_text", G_CALLBACK(year_edit_insert_text_handler), NULL); g_signal_connect(G_OBJECT(date_edit->entry2), "insert_text", G_CALLBACK(mon_edit_insert_text_handler), NULL); g_signal_connect(G_OBJECT(date_edit->entry3), "insert_text", G_CALLBACK(day_edit_insert_text_handler), NULL); g_signal_connect(G_OBJECT(date_edit->entry1), "key_press_event", G_CALLBACK(year_key_press_handler), NULL); g_signal_connect(G_OBJECT(date_edit->entry2), "key_press_event", G_CALLBACK(mon_key_press_handler), NULL); g_signal_connect(G_OBJECT(date_edit->entry3), "key_press_event", G_CALLBACK(day_key_press_handler), NULL); g_signal_connect(G_OBJECT(date_edit->entry1), "focus-out-event", G_CALLBACK(entry_focus_out_cb), NULL); g_signal_connect(G_OBJECT(date_edit->entry2), "focus-out-event", G_CALLBACK(entry_focus_out_cb), NULL); g_signal_connect(G_OBJECT(date_edit->entry3), "focus-out-event", G_CALLBACK(entry_focus_out_cb), NULL); gtk_entry_set_has_frame(GTK_ENTRY(date_edit->entry1), FALSE); gtk_entry_set_has_frame(GTK_ENTRY(date_edit->entry2), FALSE); gtk_entry_set_has_frame(GTK_ENTRY(date_edit->entry3), FALSE); gtk_box_pack_start (GTK_BOX (date_edit), date_edit->pad1, FALSE ,FALSE, 0); gtk_box_pack_start (GTK_BOX (date_edit), date_edit->entry1, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (date_edit), date_edit->eventbox1, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (date_edit), date_edit->entry2, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (date_edit), date_edit->eventbox2, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (date_edit), date_edit->entry3, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (date_edit), date_edit->pad2, FALSE ,FALSE, 0); // GTK_WIDGET_SET_FLAGS (date_edit, GTK_CAN_FOCUS); date_edit->label1 = gtk_label_new ("-"); gtk_container_add(GTK_CONTAINER (date_edit->eventbox1), date_edit->label1); date_edit->label2 = gtk_label_new ("-"); gtk_container_add(GTK_CONTAINER (date_edit->eventbox2), date_edit->label2); GdkColor white; white.red = 65535; white.green = 65535; white.blue = 65535; gtk_widget_modify_bg (date_edit->eventbox1, GTK_STATE_NORMAL, &white); gtk_widget_modify_bg (date_edit->eventbox2, GTK_STATE_NORMAL, &white); gtk_entry_set_width_chars (GTK_ENTRY (date_edit->entry1), 4); gtk_entry_set_width_chars (GTK_ENTRY (date_edit->entry2), 2); gtk_entry_set_width_chars (GTK_ENTRY (date_edit->entry3), 2); return;}guint gtk_date_edit_get_year (GtkDateEdit *dateedit){ guint year; year = atoi(gtk_entry_get_text(GTK_ENTRY(dateedit->entry1))); //printf ("%s:year=%d\n", __FUNCTION__, year); return year; }guint gtk_date_edit_get_mon (GtkDateEdit *dateedit){ guint mon; mon = atoi(gtk_entry_get_text(GTK_ENTRY(dateedit->entry2))); //printf ("%s:month=%d\n", __FUNCTION__, mon); return mon; }guint gtk_date_edit_get_day (GtkDateEdit *dateedit){ guint day; day = atoi(gtk_entry_get_text(GTK_ENTRY(dateedit->entry3))); //printf ("%s:day=%d\n", __FUNCTION__, day); return day; }void gtk_date_edit_set_value (GtkDateEdit *dateedit, guint year, guint mon, guint day){ gchar textbuf[5]; sprintf (textbuf, "%d", year); gtk_entry_set_text (GTK_ENTRY (dateedit->entry1), textbuf); if (mon > 9) sprintf (textbuf, "%d", mon); else sprintf (textbuf, "0%d", mon); gtk_entry_set_text (GTK_ENTRY (dateedit->entry2), textbuf); if (day > 9) sprintf (textbuf, "%d", day); else sprintf (textbuf, "0%d", day); gtk_entry_set_text (GTK_ENTRY (dateedit->entry3), textbuf); }GtkWidget *gtk_date_edit_new (void){ return gtk_widget_new (GTK_TYPE_DATE_EDIT, NULL);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -