summaryrefslogtreecommitdiffstats
path: root/MainWindow.cc
diff options
context:
space:
mode:
Diffstat (limited to 'MainWindow.cc')
-rw-r--r--MainWindow.cc192
1 files changed, 140 insertions, 52 deletions
diff --git a/MainWindow.cc b/MainWindow.cc
index 2e39b82..dfa47b9 100644
--- a/MainWindow.cc
+++ b/MainWindow.cc
@@ -23,9 +23,11 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade:
userNameLabel(NULL),
hostNameLabel(NULL),
deviceOpenButton(NULL),
+ clientOpenButton(NULL),
moduleOpenButton(NULL),
connectButton(NULL),
deviceTreeView(NULL),
+ clientTreeView(NULL),
moduleTreeView(NULL) {
refGlade->get_widget("statusLabel", statusLabel);
@@ -35,22 +37,35 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade:
refGlade->get_widget("hostNameLabel", hostNameLabel);
refGlade->get_widget("userNameLabel", userNameLabel);
refGlade->get_widget("deviceTreeView", deviceTreeView);
+ refGlade->get_widget("clientTreeView", clientTreeView);
refGlade->get_widget("moduleTreeView", moduleTreeView);
refGlade->get_widget("deviceOpenButton", deviceOpenButton);
+ refGlade->get_widget("clientOpenButton", clientOpenButton);
refGlade->get_widget("moduleOpenButton", moduleOpenButton);
refGlade->get_widget("connectButton", connectButton);
deviceTreeStore = Gtk::TreeStore::create(deviceTreeModelColumns);
deviceTreeView->set_model(deviceTreeStore);
-
deviceTreeView->append_column("Name", deviceTreeModelColumns.name);
deviceTreeView->append_column("Description", deviceTreeModelColumns.description);
-
deviceTreeView->signal_row_activated().connect(sigc::mem_fun(*this, &MainWindow::onDeviceTreeViewRowActivated));
deviceTreeView->signal_cursor_changed().connect(sigc::mem_fun(*this, &MainWindow::onDeviceTreeViewCursorChanged));
+ clientTreeStore = Gtk::TreeStore::create(clientTreeModelColumns);
+ clientTreeView->set_model(clientTreeStore);
+ clientTreeView->append_column("Name", clientTreeModelColumns.name);
+ clientTreeView->signal_row_activated().connect(sigc::mem_fun(*this, &MainWindow::onClientTreeViewRowActivated));
+
+ moduleTreeStore = Gtk::TreeStore::create(moduleTreeModelColumns);
+ moduleTreeView->set_model(moduleTreeStore);
+ moduleTreeView->append_column("Name", moduleTreeModelColumns.name);
+ moduleTreeView->append_column("Argument", moduleTreeModelColumns.argument);
+ moduleTreeView->signal_row_activated().connect(sigc::mem_fun(*this, &MainWindow::onModuleTreeViewRowActivated));
+
connectButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onConnectButton));
deviceOpenButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onDeviceOpenButton));
+ clientOpenButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onClientOpenButton));
+ moduleOpenButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onModuleOpenButton));
statusLabel->set_text("Connecting ...");
@@ -68,51 +83,84 @@ MainWindow* MainWindow::create() {
}
void MainWindow::updateInfo(SinkInfo &i) {
- if (!i.treePathValid) {
- Gtk::TreeIter iter = deviceTreeStore.get_iter(sinkPath);
- i.treePath = deviceTreeStore->append(iter.children());
- i.treePathValid = true;
+ if (!i.treeRef) {
+ Gtk::TreeIter iter = deviceTreeStore->get_iter(sinkRef.get_path());
+ i.treeRef = Gtk::TreeRowReference(deviceTreeStore, Gtk::TreePath(deviceTreeStore->append(iter->children())));
}
- Gtk::TreeRow row = *(Gtk::TreeIter(i.treePath))
+ Gtk::TreeRow row = *(deviceTreeStore->get_iter(i.treeRef.get_path()));
row[deviceTreeModelColumns.name] = i.name;
row[deviceTreeModelColumns.description] = i.description;
row[deviceTreeModelColumns.index] = i.index;
row[deviceTreeModelColumns.type] = ROW_TYPE_SINK;
- deviceTreeView->expand_row(i.treePath, false);
+ deviceTreeView->expand_row(sinkRef.get_path(), false);
+ onDeviceTreeViewCursorChanged();
}
void MainWindow::updateInfo(SourceInfo &i) {
- if (!i.treePathValid) {
- Gtk::TreeIter iter = sourcePath;
- i.treePath = deviceTreeModel->append(iter.children());
- i.treePathValid = true;
+ if (!i.treeRef) {
+ Gtk::TreeIter iter = deviceTreeStore->get_iter(sourceRef.get_path());
+ i.treeRef = Gtk::TreeRowReference(deviceTreeStore, Gtk::TreePath(deviceTreeStore->append(iter->children())));
}
- Gtk::TreeRow row(Gtk::TreeIter(i.treePath))
+ Gtk::TreeRow row = *(deviceTreeStore->get_iter(i.treeRef.get_path()));
row[deviceTreeModelColumns.name] = i.name;
row[deviceTreeModelColumns.description] = i.description;
row[deviceTreeModelColumns.index] = i.index;
row[deviceTreeModelColumns.type] = ROW_TYPE_SOURCE;
- deviceTreeView->expand_row(i.treePath, false);
+ deviceTreeView->expand_row(sourceRef.get_path(), false);
+ onDeviceTreeViewCursorChanged();
}
-void MainWindow::removeInfo(SinkInfo &i) {
- if (!i.treePathValid)
- return;
+void MainWindow::updateInfo(ClientInfo &i) {
+ if (!i.treeRef)
+ i.treeRef = Gtk::TreeRowReference(clientTreeStore, Gtk::TreePath(clientTreeStore->append()));
- deviceTreeModel->erase(Gtk::TreeIter(i.treePath));
- i.treePathValid = false;
+ Gtk::TreeRow row = *(clientTreeStore->get_iter(i.treeRef.get_path()));
+ row[clientTreeModelColumns.name] = i.name;
+ row[clientTreeModelColumns.index] = i.index;
+ clientOpenButton->set_sensitive(true);
+}
+
+void MainWindow::updateInfo(ModuleInfo &i) {
+ if (!i.treeRef)
+ i.treeRef = Gtk::TreeRowReference(moduleTreeStore, Gtk::TreePath(moduleTreeStore->append()));
+
+ Gtk::TreeRow row = *(moduleTreeStore->get_iter(i.treeRef.get_path()));
+ row[moduleTreeModelColumns.name] = i.name;
+ row[moduleTreeModelColumns.argument] = i.argument;
+ row[moduleTreeModelColumns.index] = i.index;
+ moduleOpenButton->set_sensitive(true);
+}
+
+void MainWindow::removeInfo(SinkInfo &i) {
+ if (i.treeRef)
+ deviceTreeStore->erase(deviceTreeStore->get_iter(i.treeRef.get_path()));
+
+ onDeviceTreeViewCursorChanged();
}
void MainWindow::removeInfo(SourceInfo &i) {
- if (!i.treePathValid)
- return;
+ if (!i.treeRef)
+ deviceTreeStore->erase(deviceTreeStore->get_iter(i.treeRef.get_path()));
+
+ onDeviceTreeViewCursorChanged();
+}
- deviceTreeModel->erase(Gtk::TreeIter(i.treePath));
- i.treePathValid = false;
+void MainWindow::removeInfo(ClientInfo &i) {
+ if (i.treeRef)
+ clientTreeStore->erase(clientTreeStore->get_iter(i.treeRef.get_path()));
+
+ clientOpenButton->set_sensitive(!moduleTreeStore->children().empty());
+}
+
+void MainWindow::removeInfo(ModuleInfo &i) {
+ if (i.treeRef)
+ moduleTreeStore->erase(moduleTreeStore->get_iter(i.treeRef.get_path()));
+
+ moduleOpenButton->set_sensitive(!moduleTreeStore->children().empty());
}
void MainWindow::onDeviceTreeViewCursorChanged() {
@@ -120,19 +168,22 @@ void MainWindow::onDeviceTreeViewCursorChanged() {
Gtk::TreeViewColumn *c;
deviceTreeView->get_cursor(p, c);
- deviceOpenButton->set_sensitive(sourcePath != p && sinkPath != p);
+ if (!p.gobj())
+ return;
+
+ deviceOpenButton->set_sensitive((sourceRef.get_path() != p) && (sinkRef.get_path() != p));
}
void MainWindow::onDeviceTreeViewRowActivated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* /* column */) {
- Gtk::TreeModel::Row row = *(deviceTreeModel->get_iter(path));
+ showDeviceWindow(path);
+}
- if (!serverInfo)
- return;
+void MainWindow::onClientTreeViewRowActivated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* /* column */) {
+ showClientWindow(path);
+}
- if (row[deviceTreeModelColumns.type] == ROW_TYPE_SINK)
- serverInfo->showSinkWindow(row[deviceTreeModelColumns.index]);
- else if (row[deviceTreeModelColumns.type] == ROW_TYPE_SOURCE)
- serverInfo->showSourceWindow(row[deviceTreeModelColumns.index]);
+void MainWindow::onModuleTreeViewRowActivated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* /* column */) {
+ showModuleWindow(path);
}
void MainWindow::updateInfo(const struct pa_server_info &i) {
@@ -156,22 +207,25 @@ void MainWindow::showFailure(const char *t) {
}
void MainWindow::clearAllData() {
- Gtk::TreeIter i;
- deviceTreeModel->clear();
-
- 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;
-
+ deviceTreeStore->clear();
+
+ Gtk::TreeIter i = deviceTreeStore->append();
+ sinkRef = Gtk::TreeRowReference(deviceTreeStore, Gtk::TreePath(i));
+ (*i)[deviceTreeModelColumns.name] = "Sinks";
+ (*i)[deviceTreeModelColumns.index] = (uint32_t) -1;
+ (*i)[deviceTreeModelColumns.type] = ROW_TYPE_SINK_CATEGORY;
+
+ i = deviceTreeStore->append();
+ sourceRef = Gtk::TreeRowReference(deviceTreeStore, Gtk::TreePath(i));
+ (*i)[deviceTreeModelColumns.name] = "Sources";
+ (*i)[deviceTreeModelColumns.index] = (uint32_t) -1;
+ (*i)[deviceTreeModelColumns.type] = ROW_TYPE_SOURCE_CATEGORY;
+
+ clientTreeStore->clear();
+ moduleTreeStore->clear();
+
deviceOpenButton->set_sensitive(false);
+ clientOpenButton->set_sensitive(false);
moduleOpenButton->set_sensitive(false);
serverNameLabel->set_markup("<i>n/a</i>");
@@ -185,17 +239,51 @@ void MainWindow::onDeviceOpenButton() {
Gtk::TreeModel::Path p;
Gtk::TreeViewColumn *c;
deviceTreeView->get_cursor(p, c);
- Gtk::TreeModel::Row row = *(deviceTreeModel->get_iter(p));
+ showDeviceWindow(p);
+}
+
+void MainWindow::onClientOpenButton() {
+ Gtk::TreeModel::Path p;
+ Gtk::TreeViewColumn *c;
+ clientTreeView->get_cursor(p, c);
+ showClientWindow(p);
+}
+
+void MainWindow::onModuleOpenButton() {
+ Gtk::TreeModel::Path p;
+ Gtk::TreeViewColumn *c;
+ moduleTreeView->get_cursor(p, c);
+ showModuleWindow(p);
+}
- if (!serverInfo)
+void MainWindow::onConnectButton() {
+ create_connection();
+}
+
+void MainWindow::showDeviceWindow(const Gtk::TreePath &p) {
+ if (!serverInfoManager)
return;
+
+ Gtk::TreeModel::Row row = *(deviceTreeStore->get_iter(p));
if (row[deviceTreeModelColumns.type] == ROW_TYPE_SINK)
- serverInfo->showSinkWindow(row[deviceTreeModelColumns.index]);
+ serverInfoManager->showSinkWindow(row[deviceTreeModelColumns.index]);
else if (row[deviceTreeModelColumns.type] == ROW_TYPE_SOURCE)
- serverInfo->showSourceWindow(row[deviceTreeModelColumns.index]);
+ serverInfoManager->showSourceWindow(row[deviceTreeModelColumns.index]);
}
-void MainWindow::onConnectButton() {
- create_connection();
+void MainWindow::showClientWindow(const Gtk::TreePath &p) {
+ if (!serverInfoManager)
+ return;
+
+ Gtk::TreeModel::Row row = *(clientTreeStore->get_iter(p));
+ serverInfoManager->showClientWindow(row[clientTreeModelColumns.index]);
+}
+
+void MainWindow::showModuleWindow(const Gtk::TreePath &p) {
+ if (!serverInfoManager)
+ return;
+
+ Gtk::TreeModel::Row row = *(moduleTreeStore->get_iter(p));
+ serverInfoManager->showModuleWindow(row[moduleTreeModelColumns.index]);
}