--- /dev/null
+#include "qui/motif_editor/MotifEditor.hpp"
+#include "alg/sequence.hpp"
+
+#include <set>
+#include <string>
+
+using namespace std;
+
+MotifEditor::MotifEditor(Mussa *m, QWidget *parent)
+ : QWidget(parent),
+ analysis(m),
+ applyButton("set motifs")
+{
+ assert (m != 0);
+ const set<string> &motif = analysis->motifs();
+ vector<string> motif_seq(motif.begin(), motif.end());
+
+ connect(&applyButton, SIGNAL(clicked()), this, SLOT(updateMotifs()));
+ layout.addWidget(&applyButton);
+
+ for(size_t i=0; i != 10; ++i)
+ {
+ MotifDetail *detail = new MotifDetail;
+ if (i < motif_seq.size()) {
+ detail->setMotif(motif_seq[i]);
+ detail->setColor(analysis->colorMapper().lookup("motif", motif_seq[i]));
+ }
+ motif_details.push_back(detail);
+ layout.addWidget(detail);
+ }
+ setLayout(&layout);
+}
+
+MotifEditor::MotifEditor(const MotifEditor& me)
+ : QWidget((QWidget*)me.parent()),
+ analysis(me.analysis),
+ applyButton(me.applyButton.text())
+{
+}
+
+void MotifEditor::updateMotifs()
+{
+ // This function is _sooo_ not thread safe
+ // erase motifs
+ Color motif_default = analysis->colorMapper().typeColor("motif");
+ analysis->colorMapper().erase("motif");
+ analysis->colorMapper().appendTypeColor("motif", motif_default);
+
+ // add our motifs back
+ vector<string> motifs;
+ vector<Color> colors;
+
+ for(std::vector<MotifDetail *>::iterator md_i = motif_details.begin();
+ md_i != motif_details.end();
+ ++md_i)
+ {
+ if ((*md_i)->motif().size() > 0) {
+ motifs.push_back((*md_i)->motif());
+ colors.push_back((*md_i)->color());
+ }
+ }
+ analysis->add_motifs(motifs, colors);
+
+ emit changedMotifs();
+}
+
+//MotifEditor::
+