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"