File indexing completed on 2024-04-28 04:18:53
0001 // vim: set tabstop=4 shiftwidth=4 expandtab: 0002 /* 0003 Gwenview: an image viewer 0004 Copyright 2007 Aurélien Gâteau <agateau@kde.org> 0005 0006 This program is free software; you can redistribute it and/or 0007 modify it under the terms of the GNU General Public License 0008 as published by the Free Software Foundation; either version 2 0009 of the License, or (at your option) any later version. 0010 0011 This program is distributed in the hope that it will be useful, 0012 but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0014 GNU General Public License for more details. 0015 0016 You should have received a copy of the GNU General Public License 0017 along with this program; if not, write to the Free Software 0018 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 0019 0020 */ 0021 // Self 0022 #include "transformimageoperation.h" 0023 0024 // Qt 0025 0026 // KF 0027 #include <KLocalizedString> 0028 0029 // Local 0030 #include "document/abstractdocumenteditor.h" 0031 0032 namespace Gwenview 0033 { 0034 struct TransformImageOperationPrivate { 0035 Orientation mOrientation; 0036 }; 0037 0038 TransformJob::TransformJob(Orientation orientation) 0039 : mOrientation(orientation) 0040 { 0041 } 0042 0043 void TransformJob::threadedStart() 0044 { 0045 if (!checkDocumentEditor()) { 0046 return; 0047 } 0048 document()->editor()->applyTransformation(mOrientation); 0049 setError(NoError); 0050 } 0051 0052 TransformImageOperation::TransformImageOperation(Orientation orientation) 0053 : d(new TransformImageOperationPrivate) 0054 { 0055 d->mOrientation = orientation; 0056 switch (d->mOrientation) { 0057 case ROT_90: 0058 setText(i18nc("(qtundo-format)", "Rotate Right")); 0059 break; 0060 case ROT_270: 0061 setText(i18nc("(qtundo-format)", "Rotate Left")); 0062 break; 0063 case HFLIP: 0064 setText(i18nc("(qtundo-format)", "Mirror")); 0065 break; 0066 case VFLIP: 0067 setText(i18nc("(qtundo-format)", "Flip")); 0068 break; 0069 default: 0070 // We should not get there because the transformations listed above are 0071 // the only one available from the UI. Define a default text nevertheless. 0072 setText(i18nc("(qtundo-format)", "Transform")); 0073 break; 0074 } 0075 } 0076 0077 TransformImageOperation::~TransformImageOperation() 0078 { 0079 delete d; 0080 } 0081 0082 void TransformImageOperation::redo() 0083 { 0084 redoAsDocumentJob(new TransformJob(d->mOrientation)); 0085 } 0086 0087 void TransformImageOperation::undo() 0088 { 0089 Orientation orientation; 0090 switch (d->mOrientation) { 0091 case ROT_90: 0092 orientation = ROT_270; 0093 break; 0094 case ROT_270: 0095 orientation = ROT_90; 0096 break; 0097 default: 0098 orientation = d->mOrientation; 0099 break; 0100 } 0101 0102 redoAsDocumentJob(new TransformJob(orientation)); 0103 } 0104 0105 } // namespace 0106 0107 #include "moc_transformimageoperation.cpp"