+#include "qui/seqbrowser/seqproperties/SequencePropertiesModel.hpp"
+
+SequencePropertiesModel::SequencePropertiesModel(model_type& orig, QObject *parent)
+ : QAbstractTableModel(parent),
+ original_sequences(orig)
+{
+ for(const_iterator glseq_i = original_sequences.begin();
+ glseq_i != original_sequences.end();
+ ++glseq_i)
+ {
+ // manage to convert out of all of our pointers to call
+ // the glsequence copy constructor
+ model_item new_glseq(new GlSequence(*(glseq_i->get())));
+ sequences.push_back(new_glseq);
+ }
+}
+
+void SequencePropertiesModel::assign(
+ SequencePropertiesModel::size_type num,
+ const SequencePropertiesModel::model_item val
+)
+{
+ sequences.assign(num, val);
+}
+
+SequencePropertiesModel::model_item SequencePropertiesModel::at(
+ SequencePropertiesModel::size_type index
+)
+{
+ return sequences.at(index);
+}
+
+SequencePropertiesModel::model_item SequencePropertiesModel::back()
+{
+ return sequences.back();
+}
+
+SequencePropertiesModel::iterator SequencePropertiesModel::begin()
+{
+ return sequences.begin();
+}
+
+SequencePropertiesModel::const_iterator SequencePropertiesModel::begin() const
+{
+ return sequences.begin();
+}
+
+void SequencePropertiesModel::clear()
+{
+ if (sequences.size() != 0) {
+ beginRemoveRows(QModelIndex(), 0, sequences.size()-1);
+ sequences.clear();
+ endRemoveRows();
+ }
+}
+
+SequencePropertiesModel::iterator SequencePropertiesModel::end()
+{
+ return sequences.end();
+}
+
+SequencePropertiesModel::const_iterator SequencePropertiesModel::end() const
+{
+ return sequences.end();
+}
+
+bool SequencePropertiesModel::empty() const
+{
+ return sequences.empty();
+}
+
+SequencePropertiesModel::model_item SequencePropertiesModel::operator[](
+ SequencePropertiesModel::size_type index
+)
+{
+ return sequences[index];
+}
+
+void SequencePropertiesModel::pop_back()
+{
+ int last_element = sequences.size()-1;
+ if (last_element >= 0) {
+ beginRemoveRows(QModelIndex(), last_element, last_element);
+ sequences.pop_back();
+ endRemoveRows();
+ }
+}
+
+void SequencePropertiesModel::push_back(
+ SequencePropertiesModel::model_item item
+)
+{
+ int last_element = sequences.size();
+ beginInsertRows(QModelIndex(), last_element, last_element);
+ sequences.push_back(item);
+ endInsertRows();
+}
+
+SequencePropertiesModel::size_type SequencePropertiesModel::size() const
+{
+ return sequences.size();
+}
+
+int
+SequencePropertiesModel::rowCount( const QModelIndex& parent) const
+{
+ return sequences.size();
+}
+
+int
+SequencePropertiesModel::columnCount(const QModelIndex& parent) const
+{
+ return 2;
+}
+
+QVariant
+SequencePropertiesModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+
+ if (index.row() >= sequences.size())
+ return QVariant();
+
+ if (index.column() >= 3)
+ return QVariant();
+
+ if (role == Qt::DisplayRole) {
+ if (index.column() == 0 ) {
+ model_item glseq = sequences[index.row()];
+ std::string name(glseq->sequence()->get_name());
+ if (name.size() == 0) {
+ return QString(tr("Unnamed Sequence"));
+ } else {
+ return QVariant(QString(name.c_str()));
+ }
+ } else if (index.column() == 1) {
+ return QVariant(sequences[index.row()]->x());
+ }
+ }
+ return QVariant();
+}
+
+QVariant
+SequencePropertiesModel::headerData(
+ int section,
+ Qt::Orientation orientation,
+ int role
+) const
+{
+ if (role != Qt::DisplayRole)
+ return QVariant();
+
+ if (orientation == Qt::Horizontal) {
+ switch(section) {
+ case 0:
+ return QString("Sequence");
+ break;
+ case 1:
+ return QString("Offset to 0");
+ break;
+ default:
+ return QVariant();
+ break;
+ }
+ }
+ return QVariant();
+}
+
+bool SequencePropertiesModel::setData(
+ const QModelIndex& index,
+ const QVariant &value,
+ int role
+)
+{
+ bool isInt;
+ int intValue(value.toInt(&isInt));
+ if (index.isValid() and role == Qt::EditRole and isInt) {
+ model_item seq = sequences[index.row()];
+ switch(index.column()) {
+ case 0:
+ return false;
+ break;
+ case 1:
+ seq->setX(intValue);
+ break;
+ default:
+ return false;
+ break;
+ }
+ emit dataChanged(index, index);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+Qt::ItemFlags SequencePropertiesModel::flags(const QModelIndex& index) const
+{
+ if (!index.isValid())
+ return Qt::ItemIsEnabled;
+
+ // first column is not editable
+ if (index.column() == 0)
+ return QAbstractItemModel::flags(index);
+ else
+ return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
+}
\ No newline at end of file