bg[ACTIVE] = { 1.0, 0, 0}
}
-style "selected_io_selector_port_list" = "medium_text"
+style "selected_io_selector_port_list" = "medium_bold_text"
{
- fg[NORMAL] = { 0.50, 1.0, 1.0 }
- fg[SELECTED] = { 0.50, 1.0, 1.0 }
- base[NORMAL] = { 0, 0, 0 }
- base[SELECTED] = { 0, 0, 0 }
+ GtkTreeView::even-row-color = { 0.64, 0.68, 0.54 }
+ GtkTreeView::odd-row-color = { 0.64, 0.68, 0.54 }
+
+# fg is used to color the fg (text) of the column header button
+
+ fg[NORMAL] = { 0.80, 0.80, 0.70 }
+ fg[SELECTED] = { 0.80, 0.80, 0.70 }
+ fg[ACTIVE] = { 0.80, 0.80, 0.70 }
+ fg[PRELIGHT] = { 0.80, 0.80, 0.70 }
+ fg[INSENSITIVE] = { 0.80, 0.80, 0.70 }
+
+# bg is used used to color the background of the column header button
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = { 0.30, 0.30, 0.35 }
+ bg[PRELIGHT] = { 0.30, 0.30, 0.35 }
+ bg[INSENSITIVE] = { 0.30, 0.30, 0.35 }
+ bg[SELECTED] = { 0.30, 0.30, 0.35 }
+
+# text is used to color the treeview row text
+
+ text[NORMAL] = { 0.80, 0.80, 0.70 }
+ text[SELECTED] = { 0.80, 0.80, 0.70 }
+
+# base is used to color a treeview with no rows
+
+ base[NORMAL] = { 0.64, 0.68, 0.54 }
+ base[ACTIVE] = { 0.64, 0.68, 0.54 }
+ base[PRELIGHT] = { 0.64, 0.68, 0.54 }
+ base[INSENSITIVE] = { 0.64, 0.68, 0.54 }
+ base[SELECTED] = { 0.64, 0.68, 0.54 }
}
style "io_selector_port_list" = "medium_text"
{
- fg[NORMAL] = {0.80, 0.80, 0.70 }
- fg[SELECTED] = {0.80, 0.80, 0.70 }
- base[NORMAL] = { 0.26, 0.26, 0.26 }
- base[SELECTED] = { 0.26, 0.26, 0.26 }
+
+# fg is used to color the fg (text) of the column header button
+
+ fg[NORMAL] = { 0.80, 0.80, 0.70 }
+ fg[SELECTED] = { 0.80, 0.80, 0.70 }
+ fg[ACTIVE] = { 0.80, 0.80, 0.70 }
+ fg[PRELIGHT] = { 0.80, 0.80, 0.70 }
+ fg[INSENSITIVE] = { 0.80, 0.80, 0.70 }
+
+# bg is used used to color the background of the column header button
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = { 0.30, 0.30, 0.35 }
+ bg[PRELIGHT] = { 0.30, 0.30, 0.35 }
+ bg[INSENSITIVE] = { 0.30, 0.30, 0.35 }
+ bg[SELECTED] = { 0.30, 0.30, 0.35 }
+
+# text is used to color the treeview row text
+
+ text[NORMAL] = { 0.80, 0.80, 0.70 }
+ text[SELECTED] = { 0.80, 0.80, 0.70 }
+
+# base is used to color a treeview with no rows
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[PRELIGHT] = { 0, 0, 0 }
+ base[INSENSITIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0, 0, 0 }
}
style "io_selector_notebook" = "default_base"
widget "*IOSelectorButton*" style "default_buttons_menus"
widget "*IOSelectorList" style "medium_entry_noselection_fg"
widget "*IOSelectorPortList" style "io_selector_port_list"
+widget "*IOSelectorPortList.*" style "io_selector_port_list"
widget "*IOSelectorPortListSelected" style "selected_io_selector_port_list"
+widget "*IOSelectorPortListSelected.*" style "selected_io_selector_port_list"
widget "*IOSelectorNotebook" style "io_selector_notebook"
widget "*IOSelectorNotebookTab" style "io_selector_notebook"
widget "*IOSelectorFrame" style "base_frame"
idspec += string_compose(":%1", n);
try {
- source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (*session, idspec, (mode == ImportAsTrack ? AudioFileSource::Destructive : AudioFileSource::Flag (0))));
+ source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable
+ (*session, idspec,
+ (mode == ImportAsTapeTrack ?
+ AudioFileSource::Destructive :
+ AudioFileSource::Flag (0))));
sources.push_back(source);
}
if (sources.empty()) {
goto out;
}
-
+
+ if (sources[0]->natural_position() != 0) {
+ pos = sources[0]->natural_position();
+ }
+
region_name = PBD::basename_nosuffix (path);
region_name += "-0";
row[port_display_columns.full_name] = s->second;
}
- //display->get_selection()->signal_changed().connect (bind (mem_fun(*this, &IOSelector::port_selection_changed), display));
display->signal_button_release_event().connect (bind (mem_fun(*this, &IOSelector::port_selection_changed), display));
Label *tab_label = manage (new Label);
}
notebook.set_current_page (current_page);
- //notebook.signal_show().connect (bind (mem_fun (notebook, &Notebook::set_current_page), current_page));
+ notebook.signal_show().connect (bind (mem_fun (notebook, &Notebook::set_current_page), current_page));
selector_box.show_all ();
}
{
TreeView *firsttview = 0;
TreeView *selected_port_tview = 0;
-
{
Glib::Mutex::Lock lm (port_display_lock);
Port *port;
uint32_t limit;
-
+
if (for_input) {
limit = io->n_inputs();
} else {
limit = io->n_outputs();
}
-
- for (slist<TreeView *>::iterator i = port_displays.begin(); i != port_displays.end(); ) {
+ for (slist<TreeView *>::iterator i = port_displays.begin(); i != port_displays.end(); ) {
+
slist<TreeView *>::iterator tmp;
-
+
tmp = i;
++tmp;
-
+
port_box.remove (**i);
delete *i;
port_displays.erase (i);
-
+
i = tmp;
}
-
-
+
for (uint32_t n = 0; n < limit; ++n) {
TreeView* tview;
}
/* we know there is '/' because we put it there */
-
+
really_short_name = port->short_name();
really_short_name = really_short_name.substr (really_short_name.find ('/') + 1);
-
+
tview = manage (new TreeView());
RefPtr<ListStore> port_model = ListStore::create (port_display_columns);
-
+
if (!firsttview) {
firsttview = tview;
}
/* now fill the clist with the current connections */
-
+
const char **connections = port->get_connections ();
-
+
if (connections) {
for (uint32_t c = 0; connections[c]; ++c) {
TreeModel::Row row = *(port_model->append());
selected_port_tview = tview;
}
}
-
+
} else {
-
+
if (io->output_maximum() == 1) {
selected_port = port;
selected_port_tview = tview;
}
}
}
-
+
TreeViewColumn* col = tview->get_column (0);
col->set_clickable (true);
-
- /* handle button events on the column header and within the treeview itself */
+
+ /* handle button events on the column header ... */
col->signal_clicked().connect (bind (mem_fun(*this, &IOSelector::select_treeview), tview));
+
+ /* ... and within the treeview itself */
tview->signal_button_release_event().connect (bind (mem_fun(*this, &IOSelector::connection_button_release), tview));
}
-
+
port_box.show_all ();
-
- if (selected_port_tview) {
- // GTK2FIX
- // selected_port_tview->click_column(0);
- selected_port_tview->set_name ("IOSelectorPortListSelected");
- for (slist<TreeView *>::iterator i = port_displays.begin(); i != port_displays.end(); ++i) {
- if (*i != selected_port_tview) {
- (*i)->set_name ("IOSelectorPortList");
- (*i)->queue_draw ();
- }
- }
- } else {
- selected_port = 0;
- selector_box.hide_all ();
- }
}
- if (selected_port_tview) {
- select_treeview (selected_port_tview);
- } else if (firsttview) {
- // select first
- select_treeview (firsttview);
+ if (!selected_port_tview) {
+ selected_port_tview = firsttview;
}
+
+ select_treeview (selected_port_tview);
}
bool
return false;
}
- if (!(Keyboard::is_delete_event (ev))) {
- //return false;
- }
-
if (!treeview->get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
return false;
}
- cerr << "path = " << path.to_string() << endl;
-
+
if ((iter = treeview->get_model()->get_iter (path.to_string()))) {
/* path is valid */
return true;
}
-gint
-IOSelector::port_column_button_release (GdkEventButton* event, TreeView* treeview)
-{
- /* this handles button release on the button at the top of a single-column
- treeview (representing a port)
- */
- cerr << "IOSelector::port_column_button_release() called" << endl;
-
- if (Keyboard::is_delete_event (event)) {
- Port* port;
- {
- Glib::Mutex::Lock lm (port_display_lock);
-
- port = static_cast<Port *> (treeview->get_data (_("port")));
-
- if (port == selected_port) {
- selected_port = 0;
- treeview->set_name ("IOSelectorPortList");
- treeview->queue_draw();
- }
- }
-
- /* remove the port when idle - if we do it here, we will destroy the widget
- for whom we are handling an event. not good.
- */
-
- signal_idle().connect (bind (mem_fun(*this, &IOSelector::remove_port_when_idle), port));
-
- } else {
- select_treeview (treeview);
- }
-
- return TRUE;
-}
-
void
IOSelector::select_next_treeview ()
{
Glib::Mutex::Lock lm (port_display_lock);
Port* port = reinterpret_cast<Port *> (tview->get_data (_("port")));
+
+ selected_port = port;
+
+ tview->set_name ("IOSelectorPortListSelected");
+ tview->queue_draw ();
+
+ /* ugly hack to force the column header button to change as well */
+
+ TreeViewColumn* col = tview->get_column (0);
+ GtkTreeViewColumn* ccol = col->gobj();
- if (port != selected_port) {
- selected_port = port;
+ if (ccol->button) {
+ gtk_widget_set_name (ccol->button, "IOSelectorPortListSelected");
+ gtk_widget_queue_draw (ccol->button);
+ }
+
+ for (slist<TreeView*>::iterator i = port_displays.begin(); i != port_displays.end(); ++i) {
+ if (*i == tview) {
+ continue;
+ }
- tview->set_name ("IOSelectorPortListSelected");
+ col = (*i)->get_column (0);
+ ccol = col->gobj();
- for (slist<TreeView*>::iterator i = port_displays.begin(); i != port_displays.end(); ++i) {
- if (*i != tview) {
- (*i)->set_name ("IOSelectorPortList");
- (*i)->queue_draw ();
- }
+ if (ccol->button) {
+ gtk_widget_set_name (ccol->button, "IOSelectorPortList");
+ gtk_widget_queue_draw (ccol->button);
}
- selector_box.show_all ();
+
+ Port* port = reinterpret_cast<Port *> ((*i)->get_data (_("port")));
+
+ (*i)->set_name ("IOSelectorPortList");
+ (*i)->queue_draw ();
}
+
+ selector_box.show_all ();
}
void
void remove_port ();
gint remove_port_when_idle (ARDOUR::Port *);
- gint port_column_button_release (GdkEventButton *, Gtk::TreeView*);
gint connection_button_release (GdkEventButton *, Gtk::TreeView*);
void select_treeview(Gtk::TreeView*);
canvas_rect = new ArdourCanvas::SimpleRect (*canvas_group);
canvas_rect->property_x1() = 0.0;
canvas_rect->property_y1() = 0.0;
- canvas_rect->property_x2() = 1000000.0;
+ canvas_rect->property_x2() = _trackview.editor.frame_to_pixel (max_frames);
canvas_rect->property_y2() = (double) tv.height;
canvas_rect->property_outline_what() = (guint32) (0x1|0x2|0x8); // outline ends and bottom
// (Fill/Outline colours set in derived classes)
error << string_compose(_("AudioSource: cannot stat peakfile \"%1\""), peakpath) << endmsg;
return -1;
}
- } else {
- /* we found it in the peaks dir */
- }
-
- if (statbuf.st_size == 0) {
_peaks_built = false;
+
} else {
- // Check if the audio file has changed since the peakfile was built.
- struct stat stat_file;
- int err = stat (audio_path.c_str(), &stat_file);
- if (!err && stat_file.st_mtime > statbuf.st_mtime){
+ /* we found it in the peaks dir, so check it out */
+
+ if (statbuf.st_size == 0) {
_peaks_built = false;
} else {
- _peaks_built = true;
+ // Check if the audio file has changed since the peakfile was built.
+ struct stat stat_file;
+ int err = stat (audio_path.c_str(), &stat_file);
+
+ if (!err && stat_file.st_mtime > statbuf.st_mtime){
+ _peaks_built = false;
+ } else {
+ _peaks_built = true;
+ }
}
}
}
-
+
if (!newfile && !_peaks_built && _build_missing_peakfiles && _build_peakfiles) {
build_peaks_from_scratch ();
}