static void click_column(GtkCList *clist, int column) { if (column != clist->sort_column) { gtk_clist_set_sort_type(clist, GTK_SORT_ASCENDING); gtk_clist_set_sort_column(clist, column); } else { if (clist->sort_type == GTK_SORT_ASCENDING) gtk_clist_set_sort_type(clist, GTK_SORT_DESCENDING); else gtk_clist_set_sort_type(clist, GTK_SORT_ASCENDING); } gtk_clist_sort(clist); }
void clist_set_sort_column (GtkCList *clist, int column, struct clist_def *cldef) { if (column == clist->sort_column) { if (clist->sort_type == GTK_SORT_DESCENDING) { cldef->cols[column].current_sort_mode = ++cldef->cols[column].current_sort_mode%DIMOF(cldef->cols[column].sort_mode); if (cldef->cols[column].sort_mode[cldef->cols[column].current_sort_mode] == -1) cldef->cols[column].current_sort_mode = 0; } gtk_clist_set_sort_type (clist, GTK_SORT_DESCENDING + GTK_SORT_ASCENDING - clist->sort_type); } else { cldef->cols[column].current_sort_mode = 0; clist_column_set_title (clist, cldef, FALSE); gtk_clist_set_sort_column (clist, column); } debug (3, "%d %hhd", column, cldef->cols[column].current_sort_mode); clist_column_set_title (clist, cldef, TRUE); gtk_clist_sort (clist); if (clist == server_clist) { server_clist_selection_visible (); } }
GtkWidget *create_cwidget (GtkWidget *scrollwin, struct clist_def *cldef) { GtkWidget *alignment; GtkWidget *label; GtkWidget *clist; char buf[256]; int i; switch (cldef->type) { case CWIDGET_CLIST: clist = gtk_clist_new (cldef->columns); break; case CWIDGET_CTREE: clist = gtk_ctree_new (cldef->columns, 0); gtk_ctree_set_line_style (GTK_CTREE (clist), GTK_CTREE_LINES_NONE); gtk_ctree_set_expander_style (GTK_CTREE (clist), GTK_CTREE_EXPANDER_TRIANGLE); gtk_ctree_set_indent (GTK_CTREE (clist), 10); break; default: return NULL; } gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); GTK_CLIST_SET_FLAG (GTK_CLIST (clist), CLIST_SHOW_TITLES); gtk_container_add (GTK_CONTAINER (scrollwin), clist); gtk_clist_set_selection_mode (GTK_CLIST (clist), cldef->mode); for (i = 0; i < cldef->columns; i++) { g_snprintf (buf, 256, "/" CONFIG_FILE "/%s Geometry/%s=%d", cldef->name, cldef->cols[i].name, cldef->cols[i].width); gtk_clist_set_column_width (GTK_CLIST (clist), i, config_get_int (buf)); if (cldef->cols[i].justify != GTK_JUSTIFY_LEFT) { gtk_clist_set_column_justification (GTK_CLIST (clist), i, cldef->cols[i].justify); } alignment = gtk_alignment_new (0.0, 0.5, 0.0, 0.0); label = gtk_label_new (_(cldef->cols[i].name)); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); gtk_container_add (GTK_CONTAINER (alignment), label); gtk_widget_show (label); cldef->cols[i].widget = label; gtk_clist_set_column_widget (GTK_CLIST (clist), i, alignment); gtk_widget_show (alignment); } gtk_clist_set_sort_column (GTK_CLIST (clist), cldef->sort_column); gtk_clist_set_sort_type (GTK_CLIST (clist), cldef->sort_type); clist_column_set_title (GTK_CLIST (clist), cldef, TRUE); return clist; }
void on_mailbox_click_column (GtkCList * clist, gint column, gpointer UNUSED(user_data)) { if ((sort & (~SORT_DIRECTION)) == column) sort ^= SORT_DIRECTION; else sort = column | (sort & SORT_DIRECTION); gtk_clist_set_sort_column (clist, column); gtk_clist_set_sort_type (clist, (sort & SORT_DIRECTION) ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING); gtk_clist_sort (clist); }
void search_stats_gui_init(void) { GtkCList *clist = GTK_CLIST(gui_main_window_lookup("clist_search_stats")); /* set up the clist to be sorted properly */ gtk_clist_set_sort_column(clist, c_st_total); gtk_clist_set_sort_type(clist, GTK_SORT_DESCENDING); clist_restore_widths(clist, PROP_SEARCH_STATS_COL_WIDTHS); stat_hash = g_hash_table_new(g_str_hash, g_str_equal); main_gui_add_timer(search_stats_gui_timer); }
gboolean widget_table_click_column_callback(GtkWidget *widget, gint column, variable *var) { gint last_column = -1; gint sort_type; #ifdef DEBUG_TRANSITS fprintf(stderr, "%s(): Entering.\n", __func__); #endif #if !GTK_CHECK_VERSION(3,0,0) /* gtk3: Deprecated in gtk2 and now gone */ /* Set sort column to the clicked column */ gtk_clist_set_sort_column(GTK_CLIST(widget), column); /* Get last recorded column if it exists */ if (g_object_get_data(G_OBJECT(widget), "_last-column") != NULL) { last_column = (gint)g_object_get_data(G_OBJECT(widget), "_last-column"); last_column--; } #ifdef DEBUG_CONTENT fprintf(stderr, "%s(): column=%i last-column=%i\n", __func__, column, last_column); #endif /* If last recorded column matches column then flip sort direction */ if (last_column == column) { /* Get sort-type (direction) and flip it */ g_object_get(G_OBJECT(widget), "sort-type", &sort_type, NULL); sort_type = 1 - sort_type; gtk_clist_set_sort_type(GTK_CLIST(widget), sort_type); } /* Store "last-column" as a piece of widget data (recreated if exists) */ /* Warning: Storing zero kills the piece of data so we have to * maintain it with +1 on set, -1 on get */ column++; g_object_set_data(G_OBJECT(widget), "_last-column", (gpointer)column); /* Sit back and be amazed */ gtk_clist_sort(GTK_CLIST(widget)); #endif #ifdef DEBUG_TRANSITS fprintf(stderr, "%s(): Exiting.\n", __func__); #endif return TRUE; }
static void clist_click_column(GtkCList *clist, gint column, gpointer data) { if (ui_layout.sortcol == column) { ui_layout.sortdir = -(ui_layout.sortdir); } else { ui_layout.sortcol = column; ui_layout.sortdir = 1; } gtk_clist_set_sort_column(clist, ui_layout.sortcol); gtk_clist_set_sort_type(clist, ui_layout.sortdir == 1 ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING); if (column == 1) { gtk_clist_set_compare_func(clist, statuscmp); } else { /* Just use the default compare function for the rest of the * columns */ gtk_clist_set_compare_func(clist, NULL); } gtk_clist_sort(clist); }
void on_bt_dbedit_clicked (GtkButton *button, gpointer user_data) { GtkWidget *widget; char filename[256], inbuf[50], *bp, *row[5]; FILE * fd; widget=lookup_widget( dialog_dbedit, "clist_satdb" ); gtk_clist_clear(GTK_CLIST(widget)); gtk_clist_set_sort_type(GTK_CLIST(widget),GTK_SORT_ASCENDING); gtk_clist_set_auto_sort(GTK_CLIST(widget),TRUE); strncpy(filename,getenv("HOME"),256); strcat(filename,"/.gsat.db"); if((fd=fopen( filename, "r" ))==NULL) { /* If db file doesn't exist in HOME, copy it from global sat db */ copy_sat_db(filename); if((fd=fopen( filename, "r" ))==NULL) { error_dialog("ERROR: Can't open satellite database file"); return; } } while(fgets(inbuf, 50, fd)) { bp=inbuf; row[0]=strsep(&bp,":\n"); row[1]=strsep(&bp,":\n"); row[2]=strsep(&bp,":\n"); row[3]=strsep(&bp,":\n"); row[4]=strsep(&bp,":\n"); gtk_clist_append(GTK_CLIST(widget), row); } fclose( fd ); gtk_widget_show(dialog_dbedit); widget=lookup_widget( mainwindow, "bt_dbedit" ); gtk_widget_set_sensitive( widget, FALSE ); }
/*********************************************************************** * Create * ***********************************************************************/ GtkWidget *widget_table_create( AttributeSet *Attr, tag_attr *attr, gint Type) { GList *element; GtkWidget *widget; gchar *value; gint column; gint sort_function; list_t *sliced; #ifdef DEBUG_TRANSITS fprintf(stderr, "%s(): Entering.\n", __func__); #endif #if !GTK_CHECK_VERSION(3,0,0) /* gtk3: Deprecated in gtk2 and now gone */ if (attributeset_is_avail(Attr, ATTR_LABEL)) { sliced = linecutter(g_strdup(attributeset_get_first( &element, Attr, ATTR_LABEL)), '|'); widget = gtk_clist_new_with_titles(sliced->n_lines, sliced->line); if (sliced) list_t_free(sliced); /* Free linecutter memory */ } else { widget = gtk_clist_new(1); /* 1 column */ } if (attr) { /* Get sort-function (custom) */ if ((value = get_tag_attribute(attr, "sort-function"))) { sort_function = atoi(value); if (sort_function == 1) { gtk_clist_set_compare_func(GTK_CLIST(widget), widget_table_natcmp); } else if (sort_function == 2) { gtk_clist_set_compare_func(GTK_CLIST(widget), widget_table_natcasecmp); } } /* Get sort-type (auto-sort will require this preset) */ if ((value = get_tag_attribute(attr, "sort-type"))) { gtk_clist_set_sort_type(GTK_CLIST(widget), atoi(value)); } /* Get sort-column (custom) */ if ((value = get_tag_attribute(attr, "sort-column"))) { gtk_clist_set_sort_column(GTK_CLIST(widget), atoi(value)); } /* Get auto-sort (custom) */ if ((value = get_tag_attribute(attr, "auto-sort")) && ((strcasecmp(value, "true") == 0) || (strcasecmp(value, "yes") == 0) || (atoi(value) == 1))) { gtk_clist_set_auto_sort(GTK_CLIST(widget), TRUE); } else { gtk_clist_set_auto_sort(GTK_CLIST(widget), FALSE); } /* Get column-header-active (custom) */ if ((value = get_tag_attribute(attr, "column-header-active"))) { sliced = linecutter(g_strdup(value), '|'); for (column = 0; column < sliced->n_lines; column++) { if ((strcasecmp(sliced->line[column], "true") == 0) || (strcasecmp(sliced->line[column], "yes") == 0) || (atoi(sliced->line[column]) == 1)) { gtk_clist_column_title_active(GTK_CLIST(widget), column); } else { gtk_clist_column_title_passive(GTK_CLIST(widget), column); } } if (sliced) list_t_free(sliced); /* Free linecutter memory */ } /* Get column-visible (custom) */ if ((value = get_tag_attribute(attr, "column-visible"))) { sliced = linecutter(g_strdup(value), '|'); for (column = 0; column < sliced->n_lines; column++) { if ((strcasecmp(sliced->line[column], "true") == 0) || (strcasecmp(sliced->line[column], "yes") == 0) || (atoi(sliced->line[column]) == 1)) { gtk_clist_set_column_visibility(GTK_CLIST(widget), column, TRUE); } else { gtk_clist_set_column_visibility(GTK_CLIST(widget), column, FALSE); } } if (sliced) list_t_free(sliced); /* Free linecutter memory */ } } #else fprintf(stderr, "%s(): The table (GtkCList) widget has been removed from GTK+ 3 and tree is recommended as a replacement.\n", __func__); exit(EXIT_FAILURE); #endif #ifdef DEBUG_TRANSITS fprintf(stderr, "%s(): Exiting.\n", __func__); #endif return widget; }
void GUI_CreateSpeedDialWindow(void) { int nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]); GtkItemFactory *item_factory; GtkAccelGroup *accel_group; SortColumn *sColumn; GtkWidget *menubar; GtkWidget *main_vbox; GtkWidget *toolbar; GtkWidget *clistScrolledWindow; register gint i; gchar *titles[3] = { _("Key"), _("Name"), _("Number") }; InitMainMenu(); GUI_SpeedDialWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_wmclass(GTK_WINDOW(GUI_SpeedDialWindow), "SpeedDialWindow", "Xgnokii"); gtk_window_set_title(GTK_WINDOW(GUI_SpeedDialWindow), _("Speed Dial")); gtk_widget_set_usize(GTK_WIDGET(GUI_SpeedDialWindow), 350, 220); //gtk_container_set_border_width (GTK_CONTAINER (GUI_SpeedDialWindow), 10); gtk_signal_connect(GTK_OBJECT(GUI_SpeedDialWindow), "delete_event", GTK_SIGNAL_FUNC(DeleteEvent), NULL); gtk_widget_realize(GUI_SpeedDialWindow); accel_group = gtk_accel_group_new(); item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accel_group); gtk_item_factory_create_items(item_factory, nmenu_items, menu_items, NULL); gtk_window_add_accel_group(GTK_WINDOW(GUI_SpeedDialWindow), accel_group); /* Finally, return the actual menu bar created by the item factory. */ menubar = gtk_item_factory_get_widget(item_factory, "<main>"); main_vbox = gtk_vbox_new(FALSE, 1); gtk_container_border_width(GTK_CONTAINER(main_vbox), 1); gtk_container_add(GTK_CONTAINER(GUI_SpeedDialWindow), main_vbox); gtk_widget_show(main_vbox); gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, FALSE, 0); gtk_widget_show(menubar); /* Create the toolbar */ toolbar = gtk_toolbar_new(); gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS); gtk_toolbar_set_orientation(GTK_TOOLBAR(toolbar), GTK_ORIENTATION_HORIZONTAL); gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, _("Read from phone"), NULL, NewPixmap(Read_xpm, GUI_SpeedDialWindow->window, &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]), (GtkSignalFunc) ReadSpeedDial, NULL); gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, _("Save to phone"), NULL, NewPixmap(Send_xpm, GUI_SpeedDialWindow->window, &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]), (GtkSignalFunc) SaveSpeedDial, NULL); gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, _("Import from file"), NULL, NewPixmap(Open_xpm, GUI_SpeedDialWindow->window, &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]), (GtkSignalFunc) ImportSpeedDial, NULL); gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, _("Export to file"), NULL, NewPixmap(Save_xpm, GUI_SpeedDialWindow->window, &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]), (GtkSignalFunc) ExportSpeedDial, NULL); gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), NULL, _("Edit entry"), NULL, NewPixmap(Edit_xpm, GUI_SpeedDialWindow->window, &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]), (GtkSignalFunc) EditKey, NULL); gtk_box_pack_start(GTK_BOX(main_vbox), toolbar, FALSE, FALSE, 0); gtk_widget_show(toolbar); clist = gtk_clist_new_with_titles(3, titles); gtk_clist_set_shadow_type(GTK_CLIST(clist), GTK_SHADOW_OUT); // gtk_clist_set_compare_func (GTK_CLIST (clist), CListCompareFunc); gtk_clist_set_sort_column(GTK_CLIST(clist), 0); gtk_clist_set_sort_type(GTK_CLIST(clist), GTK_SORT_ASCENDING); gtk_clist_set_auto_sort(GTK_CLIST(clist), FALSE); //gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED); gtk_clist_set_column_width(GTK_CLIST(clist), 1, 150); gtk_clist_set_column_width(GTK_CLIST(clist), 2, 115); gtk_clist_set_column_justification(GTK_CLIST(clist), 0, GTK_JUSTIFY_CENTER); // gtk_clist_set_column_visibility (GTK_CLIST (clist), 3, xgnokiiConfig.callerGroupsSupported); for (i = 0; i < 3; i++) { if ((sColumn = g_malloc(sizeof(SortColumn))) == NULL) { g_print(_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__); gtk_main_quit(); } sColumn->clist = clist; sColumn->column = i; gtk_signal_connect(GTK_OBJECT(GTK_CLIST(clist)->column[i].button), "clicked", GTK_SIGNAL_FUNC(SetSortColumn), (gpointer) sColumn); } gtk_signal_connect(GTK_OBJECT(clist), "select_row", GTK_SIGNAL_FUNC(ClickEntry), NULL); clistScrolledWindow = gtk_scrolled_window_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(clistScrolledWindow), clist); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clistScrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(main_vbox), clistScrolledWindow, TRUE, TRUE, 0); gtk_widget_show(clist); gtk_widget_show(clistScrolledWindow); questMark.pixmap = gdk_pixmap_create_from_xpm_d(GUI_SpeedDialWindow->window, &questMark.mask, &GUI_SpeedDialWindow->style-> bg[GTK_STATE_NORMAL], quest_xpm); CreateErrorDialog(&errorDialog, GUI_SpeedDialWindow); CreateInfoDialog(&infoDialog, GUI_SpeedDialWindow); speedDialInitialized = FALSE; }
/* a mailbox was clicked * TODO: this is called twice on keypress... up and down? */ void on_mailboxlist_tree_select_row (GtkCTree * ctree, GList * UNUSED(node), gint UNUSED(column), gpointer UNUSED(user_data)) { GtkWidget *mailbox, *stat; GtkCTreeNode *n; GtkCList *clist; GtkWidget *appbar; gchar *text[3]; synopsis **syn; int x = 0, mboxcount; mboxview *m; n = gtk_ctree_node_nth (ctree, (&(ctree->clist))->focus_row); m = (mboxview *) gtk_ctree_node_get_row_data (ctree, n); if (m == NULL) { printf (_("Bad mbox (null)\n")); exit (-1); } stat = lookup_widget (gems, "appbar1"); mailbox = lookup_widget (gems, "mailbox"); appbar = lookup_widget (gems, "appbar1"); /*** TODO *** clear the mail things */ putmail (NULL); gnome_appbar_push (GNOME_APPBAR (stat), _("Reading synopsis")); while (gtk_events_pending ()) gtk_main_iteration (); syn = (synopsis **) db_read_synopsis (m->mailbox->id, m->status); gnome_appbar_pop (GNOME_APPBAR (stat)); gnome_appbar_push (GNOME_APPBAR (stat), _("Displaying mailbox")); while (gtk_events_pending ()) gtk_main_iteration (); clist = >K_CTREE (mailbox)->clist; gtk_clist_clear (clist); while (gtk_events_pending ()) gtk_main_iteration (); gtk_clist_freeze (clist); if(syn) { mboxcount = 0; while (syn[mboxcount] != NULL) mboxcount++; while (syn[x] != NULL) { GtkCTreeNode *n; text[0] = syn[x]->sender; text[1] = syn[x]->date; text[2] = syn[x]->subject; n = gtk_ctree_insert_node (GTK_CTREE (mailbox), NULL, NULL, text, 5, NULL, NULL, NULL, NULL, TRUE, TRUE); gtk_ctree_node_set_row_data (GTK_CTREE (mailbox), n, syn[x]); gnome_appbar_set_progress (GNOME_APPBAR (appbar), (float)x / (float)mboxcount); /* * pump the status bar */ if (gtk_events_pending ()) gtk_main_iteration (); x++; } free (syn); } gtk_clist_set_sort_column (clist, 1); gtk_clist_set_sort_type (clist, GTK_SORT_ASCENDING); gtk_clist_sort (clist); gtk_clist_thaw (clist); update_mboxlist (NULL); gnome_appbar_set_progress (GNOME_APPBAR (appbar), 0.0); gnome_appbar_pop (GNOME_APPBAR (stat)); /* * gtk_signal_handler_unblock(GTK_OBJECT(ctree), select_row); */ }