Subversion Repositories Scribus

Rev

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