File indexing completed on 2024-05-12 15:59:57
0001 /* 0002 * This file is part of the KDE project 0003 * SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org> 0004 * SPDX-FileCopyrightText: 2007 Jan Hambrecht <jaham@gmx.net> 0005 * SPDX-FileCopyrightText: 2007 Sven Langkamp <sven.langkamp@gmail.com> 0006 * SPDX-FileCopyrightText: 2011 Srikanth Tiyyagura <srikanth.tulasiram@gmail.com> 0007 * SPDX-FileCopyrightText: 2011 José Luis Vergara <pentalis@gmail.com> 0008 * SPDX-FileCopyrightText: 2013 Sascha Suelzer <s.suelzer@gmail.com> 0009 * SPDX-FileCopyrightText: 2020 Agata Cacko <cacko.azh@gmail.com> 0010 * SPDX-License-Identifier: LGPL-2.0-or-later 0011 */ 0012 0013 #include "KisResourceTaggingManager.h" 0014 0015 #include <QInputDialog> 0016 #include <QMessageBox> 0017 #include <QPointer> 0018 #include <QStringList> 0019 0020 #include <klocalizedstring.h> 0021 #include <ksharedconfig.h> 0022 #include <kconfiggroup.h> 0023 0024 #include <KoResource.h> 0025 0026 #include <KisResourceModel.h> 0027 #include <KisTagFilterResourceProxyModel.h> 0028 #include <KisTagModel.h> 0029 0030 #include "KisTagFilterWidget.h" 0031 #include "KisTagChooserWidget.h" 0032 #include "KisResourceItemChooserContextMenu.h" 0033 #include "kis_debug.h" 0034 #include "KisTag.h" 0035 0036 class KisResourceTaggingManager::Private 0037 { 0038 public: 0039 /// \brief tagChooser tag chooser widget (tags combobox + tag tool button with the popup) 0040 KisTagChooserWidget *tagChooser; 0041 0042 /// \brief tagFilter resources filter widget (resources filter box + "filter by tag" checkbox) 0043 KisTagFilterWidget *tagFilter; 0044 0045 /// \brief model main data model for resources in the item chooser that the Tagging Manager is taking care of 0046 QPointer<KisTagFilterResourceProxyModel> model; 0047 0048 /// \brief tagModel main tag model for tags in the tags combobox 0049 KisTagModel *tagModel; 0050 0051 QString resourceType; 0052 0053 }; 0054 0055 0056 0057 0058 0059 KisResourceTaggingManager::KisResourceTaggingManager(QString resourceType, KisTagFilterResourceProxyModel *model, QWidget *parent) 0060 0061 : QObject(parent) 0062 , d(new Private()) 0063 { 0064 d->model = model; 0065 d->resourceType = resourceType; 0066 d->tagModel = new KisTagModel(resourceType); 0067 d->tagChooser = new KisTagChooserWidget(d->tagModel, resourceType, parent); 0068 d->tagFilter = new KisTagFilterWidget(d->tagModel, parent); 0069 0070 d->model->setFilterInCurrentTag(d->tagFilter->isFilterByTagChecked()); 0071 0072 connect(d->tagChooser, SIGNAL(sigTagChosen(KisTagSP)), this, SLOT(tagChooserIndexChanged(KisTagSP))); 0073 0074 connect(d->tagFilter, SIGNAL(filterByTagChanged(bool)), this, SLOT(slotFilterByTagChanged(bool))); 0075 connect(d->tagFilter, SIGNAL(filterTextChanged(QString)), this, SLOT(tagSearchLineEditTextChanged(QString))); 0076 0077 connect(d->tagChooser, SIGNAL(sigTagChosen(KisTagSP)), d->tagFilter, SLOT(clear())); 0078 } 0079 0080 KisResourceTaggingManager::~KisResourceTaggingManager() 0081 { 0082 delete d->tagModel; 0083 delete d; 0084 } 0085 0086 void KisResourceTaggingManager::showTaggingBar(bool show) 0087 { 0088 show ? d->tagFilter->show() : d->tagFilter->hide(); 0089 show ? d->tagChooser->show() : d->tagChooser->hide(); 0090 0091 KConfigGroup group = KSharedConfig::openConfig()->group("SelectedTags"); 0092 QString tag = group.readEntry<QString>(d->resourceType, "All"); 0093 d->tagChooser->setCurrentItem(tag); 0094 } 0095 0096 void KisResourceTaggingManager::tagChooserIndexChanged(const KisTagSP tag) 0097 { 0098 d->model->setTagFilter(tag); 0099 } 0100 0101 void KisResourceTaggingManager::tagSearchLineEditTextChanged(const QString& lineEditText) 0102 { 0103 d->model->setSearchText(lineEditText); 0104 } 0105 0106 void KisResourceTaggingManager::slotFilterByTagChanged(const bool filterByTag) 0107 { 0108 d->model->setFilterInCurrentTag(filterByTag); 0109 } 0110 0111 void KisResourceTaggingManager::contextMenuRequested(KoResourceSP resource, QPoint pos) 0112 { 0113 // No visible tag chooser usually means no intended tag interaction, 0114 // context menu makes no sense then either 0115 if (!resource || !d->tagChooser->isVisible()) 0116 return; 0117 0118 KisResourceItemChooserContextMenu menu(resource, d->tagChooser->currentlySelectedTag(), d->tagChooser); 0119 menu.exec(pos); 0120 0121 } 0122 0123 KisTagChooserWidget *KisResourceTaggingManager::tagChooserWidget() 0124 { 0125 return d->tagChooser; 0126 } 0127 0128 KisTagFilterWidget *KisResourceTaggingManager::tagFilterWidget() 0129 { 0130 return d->tagFilter; 0131 } 0132