summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorColin Guthrie <cguthrie@mandriva.org>2009-03-25 21:10:21 +0000
committerColin Guthrie <cguthrie@mandriva.org>2009-03-25 21:10:21 +0000
commitdc2eb66e0a23ffccce421aeeee149be9ce6c5a1d (patch)
treebe3835ae4445b2eae0b497417d996dd8a4d8cb17 /src
parent514a8c12277560a0fee0915e4e48d828c15622e9 (diff)
Order the card profiles by their priority
Diffstat (limited to 'src')
-rw-r--r--src/cardwidget.cc8
-rw-r--r--src/cardwidget.h2
-rw-r--r--src/mainwindow.cc18
3 files changed, 20 insertions, 8 deletions
diff --git a/src/cardwidget.cc b/src/cardwidget.cc
index ea4b208..c8efd31 100644
--- a/src/cardwidget.cc
+++ b/src/cardwidget.cc
@@ -55,11 +55,11 @@ void CardWidget::prepareMenu() {
treeModel->clear();
/* Fill the ComboBox's Tree Model */
- for (std::map<Glib::ustring, Glib::ustring>::iterator i = profiles.begin(); i != profiles.end(); ++i) {
+ for (uint32_t i = 0; i < profiles.size(); ++i) {
Gtk::TreeModel::Row row = *(treeModel->append());
- row[profileModel.name] = i->first;
- row[profileModel.desc] = i->second;
- if (i->first == activeProfile)
+ row[profileModel.name] = profiles[i].first;
+ row[profileModel.desc] = profiles[i].second;
+ if (profiles[i].first == activeProfile)
active_idx = idx;
idx++;
}
diff --git a/src/cardwidget.h b/src/cardwidget.h
index d420c83..1f99b2b 100644
--- a/src/cardwidget.h
+++ b/src/cardwidget.h
@@ -36,7 +36,7 @@ public:
uint32_t index;
bool updating;
- std::map<Glib::ustring,Glib::ustring> profiles;
+ std::vector< std::pair<Glib::ustring,Glib::ustring> > profiles;
Glib::ustring activeProfile;
bool hasSinks;
bool hasSources;
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index 0277bb0..51eb539 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
@@ -22,6 +22,8 @@
#include <config.h>
#endif
+#include <set>
+
#include "mainwindow.h"
#include "cardwidget.h"
@@ -33,7 +35,12 @@
#include "i18n.h"
-/*** MainWindow ***/
+/* Used for profile sorting */
+struct profile_prio_compare {
+ bool operator() (const pa_card_profile_info& lhs, const pa_card_profile_info& rhs) const
+ {return lhs.priority>rhs.priority;}
+};
+
MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x) :
Gtk::Window(cobject),
@@ -116,6 +123,7 @@ void MainWindow::updateCard(const pa_card_info &info) {
CardWidget *w;
bool is_new = false;
const char *description, *icon;
+ std::set<pa_card_profile_info,profile_prio_compare> profile_priorities;
if (cardWidgets.count(info.index))
w = cardWidgets[info.index];
@@ -136,11 +144,15 @@ void MainWindow::updateCard(const pa_card_info &info) {
set_icon_name_fallback(w->iconImage, icon ? icon : "audio-card", Gtk::ICON_SIZE_SMALL_TOOLBAR);
w->hasSinks = w->hasSources = false;
- w->profiles.clear();
+ profile_priorities.clear();
for (uint32_t i=0; i<info.n_profiles; ++i) {
w->hasSinks = w->hasSinks || (info.profiles[i].n_sinks > 0);
w->hasSources = w->hasSources || (info.profiles[i].n_sources > 0);
- w->profiles.insert(std::pair<Glib::ustring,Glib::ustring>(info.profiles[i].name, info.profiles[i].description));
+ profile_priorities.insert(info.profiles[i]);
+ }
+ w->profiles.clear();
+ for (std::set<pa_card_profile_info>::iterator i=profile_priorities.begin(); i != profile_priorities.end(); ++i) {
+ w->profiles.push_back(std::pair<Glib::ustring,Glib::ustring>(i->name,i->description));
}
w->activeProfile = info.active_profile->name;