Add small GUI to select Mackie / BCF2000 emulation for the mackie surface.

git-svn-id: svn://localhost/ardour2/branches/3.0@9467 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2011-05-04 09:22:11 +00:00
parent cff8af89de
commit ba8a593c29
4 changed files with 108 additions and 1 deletions

View file

@ -0,0 +1,97 @@
/*
Copyright (C) 2010 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <gtkmm/comboboxtext.h>
#include <gtkmm/box.h>
#include "gtkmm2ext/utils.h"
#include "ardour/rc_configuration.h"
#include "mackie_control_protocol.h"
#include "i18n.h"
using namespace std;
class MackieControlProtocolGUI : public Gtk::VBox
{
public:
MackieControlProtocolGUI (MackieControlProtocol &);
private:
void surface_combo_changed ();
MackieControlProtocol& _cp;
Gtk::ComboBoxText _surface_combo;
};
void*
MackieControlProtocol::get_gui () const
{
if (!_gui) {
const_cast<MackieControlProtocol*>(this)->build_gui ();
}
return _gui;
}
void
MackieControlProtocol::tear_down_gui ()
{
delete (MackieControlProtocolGUI*) _gui;
}
void
MackieControlProtocol::build_gui ()
{
_gui = (void *) new MackieControlProtocolGUI (*this);
}
MackieControlProtocolGUI::MackieControlProtocolGUI (MackieControlProtocol& p)
: _cp (p)
{
Gtk::HBox* hbox = Gtk::manage (new Gtk::HBox);
hbox->set_spacing (4);
hbox->pack_start (*manage (new Gtk::Label (_("Surface to support:"))));
hbox->pack_start (_surface_combo);
vector<string> surfaces;
surfaces.push_back (_("Mackie Control"));
surfaces.push_back (_("Behringer BCF2000"));
Gtkmm2ext::set_popdown_strings (_surface_combo, surfaces);
if (ARDOUR::Config->get_mackie_emulation () == X_("mcu")) {
_surface_combo.set_active_text (surfaces.front ());
} else {
_surface_combo.set_active_text (surfaces.back ());
}
pack_start (*hbox);
show_all ();
_surface_combo.signal_changed().connect (sigc::mem_fun (*this, &MackieControlProtocolGUI::surface_combo_changed));
}
void
MackieControlProtocolGUI::surface_combo_changed ()
{
if (_surface_combo.get_active_text() == _("Mackie Control")) {
ARDOUR::Config->set_mackie_emulation (X_("mcu"));
} else {
ARDOUR::Config->set_mackie_emulation (X_("bcf"));
}
}

View file

@ -83,6 +83,7 @@ MackieControlProtocol::MackieControlProtocol (Session& session)
, _timecode_type (ARDOUR::AnyTime::BBT)
, _input_bundle (new ARDOUR::Bundle (_("Mackie Control In"), true))
, _output_bundle (new ARDOUR::Bundle (_("Mackie Control Out"), false))
, _gui (0)
{
DEBUG_TRACE (DEBUG::MackieControl, "MackieControlProtocol::MackieControlProtocol\n");
}

View file

@ -87,6 +87,10 @@ class MackieControlProtocol
std::list<boost::shared_ptr<ARDOUR::Bundle> > bundles ();
bool has_editor () const { return true; }
void* get_gui () const;
void tear_down_gui ();
// control events
void handle_control_event(Mackie::SurfacePort & port, Mackie::Control & control, const Mackie::ControlState & state);
@ -344,6 +348,9 @@ class MackieControlProtocol
boost::shared_ptr<ARDOUR::Bundle> _input_bundle;
// Bundle to represent our output ports
boost::shared_ptr<ARDOUR::Bundle> _output_bundle;
void build_gui ();
void* _gui;
};
#endif // ardour_mackie_control_protocol_h

View file

@ -25,6 +25,7 @@ def build(bld):
bcf_surface_generated.cc
controls.cc
dummy_port.cc
gui.cc
interface.cc
mackie_button_handler.cc
mackie_control_protocol.cc
@ -45,7 +46,8 @@ def build(bld):
obj.includes = ['.', './mackie']
obj.name = 'libardour_mcp'
obj.target = 'ardour_mcp'
obj.uselib_local = 'libardour libardour_cp'
obj.uselib = 'GTKMM'
obj.uselib_local = 'libardour libardour_cp libgtkmm2ext'
obj.vnum = LIBARDOUR_MCP_LIB_VERSION
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3', 'surfaces')