Add subject support as discussed with David

wilder
Laurent Montel 6 years ago
parent 79c8eb8e0e
commit e36b4100d0
  1. 2
      CMakeLists.txt
  2. 10
      src/snippets/snippetdialog.cpp
  3. 3
      src/snippets/snippetdialog.h
  4. 3
      src/snippets/snippetsmanager.cpp
  5. 40
      src/snippets/snippetsmodel.cpp
  6. 6
      src/snippets/snippetsmodel.h
  7. 11
      src/snippets/snippetwidget.cpp
  8. 4
      src/snippets/snippetwidget.h
  9. 138
      src/snippets/ui/snippetwidget.ui

@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.5)
set(PIM_VERSION "5.12.48")
set(PIM_VERSION "5.12.49")
project(mailcommon VERSION ${PIM_VERSION})

@ -107,6 +107,16 @@ QString SnippetDialog::text() const
return mSnippetWidget->text();
}
void SnippetDialog::setSubject(const QString &text)
{
mSnippetWidget->setSubject(text);
}
QString SnippetDialog::subject() const
{
return mSnippetWidget->subject();
}
void SnippetDialog::setKeySequence(const QKeySequence &sequence)
{
mSnippetWidget->setKeySequence(sequence);

@ -38,6 +38,9 @@ public:
void setText(const QString &text);
Q_REQUIRED_RESULT QString text() const;
void setSubject(const QString &text);
Q_REQUIRED_RESULT QString subject() const;
void setKeySequence(const QKeySequence &sequence);
Q_REQUIRED_RESULT QKeySequence keySequence() const;

@ -171,6 +171,7 @@ void SnippetsManager::Private::createSnippet(const QString &text)
mModel->setData(index, dlg->text(), SnippetsModel::TextRole);
mModel->setData(index, dlg->keySequence().toString(), SnippetsModel::KeySequenceRole);
mModel->setData(index, dlg->keyword(), SnippetsModel::KeywordRole);
mModel->setData(index, dlg->subject(), SnippetsModel::SubjectRole);
Q_EMIT mModel->updateActionCollection(QString(), dlg->name(), dlg->keySequence(), dlg->text());
mDirty = true;
@ -207,6 +208,7 @@ void SnippetsManager::Private::editSnippet()
dlg->setName(oldSnippetName);
dlg->setText(index.data(SnippetsModel::TextRole).toString());
dlg->setKeyword(index.data(SnippetsModel::KeywordRole).toString());
dlg->setSubject(index.data(SnippetsModel::SubjectRole).toString());
dlg->setKeySequence(
QKeySequence::fromString(
index.data(SnippetsModel::KeySequenceRole).toString()));
@ -225,6 +227,7 @@ void SnippetsManager::Private::editSnippet()
mModel->setData(index, dlg->text(), SnippetsModel::TextRole);
mModel->setData(index, dlg->keySequence().toString(), SnippetsModel::KeySequenceRole);
mModel->setData(index, dlg->keyword(), SnippetsModel::KeywordRole);
mModel->setData(index, dlg->subject(), SnippetsModel::SubjectRole);
Q_EMIT mModel->updateActionCollection(oldSnippetName, dlg->name(), dlg->keySequence(), dlg->text());
mDirty = true;

@ -57,6 +57,9 @@ public:
Q_REQUIRED_RESULT int row() const;
SnippetItem *parent() const;
Q_REQUIRED_RESULT QString subject() const;
void setSubject(const QString &subject);
private:
QVector<SnippetItem *> mChildItems;
SnippetItem *mParentItem = nullptr;
@ -66,6 +69,7 @@ private:
QString mText;
QString mKeySequence;
QString mKeyword;
QString mSubject;
};
SnippetItem::SnippetItem(bool isGroup, SnippetItem *parent)
@ -151,6 +155,16 @@ SnippetItem *SnippetItem::parent() const
return mParentItem;
}
QString SnippetItem::subject() const
{
return mSubject;
}
void SnippetItem::setSubject(const QString &subject)
{
mSubject = subject;
}
int SnippetItem::row() const
{
if (mParentItem) {
@ -209,6 +223,10 @@ bool SnippetsModel::setData(const QModelIndex &index, const QVariant &value, int
item->setKeyword(value.toString());
Q_EMIT dataChanged(index, index);
return true;
case SubjectRole:
item->setSubject(value.toString());
Q_EMIT dataChanged(index, index);
return true;
}
return false;
@ -235,6 +253,8 @@ QVariant SnippetsModel::data(const QModelIndex &index, int role) const
return item->keySequence();
case KeywordRole:
return item->keyword();
case SubjectRole:
return item->subject();
}
return QVariant();
@ -371,7 +391,7 @@ QMimeData *SnippetsModel::mimeData(const QModelIndexList &indexes) const
QByteArray encodedData;
QDataStream stream(&encodedData, QIODevice::WriteOnly);
stream << index.parent().internalId() << item->name() << item->text() << item->keySequence() << item->keyword();
stream << index.parent().internalId() << item->name() << item->text() << item->keySequence() << item->keyword() << item->subject();
mimeData->setData(QStringLiteral("text/x-kmail-textsnippet"), encodedData);
mimeData->setText(item->text());
@ -433,7 +453,8 @@ bool SnippetsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, i
QString text;
QString keySequence;
QString keyword;
stream >> id >> name >> text >> keySequence >> keyword;
QString subject;
stream >> id >> name >> text >> keySequence >> keyword >> subject;
if (parent.internalId() == id) {
return false;
@ -447,6 +468,7 @@ bool SnippetsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, i
setData(idx, text, SnippetsModel::TextRole);
setData(idx, keySequence, SnippetsModel::KeySequenceRole);
setData(idx, keyword, SnippetsModel::KeywordRole);
setData(idx, subject, SnippetsModel::SubjectRole);
Q_EMIT dndDone();
return true;
}
@ -495,8 +517,10 @@ void SnippetsModel::load(const QString &filename)
= group.readEntry(QStringLiteral("snippetKeySequence_%1").arg(j), QString());
const QString snippetKeyword
= group.readEntry(QStringLiteral("snippetKeyword_%1").arg(j), QString());
const QString snippetSubject
= group.readEntry(QStringLiteral("snippetSubject_%1").arg(j), QString());
createSnippet(groupIndex, snippetName, snippetText, snippetKeySequence, snippetKeyword);
createSnippet(groupIndex, snippetName, snippetText, snippetKeySequence, snippetKeyword, snippetSubject);
}
}
@ -514,7 +538,7 @@ void SnippetsModel::load(const QString &filename)
}
}
void SnippetsModel::createSnippet(const QModelIndex &groupIndex, const QString &snippetName, const QString &snippetText, const QString &snippetKeySequence, const QString &snippetKeyword)
void SnippetsModel::createSnippet(const QModelIndex &groupIndex, const QString &snippetName, const QString &snippetText, const QString &snippetKeySequence, const QString &snippetKeyword, const QString &snippetSubject)
{
insertRow(rowCount(groupIndex), groupIndex);
const QModelIndex modelIndex = index(rowCount(groupIndex) - 1, 0, groupIndex);
@ -523,6 +547,7 @@ void SnippetsModel::createSnippet(const QModelIndex &groupIndex, const QString &
setData(modelIndex, snippetText, SnippetsModel::TextRole);
setData(modelIndex, snippetKeySequence, SnippetsModel::KeySequenceRole);
setData(modelIndex, snippetKeyword, SnippetsModel::KeywordRole);
setData(modelIndex, snippetSubject, SnippetsModel::SubjectRole);
Q_EMIT updateActionCollection(QString(),
snippetName,
@ -552,10 +577,12 @@ QVector<SnippetsInfo> SnippetsModel::snippetsInfo() const
const QString snippetText = modelIndex.data(SnippetsModel::TextRole).toString();
const QString snippetKeySequence = modelIndex.data(SnippetsModel::KeySequenceRole).toString();
const QString snippetKeyword = modelIndex.data(SnippetsModel::KeywordRole).toString();
const QString snippetSubject = modelIndex.data(SnippetsModel::SubjectRole).toString();
info.text = snippetText;
info.newName = snippetName;
info.keyword = snippetKeyword;
info.keySequence = QKeySequence::fromString(snippetKeySequence);
info.subject = snippetSubject;
infos.append(info);
}
}
@ -601,6 +628,7 @@ void SnippetsModel::save(const QString &filename)
const QString snippetText = modelIndex.data(SnippetsModel::TextRole).toString();
const QString snippetKeySequence = modelIndex.data(SnippetsModel::KeySequenceRole).toString();
const QString snippetKeyword = modelIndex.data(SnippetsModel::KeywordRole).toString();
const QString snippetSubject = modelIndex.data(SnippetsModel::SubjectRole).toString();
group.writeEntry(QStringLiteral("snippetName_%1").arg(j), snippetName);
if (!snippetText.isEmpty()) {
@ -614,6 +642,10 @@ void SnippetsModel::save(const QString &filename)
group.writeEntry(QStringLiteral("snippetKeyword_%1").arg(j),
snippetKeyword);
}
if (!snippetSubject.isEmpty()) {
group.writeEntry(QStringLiteral("snippetSubject_%1").arg(j),
snippetSubject);
}
}
}
}

@ -33,6 +33,7 @@ struct MAILCOMMON_EXPORT SnippetsInfo
QKeySequence keySequence;
QString text;
QString keyword;
QString subject;
};
class MAILCOMMON_EXPORT SnippetsModel : public QAbstractItemModel
@ -44,7 +45,8 @@ public:
NameRole, ///< The name of a snippet or group
TextRole, ///< The text of a snippet
KeySequenceRole, ///< The key sequence to activate a snippet
KeywordRole, ///< The keyword which will replace by snippet
KeywordRole, ///< The keyword which will replace by snippet
SubjectRole, ///< The subject of a snippet
};
static SnippetsModel *instance();
@ -94,7 +96,7 @@ Q_SIGNALS:
private:
QModelIndex createGroup(const QString &groupName);
void createSnippet(const QModelIndex &groupIndex, const QString &snippetName, const QString &snippetText, const QString &snippetKeySequence, const QString &snippetKeyword);
void createSnippet(const QModelIndex &groupIndex, const QString &snippetName, const QString &snippetText, const QString &snippetKeySequence, const QString &snippetKeyword, const QString &snippetSubject);
SnippetItem *mRootItem = nullptr;
QMap<QString, QString> mSavedVariables;
};

@ -177,6 +177,7 @@ void SnippetWidget::clear()
d->mUi.keyword->clear();
d->mUi.snippetText->clear();
d->mUi.keyWidget->setKeySequence({});
d->mUi.subject->clear();
}
bool SnippetWidget::wasChanged() const
@ -188,3 +189,13 @@ void SnippetWidget::setWasChanged(bool b)
{
d->wasChanged = b;
}
QString SnippetWidget::subject() const
{
return d->mUi.subject->text();
}
void SnippetWidget::setSubject(const QString &text)
{
d->mUi.subject->setText(text);
}

@ -55,6 +55,10 @@ public:
Q_REQUIRED_RESULT bool wasChanged() const;
void setWasChanged(bool b);
void setSubject(const QString &text);
Q_REQUIRED_RESULT QString subject() const;
Q_SIGNALS:
void textChanged(const QString &str);
void groupChanged(int index);

@ -7,11 +7,20 @@
<x>0</x>
<y>0</y>
<width>468</width>
<height>188</height>
<height>287</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -30,25 +39,27 @@
</widget>
</item>
<item row="0" column="1">
<widget class="KLineEdit" name="nameEdit">
</widget>
<widget class="KLineEdit" name="nameEdit"/>
</item>
</layout>
</item>
<item>
<widget class="QWidget" name="groupWidget" native="true">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="textLabelGroup">
<property name="text">
<string comment="Group to which the snippet belongs.">Group:</string>
<item row="3" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="wordWrap">
<bool>false</bool>
<property name="sizeHint" stdset="0">
<size>
<width>347</width>
<height>20</height>
</size>
</property>
</widget>
</spacer>
</item>
<item row="1" column="0">
<item row="2" column="0">
<widget class="QLabel" name="textLabel">
<property name="text">
<string>&amp;Snippet:</string>
@ -64,8 +75,31 @@
</property>
</widget>
</item>
<item row="7" column="1" colspan="2">
<widget class="KKeySequenceWidget" name="keyWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="textLabelGroup">
<property name="text">
<string comment="Group to which the snippet belongs.">Group:</string>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="KPIMTextEdit::PlainTextEditorWidget" name="snippetText" native="true">
<widget class="KComboBox" name="groupBox"/>
</item>
<item row="2" column="1" colspan="2">
<widget class="KPIMTextEdit::PlainTextEditorWidget" name="snippetText">
<property name="font">
<font>
<family>Courier</family>
@ -74,27 +108,21 @@
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="pushButtonVariables">
<item row="6" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Variables</string>
<string>Keyword:</string>
</property>
</widget>
</item>
<item row="2" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>347</width>
<height>20</height>
</size>
<item row="3" column="1">
<widget class="QPushButton" name="pushButtonVariables">
<property name="text">
<string>Variables</string>
</property>
</spacer>
</widget>
</item>
<item row="6" column="0">
<item row="7" column="0">
<widget class="QLabel" name="keyWidgetLabel">
<property name="text">
<string>Sho&amp;rtcut:</string>
@ -108,27 +136,37 @@
</widget>
</item>
<item row="6" column="1" colspan="2">
<widget class="KKeySequenceWidget" name="keyWidget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<widget class="KLineEdit" name="keyword">
<property name="urlDropsEnabled">
<bool>false</bool>
</property>
<property name="trapEnterKeyEvent" stdset="0">
<bool>true</bool>
</property>
<property name="showClearButton" stdset="0">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="KComboBox" name="groupBox"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Keyword:</string>
<string>Subject:</string>
</property>
</widget>
</item>
<item row="5" column="1" colspan="2">
<widget class="KLineEdit" name="keyword"/>
<item row="0" column="1" colspan="2">
<widget class="KLineEdit" name="subject">
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
<property name="urlDropsEnabled">
<bool>false</bool>
</property>
<property name="trapEnterKeyEvent" stdset="0">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
@ -136,26 +174,26 @@
</layout>
</widget>
<customwidgets>
<customwidget>
<class>KLineEdit</class>
<extends>QLineEdit</extends>
<header>klineedit.h</header>
</customwidget>
<customwidget>
<class>KComboBox</class>
<extends>QComboBox</extends>
<header>kcombobox.h</header>
</customwidget>
<customwidget>
<class>KKeySequenceWidget</class>
<extends>QWidget</extends>
<header>kkeysequencewidget.h</header>
<class>KLineEdit</class>
<extends>QLineEdit</extends>
<header>klineedit.h</header>
</customwidget>
<customwidget>
<class>KPIMTextEdit::PlainTextEditorWidget</class>
<extends>QWidget</extends>
<header>kpimtextedit/plaintexteditorwidget.h</header>
</customwidget>
<customwidget>
<class>KKeySequenceWidget</class>
<extends>QWidget</extends>
<header>kkeysequencewidget.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>

Loading…
Cancel
Save