Mercurial > bellaciao
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; +}