view 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 source

/*
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;
}