From dc2eb66e0a23ffccce421aeeee149be9ce6c5a1d Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Wed, 25 Mar 2009 21:10:21 +0000 Subject: Order the card profiles by their priority --- src/cardwidget.cc | 8 ++++---- src/cardwidget.h | 2 +- src/mainwindow.cc | 18 +++++++++++++++--- 3 files changed, 20 insertions(+), 8 deletions(-) (limited to 'src') 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::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 profiles; + std::vector< std::pair > 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 #endif +#include + #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& 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 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; ihasSinks = w->hasSinks || (info.profiles[i].n_sinks > 0); w->hasSources = w->hasSources || (info.profiles[i].n_sources > 0); - w->profiles.insert(std::pair(info.profiles[i].name, info.profiles[i].description)); + profile_priorities.insert(info.profiles[i]); + } + w->profiles.clear(); + for (std::set::iterator i=profile_priorities.begin(); i != profile_priorities.end(); ++i) { + w->profiles.push_back(std::pair(i->name,i->description)); } w->activeProfile = info.active_profile->name; -- cgit