summaryrefslogtreecommitdiffstats
path: root/MainWindow.cc
diff options
context:
space:
mode:
Diffstat (limited to 'MainWindow.cc')
-rw-r--r--MainWindow.cc68
1 files changed, 47 insertions, 21 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);