File indexing completed on 2024-06-09 04:25:04

0001 /*
0002  *  SPDX-FileCopyrightText: 2004 Adrian Page <adrian@pagenet.plus.com>
0003  *  SPDX-FileCopyrightText: 2011 Srikanth Tiyyagura <srikanth.tulasiram@gmail.com>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 #include "widgets/kis_pattern_chooser.h"
0009 
0010 #include <math.h>
0011 #include <QLabel>
0012 #include <QLayout>
0013 #include <QVBoxLayout>
0014 #include <QResizeEvent>
0015 #include <QShowEvent>
0016 
0017 #include <klocalizedstring.h>
0018 #include <KisResourceItemChooser.h>
0019 #include <KoResourceServerProvider.h>
0020 #include <KisTagFilterResourceProxyModel.h>
0021 
0022 #include "kis_signals_blocker.h"
0023 
0024 #include "kis_global.h"
0025 #include <kis_config.h>
0026 #include <resources/KoPattern.h>
0027 
0028 #include <ksqueezedtextlabel.h>
0029 
0030 KisPatternChooser::KisPatternChooser(QWidget *parent)
0031     : QFrame(parent)
0032 {
0033     m_lblName = new KSqueezedTextLabel(this);
0034     m_lblName->setTextElideMode(Qt::ElideMiddle);
0035     m_lblName->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
0036 
0037     m_itemChooser = new KisResourceItemChooser(ResourceType::Patterns, true, this);
0038     m_itemChooser->setPreviewTiled(true);
0039     m_itemChooser->setPreviewOrientation(Qt::Horizontal);
0040     m_itemChooser->showTaggingBar(true);
0041     m_itemChooser->setSynced(true);
0042 
0043     connect(m_itemChooser, SIGNAL(resourceSelected(KoResourceSP )),
0044             this, SLOT(update(KoResourceSP )));
0045 
0046     connect(m_itemChooser, SIGNAL(resourceSelected(KoResourceSP )),
0047             this, SIGNAL(resourceSelected(KoResourceSP )));
0048 
0049     QVBoxLayout *mainLayout = new QVBoxLayout(this);
0050     mainLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
0051     mainLayout->setMargin(0);
0052     mainLayout->addWidget(m_lblName);
0053     mainLayout->addWidget(m_itemChooser, 10);
0054 }
0055 
0056 KisPatternChooser::~KisPatternChooser()
0057 {
0058 }
0059 
0060 KoResourceSP  KisPatternChooser::currentResource(bool includeHidden)
0061 {
0062     KoResourceSP result = m_itemChooser->currentResource(includeHidden);
0063 
0064     if (!result && includeHidden) {
0065         KoResourceServer<KoPattern> * rserver = KoResourceServerProvider::instance()->patternServer();
0066         if (rserver->resourceCount() > 0) {
0067             KisSignalsBlocker blocker(m_itemChooser);
0068             m_itemChooser->setCurrentResource(rserver->firstResource());
0069             result = rserver->firstResource();
0070         }
0071     }
0072     return result;
0073 }
0074 
0075 void KisPatternChooser::setCurrentPattern(KoResourceSP resource)
0076 {
0077     m_itemChooser->tagFilterModel()->sort(Qt::DisplayRole);
0078     m_itemChooser->setCurrentResource(resource);
0079     update(currentResource());
0080 }
0081 
0082 void KisPatternChooser::setCurrentItem(int row)
0083 {
0084     m_itemChooser->setCurrentItem(row);
0085     if (currentResource()) {
0086         update(currentResource());
0087     }
0088 }
0089 
0090 void KisPatternChooser::setPreviewOrientation(Qt::Orientation orientation)
0091 {
0092     m_itemChooser->setPreviewOrientation(orientation);
0093 }
0094 
0095 void KisPatternChooser::update(KoResourceSP resource)
0096 {
0097     if (!resource) return;
0098 
0099     KoPatternSP pattern = resource.staticCast<KoPattern>();
0100     m_lblName->setText(QString("%1 (%2 x %3)").arg(i18n(pattern->name().toUtf8().data())).arg(pattern->width()).arg(pattern->height()));
0101 }
0102 
0103 void KisPatternChooser::setGrayscalePreview(bool grayscale)
0104 {
0105     m_itemChooser->setGrayscalePreview(grayscale);
0106 }
0107 
0108