summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-12-04 07:25:09 +0000
committerDavid Robillard <d@drobilla.net>2011-12-04 07:25:09 +0000
commita9bea6c1d981d6bc53817fce6db4c9bc0f1e1e62 (patch)
treee1a98f16528a9f085774f824152e02c942646f9a /src
parent314822117b6af5c2468f2a7772092591cd15044b (diff)
downloadpatchage-a9bea6c1d981d6bc53817fce6db4c9bc0f1e1e62.tar.gz
patchage-a9bea6c1d981d6bc53817fce6db4c9bc0f1e1e62.tar.bz2
patchage-a9bea6c1d981d6bc53817fce6db4c9bc0f1e1e62.zip
Move module ports down to C level.
Add STL-style port iteration API to Module. git-svn-id: http://svn.drobilla.net/lad/trunk/patchage@3795 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src')
-rw-r--r--src/PatchageCanvas.cpp20
-rw-r--r--src/PatchageModule.cpp6
2 files changed, 15 insertions, 11 deletions
diff --git a/src/PatchageCanvas.cpp b/src/PatchageCanvas.cpp
index 36b207d..d20add5 100644
--- a/src/PatchageCanvas.cpp
+++ b/src/PatchageCanvas.cpp
@@ -133,6 +133,16 @@ struct RemovePortsData {
};
static void
+delete_port_if_matches(FlowCanvasPort* port, void* cdata)
+{
+ RemovePortsData* data = (RemovePortsData*)cdata;
+ PatchagePort* pport = dynamic_cast<PatchagePort*>(Glib::wrap(port));
+ if (pport && data->pred(pport)) {
+ delete pport;
+ }
+}
+
+static void
remove_ports_matching(FlowCanvasNode* node, void* cdata)
{
if (!FLOW_CANVAS_IS_MODULE(node)) {
@@ -146,14 +156,8 @@ remove_ports_matching(FlowCanvasNode* node, void* cdata)
}
RemovePortsData* data = (RemovePortsData*)cdata;
-
- FlowCanvas::Module::Ports ports = pmodule->ports(); // copy
- for (FlowCanvas::Module::Ports::iterator p = ports.begin();
- p != ports.end(); ++p) {
- if (data->pred(dynamic_cast<PatchagePort*>(*p))) {
- delete *p;
- }
- }
+
+ pmodule->for_each_port(delete_port_if_matches, data);
if (pmodule->num_ports() == 0) {
data->empty.insert(pmodule);
diff --git a/src/PatchageModule.cpp b/src/PatchageModule.cpp
index 85538cd..4576261 100644
--- a/src/PatchageModule.cpp
+++ b/src/PatchageModule.cpp
@@ -45,7 +45,7 @@ PatchageModule::update_menu()
if (_type == InputOutput) {
bool has_in = false;
bool has_out = false;
- for (Ports::const_iterator p = _ports.begin(); p != _ports.end(); ++p) {
+ for (const_iterator p = begin(); p != end(); ++p) {
if ((*p)->is_input()) {
has_in = true;
} else {
@@ -145,14 +145,14 @@ PatchageModule::remove_port(FlowCanvas::Port* port)
void
PatchageModule::menu_disconnect_all()
{
- for (Ports::iterator p = _ports.begin(); p != _ports.end(); ++p)
+ for (iterator p = begin(); p != end(); ++p)
(*p)->disconnect_all();
}
PatchagePort*
PatchageModule::get_port(const std::string& name)
{
- for (Ports::const_iterator p = _ports.begin(); p != _ports.end(); ++p) {
+ for (iterator p = begin(); p != end(); ++p) {
if ((*p)->get_label() == name) {
return dynamic_cast<PatchagePort*>(*p);
}