summaryrefslogtreecommitdiffstats
path: root/src/MainWindow.cc
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-08-15 11:27:34 +0000
committerLennart Poettering <lennart@poettering.net>2004-08-15 11:27:34 +0000
commit4b682a9eba6590d8fe090f68dda6afe59ae64f85 (patch)
tree75345c90f9174dd45c9b5196645a5054c889b698 /src/MainWindow.cc
parentf8b436993e3ea7059984538cd65d50bd50671fe6 (diff)
Move everything to src/ directory
git-svn-id: file:///home/lennart/svn/public/paman/trunk@8 cdefa82f-4ce1-0310-97f5-ab6066f37c3c
Diffstat (limited to 'src/MainWindow.cc')
-rw-r--r--src/MainWindow.cc290
1 files changed, 290 insertions, 0 deletions
diff --git a/src/MainWindow.cc b/src/MainWindow.cc
new file mode 100644
index 0000000..fdb817a
--- /dev/null
+++ b/src/MainWindow.cc
@@ -0,0 +1,290 @@
+#include <iostream>
+#include <string>
+#include <sstream>
+
+#include "paman.hh"
+#include "MainWindow.hh"
+
+#define GLADE_NAME "mainWindow"
+
+enum {
+ ROW_TYPE_SINK_CATEGORY,
+ ROW_TYPE_SOURCE_CATEGORY,
+ ROW_TYPE_SINK,
+ ROW_TYPE_SOURCE,
+};
+
+MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade) :
+ Gtk::Window(cobject),
+ statusLabel(NULL),
+ serverNameLabel(NULL),
+ serverVersionLabel(NULL),
+ defaultSampleTypeLabel(NULL),
+ userNameLabel(NULL),
+ hostNameLabel(NULL),
+ deviceOpenButton(NULL),
+ clientOpenButton(NULL),
+ moduleOpenButton(NULL),
+ connectButton(NULL),
+ deviceTreeView(NULL),
+ clientTreeView(NULL),
+ moduleTreeView(NULL) {
+
+ refGlade->get_widget("statusLabel", statusLabel);
+ refGlade->get_widget("serverNameLabel", serverNameLabel);
+ refGlade->get_widget("serverVersionLabel", serverVersionLabel);
+ refGlade->get_widget("defaultSampleTypeLabel", defaultSampleTypeLabel);
+ 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 ...");
+
+ clearAllData();
+}
+
+MainWindow::~MainWindow() {
+}
+
+MainWindow* MainWindow::create() {
+ MainWindow *w;
+ Glib::RefPtr<Gnome::Glade::Xml> refXml = Gnome::Glade::Xml::create(GLADE_FILE, GLADE_NAME);
+ refXml->get_widget_derived(GLADE_NAME, w);
+ return w;
+}
+
+void MainWindow::updateInfo(SinkInfo &i) {
+ 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 = *(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(sinkRef.get_path(), false);
+ onDeviceTreeViewCursorChanged();
+}
+
+void MainWindow::updateInfo(SourceInfo &i) {
+ 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 = *(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(sourceRef.get_path(), false);
+ onDeviceTreeViewCursorChanged();
+}
+
+void MainWindow::updateInfo(ClientInfo &i) {
+
+ if (!i.treeRef)
+ i.treeRef = Gtk::TreeRowReference(clientTreeStore, Gtk::TreePath(clientTreeStore->append()));
+
+ 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.treeRef)
+ deviceTreeStore->erase(deviceTreeStore->get_iter(i.treeRef.get_path()));
+
+ onDeviceTreeViewCursorChanged();
+}
+
+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() {
+ Gtk::TreeModel::Path p;
+ Gtk::TreeViewColumn *c;
+ deviceTreeView->get_cursor(p, c);
+
+ 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 */) {
+ showDeviceWindow(path);
+}
+
+void MainWindow::onClientTreeViewRowActivated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* /* column */) {
+ showClientWindow(path);
+}
+
+void MainWindow::onModuleTreeViewRowActivated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* /* column */) {
+ showModuleWindow(path);
+}
+
+void MainWindow::updateInfo(const struct pa_server_info &i) {
+ char t[PA_SAMPLE_SNPRINT_MAX_LENGTH];
+ serverNameLabel->set_text(i.server_name);
+ serverVersionLabel->set_text(i.server_version);
+ pa_sample_snprint(t, sizeof(t), &i.sample_spec);
+ defaultSampleTypeLabel->set_text(t);
+ hostNameLabel->set_text(i.host_name);
+ userNameLabel->set_text(i.user_name);
+}
+
+void MainWindow::showSuccess(const char *t) {
+ statusLabel->set_text(t);
+}
+
+void MainWindow::showFailure(const char *t) {
+ char s[256];
+ snprintf(s, sizeof(s), "<b>Failure:</b> %s", t);
+ statusLabel->set_markup(s);
+}
+
+void MainWindow::clearAllData() {
+ 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>");
+ serverVersionLabel->set_markup("<i>n/a</i>");
+ defaultSampleTypeLabel->set_markup("<i>n/a</i>");
+ hostNameLabel->set_markup("<i>n/a</i>");
+ userNameLabel->set_markup("<i>n/a</i>");
+}
+
+void MainWindow::onDeviceOpenButton() {
+ Gtk::TreeModel::Path p;
+ Gtk::TreeViewColumn *c;
+ deviceTreeView->get_cursor(p, c);
+ 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);
+}
+
+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)
+ serverInfoManager->showSinkWindow(row[deviceTreeModelColumns.index]);
+ else if (row[deviceTreeModelColumns.type] == ROW_TYPE_SOURCE)
+ serverInfoManager->showSourceWindow(row[deviceTreeModelColumns.index]);
+}
+
+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]);
+}