Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
3 paul 1
/***************************************************************************
2
                          customfdialog.cpp  -  description
3
                             -------------------
4
    begin                : Fri Nov 30 2001
5
    copyright            : (C) 2001 by Franz Schmid
6
    email                : Franz.Schmid@altmuehlnet.de
7
 ***************************************************************************/
8
 
9
/***************************************************************************
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 ***************************************************************************/
17
 
18
#include "customfdialog.h"
19
#include "customfdialog.moc"
20
#include <qimage.h>
21
#include <qpixmap.h>
22
#include <qpainter.h>
23
#include <qfileinfo.h>
24
#include <qdir.h>
25
#include <qdom.h>
15 Franz 26
#include <qtextcodec.h>
3 paul 27
extern QImage LoadPict(QString fn);
28
extern bool loadText(QString nam, QString *Buffer);
29
extern QPixmap loadIcon(QString nam);
30
extern QString DocDir;
31
 
32
ImIconProvider::ImIconProvider(QWidget *pa) : QFileIconProvider(pa)
33
{
34
  fmts.clear();
35
  fmts += "eps";
36
  fmts += "gif";
37
  fmts += "png";
38
  fmts += "jpg";
39
  fmts += "xpm";
40
  fmts += "tif";
41
  fmts += "bmp";
42
  fmts += "pbm";
43
  fmts += "pgm";
44
  fmts += "ppm";
45
  fmts += "xbm";
46
  fmts += "xpm";
47
  imagepm = loadIcon("image.png");
48
  pspm = loadIcon("postscript.png");
49
  txtpm = loadIcon("txt.png");
50
  docpm = loadIcon("doc.png");
51
  pdfpm = loadIcon("pdf.png");
52
}
53
 
54
const QPixmap * ImIconProvider::pixmap(const QFileInfo &fi)
55
{
56
        QString ext = fi.extension(false).lower();
57
        if (fmts.contains(ext))
58
        {
59
                return &imagepm;
60
                }
61
        else
62
                {
63
                if (ext == "ps")
64
                        return &pspm;
65
                if (ext == "txt")
66
                        return &txtpm;
67
                if (ext == "scd")
68
                        return &docpm;
69
                if (ext == "sla")
70
                        return &docpm;
71
                if (ext == "pdf")
72
                        return &pdfpm;
73
                return QFileIconProvider::pixmap(fi);
74
                }
75
}
76
 
77
FDialogPreview::FDialogPreview(QWidget *pa) : QLabel(pa)
78
{
79
        setAlignment(AlignLeft | AlignTop);
80
        setMinimumSize( QSize( 100, 100 ) );
81
        setScaledContents( false );
82
        setEraseColor( white );
83
        setFrameShape( QLabel::WinPanel );
84
        setFrameShadow( QLabel::Sunken );
85
}
86
 
87
void FDialogPreview::GenPreview(QString name)
88
{
89
        QPixmap pm;
90
        QString Buffer = "";
91
        setText("");
92
        QFileInfo fi = QFileInfo(name);
93
        if (fi.isDir())
94
                return;
95
        QString ex = fi.extension(false).upper();
96
        QStrList imfo = QImageIO::inputFormats();
97
        if (ex == "JPG")
98
                ex = "JPEG";
99
        if ((imfo.contains(ex))||(ex=="PS")||(ex=="EPS")||(ex=="TIF"))
100
                {
101
                QImage im = LoadPict(name);
102
                if (!im.isNull())
103
                        {
104
                        int ix = im.width();
105
                        int iy = im.height();
106
                        QString tmp = "";
107
                        if ((im.width() > width()-5) || (im.height() > height()-20))
108
                                {
109
                                QImage im2;
110
                                float sx = im.width() /
111
                                  static_cast<float>(width()-5);
112
                                float sy = im.height() /
113
                                  static_cast<float>(height()-20);
114
                                im2 = sy < sx ?  im.smoothScale(qRound(im.width() / sx), qRound(im.height() / sx)) : im.smoothScale(qRound(im.width() / sy), qRound(im.height() / sy));
115
                                im = im2;
116
                                im2.detach();
117
                                }
118
                        QPainter p;
119
                        pm = QPixmap(width(), height());
120
                        pm.fill(white);
121
                        p.begin(&pm);
122
                        p.drawImage(0, 0, im);
123
                        p.drawText(2, height()-5, tr("Size:")+" "+tmp.setNum(ix)+" x "+tmp.setNum(iy));
124
                        p.end();
125
                        setPixmap(pm);
126
                        }
127
                }
128
        else
129
                {
130
                if (loadText(name, &Buffer))
131
                        {
132
                        if (Buffer.startsWith("<SCRIBUS"))
133
                                {
134
                                QDomDocument docu("scridoc");
135
                                if(!docu.setContent(Buffer))
136
                                        return;
137
                                QDomElement elem=docu.documentElement();
138
                                if ((elem.tagName() != "SCRIBUS") && (elem.tagName() != "SCRIBUSUTF8"))
139
                                        return;
140
                                QDomNode DOC=elem.firstChild();
141
                                QDomElement dc=DOC.toElement();
142
                                QString Tit = tr("Title:")+" ";
143
                                QString ti2 = dc.attribute("TITLE");
144
                                if (ti2 == "")
145
                                        ti2= tr("No Title");
146
                                Tit += ti2+"\n";
147
                                QString Aut = tr("Author:")+" ";
148
                                QString au2 = dc.attribute("AUTHOR");
149
                                if (au2 == "")
150
                                        au2 = tr("Unknown");
151
                                Aut += au2;
152
                                setText(tr("Scribus-Document")+"\n\n"+Tit+Aut);
153
                                }
154
                        else
155
                                setText(Buffer.left(200));
156
                        }
157
                }
158
}      
159
 
160
void FDialogPreview::previewUrl( const QUrl &url )
161
{
162
        if (url.isLocalFile())
163
                GenPreview(url.path());
164
}
165
 
15 Franz 166
CustomFDialog::CustomFDialog(QWidget *pa, QString cap, QString filter, bool Pre, bool mod, bool comp, bool cod)
3 paul 167
                                                 : QFileDialog(QString::null, filter, pa, 0, true)
168
{
169
        setIcon(loadIcon("AppIcon.xpm"));
170
        setCaption(cap);
171
        cDir = QDir();
172
        setDir(cDir);
173
        setIconProvider(new ImIconProvider(this));
174
        setContentsPreviewEnabled( true );
175
        FDialogPreview *pw = new FDialogPreview( this );
176
        setContentsPreview( pw, pw );
177
        if (comp)
178
                {
179
                Layout = new QFrame(this);
180
                Layout1 = new QHBoxLayout(Layout);
181
                Layout1->setSpacing( 6 );
182
                Layout1->setMargin( 0 );
183
                SaveZip = new QCheckBox(Layout, "test");
184
                SaveZip->setText(tr("Compress File"));
185
                Layout1->addWidget(SaveZip);
186
                QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
187
        Layout1->addItem( spacer );
188
                }
189
        if (mod)
190
                setMode(QFileDialog::ExistingFile);
191
        else
192
                {
193
                setMode(QFileDialog::AnyFile);
194
                if (comp)
195
                        addWidgets(0, Layout, 0);
196
                }
15 Franz 197
        if (cod)
198
                {
199
                LayoutC = new QFrame(this);
200
                Layout1C = new QHBoxLayout(LayoutC);
201
                Layout1C->setSpacing( 0 );
202
                Layout1C->setMargin( 4 );
203
                TxCodeT = new QLabel(this);
204
                TxCodeT->setText(tr("Encoding:"));
205
                TxCodeM = new QComboBox(true, LayoutC, "Cod");
206
                TxCodeM->setEditable(false);
207
                TxCodeM->insertItem("ISO8859-1");
208
                TxCodeM->insertItem("ISO8859-2");
209
                TxCodeM->insertItem("ISO8859-3");
210
                TxCodeM->insertItem("ISO8859-4");
211
                TxCodeM->insertItem("ISO8859-5");
212
                TxCodeM->insertItem("ISO8859-6");
213
                TxCodeM->insertItem("ISO8859-7");
214
                TxCodeM->insertItem("ISO8859-8");
215
                TxCodeM->insertItem("ISO8859-9");
216
                TxCodeM->insertItem("ISO8859-10");
217
                TxCodeM->insertItem("ISO8859-13");
218
                TxCodeM->insertItem("ISO8859-14");
219
                TxCodeM->insertItem("ISO8859-15");
220
                TxCodeM->insertItem("utf8");
221
                TxCodeM->insertItem("KOI8-R");
222
                TxCodeM->insertItem("KOI8-U");
223
                QString localEn = QTextCodec::codecForLocale()->name();
224
                for (int cc = 0; cc < TxCodeM->count(); cc++)
225
                        {
226
                        if (TxCodeM->text(cc) == localEn)
227
                                {
228
                                TxCodeM->setCurrentItem(cc);
229
                                break;
230
                                }
231
                        }
232
                TxCodeM->setMinimumSize(QSize(200, 0));
233
                Layout1C->addWidget(TxCodeM);
234
                QSpacerItem* spacer2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
235
        Layout1C->addItem( spacer2 );
236
                addWidgets(TxCodeT, LayoutC, 0);
237
                }
3 paul 238
        if (Pre)
239
                setPreviewMode( QFileDialog::Contents );
240
        else
241
                setPreviewMode( QFileDialog::NoPreview );
242
        setViewMode( QFileDialog::List );
243
        if (comp)
244
                connect(SaveZip, SIGNAL(clicked()), this, SLOT(HandleComp()));
245
        HomeB = new QToolButton(this);
246
        HomeB->setIconSet(loadIcon("gohome.png"));
247
        HomeB->setTextLabel(tr("Moves to your Document Directory.\nThis can be set in the Preferences."));
248
        connect(HomeB, SIGNAL(clicked()), this, SLOT(slotHome()));
249
        addToolButton(HomeB);
250
}
251
 
252
CustomFDialog::~CustomFDialog()
253
{
254
        setIconProvider(0);
255
        cDir.setCurrent(dir()->path());
256
}
257
 
258
void CustomFDialog::slotHome()
259
{
260
        setDir(QDir(DocDir));
261
}
262
 
263
void CustomFDialog::HandleComp()
264
{
265
        QString tmp;
266
        tmp = selectedFile();
267
        if (SaveZip->isChecked())
268
                {
269
                if (tmp.right(3) != ".gz")
270
                        tmp = tmp+".gz";
271
                setSelection(tmp);
272
                }
273
        else
274
                {
275
                int en = tmp.findRev(".gz");
276
                if (en > 0)
277
                        tmp.remove(en,3);
278
                }
279
        setSelection(tmp);
280
}