[pulseaudio-discuss] [PATCH 1/3] cardwidget: Add a port class

poljar (Damir Jelić) poljarinho at gmail.com
Thu Jul 26 06:42:09 PDT 2012


From: "poljar (Damir Jelić)" <poljarinho at gmail.com>

The cardwidget should cache all the relevant data for the ports.

This change introduces a new port class which holds the port info for
the card.
---
 src/cardwidget.h  | 11 +++++++++++
 src/mainwindow.cc | 14 ++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/src/cardwidget.h b/src/cardwidget.h
index 3837d5b..7c63681 100644
--- a/src/cardwidget.h
+++ b/src/cardwidget.h
@@ -23,6 +23,16 @@
 
 #include "pavucontrol.h"
 
+class PortInfo {
+public:
+      Glib::ustring name;
+      Glib::ustring description;
+      uint32_t priority;
+      int available;
+      int direction;
+      int64_t latency_offset;
+};
+
 class CardWidget : public Gtk::VBox {
 public:
     CardWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& x);
@@ -36,6 +46,7 @@ public:
     bool updating;
 
     std::vector< std::pair<Glib::ustring,Glib::ustring> > profiles;
+    std::map<Glib::ustring, PortInfo> ports;
     Glib::ustring activeProfile;
     bool hasSinks;
     bool hasSources;
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index dc84682..fe085ef 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
@@ -290,6 +290,20 @@ void MainWindow::updateCard(const pa_card_info &info) {
 
     w->activeProfile = info.active_profile ? info.active_profile->name : "";
 
+    w->ports.clear();
+    for (uint32_t i = 0; i < info.n_ports; ++i) {
+        PortInfo p;
+
+        p.name = info.ports[i]->name;
+        p.description = info.ports[i]->description;
+        p.priority = info.ports[i]->priority;
+        p.available = info.ports[i]->available;
+        p.direction = info.ports[i]->direction;
+        p.latency_offset = info.ports[i]->latency_offset;
+
+        w->ports[p.name] = p;
+    }
+
     w->updating = false;
 
     w->prepareMenu();
-- 
1.7.11.3



More information about the pulseaudio-discuss mailing list