Files
qt-creator/shared/proparser/proeditormodel.h

157 lines
5.0 KiB
C++

/***************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Qt Software Information (qt-info@nokia.com)
**
**
** Non-Open Source Usage
**
** Licensees may use this file in accordance with the Qt Beta Version
** License Agreement, Agreement version 2.2 provided with the Software or,
** alternatively, in accordance with the terms contained in a written
** agreement between you and Nokia.
**
** GNU General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU General
** Public License versions 2.0 or 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the packaging
** of this file. Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
**
** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
** http://www.gnu.org/copyleft/gpl.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt GPL Exception
** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
**
***************************************************************************/
#ifndef PROEDITORMODEL_H
#define PROEDITORMODEL_H
#include "namespace_global.h"
#include <QtCore/QAbstractItemModel>
#include <QtCore/QList>
#include <QtCore/QSet>
#include <QtCore/QStringList>
#include <QtGui/QSortFilterProxyModel>
QT_BEGIN_NAMESPACE
class ProBlock;
class ProFile;
class ProItem;
class ProVariable;
QT_END_NAMESPACE
namespace Qt4ProjectManager {
namespace Internal {
class ProCommandManager;
class ProItemInfoManager;
class ProEditorModel : public QAbstractItemModel
{
Q_OBJECT
public:
ProEditorModel(QObject *parent = 0);
~ProEditorModel();
void setInfoManager(ProItemInfoManager *infomanager);
ProItemInfoManager *infoManager() const;
ProCommandManager *cmdManager() const;
void setProFiles(QList<ProFile*> proFiles);
QList<ProFile*> proFiles() const;
QList<QModelIndex> findVariables(const QStringList &varname, const QModelIndex &parent = QModelIndex()) const;
QList<QModelIndex> findBlocks(const QModelIndex &parent = QModelIndex()) const;
bool moveItem(const QModelIndex &index, int row);
bool insertItem(ProItem *item, int row, const QModelIndex &parent);
bool removeItem(const QModelIndex &index);
ProItem *proItem(const QModelIndex &index) const;
ProBlock *proBlock(const QModelIndex &index) const;
ProVariable *proVariable(const QModelIndex &index) const;
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
QModelIndex parent(const QModelIndex &index) const;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
Qt::ItemFlags flags(const QModelIndex &index) const;
QMimeData *mimeData(const QModelIndexList &indexes) const;
inline QList<ProFile*> changed() const { return m_changed.toList(); }
protected:
ProItem *createExpressionItem(QString &str) const;
QString blockName(ProBlock *block) const;
ProBlock *scopeContents(ProBlock *block) const;
QString expressionToString(ProBlock *block, bool display = false) const;
QList<ProItem *> stringToExpression(const QString &exp) const;
bool insertModelItem(ProItem *item, int row, const QModelIndex &parent);
bool removeModelItem(const QModelIndex &index);
private:
void markProFileModified(QModelIndex index);
ProCommandManager *m_cmdmanager;
QList<ProFile*> m_proFiles;
QSet<ProFile*> m_changed;
ProItemInfoManager *m_infomanager;
friend class ProAddCommand;
friend class ProRemoveCommand;
friend class ChangeProScopeCommand;
friend class ChangeProAdvancedCommand;
};
class ProScopeFilter : public QSortFilterProxyModel
{
Q_OBJECT
public:
enum CheckableType {
None,
Variable,
Blocks
};
void setVariableFilter(const QStringList &vars);
void setCheckable( CheckableType ct );
// returns the checked (source) indexes
QList<QModelIndex> checkedIndexes() const;
Qt::ItemFlags flags(const QModelIndex &index) const;
ProScopeFilter(QObject *parent);
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
protected:
ProVariable *sourceVariable(const QModelIndex &index) const;
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
private:
CheckableType m_checkable;
QStringList m_vars;
QMap<QModelIndex, bool> m_checkStates;
};
} // namespace Internal
} // namespace Qt4ProjectManager
#endif // PROEDITORMODEL_H