Subversion Repositories Scribus

Rev

Rev 23907 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
3614 cbradney 7
/***************************************************************************
8
                          pageitem.cpp  -  description
9
                             -------------------
10
    begin                : Sat Apr 7 2001
11
    copyright            : (C) 2001 by Franz Schmid
12
    email                : Franz.Schmid@altmuehlnet.de
13
 ***************************************************************************/
14
 
15
/***************************************************************************
16
 *                                                                         *
17
 *   This program is free software; you can redistribute it and/or modify  *
18
 *   it under the terms of the GNU General Public License as published by  *
19
 *   the Free Software Foundation; either version 2 of the License, or     *
20
 *   (at your option) any later version.                                   *
21
 *                                                                         *
22
 ***************************************************************************/
23
 
11645 fschmid 24
// #include <QDebug>
16546 jghali 25
#include <QApplication>
21563 jghali 26
#include <QFontInfo>
10862 cbradney 27
#include <QGridLayout>
8501 cbradney 28
#include <QKeyEvent>
10220 cbradney 29
 
3614 cbradney 30
#include <cmath>
31
#include <cassert>
32
 
20478 jghali 33
#include "scconfig.h"
34
 
35
#include "appmodes.h"
36
#include "commonstrings.h"
16105 fschmid 37
#include "filewatcher.h"
3614 cbradney 38
#include "pageitem.h"
10862 cbradney 39
#include "pageitem_imageframe.h"
3614 cbradney 40
#include "prefsmanager.h"
10601 mrdocs 41
#include "scraction.h"
16736 jghali 42
#include "scpage.h"
3614 cbradney 43
#include "scpaths.h"
10601 mrdocs 44
#include "scpainter.h"
3614 cbradney 45
#include "scribusstructs.h"
16105 fschmid 46
#include "scribuscore.h"
3614 cbradney 47
#include "scribusdoc.h"
20478 jghali 48
#include "scribusview.h"
49
 
3614 cbradney 50
#include "undomanager.h"
51
#include "undostate.h"
22417 jghali 52
#include "undotransaction.h"
10601 mrdocs 53
#include "util_formats.h"
54
#include "util_color.h"
3614 cbradney 55
#include "util.h"
56
 
57
 
22598 craig 58
PageItem_ImageFrame::PageItem_ImageFrame(ScribusDoc *pa, double x, double y, double w, double h, double w2, const QString& fill, const QString& outline)
3614 cbradney 59
        : PageItem(pa, PageItem::ImageFrame, x, y, w, h, w2, fill, outline)
60
{
61
}
62
 
16105 fschmid 63
PageItem_ImageFrame::~PageItem_ImageFrame()
64
{
19834 craig 65
        if ((imageIsAvailable) && (!Pfile.isEmpty()))
16105 fschmid 66
        {
67
                ScCore->fileWatcher->removeFile(Pfile);
68
                QFileInfo fi(Pfile);
69
                ScCore->fileWatcher->removeDir(fi.absolutePath());
70
        }
71
}
72
 
14681 fschmid 73
void PageItem_ImageFrame::DrawObj_Item(ScPainter *p, QRectF /*e*/)
3614 cbradney 74
{
17288 jghali 75
        if (m_Doc->RePos)
76
                return;
22832 craig 77
        if (m_Doc->layerOutline(m_layerID))
17288 jghali 78
                return;
79
 
80
        p->setFillRule(true);
81
        if ((fillColor() != CommonStrings::None) || (GrType != 0))
3614 cbradney 82
        {
17288 jghali 83
                p->setupPolygon(&PoLine);
84
                p->fillPath();
85
        }
86
        p->save();
87
        if (Pfile.isEmpty())
88
        {
18007 craig 89
                if ((drawFrame()) && (m_Doc->guidesPrefs().framesShown))
3614 cbradney 90
                {
17288 jghali 91
                        p->setPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin);
18095 craig 92
                        p->drawLine(FPoint(0, 0), FPoint(m_width, m_height));
93
                        p->drawLine(FPoint(0, m_height), FPoint(m_width, 0));
17288 jghali 94
                }
95
        }
96
        else
97
        {
98
                //If we are missing our image, draw a red cross in the frame
19834 craig 99
                if ((!m_imageVisible) || (!imageIsAvailable))
17288 jghali 100
                {
18007 craig 101
                        if ((drawFrame()) && (m_Doc->guidesPrefs().framesShown))
5572 fschmid 102
                        {
17288 jghali 103
                                p->setBrush(Qt::white);
104
                                QString htmlText = "";
105
                                QFileInfo fi = QFileInfo(Pfile);
19834 craig 106
                                if (imageIsAvailable)
3614 cbradney 107
                                {
8501 cbradney 108
                                        p->setPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin);
17288 jghali 109
                                        if (isInlineImage)
110
                                                htmlText.append( tr("Embedded Image") + "\n");
111
                                        else
112
                                                htmlText.append( tr("File:") + " " + fi.fileName() + "\n");
18194 fschmid 113
                                        htmlText.append( tr("Original PPI:") + " " + QString::number(pixm.imgInfo.xres)+" x "+QString::number(pixm.imgInfo.yres) + "\n");
17288 jghali 114
                                        htmlText.append( tr("Actual PPI:") + " " + QString::number(qRound(72.0 / imageXScale()))+" x "+ QString::number(qRound(72.0 / imageYScale())) + "\n");
115
                                        htmlText.append( tr("Size:") + " " + QString::number(OrigW) + " x " + QString::number(OrigH) + "\n");
116
                                        htmlText.append( tr("Colorspace:") + " ");
117
                                        QString ext = fi.suffix().toLower();
118
                                        if ((extensionIndicatesPDF(ext) || extensionIndicatesEPSorPS(ext)) && (pixm.imgInfo.type != ImageType7))
119
                                                htmlText.append( tr("Unknown"));
120
                                        else
121
                                                htmlText.append(colorSpaceText(pixm.imgInfo.colorspace));
122
                                        if (pixm.imgInfo.numberOfPages > 1)
5584 fschmid 123
                                        {
17288 jghali 124
                                                htmlText.append("\n");
125
                                                if (pixm.imgInfo.actualPageNumber > 0)
126
                                                        htmlText.append( tr("Page:") + " " + QString::number(pixm.imgInfo.actualPageNumber) + "/" + QString::number(pixm.imgInfo.numberOfPages));
12961 fschmid 127
                                                else
17288 jghali 128
                                                        htmlText.append( tr("Pages:") + " " + QString::number(pixm.imgInfo.numberOfPages));
5584 fschmid 129
                                        }
3614 cbradney 130
                                }
5584 fschmid 131
                                else
3614 cbradney 132
                                {
17288 jghali 133
                                        p->setPen(Qt::red, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin);
134
                                        htmlText = fi.fileName();
135
                                }
18095 craig 136
                                p->drawLine(FPoint(0, 0), FPoint(m_width, m_height));
137
                                p->drawLine(FPoint(0, m_height), FPoint(m_width, 0));
21563 jghali 138
                                const QFont &font = QApplication::font();
23060 craig 139
                                p->setFont(PrefsManager::instance().appPrefs.fontPrefs.AvailFonts.findFont(font.family(), QFontInfo(font).styleName()), font.pointSizeF());
18095 craig 140
                                p->drawText(QRectF(0.0, 0.0, m_width, m_height), htmlText);
17288 jghali 141
                        }
142
                }
143
                else
144
                {
145
                        p->setupPolygon(&PoLine);
146
                        p->setClipPath();
147
                        if (imageFlippedH())
148
                        {
18095 craig 149
                                p->translate(m_width, 0);
17288 jghali 150
                                p->scale(-1, 1);
151
                        }
152
                        if (imageFlippedV())
153
                        {
18095 craig 154
                                p->translate(0, m_height);
17288 jghali 155
                                p->scale(1, -1);
156
                        }
22638 craig 157
                        if (!imageClip.empty())
17288 jghali 158
                        {
159
                                p->setupPolygon(&imageClip);
160
                                p->setClipPath();
161
                        }
18032 craig 162
                        p->translate(m_imageXOffset*m_imageXScale, m_imageYOffset*m_imageYScale);
18022 craig 163
                        p->rotate(m_imageRotation);
164
                        double mscalex = 1.0 / m_imageXScale;
165
                        double mscaley = 1.0 / m_imageYScale;
166
                        p->scale(m_imageXScale, m_imageYScale);
17288 jghali 167
                        if (pixm.imgInfo.lowResType != 0)
168
                        {
169
                                p->scale(pixm.imgInfo.lowResScale, pixm.imgInfo.lowResScale);
170
                                mscalex *= 1.0 / pixm.imgInfo.lowResScale;
171
                                mscaley *= 1.0 / pixm.imgInfo.lowResScale;
172
                        }
23907 jghali 173
                        if ((GrMask == GradMask_Linear) || (GrMask == GradMask_Radial) || (GrMask == GradMask_LinearLumAlpha) || (GrMask == GradMask_RadialLumAlpha))
17288 jghali 174
                        {
23907 jghali 175
                                if ((GrMask == GradMask_Linear) || (GrMask == GradMask_Radial))
17288 jghali 176
                                        p->setMaskMode(1);
177
                                else
178
                                        p->setMaskMode(3);
179
                                if ((!gradientMaskVal.isEmpty()) && (!m_Doc->docGradients.contains(gradientMaskVal)))
180
                                        gradientMaskVal = "";
181
                                if (!(gradientMaskVal.isEmpty()) && (m_Doc->docGradients.contains(gradientMaskVal)))
182
                                        mask_gradient = m_Doc->docGradients[gradientMaskVal];
183
                                p->mask_gradient = mask_gradient;
23907 jghali 184
                                if ((GrMask == GradMask_Linear) || (GrMask == GradMask_LinearLumAlpha))
17288 jghali 185
                                        p->setGradientMask(VGradient::linear, FPoint(GrMaskStartX * mscalex, GrMaskStartY * mscaley), FPoint(GrMaskEndX * mscalex, GrMaskEndY * mscaley), FPoint(GrMaskStartX * mscalex, GrMaskStartY * mscaley), GrMaskScale, GrMaskSkew);
186
                                else
187
                                        p->setGradientMask(VGradient::radial, FPoint(GrMaskStartX * mscalex, GrMaskStartY * mscaley), FPoint(GrMaskEndX * mscalex, GrMaskEndY * mscaley), FPoint(GrMaskFocalX * mscalex, GrMaskFocalY * mscaley), GrMaskScale, GrMaskSkew);
188
                        }
23907 jghali 189
                        else if ((GrMask == GradMask_Pattern) || (GrMask == GradMask_PatternLumAlpha) || (GrMask == GradMask_PatternLumAlphaInverted) || (GrMask == GradMask_PatternInverted))
17288 jghali 190
                        {
191
                                if ((patternMaskVal.isEmpty()) || (!m_Doc->docPatterns.contains(patternMaskVal)))
192
                                        p->setMaskMode(0);
193
                                else
194
                                {
195
                                        p->setPatternMask(&m_Doc->docPatterns[patternMaskVal], patternMaskScaleX * mscalex, patternMaskScaleY * mscaley, patternMaskOffsetX, patternMaskOffsetY, patternMaskRotation, patternMaskSkewX, patternMaskSkewY, patternMaskMirrorX, patternMaskMirrorY);
23907 jghali 196
                                        if (GrMask == GradMask_Pattern)
17288 jghali 197
                                                p->setMaskMode(2);
23907 jghali 198
                                        else if (GrMask == GradMask_PatternLumAlpha)
17288 jghali 199
                                                p->setMaskMode(4);
23907 jghali 200
                                        else if (GrMask == GradMask_PatternLumAlphaInverted)
17288 jghali 201
                                                p->setMaskMode(5);
14825 fschmid 202
                                        else
17288 jghali 203
                                                p->setMaskMode(6);
3614 cbradney 204
                                }
205
                        }
17288 jghali 206
                        else
207
                                p->setMaskMode(0);
208
                        p->drawImage(pixm.qImagePtr());
3614 cbradney 209
                }
210
        }
17288 jghali 211
        p->restore();
3614 cbradney 212
}
3627 cbradney 213
 
214
void PageItem_ImageFrame::clearContents()
215
{
17224 craig 216
        if (UndoManager::undoEnabled())
217
        {
218
                ScItemState<ScImageEffectList> *is = new ScItemState<ScImageEffectList>(Um::ClearImage + "\n" + Pfile, "");
20806 jghali 219
                is->set("CLEAR_IMAGE");
17224 craig 220
                is->set("CI_PFILE", Pfile);
221
                is->set("CI_FLIPPH",imageFlippedH());
222
                is->set("CI_FLIPPV",imageFlippedV());
223
                is->set("CI_SCALING",ScaleType);
224
                is->set("CI_ASPECT",AspectRatio);
225
                is->set("CI_XOFF",imageXOffset());
226
                is->set("CI_XSCALE",imageXScale());
227
                is->set("CI_YOFF",imageYOffset());
228
                is->set("CI_YSCALE",imageYScale());
229
                is->set("CI_FILLT", fillTransparency());
230
                is->set("CI_LINET", lineTransparency());
231
                is->setItem(effectsInUse);
232
                undoManager->action(this, is);
233
        }
3955 fschmid 234
        effectsInUse.clear();
19834 craig 235
        imageIsAvailable = false;
23488 jghali 236
        Pfile.clear();
3627 cbradney 237
        pixm = ScImage();
4546 subik 238
 
18022 craig 239
        m_imageXScale = 1;
240
        m_imageYScale = 1;
3627 cbradney 241
        OrigW = 0;
242
        OrigH = 0;
18032 craig 243
        m_imageXOffset = 0;
244
        m_imageYOffset = 0;
3627 cbradney 245
        setImageFlippedH(false);
246
        setImageFlippedV(false);
23488 jghali 247
        EmbeddedProfile.clear();
248
        UseEmbedded = true; // Otherwise embedded profile will never be used when reloading image
24467 jghali 249
        ScaleType = m_Doc->prefsData().itemToolPrefs.imageScaleType;
19276 jghali 250
        AspectRatio = m_Doc->prefsData().itemToolPrefs.imageAspectRatio;
3627 cbradney 251
        setFillTransparency(0.0);
252
        setLineTransparency(0.0);
253
        imageClip.resize(0);
18203 fschmid 254
        if ((isTempFile) && (!Pfile.isEmpty()))
255
                QFile::remove(Pfile);
256
        isTempFile = false;
12795 fschmid 257
        isInlineImage = false;
4546 subik 258
        //                              emit UpdtObj(Doc->currentPage->pageNr(), ItemNr);
3627 cbradney 259
}
260
 
5226 cbradney 261
void PageItem_ImageFrame::handleModeEditKey(QKeyEvent *k, bool& keyRepeat)
262
{
263
        double moveBy=1.0;
10390 cbradney 264
        Qt::KeyboardModifiers buttonModifiers = k->modifiers();
10398 cbradney 265
        bool controlDown=(buttonModifiers & Qt::ControlModifier);
266
        bool altDown=(buttonModifiers & Qt::AltModifier);
267
        bool shiftDown=(buttonModifiers & Qt::ShiftModifier);
5727 cbradney 268
        bool resizingImage=false;
10390 cbradney 269
        if (shiftDown && !controlDown)
5226 cbradney 270
                moveBy=10.0;
10390 cbradney 271
        else if (shiftDown && controlDown && !altDown)
5226 cbradney 272
                moveBy=0.1;
10390 cbradney 273
        else if (shiftDown && controlDown && altDown)
5226 cbradney 274
                moveBy=0.01;
10390 cbradney 275
        else if (!shiftDown && altDown)
5727 cbradney 276
                resizingImage=true;
20478 jghali 277
 
5226 cbradney 278
        double dX=0.0,dY=0.0;
279
        int kk = k->key();
20478 jghali 280
        ScribusView* view = m_Doc->view();
281
 
282
        if (kk == Qt::Key_Delete || kk == Qt::Key_Backspace || (shiftDown && controlDown && kk == Qt::Key_Delete) )     // Delete in edit mode, to empty the frame
5226 cbradney 283
        {
20478 jghali 284
                clearContents();
285
                view->requestMode(modeNormal);
286
                update();
287
        }
288
        else if (!resizingImage)
289
        {
5727 cbradney 290
                moveBy/=m_Doc->unitRatio();//Lets allow movement by the current doc ratio, not only points
291
                switch (kk)
292
                {
8523 cbradney 293
                        case Qt::Key_Left:
5727 cbradney 294
                                dX=-moveBy;
295
                                break;
8523 cbradney 296
                        case Qt::Key_Right:
5727 cbradney 297
                                dX=moveBy;
298
                                break;
8523 cbradney 299
                        case Qt::Key_Up:
5727 cbradney 300
                                dY=-moveBy;
301
                                break;
8523 cbradney 302
                        case Qt::Key_Down:
5727 cbradney 303
                                dY=moveBy;
304
                                break;
305
                }
306
                if (dX!=0.0 || dY!=0.0)
307
                {
308
                        moveImageInFrame(dX, dY);
10532 avox 309
                        update();
5727 cbradney 310
                }
5226 cbradney 311
        }
5727 cbradney 312
        else
5226 cbradney 313
        {
5727 cbradney 314
                switch (kk)
315
                {
8523 cbradney 316
                        case Qt::Key_Left:
5727 cbradney 317
                                dX=-moveBy+100;
318
                                break;
8523 cbradney 319
                        case Qt::Key_Right:
5727 cbradney 320
                                dX=moveBy+100;
321
                                break;
8523 cbradney 322
                        case Qt::Key_Up:
5727 cbradney 323
                                dY=-moveBy+100;
324
                                break;
8523 cbradney 325
                        case Qt::Key_Down:
5727 cbradney 326
                                dY=moveBy+100;
327
                                break;
328
                        default:
329
                                return;
22417 jghali 330
                }
331
                UndoTransaction transaction;
332
                if (UndoManager::undoEnabled())
5727 cbradney 333
                {
22419 jghali 334
                        if ((fitImageToFrame() || !controlDown) && (dX != 0.0 || dY != 0.0))
22417 jghali 335
                                transaction = undoManager->beginTransaction(getUName(), getUPixmap(), Um::ImageScale, "", Um::IMove);
336
                }
337
                if (dX != 0.0)
338
                {
339
                        double newXScale = dX / 100.0 * m_imageXScale;
340
                        setImageScalingMode(true, AspectRatio);
5727 cbradney 341
                        setImageXScale(newXScale);
5976 cbradney 342
                        if (!controlDown)
5921 cbradney 343
                        {
22417 jghali 344
                                double newYScale = dX / 100.0 * m_imageYScale;
5921 cbradney 345
                                setImageYScale(newYScale);
346
                        }
5727 cbradney 347
                }
22417 jghali 348
                else if (dY != 0.0)
5727 cbradney 349
                {
22417 jghali 350
                        double newYScale = dY / 100.0 * m_imageYScale;
351
                        setImageScalingMode(true, AspectRatio);
5727 cbradney 352
                        setImageYScale(newYScale);
5976 cbradney 353
                        if (!controlDown)
5921 cbradney 354
                        {
22417 jghali 355
                                double newXScale = dY / 100.0 * m_imageYScale;
5921 cbradney 356
                                setImageXScale(newXScale);
357
                        }
5727 cbradney 358
                }
22417 jghali 359
                if (dX != 0.0 || dY != 0.0)
22638 craig 360
                        if (!imageClip.empty())
5727 cbradney 361
                        {
362
                                imageClip = pixm.imgInfo.PDSpathData[pixm.imgInfo.usedPath].copy();
13951 fschmid 363
                                QTransform cl;
5727 cbradney 364
                                cl.translate(imageXOffset()*imageXScale(), imageYOffset()*imageYScale());
14861 fschmid 365
                                cl.rotate(imageRotation());
5727 cbradney 366
                                cl.scale(imageXScale(), imageYScale());
367
                                imageClip.map(cl);
368
                        }
22417 jghali 369
                if (transaction)
370
                        transaction.commit();
10532 avox 371
                update();      
5226 cbradney 372
        }
5243 cbradney 373
}
10601 mrdocs 374
 
375
bool PageItem_ImageFrame::createInfoGroup(QFrame *infoGroup, QGridLayout *infoGroupLayout)
376
{
377
        QLabel *infoCT, *fileT, *fileCT, *oPpiT, *oPpiCT, *aPpiT, *aPpiCT, *colT, *colCT;
378
        infoCT = new QLabel(infoGroup);
379
        fileCT = new QLabel(infoGroup);
380
 
12961 fschmid 381
        infoCT->setText( tr("Image"));
10601 mrdocs 382
        infoGroupLayout->addWidget( infoCT, 0, 0, 1, 2, Qt::AlignHCenter );
383
 
19834 craig 384
        if (imageIsAvailable)
10601 mrdocs 385
        {
386
                fileT = new QLabel(infoGroup);
387
                oPpiT = new QLabel(infoGroup);
388
                oPpiCT = new QLabel(infoGroup);
389
                aPpiT = new QLabel(infoGroup);
390
                aPpiCT = new QLabel(infoGroup);
391
                colT = new QLabel(infoGroup);
392
                colCT = new QLabel(infoGroup);
393
                QFileInfo fi = QFileInfo(Pfile);
12961 fschmid 394
                fileCT->setText( tr("File:"));
10601 mrdocs 395
                infoGroupLayout->addWidget( fileCT, 1, 0, Qt::AlignRight );
12862 fschmid 396
                if (isInlineImage)
397
                        fileT->setText( tr("Embedded Image"));
398
                else
399
                        fileT->setText(fi.fileName());
10601 mrdocs 400
                infoGroupLayout->addWidget( fileT, 1, 1 );
401
 
12961 fschmid 402
                oPpiCT->setText( tr("Original PPI:"));
10601 mrdocs 403
                infoGroupLayout->addWidget( oPpiCT, 2, 0, Qt::AlignRight );
18194 fschmid 404
                oPpiT->setText(QString::number(pixm.imgInfo.xres)+" x "+QString::number(pixm.imgInfo.yres));
10601 mrdocs 405
                infoGroupLayout->addWidget( oPpiT, 2, 1 );
406
 
12961 fschmid 407
                aPpiCT->setText( tr("Actual PPI:"));
10601 mrdocs 408
                infoGroupLayout->addWidget( aPpiCT, 3, 0, Qt::AlignRight );
409
                aPpiT->setText(QString::number(qRound(72.0 / imageXScale()))+" x "+ QString::number(qRound(72.0 / imageYScale())));
410
                infoGroupLayout->addWidget( aPpiT, 3, 1 );
411
 
12961 fschmid 412
                colCT->setText( tr("Colorspace:"));
10601 mrdocs 413
                infoGroupLayout->addWidget( colCT, 4, 0, Qt::AlignRight );
414
                QString cSpace;
415
                QString ext = fi.suffix().toLower();
11331 jghali 416
                if ((extensionIndicatesPDF(ext) || extensionIndicatesEPSorPS(ext)) && (pixm.imgInfo.type != ImageType7))
12961 fschmid 417
                        cSpace = tr("Unknown");
10601 mrdocs 418
                else
419
                        cSpace=colorSpaceText(pixm.imgInfo.colorspace);
420
                colT->setText(cSpace);
421
                infoGroupLayout->addWidget( colT, 4, 1 );
422
        }
12957 fschmid 423
        else
424
        {
425
                if (!Pfile.isEmpty())
426
                {
427
                        QFileInfo fi = QFileInfo(Pfile);
12961 fschmid 428
                        fileCT->setText( tr("File:"));
12957 fschmid 429
                        infoGroupLayout->addWidget( fileCT, 1, 0, Qt::AlignRight );
430
                        fileT = new QLabel(infoGroup);
431
                        if (isInlineImage)
432
                                fileT->setText( tr("Embedded Image missing"));
17248 jghali 433
                        else if (extensionIndicatesPDF(fi.suffix().toLower()))
434
                                fileT->setText(fi.fileName() + " " + tr("missing or corrupt"));
12957 fschmid 435
                        else
436
                                fileT->setText(fi.fileName() + " " + tr("missing"));
437
                        infoGroupLayout->addWidget( fileT, 1, 1 );
438
                }
439
                else
440
                {
12961 fschmid 441
                        fileCT->setText( tr("No Image Loaded"));
12957 fschmid 442
                        infoGroupLayout->addWidget( fileCT, 1, 0, 1, 2, Qt::AlignHCenter );
443
                }
444
        }
10601 mrdocs 445
        return true;
446
}
447
 
10934 cbradney 448
void PageItem_ImageFrame::applicableActions(QStringList & actionList)
449
{
10940 cbradney 450
        actionList << "fileImportImage";
451
        actionList << "itemConvertToTextFrame";
452
        actionList << "itemImageIsVisible";
453
        actionList << "itemPreviewFull";
454
        actionList << "itemPreviewLow";
455
        actionList << "itemPreviewNormal";
456
 
19834 craig 457
        if (imageIsAvailable)
10940 cbradney 458
        {
17418 fschmid 459
                actionList << "itemAdjustFrameToImage";
12591 fschmid 460
                actionList << "itemAdjustImageToFrame";
10940 cbradney 461
                if (pixm.imgInfo.valid)
462
                        actionList << "itemExtendedImageProperties";
463
                if (pixm.imgInfo.exifDataValid)
464
                        actionList << "itemImageInfo";
465
                actionList << "itemUpdateImage";
466
                actionList << "editCopyContents";
14796 fschmid 467
                actionList << "itemToggleInlineImage";
10940 cbradney 468
                if (isRaster)
469
                {
470
                        actionList << "styleImageEffects";
471
                        actionList << "editEditWithImageEditor";
472
                }
473
        }
17735 craig 474
        if(!Pfile.isEmpty())
475
                actionList << "editClearContents";
17418 fschmid 476
        actionList << "itemConvertToPolygon";
10940 cbradney 477
        if (doc()->scMW()->contentsBuffer.sourceType==PageItem::ImageFrame)
478
        {
479
                actionList << "editPasteContents";
480
                actionList << "editPasteContentsAbs";
481
        }
10934 cbradney 482
}
10941 cbradney 483
 
22716 jghali 484
QString PageItem_ImageFrame::infoDescription() const
10941 cbradney 485
{
486
        QString htmlText;
12961 fschmid 487
        htmlText.append( tr("Image") + "<br/>");
10941 cbradney 488
 
19834 craig 489
        if (imageIsAvailable)
10941 cbradney 490
        {
491
                QFileInfo fi = QFileInfo(Pfile);
12957 fschmid 492
                if (isInlineImage)
493
                        htmlText.append( tr("Embedded Image") + "<br/>");
494
                else
12961 fschmid 495
                        htmlText.append( tr("File:") + " " + fi.fileName() + "<br/>");
18194 fschmid 496
                htmlText.append( tr("Original PPI:") + " " + QString::number(pixm.imgInfo.xres)+" x "+QString::number(pixm.imgInfo.yres) + "<br/>");
12961 fschmid 497
                htmlText.append( tr("Actual PPI:") + " " + QString::number(qRound(72.0 / imageXScale()))+" x "+ QString::number(qRound(72.0 / imageYScale())) + "<br/>");
498
                htmlText.append( tr("Colorspace:") + " ");
10941 cbradney 499
                QString ext = fi.suffix().toLower();
11331 jghali 500
                if ((extensionIndicatesPDF(ext) || extensionIndicatesEPSorPS(ext)) && (pixm.imgInfo.type != ImageType7))
12961 fschmid 501
                        htmlText.append( tr("Unknown"));
10941 cbradney 502
                else
503
                        htmlText.append(colorSpaceText(pixm.imgInfo.colorspace));
504
                htmlText.append("<br/>");
12080 avox 505
                if (pixm.imgInfo.numberOfPages > 1)
506
                {
507
                        if (pixm.imgInfo.actualPageNumber > 0)
12961 fschmid 508
                                htmlText.append( tr("Page:") + " " + QString::number(pixm.imgInfo.actualPageNumber) + "/" + QString::number(pixm.imgInfo.numberOfPages)+ "<br/>");
12080 avox 509
                        else
12961 fschmid 510
                                htmlText.append( tr("Pages:") + " " + QString::number(pixm.imgInfo.numberOfPages)+ "<br/>");
12080 avox 511
                }
10941 cbradney 512
        }
513
        else
514
        {
12957 fschmid 515
                if (!Pfile.isEmpty())
516
                {
517
                        QFileInfo fi = QFileInfo(Pfile);
518
                        if (isInlineImage)
519
                                htmlText.append( tr("Embedded Image missing") + "<br/>");
17248 jghali 520
                        else if (extensionIndicatesPDF(fi.suffix().toLower()))
521
                                htmlText.append( tr("File:") + " " + fi.fileName() + " " + tr("missing or corrupt") + "<br/>");
12957 fschmid 522
                        else
12961 fschmid 523
                                htmlText.append( tr("File:") + " " + fi.fileName() + " " + tr("missing") + "<br/>");
12957 fschmid 524
                }
525
                else
12961 fschmid 526
                        htmlText.append( tr("No Image Loaded") + "<br/>");
10941 cbradney 527
        }
528
        htmlText.append(PageItem::infoDescription());
529
        return htmlText;
530
}