📄 gtkclist.c
字号:
case ARG_N_COLUMNS: GTK_VALUE_UINT (*arg) = clist->columns; break; case ARG_SHADOW_TYPE: GTK_VALUE_ENUM (*arg) = clist->shadow_type; break; case ARG_SELECTION_MODE: GTK_VALUE_ENUM (*arg) = clist->selection_mode; break; case ARG_ROW_HEIGHT: GTK_VALUE_UINT (*arg) = GTK_CLIST_ROW_HEIGHT_SET(clist) ? clist->row_height : 0; break; case ARG_REORDERABLE: GTK_VALUE_BOOL (*arg) = GTK_CLIST_REORDERABLE (clist); break; case ARG_TITLES_ACTIVE: GTK_VALUE_BOOL (*arg) = TRUE; for (i = 0; i < clist->columns; i++) if (clist->column[i].button && !GTK_WIDGET_SENSITIVE (clist->column[i].button)) { GTK_VALUE_BOOL (*arg) = FALSE; break; } break; case ARG_USE_DRAG_ICONS: GTK_VALUE_BOOL (*arg) = GTK_CLIST_USE_DRAG_ICONS (clist); break; case ARG_SORT_TYPE: GTK_VALUE_ENUM (*arg) = clist->sort_type; break; default: arg->type = GTK_TYPE_INVALID; break; }}static voidgtk_clist_init (GtkCList *clist){ clist->flags = 0; GTK_WIDGET_UNSET_FLAGS (clist, GTK_NO_WINDOW); GTK_WIDGET_SET_FLAGS (clist, GTK_CAN_FOCUS); GTK_CLIST_SET_FLAG (clist, CLIST_CHILD_HAS_FOCUS); GTK_CLIST_SET_FLAG (clist, CLIST_DRAW_DRAG_LINE); GTK_CLIST_SET_FLAG (clist, CLIST_USE_DRAG_ICONS); clist->row_mem_chunk = NULL; clist->cell_mem_chunk = NULL; clist->freeze_count = 0; clist->rows = 0; clist->row_center_offset = 0; clist->row_height = 0; clist->row_list = NULL; clist->row_list_end = NULL; clist->columns = 0; clist->title_window = NULL; clist->column_title_area.x = 0; clist->column_title_area.y = 0; clist->column_title_area.width = 1; clist->column_title_area.height = 1; clist->clist_window = NULL; clist->clist_window_width = 1; clist->clist_window_height = 1; clist->hoffset = 0; clist->voffset = 0; clist->shadow_type = GTK_SHADOW_IN; clist->vadjustment = NULL; clist->hadjustment = NULL; clist->button_actions[0] = GTK_BUTTON_SELECTS | GTK_BUTTON_DRAGS; clist->button_actions[1] = GTK_BUTTON_IGNORED; clist->button_actions[2] = GTK_BUTTON_IGNORED; clist->button_actions[3] = GTK_BUTTON_IGNORED; clist->button_actions[4] = GTK_BUTTON_IGNORED; clist->cursor_drag = NULL; clist->xor_gc = NULL; clist->fg_gc = NULL; clist->bg_gc = NULL; clist->x_drag = 0; clist->selection_mode = GTK_SELECTION_SINGLE; clist->selection = NULL; clist->selection_end = NULL; clist->undo_selection = NULL; clist->undo_unselection = NULL; clist->focus_row = -1; clist->undo_anchor = -1; clist->anchor = -1; clist->anchor_state = GTK_STATE_SELECTED; clist->drag_pos = -1; clist->htimer = 0; clist->vtimer = 0; clist->click_cell.row = -1; clist->click_cell.column = -1; clist->compare = default_compare; clist->sort_type = GTK_SORT_ASCENDING; clist->sort_column = 0;}/* Constructors */voidgtk_clist_construct (GtkCList *clist, gint columns, gchar *titles[]){ g_return_if_fail (clist != NULL); g_return_if_fail (GTK_IS_CLIST (clist)); g_return_if_fail (columns > 0); g_return_if_fail (GTK_OBJECT_CONSTRUCTED (clist) == FALSE); /* mark the object as constructed */ gtk_object_constructed (GTK_OBJECT (clist)); /* initalize memory chunks, if this has not been done by any * possibly derived widget */ if (!clist->row_mem_chunk) clist->row_mem_chunk = g_mem_chunk_new ("clist row mem chunk", sizeof (GtkCListRow), sizeof (GtkCListRow) * CLIST_OPTIMUM_SIZE, G_ALLOC_AND_FREE); if (!clist->cell_mem_chunk) clist->cell_mem_chunk = g_mem_chunk_new ("clist cell mem chunk", sizeof (GtkCell) * columns, sizeof (GtkCell) * columns * CLIST_OPTIMUM_SIZE, G_ALLOC_AND_FREE); /* set number of columns, allocate memory */ clist->columns = columns; clist->column = columns_new (clist); /* there needs to be at least one column button * because there is alot of code that will break if it * isn't there*/ column_button_create (clist, 0); if (titles) { guint i; GTK_CLIST_SET_FLAG (clist, CLIST_SHOW_TITLES); for (i = 0; i < columns; i++) gtk_clist_set_column_title (clist, i, titles[i]); } else { GTK_CLIST_UNSET_FLAG (clist, CLIST_SHOW_TITLES); }}/* GTKCLIST PUBLIC INTERFACE * gtk_clist_new * gtk_clist_new_with_titles * gtk_clist_set_hadjustment * gtk_clist_set_vadjustment * gtk_clist_get_hadjustment * gtk_clist_get_vadjustment * gtk_clist_set_shadow_type * gtk_clist_set_selection_mode * gtk_clist_freeze * gtk_clist_thaw */GtkWidget*gtk_clist_new (gint columns){ return gtk_clist_new_with_titles (columns, NULL);} GtkWidget*gtk_clist_new_with_titles (gint columns, gchar *titles[]){ GtkWidget *widget; widget = gtk_type_new (GTK_TYPE_CLIST); gtk_clist_construct (GTK_CLIST (widget), columns, titles); return widget;}voidgtk_clist_set_hadjustment (GtkCList *clist, GtkAdjustment *adjustment){ GtkAdjustment *old_adjustment; g_return_if_fail (clist != NULL); g_return_if_fail (GTK_IS_CLIST (clist)); if (adjustment) g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); if (clist->hadjustment == adjustment) return; old_adjustment = clist->hadjustment; if (clist->hadjustment) { gtk_signal_disconnect_by_data (GTK_OBJECT (clist->hadjustment), clist); gtk_object_unref (GTK_OBJECT (clist->hadjustment)); } clist->hadjustment = adjustment; if (clist->hadjustment) { gtk_object_ref (GTK_OBJECT (clist->hadjustment)); gtk_object_sink (GTK_OBJECT (clist->hadjustment)); gtk_signal_connect (GTK_OBJECT (clist->hadjustment), "changed", (GtkSignalFunc) hadjustment_changed, (gpointer) clist); gtk_signal_connect (GTK_OBJECT (clist->hadjustment), "value_changed", (GtkSignalFunc) hadjustment_value_changed, (gpointer) clist); } if (!clist->hadjustment || !old_adjustment) gtk_widget_queue_resize (GTK_WIDGET (clist));}GtkAdjustment *gtk_clist_get_hadjustment (GtkCList *clist){ g_return_val_if_fail (clist != NULL, NULL); g_return_val_if_fail (GTK_IS_CLIST (clist), NULL); return clist->hadjustment;}voidgtk_clist_set_vadjustment (GtkCList *clist, GtkAdjustment *adjustment){ GtkAdjustment *old_adjustment; g_return_if_fail (clist != NULL); g_return_if_fail (GTK_IS_CLIST (clist)); if (adjustment) g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); if (clist->vadjustment == adjustment) return; old_adjustment = clist->vadjustment; if (clist->vadjustment) { gtk_signal_disconnect_by_data (GTK_OBJECT (clist->vadjustment), clist); gtk_object_unref (GTK_OBJECT (clist->vadjustment)); } clist->vadjustment = adjustment; if (clist->vadjustment) { gtk_object_ref (GTK_OBJECT (clist->vadjustment)); gtk_object_sink (GTK_OBJECT (clist->vadjustment)); gtk_signal_connect (GTK_OBJECT (clist->vadjustment), "changed", (GtkSignalFunc) vadjustment_changed, (gpointer) clist); gtk_signal_connect (GTK_OBJECT (clist->vadjustment), "value_changed", (GtkSignalFunc) vadjustment_value_changed, (gpointer) clist); } if (!clist->vadjustment || !old_adjustment) gtk_widget_queue_resize (GTK_WIDGET (clist));}GtkAdjustment *gtk_clist_get_vadjustment (GtkCList *clist){ g_return_val_if_fail (clist != NULL, NULL); g_return_val_if_fail (GTK_IS_CLIST (clist), NULL); return clist->vadjustment;}static voidgtk_clist_set_scroll_adjustments (GtkCList *clist, GtkAdjustment *hadjustment, GtkAdjustment *vadjustment){ if (clist->hadjustment != hadjustment) gtk_clist_set_hadjustment (clist, hadjustment); if (clist->vadjustment != vadjustment) gtk_clist_set_vadjustment (clist, vadjustment);}voidgtk_clist_set_shadow_type (GtkCList *clist, GtkShadowType type){ g_return_if_fail (clist != NULL); g_return_if_fail (GTK_IS_CLIST (clist)); clist->shadow_type = type; if (GTK_WIDGET_VISIBLE (clist)) gtk_widget_queue_resize (GTK_WIDGET (clist));}voidgtk_clist_set_selection_mode (GtkCList *clist, GtkSelectionMode mode){ g_return_if_fail (clist != NULL); g_return_if_fail (GTK_IS_CLIST (clist)); if (mode == clist->selection_mode) return; clist->selection_mode = mode; clist->anchor = -1; clist->anchor_state = GTK_STATE_SELECTED; clist->drag_pos = -1; clist->undo_anchor = clist->focus_row; g_list_free (clist->undo_selection); g_list_free (clist->undo_unselection); clist->undo_selection = NULL; clist->undo_unselection = NULL; switch (mode) { case GTK_SELECTION_MULTIPLE: case GTK_SELECTION_EXTENDED: return; case GTK_SELECTION_BROWSE: case GTK_SELECTION_SINGLE: gtk_clist_unselect_all (clist); break; }}voidgtk_clist_freeze (GtkCList *clist){ g_return_if_fail (clist != NULL); g_return_if_fail (GTK_IS_CLIST (clist)); clist->freeze_count++;}voidgtk_clist_thaw (GtkCList *clist){ g_return_if_fail (clist != NULL); g_return_if_fail (GTK_IS_CLIST (clist)); if (clist->freeze_count) { clist->freeze_count--; CLIST_REFRESH (clist); }}/* PUBLIC COLUMN FUNCTIONS * gtk_clist_column_titles_show * gtk_clist_column_titles_hide * gtk_clist_column_title_active * gtk_clist_column_title_passive * gtk_clist_column_titles_active * gtk_clist_column_titles_passive * gtk_clist_set_column_title * gtk_clist_get_column_title * gtk_clist_set_column_widget * gtk_clist_set_column_justification * gtk_clist_set_column_visibility * gtk_clist_set_column_resizeable * gtk_clist_set_column_auto_resize * gtk_clist_optimal_column_width * gtk_clist_set_column_width * gtk_clist_set_column_min_width * gtk_clist_set_column_max_width */voidgtk_clist_column_titles_show (GtkCList *clist){ g_return_if_fail (clist != NULL); g_return_if_fail (GTK_IS_CLIST (clist)); if (!GTK_CLIST_SHOW_TITLES(clist)) { GTK_CLIST_SET_FLAG (clist, CLIST_SHOW_TITLES); if (clist->title_window) gdk_window_show (clist->title_window); gtk_widget_queue_resize (GTK_WIDGET (clist)); }}void gtk_clist_column_titles_hide (GtkCList *clist){ g_return_if_fail (clist != NULL); g_return_if_fail (GTK_IS_CLIST (clist)); if (GTK_CLIST_SHOW_TITLES(clist)) { GTK_CLIST_UNSET_FLAG (clist, CLIST_SHOW_TITLES); if (clist->title_window) gdk_window_hide (clist->title_window); gtk_widget_queue_resize (GTK_WIDGET (clist)); }}voidgtk_clist_column_title_active (GtkCList *clist, gint column){ g_return_if_fail (clist != NULL); g_return_if_fail (GTK_IS_CLIST (clist)); if (column < 0 || column >= clist->columns) return; if (!clist->column[column].button || !clist->column[column].button_passive) return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -