1 #include "qui/motif_editor/MotifEditor.hpp"
2 #include "alg/sequence.hpp"
9 MotifEditor::MotifEditor(MussaRef m, QWidget *parent)
22 const set<Sequence> &motif = analysis->motifs();
23 vector<Sequence> motif_seq(motif.begin(), motif.end());
25 applyButton->setFocusPolicy(Qt::StrongFocus);
26 connect(applyButton, SIGNAL(clicked()), this, SLOT(updateAnalysisMotifs()));
27 button_layout->addStretch();
28 button_layout->addWidget(applyButton);
30 table->setItemDelegate(delegate);
32 editor_layout->addWidget(table);
33 editor_layout->addLayout(button_layout);
34 setLayout(editor_layout);
40 void MotifEditor::setupWidgets()
42 editor_layout = new QVBoxLayout(this);
43 button_layout = new QHBoxLayout(this);
44 table = new QTableView(this);
45 delegate = new MotifEditorDelegate(this);
46 applyButton = new QPushButton("apply");
49 void MotifEditor::updateModel()
51 // if our current analysis doesn't match the one in our
52 // model, we probalby changed the analysis.
53 // so delete and restart
54 // DET 2007mar30 (can this if statement ever be true? it doesn't look
55 // like there's a way to change the analysis?)
56 if (model and model->getAnalysis() != analysis) {
60 // if we don't have a model, create a new one
62 model = new MotifModel(analysis);
64 table->setModel(model);
68 void MotifEditor::updateAnalysisMotifs()
70 // This function is _sooo_ not thread safe
72 Color motif_default = analysis->colorMapper()->typeColor("motif");
73 analysis->colorMapper()->erase("motif");
74 analysis->colorMapper()->appendTypeColor("motif", motif_default);
76 // add our motifs back
77 vector<Sequence> new_motifs;
78 vector<Color> new_colors;
80 for(MotifModel::iterator md_i = model->begin();
84 if (md_i->getSequence().size() > 0 && md_i->isEnabled()) {
85 new_motifs.push_back(md_i->getSequence());
86 new_colors.push_back(md_i->getColor());
89 analysis->set_motifs(new_motifs, new_colors);
94 void MotifEditor::updateTitle()
96 std::string title("Motif Editor: ");
98 title += analysis->get_title();
100 setWindowTitle(title.c_str());
103 void MotifEditor::updateView()
105 for (int row = 0; row < model->rowCount(QModelIndex()); ++row)
106 table->resizeRowToContents(row);
107 for (int column = 0; column < model->columnCount(QModelIndex()); ++column)
108 table->resizeColumnToContents(column);