summaryrefslogtreecommitdiffstats
path: root/src/gui/Port.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2015-02-17 03:41:45 +0000
committerDavid Robillard <d@drobilla.net>2015-02-17 03:41:45 +0000
commitf1c1d019c14ddb184078c79cd5d6a0631a644acd (patch)
tree8f625d85d8983a7fba5b2f2f7a0ec22a12e5d832 /src/gui/Port.cpp
parentfb8f05cdd3bcb7c322d5d67dac009bf668e209df (diff)
downloadingen-f1c1d019c14ddb184078c79cd5d6a0631a644acd.tar.gz
ingen-f1c1d019c14ddb184078c79cd5d6a0631a644acd.tar.bz2
ingen-f1c1d019c14ddb184078c79cd5d6a0631a644acd.zip
Fix display of labels when port is created without.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5581 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/gui/Port.cpp')
-rw-r--r--src/gui/Port.cpp52
1 files changed, 35 insertions, 17 deletions
diff --git a/src/gui/Port.cpp b/src/gui/Port.cpp
index f15d067c..07e654db 100644
--- a/src/gui/Port.cpp
+++ b/src/gui/Port.cpp
@@ -44,25 +44,9 @@ Port*
Port::create(App& app,
Ganv::Module& module,
SPtr<const PortModel> pm,
- bool human_name,
bool flip)
{
- Glib::ustring label;
- if (app.world()->conf().option("port-labels").get<int32_t>()) {
- if (human_name) {
- const Atom& name = pm->get_property(app.uris().lv2_name);
- if (name.type() == app.forge().String) {
- label = name.ptr<char>();
- } else {
- const SPtr<const BlockModel> parent(dynamic_ptr_cast<const BlockModel>(pm->parent()));
- if (parent && parent->plugin_model())
- label = parent->plugin_model()->port_human_name(pm->index());
- }
- } else {
- label = pm->path().symbol();
- }
- }
- return new Port(app, module, pm, label, flip);
+ return new Port(app, module, pm, port_label(app, pm), flip);
}
/** @param flip Make an input port appear as an output port, and vice versa.
@@ -118,6 +102,40 @@ Port::~Port()
_app.activity_port_destroyed(this);
}
+std::string
+Port::port_label(App& app, SPtr<const PortModel> pm)
+{
+ if (!pm) {
+ return "";
+ }
+
+ std::string label;
+ if (app.world()->conf().option("port-labels").get<int32_t>()) {
+ if (app.world()->conf().option("human-names").get<int32_t>()) {
+ const Atom& name = pm->get_property(app.uris().lv2_name);
+ if (name.type() == app.forge().String) {
+ label = name.ptr<char>();
+ } else {
+ const SPtr<const BlockModel> parent(
+ dynamic_ptr_cast<const BlockModel>(pm->parent()));
+ if (parent && parent->plugin_model())
+ label = parent->plugin_model()->port_human_name(pm->index());
+ }
+ } else {
+ label = pm->path().symbol();
+ }
+ }
+ return label;
+}
+
+void
+Port::ensure_label()
+{
+ if (!get_label()) {
+ set_label(port_label(_app, _port_model.lock()).c_str());
+ }
+}
+
void
Port::update_metadata()
{