Commit 9035e778 authored by Tobias Hunger's avatar Tobias Hunger

Wizard: Add a wizard for item models

Task-number: QTCREATORBUG-7
Change-Id: Ibc06eda1b6596b08dd2e3be4e426c8b89be31064
Reviewed-by: default avatarAlessandro Portale <alessandro.portale@theqtcompany.com>
parent 114261dc
%{Cpp:LicenseTemplate}\
#include "%{HdrFileName}"
%{JS: Cpp.openNamespaces('%{Class}')}\
%{CN}::%{CN}(QObject *parent)
: %{Base}(parent)
{
}
@if %{CustomHeader}
QVariant %{CN}::headerData(int section, Qt::Orientation orientation, int role) const
{
// FIXME: Implement me!
}
@if %{Editable}
bool %{CN}::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role)
{
if (value != headerData(section, orientation, role)) {
// FIXME: Implement me!
emit headerDataChanged(orientation, section, section);
return true;
}
return false;
}
@endif
@endif
QModelIndex %{CN}::index(int row, int column, const QModelIndex &parent) const
{
// FIXME: Implement me!
}
QModelIndex %{CN}::parent(const QModelIndex &index) const
{
// FIXME: Implement me!
}
int %{CN}::rowCount(const QModelIndex &parent) const
{
if (!parent.isValid())
return 0;
// FIXME: Implement me!
}
int %{CN}::columnCount(const QModelIndex &parent) const
{
if (!parent.isValid())
return 0;
// FIXME: Implement me!
}
@if %{DynamicFetch}
bool %{CN}::hasChildren(const QModelIndex &parent) const
{
// FIXME: Implement me!
}
bool %{CN}::canFetchMore(const QModelIndex &parent) const
{
// FIXME: Implement me!
return false;
}
void %{CN}::fetchMore(const QModelIndex &parent)
{
// FIXME: Implement me!
}
@endif
QVariant %{CN}::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
// FIXME: Implement me!
return QVariant();
}
@if %{Editable}
bool %{CN}::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (data(index, role) != value) {
// FIXME: Implement me!
emit dataChanged(index, index, QVector<int>() << role);
return true;
}
return false;
}
Qt::ItemFlags %{CN}::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::NoItemFlags;
return Qt::ItemIsEditable; // FIXME: Implement me!
}
@endif
@if %{AddData}
bool %{CN}::insertRows(int row, int count, const QModelIndex &parent)
{
beginInsertRows(parent, row, row + count - 1);
// FIXME: Implement me!
endInsertRows();
}
bool %{CN}::insertColumns(int column, int count, const QModelIndex &parent)
{
beginInsertColumns(parent, column, column + count - 1);
// FIXME: Implement me!
endInsertColumns();
}
@endif
@if %{RemoveData}
bool %{CN}::removeRows(int row, int count, const QModelIndex &parent)
{
beginRemoveRows(parent, row, row + count - 1);
// FIXME: Implement me!
endRemoveRows();
}
bool %{CN}::removeColumns(int column, int count, const QModelIndex &parent)
{
beginRemoveColumns(parent, column, column + count - 1);
// FIXME: Implement me!
endRemoveColumns();
}
@endif
%{JS: Cpp.closeNamespaces('%{Class}')}\
%{Cpp:LicenseTemplate}\
#ifndef %{GUARD}
#define %{GUARD}
%{JS: QtSupport.qtIncludes([ 'QtCore/%{Base}' ], [ 'QtCore/%{Base}' ])}\
%{JS: Cpp.openNamespaces('%{Class}')}\
class %{CN} : public %{Base}
{
Q_OBJECT
public:
explicit %{CN}(QObject *parent = 0);
@if %{CustomHeader}
// Header:
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
@if %{Editable}
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
@endif
@endif
// Basic functionality:
QModelIndex index(int row, int column,
const QModelIndex &parent = QModelIndex()) const override;
QModelIndex parent(const QModelIndex &index) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
@if %{DynamicFetch}
// Fetch data dynamically:
bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
bool canFetchMore(const QModelIndex &parent) const override;
void fetchMore(const QModelIndex &parent) override;
@endif
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
@if %{Editable}
// Editable:
bool setData(const QModelIndex &index, const QVariant &value,
int role = Qt::EditRole) override;
Qt::ItemFlags flags(const QModelIndex& index) const override;
@endif
@if %{AddData}
// Add data:
bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
@endif
@if %{RemoveData}
// Remove data:
bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
@endif
private:
};
%{JS: Cpp.closeNamespaces('%{Class}')}
#endif // %{GUARD}\
%{Cpp:LicenseTemplate}\
#include "%{HdrFileName}"
%{JS: Cpp.openNamespaces('%{Class}')}\
%{CN}::%{CN}(QObject *parent)
: %{Base}(parent)
{
}
@if %{CustomHeader}
QVariant %{CN}::headerData(int section, Qt::Orientation orientation, int role) const
{
// FIXME: Implement me!
}
@if %{Editable}
bool %{CN}::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role)
{
if (value != headerData(section, orientation, role)) {
// FIXME: Implement me!
emit headerDataChanged(orientation, section, section);
return true;
}
return false;
}
@endif
@endif
int %{CN}::rowCount(const QModelIndex &parent) const
{
if (!parent.isValid())
return 0;
// FIXME: Implement me!
}
QVariant %{CN}::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
// FIXME: Implement me!
return QVariant();
}
@if %{Editable}
bool %{CN}::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (data(index, role) != value) {
// FIXME: Implement me!
emit dataChanged(index, index, QVector<int>() << role);
return true;
}
return false;
}
Qt::ItemFlags %{CN}::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::NoItemFlags;
return Qt::ItemIsEditable; // FIXME: Implement me!
}
@endif
@if %{AddData}
bool %{CN}::insertRows(int row, int count, const QModelIndex &parent)
{
beginInsertRows(parent, row, row + count - 1);
// FIXME: Implement me!
endInsertRows();
}
@endif
@if %{RemoveData}
bool %{CN}::removeRows(int row, int count, const QModelIndex &parent)
{
beginRemoveRows(parent, row, row + count - 1);
// FIXME: Implement me!
endRemoveRows();
}
@endif
%{JS: Cpp.closeNamespaces('%{Class}')}\
%{Cpp:LicenseTemplate}\
#ifndef %{GUARD}
#define %{GUARD}
%{JS: QtSupport.qtIncludes([ 'QtCore/%{Base}' ], [ 'QtCore/%{Base}' ])}\
%{JS: Cpp.openNamespaces('%{Class}')}\
class %{CN} : public %{Base}
{
Q_OBJECT
public:
explicit %{CN}(QObject *parent = 0);
@if %{CustomHeader}
// Header:
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
@if %{Editable}
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
@endif
@endif
// Basic functionality:
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
@if %{Editable}
// Editable:
bool setData(const QModelIndex &index, const QVariant &value,
int role = Qt::EditRole) override;
Qt::ItemFlags flags(const QModelIndex& index) const override;
@endif
@if %{AddData}
// Add data:
bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
@endif
@if %{RemoveData}
// Remove data:
bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
@endif
private:
};
%{JS: Cpp.closeNamespaces('%{Class}')}
#endif // %{GUARD}\
%{Cpp:LicenseTemplate}\
#include "%{HdrFileName}"
%{JS: Cpp.openNamespaces('%{Class}')}\
%{CN}::%{CN}(QObject *parent)
: %{Base}(parent)
{
}
@if %{CustomHeader}
QVariant %{CN}::headerData(int section, Qt::Orientation orientation, int role) const
{
// FIXME: Implement me!
}
@if %{Editable}
bool %{CN}::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role)
{
if (value != headerData(section, orientation, role)) {
// FIXME: Implement me!
emit headerDataChanged(orientation, section, section);
return true;
}
return false;
}
@endif
@endif
int %{CN}::rowCount(const QModelIndex &parent) const
{
if (!parent.isValid())
return 0;
// FIXME: Implement me!
}
int %{CN}::columnCount(const QModelIndex &parent) const
{
if (!parent.isValid())
return 0;
// FIXME: Implement me!
}
QVariant %{CN}::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
// FIXME: Implement me!
return QVariant();
}
@if %{Editable}
bool %{CN}::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (data(index, role) != value) {
// FIXME: Implement me!
emit dataChanged(index, index, QVector<int>() << role);
return true;
}
return false;
}
Qt::ItemFlags %{CN}::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::NoItemFlags;
return Qt::ItemIsEditable; // FIXME: Implement me!
}
@endif
@if %{AddData}
bool %{CN}::insertRows(int row, int count, const QModelIndex &parent)
{
beginInsertRows(parent, row, row + count - 1);
// FIXME: Implement me!
endInsertRows();
}
bool %{CN}::insertColumns(int column, int count, const QModelIndex &parent)
{
beginInsertColumns(parent, column, column + count - 1);
// FIXME: Implement me!
endInsertColumns();
}
@endif
@if %{RemoveData}
bool %{CN}::removeRows(int row, int count, const QModelIndex &parent)
{
beginRemoveRows(parent, row, row + count - 1);
// FIXME: Implement me!
endRemoveRows();
}
bool %{CN}::removeColumns(int column, int count, const QModelIndex &parent)
{
beginRemoveColumns(parent, column, column + count - 1);
// FIXME: Implement me!
endRemoveColumns();
}
@endif
%{JS: Cpp.closeNamespaces('%{Class}')}\
%{Cpp:LicenseTemplate}\
#ifndef %{GUARD}
#define %{GUARD}
%{JS: QtSupport.qtIncludes([ 'QtCore/%{Base}' ], [ 'QtCore/%{Base}' ])}\
%{JS: Cpp.openNamespaces('%{Class}')}\
class %{CN} : public %{Base}
{
Q_OBJECT
public:
explicit %{CN}(QObject *parent = 0);
@if %{CustomHeader}
// Header:
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
@if %{Editable}
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
@endif
@endif
// Basic functionality:
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
@if %{Editable}
// Editable:
bool setData(const QModelIndex &index, const QVariant &value,
int role = Qt::EditRole) override;
Qt::ItemFlags flags(const QModelIndex& index) const override;
@endif
@if %{AddData}
// Add data:
bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
@endif
@if %{RemoveData}
// Remove data:
bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
@endif
private:
};
%{JS: Cpp.closeNamespaces('%{Class}')}
#endif // %{GUARD}\
{
"version": 1,
"kind": "file",
"id": "A.ItemView",
"category": "R.Qt",
"trDescription": "Creates a Qt item model.",
"trDisplayName": "Qt Item Model",
"trDisplayCategory": "Qt",
"icon": "../../global/genericfilewizard.png",
"enabled": "%{JS: [ %{Plugins} ].indexOf('CppEditor') >= 0}",
"options":
[
{ "key": "TargetPath", "value": "%{Path}" },
{ "key": "HdrPath", "value": "%{Path}/%{HdrFileName}" },
{ "key": "SrcPath", "value": "%{Path}/%{SrcFileName}" },
{ "key": "CN", "value": "%{JS: Cpp.className('%{Class}')}" },
{ "key": "GUARD", "value": "%{JS: Cpp.classToHeaderGuard('%{Class}', '%{JS: Util.preferredSuffix('text/x-c++hdr')}')}" }
],
"pages":
[
{
"trDisplayName": "Define Item Model Class",
"trShortTitle": "Details",
"typeId": "Fields",
"data" :
[
{
"name": "Class",
"trDisplayName": "Class name:",
"mandatory": true,
"type": "LineEdit",
"data": { "validator": "(?:(?:[a-zA-Z_][a-zA-Z_0-9]*::)+[a-zA-Z_][a-zA-Z_0-9]*|)" }
},
{
"name": "Base",
"trDisplayName": "Base class:",
"type": "ComboBox",
"data":
{
"items": [ "QAbstractItemModel", "QAbstractTableModel", "QAbstractListModel" ]
}
},
{
"name": "Sp1",
"type": "Spacer",
"data": { "factor": 2 }
},
{
"name": "CustomHeader",
"trDisplayName": "Customize header row",
"type": "CheckBox",
"data": {
"checked": true,
"checkedValue": true,
"uncheckedValue": false
}
},
{
"name": "Editable",
"trDisplayName": "Items are editable",
"type": "CheckBox",
"data": {
"checked": false,
"checkedValue": true,
"uncheckedValue": false
}
},
{
"name": "AddData",
"trDisplayName": "Rows and columns can be added",
"type": "CheckBox",
"data": {
"checked": false,
"checkedValue": true,
"uncheckedValue": false
}
}, {
"name": "RemoveData",
"trDisplayName": "Rows and columns can be removed",
"type": "CheckBox",
"data": {
"checked": false,
"checkedValue": true,
"uncheckedValue": false
}
},
{
"name": "DynamicFetch",
"trDisplayName": "Fetch data dynamically",
"type": "CheckBox",
"data": {
"checked": false,
"checkedValue": true,
"uncheckedValue": false
}
},
{
"name": "HdrFileName",
"type": "LineEdit",
"trDisplayName": "Header file:",
"mandatory": true,
"data": { "trText": "%{JS: Cpp.classToFileName('%{Class}', '%{JS: Util.preferredSuffix('text/x-c++hdr')}')}" }
},