From 1f9bb4bea5427c1bf236e8698855048ef35f3a81 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 11 Aug 2004 15:11:05 +0000 Subject: half work git-svn-id: file:///home/lennart/svn/public/paman/trunk@4 cdefa82f-4ce1-0310-97f5-ab6066f37c3c --- MainWindow.cc | 68 +++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 21 deletions(-) (limited to 'MainWindow.cc') 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::RefPtrget_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); -- cgit