+#include <QColorDialog>
+#include <QHBoxLayout>
+#include <QRegExp>
+
+#include "qui/motif_editor/MotifDetail.hpp"
+
+#include <iostream>
+using namespace std;
+
+static const QRegExp iupacAlphabet("[ACTGUWRKYSMBHDVN]*", Qt::CaseInsensitive);
+static const QRegExpValidator iupacValidator(iupacAlphabet, 0);
+
+MotifDetail::MotifDetail(QWidget *parent)
+ : QWidget(parent),
+ motif_color(1.0, 1.0, 1.0)
+{
+ setupWidget();
+}
+
+MotifDetail::MotifDetail(const MotifDetail &md)
+ : QWidget((QWidget *)md.parent()),
+ motif_color(md.motif_color),
+ motifText(md.motifText.displayText())
+{
+}
+
+MotifDetail::MotifDetail(std::string& m, Color& c, QWidget *parent)
+ : QWidget(parent),
+ motif_color(c),
+ motifText(m.c_str())
+{
+ setupWidget();
+}
+
+void MotifDetail::setupWidget()
+{
+ QHBoxLayout *layout = new QHBoxLayout;
+
+ colorButton.setFlat(true);
+
+ colorButton.setPalette(QPalette(qcolor()));
+ colorButton.setAutoFillBackground(true);
+ connect(&colorButton, SIGNAL(clicked()), this, SLOT(promptColor()));
+ layout->addWidget(&colorButton);
+ motifText.setValidator(&iupacValidator);
+ layout->addWidget(&motifText);
+
+ setLayout(layout);
+}
+
+void MotifDetail::setMotif(const string &m)
+{
+ motifText.setText(m.c_str());
+}
+
+string MotifDetail::motif() const
+{
+ return motifText.text().toStdString();
+}
+
+void MotifDetail::setColor(const Color &c)
+{
+ motif_color = c;
+ colorButton.setPalette(QPalette(qcolor()));
+}
+
+Color MotifDetail::color() const
+{
+ return motif_color;
+}
+
+QColor MotifDetail::qcolor() const
+{
+ QColor qc;
+ qc.setRedF(motif_color.r());
+ qc.setGreenF(motif_color.g());
+ qc.setBlueF(motif_color.b());
+ return qc;
+}
+
+void MotifDetail::promptColor()
+{
+ QColor new_qcolor = QColorDialog::getColor(qcolor(), this);
+ Color new_color(new_qcolor.redF(), new_qcolor.greenF(), new_qcolor.blueF());
+ setColor(new_color);
+}