summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/Port.cpp15
-rw-r--r--src/gui/Port.hpp1
-rw-r--r--src/gui/PortMenu.cpp24
-rw-r--r--src/gui/PortPropertiesWindow.cpp166
-rw-r--r--src/gui/PortPropertiesWindow.hpp69
-rw-r--r--src/gui/wscript1
6 files changed, 22 insertions, 254 deletions
diff --git a/src/gui/Port.cpp b/src/gui/Port.cpp
index 2bdf2e43..0d82d0cd 100644
--- a/src/gui/Port.cpp
+++ b/src/gui/Port.cpp
@@ -89,6 +89,8 @@ Port::Port(App& app,
show_control();
pm->signal_property().connect(
sigc::mem_fun(this, &Port::property_changed));
+ pm->signal_property_removed().connect(
+ sigc::mem_fun(this, &Port::property_removed));
pm->signal_value_changed().connect(
sigc::mem_fun(this, &Port::value_changed));
}
@@ -121,7 +123,7 @@ void
Port::update_metadata()
{
SPtr<const PortModel> pm = _port_model.lock();
- if (_app.can_control(pm.get()) && pm->is_numeric()) {
+ if (pm && _app.can_control(pm.get()) && pm->is_numeric()) {
SPtr<const BlockModel> parent = dynamic_ptr_cast<const BlockModel>(pm->parent());
if (parent) {
float min = 0.0f;
@@ -435,13 +437,22 @@ Port::property_changed(const Raul::URI& key, const Atom& value)
}
}
+void
+Port::property_removed(const Raul::URI& key, const Atom& value)
+{
+ const URIs& uris = _app.uris();
+ if (key == uris.lv2_minimum || key == uris.lv2_maximum) {
+ update_metadata();
+ }
+}
+
bool
Port::on_selected(gboolean b)
{
if (b) {
SPtr<const PortModel> pm = _port_model.lock();
if (pm) {
- SPtr<const BlockModel> block = dynamic_ptr_cast<BlockModel>(pm->parent());
+ SPtr<const BlockModel> block = dynamic_ptr_cast<const BlockModel>(pm->parent());
GraphWindow* win = _app.window_factory()->parent_graph_window(block);
if (win && win->documentation_is_visible() && block->plugin_model()) {
bool html = false;
diff --git a/src/gui/Port.hpp b/src/gui/Port.hpp
index a8d16095..216b8356 100644
--- a/src/gui/Port.hpp
+++ b/src/gui/Port.hpp
@@ -78,6 +78,7 @@ private:
GraphBox* get_graph_box() const;
void property_changed(const Raul::URI& key, const Atom& value);
+ void property_removed(const Raul::URI& key, const Atom& value);
void moved();
void on_value_changed(double value);
diff --git a/src/gui/PortMenu.cpp b/src/gui/PortMenu.cpp
index 9c428dd8..138ee397 100644
--- a/src/gui/PortMenu.cpp
+++ b/src/gui/PortMenu.cpp
@@ -121,22 +121,14 @@ PortMenu::on_menu_set_max()
void
PortMenu::on_menu_reset_range()
{
- const URIs& uris = _app->uris();
- SPtr<const PortModel> model = dynamic_ptr_cast<const PortModel>(_object);
- SPtr<const BlockModel> parent = dynamic_ptr_cast<const BlockModel>(_object->parent());
-
- float min, max;
- parent->default_port_value_range(model, min, max);
-
- if (!std::isnan(min))
- _app->interface()->set_property(_object->uri(),
- uris.lv2_minimum,
- _app->forge().make(min));
-
- if (!std::isnan(max))
- _app->interface()->set_property(_object->uri(),
- uris.lv2_maximum,
- _app->forge().make(max));
+ const URIs& uris = _app->uris();
+ SPtr<const PortModel> model = dynamic_ptr_cast<const PortModel>(_object);
+
+ // Remove lv2:minimum and lv2:maximum properties
+ Resource::Properties remove;
+ remove.insert({uris.lv2_minimum, Resource::Property(uris.patch_wildcard)});
+ remove.insert({uris.lv2_maximum, Resource::Property(uris.patch_wildcard)});
+ _app->interface()->delta(_object->uri(), remove, Resource::Properties());
}
void
diff --git a/src/gui/PortPropertiesWindow.cpp b/src/gui/PortPropertiesWindow.cpp
deleted file mode 100644
index e4aec41d..00000000
--- a/src/gui/PortPropertiesWindow.cpp
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen 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 Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <cassert>
-#include <list>
-
-#include "ingen/Interface.hpp"
-#include "ingen/client/BlockModel.hpp"
-#include "ingen/client/PluginModel.hpp"
-
-#include "App.hpp"
-#include "PortPropertiesWindow.hpp"
-
-using namespace std;
-
-namespace Ingen {
-using namespace Client;
-namespace GUI {
-
-PortPropertiesWindow::PortPropertiesWindow(BaseObjectType* cobject,
- const Glib::RefPtr<Gtk::Builder>& xml)
- : Window(cobject)
- , _initial_min(0.0f)
- , _initial_max(1.0f)
-{
- xml->get_widget("port_properties_min_spinner", _min_spinner);
- xml->get_widget("port_properties_max_spinner", _max_spinner);
- xml->get_widget("port_properties_cancel_button", _cancel_button);
- xml->get_widget("port_properties_ok_button", _ok_button);
-
- _cancel_button->signal_clicked().connect(sigc::mem_fun(this,
- &PortPropertiesWindow::cancel));
-
- _ok_button->signal_clicked().connect(sigc::mem_fun(this,
- &PortPropertiesWindow::ok));
-}
-
-/** Set the port this window is associated with.
- * This function MUST be called before using this object in any way.
- */
-void
-PortPropertiesWindow::present(SPtr<const PortModel> pm)
-{
- assert(pm);
-
- for (auto& c : _connections)
- c.disconnect();
-
- _connections.clear();
-
- _port_model = pm;
-
- set_title(pm->path() + " Properties - Ingen");
-
- float min = 0.0f, max = 1.0f;
- SPtr<BlockModel> parent = dynamic_ptr_cast<BlockModel>(_port_model->parent());
- if (parent)
- parent->port_value_range(_port_model, min, max,
- _app->sample_rate());
-
- _initial_min = min;
- _initial_max = max;
-
- _min_spinner->set_value(min);
- _connections.push_back(
- _min_spinner->signal_value_changed().connect(
- sigc::mem_fun(*this, &PortPropertiesWindow::min_changed)));
-
- _max_spinner->set_value(max);
- _connections.push_back(
- _max_spinner->signal_value_changed().connect(
- sigc::mem_fun(*this, &PortPropertiesWindow::max_changed)));
-
- _connections.push_back(
- pm->signal_property().connect(
- sigc::mem_fun(this, &PortPropertiesWindow::property_changed)));
-
- Gtk::Window::present();
-}
-
-void
-PortPropertiesWindow::property_changed(const Raul::URI& key,
- const Atom& value)
-{
- const URIs& uris = _app->uris();
- if (value.type() == uris.forge.Float) {
- if (key == uris.lv2_minimum)
- _min_spinner->set_value(value.get<float>());
- else if (key == uris.lv2_maximum)
- _max_spinner->set_value(value.get<float>());
- }
-}
-
-void
-PortPropertiesWindow::min_changed()
-{
- const float val = _port_model->value().get<float>();
- float min = _min_spinner->get_value();
- float max = _max_spinner->get_value();
-
- if (min > val) {
- _min_spinner->set_value(val);
- return; // avoid recursion
- }
-
- if (max <= min) {
- max = min + 1.0;
- _max_spinner->set_value(max);
- }
-}
-
-void
-PortPropertiesWindow::max_changed()
-{
- const float val = _port_model->value().get<float>();
- float min = _min_spinner->get_value();
- float max = _max_spinner->get_value();
-
- if (max < val) {
- _max_spinner->set_value(val);
- return; // avoid recursion
- }
-
- if (min >= max) {
- min = max - 1.0;
- _min_spinner->set_value(min);
- }
-}
-
-void
-PortPropertiesWindow::cancel()
-{
- hide();
-}
-
-void
-PortPropertiesWindow::ok()
-{
- const URIs& uris = _app->uris();
- Resource::Properties props;
- props.insert(
- make_pair(uris.lv2_minimum,
- _app->forge().make(float(_min_spinner->get_value()))));
- props.insert(
- make_pair(uris.lv2_maximum,
- _app->forge().make(float(_max_spinner->get_value()))));
- _app->interface()->put(_port_model->uri(), props);
- hide();
-}
-
-} // namespace GUI
-} // namespace Ingen
-
diff --git a/src/gui/PortPropertiesWindow.hpp b/src/gui/PortPropertiesWindow.hpp
deleted file mode 100644
index 684a2dfb..00000000
--- a/src/gui/PortPropertiesWindow.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- This file is part of Ingen.
- Copyright 2007-2012 David Robillard <http://drobilla.net/>
-
- Ingen is free software: you can redistribute it and/or modify it under the
- terms of the GNU Affero General Public License as published by the Free
- Software Foundation, either version 3 of the License, or any later version.
-
- Ingen 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 Affero General Public License for details.
-
- You should have received a copy of the GNU Affero General Public License
- along with Ingen. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef INGEN_GUI_PORTPROPERTIESWINDOW_HPP
-#define INGEN_GUI_PORTPROPERTIESWINDOW_HPP
-
-#include <list>
-
-#include <gtkmm/builder.h>
-#include <gtkmm/spinbutton.h>
-
-#include "ingen/client/PortModel.hpp"
-#include "ingen/types.hpp"
-
-#include "Window.hpp"
-
-namespace Ingen {
-namespace GUI {
-
-/** Port properties window.
- *
- * Loaded from XML as a derived object.
- *
- * \ingroup GUI
- */
-class PortPropertiesWindow : public Window
-{
-public:
- PortPropertiesWindow(BaseObjectType* cobject,
- const Glib::RefPtr<Gtk::Builder>& xml);
-
- void present(SPtr<const Client::PortModel> port_model);
-
-private:
- void property_changed(const Raul::URI& key, const Atom& value);
- void min_changed();
- void max_changed();
-
- void ok();
- void cancel();
-
- float _initial_min;
- float _initial_max;
-
- SPtr<const Client::PortModel> _port_model;
- Gtk::SpinButton* _min_spinner;
- Gtk::SpinButton* _max_spinner;
- Gtk::Button* _cancel_button;
- Gtk::Button* _ok_button;
- std::list<sigc::connection> _connections;
-};
-
-} // namespace GUI
-} // namespace Ingen
-
-#endif // INGEN_GUI_PORTPROPERTIESWINDOW_HPP
diff --git a/src/gui/wscript b/src/gui/wscript
index 62731abe..153c4d15 100644
--- a/src/gui/wscript
+++ b/src/gui/wscript
@@ -47,7 +47,6 @@ def build(bld):
PluginMenu.cpp
Port.cpp
PortMenu.cpp
- PortPropertiesWindow.cpp
PropertiesWindow.cpp
RDFS.cpp
RenameWindow.cpp