~elementary-apps/noise/trunk

« back to all changes in this revision

Viewing changes to src/Dialogs/NotImportedWindow.vala

  • Committer: Scott Ringwelski
  • Date: 2011-02-10 21:30:53 UTC
  • Revision ID: sgringwe@mtu.edu-20110210213053-d3c7mnexeref3cwj
sexy icons, sexy waf

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
using Gee;
 
2
using Gtk;
 
3
 
 
4
public class BeatBox.NotImportedWindow : Window{
 
5
        LinkedList<string> _files;
 
6
        
 
7
        ScrolledWindow filesScroll;
 
8
        TreeView filesView;
 
9
        ListStore filesModel;
 
10
        CheckButton moveToRecycle;
 
11
        Button deleteAll;
 
12
        Button deleteSelected;
 
13
        Button ignore;
 
14
        
 
15
        public NotImportedWindow(LinkedList<string> files) {
 
16
                _files = files;
 
17
                
 
18
                this.set_title("Not Imported Files");
 
19
                
 
20
                // set the size based on saved gconf settings
 
21
                set_size_request(600, 400);
 
22
                allow_shrink = true;
 
23
                
 
24
                Label info = new Label("The following files could not be imported because they are corrupt.");
 
25
                filesScroll = new ScrolledWindow(null, null);
 
26
                filesView = new TreeView();
 
27
                filesModel = new ListStore(2, typeof(bool), typeof(string));
 
28
                filesView.set_model(filesModel);
 
29
                moveToRecycle = new CheckButton.with_label("Recycle");
 
30
                deleteAll = new Button.with_label("Delete all");
 
31
                deleteSelected = new Button.with_label("Delete checked");
 
32
                ignore = new Button.with_label("Ignore files");
 
33
                
 
34
                info.set_line_wrap(false);
 
35
                
 
36
                var toggle = new CellRendererToggle ();
 
37
        toggle.toggled.connect ((toggle, path) => {
 
38
            var tree_path = new TreePath.from_string (path);
 
39
            TreeIter iter;
 
40
            filesModel.get_iter (out iter, tree_path);
 
41
            filesModel.set (iter, 0, !toggle.active);
 
42
        });
 
43
 
 
44
        var column = new TreeViewColumn ();
 
45
        column.title = "Delete";
 
46
        column.pack_start (toggle, false);
 
47
        column.add_attribute (toggle, "active", 0);
 
48
        filesView.append_column (column);
 
49
                
 
50
                filesView.insert_column_with_attributes(-1, "File Location", new CellRendererText(), "text", 1, null);
 
51
                
 
52
                foreach(string file in files) {
 
53
                        TreeIter item;
 
54
                        filesModel.append(out item);
 
55
                        
 
56
                        filesModel.set(item, 0, false, 1, file);
 
57
                }
 
58
                
 
59
                HButtonBox buttons = new HButtonBox();
 
60
                Label filler = new Label("");
 
61
                
 
62
                filesScroll.add(filesView);
 
63
                filesScroll.set_policy(PolicyType.AUTOMATIC, PolicyType.AUTOMATIC);
 
64
                
 
65
                buttons.pack_start(moveToRecycle, false, false, 5);
 
66
                buttons.pack_start(deleteAll, false, false, 0);
 
67
                buttons.pack_start(deleteSelected, false, false, 0);
 
68
                buttons.pack_start(filler, false, true, 0);
 
69
                buttons.pack_end(ignore, false, false, 5);
 
70
                
 
71
                VBox vbox = new VBox(false, 0);
 
72
                vbox.pack_start(info, false, true, 0);
 
73
                vbox.pack_start(filesScroll, true, true, 0);
 
74
                vbox.pack_start(buttons, false, true, 5);
 
75
                
 
76
                moveToRecycle.toggled.connect(moveToRecycleToggle);
 
77
                deleteAll.clicked.connect(deleteAllClick);
 
78
                deleteSelected.clicked.connect(deleteSelectedClick);
 
79
                ignore.clicked.connect(ignoreClick);
 
80
                
 
81
                add(vbox);
 
82
                show_all();
 
83
        }
 
84
        
 
85
        public bool selectAll(TreeModel model, TreePath path, TreeIter iter) {
 
86
                filesModel.set(iter, 0, true);
 
87
                
 
88
                return false;
 
89
        }
 
90
        
 
91
        public bool deleteSelectedItems(TreeModel model, TreePath path, TreeIter iter) {
 
92
                bool selected;
 
93
                string location;
 
94
                filesModel.get(iter, 0, out selected);
 
95
                filesModel.get(iter, 1, out location);
 
96
                
 
97
                if(selected) {
 
98
                        if(moveToRecycle.get_active()) {
 
99
                                try {
 
100
                                        var file = File.new_for_path(location);
 
101
                                        file.trash();
 
102
                                }
 
103
                                catch(GLib.Error err) {
 
104
                                        stdout.printf("Could not move file %s to recycle: %s\n", location, err.message);
 
105
                                }
 
106
                        }
 
107
                        else {
 
108
                                try {
 
109
                                        var file = File.new_for_path (location);
 
110
                                        file.delete();
 
111
                                }
 
112
                                catch(GLib.Error err) {
 
113
                                        stdout.printf("Could not delete file %s: %s\n", location, err.message);
 
114
                                }
 
115
                        }
 
116
                }
 
117
                
 
118
                return false;
 
119
        }
 
120
        
 
121
        public virtual void moveToRecycleToggle() {
 
122
                if(moveToRecycle.active) {
 
123
                        deleteAll.set_label("Recycle all");
 
124
                        deleteSelected.set_label("Recycle selected");
 
125
                }
 
126
                else {
 
127
                        deleteAll.set_label("Delete all");
 
128
                        deleteSelected.set_label("Delete selected");
 
129
                }
 
130
        }
 
131
        
 
132
        public virtual void deleteAllClick() {
 
133
                //select every item and then call deleteSelectedClick()
 
134
                filesModel.foreach(selectAll);
 
135
                deleteSelectedClick();
 
136
        }
 
137
        
 
138
        public virtual void deleteSelectedClick() {
 
139
                filesModel.foreach(deleteSelectedItems);
 
140
                this.destroy();
 
141
        }
 
142
        
 
143
        public virtual void ignoreClick() {
 
144
                this.destroy();
 
145
        }
 
146
}