static void gtk_vscrollbutton_init(GtkVScrollbutton *scrollbutton) { GtkWidget *arrow; if (!hand_cursor) hand_cursor = gdk_cursor_new(GDK_HAND2); scrollbutton->upbutton = gtk_event_box_new(); scrollbutton->downbutton = gtk_event_box_new(); arrow = gtk_arrow_new(GTK_ARROW_UP, GTK_SHADOW_NONE); gtk_widget_show(arrow); gtk_container_add(GTK_CONTAINER(scrollbutton->upbutton), arrow); gtk_widget_set_size_request(scrollbutton->upbutton, -1, 16); arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE); gtk_widget_show(arrow); gtk_container_add(GTK_CONTAINER(scrollbutton->downbutton), arrow); gtk_widget_set_size_request(scrollbutton->downbutton, -1, 16); gtkut_widget_set_can_focus(scrollbutton->upbutton, FALSE); gtkut_widget_set_can_focus(scrollbutton->downbutton, FALSE); gtk_widget_show(scrollbutton->downbutton); gtk_widget_show(scrollbutton->upbutton); g_signal_connect(G_OBJECT(scrollbutton->upbutton), "motion-notify-event", G_CALLBACK(vscroll_visi_notify), NULL); g_signal_connect(G_OBJECT(scrollbutton->upbutton), "leave-notify-event", G_CALLBACK(vscroll_leave_notify), NULL); g_signal_connect(G_OBJECT(scrollbutton->upbutton), "enter-notify-event", G_CALLBACK(vscroll_enter_notify), NULL); g_signal_connect(G_OBJECT(scrollbutton->downbutton), "motion-notify-event", G_CALLBACK(vscroll_visi_notify), NULL); g_signal_connect(G_OBJECT(scrollbutton->downbutton), "leave-notify-event", G_CALLBACK(vscroll_leave_notify), NULL); g_signal_connect(G_OBJECT(scrollbutton->downbutton), "enter-notify-event", G_CALLBACK(vscroll_enter_notify), NULL); g_signal_connect(G_OBJECT(scrollbutton->upbutton), "button_press_event", G_CALLBACK(gtk_vscrollbutton_button_press), scrollbutton); g_signal_connect(G_OBJECT(scrollbutton->downbutton), "button_press_event", G_CALLBACK(gtk_vscrollbutton_button_press), scrollbutton); g_signal_connect(G_OBJECT(scrollbutton->upbutton), "button_release_event", G_CALLBACK (gtk_vscrollbutton_button_release), scrollbutton); g_signal_connect(G_OBJECT(scrollbutton->downbutton), "button_release_event", G_CALLBACK (gtk_vscrollbutton_button_release), scrollbutton); gtk_box_pack_start(GTK_BOX(&scrollbutton->vbox), scrollbutton->upbutton, TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(&scrollbutton->vbox), scrollbutton->downbutton, TRUE, TRUE, 0); scrollbutton->timer = 0; }
void addressbook_edit_person_page_attrib_ldap(PersonEditDlg *dialog, gint pageNum, gchar *pageLbl) { GtkWidget *combo_box; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *vboxl; GtkWidget *vboxb; GtkWidget *vbuttonbox; GtkWidget *buttonDel; GtkWidget *buttonMod; GtkWidget *buttonAdd; GtkWidget *table; GtkWidget *label; GtkWidget *clist_swin; GtkWidget *clist; GtkWidget *entry_value; gint top; personEditDlg = dialog; gchar *titles[ATTRIB_N_COLS]; gint i; titles[ATTRIB_COL_NAME] = N_("Name"); titles[ATTRIB_COL_VALUE] = N_("Value"); vbox = gtk_vbox_new(FALSE, 8); gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(personEditDlg->notebook), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), BORDER_WIDTH); label = gtk_label_new_with_mnemonic(pageLbl); gtk_widget_show(label); gtk_notebook_set_tab_label( GTK_NOTEBOOK(personEditDlg->notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(personEditDlg->notebook), pageNum), label); /* Split into two areas */ hbox = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(vbox), hbox); /* Attribute list */ vboxl = gtk_vbox_new(FALSE, 4); gtk_container_add(GTK_CONTAINER(hbox), vboxl); gtk_container_set_border_width(GTK_CONTAINER(vboxl), 4); clist_swin = gtk_scrolled_window_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(vboxl), clist_swin); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clist_swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); clist = gtk_cmclist_new_with_titles(ATTRIB_N_COLS, titles); gtk_container_add(GTK_CONTAINER(clist_swin), clist); gtk_cmclist_set_selection_mode(GTK_CMCLIST(clist), GTK_SELECTION_BROWSE); gtk_cmclist_set_column_width(GTK_CMCLIST(clist), ATTRIB_COL_NAME, ATTRIB_COL_WIDTH_NAME); gtk_cmclist_set_column_width(GTK_CMCLIST(clist), ATTRIB_COL_VALUE, ATTRIB_COL_WIDTH_VALUE); gtk_cmclist_set_compare_func(GTK_CMCLIST(clist), edit_person_attrib_compare_func); gtk_cmclist_set_auto_sort(GTK_CMCLIST(clist), TRUE); for (i = 0; i < ATTRIB_N_COLS; i++) gtkut_widget_set_can_focus(GTK_CMCLIST(clist)->column[i].button, FALSE); /* Data entry area */ table = gtk_table_new(4, 2, FALSE); gtk_box_pack_start(GTK_BOX(vboxl), table, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(table), 4); gtk_table_set_row_spacings(GTK_TABLE(table), 4); gtk_table_set_col_spacings(GTK_TABLE(table), 4); /* First row */ top = 0; label = gtk_label_new(N_("Name")); gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gchar **attribute = (gchar **) ATTRIBUTE; combo_box = gtk_combo_box_new_text(); while (*attribute) { if (!strcmp(*attribute, "jpegPhoto")) { attribute++; continue; } gtk_combo_box_append_text(GTK_COMBO_BOX(combo_box), *attribute++); } gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), 0); gtk_table_attach(GTK_TABLE(table), combo_box, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); /* Next row */ ++top; label = gtk_label_new(N_("Value")); gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); entry_value = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), entry_value, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); /* Button box */ vboxb = gtk_vbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(hbox), vboxb, FALSE, FALSE, 2); vbuttonbox = gtk_vbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(vbuttonbox), GTK_BUTTONBOX_START); gtk_box_set_spacing(GTK_BOX(vbuttonbox), 8); gtk_container_set_border_width(GTK_CONTAINER(vbuttonbox), 4); gtk_container_add(GTK_CONTAINER(vboxb), vbuttonbox); /* Buttons */ buttonDel = gtk_button_new_from_stock(GTK_STOCK_DELETE); gtk_container_add(GTK_CONTAINER(vbuttonbox), buttonDel); buttonMod = gtk_button_new_from_stock(GTK_STOCK_SAVE); gtk_container_add(GTK_CONTAINER(vbuttonbox), buttonMod); buttonAdd = gtk_button_new_from_stock(GTK_STOCK_ADD); gtk_container_add(GTK_CONTAINER(vbuttonbox), buttonAdd); gtk_widget_set_sensitive(buttonDel,FALSE); gtk_widget_set_sensitive(buttonMod,FALSE); gtk_widget_set_sensitive(buttonAdd,FALSE); gtk_widget_show_all(vbox); /* Event handlers */ g_signal_connect(G_OBJECT(clist), "select_row", G_CALLBACK( edit_person_attrib_list_selected), NULL); g_signal_connect(G_OBJECT(buttonDel), "clicked", G_CALLBACK(edit_person_attrib_delete), NULL); g_signal_connect(G_OBJECT(buttonMod), "clicked", G_CALLBACK(edit_person_attrib_modify), NULL); g_signal_connect(G_OBJECT(buttonAdd), "clicked", G_CALLBACK(edit_person_attrib_add), NULL); g_signal_connect(G_OBJECT(combo_box), "changed", G_CALLBACK(edit_person_entry_att_changed), NULL); g_signal_connect(G_OBJECT(entry_value), "key_press_event", G_CALLBACK(edit_person_entry_att_pressed), NULL); g_signal_connect(G_OBJECT(combo_box), "changed", G_CALLBACK(edit_person_combo_box_changed), clist); personEditDlg->clist_attrib = clist; personEditDlg->entry_atname = combo_box; personEditDlg->entry_atvalue = entry_value; personEditDlg->attrib_add = buttonAdd; personEditDlg->attrib_del = buttonDel; personEditDlg->attrib_mod = buttonMod; }
/** * Format notebook fields page. * \param pageNum Page (tab) number. * \param pageLbl Page (tab) label. */ static void imp_ldif_page_fields( gint pageNum, gchar *pageLbl ) { GtkWidget *vbox; GtkWidget *vboxt; GtkWidget *vboxb; GtkWidget *table; GtkWidget *label; GtkWidget *clist_swin; GtkWidget *clist_field; GtkWidget *entryField; GtkWidget *entryAttrib; GtkWidget *checkSelect; GtkWidget *btnModify; GtkWidget *eventBox; gint top; gchar *titles[ FIELDS_N_COLS ]; gint i; titles[ FIELD_COL_RESERVED ] = _("R"); titles[ FIELD_COL_SELECT ] = _("S"); titles[ FIELD_COL_FIELD ] = _("LDIF Field Name"); titles[ FIELD_COL_ATTRIB ] = _("Attribute Name"); vbox = gtk_vbox_new(FALSE, 8); gtk_container_add( GTK_CONTAINER( impldif_dlg.notebook ), vbox ); gtk_container_set_border_width( GTK_CONTAINER (vbox), 4 ); label = gtk_label_new( pageLbl ); gtk_widget_show( label ); gtk_notebook_set_tab_label( GTK_NOTEBOOK( impldif_dlg.notebook ), gtk_notebook_get_nth_page(GTK_NOTEBOOK( impldif_dlg.notebook ), pageNum ), label ); /* Upper area - Field list */ vboxt = gtk_vbox_new( FALSE, 4 ); gtk_container_add( GTK_CONTAINER( vbox ), vboxt ); clist_swin = gtk_scrolled_window_new( NULL, NULL ); gtk_container_add( GTK_CONTAINER(vboxt), clist_swin ); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clist_swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); clist_field = gtk_cmclist_new_with_titles( FIELDS_N_COLS, titles ); gtk_container_add( GTK_CONTAINER(clist_swin), clist_field ); gtk_cmclist_set_selection_mode( GTK_CMCLIST(clist_field), GTK_SELECTION_BROWSE ); gtk_cmclist_set_column_width( GTK_CMCLIST(clist_field), FIELD_COL_RESERVED, FIELDS_COL_WIDTH_RESERVED ); gtk_cmclist_set_column_width( GTK_CMCLIST(clist_field), FIELD_COL_SELECT, FIELDS_COL_WIDTH_SELECT ); gtk_cmclist_set_column_width( GTK_CMCLIST(clist_field), FIELD_COL_FIELD, FIELDS_COL_WIDTH_FIELD ); gtk_cmclist_set_column_width( GTK_CMCLIST(clist_field), FIELD_COL_ATTRIB, FIELDS_COL_WIDTH_ATTRIB ); /* Remove focus capability for column headers */ for( i = 0; i < FIELDS_N_COLS; i++ ) { gtkut_widget_set_can_focus( GTK_CMCLIST(clist_field)->column[i].button, FALSE); } /* Lower area - Edit area */ vboxb = gtk_vbox_new( FALSE, 4 ); gtk_box_pack_end(GTK_BOX(vbox), vboxb, FALSE, FALSE, 2); /* Data entry area */ table = gtk_table_new( 3, 3, FALSE); gtk_box_pack_start(GTK_BOX(vboxb), table, FALSE, FALSE, 0); gtk_table_set_row_spacings(GTK_TABLE(table), 4); gtk_table_set_col_spacings(GTK_TABLE(table), 4); /* First row */ top = 0; label = gtk_label_new(_("LDIF Field")); gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); entryField = gtk_label_new( "" ); gtk_misc_set_alignment(GTK_MISC(entryField), 0.01, 0.5); gtk_table_attach(GTK_TABLE(table), entryField, 1, 3, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); /* Second row */ ++top; label = gtk_label_new(_("Attribute")); /* * Use an event box to attach some help in the form of a tooltip. * Tried this for the clist but it looked bad. */ eventBox = gtk_event_box_new(); gtk_container_add( GTK_CONTAINER(eventBox), label ); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_table_attach(GTK_TABLE(table), eventBox, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0); CLAWS_SET_TIP(eventBox, _( "Choose the LDIF field that will be renamed or selected " \ "for import in the list above. Reserved fields (marked " \ "with a tick in the \"R\" column), are automatically " \ "imported and cannot be renamed. A single click in the " \ "Select (\"S\") column will select the field for import " \ "with a tick. A single click anywhere in the row will " \ "select that field for rename in the input area below " \ "the list. A double click anywhere in the row will also " \ "select the field for import.")); entryAttrib = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), entryAttrib, 1, 3, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); CLAWS_SET_TIP(entryAttrib, _( "The LDIF field can be renamed to the User Attribute name." )); /* Next row */ ++top; checkSelect = gtk_check_button_new_with_label( _( "Select for Import" ) ); gtk_table_attach(GTK_TABLE(table), checkSelect, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); CLAWS_SET_TIP(checkSelect, _( "Select the LDIF field for import into the address book." )); btnModify = gtk_button_new_with_label( _(" Modify ")); gtk_table_attach(GTK_TABLE(table), btnModify, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0); CLAWS_SET_TIP(btnModify, _( "This button will update the list above with the data supplied." )); gtk_widget_show_all(vbox); /* Event handlers */ g_signal_connect( G_OBJECT(clist_field), "select_row", G_CALLBACK(imp_ldif_field_list_selected), NULL ); g_signal_connect( G_OBJECT(clist_field), "button_press_event", G_CALLBACK(imp_ldif_field_list_toggle), NULL ); g_signal_connect( G_OBJECT(btnModify), "clicked", G_CALLBACK(imp_ldif_modify_pressed), NULL ); impldif_dlg.clist_field = clist_field; impldif_dlg.entryField = entryField; impldif_dlg.entryAttrib = entryAttrib; impldif_dlg.checkSelect = checkSelect; impldif_dlg.btnModify = btnModify; }
HeaderView *headerview_create(void) { HeaderView *headerview; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *hbox3; GtkWidget *from_header_label; GtkWidget *from_body_label; GtkWidget *to_header_label; GtkWidget *to_body_label; GtkWidget *ng_header_label; GtkWidget *ng_body_label; GtkWidget *subject_header_label; GtkWidget *subject_body_label; GtkWidget *tags_header_label; GtkWidget *tags_body_label; debug_print("Creating header view...\n"); headerview = g_new0(HeaderView, 1); hbox = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), 2); vbox = gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); hbox1 = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 0); hbox2 = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0); hbox3 = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(vbox), hbox3, FALSE, FALSE, 0); from_header_label = gtk_label_new(prefs_common_translated_header_name("From:")); from_body_label = gtk_label_new(""); to_header_label = gtk_label_new(prefs_common_translated_header_name("To:")); to_body_label = gtk_label_new(""); ng_header_label = gtk_label_new(prefs_common_translated_header_name("Newsgroups:")); ng_body_label = gtk_label_new(""); subject_header_label = gtk_label_new(prefs_common_translated_header_name("Subject:")); subject_body_label = gtk_label_new(""); tags_header_label = gtk_label_new(_("Tags:")); tags_body_label = gtk_label_new(""); gtk_label_set_selectable(GTK_LABEL(from_body_label), TRUE); gtk_label_set_selectable(GTK_LABEL(to_body_label), TRUE); gtk_label_set_selectable(GTK_LABEL(ng_body_label), TRUE); gtk_label_set_selectable(GTK_LABEL(subject_body_label), TRUE); gtk_label_set_selectable(GTK_LABEL(tags_body_label), TRUE); gtkut_widget_set_can_focus(from_body_label, FALSE); gtkut_widget_set_can_focus(to_body_label, FALSE); gtkut_widget_set_can_focus(ng_body_label, FALSE); gtkut_widget_set_can_focus(subject_body_label, FALSE); gtkut_widget_set_can_focus(tags_body_label, FALSE); gtk_box_pack_start(GTK_BOX(hbox1), from_header_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox1), from_body_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox1), to_header_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox1), to_body_label, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox1), ng_header_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox1), ng_body_label, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox2), subject_header_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox2), subject_body_label, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox3), tags_header_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox3), tags_body_label, TRUE, TRUE, 0); gtk_misc_set_alignment(GTK_MISC(to_body_label), 0, 0.5); gtk_misc_set_alignment(GTK_MISC(ng_body_label), 0, 0.5); gtk_misc_set_alignment(GTK_MISC(subject_body_label), 0, 0.5); gtk_misc_set_alignment(GTK_MISC(tags_body_label), 0, 0.5); gtk_label_set_ellipsize(GTK_LABEL(to_body_label), PANGO_ELLIPSIZE_END); gtk_label_set_ellipsize(GTK_LABEL(ng_body_label), PANGO_ELLIPSIZE_END); gtk_label_set_ellipsize(GTK_LABEL(subject_body_label), PANGO_ELLIPSIZE_END); gtk_label_set_ellipsize(GTK_LABEL(tags_body_label), PANGO_ELLIPSIZE_END); headerview->hbox = hbox; headerview->from_header_label = from_header_label; headerview->from_body_label = from_body_label; headerview->to_header_label = to_header_label; headerview->to_body_label = to_body_label; headerview->ng_header_label = ng_header_label; headerview->ng_body_label = ng_body_label; headerview->subject_header_label = subject_header_label; headerview->subject_body_label = subject_body_label; headerview->tags_header_label = tags_header_label; headerview->tags_body_label = tags_body_label; headerview->image = NULL; gtk_widget_show_all(hbox); return headerview; }