File indexing completed on 2024-05-12 15:58:42

0001 /*
0002  *  SPDX-FileCopyrightText: 2011 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "kis_simple_stroke_strategy.h"
0008 
0009 
0010 /***************************************************************/
0011 /*         private class: SimpleStrokeJobStrategy              */
0012 /***************************************************************/
0013 
0014 class SimpleStrokeJobStrategy : public KisStrokeJobStrategy
0015 {
0016 public:
0017     SimpleStrokeJobStrategy(KisSimpleStrokeStrategy::JobType type,
0018                             KisSimpleStrokeStrategy *parentStroke)
0019         : m_type(type),
0020           m_parentStroke(parentStroke)
0021     {
0022     }
0023 
0024     void run(KisStrokeJobData *data) override {
0025         switch(m_type) {
0026         case KisSimpleStrokeStrategy::JOB_INIT:
0027             Q_UNUSED(data);
0028             m_parentStroke->initStrokeCallback();
0029             break;
0030         case KisSimpleStrokeStrategy::JOB_FINISH:
0031             Q_UNUSED(data);
0032             m_parentStroke->finishStrokeCallback();
0033             break;
0034         case KisSimpleStrokeStrategy::JOB_CANCEL:
0035             Q_UNUSED(data);
0036             m_parentStroke->cancelStrokeCallback();
0037             break;
0038         case KisSimpleStrokeStrategy::JOB_DOSTROKE:
0039             m_parentStroke->doStrokeCallback(data);
0040             break;
0041         case KisSimpleStrokeStrategy::JOB_SUSPEND:
0042             m_parentStroke->suspendStrokeCallback();
0043             break;
0044         case KisSimpleStrokeStrategy::JOB_RESUME:
0045             m_parentStroke->resumeStrokeCallback();
0046             break;
0047         default:
0048             break;
0049         }
0050     }
0051 
0052     QString debugId() const override {
0053         return QString("%1/%2")
0054             .arg(m_parentStroke->id())
0055             .arg(KisSimpleStrokeStrategy::jobTypeToString(m_type));
0056     }
0057 
0058 private:
0059     KisSimpleStrokeStrategy::JobType m_type;
0060     KisSimpleStrokeStrategy *m_parentStroke;
0061 };
0062 
0063 
0064 /***************************************************************/
0065 /*                 KisSimpleStrokeStrategy                     */
0066 /***************************************************************/
0067 
0068 KisSimpleStrokeStrategy::KisSimpleStrokeStrategy(const QLatin1String &id, const KUndo2MagicString &name)
0069     : KisStrokeStrategy(id, name),
0070       m_jobEnabled(NJOBS, false),
0071       m_jobSequentiality(NJOBS, KisStrokeJobData::SEQUENTIAL),
0072       m_jobExclusivity(NJOBS, KisStrokeJobData::NORMAL)
0073 {
0074 }
0075 
0076 KisSimpleStrokeStrategy::KisSimpleStrokeStrategy(const KisSimpleStrokeStrategy &rhs)
0077     : KisStrokeStrategy(rhs),
0078       m_jobEnabled(rhs.m_jobEnabled),
0079       m_jobSequentiality(rhs.m_jobSequentiality),
0080       m_jobExclusivity(rhs.m_jobExclusivity)
0081 {
0082 }
0083 
0084 void KisSimpleStrokeStrategy::enableJob(JobType type, bool enable,
0085                                         KisStrokeJobData::Sequentiality sequentiality,
0086                                         KisStrokeJobData::Exclusivity exclusivity)
0087 {
0088     m_jobEnabled[(int)type] = enable;
0089     m_jobSequentiality[(int)type] = sequentiality;
0090     m_jobExclusivity[(int)type] = exclusivity;
0091 }
0092 
0093 KisStrokeJobStrategy*
0094 KisSimpleStrokeStrategy::createStrategy(JobType type)
0095 {
0096     KisStrokeJobStrategy *strategy = 0;
0097 
0098     if(m_jobEnabled[(int)type]) {
0099         strategy = new SimpleStrokeJobStrategy(type, this);
0100     }
0101 
0102     return strategy;
0103 }
0104 
0105 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createInitStrategy()
0106 {
0107     return createStrategy(JOB_INIT);
0108 }
0109 
0110 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createFinishStrategy()
0111 {
0112     return createStrategy(JOB_FINISH);
0113 }
0114 
0115 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createCancelStrategy()
0116 {
0117     return createStrategy(JOB_CANCEL);
0118 }
0119 
0120 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createDabStrategy()
0121 {
0122     return createStrategy(JOB_DOSTROKE);
0123 }
0124 
0125 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createSuspendStrategy()
0126 {
0127     return createStrategy(JOB_SUSPEND);
0128 }
0129 
0130 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createResumeStrategy()
0131 {
0132     return createStrategy(JOB_RESUME);
0133 }
0134 
0135 KisStrokeJobData* KisSimpleStrokeStrategy::createData(JobType type)
0136 {
0137     KisStrokeJobData::Sequentiality sequentiality = m_jobSequentiality[(int)type];
0138     KisStrokeJobData::Exclusivity exclusivity = m_jobExclusivity[(int)type];
0139 
0140     return new KisStrokeJobData(sequentiality, exclusivity);
0141 }
0142 
0143 KisStrokeJobData* KisSimpleStrokeStrategy::createInitData()
0144 {
0145     return createData(JOB_INIT);
0146 }
0147 
0148 KisStrokeJobData* KisSimpleStrokeStrategy::createFinishData()
0149 {
0150     return createData(JOB_FINISH);
0151 }
0152 
0153 KisStrokeJobData* KisSimpleStrokeStrategy::createCancelData()
0154 {
0155     return createData(JOB_CANCEL);
0156 }
0157 
0158 KisStrokeJobData* KisSimpleStrokeStrategy::createSuspendData()
0159 {
0160     return createData(JOB_SUSPEND);
0161 }
0162 
0163 KisStrokeJobData* KisSimpleStrokeStrategy::createResumeData()
0164 {
0165     return createData(JOB_RESUME);
0166 }
0167 
0168 void KisSimpleStrokeStrategy::initStrokeCallback()
0169 {
0170 }
0171 
0172 void KisSimpleStrokeStrategy::finishStrokeCallback()
0173 {
0174 }
0175 
0176 void KisSimpleStrokeStrategy::cancelStrokeCallback()
0177 {
0178 }
0179 
0180 void KisSimpleStrokeStrategy::doStrokeCallback(KisStrokeJobData *data)
0181 {
0182     Q_UNUSED(data);
0183 }
0184 
0185 void KisSimpleStrokeStrategy::suspendStrokeCallback()
0186 {
0187 }
0188 
0189 void KisSimpleStrokeStrategy::resumeStrokeCallback()
0190 {
0191 }
0192 
0193 QLatin1String KisSimpleStrokeStrategy::jobTypeToString(KisSimpleStrokeStrategy::JobType type)
0194 {
0195     QLatin1String result;
0196 
0197     switch (type) {
0198     case JOB_INIT:
0199         result = QLatin1String("init");
0200         break;
0201     case JOB_DOSTROKE:
0202         result = QLatin1String("dostroke");
0203         break;
0204     case JOB_FINISH:
0205         result = QLatin1String("finish");
0206         break;
0207     case JOB_CANCEL:
0208         result = QLatin1String("cancel");
0209         break;
0210     case JOB_SUSPEND:
0211         result = QLatin1String("suspend");
0212         break;
0213     case JOB_RESUME:
0214         result = QLatin1String("resume");
0215         break;
0216     case NJOBS:
0217         qFatal("Undefined stroke job type: %d", type);
0218     }
0219 
0220     return result;
0221 }