[Yake-svn] SF.net SVN: yake:[2035] branches/yake2/yake
Status: Beta
Brought to you by:
psyclonist
|
From: <psy...@us...> - 2010-07-06 17:16:25
|
Revision: 2035
http://yake.svn.sourceforge.net/yake/?rev=2035&view=rev
Author: psyclonist
Date: 2010-07-06 17:16:19 +0000 (Tue, 06 Jul 2010)
Log Message:
-----------
qt: added LineEdit and TreeWidget
Added Paths:
-----------
branches/yake2/yake/src/qt/line_edit.cpp
branches/yake2/yake/src/qt/tree_widget.cpp
branches/yake2/yake/yake/qt/line_edit.h
branches/yake2/yake/yake/qt/tree_widget.h
Added: branches/yake2/yake/src/qt/line_edit.cpp
===================================================================
--- branches/yake2/yake/src/qt/line_edit.cpp (rev 0)
+++ branches/yake2/yake/src/qt/line_edit.cpp 2010-07-06 17:16:19 UTC (rev 2035)
@@ -0,0 +1,78 @@
+#include "yake/qt/line_edit.h"
+#include "yake/qt/line_edit.moc"
+
+#include <QAbstractItemView>
+#include <QLineEdit>
+#include <boost/optional.hpp>
+
+namespace yake {
+ namespace qt {
+ LineEdit::LineEdit(QWidget* parent) : QLineEdit(parent), m_edit(this), m_noValueSet(true)
+ {
+ connect(this,SIGNAL(editTextChanged(const QString&)),this,SLOT(onEditTextChanged(const QString&)));
+ }
+ void LineEdit::onEditTextChanged(const QString& text)
+ {
+ if (m_reader.varies() && text!=getString_VARIES())
+ {
+ // clear 'varies' flag
+ m_reader.reset();
+ }
+ }
+ void LineEdit::setEditorValidators(const IsValueEqualFn& equalFn, const ValueToStringFn& v2s, const StringToValueFn& s2v)
+ {
+ m_isEqual = equalFn;
+ m_v2s = v2s;
+ m_s2v = s2v;
+ m_reader.setEqualFn(m_isEqual);
+ }
+ void LineEdit::reset()
+ {
+ m_noValueSet = true;
+ m_reader.reset();
+ m_edit->clear();
+ }
+ void LineEdit::read(const Value& v)
+ {
+ const bool varied = m_reader.varies();
+ m_reader.read(v);
+ if (!varied && m_reader.varies())
+ {
+ m_edit->setText(getString_VARIES());
+ }
+ else
+ setValue(v);
+ }
+ void LineEdit::setValue(const Value& value)
+ {
+ assert( m_isEqual );
+ assert( m_s2v );
+
+ const boost::optional<QString> text = m_v2s(value);
+ assert( text && "could not convert value to text" );
+ if (!text)
+ return;
+
+ m_edit->setText(*text);
+
+ if (m_noValueSet) // Avoid triggering signal when setting initial value.
+ m_noValueSet = false;
+ else
+ emit valueChanged(this);
+ }
+ Value LineEdit::currentValue() const
+ {
+ assert( m_s2v );
+ if (!m_s2v)
+ return Value();
+
+ const boost::optional<Value> value = m_s2v(m_edit->text());
+ assert( value && "could not convert from string to value" );
+ return value ? *value : Value();
+ }
+ bool LineEdit::varies() const
+ {
+ return m_reader.varies();
+ }
+ } // qt
+} // yake
\ No newline at end of file
Added: branches/yake2/yake/src/qt/tree_widget.cpp
===================================================================
--- branches/yake2/yake/src/qt/tree_widget.cpp (rev 0)
+++ branches/yake2/yake/src/qt/tree_widget.cpp 2010-07-06 17:16:19 UTC (rev 2035)
@@ -0,0 +1,57 @@
+#include "yake/qt/tree_widget.h"
+#include "yake/qt/tree_widget.moc"
+
+namespace yake {
+namespace qt {
+ TreeWidget::TreeWidget(QWidget* parent) :
+ QTreeWidget(parent),
+ m_mode(M_TOPLEVEL)
+ {
+ }
+ TreeWidget& TreeWidget::make_toplevel()
+ {
+ m_mode = M_TOPLEVEL;
+ m_currentMakeItem.clear();
+ return *this;
+ }
+ TreeWidget& TreeWidget::sub()
+ {
+ m_mode = M_SUBITEM;
+
+ if (m_lastItem)
+ {
+ if (m_currentMakeItem.empty() || m_currentMakeItem.back() != m_lastItem)
+ m_currentMakeItem.push_back(m_lastItem);
+ }
+
+ return *this;
+ }
+ TreeWidget& TreeWidget::pop()
+ {
+ if (!m_currentMakeItem.empty())
+ m_currentMakeItem.pop_back();
+ return *this;
+ }
+ TreeWidget& TreeWidget::make_item(const QString& text, const Value& value)
+ {
+ QTreeWidgetItem* item = 0;
+
+ if (m_mode == M_TOPLEVEL || m_currentMakeItem.empty())
+ {
+ item = new QTreeWidgetItem(this);
+ this->addTopLevelItem(item);
+
+ m_currentMakeItem.clear();
+ m_currentMakeItem.push_back(item);
+ }
+ else
+ item = new QTreeWidgetItem(m_currentMakeItem.back());
+
+ item->setText(0, text);
+
+ m_lastItem = item;
+
+ return *this;
+ }
+} // qt
+} // yake
Added: branches/yake2/yake/yake/qt/line_edit.h
===================================================================
--- branches/yake2/yake/yake/qt/line_edit.h (rev 0)
+++ branches/yake2/yake/yake/qt/line_edit.h 2010-07-06 17:16:19 UTC (rev 2035)
@@ -0,0 +1,77 @@
+#ifndef YAKE_QT_LINEEDIT_H
+#define YAKE_QT_LINEEDIT_H
+
+#include "prerequisites.h"
+#include "editor_types.h"
+#include "edit_base.h"
+
+#include <QLineEdit>
+
+namespace yake {
+namespace qt {
+
+ /*
+ class YAKE_QT_API Validator : public boost::noncopyable
+ {
+ virtual ~Validator() {}
+
+ virtual Value validate(const QString&) const = 0;
+ virtual boost::optional<QString> reformat(const Value&) const = 0;
+ };
+ class YAKE_QT_API StringValidator : public Validator
+ {
+ StringValidator(const size_t maxLength = std::numeric_limits<size_t>::max());
+
+ virtual Value validate(const QString&) const;
+ virtual boost::optional<QString> reformat(const Value&) const;
+ private:
+ size_t maxLength_;
+ };
+ class YAKE_QT_API IntValidator : public Validator
+ {
+ IntegralValidator();
+ IntegralValidator(const int min = 0, const int max = std::numeric_limits<int>::max());
+
+ private:
+ };
+ */
+
+ /** A QLineEdit equivalent but using the 'name/value' and multi-edit interface.
+ */
+ class YAKE_QT_API LineEdit : public QLineEdit, public EditBase
+ {
+ Q_OBJECT
+ public:
+ LineEdit(QWidget* parent);
+
+ void setEditorValidators(
+ const IsValueEqualFn& equalFn,
+ const ValueToStringFn& v2s,
+ const StringToValueFn& s2v);
+
+ virtual void reset();
+ virtual void read(const Value& v);
+ virtual Value currentValue() const;
+ virtual void setValue(const Value& value);
+ virtual bool varies() const;
+
+ private Q_SLOTS:
+ void onEditTextChanged(const QString&);
+
+ Q_SIGNALS:
+ void valueChanged(EditBase*);
+
+ private:
+ QLineEdit* m_edit;
+ bool m_noValueSet;
+ ValueReader m_reader;
+ IsValueEqualFn m_isEqual;
+
+ ValueToStringFn m_v2s;
+ StringToValueFn m_s2v;
+ };
+
+} // qt
+} // yake
+
+#endif
Added: branches/yake2/yake/yake/qt/tree_widget.h
===================================================================
--- branches/yake2/yake/yake/qt/tree_widget.h (rev 0)
+++ branches/yake2/yake/yake/qt/tree_widget.h 2010-07-06 17:16:19 UTC (rev 2035)
@@ -0,0 +1,37 @@
+#ifndef YAKE_QT_TREEWIDGET_H
+#define YAKE_QT_TREEWIDGET_H
+
+#include "prerequisites.h"
+#include "editor_types.h"
+#include "edit_base.h"
+
+#include <QTreeWidget>
+
+namespace yake {
+namespace qt {
+
+ class YAKE_QT_API TreeWidget : public QTreeWidget
+ {
+ Q_OBJECT
+ public:
+ TreeWidget(QWidget* parent);
+
+ TreeWidget& make_toplevel();
+ TreeWidget& sub();
+ TreeWidget& pop();
+ TreeWidget& make_item(const QString& text, const Value& value);
+ private:
+ std::deque<QTreeWidgetItem*> m_currentMakeItem;
+ QTreeWidgetItem* m_lastItem;
+
+ enum Mode {
+ M_TOPLEVEL,
+ M_SUBITEM
+ };
+ Mode m_mode;
+ };
+
+} // qt
+} // yake
+
+#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|