summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Configuration.cpp6
-rw-r--r--src/World.cpp5
-rw-r--r--src/client/ClientStore.cpp5
-rw-r--r--src/gui/GraphBox.cpp12
-rw-r--r--src/gui/GraphBox.hpp2
-rw-r--r--src/gui/PropertiesWindow.cpp3
-rw-r--r--src/gui/ingen_gui.ui1346
-rw-r--r--src/server/Broadcaster.cpp18
-rw-r--r--src/server/Broadcaster.hpp21
-rw-r--r--src/server/Context.cpp6
-rw-r--r--src/server/Context.hpp8
-rw-r--r--src/server/DuplexPort.cpp5
-rw-r--r--src/server/InputPort.cpp12
-rw-r--r--src/server/OutputPort.cpp5
-rw-r--r--src/server/PortImpl.cpp37
-rw-r--r--src/server/PortImpl.hpp18
-rw-r--r--src/server/events/Delta.cpp12
-rw-r--r--src/server/internals/Controller.cpp2
-rw-r--r--src/server/internals/Trigger.cpp2
19 files changed, 852 insertions, 673 deletions
diff --git a/src/Configuration.cpp b/src/Configuration.cpp
index 2776d560..25f3355c 100644
--- a/src/Configuration.cpp
+++ b/src/Configuration.cpp
@@ -38,9 +38,9 @@ Configuration::Configuration(Forge& forge)
, _desc(
"Ingen is a flexible modular system that be used in various ways.\n"
"The engine can run as a stand-alone server controlled via network protocol,\n"
-"or internal to another process (e.g. the GUI). The GUI, or other\n"
-"clients, can communicate with the engine via any supported protocol, or host the\n"
-"engine in the same process. Many clients can connect to an engine at once.\n\n"
+"or internal to another process (e.g. the GUI). The GUI, or other clients,\n"
+"can communicate with the engine via any supported protocol, or run in the\n"
+"same process. Many clients can connect to an engine at once.\n\n"
"Examples:\n"
" ingen -e # Run an engine, listen for connections\n"
" ingen -g # Run a GUI, connect to running engine\n"
diff --git a/src/World.cpp b/src/World.cpp
index 218da83c..27e056b6 100644
--- a/src/World.cpp
+++ b/src/World.cpp
@@ -40,7 +40,10 @@ class EngineBase;
class Interface;
class Store;
-namespace Serialisation { class Parser; class Serialiser; }
+namespace Serialisation {
+class Parser;
+class Serialiser;
+}
/** Load a dynamic module from the default path.
*
diff --git a/src/client/ClientStore.cpp b/src/client/ClientStore.cpp
index 8c48ab72..4e4dd7d8 100644
--- a/src/client/ClientStore.cpp
+++ b/src/client/ClientStore.cpp
@@ -323,6 +323,11 @@ ClientStore::delta(const Raul::URI& uri,
std::cerr << "}" << endl;
#endif
+ if (uri == Raul::URI("ingen:/clients/this")) {
+ // Client property, which we don't store (yet?)
+ return;
+ }
+
if (!Node::uri_is_path(uri)) {
_log.error(Raul::fmt("Delta for unknown subject <%1%>\n")
% uri.c_str());
diff --git a/src/gui/GraphBox.cpp b/src/gui/GraphBox.cpp
index 84116196..c280ba64 100644
--- a/src/gui/GraphBox.cpp
+++ b/src/gui/GraphBox.cpp
@@ -87,6 +87,7 @@ GraphBox::GraphBox(BaseObjectType* cobject,
xml->get_widget("graph_view_engine_window_menuitem", _menu_view_engine_window);
xml->get_widget("graph_properties_menuitem", _menu_view_graph_properties);
xml->get_widget("graph_fullscreen_menuitem", _menu_fullscreen);
+ xml->get_widget("graph_animate_canvas_menuitem", _menu_animate_canvas);
xml->get_widget("graph_human_names_menuitem", _menu_human_names);
xml->get_widget("graph_show_port_names_menuitem", _menu_show_port_names);
xml->get_widget("graph_zoom_in_menuitem", _menu_zoom_in);
@@ -124,6 +125,8 @@ GraphBox::GraphBox(BaseObjectType* cobject,
sigc::mem_fun(this, &GraphBox::event_quit));
_menu_fullscreen->signal_activate().connect(
sigc::mem_fun(this, &GraphBox::event_fullscreen_toggled));
+ _menu_animate_canvas->signal_activate().connect(
+ sigc::mem_fun(this, &GraphBox::event_animate_canvas_toggled));
_menu_human_names->signal_activate().connect(
sigc::mem_fun(this, &GraphBox::event_human_names_toggled));
_menu_show_doc_pane->signal_activate().connect(
@@ -693,6 +696,15 @@ GraphBox::event_status_bar_toggled()
}
void
+GraphBox::event_animate_canvas_toggled()
+{
+ _app->interface()->set_property(
+ Raul::URI("ingen:/clients/this"),
+ _app->uris().ingen_broadcast,
+ _app->forge().make((bool)_menu_animate_canvas->get_active()));
+}
+
+void
GraphBox::event_human_names_toggled()
{
_view->canvas()->show_human_names(_menu_human_names->get_active());
diff --git a/src/gui/GraphBox.hpp b/src/gui/GraphBox.hpp
index 663a3c14..0b44ba99 100644
--- a/src/gui/GraphBox.hpp
+++ b/src/gui/GraphBox.hpp
@@ -114,6 +114,7 @@ private:
void event_fullscreen_toggled();
void event_doc_pane_toggled();
void event_status_bar_toggled();
+ void event_animate_canvas_toggled();
void event_human_names_toggled();
void event_port_names_toggled();
void event_zoom_in();
@@ -144,6 +145,7 @@ private:
Gtk::MenuItem* _menu_select_all;
Gtk::MenuItem* _menu_close;
Gtk::MenuItem* _menu_quit;
+ Gtk::CheckMenuItem* _menu_animate_canvas;
Gtk::CheckMenuItem* _menu_human_names;
Gtk::CheckMenuItem* _menu_show_port_names;
Gtk::CheckMenuItem* _menu_show_doc_pane;
diff --git a/src/gui/PropertiesWindow.cpp b/src/gui/PropertiesWindow.cpp
index 0f21a4fb..50fb0903 100644
--- a/src/gui/PropertiesWindow.cpp
+++ b/src/gui/PropertiesWindow.cpp
@@ -301,7 +301,8 @@ PropertiesWindow::on_show()
}
void
-PropertiesWindow::property_changed(const Raul::URI& predicate, const Raul::Atom& value)
+PropertiesWindow::property_changed(const Raul::URI& predicate,
+ const Raul::Atom& value)
{
Records::iterator r = _records.find(predicate);
if (r == _records.end()) {
diff --git a/src/gui/ingen_gui.ui b/src/gui/ingen_gui.ui
index 8d999d57..5fb523bf 100644
--- a/src/gui/ingen_gui.ui
+++ b/src/gui/ingen_gui.ui
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy toplevel-contextual -->
<object class="GtkAboutDialog" id="about_win">
<property name="can_focus">False</property>
<property name="destroy_with_parent">True</property>
@@ -25,10 +26,10 @@ Contributors:
Thorsten Wilms</property>
<property name="wrap_license">True</property>
<child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox3">
+ <object class="GtkVBox" id="dialog-vbox3">
<property name="can_focus">False</property>
<child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area3">
+ <object class="GtkHButtonBox" id="dialog-action_area3">
<property name="can_focus">False</property>
</object>
<packing>
@@ -46,9 +47,9 @@ Contributors:
<property name="can_focus">False</property>
<child>
<object class="GtkCheckMenuItem" id="canvas_menu_edit">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_Edit</property>
<property name="use_underline">True</property>
<property name="active">True</property>
@@ -63,9 +64,9 @@ Contributors:
<child>
<object class="GtkImageMenuItem" id="input1">
<property name="label">_Input</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<child type="submenu">
@@ -73,9 +74,9 @@ Contributors:
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="canvas_menu_add_audio_input">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_Audio</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_canvas_menu_add_audio_input_activate" swapped="no"/>
@@ -83,9 +84,9 @@ Contributors:
</child>
<child>
<object class="GtkMenuItem" id="canvas_menu_add_cv_input">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">C_V</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_canvas_menu_add_cv_input_activate" swapped="no"/>
@@ -93,9 +94,9 @@ Contributors:
</child>
<child>
<object class="GtkMenuItem" id="canvas_menu_add_control_input">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_Control</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_canvas_menu_add_control_input_activate" swapped="no"/>
@@ -103,9 +104,9 @@ Contributors:
</child>
<child>
<object class="GtkMenuItem" id="canvas_menu_add_event_input">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_Event</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_canvas_menu_add_event_input_activate" swapped="no"/>
@@ -118,9 +119,9 @@ Contributors:
<child>
<object class="GtkImageMenuItem" id="output1">
<property name="label">_Output</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<child type="submenu">
@@ -128,9 +129,9 @@ Contributors:
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="canvas_menu_add_audio_output">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_Audio</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_canvas_menu_add_audio_output_activate" swapped="no"/>
@@ -138,9 +139,9 @@ Contributors:
</child>
<child>
<object class="GtkMenuItem" id="canvas_menu_add_cv_output">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">C_V</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_canvas_menu_add_cv_output_activate" swapped="no"/>
@@ -148,9 +149,9 @@ Contributors:
</child>
<child>
<object class="GtkMenuItem" id="canvas_menu_add_control_output">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_Control</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_canvas_menu_add_control_output_activate" swapped="no"/>
@@ -158,9 +159,9 @@ Contributors:
</child>
<child>
<object class="GtkMenuItem" id="canvas_menu_add_event_output">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_Event</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_canvas_menu_add_event_output_activate" swapped="no"/>
@@ -173,9 +174,9 @@ Contributors:
<child>
<object class="GtkImageMenuItem" id="canvas_menu_load_plugin">
<property name="label">_Find Plugin...</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_canvas_menu_add_plugin_activate" swapped="no"/>
@@ -184,9 +185,9 @@ Contributors:
<child>
<object class="GtkImageMenuItem" id="canvas_menu_load_graph">
<property name="label">_Load Graph...</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_canvas_menu_load_graph_activate" swapped="no"/>
@@ -195,9 +196,9 @@ Contributors:
<child>
<object class="GtkImageMenuItem" id="canvas_menu_new_graph">
<property name="label">_New Graph...</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_canvas_menu_new_graph_activate" swapped="no"/>
@@ -212,9 +213,9 @@ Contributors:
<child>
<object class="GtkImageMenuItem" id="canvas_menu_properties">
<property name="label">P_roperties...</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_canvas_menu_properties_activate" swapped="no"/>
@@ -245,18 +246,22 @@ Contributors:
</object>
<packing>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkEntry" id="config_path_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -272,7 +277,7 @@ Contributors:
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -285,7 +290,7 @@ Contributors:
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
</object>
@@ -304,10 +309,10 @@ Contributors:
<child>
<object class="GtkButton" id="config_save_button">
<property name="label">gtk-save</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -319,10 +324,10 @@ Contributors:
<child>
<object class="GtkButton" id="config_cancel_button">
<property name="label">gtk-cancel</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -334,10 +339,10 @@ Contributors:
<child>
<object class="GtkButton" id="config_ok_button">
<property name="label">gtk-ok</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -363,23 +368,23 @@ Contributors:
<property name="resizable">False</property>
<property name="type_hint">dialog</property>
<child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox4">
+ <object class="GtkVBox" id="dialog-vbox4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area4">
+ <object class="GtkHButtonBox" id="dialog-action_area4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="connect_quit_button">
<property name="label">gtk-quit</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -391,12 +396,12 @@ Contributors:
<child>
<object class="GtkButton" id="connect_disconnect_button">
<property name="label">gtk-disconnect</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -408,12 +413,12 @@ Contributors:
<child>
<object class="GtkButton" id="connect_connect_button">
<property name="label">gtk-connect</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -525,6 +530,10 @@ Contributors:
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
<property name="climb_rate">1</property>
<property name="numeric">True</property>
</object>
@@ -555,6 +564,10 @@ Contributors:
<property name="activates_default">True</property>
<property name="width_chars">28</property>
<property name="text" translatable="yes">unix:///tmp/ingen.sock</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="expand">True</property>
@@ -574,25 +587,25 @@ Contributors:
<child>
<object class="GtkRadioButton" id="connect_server_radiobutton">
<property name="label" translatable="yes">_Connect to running server at: </property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="connect_launch_radiobutton">
<property name="label" translatable="yes">_Launch and connect to server on port: </property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
<property name="group">connect_server_radiobutton</property>
@@ -601,17 +614,17 @@ Contributors:
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="connect_internal_radiobutton">
<property name="label" translatable="yes">Use _internal engine</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
<property name="group">connect_server_radiobutton</property>
@@ -620,7 +633,7 @@ Contributors:
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -635,7 +648,7 @@ Contributors:
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
</object>
@@ -665,10 +678,10 @@ Contributors:
<child>
<object class="GtkButton" id="connect_deactivate_button">
<property name="label" translatable="yes">D_eactivate</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
</object>
<packing>
@@ -680,10 +693,10 @@ Contributors:
<child>
<object class="GtkButton" id="connect_activate_button">
<property name="label" translatable="yes">_Activate</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
</object>
<packing>
@@ -715,28 +728,577 @@ Contributors:
<action-widget response="-6">connect_connect_button</action-widget>
</action-widgets>
</object>
+ <object class="GtkWindow" id="graph_tree_win">
+ <property name="width_request">320</property>
+ <property name="height_request">340</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">8</property>
+ <property name="title" translatable="yes">Graphs - Ingen</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow8">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="border_width">3</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="graphs_treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="rules_hint">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkWindow" id="graph_win">
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">Ingen</property>
+ <property name="default_width">776</property>
+ <property name="default_height">480</property>
+ <child>
+ <object class="GtkVBox" id="graph_win_vbox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuBar" id="menubar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuItem" id="graph_file_menu">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_File</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="graph_file_menu_menu">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_import_menuitem">
+ <property name="label">_Import...</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">False</property>
+ <accelerator key="I" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_graph_import_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="separator9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_save_menuitem">
+ <property name="label">gtk-save</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="S" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_file_save_graph_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_save_as_menuitem">
+ <property name="label">Save _As...</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">False</property>
+ <accelerator key="S" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_graph_save_as_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_draw_menuitem">
+ <property name="label">_Draw...</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">False</property>
+ <accelerator key="R" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_graph_draw_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="separator11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_close_menuitem">
+ <property name="label">gtk-close</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <signal name="activate" handler="on_graph_file_close_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="separator6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_quit_menuitem">
+ <property name="label">gtk-quit</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <signal name="activate" handler="on_graph_file_quit_nokill_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="edit2">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Edit</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="edit2_menu">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="menuitem4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_cut_menuitem">
+ <property name="label">gtk-cut</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <signal name="activate" handler="on_graph_cut_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_copy_menuitem">
+ <property name="label">gtk-copy</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="C" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_graph_copy_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_paste_menuitem">
+ <property name="label">gtk-paste</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="V" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_graph_paste_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_delete_menuitem">
+ <property name="label">gtk-delete</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="Delete" signal="activate"/>
+ <signal name="activate" handler="on_graph_delete_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_select_all_menuitem">
+ <property name="label">gtk-select-all</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="A" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_graph_select_all_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="menuitem1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_arrange_menuitem">
+ <property name="label">Arrange</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">False</property>
+ <accelerator key="G" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="menuitem2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_view_control_window_menuitem">
+ <property name="label">C_ontrols...</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">False</property>
+ <accelerator key="O" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_graph_view_control_window_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_properties_menuitem">
+ <property name="label">gtk-properties</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="P" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_graph_properties_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="graph_graph_menu">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_View</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="graph_graph_menu_menu">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckMenuItem" id="graph_animate_canvas_menuitem">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Update control ports as values change.</property>
+ <property name="label" translatable="yes">_Animate Canvas</property>
+ <property name="use_underline">True</property>
+ <accelerator key="l" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="menuitem5">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="graph_human_names_menuitem">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Human names</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <accelerator key="H" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="graph_show_port_names_menuitem">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Port _Names</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <accelerator key="n" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="graph_doc_pane_menuitem">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Documentation Pane</property>
+ <property name="use_underline">True</property>
+ <accelerator key="D" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="graph_status_bar_menuitem">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Status Bar</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <accelerator key="b" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="&lt;separator&gt;">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_zoom_in_menuitem">
+ <property name="label">gtk-zoom-in</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="equal" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_zoom_out_menuitem">
+ <property name="label">gtk-zoom-out</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="minus" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_zoom_normal_menuitem">
+ <property name="label">gtk-zoom-100</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="0" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="menuitem3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_fullscreen_menuitem">
+ <property name="label">gtk-fullscreen</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="F11" signal="activate"/>
+ <signal name="activate" handler="graph_fullscreen_menuitem" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="view1">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Windows</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_view1_activate" swapped="no"/>
+ <child type="submenu">
+ <object class="GtkMenu" id="view1_menu">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_view_engine_window_menuitem">
+ <property name="label">_Engine</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">False</property>
+ <accelerator key="E" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_graph_view_engine_window_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_view_graph_tree_window_menuitem">
+ <property name="label">_Graph Tree</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">False</property>
+ <accelerator key="T" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_graph_view_tree_window_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_view_messages_window_menuitem">
+ <property name="label">_Messages</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">False</property>
+ <accelerator key="M" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ <signal name="activate" handler="on_graph_view_messages_window_menuitem_activate" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="help_menu">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Help</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_help_menu_activate" swapped="no"/>
+ <child type="submenu">
+ <object class="GtkMenu" id="help_menu_menu">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImageMenuItem" id="right-click_the_canvas_to_add_objects1">
+ <property name="label">Right-click the canvas to add objects</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="separator13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="graph_help_about_menuitem">
+ <property name="label">gtk-about</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <signal name="activate" handler="on_about1_activate" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHPaned" id="graph_documentation_paned">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkAlignment" id="graph_win_alignment">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="graph_documentation_scrolledwindow">
+ <property name="can_focus">False</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkStatusbar" id="graph_win_status_bar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
<object class="GtkFileChooserDialog" id="load_graph_win">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Load Graph - Ingen</property>
<property name="window_position">center-on-parent</property>
<property name="type_hint">dialog</property>
<child internal-child="vbox">
- <object class="GtkBox" id="vbox11">
+ <object class="GtkVBox" id="vbox11">
<property name="can_focus">False</property>
<property name="spacing">24</property>
<child internal-child="action_area">
- <object class="GtkButtonBox" id="hbuttonbox3">
+ <object class="GtkHButtonBox" id="hbuttonbox3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="load_graph_cancel_button">
<property name="label">gtk-cancel</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -748,12 +1310,12 @@ Contributors:
<child>
<object class="GtkButton" id="load_graph_ok_button">
<property name="label">gtk-open</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -796,17 +1358,17 @@ Contributors:
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="load_graph_poly_from_file_radio">
<property name="label" translatable="yes">Load from _File</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="has_tooltip">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
<property name="group">load_graph_poly_voices_radio</property>
@@ -817,7 +1379,7 @@ Contributors:
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -837,11 +1399,11 @@ Contributors:
<child>
<object class="GtkRadioButton" id="load_graph_insert_ports_radio">
<property name="label" translatable="yes">_Insert new ports</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="has_tooltip">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
<property name="group">load_graph_merge_ports_radio</property>
@@ -857,11 +1419,11 @@ Contributors:
<child>
<object class="GtkRadioButton" id="load_graph_merge_ports_radio">
<property name="label" translatable="yes">_Merge with existing ports</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="has_tooltip">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
@@ -882,11 +1444,11 @@ Contributors:
<child>
<object class="GtkRadioButton" id="load_graph_poly_voices_radio">
<property name="label" translatable="yes">_Voices:</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="has_tooltip">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
@@ -902,6 +1464,10 @@ Contributors:
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
<property name="climb_rate">1</property>
</object>
<packing>
@@ -932,7 +1498,7 @@ Contributors:
</object>
<packing>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -941,6 +1507,10 @@ Contributors:
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="activates_default">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -1018,7 +1588,7 @@ Contributors:
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -1069,6 +1639,10 @@ Contributors:
<object class="GtkEntry" id="load_plugin_name_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="expand">True</property>
@@ -1079,10 +1653,10 @@ Contributors:
<child>
<object class="GtkCheckButton" id="load_plugin_polyphonic_checkbutton">
<property name="label" translatable="yes">_Polyphonic</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
@@ -1110,6 +1684,10 @@ Contributors:
<property name="can_focus">True</property>
<property name="has_focus">True</property>
<property name="secondary_icon_stock">gtk-clear</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -1124,7 +1702,7 @@ Contributors:
</object>
<packing>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -1135,10 +1713,10 @@ Contributors:
<child>
<object class="GtkButton" id="load_plugin_close_button">
<property name="label">gtk-close</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -1150,10 +1728,10 @@ Contributors:
<child>
<object class="GtkButton" id="load_plugin_add_button">
<property name="label">gtk-add</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -1228,12 +1806,12 @@ Contributors:
<child>
<object class="GtkButton" id="messages_clear_button">
<property name="label">gtk-clear</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -1245,10 +1823,10 @@ Contributors:
<child>
<object class="GtkButton" id="messages_close_button">
<property name="label">gtk-close</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -1323,6 +1901,10 @@ Contributors:
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="activates_default">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
<property name="climb_rate">1</property>
</object>
<packing>
@@ -1331,7 +1913,7 @@ Contributors:
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
<property name="y_padding">4</property>
</packing>
</child>
@@ -1341,11 +1923,15 @@ Contributors:
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="activates_default">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
<property name="y_padding">4</property>
</packing>
</child>
@@ -1377,10 +1963,10 @@ Contributors:
<child>
<object class="GtkButton" id="new_subgraph_cancel_button">
<property name="label">gtk-cancel</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -1392,12 +1978,12 @@ Contributors:
<child>
<object class="GtkButton" id="new_subgraph_ok_button">
<property name="label">gtk-ok</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -1422,28 +2008,28 @@ Contributors:
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<object class="GtkCheckMenuItem" id="object_polyphonic_menuitem">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">P_olyphonic</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="object_learn_menuitem">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_Learn</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="object_unlearn_menuitem">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_Unlearn</property>
<property name="use_underline">True</property>
</object>
@@ -1451,10 +2037,10 @@ Contributors:
<child>
<object class="GtkImageMenuItem" id="object_disconnect_menuitem">
<property name="label">Dis_connect</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
</object>
@@ -1462,10 +2048,10 @@ Contributors:
<child>
<object class="GtkImageMenuItem" id="object_rename_menuitem">
<property name="label">_Rename...</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
</object>
@@ -1473,10 +2059,10 @@ Contributors:
<child>
<object class="GtkImageMenuItem" id="object_destroy_menuitem">
<property name="label">gtk-delete</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
@@ -1484,10 +2070,10 @@ Contributors:
<child>
<object class="GtkImageMenuItem" id="object_properties_menuitem">
<property name="label">gtk-properties</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
@@ -1495,598 +2081,66 @@ Contributors:
<child>
<object class="GtkImageMenuItem" id="node_popup_gui_menuitem">
<property name="label" translatable="yes">Show GUI...</property>
+ <property name="use_action_appearance">False</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">False</property>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="node_embed_gui_menuitem">
+ <property name="use_action_appearance">False</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">Embed GUI</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="node_randomize_menuitem">
<property name="label" translatable="yes">Randomize</property>
- <property name="can_focus">False</property>
<property name="use_action_appearance">False</property>
+ <property name="can_focus">False</property>
<property name="use_stock">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="port_set_min_menuitem">
- <property name="can_focus">False</property>
<property name="use_action_appearance">False</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Set Minimum</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="port_set_max_menuitem">
- <property name="can_focus">False</property>
<property name="use_action_appearance">False</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Set Maximum</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="port_reset_range_menuitem">
- <property name="can_focus">False</property>
<property name="use_action_appearance">False</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Reset Range</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="port_expose_menuitem">
- <property name="can_focus">False</property>
<property name="use_action_appearance">False</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">_Expose</property>
<property name="use_underline">True</property>
</object>
</child>
</object>
- <object class="GtkWindow" id="graph_tree_win">
- <property name="width_request">320</property>
- <property name="height_request">340</property>
- <property name="can_focus">False</property>
- <property name="border_width">8</property>
- <property name="title" translatable="yes">Graphs - Ingen</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow8">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="border_width">3</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="graphs_treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="rules_hint">True</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- <object class="GtkWindow" id="graph_win">
- <property name="can_focus">False</property>
- <property name="title" translatable="yes">Ingen</property>
- <property name="default_width">776</property>
- <property name="default_height">480</property>
- <child>
- <object class="GtkVBox" id="graph_win_vbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkMenuBar" id="menubar">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkMenuItem" id="graph_file_menu">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">_File</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="graph_file_menu_menu">
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImageMenuItem" id="graph_import_menuitem">
- <property name="label">_Import...</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <accelerator key="I" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_graph_import_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="separator9">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_save_menuitem">
- <property name="label">gtk-save</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="S" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_file_save_graph_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_save_as_menuitem">
- <property name="label">Save _As...</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <accelerator key="S" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_graph_save_as_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_draw_menuitem">
- <property name="label">_Draw...</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <accelerator key="R" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_graph_draw_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="separator11">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_close_menuitem">
- <property name="label">gtk-close</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <signal name="activate" handler="on_graph_file_close_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="separator6">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_quit_menuitem">
- <property name="label">gtk-quit</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <signal name="activate" handler="on_graph_file_quit_nokill_menuitem_activate" swapped="no"/>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="edit2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">_Edit</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="edit2_menu">
- <property name="can_focus">False</property>
- <child>
- <object class="GtkSeparatorMenuItem" id="menuitem4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_cut_menuitem">
- <property name="label">gtk-cut</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <signal name="activate" handler="on_graph_cut_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_copy_menuitem">
- <property name="label">gtk-copy</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="C" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_graph_copy_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_paste_menuitem">
- <property name="label">gtk-paste</property>
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="V" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_graph_paste_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_delete_menuitem">
- <property name="label">gtk-delete</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="Delete" signal="activate"/>
- <signal name="activate" handler="on_graph_delete_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_select_all_menuitem">
- <property name="label">gtk-select-all</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="A" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_graph_select_all_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="menuitem1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_arrange_menuitem">
- <property name="label">Arrange</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <accelerator key="G" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="menuitem2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_view_control_window_menuitem">
- <property name="label">C_ontrols...</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <accelerator key="O" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_graph_view_control_window_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_properties_menuitem">
- <property name="label">gtk-properties</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="P" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_graph_properties_menuitem_activate" swapped="no"/>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="graph_graph_menu">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">_View</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="graph_graph_menu_menu">
- <property name="can_focus">False</property>
- <child>
- <object class="GtkCheckMenuItem" id="graph_human_names_menuitem">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">_Human names</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <accelerator key="H" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- </object>
- </child>
- <child>
- <object class="GtkCheckMenuItem" id="graph_show_port_names_menuitem">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">Port _Names</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <accelerator key="n" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- </object>
- </child>
- <child>
- <object class="GtkCheckMenuItem" id="graph_doc_pane_menuitem">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">_Documentation Pane</property>
- <property name="use_underline">True</property>
- <property name="active">False</property>
- <accelerator key="D" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- </object>
- </child>
- <child>
- <object class="GtkCheckMenuItem" id="graph_status_bar_menuitem">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">_Status Bar</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <accelerator key="b" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="&lt;separator&gt;">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_zoom_in_menuitem">
- <property name="label">gtk-zoom-in</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="equal" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_zoom_out_menuitem">
- <property name="label">gtk-zoom-out</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="minus" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_zoom_normal_menuitem">
- <property name="label">gtk-zoom-100</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="0" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="menuitem3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_fullscreen_menuitem">
- <property name="label">gtk-fullscreen</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <accelerator key="F11" signal="activate"/>
- <signal name="activate" handler="graph_fullscreen_menuitem" swapped="no"/>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="view1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">_Windows</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="on_view1_activate" swapped="no"/>
- <child type="submenu">
- <object class="GtkMenu" id="view1_menu">
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImageMenuItem" id="graph_view_engine_window_menuitem">
- <property name="label">_Engine</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <accelerator key="E" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_graph_view_engine_window_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_view_graph_tree_window_menuitem">
- <property name="label">_Graph Tree</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <accelerator key="T" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_graph_view_tree_window_menuitem_activate" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_view_messages_window_menuitem">
- <property name="label">_Messages</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <accelerator key="M" signal="activate" modifiers="GDK_CONTROL_MASK"/>
- <signal name="activate" handler="on_graph_view_messages_window_menuitem_activate" swapped="no"/>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="help_menu">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">_Help</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="on_help_menu_activate" swapped="no"/>
- <child type="submenu">
- <object class="GtkMenu" id="help_menu_menu">
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImageMenuItem" id="right-click_the_canvas_to_add_objects1">
- <property name="label">Right-click the canvas to add objects</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="separator13">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="graph_help_about_menuitem">
- <property name="label">gtk-about</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <signal name="activate" handler="on_about1_activate" swapped="no"/>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHPaned" id="graph_documentation_paned">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkAlignment" id="graph_win_alignment">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="resize">True</property>
- <property name="shrink">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="graph_documentation_scrolledwindow">
- <property name="can_focus">False</property>
- <property name="shadow_type">in</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="resize">False</property>
- <property name="shrink">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkStatusbar" id="graph_win_status_bar">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">2</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
<object class="GtkMenu" id="port_control_menu">
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="port_control_menu_properties">
<property name="label">gtk-properties</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_port_control_menu_properties_activate" swapped="no"/>
@@ -2112,11 +2166,11 @@ Contributors:
<child>
<object class="GtkButton" id="port_properties_cancel_button">
<property name="label">gtk-cancel</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -2128,12 +2182,12 @@ Contributors:
<child>
<object class="GtkButton" id="port_properties_ok_button">
<property name="label">gtk-ok</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -2162,6 +2216,10 @@ Contributors:
<object class="GtkSpinButton" id="port_properties_min_spinner">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
<property name="climb_rate">1</property>
<property name="digits">5</property>
<property name="numeric">True</property>
@@ -2169,13 +2227,17 @@ Contributors:
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="port_properties_max_spinner">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
<property name="climb_rate">1</property>
<property name="digits">5</property>
<property name="numeric">True</property>
@@ -2185,7 +2247,7 @@ Contributors:
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -2197,7 +2259,7 @@ Contributors:
</object>
<packing>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
<child>
@@ -2211,7 +2273,7 @@ Contributors:
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options"/>
</packing>
</child>
</object>
@@ -2261,6 +2323,15 @@ Contributors:
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</child>
</object>
@@ -2330,11 +2401,11 @@ Contributors:
<child>
<object class="GtkButton" id="properties_cancel_button">
<property name="label">gtk-cancel</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -2346,10 +2417,10 @@ Contributors:
<child>
<object class="GtkButton" id="properties_apply_button">
<property name="label">gtk-apply</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -2361,12 +2432,12 @@ Contributors:
<child>
<object class="GtkButton" id="properties_ok_button">
<property name="label">gtk-ok</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -2423,6 +2494,10 @@ Contributors:
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="activates_default">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -2452,6 +2527,10 @@ Contributors:
<property name="has_focus">True</property>
<property name="invisible_char">●</property>
<property name="activates_default">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -2486,11 +2565,11 @@ Contributors:
<child>
<object class="GtkButton" id="rename_cancel_button">
<property name="label">gtk-cancel</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -2502,12 +2581,12 @@ Contributors:
<child>
<object class="GtkButton" id="rename_ok_button">
<property name="label">gtk-ok</property>
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -2586,10 +2665,10 @@ Contributors:
</child>
<child>
<object class="GtkCheckButton" id="toggle_control_check">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -2667,9 +2746,9 @@ Contributors:
<property name="icon_size">1</property>
<child>
<object class="GtkToolItem" id="graph_view_breadcrumb_container">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<child>
<placeholder/>
</child>
@@ -2694,9 +2773,9 @@ Contributors:
<property name="icon_size">1</property>
<child>
<object class="GtkToggleToolButton" id="graph_view_process_but">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-execute</property>
<property name="active">True</property>
@@ -2708,9 +2787,9 @@ Contributors:
</child>
<child>
<object class="GtkToolItem" id="toolitem7">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<child>
<object class="GtkImage" id="image1978">
<property name="visible">True</property>
@@ -2726,13 +2805,17 @@ Contributors:
</child>
<child>
<object class="GtkToolItem" id="toolitem10">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<child>
<object class="GtkSpinButton" id="graph_view_poly_spin">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
<property name="climb_rate">1</property>
<property name="numeric">True</property>
</object>
@@ -2753,9 +2836,9 @@ Contributors:
</child>
<child>
<object class="GtkToolButton" id="graph_view_save_but">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="stock_id">gtk-save</property>
</object>
<packing>
@@ -2774,9 +2857,9 @@ Contributors:
</child>
<child>
<object class="GtkToolButton" id="graph_view_refresh_but">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="stock_id">gtk-refresh</property>
</object>
<packing>
@@ -2786,9 +2869,9 @@ Contributors:
</child>
<child>
<object class="GtkToolButton" id="graph_view_zoom_normal_but">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-zoom-100</property>
</object>
@@ -2799,9 +2882,9 @@ Contributors:
</child>
<child>
<object class="GtkToolButton" id="graph_view_zoom_full_but">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-zoom-fit</property>
</object>
@@ -2827,6 +2910,7 @@ Contributors:
<child>
<object class="GtkScrolledWindow" id="graph_view_scrolledwindow">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK</property>
@@ -2915,6 +2999,10 @@ Contributors:
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="width_chars">12</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
<property name="digits">4</property>
<property name="numeric">True</property>
</object>
@@ -2984,6 +3072,10 @@ Contributors:
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="caps_lock_warning">False</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="expand">True</property>
diff --git a/src/server/Broadcaster.cpp b/src/server/Broadcaster.cpp
index f3bc96f7..8e53164f 100644
--- a/src/server/Broadcaster.cpp
+++ b/src/server/Broadcaster.cpp
@@ -26,10 +26,16 @@
namespace Ingen {
namespace Server {
+Broadcaster::Broadcaster()
+ : _must_broadcast(false)
+ , _bundle_depth(0)
+{}
+
Broadcaster::~Broadcaster()
{
Glib::Mutex::Lock lock(_clients_mutex);
_clients.clear();
+ _broadcastees.clear();
}
/** Register a client to receive messages over the notification band.
@@ -51,9 +57,21 @@ Broadcaster::unregister_client(const Raul::URI& uri)
{
Glib::Mutex::Lock lock(_clients_mutex);
const size_t erased = _clients.erase(uri);
+ _broadcastees.erase(uri);
return (erased > 0);
}
+void
+Broadcaster::set_broadcast(const Raul::URI& client, bool broadcast)
+{
+ if (broadcast) {
+ _broadcastees.insert(client);
+ } else {
+ _broadcastees.erase(client);
+ }
+ _must_broadcast.store(!_broadcastees.empty());
+}
+
/** Looks up the client with the given source @a uri (which is used as the
* unique identifier for registered clients).
*/
diff --git a/src/server/Broadcaster.hpp b/src/server/Broadcaster.hpp
index 3162742b..5de5ec8f 100644
--- a/src/server/Broadcaster.hpp
+++ b/src/server/Broadcaster.hpp
@@ -17,8 +17,10 @@
#ifndef INGEN_ENGINE_CLIENTBROADCASTER_HPP
#define INGEN_ENGINE_CLIENTBROADCASTER_HPP
+#include <atomic>
#include <list>
#include <map>
+#include <set>
#include <string>
#include <glibmm/thread.h>
@@ -41,12 +43,21 @@ namespace Server {
class Broadcaster : public Interface
{
public:
- Broadcaster() : _bundle_depth(0) {}
+ Broadcaster();
~Broadcaster();
void register_client(const Raul::URI& uri, SPtr<Interface> client);
bool unregister_client(const Raul::URI& uri);
+ void set_broadcast(const Raul::URI& client, bool broadcast);
+
+ /** Return true iff there are any clients with broadcasting enabled.
+ *
+ * This is used in the audio thread to decide whether or not notifications
+ * should be calculated and emitted.
+ */
+ bool must_broadcast() const { return _must_broadcast; }
+
/** A handle that represents a transfer of possibly several changes.
*
* This object going out of scope signifies the transfer is completed.
@@ -135,9 +146,11 @@ private:
typedef std::map< Raul::URI, SPtr<Interface> > Clients;
- Glib::Mutex _clients_mutex;
- Clients _clients;
- unsigned _bundle_depth;
+ Glib::Mutex _clients_mutex;
+ Clients _clients;
+ std::set<Raul::URI> _broadcastees;
+ std::atomic<bool> _must_broadcast;
+ unsigned _bundle_depth;
};
} // namespace Server
diff --git a/src/server/Context.cpp b/src/server/Context.cpp
index 1be69fe4..2ac2ddc2 100644
--- a/src/server/Context.cpp
+++ b/src/server/Context.cpp
@@ -55,6 +55,12 @@ Context::Context(Engine& engine, ID id)
{}
bool
+Context::must_notify(const PortImpl* port) const
+{
+ return port->is_monitored() || _engine.broadcaster()->must_broadcast();
+}
+
+bool
Context::notify(LV2_URID key,
FrameTime time,
PortImpl* port,
diff --git a/src/server/Context.hpp b/src/server/Context.hpp
index 028ee126..ea3593b8 100644
--- a/src/server/Context.hpp
+++ b/src/server/Context.hpp
@@ -53,6 +53,14 @@ public:
virtual ~Context() {}
+ /** Return true iff the given port should broadcast its value.
+ *
+ * Whether or not broadcasting is actually done is a per-client property,
+ * this is for use in the audio thread to quickly determine if the
+ * necessary calculations need to be done at all.
+ */
+ bool must_notify(const PortImpl* port) const;
+
/** Send a notification from this run context.
* @return false on failure (ring is full)
*/
diff --git a/src/server/DuplexPort.cpp b/src/server/DuplexPort.cpp
index 34c9b590..65152d02 100644
--- a/src/server/DuplexPort.cpp
+++ b/src/server/DuplexPort.cpp
@@ -100,9 +100,8 @@ DuplexPort::post_process(Context& context)
perspective. Mix down input delivered by plugins so output
(external perspective) is ready. */
InputPort::pre_process(context);
-
- if (_broadcast)
- broadcast_value(context, false);
+ } else {
+ monitor(context);
}
}
diff --git a/src/server/InputPort.cpp b/src/server/InputPort.cpp
index 9002dbab..0d1a2d0e 100644
--- a/src/server/InputPort.cpp
+++ b/src/server/InputPort.cpp
@@ -124,9 +124,6 @@ void
InputPort::add_arc(ProcessContext& context, ArcImpl* c)
{
_arcs.push_front(*c);
- if (_type != PortType::CV) {
- _broadcast = true; // Broadcast value/activity of connected input
- }
}
/** Remove a arc. Realtime safe.
@@ -151,10 +148,6 @@ InputPort::remove_arc(ProcessContext& context, const OutputPort* tail)
return NULL;
}
- if (_arcs.empty()) {
- _broadcast = false; // Turn off broadcasting if no longer connected
- }
-
return arc;
}
@@ -220,8 +213,9 @@ InputPort::pre_process(Context& context)
}
}
- if (_broadcast)
- broadcast_value(context, false);
+ if (!_arcs.empty()) {
+ monitor(context);
+ }
}
void
diff --git a/src/server/OutputPort.cpp b/src/server/OutputPort.cpp
index 6b7329e5..492e5419 100644
--- a/src/server/OutputPort.cpp
+++ b/src/server/OutputPort.cpp
@@ -42,8 +42,6 @@ OutputPort::OutputPort(BufferFactory& bufs,
add_property(bufs.uris().rdf_type, bufs.uris().lv2_OutputPort);
}
- _broadcast = true;
-
setup_buffers(bufs, poly, false);
}
@@ -73,8 +71,7 @@ OutputPort::post_process(Context& context)
update_set_state(context, v);
}
- if (_broadcast)
- broadcast_value(context, false);
+ monitor(context);
}
} // namespace Server
diff --git a/src/server/PortImpl.cpp b/src/server/PortImpl.cpp
index ed7a7084..352c8b23 100644
--- a/src/server/PortImpl.cpp
+++ b/src/server/PortImpl.cpp
@@ -51,12 +51,12 @@ PortImpl::PortImpl(BufferFactory& bufs,
, _value(value)
, _min(bufs.forge().make(0.0f))
, _max(bufs.forge().make(1.0f))
- , _last_broadcasted_value(value)
+ , _last_monitor_value(value)
, _set_states(new Raul::Array<SetState>(static_cast<size_t>(poly)))
, _prepared_set_states(NULL)
, _buffers(new Raul::Array<BufferRef>(static_cast<size_t>(poly)))
, _prepared_buffers(NULL)
- , _broadcast(false)
+ , _monitored(false)
, _set_by_user(false)
, _is_morph(false)
, _is_auto_morph(false)
@@ -338,8 +338,12 @@ PortImpl::clear_buffers()
}
void
-PortImpl::broadcast_value(Context& context, bool force)
+PortImpl::monitor(Context& context)
{
+ if (!context.must_notify(this)) {
+ return;
+ }
+
Forge& forge = context.engine().world()->forge();
URIs& uris = context.engine().world()->uris();
LV2_URID key = 0;
@@ -359,23 +363,34 @@ PortImpl::broadcast_value(Context& context, bool force)
case PortType::ATOM:
if (_buffer_type == _bufs.uris().atom_Sequence) {
LV2_Atom_Sequence* seq = (LV2_Atom_Sequence*)buffer(0)->atom();
- // TODO: Filter events, or only send one activity for blinkenlights
- LV2_ATOM_SEQUENCE_FOREACH(seq, ev) {
+ if (_monitored) {
+ // Monitoring explictly enabled, send everything
+ LV2_ATOM_SEQUENCE_FOREACH(seq, ev) {
+ context.notify(uris.ingen_activity,
+ context.start() + ev->time.frames,
+ this,
+ ev->body.size,
+ ev->body.type,
+ LV2_ATOM_BODY(&ev->body));
+ }
+ } else if (seq->atom.size > sizeof(LV2_Atom_Sequence_Body)) {
+ // Just sending for blinkenlights, send one
+ const int32_t one = 1;
context.notify(uris.ingen_activity,
- context.start() + ev->time.frames,
+ context.start(),
this,
- ev->body.size,
- ev->body.type,
- LV2_ATOM_BODY(&ev->body));
+ sizeof(int32_t),
+ (LV2_URID)uris.atom_Bool,
+ &one);
}
}
break;
}
- if (val.is_valid() && (force || val != _last_broadcasted_value)) {
+ if (val.is_valid() && val != _last_monitor_value) {
if (context.notify(key, context.start(), this,
val.size(), val.type(), val.get_body())) {
- _last_broadcasted_value = val;
+ _last_monitor_value = val;
}
/* On failure, last_broadcasted_value remains unaffected, so we'll try
diff --git a/src/server/PortImpl.hpp b/src/server/PortImpl.hpp
index 4aed4458..45918964 100644
--- a/src/server/PortImpl.hpp
+++ b/src/server/PortImpl.hpp
@@ -145,10 +145,18 @@ public:
void set_buffer_size(Context& context, BufferFactory& bufs, size_t size);
- void broadcast(bool b) { _broadcast = b; }
- bool broadcast() { return _broadcast; }
+ /** Return true iff this port is explicitly monitored.
+ *
+ * This is used for plugin UIs which require monitoring for particular
+ * ports, even if the Ingen client has not requested broadcasting in
+ * general (e.g. for canvas animation).
+ */
+ bool is_monitored() const { return _monitored; }
+
+ /** Explicitly turn on monitoring for this port. */
+ void enable_monitoring(bool monitored) { _monitored = monitored; }
- void broadcast_value(Context& context, bool force=false);
+ void monitor(Context& context);
void raise_set_by_user_flag() { _set_by_user = true; }
@@ -199,12 +207,12 @@ protected:
Raul::Atom _value;
Raul::Atom _min;
Raul::Atom _max;
- Raul::Atom _last_broadcasted_value;
+ Raul::Atom _last_monitor_value;
Raul::Array<SetState>* _set_states;
Raul::Array<SetState>* _prepared_set_states;
Raul::Array<BufferRef>* _buffers;
Raul::Array<BufferRef>* _prepared_buffers;
- bool _broadcast;
+ bool _monitored;
bool _set_by_user;
bool _is_morph;
bool _is_auto_morph;
diff --git a/src/server/events/Delta.cpp b/src/server/events/Delta.cpp
index 9287f9e5..2b851b16 100644
--- a/src/server/events/Delta.cpp
+++ b/src/server/events/Delta.cpp
@@ -104,6 +104,7 @@ Delta::pre_process()
typedef Properties::const_iterator iterator;
const bool is_graph_object = Node::uri_is_path(_subject);
+ const bool is_client = (_subject == "ingen:/clients/this");
// Take a writer lock while we modify the store
Glib::RWLock::WriterLock lock(_engine.store()->lock());
@@ -112,7 +113,7 @@ Delta::pre_process()
? static_cast<Ingen::Resource*>(_engine.store()->get(Node::uri_to_path(_subject)))
: static_cast<Ingen::Resource*>(_engine.block_factory()->plugin(_subject));
- if (!_object && (!is_graph_object || !_create)) {
+ if (!_object && !is_client && (!is_graph_object || !_create)) {
return Event::pre_process_done(Status::NOT_FOUND, _subject);
}
@@ -155,7 +156,9 @@ Delta::pre_process()
if (port)
_old_bindings = _engine.control_bindings()->remove(port);
}
- _object->remove_property(key, value);
+ if (_object) {
+ _object->remove_property(key, value);
+ }
}
for (const auto& p : _properties) {
@@ -243,6 +246,9 @@ Delta::pre_process()
_status = Status::BAD_OBJECT_TYPE;
}
}
+ } else if (is_client && key == uris.ingen_broadcast) {
+ _engine.broadcaster()->set_broadcast(
+ _request_client->uri(), value.get_bool());
}
if (_status != Status::NOT_PREPARED) {
@@ -287,7 +293,7 @@ Delta::execute(ProcessContext& context)
switch (*t) {
case SpecialType::ENABLE_BROADCAST:
if (port) {
- port->broadcast(value.get_bool());
+ port->enable_monitoring(value.get_bool());
}
break;
case SpecialType::ENABLE:
diff --git a/src/server/internals/Controller.cpp b/src/server/internals/Controller.cpp
index e65319a0..cad0aac4 100644
--- a/src/server/internals/Controller.cpp
+++ b/src/server/internals/Controller.cpp
@@ -118,7 +118,7 @@ ControllerNode::control(ProcessContext& context, uint8_t control_num, uint8_t va
// FIXME: not thread safe
_param_port->set_value(context.engine().world()->forge().make(control_num));
_param_port->set_control_value(context, time, control_num);
- _param_port->broadcast_value(context, true);
+ _param_port->monitor(context);
_learning = false;
}
diff --git a/src/server/internals/Trigger.cpp b/src/server/internals/Trigger.cpp
index 41e1800f..c1c00b6b 100644
--- a/src/server/internals/Trigger.cpp
+++ b/src/server/internals/Trigger.cpp
@@ -133,7 +133,7 @@ TriggerNode::note_on(ProcessContext& context, uint8_t note_num, uint8_t velocity
// FIXME: not thread safe
_note_port->set_value(context.engine().world()->forge().make((float)note_num));
_note_port->set_control_value(context, time, (float)note_num);
- _note_port->broadcast_value(context, true);
+ _note_port->monitor(context);
_learning = false;
}