add ability to specify row colors for region treeview

git-svn-id: svn://localhost/trunk/ardour2@220 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Doug McLain 2006-01-01 15:31:59 +00:00
parent c1b2177d27
commit 8073c4da5e
8 changed files with 44 additions and 9 deletions

View 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");

View 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;

View 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);
}
}

View 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

View 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);
}

View 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__ */

View 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__ */

View 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) );
}