static void select_release(GtkWidget *widget, GdkEventButton *event, gpointer data) { SelectRegionCommand_t *command = (SelectRegionCommand_t*) data; Object_t *obj = command->obj; Rectangle_t *rectangle = ObjectToRectangle(obj); gpointer id; gint count; g_signal_handlers_disconnect_by_func(widget, select_motion, data); g_signal_handlers_disconnect_by_func(widget, select_release, data); object_normalize(obj); id = object_list_add_select_cb(command->list, select_one_object, command); count = object_list_select_region(command->list, rectangle->x, rectangle->y, rectangle->width, rectangle->height); object_list_remove_select_cb(command->list, id); if (count) { command_list_add(&command->parent); } else { /* Nothing selected */ if (command->unselect_command->sub_commands) command_list_add(&command->parent); } preview_unset_tmp_obj (command->obj); preview_redraw (); }
static CmdExecuteValue_t select_next_command_execute(Command_t *parent) { SelectNextCommand_t *command = (SelectNextCommand_t*) parent; ObjectList_t *list = command->list; gpointer id; id = object_list_add_select_cb(list, select_one_object, command); object_list_select_next(list); object_list_remove_select_cb(list, id); return CMD_APPEND; }
static CmdExecuteValue_t select_all_command_execute(Command_t *parent) { SelectAllCommand_t *command = (SelectAllCommand_t*) parent; gpointer id; CmdExecuteValue_t rvalue; id = object_list_add_select_cb(command->list, select_one_object, command); rvalue = (object_list_select_all(command->list)) ? CMD_APPEND : CMD_DESTRUCT; object_list_remove_select_cb(command->list, id); return rvalue; }
Selection_t* make_selection(ObjectList_t *object_list) { Selection_t *data = g_new(Selection_t, 1); GtkWidget *swin, *frame, *hbox; GtkWidget *toolbar; GtkWidget *list; GtkCellRenderer *renderer; GtkTreeViewColumn *column; data->object_list = object_list; data->selected_child = NULL; data->is_visible = TRUE; data->nr_rows = 0; data->select_lock = FALSE; data->doubleclick = FALSE; data->container = frame = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); gtk_widget_show(frame); hbox = gtk_hbox_new(FALSE, 6); gtk_container_add(GTK_CONTAINER(frame), hbox); gtk_widget_show(hbox); toolbar = make_selection_toolbar(); gtk_container_add(GTK_CONTAINER(hbox), toolbar); /* Create selection */ frame = gimp_frame_new(_("Selection")); gtk_container_add(GTK_CONTAINER(hbox), frame); gtk_widget_show(frame); data->store = gtk_list_store_new (1, G_TYPE_POINTER); data->list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (data->store)); list = data->list; g_object_unref (data->store); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (N_("#"), renderer, NULL); gtk_tree_view_column_set_cell_data_func (column, renderer, render_nr, data, NULL); gtk_tree_view_column_set_min_width (column, 16); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_alignment (column, 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW (list), column); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("URL")); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start(column, renderer, FALSE); gtk_tree_view_column_set_cell_data_func (column, renderer, render_image, data, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, render_url, data, NULL); gtk_tree_view_column_set_min_width (column, 80); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_alignment (column, 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW (list), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (_("ALT Text"), renderer, NULL); gtk_tree_view_column_set_cell_data_func (column, renderer, render_comment, data, NULL); gtk_tree_view_column_set_min_width (column, 64); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_alignment (column, 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW (list), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (_("Target"), renderer, NULL); gtk_tree_view_column_set_cell_data_func (column, renderer, render_target, data, NULL); gtk_tree_view_column_set_min_width (column, 64); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_alignment (column, 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW (list), column); /* Create scrollable window */ swin = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_size_request (swin, 16 + 80 + 2 * 64 + 16, -1); gtk_container_add (GTK_CONTAINER(frame), swin); gtk_widget_show (swin); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(swin), list); gtk_widget_show (list); /* Drop support */ gtk_drag_dest_set (list, GTK_DEST_DEFAULT_ALL, target_table, 2, GDK_ACTION_COPY); g_signal_connect (list, "drag-data-received", G_CALLBACK(handle_drop), NULL); /* For handling doubleclick */ g_signal_connect (list, "button-press-event", G_CALLBACK(button_press_cb), data); g_signal_connect (list, "button-release-event", G_CALLBACK(button_release_cb), data); /* Callbacks we are interested in */ data->selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); gtk_tree_selection_set_mode (data->selection, GTK_SELECTION_MULTIPLE); g_signal_connect (data->selection, "changed", G_CALLBACK(changed_cb), data); set_buttons (data); /* Set object list callbacks we're interested in */ object_list_add_add_cb (object_list, object_added_cb, data); object_list_add_update_cb (object_list, object_updated_cb, data); object_list_add_remove_cb (object_list, object_removed_cb, data); object_list_add_select_cb (object_list, object_selected_cb, data); object_list_add_move_cb (object_list, object_moved_cb, data); return data; }