[gnome-clocks] Do not duplicate the selected flag in the tree model
- From: Paolo Borelli <pborelli src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-clocks] Do not duplicate the selected flag in the tree model
- Date: Sun, 7 Feb 2016 20:48:16 +0000 (UTC)
commit e0b77d778672f14cf1a5303295bc62df25412b02
Author: Paolo Borelli <pborelli gnome org>
Date: Sun Feb 7 20:56:57 2016 +0100
Do not duplicate the selected flag in the tree model
We now have the same information in the item of the real model
src/widgets.vala | 78 +++++++++++++++++++++++-------------------------------
1 files changed, 33 insertions(+), 45 deletions(-)
---
diff --git a/src/widgets.vala b/src/widgets.vala
index 7cdab93..14e3574 100644
--- a/src/widgets.vala
+++ b/src/widgets.vala
@@ -359,12 +359,6 @@ private class IconView : Gtk.IconView {
SELECTION
}
- public enum Column {
- SELECTED,
- ITEM,
- COLUMNS
- }
-
public Mode mode {
get {
return _mode;
@@ -390,7 +384,7 @@ private class IconView : Gtk.IconView {
public IconView () {
Object (selection_mode: Gtk.SelectionMode.NONE, mode: Mode.NORMAL);
- model = new Gtk.ListStore (Column.COLUMNS, typeof (bool), typeof (ContentItem));
+ model = new Gtk.ListStore (1, typeof (ContentItem));
get_style_context ().add_class ("clocks-tiles-view");
get_style_context ().add_class ("content-view");
@@ -406,10 +400,9 @@ private class IconView : Gtk.IconView {
thumb_renderer.set_alignment (0.5f, 0.5f);
thumb_renderer.set_fixed_size (tile_width, tile_height);
pack_start (thumb_renderer, false);
- add_attribute (thumb_renderer, "checked", Column.SELECTED);
set_cell_data_func (thumb_renderer, (column, cell, model, iter) => {
ContentItem? item;
- model.get (iter, IconView.Column.ITEM, out item);
+ model.get (iter, 0, out item);
if (item != null) {
var renderer = (DigitalClockRenderer) cell;
string text;
@@ -418,6 +411,7 @@ private class IconView : Gtk.IconView {
string css_class;
item.get_thumb_properties (out text, out subtext, out pixbuf, out css_class);
renderer.selectable = item.selectable;
+ renderer.checked = item.selected;
renderer.text = text;
renderer.subtext = subtext;
renderer.pixbuf = pixbuf;
@@ -434,7 +428,7 @@ private class IconView : Gtk.IconView {
pack_start (title_renderer, true);
set_cell_data_func (title_renderer, (column, cell, model, iter) => {
ContentItem? item;
- model.get (iter, IconView.Column.ITEM, out item);
+ model.get (iter, 0, out item);
if (item != null) {
var renderer = (TitleRenderer) cell;
renderer.title = GLib.Markup.escape_text (item.name);
@@ -455,12 +449,10 @@ private class IconView : Gtk.IconView {
var store = (Gtk.ListStore) model;
Gtk.TreeIter i;
if (store.get_iter (out i, path)) {
- bool selected;
ContentItem item;
- store.get (i, Column.SELECTED, out selected, Column.ITEM, out item);
- if (item.selectable) {
+ store.get (i, 0, out item);
+ if (item != null && item.selectable) {
item.selected = true;
- store.set (i, Column.SELECTED, !selected);
selection_changed ();
}
}
@@ -476,12 +468,11 @@ private class IconView : Gtk.IconView {
var store = (Gtk.ListStore) model;
Gtk.TreeIter i;
store.append (out i);
- store.set (i, Column.SELECTED, false, Column.ITEM, item);
+ store.set (i, 0, item);
}
public new void clear () {
- var model = get_model () as Gtk.ListStore;
- model.clear ();
+ ((Gtk.ListStore) model).clear ();
}
// Redefine selection handling methods since we handle selection manually
@@ -489,9 +480,9 @@ private class IconView : Gtk.IconView {
public new List<Gtk.TreePath> get_selected_items () {
var items = new List<Gtk.TreePath> ();
model.foreach ((model, path, iter) => {
- bool selected;
- ((Gtk.ListStore) model).get (iter, Column.SELECTED, out selected);
- if (selected) {
+ ContentItem? item;
+ ((Gtk.ListStore) model).get (iter, 0, out item);
+ if (item != null && item.selected) {
items.prepend (path);
}
return false;
@@ -500,27 +491,25 @@ private class IconView : Gtk.IconView {
return (owned) items;
}
- public new void select_all () {
+ private void select_unselect_all (bool select) {
var model = get_model () as Gtk.ListStore;
model.foreach ((model, path, iter) => {
ContentItem? item;
- ((Gtk.ListStore) model).get (iter, Column.ITEM, out item);
+ ((Gtk.ListStore) model).get (iter, 0, out item);
if (item != null && item.selectable) {
- item.selected = true;
- ((Gtk.ListStore) model).set (iter, Column.SELECTED, true);
+ item.selected = select;
}
return false;
});
selection_changed ();
}
+ public new void select_all () {
+ select_unselect_all (true);
+ }
+
public new void unselect_all () {
- var model = get_model () as Gtk.ListStore;
- model.foreach ((model, path, iter) => {
- ((Gtk.ListStore) model).set (iter, Column.SELECTED, false);
- return false;
- });
- selection_changed ();
+ select_unselect_all (false);
}
}
@@ -615,17 +604,16 @@ public class ContentView : Gtk.Bin {
icon_view.item_activated.connect ((path) => {
var store = (Gtk.ListStore) icon_view.model;
- Gtk.TreeIter i;
- if (store.get_iter (out i, path)) {
- if (icon_view.mode == IconView.Mode.SELECTION) {
- bool selected;
- store.get (i, IconView.Column.SELECTED, out selected);
- store.set (i, IconView.Column.SELECTED, !selected);
- icon_view.selection_changed ();
- } else {
- Object item;
- store.get (i, IconView.Column.ITEM, out item);
- item_activated ((ContentItem) item);
+ Gtk.TreeIter iter;
+ if (store.get_iter (out iter, path)) {
+ ContentItem? item;
+ store.get (iter, 0, out item);
+ if (item != null) {
+ if (icon_view.mode == IconView.Mode.SELECTION) {
+ item.selected = !item.selected;
+ } else {
+ item_activated (item);
+ }
}
}
});
@@ -736,13 +724,13 @@ public class ContentView : Gtk.Bin {
public void set_sorting(Gtk.SortType sort_type, SortFunc sort_func) {
var sortable = icon_view.get_model () as Gtk.TreeSortable;
- sortable.set_sort_column_id (1, sort_type);
- sortable.set_sort_func (1, (model, iter1, iter2) => {
+ sortable.set_sort_column_id (0, sort_type);
+ sortable.set_sort_func (0, (model, iter1, iter2) => {
ContentItem item1;
ContentItem item2;
- model.get (iter1, IconView.Column.ITEM, out item1);
- model.get (iter2, IconView.Column.ITEM, out item2);
+ model.get (iter1, 0, out item1);
+ model.get (iter2, 0, out item2);
return sort_func (item1, item2);
});
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]