From ad584900fa89099d18180c68d22d1ff574c34295 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Tue, 13 Jan 2015 19:53:36 -0500 Subject: [PATCH] lib: Clean up QueueModel switch statements Signed-off-by: Anna Schumaker --- include/lib/model.h | 2 - lib/model.cpp | 104 ++++++++++++-------------------------------- 2 files changed, 29 insertions(+), 77 deletions(-) diff --git a/include/lib/model.h b/include/lib/model.h index fc642dbe..3a2a3c03 100644 --- a/include/lib/model.h +++ b/include/lib/model.h @@ -10,8 +10,6 @@ class QueueModel : public Gtk::TreeModel, public Glib::Object { private: void increment_stamp(); - void get_value_uint(Track *, int, Glib::ValueBase &) const; - void get_value_str(Track *, int, Glib::ValueBase &) const; bool check_iter_validity(const Gtk::TreeIter &) const; protected: diff --git a/lib/model.cpp b/lib/model.cpp index 49afbe1b..66115d62 100644 --- a/lib/model.cpp +++ b/lib/model.cpp @@ -91,77 +91,20 @@ int QueueModel::get_n_columns_vfunc() const GType QueueModel::get_column_type_vfunc(int index) const { - switch (index) { - case 0: - case 5: - case 7: - return G_TYPE_UINT; - case 1: - case 2: - case 3: - case 4: - case 6: - case 8: - case 9: - return G_TYPE_STRING; - default: + if (index > 9) return 0; - } + if (index == 0 || index == 5 || index == 7) + return G_TYPE_UINT; + return G_TYPE_STRING; } -void QueueModel::get_value_uint(Track *track, int column, - Glib::ValueBase &value) const +template +static void set_val(const T &t, Glib::ValueBase &value) { - Glib::Value specific; - specific.init(Glib::Value::value_type()); - - switch (column) { - case 0: - specific.set(track->track()); - break; - case 5: - specific.set(track->album()->year()); - break; - case 7: - specific.set(track->count()); - } - - value.init(Glib::Value::value_type()); - value = specific; -} - -void QueueModel::get_value_str(Track *track, int column, - Glib::ValueBase &value) const -{ - Glib::Value specific; - specific.init(Glib::Value::value_type()); - - switch (column) { - case 1: - specific.set(track->name()); - break; - case 2: - specific.set(track->length_str()); - break; - case 3: - specific.set(track->artist()->name()); - break; - case 4: - specific.set(track->album()->name()); - break; - case 6: - specific.set(track->genre()->name()); - break; - case 8: - specific.set(track->date()); - break; - case 9: - specific.set(Glib::Markup::escape_text(track->path())); - } - - value.init(Glib::Value::value_type()); - value = specific; - + Glib::Value specific; + specific.init(Glib::Value::value_type()); + specific.set(t); + value.init(specific.gobj()); } void QueueModel::get_value_vfunc(const Gtk::TreeIter &iter, int column, @@ -169,22 +112,33 @@ void QueueModel::get_value_vfunc(const Gtk::TreeIter &iter, int column, { Track *track; - if (!check_iter_validity(iter)) - return; - - if (column > get_n_columns_vfunc()) + if (!check_iter_validity(iter) || + column > get_n_columns_vfunc()) return; track = queue->operator[](iter_to_id(iter)); switch (column) { case 0: + return set_val(track->track(), value); + case 1: + return set_val(track->name(), value); + case 2: + return set_val(track->length_str(), value); + case 3: + return set_val(track->artist()->name(), value); + case 4: + return set_val(track->album()->name(), value); case 5: + return set_val(track->album()->year(), value); + case 6: + return set_val(track->genre()->name(), value); case 7: - get_value_uint(track, column, value); - break; - default: - get_value_str(track, column, value); + return set_val(track->count(), value); + case 8: + return set_val(track->date(), value); + case 9: + return set_val(Glib::Markup::escape_text(track->path()), value); } }