summaryrefslogtreecommitdiffstats
path: root/src/Port.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Port.cpp')
-rw-r--r--src/Port.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/Port.cpp b/src/Port.cpp
new file mode 100644
index 0000000..3f0d02b
--- /dev/null
+++ b/src/Port.cpp
@@ -0,0 +1,57 @@
+/* This file is part of Ganv.
+ * Copyright 2007-2015 David Robillard <http://drobilla.net>
+ *
+ * Ganv 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 3 of the License, or any later version.
+ *
+ * Ganv 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 Ganv. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <string>
+
+#include <glib.h>
+
+#include "ganv/Canvas.hpp"
+#include "ganv/Module.hpp"
+#include "ganv/Port.hpp"
+
+#include "./color.h"
+
+namespace Ganv {
+
+static void
+on_value_changed(GanvPort* port, double value, void* portmm)
+{
+ ((Port*)portmm)->signal_value_changed.emit(value);
+}
+
+/* Construct a Port on an existing module. */
+Port::Port(Module& module,
+ const std::string& name,
+ bool is_input,
+ uint32_t color)
+ : Box(module.canvas(),
+ GANV_BOX(ganv_port_new(module.gobj(), is_input,
+ "fill-color", color,
+ "border-color", PORT_BORDER_COLOR(color),
+ "border-width", 2.0,
+ "label", name.c_str(),
+ NULL)))
+{
+ g_signal_connect(gobj(), "value-changed",
+ G_CALLBACK(on_value_changed), this);
+}
+
+Module*
+Port::get_module() const
+{
+ return Glib::wrap(ganv_port_get_module(gobj()));
+}
+
+} // namespace Ganv