lib: Clean up QueueModel switch statements

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2015-01-13 19:53:36 -05:00
parent 315a169136
commit ad584900fa
2 changed files with 29 additions and 77 deletions

View File

@ -10,8 +10,6 @@
class QueueModel : public Gtk::TreeModel, public Glib::Object { class QueueModel : public Gtk::TreeModel, public Glib::Object {
private: private:
void increment_stamp(); 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; bool check_iter_validity(const Gtk::TreeIter &) const;
protected: protected:

View File

@ -91,77 +91,20 @@ int QueueModel::get_n_columns_vfunc() const
GType QueueModel::get_column_type_vfunc(int index) const GType QueueModel::get_column_type_vfunc(int index) const
{ {
switch (index) { if (index > 9)
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:
return 0; 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, template <class T>
Glib::ValueBase &value) const static void set_val(const T &t, Glib::ValueBase &value)
{ {
Glib::Value<unsigned int> specific; Glib::Value<T> specific;
specific.init(Glib::Value<unsigned int>::value_type()); specific.init(Glib::Value<T>::value_type());
specific.set(t);
switch (column) { value.init(specific.gobj());
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<unsigned int>::value_type());
value = specific;
}
void QueueModel::get_value_str(Track *track, int column,
Glib::ValueBase &value) const
{
Glib::Value<std::string> specific;
specific.init(Glib::Value<std::string>::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<std::string>::value_type());
value = specific;
} }
void QueueModel::get_value_vfunc(const Gtk::TreeIter &iter, int column, 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; Track *track;
if (!check_iter_validity(iter)) if (!check_iter_validity(iter) ||
return; column > get_n_columns_vfunc())
if (column > get_n_columns_vfunc())
return; return;
track = queue->operator[](iter_to_id(iter)); track = queue->operator[](iter_to_id(iter));
switch (column) { switch (column) {
case 0: 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: case 5:
return set_val(track->album()->year(), value);
case 6:
return set_val(track->genre()->name(), value);
case 7: case 7:
get_value_uint(track, column, value); return set_val(track->count(), value);
break; case 8:
default: return set_val(track->date(), value);
get_value_str(track, column, value); case 9:
return set_val(Glib::Markup::escape_text(track->path()), value);
} }
} }