ladish/grauph/src/progs/gtk/PatchView.cpp

120 lines
3.1 KiB
C++

/* This file is part of Om. Copyright (C) 2006 Dave Robillard.
*
* Om 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.
*
* Om 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 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.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "PatchView.h"
#include <iostream>
#include <cassert>
#include <fstream>
#include "App.h"
#include "OmFlowCanvas.h"
#include "PatchController.h"
#include "LoadPluginWindow.h"
#include "PatchModel.h"
#include "NewSubpatchWindow.h"
#include "LoadSubpatchWindow.h"
#include "NodeControlWindow.h"
#include "PatchPropertiesWindow.h"
#include "PatchTreeWindow.h"
#include "Controller.h"
namespace OmGtk {
PatchView::PatchView(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& xml)
: Gtk::Box(cobject),
m_patch(NULL),
m_canvas(NULL),
m_enable_signal(true)
{
property_visible() = false;
xml->get_widget("patch_canvas_scrolledwindow", m_canvas_scrolledwindow);
xml->get_widget("patch_zoom_scale", m_zoom_slider);
xml->get_widget("patch_polyphony_label", m_polyphony_label);
xml->get_widget("patch_process_checkbutton", m_process_checkbutton);
m_zoom_slider->signal_value_changed().connect( sigc::mem_fun(this, &PatchView::zoom_changed));
m_process_checkbutton->signal_toggled().connect(sigc::mem_fun(this, &PatchView::process_toggled));
}
/** Sets the patch controller for this window and initializes everything.
*
* This function MUST be called before using the window in any way!
*/
void
PatchView::patch_controller(PatchController* pc)
{
//m_patch = new PatchController(pm, controller);
m_patch = pc;
m_canvas = new OmFlowCanvas(pc, 1600*2, 1200*2);
m_canvas_scrolledwindow->add(*m_canvas);
//m_canvas->show();
//m_canvas_scrolledwindow->show();
char txt[4];
snprintf(txt, 8, "%zd", pc->patch_model()->poly());
m_polyphony_label->set_text(txt);
//m_description_window->patch_model(pc->model());
}
void
PatchView::show_control_window()
{
if (m_patch != NULL)
m_patch->show_control_window();
}
void
PatchView::zoom_changed()
{
float z = m_zoom_slider->get_value();
m_canvas->zoom(z);
}
void
PatchView::process_toggled()
{
if (!m_enable_signal)
return;
if (m_process_checkbutton->get_active()) {
Controller::instance().enable_patch(m_patch->model()->path());
App::instance().patch_tree()->patch_enabled(m_patch->model()->path());
} else {
Controller::instance().disable_patch(m_patch->model()->path());
App::instance().patch_tree()->patch_disabled(m_patch->model()->path());
}
}
void
PatchView::enabled(bool e)
{
m_enable_signal = false;
m_process_checkbutton->set_active(e);
m_enable_signal = true;
}
} // namespace OmGtk