8#include "incidencecategories.h"
11#include "incidenceeditor_debug.h"
12#include "ui_dialogdesktop.h"
14#include <Akonadi/CalendarUtils>
15#include <Akonadi/TagAttribute>
16#include <Akonadi/TagCreateJob>
17#include <Akonadi/TagFetchJob>
18#include <Akonadi/TagFetchScope>
20using namespace IncidenceEditorNG;
22IncidenceCategories::IncidenceCategories(Ui::EventOrTodoDesktop *ui)
25 setObjectName(
"IncidenceCategories"_L1);
27 connect(mUi->mTagWidget, &Akonadi::TagWidget::selectionChanged,
this, &IncidenceCategories::onSelectionChanged);
30void IncidenceCategories::onSelectionChanged(
const Akonadi::Tag::List &list)
44void IncidenceCategories::load(
const Akonadi::Item &item)
50 Q_ASSERT(mLoadedIncidence);
51 if (mLoadedIncidence) {
52 mMissingCategories = mLoadedIncidence->categories();
53 const auto tags = item.tags();
54 Akonadi::Tag::List selectedTags;
55 selectedTags.reserve(mMissingCategories.count());
56 for (
const auto &tag : tags) {
57 if (mMissingCategories.removeAll(tag.name()) > 0) {
61 createMissingCategories();
62 mUi->mTagWidget->blockSignals(
true);
63 mUi->mTagWidget->setSelection(selectedTags);
64 mUi->mTagWidget->blockSignals(
false);
76void IncidenceCategories::save(Akonadi::Item &item)
78 const auto &selectedTags = mUi->mTagWidget->selection();
80 item.setTags(selectedTags);
84QStringList IncidenceCategories::categories()
const
87 const auto &selectedTags = mUi->mTagWidget->selection();
88 list.
reserve(selectedTags.count() + mMissingCategories.count());
89 for (
const Akonadi::Tag &tag : selectedTags) {
92 list << mMissingCategories;
96void IncidenceCategories::createMissingCategories()
98 for (
const QString &category : std::as_const(mMissingCategories)) {
101 Akonadi::Tag missingTag = Akonadi::Tag(category);
102 auto createJob =
new Akonadi::TagCreateJob(missingTag,
this);
103 createJob->setMergeIfExisting(
true);
108bool IncidenceCategories::isDirty()
const
113void IncidenceCategories::printDebugInfo()
const
115 qCDebug(INCIDENCEEDITOR_LOG) <<
"selected categories = " << categories();
116 qCDebug(INCIDENCEEDITOR_LOG) <<
"mMissingCategories = " << mMissingCategories;
117 qCDebug(INCIDENCEEDITOR_LOG) <<
"mLoadedIncidence->categories() = " << mLoadedIncidence->categories();
120void IncidenceCategories::onMissingTagCreated(KJob *job)
123 qCWarning(INCIDENCEEDITOR_LOG) <<
"Failed to create tag " << job->
errorString();
126 auto createJob =
static_cast<Akonadi::TagCreateJob *
>(job);
127 int count = mMissingCategories.removeAll(createJob->tag().name());
129 auto selectedTags{mUi->mTagWidget->selection()};
130 selectedTags += createJob->tag();
134 mUi->mTagWidget->blockSignals(count > 0);
135 mUi->mTagWidget->setSelection(selectedTags);
136 mUi->mTagWidget->blockSignals(
false);
139#include "moc_incidencecategories.cpp"
void checkDirtyStatus()
Checks if the dirty status has changed until last check and emits the dirtyStatusChanged signal if ne...
QSharedPointer< IncidenceT > incidence() const
Convenience method to get a pointer for a specific const Incidence Type.
QSharedPointer< Incidence > Ptr
virtual QString errorString() const
AKONADI_CALENDAR_EXPORT KCalendarCore::Incidence::Ptr incidence(const Akonadi::Item &item)
KIOCORE_EXPORT QStringList list(const QString &fileClass)
void reserve(qsizetype size)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)