Subversion Repositories Scribus

Rev

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