1 #include "qui/seqbrowser/seqproperties/SequencePropertiesModel.hpp"
3 SequencePropertiesModel::SequencePropertiesModel(model_type orig, QObject *parent)
4 : QAbstractTableModel(parent),
5 original_sequences(orig)
7 for(const_iterator glseq_i = original_sequences.begin();
8 glseq_i != original_sequences.end();
11 // manage to convert out of all of our pointers to call
12 // the glsequence copy constructor
13 model_item new_glseq(new GlSequence(*(glseq_i->get())));
14 sequences.push_back(new_glseq);
18 void SequencePropertiesModel::assign(
19 SequencePropertiesModel::size_type num,
20 const SequencePropertiesModel::model_item val
23 sequences.assign(num, val);
26 SequencePropertiesModel::model_item SequencePropertiesModel::at(
27 SequencePropertiesModel::size_type index
30 return sequences.at(index);
33 SequencePropertiesModel::model_item SequencePropertiesModel::back()
35 return sequences.back();
38 SequencePropertiesModel::iterator SequencePropertiesModel::begin()
40 return sequences.begin();
43 SequencePropertiesModel::const_iterator SequencePropertiesModel::begin() const
45 return sequences.begin();
48 void SequencePropertiesModel::clear()
50 if (sequences.size() != 0) {
51 beginRemoveRows(QModelIndex(), 0, sequences.size()-1);
57 SequencePropertiesModel::iterator SequencePropertiesModel::end()
59 return sequences.end();
62 SequencePropertiesModel::const_iterator SequencePropertiesModel::end() const
64 return sequences.end();
67 bool SequencePropertiesModel::empty() const
69 return sequences.empty();
72 SequencePropertiesModel::model_item SequencePropertiesModel::operator[](
73 SequencePropertiesModel::size_type index
76 return sequences[index];
79 void SequencePropertiesModel::pop_back()
81 int last_element = sequences.size()-1;
82 if (last_element >= 0) {
83 beginRemoveRows(QModelIndex(), last_element, last_element);
89 void SequencePropertiesModel::push_back(
90 SequencePropertiesModel::model_item item
93 int last_element = sequences.size();
94 beginInsertRows(QModelIndex(), last_element, last_element);
95 sequences.push_back(item);
99 SequencePropertiesModel::size_type SequencePropertiesModel::size() const
101 return sequences.size();
105 SequencePropertiesModel::rowCount( const QModelIndex& parent) const
107 return sequences.size();
111 SequencePropertiesModel::columnCount(const QModelIndex& parent) const
117 SequencePropertiesModel::data(const QModelIndex &index, int role) const
119 if (!index.isValid())
122 if (index.row() >= sequences.size())
125 if (index.column() >= 3)
128 if (role == Qt::DisplayRole) {
129 if (index.column() == 0 ) {
130 model_item glseq = sequences[index.row()];
131 std::string name(glseq->sequence()->get_name());
132 if (name.size() == 0) {
133 return QString(tr("Unnamed Sequence"));
135 return QVariant(QString(name.c_str()));
137 } else if (index.column() == 1) {
138 return QVariant(sequences[index.row()]->x());
145 SequencePropertiesModel::headerData(
147 Qt::Orientation orientation,
151 if (role != Qt::DisplayRole)
154 if (orientation == Qt::Horizontal) {
157 return QString("Sequence");
160 return QString("Offset to 0");
170 bool SequencePropertiesModel::setData(
171 const QModelIndex& index,
172 const QVariant &value,
177 int intValue(value.toInt(&isInt));
178 if (index.isValid() and role == Qt::EditRole and isInt) {
179 model_item seq = sequences[index.row()];
180 switch(index.column()) {
191 emit dataChanged(index, index);
198 Qt::ItemFlags SequencePropertiesModel::flags(const QModelIndex& index) const
200 if (!index.isValid())
201 return Qt::ItemIsEnabled;
203 // first column is not editable
204 if (index.column() == 0)
205 return QAbstractItemModel::flags(index);
207 return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
210 void SequencePropertiesModel::saveChanges()
212 const_iterator orig_seq_i = original_sequences.begin();
213 const_iterator new_seq_i = sequences.begin();
215 while(orig_seq_i != original_sequences.end() or new_seq_i != sequences.end())
217 // copy over properties
218 (*orig_seq_i)->setX((*new_seq_i)->x());