Restore add channel option to port matrix context menu.

git-svn-id: svn://localhost/ardour2/branches/3.0@5383 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2009-07-19 20:12:59 +00:00
parent 6da5dd6d41
commit c6509b8f86
8 changed files with 64 additions and 46 deletions

View file

@ -80,8 +80,14 @@ BundleEditorMatrix::get_state (ARDOUR::BundleChannel c[2]) const
return PortMatrixNode::ASSOCIATED; return PortMatrixNode::ASSOCIATED;
} }
std::string
BundleEditorMatrix::add_channel_name () const
{
return _bundle->name ();
}
void void
BundleEditorMatrix::add_channel (boost::shared_ptr<ARDOUR::Bundle> b) BundleEditorMatrix::add_channel ()
{ {
NameChannelDialog d; NameChannelDialog d;
d.set_position (Gtk::WIN_POS_MOUSE); d.set_position (Gtk::WIN_POS_MOUSE);
@ -178,20 +184,6 @@ BundleEditor::BundleEditor (ARDOUR::Session& session, boost::shared_ptr<ARDOUR::
get_vbox()->pack_start (_matrix); get_vbox()->pack_start (_matrix);
get_vbox()->set_spacing (4); get_vbox()->set_spacing (4);
/* Add Channel button */
Gtk::Button* add_channel_button = Gtk::manage (new Gtk::Button (_("Add Channel")));
add_channel_button->set_name ("IOSelectorButton");
add_channel_button->set_image (*Gtk::manage (new Gtk::Image (Gtk::Stock::ADD, Gtk::ICON_SIZE_BUTTON)));
get_action_area()->pack_start (*add_channel_button, false, false);
add_channel_button->signal_clicked().connect (sigc::bind (sigc::mem_fun (_matrix, &BundleEditorMatrix::add_channel), boost::shared_ptr<ARDOUR::Bundle> ()));
if (add) {
add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
add_button (Gtk::Stock::ADD, Gtk::RESPONSE_ACCEPT);
} else {
add_button (Gtk::Stock::CLOSE, Gtk::RESPONSE_ACCEPT);
}
show_all (); show_all ();
} }

View file

@ -39,7 +39,8 @@ class BundleEditorMatrix : public PortMatrix
void set_state (ARDOUR::BundleChannel c[2], bool s); void set_state (ARDOUR::BundleChannel c[2], bool s);
PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const; PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const;
void add_channel (boost::shared_ptr<ARDOUR::Bundle>); std::string add_channel_name () const;
void add_channel ();
bool can_remove_channels (int d) const { bool can_remove_channels (int d) const {
return d == OURS; return d == OURS;
} }

View file

@ -36,7 +36,6 @@ public:
void set_state (ARDOUR::BundleChannel c[2], bool); void set_state (ARDOUR::BundleChannel c[2], bool);
PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const; PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const;
void add_channel (boost::shared_ptr<ARDOUR::Bundle>) {}
bool can_remove_channels (int d) const { bool can_remove_channels (int d) const {
return false; return false;
} }

View file

@ -145,11 +145,15 @@ IOSelector::n_io_ports () const
} }
} }
void string
IOSelector::add_channel (boost::shared_ptr<ARDOUR::Bundle> b) IOSelector::add_channel_name () const
{
return _io->name ();
}
void
IOSelector::add_channel ()
{ {
/* we ignore the bundle parameter, as we know what it is that we're adding to */
// The IO selector only works for single typed IOs // The IO selector only works for single typed IOs
const ARDOUR::DataType t = _io->default_type (); const ARDOUR::DataType t = _io->default_type ();
@ -197,6 +201,8 @@ IOSelectorWindow::IOSelectorWindow (ARDOUR::Session& session, boost::shared_ptr<
signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), this)); signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), this));
resize (32768, 32768); resize (32768, 32768);
_selector.MaxSizeChanged.connect (mem_fun (*this, &IOSelectorWindow::max_size_changed));
} }
void void
@ -226,7 +232,12 @@ void
IOSelectorWindow::on_realize () IOSelectorWindow::on_realize ()
{ {
Window::on_realize (); Window::on_realize ();
set_max_size ();
}
void
IOSelectorWindow::set_max_size ()
{
pair<uint32_t, uint32_t> const m = _selector.max_size (); pair<uint32_t, uint32_t> const m = _selector.max_size ();
GdkGeometry g; GdkGeometry g;
@ -236,6 +247,14 @@ IOSelectorWindow::on_realize ()
set_geometry_hints (*this, g, Gdk::HINT_MAX_SIZE); set_geometry_hints (*this, g, Gdk::HINT_MAX_SIZE);
} }
void
IOSelectorWindow::max_size_changed ()
{
set_max_size ();
resize (32768, 32768);
}
PortInsertUI::PortInsertUI (ARDOUR::Session& sess, boost::shared_ptr<ARDOUR::PortInsert> pi) PortInsertUI::PortInsertUI (ARDOUR::Session& sess, boost::shared_ptr<ARDOUR::PortInsert> pi)
: input_selector (sess, pi->input()) : input_selector (sess, pi->input())

View file

@ -36,10 +36,14 @@ class IOSelector : public PortMatrix
void set_state (ARDOUR::BundleChannel c[2], bool); void set_state (ARDOUR::BundleChannel c[2], bool);
PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const; PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const;
void add_channel (boost::shared_ptr<ARDOUR::Bundle>); std::string add_channel_name () const;
void add_channel ();
bool can_remove_channels (int d) const { bool can_remove_channels (int d) const {
return d == _ours; return d == _ours;
} }
void remove_channel (ARDOUR::BundleChannel); void remove_channel (ARDOUR::BundleChannel);
bool can_rename_channels (int d) const { bool can_rename_channels (int d) const {
return false; return false;
@ -67,7 +71,7 @@ class IOSelector : public PortMatrix
} }
private: private:
int _other; int _other;
int _ours; int _ours;
boost::shared_ptr<ARDOUR::IO> _io; boost::shared_ptr<ARDOUR::IO> _io;
@ -90,6 +94,8 @@ class IOSelectorWindow : public Gtk::Window
IOSelector _selector; IOSelector _selector;
void io_name_changed (void *src); void io_name_changed (void *src);
void set_max_size ();
void max_size_changed ();
}; };

View file

@ -264,6 +264,12 @@ PortMatrix::popup_menu (
char buf [64]; char buf [64];
std::string const n = add_channel_name ();
if (!n.empty()) {
snprintf (buf, sizeof (buf), _("Add channel to '%s'"), n.c_str());
items.push_back (MenuElem (buf, mem_fun (*this, &PortMatrix::add_channel)));
}
for (int dim = 0; dim < 2; ++dim) { for (int dim = 0; dim < 2; ++dim) {
if (pg[dim]) { if (pg[dim]) {
@ -289,36 +295,28 @@ PortMatrix::popup_menu (
} }
if (bc[dim].bundle) { if (bc[dim].bundle) {
bool have_one = false; boost::weak_ptr<ARDOUR::Bundle> w (bc[dim].bundle);
if (can_rename_channels (dim)) {
snprintf (buf, sizeof (buf), _("Rename '%s'..."), bc[dim].bundle->channel_name (bc[dim].channel).c_str());
boost::weak_ptr<ARDOUR::Bundle> w (bc[dim].bundle);
items.push_back (
MenuElem (
buf,
bind (mem_fun (*this, &PortMatrix::rename_channel_proxy), w, bc[dim].channel)
)
);
have_one = true;
}
if (can_remove_channels (dim)) { if (can_remove_channels (dim)) {
snprintf (buf, sizeof (buf), _("Remove '%s'"), bc[dim].bundle->channel_name (bc[dim].channel).c_str()); snprintf (buf, sizeof (buf), _("Remove '%s'"), bc[dim].bundle->channel_name (bc[dim].channel).c_str());
boost::weak_ptr<ARDOUR::Bundle> w (bc[dim].bundle);
items.push_back ( items.push_back (
MenuElem ( MenuElem (
buf, buf,
bind (mem_fun (*this, &PortMatrix::remove_channel_proxy), w, bc[dim].channel) bind (mem_fun (*this, &PortMatrix::remove_channel_proxy), w, bc[dim].channel)
) )
); );
}
have_one = true;
if (can_rename_channels (dim)) {
snprintf (buf, sizeof (buf), _("Rename '%s'..."), bc[dim].bundle->channel_name (bc[dim].channel).c_str());
items.push_back (
MenuElem (
buf,
bind (mem_fun (*this, &PortMatrix::rename_channel_proxy), w, bc[dim].channel)
)
);
} }
boost::weak_ptr<ARDOUR::Bundle> w (bc[dim].bundle);
if (_show_only_bundles) { if (_show_only_bundles) {
snprintf (buf, sizeof (buf), _("%s all from '%s'"), disassociation_verb().c_str(), bc[dim].bundle->name().c_str()); snprintf (buf, sizeof (buf), _("%s all from '%s'"), disassociation_verb().c_str(), bc[dim].bundle->name().c_str());
} else { } else {
@ -349,7 +347,6 @@ PortMatrix::popup_menu (
_menu->popup (1, t); _menu->popup (1, t);
} }
void void
PortMatrix::remove_channel_proxy (boost::weak_ptr<ARDOUR::Bundle> b, uint32_t c) PortMatrix::remove_channel_proxy (boost::weak_ptr<ARDOUR::Bundle> b, uint32_t c)
{ {

View file

@ -124,7 +124,12 @@ public:
virtual PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const = 0; virtual PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const = 0;
virtual bool list_is_global (int) const = 0; virtual bool list_is_global (int) const = 0;
virtual void add_channel (boost::shared_ptr<ARDOUR::Bundle>) = 0; /** If adding a channel is allowed in this situation, return the name of the
* thing that it would be added to.
* @return Name.
*/
virtual std::string add_channel_name () const { return ""; }
virtual void add_channel () {}
virtual bool can_remove_channels (int) const = 0; virtual bool can_remove_channels (int) const = 0;
virtual void remove_channel (ARDOUR::BundleChannel) = 0; virtual void remove_channel (ARDOUR::BundleChannel) = 0;
virtual bool can_rename_channels (int) const = 0; virtual bool can_rename_channels (int) const = 0;

View file

@ -93,7 +93,6 @@ public:
return (dim == OTHER); return (dim == OTHER);
} }
void add_channel (boost::shared_ptr<ARDOUR::Bundle>) {}
bool can_remove_channels (int) const { bool can_remove_channels (int) const {
return false; return false;
} }