~pimvullers/beat-box/fix-983560

« back to all changes in this revision

Viewing changes to src/Views/ListView/MusicTreeView.vala

  • Committer: sgringwe at gmail
  • Date: 2012-04-18 20:42:05 UTC
  • Revision ID: sgringwe@gmail.com-20120418204205-v1qcna51y2cbt9r9
*Abstracted ViewWrapper for different view types to spread out view-specific code
*Re-fixed libnotify closing/updating
*Put welcome screen in proper views rather than LW
*Fixed device add/removal

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
public class BeatBox.MusicTreeView : GenericView {
27
27
 
28
28
        //for header column chooser
29
 
        Gtk.Menu columnChooserMenu;
30
29
        CheckMenuItem columnNumber;
31
30
        CheckMenuItem columnTrack;
32
31
        CheckMenuItem columnTitle;
53
52
        RatingWidgetMenu mediaRateMedia;
54
53
        Gtk.MenuItem mediaRemove;
55
54
        Gtk.MenuItem importToLibrary;
56
 
 
57
 
        // for editing cells in-treeview
58
 
        CellRendererText cellTrack;
59
 
        CellRendererText cellTitle;
60
 
        CellRendererText cellLength;
61
 
        CellRendererText cellArtist;
62
 
        SmartAlbumRenderer cellAlbum;
63
 
        CellRendererText cellGenre;
64
 
        CellRendererText cellYear;
65
 
        CellRendererPixbuf cellRating;
66
 
        CellRendererText cellSkips;
67
 
        CellRendererText cellPlays;
68
 
        CellRendererText cellBitrate;
69
55
        
70
56
        public enum MusicColumn {
71
57
                ROWID,
174
160
        }
175
161
 
176
162
        public void buildUI() {
177
 
                cellTrack = new CellRendererText();
178
 
                cellTitle = new CellRendererText();
179
 
                cellLength = new CellRendererText();
180
 
                cellArtist = new CellRendererText();
181
 
                cellAlbum = new SmartAlbumRenderer();
182
 
                cellGenre = new CellRendererText();
183
 
                cellYear = new CellRendererText();
184
 
                cellRating = new CellRendererPixbuf();
185
 
                cellSkips = new CellRendererText();
186
 
                cellPlays = new CellRendererText();
187
 
                cellBitrate = new CellRendererText();
188
 
 
189
 
                cellRating.xalign = 0.0f;
190
 
 
191
 
                //cellTitle.editable = false;
192
 
                //cellTitle.edited.connect(cellTitleEdited);
193
 
 
194
 
                var to_use = new GLib.List<TreeViewColumn>();
195
 
                var originalOrder = new GLib.List<TreeViewColumn>();
196
 
                var correctStringOrder = new GLib.List<string>();
197
 
                to_use = tvs.get_columns();
198
 
 
199
 
                foreach(var tvc in to_use) {
200
 
                        originalOrder.append(tvc);
201
 
                        correctStringOrder.append(tvc.title);
202
 
                }
203
 
 
204
 
                int index = 0;
205
 
                foreach(TreeViewColumn tvc in originalOrder) {
206
 
                        if(!(tvc.title == " " || tvc.title == "id")) {
207
 
                                if(tvc.title == "Bitrate")
208
 
                                        insert_column_with_data_func(-1, tvc.title, cellBitrate, cellHelper.bitrateTreeViewFiller);
209
 
                                else if(tvc.title == "Length")
210
 
                                        insert_column_with_data_func(-1, tvc.title, cellLength, cellHelper.lengthTreeViewFiller);
211
 
                                else if(tvc.title == "Date Added")
212
 
                                        insert_column_with_data_func(-1, tvc.title, new CellRendererText(), cellHelper.dateTreeViewFiller);
213
 
                                else if(tvc.title == "Last Played")
214
 
                                        insert_column_with_data_func(-1, tvc.title, new CellRendererText(), cellHelper.dateTreeViewFiller);
215
 
                                else if(tvc.title == "Rating")
216
 
                                        insert_column_with_data_func(-1, tvc.title, cellRating, cellHelper.ratingTreeViewFiller);
217
 
                                else if(tvc.title == "Year")
218
 
                                        insert_column_with_data_func(-1, tvc.title, cellYear, cellHelper.intelligentTreeViewFiller);
219
 
                                else if(tvc.title == "#")
220
 
                                        insert_column_with_data_func(-1, tvc.title, new CellRendererText(), cellHelper.intelligentTreeViewFiller);
221
 
                                else if(tvc.title == "Track")
222
 
                                        insert_column_with_data_func(-1, tvc.title, cellTrack, cellHelper.intelligentTreeViewFiller);
223
 
                                else if(tvc.title == "Plays")
224
 
                                        insert_column_with_data_func(-1, tvc.title, cellPlays, cellHelper.intelligentTreeViewFiller);
225
 
                                else if(tvc.title == "Skips")
226
 
                                        insert_column_with_data_func(-1, tvc.title, cellSkips, cellHelper.intelligentTreeViewFiller);
227
 
                                else if(tvc.title == "Title")
228
 
                                        insert_column_with_data_func(-1, tvc.title, cellTitle, cellHelper.stringTreeViewFiller);
229
 
                                else if(tvc.title == "Artist")
230
 
                                        insert_column_with_data_func(-1, tvc.title, cellArtist, cellHelper.stringTreeViewFiller);
231
 
                                else if(tvc.title == "Album")
232
 
                                        insert_column_with_data_func(-1, tvc.title, cellAlbum, cellHelper.smartAlbumFiller);
233
 
                                else if(tvc.title == "Genre")
234
 
                                        insert_column_with_data_func(-1, tvc.title, cellGenre, cellHelper.stringTreeViewFiller);
235
 
                                else if(tvc.title == "BPM")
236
 
                                        insert_column_with_data_func(-1, tvc.title, new CellRendererText(), cellHelper.intelligentTreeViewFiller);
237
 
                                else
238
 
                                        insert_column(tvc, index);
239
 
 
240
 
 
241
 
                                get_column(index).resizable = true;
242
 
                                get_column(index).reorderable = false;
243
 
                                get_column(index).clickable = true;
244
 
                                get_column(index).sort_column_id = index;
245
 
                                get_column(index).set_sort_indicator(false);
246
 
                                get_column(index).visible = tvc.visible;
247
 
                                get_column(index).sizing = Gtk.TreeViewColumnSizing.FIXED;
248
 
                                get_column(index).fixed_width = tvc.fixed_width;
249
 
                        }
250
 
                        else if(tvc.title == " ") {
251
 
                                insert_column(tvc, index);
252
 
 
253
 
                                tvc.fixed_width = 24;
254
 
                                tvc.clickable = false;
255
 
                                tvc.sort_column_id = -1;
256
 
                                tvc.resizable = false;
257
 
                                tvc.reorderable = false;
258
 
 
259
 
                                tvc.clear_attributes (tvc.get_cells().nth_data(0));
260
 
                                tvc.clear_attributes (tvc.get_cells().nth_data(1));
261
 
 
262
 
                                tvc.set_cell_data_func(tvc.get_cells().nth_data(0), iconDataFunc);
263
 
                                tvc.set_cell_data_func(tvc.get_cells().nth_data(1), iconDataFunc);
264
 
                        }
265
 
                        else if(tvc.title == "id") {
266
 
                                insert_column(tvc, index);
267
 
                        }
268
 
                        else {
269
 
                                insert_column(tvc, index);
270
 
                        }
271
 
 
272
 
                        get_column(index).get_button().button_press_event.connect(viewHeaderClick);
273
 
                        get_column(index).notify["width"].connect(viewHeadersResized);
274
 
 
275
 
                        ++index;
276
 
                }
 
163
                add_columns ();
277
164
                
278
165
                set_compare_func(view_compare_func);
279
166
        set_search_func(view_search_func);
280
167
        set_value_func(view_value_func);
281
168
        
282
 
                //rearrangeColumns(correctStringOrder);
283
 
                //viewColumnsChanged();
284
 
 
285
 
                //enable_grid_lines = TreeViewGridLines.VERTICAL; // will require special theming to work properly
286
 
 
287
169
                button_press_event.connect(viewClick);
288
 
 
289
 
                //cursor_changed.connect_after(() => { update_rating_menu(); });
290
170
                button_release_event.connect(viewClickRelease);
291
 
                //columns_changed.connect(viewColumnsChanged);
292
171
 
293
172
                // column chooser menu
294
 
                columnChooserMenu = new Gtk.Menu();
295
173
                columnNumber = new CheckMenuItem.with_label(_("#"));
296
174
                columnTrack = new CheckMenuItem.with_label(_("Track"));
297
175
                columnTitle = new CheckMenuItem.with_label(_("Title"));
352
230
                mediaRateMedia = new RatingWidgetMenu();
353
231
                mediaMenuActionMenu.append(mediaEditMedia);
354
232
                mediaMenuActionMenu.append(mediaFileBrowse);
355
 
 
356
233
                mediaMenuActionMenu.append(mediaRateMedia);
357
 
 
358
234
                mediaMenuActionMenu.append(new SeparatorMenuItem());
359
235
                mediaMenuActionMenu.append(mediaMenuQueue);
360
236
                mediaMenuActionMenu.append(mediaMenuNewPlaylist);
371
247
                mediaRateMedia.activate.connect(mediaRateMediaClicked);
372
248
 
373
249
                update_sensitivities();
374
 
 
375
 
                //this.list_model.rows_reordered.connect(modelRowsReordered);
376
 
                //this.list_model.sort_column_changed.connect(sortColumnChanged);
377
250
                
378
251
        }
379
252
 
429
302
                }
430
303
        }
431
304
 
432
 
        public virtual void viewColumnsChanged() {
433
 
                updateTreeViewSetup();
434
 
        }
435
 
 
436
305
        public void updateColumnVisibilities() {
437
306
                int index = 0;
438
307
                foreach(TreeViewColumn tvc in get_columns()) {
598
467
                }
599
468
        }
600
469
 
601
 
        private bool viewHeaderClick(Gtk.Widget w, Gdk.EventButton e) {
602
 
                if(e.button == 3) {
603
 
                        columnChooserMenu.popup (null, null, null, 3, get_current_event_time());
604
 
                        return true;
605
 
                }
606
 
                else if(e.button == 1) {
607
 
                        // If the user tries to sort, then make sure that all other views
608
 
                        // become sorted (unshuffled) if they are shuffled
609
 
                        lw.shuffleChooser.setOption(0);
610
 
                        
611
 
                        updateTreeViewSetup();
612
 
                        
613
 
                        return false;
614
 
                }
615
 
 
616
 
                return false;
617
 
        }
618
 
 
619
 
        void viewHeadersResized() {
620
 
                updateTreeViewSetup();
621
 
        }
622
 
 
623
470
        protected override void updateTreeViewSetup() {
624
471
                if(tvs == null || get_hint() == ViewWrapper.Hint.ALBUM_LIST || get_columns().length() != TreeViewSetup.MUSIC_COLUMN_COUNT)
625
472
                        return;