📄 gtklistitem.c
字号:
/* GTK - The GIMP Toolkit * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. *//* * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS * file for a list of people on the GTK+ Team. See the ChangeLog * files for a list of changes. These files are distributed with * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */#include "gtkbindings.h"#include "gtklabel.h"#include "gtklistitem.h"#include "gtklist.h"#include "gtksignal.h"#include <gdk/gdkkeysyms.h>enum{ TOGGLE_FOCUS_ROW, SELECT_ALL, UNSELECT_ALL, UNDO_SELECTION, START_SELECTION, END_SELECTION, TOGGLE_ADD_MODE, EXTEND_SELECTION, SCROLL_VERTICAL, SCROLL_HORIZONTAL, LAST_SIGNAL};static void gtk_list_item_class_init (GtkListItemClass *klass);static void gtk_list_item_init (GtkListItem *list_item);static void gtk_list_item_realize (GtkWidget *widget);static void gtk_list_item_size_request (GtkWidget *widget, GtkRequisition *requisition);static void gtk_list_item_size_allocate (GtkWidget *widget, GtkAllocation *allocation);static void gtk_list_item_style_set (GtkWidget *widget, GtkStyle *previous_style);static void gtk_list_item_draw (GtkWidget *widget, GdkRectangle *area);static void gtk_list_item_draw_focus (GtkWidget *widget);static gint gtk_list_item_button_press (GtkWidget *widget, GdkEventButton *event);static gint gtk_list_item_expose (GtkWidget *widget, GdkEventExpose *event);static gint gtk_list_item_focus_in (GtkWidget *widget, GdkEventFocus *event);static gint gtk_list_item_focus_out (GtkWidget *widget, GdkEventFocus *event);static void gtk_real_list_item_select (GtkItem *item);static void gtk_real_list_item_deselect (GtkItem *item);static void gtk_real_list_item_toggle (GtkItem *item);static GtkItemClass *parent_class = NULL;static guint list_item_signals[LAST_SIGNAL] = {0};GtkTypegtk_list_item_get_type (void){ static GtkType list_item_type = 0; if (!list_item_type) { static const GtkTypeInfo list_item_info = { "GtkListItem", sizeof (GtkListItem), sizeof (GtkListItemClass), (GtkClassInitFunc) gtk_list_item_class_init, (GtkObjectInitFunc) gtk_list_item_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; list_item_type = gtk_type_unique (gtk_item_get_type (), &list_item_info); } return list_item_type;}static voidgtk_list_item_class_init (GtkListItemClass *class){ GtkObjectClass *object_class; GtkWidgetClass *widget_class; GtkItemClass *item_class; GtkBindingSet *binding_set; object_class = (GtkObjectClass*) class; widget_class = (GtkWidgetClass*) class; item_class = (GtkItemClass*) class; parent_class = gtk_type_class (gtk_item_get_type ()); list_item_signals[TOGGLE_FOCUS_ROW] = gtk_signal_new ("toggle_focus_row", GTK_RUN_LAST | GTK_RUN_ACTION, object_class->type, GTK_SIGNAL_OFFSET (GtkListItemClass, toggle_focus_row), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); list_item_signals[SELECT_ALL] = gtk_signal_new ("select_all", GTK_RUN_LAST | GTK_RUN_ACTION, object_class->type, GTK_SIGNAL_OFFSET (GtkListItemClass, select_all), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); list_item_signals[UNSELECT_ALL] = gtk_signal_new ("unselect_all", GTK_RUN_LAST | GTK_RUN_ACTION, object_class->type, GTK_SIGNAL_OFFSET (GtkListItemClass, unselect_all), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); list_item_signals[UNDO_SELECTION] = gtk_signal_new ("undo_selection", GTK_RUN_LAST | GTK_RUN_ACTION, object_class->type, GTK_SIGNAL_OFFSET (GtkListItemClass, undo_selection), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); list_item_signals[START_SELECTION] = gtk_signal_new ("start_selection", GTK_RUN_LAST | GTK_RUN_ACTION, object_class->type, GTK_SIGNAL_OFFSET (GtkListItemClass, start_selection), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); list_item_signals[END_SELECTION] = gtk_signal_new ("end_selection", GTK_RUN_LAST | GTK_RUN_ACTION, object_class->type, GTK_SIGNAL_OFFSET (GtkListItemClass, end_selection), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); list_item_signals[TOGGLE_ADD_MODE] = gtk_signal_new ("toggle_add_mode", GTK_RUN_LAST | GTK_RUN_ACTION, object_class->type, GTK_SIGNAL_OFFSET (GtkListItemClass, toggle_add_mode), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); list_item_signals[EXTEND_SELECTION] = gtk_signal_new ("extend_selection", GTK_RUN_LAST | GTK_RUN_ACTION, object_class->type, GTK_SIGNAL_OFFSET (GtkListItemClass, extend_selection), gtk_marshal_NONE__ENUM_FLOAT_BOOL, GTK_TYPE_NONE, 3, GTK_TYPE_ENUM, GTK_TYPE_FLOAT, GTK_TYPE_BOOL); list_item_signals[SCROLL_VERTICAL] = gtk_signal_new ("scroll_vertical", GTK_RUN_LAST | GTK_RUN_ACTION, object_class->type, GTK_SIGNAL_OFFSET (GtkListItemClass, scroll_vertical), gtk_marshal_NONE__ENUM_FLOAT, GTK_TYPE_NONE, 2, GTK_TYPE_ENUM, GTK_TYPE_FLOAT); list_item_signals[SCROLL_HORIZONTAL] = gtk_signal_new ("scroll_horizontal", GTK_RUN_LAST | GTK_RUN_ACTION, object_class->type, GTK_SIGNAL_OFFSET (GtkListItemClass, scroll_horizontal), gtk_marshal_NONE__ENUM_FLOAT, GTK_TYPE_NONE, 2, GTK_TYPE_ENUM, GTK_TYPE_FLOAT); gtk_object_class_add_signals (object_class, list_item_signals, LAST_SIGNAL); widget_class->realize = gtk_list_item_realize; widget_class->size_request = gtk_list_item_size_request; widget_class->size_allocate = gtk_list_item_size_allocate; widget_class->style_set = gtk_list_item_style_set; widget_class->draw = gtk_list_item_draw; widget_class->draw_focus = gtk_list_item_draw_focus; widget_class->button_press_event = gtk_list_item_button_press; widget_class->expose_event = gtk_list_item_expose; widget_class->focus_in_event = gtk_list_item_focus_in; widget_class->focus_out_event = gtk_list_item_focus_out; item_class->select = gtk_real_list_item_select; item_class->deselect = gtk_real_list_item_deselect; item_class->toggle = gtk_real_list_item_toggle; class->toggle_focus_row = NULL; class->select_all = NULL; class->unselect_all = NULL; class->undo_selection = NULL; class->start_selection = NULL; class->end_selection = NULL; class->extend_selection = NULL; class->scroll_horizontal = NULL; class->scroll_vertical = NULL; class->toggle_add_mode = NULL; binding_set = gtk_binding_set_by_class (class); gtk_binding_entry_add_signal (binding_set, GDK_Up, 0, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Down, 0, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Page_Up, 0, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_BACKWARD, GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Page_Down, 0, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_FORWARD, GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Home, GDK_CONTROL_MASK, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_End, GDK_CONTROL_MASK, "scroll_vertical", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 1.0); gtk_binding_entry_add_signal (binding_set, GDK_Up, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Down, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Page_Up, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_BACKWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Page_Down, GDK_SHIFT_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_PAGE_FORWARD, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Home, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 0.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_End, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "extend_selection", 3, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 1.0, GTK_TYPE_BOOL, TRUE); gtk_binding_entry_add_signal (binding_set, GDK_Left, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Right, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_Home, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 0.0); gtk_binding_entry_add_signal (binding_set, GDK_End, 0, "scroll_horizontal", 2, GTK_TYPE_ENUM, GTK_SCROLL_JUMP, GTK_TYPE_FLOAT, 1.0); gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0, "undo_selection", 0); gtk_binding_entry_add_signal (binding_set, GDK_space, 0, "toggle_focus_row", 0); gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_CONTROL_MASK, "toggle_add_mode", 0); gtk_binding_entry_add_signal (binding_set, '/', GDK_CONTROL_MASK, "select_all", 0); gtk_binding_entry_add_signal (binding_set, '\\', GDK_CONTROL_MASK, "unselect_all", 0); gtk_binding_entry_add_signal (binding_set, GDK_Shift_L, GDK_RELEASE_MASK | GDK_SHIFT_MASK, "end_selection", 0); gtk_binding_entry_add_signal (binding_set, GDK_Shift_R, GDK_RELEASE_MASK | GDK_SHIFT_MASK, "end_selection", 0); gtk_binding_entry_add_signal (binding_set, GDK_Shift_R, GDK_RELEASE_MASK | GDK_SHIFT_MASK | GDK_CONTROL_MASK, "end_selection", 0);}static voidgtk_list_item_init (GtkListItem *list_item){ GTK_WIDGET_SET_FLAGS (list_item, GTK_CAN_FOCUS);}GtkWidget*gtk_list_item_new (void){ return GTK_WIDGET (gtk_type_new (gtk_list_item_get_type ()));}GtkWidget*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -