diff layout_widget.cpp @ 8:c63d67895cbe

layout designer: first draft
author Goffi <goffi@goffi.org>
date Wed, 24 Aug 2011 20:38:55 +0200
parents
children 0d7875c26974
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/layout_widget.cpp	Wed Aug 24 20:38:55 2011 +0200
@@ -0,0 +1,140 @@
+/*
+Bellaciao: a Salut à Toi frontend
+Copyright (C) 2011  Jérôme Poisson (goffi@goffi.org)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "layout_widget.h"
+
+WidgetProperty::WidgetProperty(const QString& name, const QString& tooltip)
+    : m_name(name), m_type(NONE)
+{
+}
+
+WidgetPropertyBool::WidgetPropertyBool(const QString& name, bool checked, const QString& tooltip)
+    : WidgetProperty(name, tooltip), m_checked(checked)
+{
+    m_type = BOOL;
+}
+
+LayoutWidget::LayoutWidget(const QString& name, const QString& icon)
+    : m_name(name), m_icon(icon)
+{
+    qDebug() << "LayoutWidget constructeur (" << name <<")";
+
+}
+
+LayoutWidget::~LayoutWidget()
+{
+    qDebug() << "LayoutWidget destructeur";
+
+}
+
+const QString& LayoutWidget::getName() const
+{
+    return m_name;
+}
+
+LayoutWidgetModel::LayoutWidgetModel(QObject* parent)
+    : QAbstractListModel(parent)
+{
+}
+
+LayoutWidgetModel::~LayoutWidgetModel()
+{
+
+    qDebug() << "Destructeur de LayoutWidgetModel";
+    while (!m_layout_widgets.isEmpty())
+        delete m_layout_widgets.takeFirst();
+    qDebug() << "Fin Destructeur de LayoutWidgetModel";
+}
+
+int LayoutWidgetModel::rowCount(const QModelIndex &parent) const
+{
+    return m_layout_widgets.size();
+}
+
+QVariant LayoutWidgetModel::data(const QModelIndex &index, int role) const
+{
+    if (!index.isValid())
+        return QVariant();
+
+    if (index.row() >= m_layout_widgets.size())
+        return QVariant();
+
+    if (role == Qt::DisplayRole)
+        return m_layout_widgets[index.row()]->getName();
+
+    return QVariant();
+}
+
+Qt::ItemFlags LayoutWidgetModel::flags (const QModelIndex& index) const
+{
+    Qt::ItemFlags default_flags = QAbstractListModel::flags(index);
+
+    if (index.isValid())
+        return default_flags | Qt::ItemIsDragEnabled;
+    return default_flags;
+}
+
+QStringList LayoutWidgetModel::mimeTypes() const
+{
+    QStringList types;
+    types << LAYOUT_WIDGET_MIME;
+    return types;
+}
+
+QMimeData* LayoutWidgetModel::mimeData (const QModelIndexList& indexes ) const
+{
+    QMimeData *mimeData = new QMimeData();
+    QByteArray encodedData;
+
+    QDataStream stream(&encodedData, QIODevice::WriteOnly);
+
+    foreach (const QModelIndex &index, indexes) {
+        if (index.isValid()) {
+            QString text = m_layout_widgets[index.row()]->getName();
+            stream << text;
+        }
+    }
+
+    mimeData->setData(LAYOUT_WIDGET_MIME, encodedData);
+    return mimeData;
+}
+
+void LayoutWidgetModel::append(LayoutWidget* layout_widget)
+{
+    if (m_layout_widgets_dict.contains(layout_widget->getName()))
+    {
+        qWarning() << "Layout widget of this name already exists, can't add an other one: " << layout_widget->getName();
+        delete layout_widget;
+        return;
+    }
+    beginInsertRows(QModelIndex(), m_layout_widgets.size(), m_layout_widgets.size()+1);
+    m_layout_widgets.append(layout_widget);
+    m_layout_widgets_dict.insert(layout_widget->getName(), layout_widget);
+    endInsertRows();
+}
+
+
+const QList<LayoutWidget*>& LayoutWidgetModel::getLayoutWidgets() const
+{
+    return m_layout_widgets;
+}
+
+const QHash<QString, LayoutWidget*>& LayoutWidgetModel::getLayoutWidgetsDict() const
+{
+    return m_layout_widgets_dict;
+}