From 4d38b0a057c9c78c3e400c953b6ab5ea6d2a37b0 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 12 Aug 2004 23:26:31 +0000 Subject: add support for listing clients and modules git-svn-id: file:///home/lennart/svn/public/paman/trunk@5 cdefa82f-4ce1-0310-97f5-ab6066f37c3c --- MainWindow.cc | 192 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 140 insertions(+), 52 deletions(-) (limited to 'MainWindow.cc') 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::RefPtrget_widget("statusLabel", statusLabel); @@ -35,22 +37,35 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtrget_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("n/a"); @@ -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]); } -- cgit