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 */
7
8 /***************************************************************************
9 customfdialog.cpp - description
10 -------------------
11 begin : Fri Nov 30 2001
12 copyright : (C) 2001 by Franz Schmid
13 email : Franz.Schmid@altmuehlnet.de
14 ***************************************************************************/
15
16 /***************************************************************************
17 * *
18 * This program is free software; you can redistribute it and/or modify *
19 * it under the terms of the GNU General Public License as published by *
20 * the Free Software Foundation; either version 2 of the License, or *
21 * (at your option) any later version. *
22 * *
23 ***************************************************************************/
24
25 #include <QApplication>
26 #include <QCheckBox>
27 #include <QComboBox>
28 #include <QDir>
29 #include <QFileInfo>
30 #include <QFrame>
31 #include <QHBoxLayout>
32 #include <QIcon>
33 #include <QImageReader>
34 #include <QLabel>
35 #include <QPainter>
36 #include <QPixmap>
37 #include <QPushButton>
38 #include <QTextCodec>
39 #include <QVBoxLayout>
40
41 #include "customfdialog.h"
42
43 #include "../plugins/formatidlist.h"
44 #include "cmsettings.h"
45 #include "commonstrings.h"
46 #include "fileloader.h"
47 #include "iconmanager.h"
48 #include "loadsaveplugin.h"
49 #include "prefsmanager.h"
50 #include "scfilewidget.h"
51 #include "scimage.h"
52 #include "scpreview.h"
53 #include "scribusstructs.h"
54 #include "scslainforeader.h"
55 #include "units.h"
56 #include "util.h"
57 #include "util_color.h"
58 #include "util_formats.h"
59
60
61
62
63 extern QString DocDir;
64
ImIconProvider()65 ImIconProvider::ImIconProvider()
66 {
67 QString tmp[] = {"eps", "epsi", "gif", "png", "jpg", "jpeg", "xpm", "tif", "tiff", "bmp", "pbm", "pgm", "ppm", "xbm", "xpm", "psd", "pat"};
68 size_t arraySize = sizeof(tmp) / sizeof(*tmp);
69 fmts.reserve(arraySize);
70 for (size_t i = 0; i < arraySize; ++i)
71 fmts.append(tmp[i]);
72 IconManager& im=IconManager::instance();
73 imagepm = im.loadIcon("16/image-x-generic.png");
74 pspm = im.loadIcon("postscript.png");
75 txtpm = im.loadIcon("txt.png");
76 docpm = im.loadIcon("doc.png");
77 pdfpm = im.loadIcon("pdf.png");
78 oosxdpm = im.loadIcon("ooo_draw.png");
79 oosxwpm = im.loadIcon("ooo_writer.png");
80 vectorpm = im.loadIcon("vectorgfx.png");
81 }
82
icon(const QFileInfo & fi) const83 QIcon ImIconProvider::icon(const QFileInfo &fi) const
84 {
85 QStringList allFormatsV = LoadSavePlugin::getExtensionsForImport(FORMATID_FIRSTUSER);
86 QString ext = fi.suffix().toLower();
87 if (ext.isEmpty())
88 return QFileIconProvider::icon(fi);
89 if (fmts.contains(ext, Qt::CaseInsensitive))
90 return imagepm;
91 ext = fi.completeSuffix().toLower();
92 if (ext.endsWith("ps", Qt::CaseInsensitive))
93 return pspm;
94 if (ext.endsWith("txt", Qt::CaseInsensitive))
95 return txtpm;
96 if (ext.endsWith("scd", Qt::CaseInsensitive) || ext.endsWith("scd.gz", Qt::CaseInsensitive))
97 return docpm;
98 if (ext.endsWith("sla", Qt::CaseInsensitive) || ext.endsWith("sla.gz", Qt::CaseInsensitive))
99 return docpm;
100 if (ext.endsWith("pdf", Qt::CaseInsensitive))
101 return pdfpm;
102 if (ext.endsWith("sxd", Qt::CaseInsensitive))
103 return oosxdpm;
104 if (ext.endsWith("sxw", Qt::CaseInsensitive))
105 return oosxwpm;
106 if (allFormatsV.contains(ext) || ext.endsWith("sce", Qt::CaseInsensitive) || ext.endsWith("shape", Qt::CaseInsensitive))
107 return vectorpm;
108 return QFileIconProvider::icon(fi);
109 }
110
FDialogPreview(QWidget * pa)111 FDialogPreview::FDialogPreview(QWidget *pa) : QLabel(pa)
112 {
113 setAlignment(Qt::AlignLeft | Qt::AlignTop);
114 setFixedSize( QSize( 200, 200 ) );
115 setScaledContents( false );
116 setFrameShape( QLabel::WinPanel );
117 setFrameShadow( QLabel::Sunken );
118 updatePix();
119 }
120
updatePix()121 void FDialogPreview::updatePix()
122 {
123 QPixmap pm;
124 QRect inside = contentsRect();
125 pm = QPixmap(inside.width(), inside.height());
126 pm.fill(Qt::white);
127 setPixmap(pm);
128 }
129
genPreview(const QString & name)130 void FDialogPreview::genPreview(const QString& name)
131 {
132 QPixmap pm;
133 QString Buffer;
134 updatePix();
135 if (name.isEmpty())
136 return;
137 QFileInfo fi = QFileInfo(name);
138 if (fi.isDir())
139 return;
140 int w = pixmap()->width();
141 int h = pixmap()->height();
142 bool mode = false;
143 QString ext = fi.suffix().toLower();
144 QString formatD(FormatsManager::instance()->extensionListForFormat(FormatsManager::IMAGESIMGFRAME, 1));
145 QStringList formats = formatD.split("|");
146 formats.append("pat");
147 formats.removeAll("pdf");
148
149 QStringList allFormatsV = LoadSavePlugin::getExtensionsForPreview(FORMATID_FIRSTUSER);
150 if (ext.isEmpty())
151 ext = getImageType(name);
152 if (formats.contains(ext.toUtf8()))
153 {
154 ScImage im;
155 //No doc to send data anyway, so no doc to get into scimage.
156 CMSettings cms(nullptr, "", Intent_Perceptual);
157 cms.allowColorManagement(false);
158 if (!im.loadPicture(name, 1, cms, ScImage::Thumbnail, 72, &mode))
159 return;
160 int ix,iy;
161 if ((im.imgInfo.exifDataValid) && (!im.imgInfo.exifInfo.thumbnail.isNull()))
162 {
163 ix = im.imgInfo.exifInfo.width;
164 iy = im.imgInfo.exifInfo.height;
165 }
166 else
167 {
168 ix = im.width();
169 iy = im.height();
170 }
171 int xres = im.imgInfo.xres;
172 int yres = im.imgInfo.yres;
173 QString tmp;
174 QString tmp2;
175 QImage im2 = im.scaled(w - 5, h - 44, Qt::KeepAspectRatio, Qt::SmoothTransformation);
176 QPainter p;
177 QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png"));
178 // Qt4 FIXME imho should be better
179 pm = *pixmap();
180 p.begin(&pm);
181 p.fillRect(0, 0, w, h-44, b);
182 p.fillRect(0, h-44, w, 44, QColor(255, 255, 255));
183 p.drawImage((w - im2.width()) / 2, (h - 44 - im2.height()) / 2, im2);
184 p.drawText(2, h-29, tr("Size:")+" "+tmp.setNum(ix)+" x "+tmp2.setNum(iy));
185 if (!(extensionIndicatesPDF(ext) || extensionIndicatesEPSorPS(ext)))
186 p.drawText(2, h-17, tr("Resolution:")+" "+tmp.setNum(xres)+" x "+tmp2.setNum(yres)+" "+ tr("DPI"));
187 QString cSpace;
188 if ((extensionIndicatesPDF(ext) || extensionIndicatesEPSorPS(ext)) && (im.imgInfo.type != ImageType7))
189 cSpace = tr("Unknown");
190 else
191 cSpace=colorSpaceText(im.imgInfo.colorspace);
192 p.drawText(2, h-5, tr("Colorspace:")+" "+cSpace);
193 p.end();
194 setPixmap(pm);
195 repaint();
196 }
197 else if (allFormatsV.contains(ext.toUtf8()))
198 {
199 FileLoader *fileLoader = new FileLoader(name);
200 int testResult = fileLoader->testFile();
201 delete fileLoader;
202 if ((testResult == -1) || (testResult < FORMATID_FIRSTUSER))
203 return;
204 const FileFormat * fmt = LoadSavePlugin::getFormatById(testResult);
205 if (!fmt)
206 return;
207 QImage im = fmt->readThumbnail(name);
208 if (im.isNull())
209 return;
210 QString desc = tr("Size:")+" ";
211 desc += value2String(im.text("XSize").toDouble(), PrefsManager::instance().appPrefs.docSetupPrefs.docUnitIndex, true, true);
212 desc += " x ";
213 desc += value2String(im.text("YSize").toDouble(), PrefsManager::instance().appPrefs.docSetupPrefs.docUnitIndex, true, true);
214 im = im.scaled(w - 5, h - 21, Qt::KeepAspectRatio, Qt::SmoothTransformation);
215 QPainter p;
216 QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png"));
217 pm = *pixmap();
218 p.begin(&pm);
219 p.fillRect(0, 0, w, h-21, b);
220 p.fillRect(0, h-21, w, 21, QColor(255, 255, 255));
221 p.drawImage((w - im.width()) / 2, (h - 21 - im.height()) / 2, im);
222 p.drawText(2, h-5, desc);
223 p.end();
224 setPixmap(pm);
225 repaint();
226 }
227 else if (ext.toUtf8() == "sce")
228 {
229 QByteArray cf;
230 if (!loadRawText(name, cf))
231 return;
232 QString f;
233 if (cf.left(16) == "<SCRIBUSELEMUTF8")
234 f = QString::fromUtf8(cf.data());
235 else
236 f = cf.data();
237 ScPreview *pre = new ScPreview();
238 QImage im = pre->createPreview(f);
239 im = im.scaled(w - 5, h - 21, Qt::KeepAspectRatio, Qt::SmoothTransformation);
240 QPainter p;
241 QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill.png"));
242 pm = *pixmap();
243 p.begin(&pm);
244 p.fillRect(0, 0, w, h-21, b);
245 p.fillRect(0, h-21, w, 21, QColor(255, 255, 255));
246 p.drawImage((w - im.width()) / 2, (h - 21 - im.height()) / 2, im);
247 QString desc = tr("Size:")+QString(" %1 x %2").arg(im.width()).arg(im.height());
248 p.drawText(2, h-5, desc);
249 p.end();
250 setPixmap(pm);
251 repaint();
252 delete pre;
253 }
254 else
255 {
256 ScSlaInfoReader slaInfos;
257 if (slaInfos.readInfos(name))
258 {
259 QString Title = tr("Title:")+" ";
260 QString ti2 = slaInfos.title();
261 if (ti2.isEmpty())
262 ti2= tr("No Title");
263 Title += ti2+"\n";
264 QString Author = tr("Author:")+" ";
265 QString au2 = slaInfos.author();
266 if (au2.isEmpty())
267 au2 = tr("Unknown");
268 Author += au2+"\n";
269 QString Format = tr("File Format:")+" ";
270 QString fm2 = slaInfos.format();
271 if (fm2.isEmpty())
272 fm2 = tr("Unknown");
273 Format += fm2;
274 setText( tr("Scribus Document")+"\n\n"+Title+Author+Format);
275 }
276 else if ((ext == "txt") || (ext == "html") || (ext == "xml"))
277 {
278 if (loadText(name, &Buffer))
279 setText(Buffer.left(200));
280 }
281 }
282 }
283
CustomFDialog(QWidget * parent,const QString & wDir,const QString & caption,const QString & filter,int flags)284 CustomFDialog::CustomFDialog(QWidget *parent, const QString& wDir, const QString& caption, const QString& filter, int flags)
285 : QDialog(parent), m_optionFlags(flags)
286 {
287 setModal(true);
288 setWindowTitle(caption);
289 setWindowIcon(IconManager::instance().loadIcon("AppIcon.png"));
290 vboxLayout = new QVBoxLayout(this);
291 vboxLayout->setSpacing(6);
292 vboxLayout->setContentsMargins(9, 9, 9, 9);
293 hboxLayout = new QHBoxLayout;
294 hboxLayout->setSpacing(6);
295 hboxLayout->setContentsMargins(0, 0, 0, 0);
296 fileDialog = new ScFileWidget(this);
297 fileDialog->setIconProvider(new ImIconProvider());
298 fileDialog->setNameFilter(filter);
299 fileDialog->selectNameFilter(filter);
300 fileDialog->setDirectory(wDir);
301 hboxLayout->addWidget(fileDialog);
302 vboxLayout1 = new QVBoxLayout;
303 vboxLayout1->setSpacing(6);
304 vboxLayout1->setContentsMargins(0, 28, 0, 0);
305 vboxLayout1->setAlignment( Qt::AlignTop );
306 filePreview = new FDialogPreview( this );
307 filePreview->setMinimumSize(QSize(200, 200));
308 filePreview->setMaximumSize(QSize(200, 200));
309 vboxLayout1->addWidget(filePreview);
310 hboxLayout->addLayout(vboxLayout1);
311 vboxLayout->addLayout(hboxLayout);
312 QHBoxLayout *hboxLayout1 = new QHBoxLayout;
313 hboxLayout1->setSpacing(6);
314 hboxLayout1->setContentsMargins(0, 0, 0, 0);
315 showPreview = new QCheckBox(this);
316 showPreview->setText( tr("Show Preview"));
317 showPreview->setToolTip( tr("Show a preview and information for the selected file"));
318 showPreview->setChecked(true);
319 m_previewIsShown = true;
320 hboxLayout1->addWidget(showPreview);
321 QSpacerItem *spacerItem = new QSpacerItem(2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum);
322 hboxLayout1->addItem(spacerItem);
323 okButton = new QPushButton( CommonStrings::tr_OK, this);
324 okButton->setDefault( true );
325 hboxLayout1->addWidget( okButton );
326 if (flags & fdDisableOk)
327 okButton->setEnabled(false);
328 cancelButton = new QPushButton( CommonStrings::tr_Cancel, this);
329 cancelButton->setAutoDefault( false );
330 hboxLayout1->addWidget( cancelButton );
331 vboxLayout->addLayout(hboxLayout1);
332
333 if (flags & fdDirectoriesOnly)
334 {
335 Layout = new QFrame(this);
336 Layout1 = new QHBoxLayout(Layout);
337 Layout1->setSpacing(6);
338 Layout1->setContentsMargins(0, 0, 0, 0);
339 saveZip = new QCheckBox( tr( "&Compress File" ), Layout);
340 Layout1->addWidget(saveZip, Qt::AlignLeft);
341 QSpacerItem* spacer = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum );
342 Layout1->addItem( spacer );
343 vboxLayout->addWidget(Layout);
344 LayoutC = new QFrame(this);
345 Layout1C = new QHBoxLayout(LayoutC);
346 Layout1C->setSpacing(6);
347 Layout1C->setContentsMargins(0, 0, 0, 0);
348 withFonts = new QCheckBox( tr( "&Include Fonts" ), LayoutC);
349 Layout1C->addWidget(withFonts, Qt::AlignLeft);
350 withProfiles = new QCheckBox( tr( "&Include Color Profiles" ), LayoutC);
351 Layout1C->addWidget(withProfiles, Qt::AlignLeft);
352 QSpacerItem* spacer2 = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum );
353 Layout1C->addItem( spacer2 );
354 vboxLayout->addWidget(LayoutC);
355 fileDialog->setFileMode(QFileDialog::DirectoryOnly);
356 fileDialog->forceDoubleClickActivation(false);
357 filePreview->hide();
358 showPreview->setVisible(false);
359 showPreview->setChecked(false);
360 m_previewIsShown = false;
361 }
362 else
363 {
364 if (flags & fdCompressFile)
365 {
366 Layout = new QFrame(this);
367 Layout1 = new QHBoxLayout(Layout);
368 Layout1->setSpacing(6);
369 Layout1->setContentsMargins(0, 0, 0, 0);
370 saveZip = new QCheckBox( tr( "&Compress File" ), Layout);
371 Layout1->addWidget(saveZip);
372 QSpacerItem* spacer = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum );
373 Layout1->addItem( spacer );
374 }
375 if (flags & fdExistingFiles)
376 fileDialog->setFileMode(QFileDialog::ExistingFile);
377 else if (flags & fdExistingFilesI)
378 fileDialog->setFileMode(QFileDialog::ExistingFiles);
379 else
380 {
381 fileDialog->setFileMode(QFileDialog::AnyFile);
382 if (flags & fdCompressFile)
383 vboxLayout->addWidget(Layout);
384 }
385
386 if (saveZip != nullptr)
387 saveZip->setToolTip( "<qt>" + tr( "Compress the Scribus document on save" ) + "</qt>");
388 if (withFonts != nullptr)
389 withFonts->setToolTip( "<qt>" + tr( "Include fonts when collecting files for the document. Be sure to know and understand licensing information for any fonts you collect and possibly redistribute." ) + "</qt>");
390 if (withProfiles != nullptr)
391 withProfiles->setToolTip( "<qt>" + tr( "Include color profiles when collecting files for the document" ) + "</qt>");
392
393 if (flags & fdShowCodecs)
394 {
395 LayoutC = new QFrame(this);
396 Layout1C = new QHBoxLayout(LayoutC);
397 Layout1C->setSpacing(6);
398 Layout1C->setContentsMargins(0, 0, 0, 0);
399 optionLabel = new QLabel(this);
400 optionLabel->setText( tr("Encoding:"));
401 Layout1C->addWidget(optionLabel);
402 optionCombo = new QComboBox(LayoutC);
403 optionCombo->setEditable(false);
404 QString tmp_txc[] = {"ISO 8859-1", "ISO 8859-2", "ISO 8859-3",
405 "ISO 8859-4", "ISO 8859-5", "ISO 8859-6",
406 "ISO 8859-7", "ISO 8859-8", "ISO 8859-9",
407 "ISO 8859-10", "ISO 8859-13", "ISO 8859-14",
408 "ISO 8859-15", "UTF-8", "UTF-16", "KOI8-R", "KOI8-U",
409 "CP1250", "CP1251", "CP1252", "CP1253",
410 "CP1254", "CP1255", "CP1256", "CP1257",
411 "Apple Roman"};
412 size_t array = sizeof(tmp_txc) / sizeof(*tmp_txc);
413 for (uint a = 0; a < array; ++a)
414 optionCombo->addItem(tmp_txc[a]);
415 QString localEn = QTextCodec::codecForLocale()->name();
416 if (localEn == "ISO-10646-UCS-2")
417 localEn = "UTF-16";
418 bool hasIt = false;
419 for (int cc = 0; cc < optionCombo->count(); ++cc)
420 {
421 if (optionCombo->itemText(cc) == localEn)
422 {
423 optionCombo->setCurrentIndex(cc);
424 hasIt = true;
425 break;
426 }
427 }
428 if (!hasIt)
429 {
430 optionCombo->addItem(localEn);
431 optionCombo->setCurrentIndex(optionCombo->count()-1);
432 }
433 optionCombo->setMinimumSize(QSize(200, 0));
434 Layout1C->addWidget(optionCombo);
435 QSpacerItem* spacer2 = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum );
436 Layout1C->addItem( spacer2 );
437 vboxLayout->addWidget(LayoutC);
438 }
439 if (flags & fdShowImportOptions)
440 {
441 LayoutC = new QFrame(this);
442 Layout1C = new QHBoxLayout(LayoutC);
443 Layout1C->setSpacing(6);
444 Layout1C->setContentsMargins(0, 0, 0, 0);
445 optionLabel = new QLabel(this);
446 optionLabel->setText( tr("Import Option:"));
447 Layout1C->addWidget(optionLabel);
448 optionCombo = new QComboBox(LayoutC);
449 optionCombo->setEditable(false);
450 optionCombo->addItem( tr("Keep original size"));
451 optionCombo->addItem( tr("Downscale to page size"));
452 optionCombo->addItem( tr("Upscale to page size"));
453 optionCombo->setCurrentIndex(0);
454 optionCombo->setMinimumSize(QSize(200, 0));
455 Layout1C->addWidget(optionCombo);
456 QSpacerItem* spacer2 = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum );
457 Layout1C->addItem( spacer2 );
458 vboxLayout->addWidget(LayoutC);
459 }
460 bool setter2 = flags & fdHidePreviewCheckBox;
461 if (!setter2)
462 {
463 bool setter = flags & fdShowPreview;
464 showPreview->setChecked(setter);
465 m_previewIsShown = setter;
466 filePreview->setVisible(setter);
467 }
468 else
469 {
470 showPreview->hide();
471 m_previewIsShown = false;
472 filePreview->setVisible(false);
473 }
474 if (flags & fdCompressFile)
475 connect(saveZip, SIGNAL(clicked()), this, SLOT(handleCompress()));
476 }
477 fileDialog->forceDoubleClickActivation(m_previewIsShown);
478 fileDialog->setOption(QFileDialog::HideNameFilterDetails, true);
479 m_extZip = "gz";
480 connect(okButton, SIGNAL(clicked()), this, SLOT(okClicked()));
481 connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
482 connect(showPreview, SIGNAL(clicked()), this, SLOT(togglePreview()));
483 connect(fileDialog, SIGNAL(currentChanged(const QString &)), this, SLOT(fileClicked(const QString &)));
484 connect(fileDialog, SIGNAL(filesSelected(const QStringList &)), this, SLOT(accept()));
485 connect(fileDialog, SIGNAL(accepted()), this, SLOT(accept()));
486 connect(fileDialog, SIGNAL(rejected()), this, SLOT(reject()));
487 resize(minimumSizeHint());
488 }
489
~CustomFDialog()490 CustomFDialog::~CustomFDialog()
491 {
492 }
493
fileClicked(const QString & path)494 void CustomFDialog::fileClicked(const QString &path)
495 {
496 if (m_optionFlags & fdDisableOk)
497 okButton->setEnabled(!path.isEmpty());
498 if (m_previewIsShown)
499 filePreview->genPreview(path);
500 }
501
okClicked()502 void CustomFDialog::okClicked()
503 {
504 QString selFile=selectedFile();
505 if (selFile.isEmpty())
506 return;
507 QFileInfo fi(selFile);
508 if (fi.isDir() && (fileDialog->fileMode() != QFileDialog::DirectoryOnly))
509 fileDialog->gotoSelectedDirectory();
510 else
511 accept();
512 }
513
togglePreview()514 void CustomFDialog::togglePreview()
515 {
516 m_previewIsShown = !m_previewIsShown;
517 fileDialog->forceDoubleClickActivation(m_previewIsShown);
518 filePreview->setVisible(m_previewIsShown);
519 if (m_previewIsShown)
520 {
521 QStringList sel = fileDialog->selectedFiles();
522 if (!sel.isEmpty())
523 filePreview->genPreview(QDir::fromNativeSeparators(sel[0]));
524 }
525 // #11856: Hack to avoid file dialog widget turning black with Qt5
526 qApp->processEvents();
527 filePreview->setVisible(!m_previewIsShown);
528 qApp->processEvents();
529 filePreview->setVisible(m_previewIsShown);
530 fileDialog->repaint();
531 qApp->processEvents();
532 repaint();
533 }
534
setSelection(const QString & fileName)535 void CustomFDialog::setSelection(const QString& fileName)
536 {
537 fileDialog->selectFile( QFileInfo(fileName).fileName() );
538 if (m_previewIsShown)
539 filePreview->genPreview(fileName);
540 }
541
selectedFile() const542 QString CustomFDialog::selectedFile() const
543 {
544 QStringList sel = fileDialog->selectedFiles();
545 if (!sel.isEmpty())
546 return QDir::fromNativeSeparators(sel[0]);
547 return QString();
548 }
549
selectedFiles() const550 QStringList CustomFDialog::selectedFiles() const
551 {
552 return fileDialog->selectedFiles();
553 }
554
addWidgets(QWidget * widgets)555 void CustomFDialog::addWidgets(QWidget *widgets)
556 {
557 vboxLayout->addWidget(widgets);
558 }
559
handleCompress()560 void CustomFDialog::handleCompress()
561 {
562 QString fileName;
563 QFileInfo tmp(selectedFile());
564 QString fn(tmp.fileName());
565 QStringList fc = fn.split(".", Qt::KeepEmptyParts);
566 if (fc.count() > 0)
567 fileName = fc.at(0);
568 for (int a = 1; a < fc.count(); a++)
569 {
570 if (fc.at(a).compare("sla", Qt::CaseInsensitive) == 0)
571 continue;
572 if (fc.at(a).compare("gz", Qt::CaseInsensitive) == 0)
573 continue;
574 if (fc.at(a).compare(m_ext, Qt::CaseInsensitive) == 0)
575 continue;
576 if (fc.at(a).compare(m_extZip, Qt::CaseInsensitive) == 0)
577 continue;
578 fileName += "." + fc[a];
579 }
580 if (saveZip->isChecked())
581 tmp.setFile(fileName + "." + m_extZip);
582 else
583 tmp.setFile(fileName + "." + m_ext);
584 setSelection(tmp.fileName());
585 }
586
setExtension(const QString & e)587 void CustomFDialog::setExtension(const QString& e)
588 {
589 m_ext = e;
590 }
591
extension() const592 const QString& CustomFDialog::extension() const
593 {
594 return m_ext;
595 }
596
setZipExtension(const QString & e)597 void CustomFDialog::setZipExtension(const QString& e)
598 {
599 m_extZip = e;
600 }
601
zipExtension() const602 const QString& CustomFDialog::zipExtension() const
603 {
604 return m_extZip;
605 }
606
isTextCodecShown() const607 bool CustomFDialog::isTextCodecShown() const
608 {
609 if ((m_optionFlags & fdShowCodecs) == 0)
610 return false;
611 if (optionCombo)
612 return optionCombo->isVisible();
613 return false;
614 }
615
setTextCodec(const QString & textCodec)616 void CustomFDialog::setTextCodec(const QString& textCodec)
617 {
618 if ((m_optionFlags & fdShowCodecs) == 0)
619 return;
620 if (!optionCombo)
621 return;
622
623 QString textEncoding = textCodec;
624 if (textCodec.isEmpty())
625 textEncoding = "System";
626
627 int index = optionCombo->findText(textEncoding, Qt::MatchFixedString);
628 if (index < 0)
629 return;
630 optionCombo->setCurrentIndex(index);
631 }
632
textCodec() const633 QString CustomFDialog::textCodec() const
634 {
635 if ((m_optionFlags & fdShowCodecs) == 0)
636 return QString();
637 if (optionCombo)
638 return optionCombo->currentText();
639 return QString();
640 }
641
isSaveZipFileShown() const642 bool CustomFDialog::isSaveZipFileShown() const
643 {
644 if (saveZip)
645 return saveZip->isVisible();
646 return false;
647 }
648
setSaveZipFile(bool value)649 void CustomFDialog::setSaveZipFile(bool value)
650 {
651 if (!saveZip)
652 return;
653 saveZip->setChecked(value);
654 }
655
saveZipFile() const656 bool CustomFDialog::saveZipFile() const
657 {
658 if (saveZip)
659 return saveZip->isChecked();
660 return false;
661 }
662
isIncludeFontsShown() const663 bool CustomFDialog::isIncludeFontsShown() const
664 {
665 if (withFonts)
666 return withFonts->isVisible();
667 return false;
668 }
669
setIncludeFonts(bool value)670 void CustomFDialog::setIncludeFonts(bool value)
671 {
672 if (!withFonts)
673 return;
674 withFonts->setChecked(value);
675 }
676
includeFonts() const677 bool CustomFDialog::includeFonts() const
678 {
679 if (withFonts)
680 return withFonts->isChecked();
681 return false;
682 }
683
isIncludeProfilesShown() const684 bool CustomFDialog::isIncludeProfilesShown() const
685 {
686 if (withProfiles)
687 return withProfiles->isVisible();
688 return false;
689 }
690
setIncludeProfiles(bool value)691 void CustomFDialog::setIncludeProfiles(bool value)
692 {
693 if (!withProfiles)
694 return;
695 withProfiles->setChecked(value);
696 }
697
includeProfiles() const698 bool CustomFDialog::includeProfiles() const
699 {
700 if (withProfiles)
701 return withProfiles->isChecked();
702 return false;
703 }
704
currentOptionIndex() const705 int CustomFDialog::currentOptionIndex() const
706 {
707 if (optionCombo)
708 return optionCombo->currentIndex();
709 return -1;
710 }
711