Subversion Repositories Scribus

Rev

Rev 2680 | Rev 3200 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
283 Franz 1
#include "export.h"
2
#include "dialog.h"
3
#include "export.moc"
4
#include <qpixmap.h>
5
#include <qstring.h>
6
#include <qdir.h>
7
#include <qcursor.h>
8
 
1208 cbradney 9
#include "scraction.h"
10
#include "menumanager.h"
1552 subik 11
#include "pluginmanager.h"
2907 subik 12
#include "util.h"
283 Franz 13
 
1208 cbradney 14
 
1552 subik 15
QString name()
283 Franz 16
{
308 Franz 17
        return QObject::tr("Save as &Image...");
283 Franz 18
}
19
 
20
 
1552 subik 21
PluginManager::PluginType type()
283 Franz 22
{
1552 subik 23
        return PluginManager::Standard;
283 Franz 24
}
25
 
512 fschmid 26
int ID()
27
{
28
        return 4;
29
}
283 Franz 30
 
1208 cbradney 31
QString actionName()
32
{
33
        return "ExportAsImage";
34
}
512 fschmid 35
 
1208 cbradney 36
QString actionKeySequence()
37
{
1783 cbradney 38
        return "CTRL+SHIFT+E";
1208 cbradney 39
}
40
 
41
QString actionMenu()
42
{
43
        return "FileExport";
44
}
45
 
46
QString actionMenuAfterName()
47
{
48
        return "";
49
}
50
 
51
bool actionEnabledOnStartup()
52
{
53
        return true;
54
}
55
 
1552 subik 56
void run(QWidget *d, ScribusApp *plug)
283 Franz 57
{
58
        bool res;
59
        ExportBitmap *ex = new ExportBitmap(plug);
2585 subik 60
        ExportForm *dia = new ExportForm(d, ex->pageDPI, ex->quality, ex->bitmapType);
287 Franz 61
 
283 Franz 62
        // interval widgets handling
359 Franz 63
        QString tmp;
1065 cbradney 64
        dia->RangeVal->setText(tmp.setNum(plug->doc->currentPage->PageNr+1));
283 Franz 65
        // main "loop"
66
        if (dia->exec()==QDialog::Accepted)
67
        {
68
                QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
359 Franz 69
                std::vector<int> pageNs;
2585 subik 70
                ex->pageDPI = dia->DPIBox->value();
552 fschmid 71
                ex->enlargement = dia->EnlargementBox->value();
283 Franz 72
                ex->quality = dia->QualityBox->value();
73
                ex->exportDir = dia->OutputDirectory->text();
74
                ex->bitmapType = dia->bitmapType;
2433 cbradney 75
                plug->mainWindowProgressBar->reset();
359 Franz 76
                if (dia->OnePageRadio->isChecked())
77
                        res = ex->exportActual();
78
                else
283 Franz 79
                {
359 Franz 80
                        if (dia->AllPagesRadio->isChecked())
2142 cbradney 81
                                plug->parsePagesString("*", &pageNs, plug->doc->pageCount);
359 Franz 82
                        else
2142 cbradney 83
                                plug->parsePagesString(dia->RangeVal->text(), &pageNs, plug->doc->pageCount);
359 Franz 84
                        res = ex->exportInterval(pageNs);
85
                }
2433 cbradney 86
                plug->mainWindowProgressBar->reset();
283 Franz 87
                QApplication::restoreOverrideCursor();
88
                if (!res)
89
                {
2207 cbradney 90
                        QMessageBox::warning(plug, QObject::tr("Save as Image"), QObject::tr("Error writing the output file(s)."));
2433 cbradney 91
                        plug->mainWindowStatusLabel->setText(QObject::tr("Error writing the output file(s)."));
283 Franz 92
                }
93
                else
94
                {
2433 cbradney 95
                        plug->mainWindowStatusLabel->setText(QObject::tr("Export successful."));
283 Franz 96
                }
97
        } // if accepted
98
        // clean the trash
99
        delete ex;
100
        delete dia;
101
}
102
 
103
 
104
ExportBitmap::ExportBitmap(ScribusApp *plug)
105
{
106
        carrier = plug;
2585 subik 107
        pageDPI = 72;
283 Franz 108
        quality = 100;
552 fschmid 109
        enlargement = 100;
283 Franz 110
        exportDir = QDir::currentDirPath();
111
        bitmapType = QString("PNG");
2680 cbradney 112
        overwrite = false;
283 Franz 113
}
114
 
115
QString ExportBitmap::getFileName(uint pageNr)
116
{
2907 subik 117
        return QDir::cleanDirPath(QDir::convertSeparators(exportDir + "/" + getFileNameByPage(pageNr, bitmapType.lower())));
283 Franz 118
}
119
 
120
ExportBitmap::~ExportBitmap()
121
{
122
}
123
 
2680 cbradney 124
bool ExportBitmap::exportPage(uint pageNr, bool single = true)
283 Franz 125
{
126
        uint over = 0;
287 Franz 127
        QString fileName = getFileName(pageNr);
128
 
456 fschmid 129
        if (!carrier->doc->Pages.at(pageNr))
2680 cbradney 130
                return false;
287 Franz 131
 
2613 subik 132
        /* a little magic here - I need to compute the "maxGr" value...
133
        * We need to know the right size of the page for landscape,
134
        * portrait and user defined sizes.
135
        */
136
        double pixmapSize;
137
        (carrier->doc->pageHeight > carrier->doc->pageWidth)
138
                        ? pixmapSize = carrier->doc->pageHeight
139
                        : pixmapSize = carrier->doc->pageWidth;
140
        QImage im = carrier->view->PageToPixmap(pageNr, qRound(pixmapSize * enlargement * (pageDPI / 72.0) / 100.0));
2585 subik 141
        int dpm = qRound(100.0 / 2.54 * pageDPI);
142
        im.setDotsPerMeterY(dpm);
143
        im.setDotsPerMeterX(dpm);
283 Franz 144
        if (QFile::exists(fileName) && !overwrite)
145
        {
146
                QApplication::restoreOverrideCursor();
147
/* Changed the following Code from the original QMessageBox::question to QMessageBox::warning
287 Franz 148
         to keep the Code compatible to Qt-3.1.x
149
         f.s 12.05.2004 */
283 Franz 150
                over = QMessageBox::warning(carrier,
287 Franz 151
                                QObject::tr("File exists. Overwrite?"),
152
                                fileName +"\n"+ QObject::tr("exists already. Overwrite?"),
153
                                QObject::tr("No"),
154
                                QObject::tr("Yes"),
155
                                // hack for multiple overwritting (petr)
2680 cbradney 156
                                (single==true) ? QString::null : QObject::tr("Yes all"),
287 Franz 157
                                0, 0);
283 Franz 158
                QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
159
                if (over == 1)
359 Franz 160
                        return im.save(fileName, bitmapType, quality);
283 Franz 161
                if (over == 2)
2680 cbradney 162
                        overwrite = true;
283 Franz 163
        }
359 Franz 164
        return im.save(fileName, bitmapType, quality);
283 Franz 165
}
166
 
167
bool ExportBitmap::exportActual()
168
{
2680 cbradney 169
        return exportPage(carrier->doc->currentPage->PageNr, true);
283 Franz 170
}
171
 
359 Franz 172
bool ExportBitmap::exportInterval(std::vector<int> &pageNs)
283 Franz 173
{
174
        bool res;
2433 cbradney 175
        carrier->mainWindowProgressBar->setTotalSteps(pageNs.size());
359 Franz 176
        for (uint a = 0; a < pageNs.size(); ++a)
283 Franz 177
        {
2433 cbradney 178
                carrier->mainWindowProgressBar->setProgress(a);
2680 cbradney 179
                res = exportPage(pageNs[a]-1, false);
283 Franz 180
                if (!res)
2680 cbradney 181
                        return false;
283 Franz 182
        }
2680 cbradney 183
        return true;
283 Franz 184
}