/* Copyright (C) 2014 Waves Audio Ltd. 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 "midi_device_connection_control.h" #include "pbd/convert.h" const char * MidiDeviceConnectionControl::capture_id_name = "_capture_id_name"; const char * MidiDeviceConnectionControl::playback_id_name = "_playback_id_name"; MidiDeviceConnectionControl::MidiDeviceConnectionControl (const std::string& midi_device_name, bool has_capture, bool capture_active, bool has_playback, bool playback_active) : Gtk::Layout() , _has_capture(has_capture) , _capture_active(capture_active) , _has_playback(has_playback) , _playback_active(playback_active) { build_layout("midi_device_control.xml"); _capture_on_button = &_children.get_waves_button ("capture_on_button"); _capture_off_button = &_children.get_waves_button ("capture_off_button"); if (!_has_capture) { _capture_on_button->hide(); _capture_off_button->hide(); } _playback_on_button = &_children.get_waves_button ("playback_on_button"); _playback_off_button = &_children.get_waves_button ("playback_off_button"); if (!_has_playback) { _playback_on_button->hide(); _playback_off_button->hide(); } _name_label = &_children.get_label ("midi_device_name_label"); init(midi_device_name, capture_active, playback_active); } void MidiDeviceConnectionControl::init(const std::string& name, bool capture_active, bool playback_active ) { if (_has_capture ) { _capture_on_button->signal_clicked.connect (sigc::mem_fun (*this, &MidiDeviceConnectionControl::on_capture_active_on)); _capture_off_button->signal_clicked.connect (sigc::mem_fun (*this, &MidiDeviceConnectionControl::on_capture_active_off)); } if (_has_playback ) { _playback_on_button->signal_clicked.connect (sigc::mem_fun (*this, &MidiDeviceConnectionControl::on_playback_active_on)); _playback_off_button->signal_clicked.connect (sigc::mem_fun (*this, &MidiDeviceConnectionControl::on_playback_active_off)); } _name_label->set_text (name); set_capture_active(capture_active); set_playback_active(playback_active); } bool MidiDeviceConnectionControl::build_layout (const std::string& file_name) { const XMLTree* layout = WavesUI::load_layout(file_name); if (layout == NULL) { return false; } XMLNode* root = layout->root(); if ((root == NULL) || strcasecmp(root->name().c_str(), "layout")) { return false; } WavesUI::set_attributes(*this, *root, XMLNodeMap()); WavesUI::create_ui(layout, *this, _children); return true; } void MidiDeviceConnectionControl::set_capture_active (bool active) { if (!_has_capture) { return; } _capture_on_button->set_active (active); _capture_off_button->set_active (!active); _capture_active = active; } void MidiDeviceConnectionControl::set_playback_active (bool active) { if (!_has_playback) { return; } _playback_on_button->set_active (active); _playback_off_button->set_active (!active); _playback_active = active; } void MidiDeviceConnectionControl::on_capture_active_on(WavesButton*) { if (_capture_active) { return; } set_capture_active (true); signal_capture_active_changed(this, true); } void MidiDeviceConnectionControl::on_capture_active_off(WavesButton*) { if (!_capture_active) { return; } set_capture_active (false); signal_capture_active_changed(this, false); } void MidiDeviceConnectionControl::on_playback_active_on(WavesButton*) { if (_playback_active) { return; } set_playback_active (true); signal_playback_active_changed(this, true); } void MidiDeviceConnectionControl::on_playback_active_off(WavesButton*) { if (!_playback_active) { return; } set_playback_active (false); signal_playback_active_changed(this, false); }