add ability to specify row colors for region treeview
authorDoug McLain <doug@nostar.net>
Sun, 1 Jan 2006 15:31:59 +0000 (15:31 +0000)
committerDoug McLain <doug@nostar.net>
Sun, 1 Jan 2006 15:31:59 +0000 (15:31 +0000)
git-svn-id: svn://localhost/trunk/ardour2@220 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_region_list.cc
gtk2_ardour/io_selector.cc
gtk2_ardour/utils.cc
gtk2_ardour/utils.h
libs/gtkmm2ext/gtkmm2ext/utils.h
libs/gtkmm2ext/utils.cc

index d5b917f75c080c64a4f1c38c0ddb717410ef96a0..5b8d594e8b29c09d3f79c5c2a66b327dd80fe104 100644 (file)
@@ -595,12 +595,19 @@ Editor::Editor (AudioEngine& eng)
        region_list_display.set_name ("RegionListDisplay");
 
        region_list_model = TreeStore::create (region_list_columns);
-       region_list_sort_model = TreeModelSort::create (region_list_model);
-       region_list_sort_model->set_sort_func (0, mem_fun (*this, &Editor::region_list_sorter));
+
+       region_list_model->set_sort_func (0, mem_fun (*this, &Editor::region_list_sorter));
+
+       region_list_display.set_model (region_list_model);
+       CellRendererText* renderer = Gtk::manage( new Gtk::CellRendererText() );
+       region_list_display.append_column (_("Regions"), *renderer);
        
-       region_list_display.set_model (region_list_sort_model);
-       region_list_display.append_column (_("Regions"), region_list_columns.name);
-       region_list_display.set_headers_visible (false);
+       TreeViewColumn* tv_col = region_list_display.get_column(0);
+       tv_col->add_attribute(renderer->property_text(), region_list_columns.name);
+       tv_col->add_attribute(renderer->property_foreground_gdk(), region_list_columns.color_);
+       
+       region_list_display.set_reorderable (true);
+
        region_list_display.get_selection()->set_mode (SELECTION_SINGLE);
        region_list_display.add_object_drag (region_list_columns.region.index(), "regions");
 
index 7443479ac195ce84dbd70a88b470dda513f31a2f..c84cdbdd9a21941bc11525ca18c81e4504d14a81 100644 (file)
@@ -683,9 +683,11 @@ class Editor : public PublicEditor
            RegionListDisplayModelColumns() {
                    add (name);
                    add (region);
+                   add (color_);
            }
            Gtk::TreeModelColumn<Glib::ustring> name;
            Gtk::TreeModelColumn<ARDOUR::Region*> region;
+               Gtk::TreeModelColumn<Gdk::Color> color_;
        };
            
        RegionListDisplayModelColumns    region_list_columns;
index d610525e07c517cdcc4a25376243ec71fa2cfc5a..29eac4663215aedf18fdc8a1be091ad07b221c3a 100644 (file)
@@ -35,6 +35,7 @@
 #include "ardour_ui.h"
 #include "gui_thread.h"
 #include "actions.h"
+#include "utils.h"
 
 #include "i18n.h"
 
@@ -209,6 +210,7 @@ Editor::add_audio_region_to_region_display (AudioRegion *region)
 {
        string str;
        TreeModel::Row row;
+       Gdk::Color c;
 
        if (!show_automatic_regions_in_region_list && region->automatic()) {
                return;
@@ -241,6 +243,7 @@ Editor::add_audio_region_to_region_display (AudioRegion *region)
                        if (region->whole_file()) {
                                str = ".../";
                                str += PBD::basename_nosuffix (region->source().name());
+                               
                        } else {
                                str = region->name();
                        }
@@ -270,9 +273,10 @@ Editor::add_audio_region_to_region_display (AudioRegion *region)
                        AudioRegion* r = dynamic_cast<AudioRegion*>(rr);
 
                        if (r && r->whole_file()) {
-                               
                                if (region->source_equivalent (*r)) {
                                        row = *(region_list_model->append ((*i).children()));
+                                       set_color(c, 65535, 0, 0);
+                                       row[region_list_columns.color_] = c;
                                        found_parent = true;
                                        break;
                                }
@@ -700,3 +704,4 @@ Editor::region_list_display_drag_data_received (const RefPtr<Gdk::DragContext>&
                context->drag_finish (true, false, time);
        }
 }
+
index 9080f8e5dc327e02617959411c99eee7a0007c4d..5354825c06602accc0c5567165a6ae6328d6626c 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <gtkmm2ext/doi.h>
 #include <gtkmm2ext/gtk_ui.h>
+#include <gtkmm2ext/utils.h>
 
 #include "utils.h"
 #include "ardour_message.h"
@@ -47,6 +48,7 @@ using namespace Gtk;
 using namespace Glib;
 using namespace sigc;
 using namespace ARDOUR;
+using namespace Gtkmm2ext;
 
 IOSelectorWindow::IOSelectorWindow (Session& sess, IO& ior, bool input, bool can_cancel)
        : ArdourDialog ("i/o selector"),
@@ -472,10 +474,10 @@ IOSelector::display_ports ()
                        TreeViewColumn* col = tview->get_column (0);
                        
                        col->set_clickable (true);
-                       //col->set_widget(0);
+                       //set_treeview_header_as_default_label(col);
                        /* handle button events on the column header and within the treeview itself */
 
-                       //col->get_widget()->signal_button_release_event().connect (bind (mem_fun(*this, &IOSelector::port_column_button_release), tview));
+                       //col->signal_button_release_event().connect (bind (mem_fun(*this, &IOSelector::port_column_button_release), tview));
                        tview->signal_button_release_event().connect (bind (mem_fun(*this, &IOSelector::connection_button_release), tview));
                }
 
@@ -664,7 +666,7 @@ IOSelector::connection_button_release (GdkEventButton *ev, TreeView *treeview)
        return true;
 }
 
-int
+gint
 IOSelector::port_column_button_release (GdkEventButton* event, TreeView* treeview)
 {
        /* this handles button release on the button at the top of a single-column
index 448f1b57fefbe796e2fc46ec87a40bd0dbe58fe4..012d184fef7bcd82953c8c7dd1d8f036d6f364cd 100644 (file)
@@ -524,3 +524,11 @@ canvas_item_visible (ArdourCanvas::Item* item)
 {
        return (item->gobj()->object.flags & GNOME_CANVAS_ITEM_VISIBLE) ? true : false;
 }
+
+void
+set_color (Gdk::Color& c, gint r, gint g, gint b)
+{
+       c.set_red(65535);
+       c.set_green(0);
+       c.set_blue(0);
+}
index 1e2d7ce603a65a5df29723b3934fb6d606c1266f..2180e80fc47d816ba5a2b47c54095ee86a3bade9 100644 (file)
@@ -75,4 +75,6 @@ void decorate (Gtk::Window& w, Gdk::WMDecoration d);
 
 bool canvas_item_visible (ArdourCanvas::Item* item);
 
+void set_color (Gdk::Color&, gint, gint, gint);
+
 #endif /* __ardour_gtk_utils_h__ */
index 4fba212c037b03913b4584800df2b5fa3cdb1b65..639d2203dcc3c7368470a124fc60663433de1d33 100644 (file)
@@ -24,6 +24,7 @@
 #include <vector>
 #include <string>
 
+#include <gtkmm/treeview.h>
 #include <gdkmm/window.h> /* for WMDecoration */
 
 namespace Gtk {
@@ -49,6 +50,7 @@ namespace Gtkmm2ext {
 
        GdkWindow* get_paned_handle (Gtk::Paned& paned);
        void set_decoration (Gtk::Window* win, Gdk::WMDecoration decor);
+       void set_treeview_header_as_default_label(Gtk::TreeViewColumn *c);
 };
 
 #endif /*  __gtkmm2ext_utils_h__ */
index d52ab42ee7a3f03b0a234b9da7f28b930ce55689..63cbde1ac25e717d44912fa27234da409c0b2504 100644 (file)
@@ -19,6 +19,8 @@
 */
 
 #include <gtk/gtkpaned.h>
+#include <gtk/gtk.h>
+
 #include <gtkmm2ext/utils.h>
 #include <gtkmm/widget.h>
 #include <gtkmm/window.h>
@@ -74,3 +76,8 @@ Gtkmm2ext::set_decoration (Gtk::Window* win, Gdk::WMDecoration decor)
 {
        win->get_window()->set_decorations (decor);
 }
+
+void Gtkmm2ext::set_treeview_header_as_default_label(Gtk::TreeViewColumn* c)
+{
+       gtk_tree_view_column_set_widget( c->gobj(), GTK_WIDGET(0) );
+}