[gst-debugger] gst-debugger: add control modules
- From: Marcin Kolny <mkolny src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gst-debugger] gst-debugger: add control modules
- Date: Tue, 1 Sep 2015 10:19:19 +0000 (UTC)
commit 8e4c87987d1ceba7c164a6687d06cdc23fa0378c
Author: Marcin Kolny <marcin kolny gmail com>
Date: Tue Sep 1 12:17:58 2015 +0200
gst-debugger: add control modules
Control modules are used for control main module
src/gst-debugger/Makefile.am | 32 ++-
src/gst-debugger/modules/control_module.h | 67 +++++
src/gst-debugger/modules/main_module.cpp | 36 ++-
src/gst-debugger/modules/main_module.h | 12 +-
.../modules/pad_path_control_module.cpp | 57 ++++
src/gst-debugger/modules/pad_path_control_module.h | 33 +++
.../modules/pad_path_types_control_module.h | 46 ++++
src/gst-debugger/modules/types_control_module.cpp | 86 ++++++
src/gst-debugger/modules/types_control_module.h | 39 +++
src/gst-debugger/ui/gst-debugger.glade | 273 ++++++++++---------
10 files changed, 524 insertions(+), 157 deletions(-)
---
diff --git a/src/gst-debugger/Makefile.am b/src/gst-debugger/Makefile.am
index 2be8d18..3276dc5 100644
--- a/src/gst-debugger/Makefile.am
+++ b/src/gst-debugger/Makefile.am
@@ -16,9 +16,6 @@ bin_PROGRAMS = gst-debugger- GST_API_VERSION@
gst_debugger_headers = \
common_model_columns.h \
- gst-debugger-resources.h \
- main_window.h \
- ui_utils.h \
controller/base_controller.h \
controller/command_factory.h \
controller/connection_controller.h \
@@ -33,31 +30,34 @@ gst_debugger_headers = \
dialogs/factories_dialog.h \
dialogs/remote_data_dialog.h \
graphviz-plugin/graphviz-gstdebugger.h \
+ gst-debugger-resources.h \
gvalue-converter/gvalue_base.h \
gvalue-converter/gvalue_boolean.h \
gvalue-converter/gvalue_caps.h \
gvalue-converter/gvalue_enum.h \
gvalue-converter/gvalue_numeric.h \
gvalue-converter/gvalue_string.h \
+ main_window.h \
models/gst_enum_model.h \
models/gst_factory_model.h \
models/gst_pipeline_model.h \
models/remote_data_container.h \
modules/base_main_module.h \
- modules/log_module.h \
modules/bus_messages_module.h \
+ modules/control_module.h \
modules/gst_log_module.h \
modules/gst_properties_module.h \
+ modules/log_module.h \
modules/main_module.h \
+ modules/pad_path_control_module.h \
+ modules/pad_path_types_control_module.h \
+ modules/types_control_modules.h \
pipeline-drawer/graph_module.h \
- pipeline-drawer/gst_bin_to_dot_converter.h
+ pipeline-drawer/gst_bin_to_dot_converter.h \
+ ui_utils.h
gst_debugger_ GST_API_VERSION@_SOURCES = \
- gst-debugger-resources.c \
- main.cpp \
- main_window.cpp \
- ui_utils.cpp \
controller/command_factory.cpp \
controller/controller.cpp \
controller/tcp_client.cpp \
@@ -68,23 +68,29 @@ gst_debugger_ GST_API_VERSION@_SOURCES = \
dialogs/factories_dialog.cpp \
graphviz-plugin/gvdevice_gstdebugger.c \
graphviz-plugin/gvplugin_gstdebugger.c \
+ gst-debugger-resources.c \
gvalue-converter/gvalue_base.cpp \
gvalue-converter/gvalue_boolean.cpp \
gvalue-converter/gvalue_caps.cpp \
gvalue-converter/gvalue_enum.cpp \
gvalue-converter/gvalue_numeric.cpp \
gvalue-converter/gvalue_string.cpp \
+ main.cpp \
+ main_window.cpp \
models/gst_factory_model.cpp \
models/gst_pipeline_model.cpp \
- modules/main_module.cpp \
- modules/log_module.cpp \
- modules/bus_messages_module.cpp \
modules/base_main_module.cpp \
- modules/pad_data_modules.cpp \
+ modules/bus_messages_module.cpp \
modules/gst_log_module.cpp \
modules/gst_properties_module.cpp \
+ modules/log_module.cpp \
+ modules/main_module.cpp \
+ modules/pad_data_modules.cpp \
+ modules/pad_path_control_module.cpp \
+ modules/types_control_module.cpp \
pipeline-drawer/graph_module.cpp \
pipeline-drawer/gst_bin_to_dot_converter.cpp \
+ ui_utils.cpp \
$(gst_debugger_headers)
gst_debugger_ GST_API_VERSION@_LDFLAGS = $(GTKMM_LIBS) $(GSTMM_LIBS) $(GVC_LIBS) $(PROTOBUF_LIBS) -lX11
diff --git a/src/gst-debugger/modules/control_module.h b/src/gst-debugger/modules/control_module.h
new file mode 100644
index 0000000..db3a7e9
--- /dev/null
+++ b/src/gst-debugger/modules/control_module.h
@@ -0,0 +1,67 @@
+/*
+ * control_module.h
+ *
+ * Created on: Aug 31, 2015
+ * Author: loganek
+ */
+
+#ifndef SRC_GST_DEBUGGER_MODULES_CONTROL_MODULE_H_
+#define SRC_GST_DEBUGGER_MODULES_CONTROL_MODULE_H_
+
+#include "controller/iview.h"
+
+#include "common_model_columns.h"
+
+#include <gtkmm/widget.h>
+
+class ControlModule : public IBaseView
+{
+public:
+ virtual ~ControlModule() {};
+
+ virtual Gtk::Widget* get_widget() = 0;
+};
+
+class HooksControlModule : public ControlModule
+{
+protected:
+ Gtk::Box *main_box = nullptr;
+ Gtk::Button *add_hook_button;
+
+ void append_hook_widgets()
+ {
+ add_hook_button = Gtk::manage(new Gtk::Button("Add hook"));
+ main_box->pack_start(*add_hook_button, false, true);
+ main_box->pack_start(*Gtk::manage(new Gtk::Label("Existing hooks:")));
+ Gtk::ScrolledWindow *wnd = Gtk::manage(new Gtk::ScrolledWindow);
+ wnd->add(*Gtk::manage(new Gtk::TreeView()));
+ main_box->pack_start(*wnd, true, true);
+ main_box->pack_start(*Gtk::manage(new Gtk::Button("Remove selected hook")), false, true);
+
+ update_add_hook();
+ }
+
+ virtual bool add_hook_unlocked() { return true; }
+
+ void update_add_hook()
+ {
+ add_hook_button->set_sensitive(add_hook_unlocked());
+ }
+
+public:
+ HooksControlModule()
+ {
+ main_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); // todo possible memleak
+
+ append_hook_widgets();
+ }
+
+ virtual ~HooksControlModule() {}
+
+ Gtk::Widget* get_widget() override
+ {
+ return main_box;
+ }
+};
+
+#endif /* SRC_GST_DEBUGGER_MODULES_CONTROL_MODULE_H_ */
diff --git a/src/gst-debugger/modules/main_module.cpp b/src/gst-debugger/modules/main_module.cpp
index 23de899..cb1ae19 100644
--- a/src/gst-debugger/modules/main_module.cpp
+++ b/src/gst-debugger/modules/main_module.cpp
@@ -9,6 +9,8 @@
#include "pad_data_modules.h"
#include "log_module.h"
+#include "bus_messages_module.h"
+#include "pad_path_types_control_module.h"
#include "controller/controller.h"
#include "controller/element_path_processor.h"
@@ -32,6 +34,7 @@ MainModule::MainModule(const Glib::RefPtr<Gtk::Builder> &builder)
builder->get_widget("hookTypeBox", hook_type_box);
builder->get_widget("hookAnyPathCheckButton", any_path_check_button);
builder->get_widget("hookAnyTypeCheckButton", any_type_check_button);
+ builder->get_widget("controllerFrame", controller_frame);
create_dispatcher("selected-object", sigc::mem_fun(*this, &MainModule::selected_object_changed),
nullptr);
@@ -40,11 +43,20 @@ MainModule::MainModule(const Glib::RefPtr<Gtk::Builder> &builder)
void MainModule::load_submodules(const Glib::RefPtr<Gtk::Builder>& builder)
{
- submodules["logMessages"].module = std::make_shared<LogModule>();
- submodules["queries"].module = std::make_shared<QueryModule>();
- //main_modules["busMessages"].module = std::make_shared<GstMessageModule>();
- submodules["buffers"].module = std::make_shared<BufferModule>();
- submodules["events"].module = std::make_shared<EventModule>();
+ submodules["logMessages"].display_module = std::make_shared<LogModule>();
+ submodules["logMessages"].control_module = std::make_shared<HooksControlModule>();
+
+ submodules["queries"].display_module = std::make_shared<QueryModule>();
+ submodules["queries"].control_module = std::make_shared<PadPathTypesControlModule>("GstQueryType");
+
+ submodules["busMessages"].display_module = std::make_shared<BusMessagesModule>();
+ submodules["busMessages"].control_module = std::make_shared<TypesControlModule>("GstMessageType");
+
+ submodules["buffers"].display_module = std::make_shared<BufferModule>();
+ submodules["buffers"].control_module = std::make_shared<PadPathControlModule>();
+
+ submodules["events"].display_module = std::make_shared<EventModule>();
+ submodules["events"].control_module = std::make_shared<PadPathTypesControlModule>("GstEventType");
for (auto m : submodules)
{
@@ -52,7 +64,7 @@ void MainModule::load_submodules(const Glib::RefPtr<Gtk::Builder>& builder)
m.second.switch_button->signal_toggled().connect([this, m] {
if (m.second.switch_button->get_active())
{
- update_module(m.second.module);
+ update_module(m.second);
}
});
}
@@ -66,7 +78,8 @@ void MainModule::set_controller(const std::shared_ptr<Controller> &controller)
for (auto m : submodules)
{
- m.second.module->set_controller(controller);
+ m.second.display_module->set_controller(controller);
+ m.second.control_module->set_controller(controller);
}
}
@@ -76,10 +89,13 @@ void MainModule::selected_object_changed()
pad_path_label->set_text(selected_pad ? ElementPathProcessor::get_object_path(selected_pad) :
"(none)");
}
-void MainModule::update_module(const std::shared_ptr<BaseMainModule> &module)
+void MainModule::update_module(const MainModuleInfo &module_info)
{
- module->configure_main_list_view(list_tree_view);
- current_module = module;
+ module_info.display_module->configure_main_list_view(list_tree_view);
+ current_module = module_info.display_module;
+ controller_frame->remove();
+ controller_frame->add(*(module_info.control_module->get_widget()));
+ controller_frame->show_all();
}
void MainModule::mainListTreeView_row_activated_cb(const Gtk::TreeModel::Path &path, Gtk::TreeViewColumn
*column)
diff --git a/src/gst-debugger/modules/main_module.h b/src/gst-debugger/modules/main_module.h
index 60f1cdc..41e2c57 100644
--- a/src/gst-debugger/modules/main_module.h
+++ b/src/gst-debugger/modules/main_module.h
@@ -8,9 +8,10 @@
#ifndef SRC_GST_DEBUGGER_MODULES_MAIN_MODULE_H_
#define SRC_GST_DEBUGGER_MODULES_MAIN_MODULE_H_
-#include "controller/iview.h"
-
#include "base_main_module.h"
+#include "control_module.h"
+
+#include "controller/iview.h"
#include <gtkmm.h>
@@ -18,7 +19,8 @@ class MainModule : public IBaseView
{
struct MainModuleInfo
{
- std::shared_ptr<BaseMainModule> module;
+ std::shared_ptr<BaseMainModule> display_module;
+ std::shared_ptr<ControlModule> control_module;
Gtk::RadioToolButton *switch_button;
};
@@ -32,6 +34,7 @@ class MainModule : public IBaseView
Gtk::TreeView *existing_hooks_tree_view;
Gtk::Label *pad_path_label;
Gtk::Box *hook_type_box;
+ Gtk::Frame *controller_frame;
TypesModelColumns types_columns;
@@ -41,6 +44,7 @@ class MainModule : public IBaseView
void selected_object_changed();
void load_submodules(const Glib::RefPtr<Gtk::Builder>& builder);
+ void update_module(const MainModuleInfo &module_info);
void mainListTreeView_row_activated_cb(const Gtk::TreeModel::Path &path, Gtk::TreeViewColumn *column);
void mainDetailsTreeView_row_activated_cb(const Gtk::TreeModel::Path &path, Gtk::TreeViewColumn
*column);
@@ -49,8 +53,6 @@ public:
MainModule(const Glib::RefPtr<Gtk::Builder>& builder);
void set_controller(const std::shared_ptr<Controller> &controller) override;
-
- void update_module(const std::shared_ptr<BaseMainModule> &module);
};
#endif /* SRC_GST_DEBUGGER_MODULES_MAIN_MODULE_H_ */
diff --git a/src/gst-debugger/modules/pad_path_control_module.cpp
b/src/gst-debugger/modules/pad_path_control_module.cpp
new file mode 100644
index 0000000..49fd4f9
--- /dev/null
+++ b/src/gst-debugger/modules/pad_path_control_module.cpp
@@ -0,0 +1,57 @@
+/*
+ * pad_path_control_module.cpp
+ *
+ * Created on: Sep 1, 2015
+ * Author: loganek
+ */
+
+#include "pad_path_control_module.h"
+
+#include "controller/controller.h"
+
+void PadPathControlModule::append_pad_path_widgets()
+{
+ Gtk::Box *path_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
+ path_box->pack_start(*Gtk::manage(new Gtk::Label("Pad path")));
+
+ any_path_check_button = Gtk::manage(new Gtk::CheckButton("any path"));
+ any_path_check_button->signal_clicked().connect([this] { update_add_hook(); });
+
+ path_box->pack_start(*any_path_check_button);
+ main_box->pack_start(*path_box);
+ main_box->pack_start(*Gtk::manage(new Gtk::Label("none")));
+}
+
+bool PadPathControlModule::add_hook_unlocked()
+{
+ return any_path_check_button->get_active() ||
+ (controller && std::dynamic_pointer_cast<PadModel>(controller->get_selected_object())
!= nullptr);
+}
+
+void PadPathControlModule::selected_object_changed_()
+{
+ update_add_hook();
+}
+
+PadPathControlModule::PadPathControlModule()
+{
+ main_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); // todo possibly memleak
+
+ append_pad_path_widgets();
+ append_hook_widgets();
+
+ create_dispatcher("selected-object", sigc::mem_fun(*this,
&PadPathControlModule::selected_object_changed_), nullptr);
+}
+
+Gtk::Widget* PadPathControlModule::get_widget()
+{
+ return main_box;
+}
+
+void PadPathControlModule::set_controller(const std::shared_ptr<Controller> &controller)
+{
+ IBaseView::set_controller(controller);
+ controller->on_selected_object_changed.connect([this](){
+ gui_emit("selected-object");
+ });
+}
diff --git a/src/gst-debugger/modules/pad_path_control_module.h
b/src/gst-debugger/modules/pad_path_control_module.h
new file mode 100644
index 0000000..a84e6c2
--- /dev/null
+++ b/src/gst-debugger/modules/pad_path_control_module.h
@@ -0,0 +1,33 @@
+/*
+ * pad_path_control_module.h
+ *
+ * Created on: Sep 1, 2015
+ * Author: loganek
+ */
+
+#ifndef SRC_GST_DEBUGGER_MODULES_PAD_PATH_CONTROL_MODULE_H_
+#define SRC_GST_DEBUGGER_MODULES_PAD_PATH_CONTROL_MODULE_H_
+
+#include "control_module.h"
+
+class PadPathControlModule : virtual public HooksControlModule
+{
+protected:
+ Gtk::CheckButton *any_path_check_button;
+
+ void append_pad_path_widgets();
+
+ void selected_object_changed_();
+
+ bool add_hook_unlocked() override;
+
+public:
+ PadPathControlModule();
+ virtual ~PadPathControlModule() {}
+
+ Gtk::Widget* get_widget() override;
+
+ void set_controller(const std::shared_ptr<Controller> &controller) override;
+};
+
+#endif /* SRC_GST_DEBUGGER_MODULES_PAD_PATH_CONTROL_MODULE_H_ */
diff --git a/src/gst-debugger/modules/pad_path_types_control_module.h
b/src/gst-debugger/modules/pad_path_types_control_module.h
new file mode 100644
index 0000000..b490231
--- /dev/null
+++ b/src/gst-debugger/modules/pad_path_types_control_module.h
@@ -0,0 +1,46 @@
+/*
+ * pad_path_types_control_module.h
+ *
+ * Created on: Sep 1, 2015
+ * Author: loganek
+ */
+
+#ifndef SRC_GST_DEBUGGER_MODULES_PAD_PATH_TYPES_CONTROL_MODULE_H_
+#define SRC_GST_DEBUGGER_MODULES_PAD_PATH_TYPES_CONTROL_MODULE_H_
+
+#include "pad_path_control_module.h"
+#include "types_control_module.h"
+
+class PadPathTypesControlModule : public PadPathControlModule, public TypesControlModule
+{
+ bool add_hook_unlocked() override
+ {
+ return PadPathControlModule::add_hook_unlocked() && TypesControlModule::add_hook_unlocked();
+ }
+
+public:
+ PadPathTypesControlModule(const std::string &type_name)
+ : TypesControlModule(type_name)
+ {
+ main_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); // todo possibly memleak
+
+ append_types_widgets();
+ append_pad_path_widgets();
+ append_hook_widgets();
+ }
+
+ virtual ~PadPathTypesControlModule () {}
+
+ Gtk::Widget* get_widget() override
+ {
+ return main_box;
+ }
+
+ void set_controller(const std::shared_ptr<Controller> &controller) override
+ {
+ PadPathControlModule::set_controller(controller);
+ TypesControlModule::set_controller(controller);
+ }
+};
+
+#endif /* SRC_GST_DEBUGGER_MODULES_PAD_PATH_TYPES_CONTROL_MODULE_H_ */
diff --git a/src/gst-debugger/modules/types_control_module.cpp
b/src/gst-debugger/modules/types_control_module.cpp
new file mode 100644
index 0000000..1ba0ead
--- /dev/null
+++ b/src/gst-debugger/modules/types_control_module.cpp
@@ -0,0 +1,86 @@
+/*
+ * types_control_module.cpp
+ *
+ * Created on: Sep 1, 2015
+ * Author: loganek
+ */
+
+#include "types_control_module.h"
+
+#include "controller/controller.h"
+
+void TypesControlModule::append_types_widgets()
+{
+ Gtk::Box *type_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
+ any_type_check_button = Gtk::manage(new Gtk::CheckButton("any event"));
+ any_type_check_button->signal_clicked().connect([this] { update_add_hook(); });
+
+ type_box->pack_start(*any_type_check_button);
+ main_box->pack_start(*type_box);
+
+ types_combobox = Gtk::manage(new Gtk::ComboBox());
+ main_box->pack_start(*Gtk::manage(types_combobox), false, true);
+ types_model = Gtk::ListStore::create(types_model_columns);
+ types_combobox->set_model(types_model);
+ types_combobox->pack_start(types_model_columns.type_name);
+
+}
+
+bool TypesControlModule::add_hook_unlocked()
+{
+ return any_type_check_button->get_active() ||
+ !!types_combobox->get_active();
+}
+
+TypesControlModule::TypesControlModule(const std::string &enum_type_name)
+: type_name(enum_type_name)
+{
+ create_dispatcher("enum", sigc::mem_fun(*this, &TypesControlModule::enum_list_changed_), nullptr); //
todo memleak
+
+ main_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); // todo possibly memleak
+
+ append_types_widgets();
+ append_hook_widgets();
+}
+
+Gtk::Widget* TypesControlModule::get_widget()
+{
+ return main_box;
+}
+
+void TypesControlModule::set_controller(const std::shared_ptr<Controller> &controller)
+{
+ IBaseView::set_controller(controller);
+ controller->on_enum_list_changed.connect([this](const Glib::ustring &enum_name, bool add){
+ if (enum_name != type_name)
+ return;
+
+ gui_push("enum", new std::string(enum_name));
+ gui_push("enum", new bool(add));
+ gui_emit("enum");
+ });
+}
+
+void TypesControlModule::enum_list_changed_()
+{
+ types_model->clear();
+ std::string* type_name = gui_pop<std::string*>("enum");
+ bool *add = gui_pop<bool*>("enum");
+
+ if (*add)
+ {
+ GstEnumType type =
const_cast<RemoteDataContainer<GstEnumType>&>(controller->get_enum_container()).get_item(*type_name);
+ for (auto val : type.get_values())
+ {
+ Gtk::TreeModel::Row row = *(types_model->append());
+ row[types_model_columns.type_id] = val.first;
+ row[types_model_columns.type_name] = val.second.nick;
+ }
+ if (types_model->children().size() > 0)
+ {
+ types_combobox->set_active(0);
+ }
+ }
+ delete add;
+ delete type_name;
+}
diff --git a/src/gst-debugger/modules/types_control_module.h b/src/gst-debugger/modules/types_control_module.h
new file mode 100644
index 0000000..0565dae
--- /dev/null
+++ b/src/gst-debugger/modules/types_control_module.h
@@ -0,0 +1,39 @@
+/*
+ * types_control_module.h
+ *
+ * Created on: Sep 1, 2015
+ * Author: loganek
+ */
+
+#ifndef SRC_GST_DEBUGGER_MODULES_TYPES_CONTROL_MODULE_H_
+#define SRC_GST_DEBUGGER_MODULES_TYPES_CONTROL_MODULE_H_
+
+#include "control_module.h"
+
+class TypesControlModule : virtual public HooksControlModule
+{
+protected:
+ TypesModelColumns types_model_columns;
+ Glib::RefPtr<Gtk::ListStore> types_model;
+ std::string type_name;
+
+ Gtk::CheckButton *any_type_check_button;
+ Gtk::ComboBox *types_combobox;
+
+ void append_types_widgets();
+
+ void enum_list_changed_();
+
+ bool add_hook_unlocked() override;
+
+public:
+ TypesControlModule(const std::string &enum_type_name);
+ virtual ~TypesControlModule() {}
+
+ Gtk::Widget* get_widget() override;
+
+ void set_controller(const std::shared_ptr<Controller> &controller) override;
+
+};
+
+#endif /* SRC_GST_DEBUGGER_MODULES_TYPES_CONTROL_MODULE_H_ */
diff --git a/src/gst-debugger/ui/gst-debugger.glade b/src/gst-debugger/ui/gst-debugger.glade
index e9e3ec1..d639493 100644
--- a/src/gst-debugger/ui/gst-debugger.glade
+++ b/src/gst-debugger/ui/gst-debugger.glade
@@ -277,19 +277,48 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="box22">
+ <object class="GtkFrame" id="controllerFrame">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">vertical</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
<child>
- <object class="GtkBox" id="hookTypeBox">
+ <object class="GtkBox" id="box22">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkLabel" id="label18">
+ <object class="GtkBox" id="hookTypeBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label" translatable="yes">Event type:</property>
+ <child>
+ <object class="GtkLabel" id="label18">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Event type:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="hookAnyTypeCheckButton">
+ <property name="label" translatable="yes">any event</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -298,149 +327,135 @@
</packing>
</child>
<child>
- <object class="GtkCheckButton" id="hookAnyTypeCheckButton">
- <property name="label" translatable="yes">any event</property>
+ <object class="GtkComboBox" id="hookTypesComboBox">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
+ <property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="hookTypesComboBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="box24">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
<child>
- <object class="GtkLabel" id="label22">
+ <object class="GtkBox" id="box24">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label" translatable="yes">Path:</property>
+ <child>
+ <object class="GtkLabel" id="label22">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Path:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="hookAnyPathCheckButton">
+ <property name="label" translatable="yes">any path</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">0</property>
+ <property name="position">2</property>
</packing>
</child>
<child>
- <object class="GtkCheckButton" id="hookAnyPathCheckButton">
- <property name="label" translatable="yes">any path</property>
+ <object class="GtkLabel" id="hookPadPathLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">(none)</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="addNewHookButton">
+ <property name="label" translatable="yes">Add hook</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
+ <property name="receives_default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">1</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label23">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Existing hooks:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
</packing>
</child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="hookPadPathLabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="halign">start</property>
- <property name="label" translatable="yes">(none)</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="addNewHookButton">
- <property name="label" translatable="yes">Add hook</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label23">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Existing hooks:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">5</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow16">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="shadow_type">in</property>
<child>
- <object class="GtkTreeView" id="existingHooksTreeView">
+ <object class="GtkScrolledWindow" id="scrolledwindow16">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection22"/>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="existingHooksTreeView">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection2"/>
+ </child>
+ </object>
</child>
</object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="removeSelectedHook">
+ <property name="label" translatable="yes">Remove selected</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">7</property>
+ </packing>
</child>
</object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">6</property>
- </packing>
</child>
- <child>
- <object class="GtkButton" id="removeSelectedHook">
- <property name="label" translatable="yes">Remove selected</property>
+ <child type="label">
+ <object class="GtkLabel" id="label1">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Controller</property>
</object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">7</property>
- </packing>
</child>
</object>
<packing>
@@ -747,23 +762,6 @@
</packing>
</child>
<child>
- <object class="GtkStatusbar" id="mainStatusbar">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin_start">10</property>
- <property name="margin_end">10</property>
- <property name="margin_top">6</property>
- <property name="margin_bottom">6</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
<object class="GtkBox" id="box20">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -834,6 +832,23 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkStatusbar" id="mainStatusbar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_start">10</property>
+ <property name="margin_end">10</property>
+ <property name="margin_top">6</property>
+ <property name="margin_bottom">6</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]