summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MainWindow.cc68
-rw-r--r--MainWindow.hh11
-rw-r--r--ServerInfo.cc67
-rw-r--r--ServerInfo.hh9
-rw-r--r--paman.glade490
5 files changed, 613 insertions, 32 deletions
diff --git a/MainWindow.cc b/MainWindow.cc
index 5db98fc..2e39b82 100644
--- a/MainWindow.cc
+++ b/MainWindow.cc
@@ -40,8 +40,8 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade:
refGlade->get_widget("moduleOpenButton", moduleOpenButton);
refGlade->get_widget("connectButton", connectButton);
- deviceTreeModel = Gtk::TreeStore::create(deviceTreeModelColumns);
- deviceTreeView->set_model(deviceTreeModel);
+ deviceTreeStore = Gtk::TreeStore::create(deviceTreeModelColumns);
+ deviceTreeView->set_model(deviceTreeStore);
deviceTreeView->append_column("Name", deviceTreeModelColumns.name);
deviceTreeView->append_column("Description", deviceTreeModelColumns.description);
@@ -67,37 +67,60 @@ MainWindow* MainWindow::create() {
return w;
}
-void MainWindow::updateInfo(const SinkInfo &i) {
- Gtk::TreeModel::Row row = *(deviceTreeModel->append(sinkRow.children()));
+void MainWindow::updateInfo(SinkInfo &i) {
+ if (!i.treePathValid) {
+ Gtk::TreeIter iter = deviceTreeStore.get_iter(sinkPath);
+ i.treePath = deviceTreeStore->append(iter.children());
+ i.treePathValid = true;
+ }
+ Gtk::TreeRow row = *(Gtk::TreeIter(i.treePath))
row[deviceTreeModelColumns.name] = i.name;
row[deviceTreeModelColumns.description] = i.description;
row[deviceTreeModelColumns.index] = i.index;
row[deviceTreeModelColumns.type] = ROW_TYPE_SINK;
- Gtk::TreePath p(sinkRow);
- deviceTreeView->expand_row(p, false);
+ deviceTreeView->expand_row(i.treePath, false);
}
-void MainWindow::updateInfo(const SourceInfo &i) {
- Gtk::TreeModel::Row row = *(deviceTreeModel->append(sourceRow.children()));
+void MainWindow::updateInfo(SourceInfo &i) {
+ if (!i.treePathValid) {
+ Gtk::TreeIter iter = sourcePath;
+ i.treePath = deviceTreeModel->append(iter.children());
+ i.treePathValid = true;
+ }
+ Gtk::TreeRow row(Gtk::TreeIter(i.treePath))
row[deviceTreeModelColumns.name] = i.name;
row[deviceTreeModelColumns.description] = i.description;
row[deviceTreeModelColumns.index] = i.index;
row[deviceTreeModelColumns.type] = ROW_TYPE_SOURCE;
- Gtk::TreePath p(sourceRow);
- deviceTreeView->expand_row(p, false);
+ deviceTreeView->expand_row(i.treePath, false);
+}
+
+void MainWindow::removeInfo(SinkInfo &i) {
+ if (!i.treePathValid)
+ return;
+
+ deviceTreeModel->erase(Gtk::TreeIter(i.treePath));
+ i.treePathValid = false;
+}
+
+void MainWindow::removeInfo(SourceInfo &i) {
+ if (!i.treePathValid)
+ return;
+
+ deviceTreeModel->erase(Gtk::TreeIter(i.treePath));
+ i.treePathValid = false;
}
void MainWindow::onDeviceTreeViewCursorChanged() {
Gtk::TreeModel::Path p;
Gtk::TreeViewColumn *c;
deviceTreeView->get_cursor(p, c);
- Gtk::TreeModel::Row row = *(deviceTreeModel->get_iter(p));
- deviceOpenButton->set_sensitive(row != sourceRow && row != sinkRow);
+ deviceOpenButton->set_sensitive(sourcePath != p && sinkPath != p);
}
void MainWindow::onDeviceTreeViewRowActivated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* /* column */) {
@@ -133,17 +156,20 @@ void MainWindow::showFailure(const char *t) {
}
void MainWindow::clearAllData() {
+ Gtk::TreeIter i;
deviceTreeModel->clear();
- sinkRow = *(deviceTreeModel->append());
- sinkRow[deviceTreeModelColumns.name] = "Sinks";
- sinkRow[deviceTreeModelColumns.index] = -1;
- sinkRow[deviceTreeModelColumns.type] = ROW_TYPE_SINK_CATEGORY;
-
- sourceRow = *(deviceTreeModel->append());
- sourceRow[deviceTreeModelColumns.name] = "Sources";
- sourceRow[deviceTreeModelColumns.index] = -1;
- sourceRow[deviceTreeModelColumns.type] = ROW_TYPE_SOURCE_CATEGORY;
+ i = deviceTreeModel->append();
+ sinkPath = i;
+ *i[deviceTreeModelColumns.name] = "Sinks";
+ *i[deviceTreeModelColumns.index] = -1;
+ *i[deviceTreeModelColumns.type] = ROW_TYPE_SINK_CATEGORY;
+
+ i = deviceTreeModel->append();
+ sourcePath = i;
+ *i[deviceTreeModelColumns.name] = "Sources";
+ *i[deviceTreeModelColumns.index] = -1;
+ *i[deviceTreeModelColumns.type] = ROW_TYPE_SOURCE_CATEGORY;
deviceOpenButton->set_sensitive(false);
moduleOpenButton->set_sensitive(false);
diff --git a/MainWindow.hh b/MainWindow.hh
index 635e66d..d13dca3 100644
--- a/MainWindow.hh
+++ b/MainWindow.hh
@@ -47,14 +47,17 @@ protected:
};
DeviceTreeModelColumns deviceTreeModelColumns;
- Glib::RefPtr<Gtk::TreeStore> deviceTreeModel;
+ Glib::RefPtr<Gtk::TreeStore> deviceTreeStore;
- Gtk::TreeModel::Row sinkRow, sourceRow;
+ Gtk::TreePath sinkPath, sourcePath;
public:
virtual void updateInfo(const struct pa_server_info &i);
- virtual void updateInfo(const SinkInfo &i);
- virtual void updateInfo(const SourceInfo &i);
+ virtual void updateInfo(SinkInfo &i);
+ virtual void updateInfo(SourceInfo &i);
+
+ virtual void removeInfo(SinkInfo &i);
+ virtual void removeInfo(SourceInfo &i);
virtual void onDeviceTreeViewCursorChanged();
virtual void onDeviceTreeViewRowActivated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* /* column */);
diff --git a/ServerInfo.cc b/ServerInfo.cc
index 763f150..ccda5b1 100644
--- a/ServerInfo.cc
+++ b/ServerInfo.cc
@@ -13,7 +13,8 @@ SinkInfo::SinkInfo(const struct pa_sink_info &i) :
owner_module(i.owner_module),
volume(i.volume),
latency(i.latency),
- sinkWindow(NULL) {
+ sinkWindow(NULL),
+ treePathValid(false) {
}
SinkInfo::~SinkInfo() {
@@ -52,7 +53,8 @@ SourceInfo::SourceInfo(const struct pa_source_info &i) :
sample_spec(i.sample_spec),
owner_module(i.owner_module),
monitor_of_sink(i.monitor_of_sink),
- sourceWindow(NULL) {
+ sourceWindow(NULL),
+ treePathValid(false) {
}
SourceInfo::~SourceInfo() {
@@ -95,21 +97,62 @@ static void server_info_callback(struct pa_context *c, const struct pa_server_in
static void sink_info_callback(struct pa_context *c, const struct pa_sink_info *i, int is_last, void *userdata) {
ServerInfo *si = (ServerInfo*) userdata;
- if (!is_last)
+ if (!is_last && i)
si->updateInfo(*i);
}
static void source_info_callback(struct pa_context *c, const struct pa_source_info *i, int is_last, void *userdata) {
ServerInfo *si = (ServerInfo*) userdata;
- if (!is_last)
+ if (!is_last && i)
si->updateInfo(*i);
}
+static void subscribe_callback(struct pa_context *c, enum pa_subscription_event_type t, uint32_t index, void *userdata) {
+ ServerInfo *si = (ServerInfo*) userdata;
+
+ fprintf(stderr, "EV: %u %u\n", t, index);
+
+ switch (t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) {
+ case PA_SUBSCRIPTION_EVENT_SINK:
+ fprintf(stderr, "SINK EVENT\n");
+
+ if (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK == PA_SUBSCRIPTION_EVENT_REMOVE)
+ si->removeSinkInfo(index);
+ else
+ pa_context_get_sink_info_by_index(c, index, sink_info_callback, si);
+ break;
+ case PA_SUBSCRIPTION_EVENT_SOURCE:
+ fprintf(stderr, "SOURCE EVENT\n");
+
+ if (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK == PA_SUBSCRIPTION_EVENT_REMOVE)
+ si->removeSourceInfo(index);
+ else
+ pa_context_get_source_info_by_index(c, index, source_info_callback, si);
+ break;
+ case PA_SUBSCRIPTION_EVENT_MODULE:
+ fprintf(stderr, "MODULE EVENT\n");
+ break;
+ case PA_SUBSCRIPTION_EVENT_CLIENT:
+ fprintf(stderr, "CLIENT EVENT\n");
+ break;
+ case PA_SUBSCRIPTION_EVENT_SINK_INPUT:
+ fprintf(stderr, "SINK INPUT EVENT\n");
+ break;
+ case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT:
+ fprintf(stderr, "SOURCE OUTPUT EVENT\n");
+ break;
+ default:
+ fprintf(stderr, "OTHER EVENT\n");
+ break;
+ }
+}
+
ServerInfo::ServerInfo(struct pa_context &c) :
context(c) {
pa_context_get_server_info(&c, server_info_callback, this);
pa_context_get_sink_info_list(&c, sink_info_callback, this);
pa_context_get_source_info_list(&c, source_info_callback, this);
+ pa_context_subscribe(&c, (enum pa_subscription_mask) (PA_SUBSCRIPTION_FACILITY_SINK|PA_SUBSCRIPTION_FACILITY_SOURCE|PA_SUBSCRIPTION_FACILITY_MODULE|PA_SUBSCRIPTION_FACILITY_SINK_INPUT|PA_SUBSCRIPTION_FACILITY_SOURCE_OUTPUT|PA_SUBSCRIPTION_FACILITY_CLIENT), subscribe_callback, this);
}
ServerInfo::~ServerInfo() {
@@ -163,3 +206,19 @@ SourceInfo* ServerInfo::getSourceInfo(uint32_t index) {
SinkInfo* ServerInfo::getSinkInfo(uint32_t index) {
return sinks[index];
}
+
+void ServerInfo::removeSinkInfo(uint32_t index) {
+ SinkInfo *i;
+ if ((i = sinks[index])) {
+ sinks.erase(index);
+ delete i;
+ }
+}
+
+void ServerInfo::removeSourceInfo(uint32_t index) {
+ SourceInfo *i;
+ if ((i = sources[index])) {
+ sources.erase(index);
+ delete i;
+ }
+}
diff --git a/ServerInfo.hh b/ServerInfo.hh
index 6dea7a9..f6db437 100644
--- a/ServerInfo.hh
+++ b/ServerInfo.hh
@@ -31,6 +31,9 @@ public:
uint32_t volume;
uint32_t latency;
+ Gtk::TreePath treePath;
+ bool treePathValid;
+
SinkWindow *sinkWindow;
};
@@ -48,6 +51,9 @@ public:
uint32_t owner_module;
uint32_t monitor_of_sink;
+ Gtk::TreePath treePath;
+ bool treePathValid;
+
SourceWindow *sourceWindow;
};
@@ -64,6 +70,9 @@ public:
SourceInfo* getSourceInfo(uint32_t index);
SinkInfo* getSinkInfo(uint32_t index);
+
+ void removeSinkInfo(uint32_t index);
+ void removeSourceInfo(uint32_t index);
protected:
std::map<int, SinkInfo*> sinks;
diff --git a/paman.glade b/paman.glade
index 07eeb12..d95bc7c 100644
--- a/paman.glade
+++ b/paman.glade
@@ -10,8 +10,8 @@
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
- <property name="default_width">400</property>
- <property name="default_height">300</property>
+ <property name="default_width">500</property>
+ <property name="default_height">400</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
@@ -61,7 +61,7 @@
<property name="visible">True</property>
<property name="n_rows">5</property>
<property name="n_columns">2</property>
- <property name="homogeneous">False</property>
+ <property name="homogeneous">True</property>
<property name="row_spacing">5</property>
<property name="column_spacing">10</property>
@@ -570,6 +570,149 @@
</child>
<child>
+ <widget class="GtkVBox" id="vbox9">
+ <property name="border_width">5</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">5</property>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow4">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTreeView" id="clientTreeView">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">True</property>
+ <property name="rules_hint">False</property>
+ <property name="reorderable">False</property>
+ <property name="enable_search">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox8">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkButton" id="clientOpenButton">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment9">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox8">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image8">
+ <property name="visible">True</property>
+ <property name="stock">gtk-jump-to</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4718">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Open</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4717">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Clients</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
<widget class="GtkVBox" id="vbox5">
<property name="border_width">5</property>
<property name="visible">True</property>
@@ -1672,4 +1815,345 @@
</child>
</widget>
+<widget class="GtkWindow" id="window1">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">window1</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">False</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox10">
+ <property name="border_width">5</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">5</property>
+
+ <child>
+ <widget class="GtkNotebook" id="notebook4">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">True</property>
+ <property name="show_border">True</property>
+ <property name="tab_pos">GTK_POS_TOP</property>
+ <property name="scrollable">False</property>
+ <property name="enable_popup">False</property>
+
+ <child>
+ <widget class="GtkTable" id="table4">
+ <property name="border_width">5</property>
+ <property name="visible">True</property>
+ <property name="n_rows">5</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">5</property>
+ <property name="column_spacing">10</property>
+
+ <child>
+ <widget class="GtkLabel" id="label4720">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Name:&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4723">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Autoloaded:&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4724">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">label4724</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4725">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">label4725</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4726">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Usage:&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4727">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">label4727</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4728">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">label4728</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4729">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">label4729</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4722">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Arguments:&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4721">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Index:&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4719">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Basic</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox9">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkButton" id="button2">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
</glade-interface>