Subversion Repositories Scribus

Rev

Rev 112 | Rev 167 | 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
{
161 Franz 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");
3 paul 52
}
53
 
54
const QPixmap * ImIconProvider::pixmap(const QFileInfo &fi)
55
{
56
        QString ext = fi.extension(false).lower();
57
        if (fmts.contains(ext))
58
                return &imagepm;
59
        else
161 Franz 60
        {
3 paul 61
                if (ext == "ps")
62
                        return &pspm;
63
                if (ext == "txt")
64
                        return &txtpm;
65
                if (ext == "scd")
66
                        return &docpm;
67
                if (ext == "sla")
68
                        return &docpm;
69
                if (ext == "pdf")
70
                        return &pdfpm;
71
                return QFileIconProvider::pixmap(fi);
161 Franz 72
        }
3 paul 73
}
74
 
75
FDialogPreview::FDialogPreview(QWidget *pa) : QLabel(pa)
76
{
77
        setAlignment(AlignLeft | AlignTop);
78
        setMinimumSize( QSize( 100, 100 ) );
79
        setScaledContents( false );
80
        setEraseColor( white );
81
        setFrameShape( QLabel::WinPanel );
82
        setFrameShadow( QLabel::Sunken );
83
}
84
 
85
void FDialogPreview::GenPreview(QString name)
86
{
87
        QPixmap pm;
88
        QString Buffer = "";
89
        setText("");
90
        QFileInfo fi = QFileInfo(name);
91
        if (fi.isDir())
92
                return;
93
        QString ex = fi.extension(false).upper();
94
        QStrList imfo = QImageIO::inputFormats();
95
        if (ex == "JPG")
96
                ex = "JPEG";
16 Franz 97
        if ((imfo.contains(ex))||(ex=="PS")||(ex=="EPS")||(ex=="PDF")||(ex=="TIF"))
161 Franz 98
        {
3 paul 99
                QImage im = LoadPict(name);
100
                if (!im.isNull())
161 Franz 101
                {
3 paul 102
                        int ix = im.width();
103
                        int iy = im.height();
104
                        QString tmp = "";
84 Franz 105
                        QString tmp2 = "";
3 paul 106
                        if ((im.width() > width()-5) || (im.height() > height()-20))
161 Franz 107
                        {
3 paul 108
                                QImage im2;
80 Franz 109
                                double sx = im.width() / static_cast<double>(width()-5);
110
                                double sy = im.height() / static_cast<double>(height()-20);
161 Franz 111
                                im2 = sy < sx ?  im.smoothScale(qRound(im.width() / sx), qRound(im.height() / sx)) :
112
                                                                 im.smoothScale(qRound(im.width() / sy), qRound(im.height() / sy));
3 paul 113
                                im = im2;
114
                                im2.detach();
161 Franz 115
                        }
3 paul 116
                        QPainter p;
117
                        pm = QPixmap(width(), height());
118
                        pm.fill(white);
119
                        p.begin(&pm);
120
                        p.drawImage(0, 0, im);
84 Franz 121
                        p.drawText(2, height()-5, tr("Size:")+" "+tmp.setNum(ix)+" x "+tmp2.setNum(iy));
3 paul 122
                        p.end();
123
                        setPixmap(pm);
124
                }
161 Franz 125
        }
3 paul 126
        else
161 Franz 127
        {
128
                if (loadText(name, &Buffer))
3 paul 129
                {
161 Franz 130
                        if (Buffer.startsWith("<SCRIBUS"))
3 paul 131
                        {
132
                                QDomDocument docu("scridoc");
133
                                if(!docu.setContent(Buffer))
134
                                        return;
135
                                QDomElement elem=docu.documentElement();
136
                                if ((elem.tagName() != "SCRIBUS") && (elem.tagName() != "SCRIBUSUTF8"))
137
                                        return;
138
                                QDomNode DOC=elem.firstChild();
139
                                QDomElement dc=DOC.toElement();
140
                                QString Tit = tr("Title:")+" ";
141
                                QString ti2 = dc.attribute("TITLE");
142
                                if (ti2 == "")
143
                                        ti2= tr("No Title");
144
                                Tit += ti2+"\n";
145
                                QString Aut = tr("Author:")+" ";
146
                                QString au2 = dc.attribute("AUTHOR");
147
                                if (au2 == "")
148
                                        au2 = tr("Unknown");
149
                                Aut += au2;
112 Franz 150
                                setText( tr("Scribus-Document")+"\n\n"+Tit+Aut);
161 Franz 151
                        }
3 paul 152
                        else
153
                                setText(Buffer.left(200));
154
                }
161 Franz 155
        }
3 paul 156
}      
157
 
158
void FDialogPreview::previewUrl( const QUrl &url )
159
{
160
        if (url.isLocalFile())
161
                GenPreview(url.path());
162
}
163
 
15 Franz 164
CustomFDialog::CustomFDialog(QWidget *pa, QString cap, QString filter, bool Pre, bool mod, bool comp, bool cod)
3 paul 165
                                                 : QFileDialog(QString::null, filter, pa, 0, true)
166
{
83 Franz 167
        setIcon(loadIcon("AppIcon.png"));
3 paul 168
        setCaption(cap);
169
        cDir = QDir();
170
        setDir(cDir);
171
        setIconProvider(new ImIconProvider(this));
172
        setContentsPreviewEnabled( true );
173
        FDialogPreview *pw = new FDialogPreview( this );
174
        setContentsPreview( pw, pw );
175
        if (comp)
161 Franz 176
        {
3 paul 177
                Layout = new QFrame(this);
178
                Layout1 = new QHBoxLayout(Layout);
179
                Layout1->setSpacing( 6 );
180
                Layout1->setMargin( 0 );
181
                SaveZip = new QCheckBox(Layout, "test");
112 Franz 182
                SaveZip->setText( tr("Compress File"));
3 paul 183
                Layout1->addWidget(SaveZip);
184
                QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
161 Franz 185
                Layout1->addItem( spacer );
186
        }
3 paul 187
        if (mod)
188
                setMode(QFileDialog::ExistingFile);
189
        else
161 Franz 190
        {
3 paul 191
                setMode(QFileDialog::AnyFile);
192
                if (comp)
193
                        addWidgets(0, Layout, 0);
161 Franz 194
        }
15 Franz 195
        if (cod)
161 Franz 196
        {
15 Franz 197
                LayoutC = new QFrame(this);
198
                Layout1C = new QHBoxLayout(LayoutC);
199
                Layout1C->setSpacing( 0 );
200
                Layout1C->setMargin( 4 );
201
                TxCodeT = new QLabel(this);
112 Franz 202
                TxCodeT->setText( tr("Encoding:"));
15 Franz 203
                TxCodeM = new QComboBox(true, LayoutC, "Cod");
204
                TxCodeM->setEditable(false);
25 Franz 205
                TxCodeM->insertItem("ISO 8859-1");
206
                TxCodeM->insertItem("ISO 8859-2");
207
                TxCodeM->insertItem("ISO 8859-3");
208
                TxCodeM->insertItem("ISO 8859-4");
209
                TxCodeM->insertItem("ISO 8859-5");
210
                TxCodeM->insertItem("ISO 8859-6");
211
                TxCodeM->insertItem("ISO 8859-7");
212
                TxCodeM->insertItem("ISO 8859-8");
213
                TxCodeM->insertItem("ISO 8859-9");
214
                TxCodeM->insertItem("ISO 8859-10");
215
                TxCodeM->insertItem("ISO 8859-13");
216
                TxCodeM->insertItem("ISO 8859-14");
217
                TxCodeM->insertItem("ISO 8859-15");
15 Franz 218
                TxCodeM->insertItem("utf8");
219
                TxCodeM->insertItem("KOI8-R");
220
                TxCodeM->insertItem("KOI8-U");
44 Franz 221
                TxCodeM->insertItem("CP1250");
222
                TxCodeM->insertItem("CP1251");
223
                TxCodeM->insertItem("CP1252");
224
                TxCodeM->insertItem("CP1253");
225
                TxCodeM->insertItem("CP1254");
226
                TxCodeM->insertItem("CP1255");
227
                TxCodeM->insertItem("CP1256");
228
                TxCodeM->insertItem("CP1257");
15 Franz 229
                QString localEn = QTextCodec::codecForLocale()->name();
16 Franz 230
                bool hasIt = false;
161 Franz 231
                for (int cc = 0; cc < TxCodeM->count(); ++cc)
232
                {
233
                        if (TxCodeM->text(cc) == localEn)
15 Franz 234
                        {
235
                                TxCodeM->setCurrentItem(cc);
16 Franz 236
                                hasIt = true;
15 Franz 237
                                break;
238
                        }
161 Franz 239
                }
16 Franz 240
                if (!hasIt)
161 Franz 241
                {
16 Franz 242
                        TxCodeM->insertItem(localEn);
243
                        TxCodeM->setCurrentItem(TxCodeM->count()-1);
161 Franz 244
                }
15 Franz 245
                TxCodeM->setMinimumSize(QSize(200, 0));
246
                Layout1C->addWidget(TxCodeM);
247
                QSpacerItem* spacer2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
161 Franz 248
                Layout1C->addItem( spacer2 );
15 Franz 249
                addWidgets(TxCodeT, LayoutC, 0);
161 Franz 250
        }
80 Franz 251
        setPreviewMode(Pre ? QFileDialog::Contents : QFileDialog::NoPreview );
3 paul 252
        setViewMode( QFileDialog::List );
253
        if (comp)
254
                connect(SaveZip, SIGNAL(clicked()), this, SLOT(HandleComp()));
255
        HomeB = new QToolButton(this);
256
        HomeB->setIconSet(loadIcon("gohome.png"));
112 Franz 257
        HomeB->setTextLabel( tr("Moves to your Document Directory.\nThis can be set in the Preferences."));
3 paul 258
        connect(HomeB, SIGNAL(clicked()), this, SLOT(slotHome()));
259
        addToolButton(HomeB);
260
}
261
 
262
CustomFDialog::~CustomFDialog()
263
{
264
        setIconProvider(0);
265
        cDir.setCurrent(dir()->path());
266
}
267
 
268
void CustomFDialog::slotHome()
269
{
270
        setDir(QDir(DocDir));
271
}
272
 
273
void CustomFDialog::HandleComp()
274
{
275
        QString tmp;
276
        tmp = selectedFile();
277
        if (SaveZip->isChecked())
161 Franz 278
        {
3 paul 279
                if (tmp.right(3) != ".gz")
161 Franz 280
                        tmp = tmp + tmp.right(3) == "svg" ? "z" : ".gz";
281
/*                      if (tmp.right(3) == "svg")
68 Franz 282
                                tmp = tmp+"z";
283
                        else
284
                                tmp = tmp+".gz";
161 Franz 285
                        }*/
3 paul 286
                setSelection(tmp);
161 Franz 287
        }
3 paul 288
        else
161 Franz 289
        {
3 paul 290
                int en = tmp.findRev(".gz");
291
                if (en > 0)
292
                        tmp.remove(en,3);
68 Franz 293
                else
161 Franz 294
                {
68 Franz 295
                        en = tmp.findRev("z");
296
                        if (en > 0)
297
                                tmp.remove(en,1);
3 paul 298
                }
161 Franz 299
        }
3 paul 300
        setSelection(tmp);
301
}