6#include <KSharedConfig>
31 QMap<QString, TextPropertyConfigModel::TextPropertyData>
propertyData;
36 : QAbstractListModel{parent}
46 return d->defaultVisibilityState;
50 if (state ==
d->defaultVisibilityState)
52 d->defaultVisibilityState = state;
62 for (
int i = 0; i <
d->propertyData.size(); i++) {
75 return d->propertyNames.size();
80 if (!index.isValid())
return QVariant();
81 if (index.row() < 0 || index.row() >=
d->propertyNames.size())
return QVariant();
83 const QString name =
d->propertyNames.at(index.row());
88 }
else if (role == Qt::DisplayRole) {
90 }
else if (role == Qt::ToolTipRole) {
93 return data.visibilityState;
95 return data.searchTerms;
96 }
else if (role ==
Type) {
97 return int (
data.propertyType);
104 if (!index.isValid() || !
value.isValid())
return false;
105 if (index.row() < 0 || index.row() >=
d->propertyNames.size())
return false;
109 const QString name =
d->propertyNames.at(index.row());
110 if (
d->propertyData[name].visibilityState != newState) {
112 emit dataChanged(index, index, {role});
122 if (sourceParent != destinationParent)
return false;
123 beginMoveRows(sourceParent, sourceRow, sourceRow+count, destinationParent, destinationChild);
124 for (
int i = 0; i < count; i++) {
125 d->propertyNames.move(sourceRow+i, destinationChild+i);
133 QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
136 roles[
Type] =
"type";
137 roles[
Name] =
"name";
138 roles[Qt::DisplayRole] =
"title";
144 KConfigGroup configGroup = KSharedConfig::openConfig()->group(
"TextProperties");
146 Q_FOREACH (
const QString name,
d->propertyNames) {
153 KConfigGroup configGroup = KSharedConfig::openConfig()->group(
"TextProperties");
155 Q_FOREACH (
const QString name,
d->propertyNames) {
162 if (
d->propertyNames.contains(name))
return;
163 beginInsertRows(QModelIndex(),
d->propertyNames.size(),
d->propertyNames.size());
168 data.toolTip = toolTip;
169 data.searchTerms = searchTerms.split(
",");
172 d->propertyData.insert(name,
data);
173 d->propertyNames.append(name);
180 return int(
data.visibilityState);
184 : QSortFilterProxyModel(parent) {
203 setSourceModel(model);
211 for (
int i = 0; i < rowCount(); i++) {
212 QModelIndex idx = index(i, 0);
220 QModelIndex idx =
sourceModel()->index(source_row, 0, source_parent);
221 if (!idx.isValid())
return false;
233 const QString name =
sourceModel()->data(idx, Qt::DisplayRole).toString();
236 return (name.contains(filterRegularExpression()) || searchTerms.filter(filterRegularExpression()).size()>0);
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
const QMap< TextPropertyConfigModel::VisibilityState, QString > visibilityConfigNames
const QString DEFAULT_VISIBILITY_STATE
TextPropertyConfigFilterModel(QObject *parent=nullptr)
QAbstractItemModel * sourceModel
bool m_showParagraphProperties
QStringList filteredNames
void setShowParagraphProperties(const bool show)
void proxySourceModelChanged()
void setProxySourceModel(QAbstractItemModel *model)
void showParagraphPropertiesChanged()
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override
bool showParagraphProperties
void filteredNamesChanged()
VisibilityState defaultVisibilityState
int rowCount(const QModelIndex &parent) const override
const QScopedPointer< Private > d
@ Character
This property can be applied on a character level.
@ Paragraph
This property only does something when applied to a paragraph.
@ Mixed
This property can be in either.
bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild) override
bool setData(const QModelIndex &index, const QVariant &value, int role) override
void shouldFilterChanged()
Q_INVOKABLE void loadFromConfiguration()
Q_INVOKABLE void addProperty(const QString &name, const int propertyType=0, const QString title=QString(), const QString toolTip=QString(), const QString searchTerms=QString(), const int visibilityState=-1)
Q_INVOKABLE int visibilityStateForName(const QString &name) const
~TextPropertyConfigModel()
void setDefaultVisibilityState(const VisibilityState state)
@ NeverVisible
Never show property.
@ FollowDefault
Follow the default property.
@ AlwaysVisible
Always show property.
@ WhenRelevant
Show when either set or inherited.
@ WhenSet
Show only when set.
TextPropertyConfigModel(QObject *parent=nullptr)
QVariant data(const QModelIndex &index, int role) const override
QHash< int, QByteArray > roleNames() const override
void defaultVisibilityStateChanged()
TextPropertyConfigModel::VisibilityState defaultVisibilityState
QStringList propertyNames
QMap< QString, TextPropertyConfigModel::TextPropertyData > propertyData
TextPropertyConfigModel::PropertyType propertyType
TextPropertyConfigModel::VisibilityState visibilityState