Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
4430 cbradney 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
*/
3 paul 7
/****************************************************************************
8
** Form implementation generated from reading ui file 'Bib.ui'
9
**
10
** Created: Sun Oct 14 19:47:56 2001
11
**
12
****************************************************************************/
13
#include "scrap.h"
14
#include "scrap.moc"
15
#include <qfileinfo.h>
16
#include <qfile.h>
17
#include <qurl.h>
18
#include <qtextstream.h>
19
#include <qdom.h>
20
#include <qfiledialog.h>
5358 cbradney 21
#include <qlayout.h>
291 Franz 22
#include <qmessagebox.h>
5358 cbradney 23
#include <qtoolbutton.h>
3 paul 24
#include <qcursor.h>
25
#include "query.h"
30 Franz 26
#include "scpreview.h"
415 Franz 27
#include "prefsfile.h"
2534 craig 28
#include "util.h"
2952 cbradney 29
#include "commonstrings.h"
2834 cbradney 30
#include "prefsmanager.h"
4693 fschmid 31
#include "stencilreader.h"
32
extern QPixmap loadIcon(QString nam);
2856 cbradney 33
//CB TODO bring in the prefsManager instance locally here too
2534 craig 34
 
3 paul 35
/* The Scrapbook View Class
36
 * inherited from QIconView */
2834 cbradney 37
BibView::BibView(QWidget* parent) : QIconView(parent)
3 paul 38
{
4643 fschmid 39
        setAutoArrange(true);
40
        setSorting(true);
41
        setResizeMode(QIconView::Adjust);
2144 cbradney 42
        objectMap.clear();
4643 fschmid 43
        ScFilename = "";
3 paul 44
}
45
 
356 Franz 46
void BibView::keyPressEvent(QKeyEvent *k)
47
{
1500 cbradney 48
        //Why doesnt this widget send Escape to the QDialog? Lets make Escape work for now anyway.
49
        if (k->key()==Key_Escape && k->state() == 0)
366 Franz 50
        {
1500 cbradney 51
                QFrame *f=dynamic_cast<QFrame *>(parent());
52
                if (f)
53
                {
54
                        QDialog *d=dynamic_cast<QDialog *>(f->parent());
55
                        if (d)
56
                                d->close();
57
                }
366 Franz 58
        }
1500 cbradney 59
        else
60
                QIconView::keyPressEvent(k);
356 Franz 61
}
62
 
3 paul 63
QDragObject *BibView::dragObject()
64
{
2144 cbradney 65
        QString dt = objectMap[currentItem()->text()].Data.utf8();
4708 fschmid 66
        QFileInfo fi(dt);
67
        if (fi.extension(true).lower() == "sml")
68
        {
69
                QString f = "";
70
                loadText(dt, &f);
71
                StencilReader *pre = new StencilReader();
72
                dt = pre->createObjects(f);
73
                delete pre;
74
        }
4735 fschmid 75
        else if (fi.extension(true).lower() == "sce")
76
        {
77
                QString f = "";
78
                loadText(dt, &f);
79
                dt = f;
80
        }
3 paul 81
        QDragObject *dr = new QTextDrag(dt, this);
4611 fschmid 82
        dr->setPixmap(objectMap[currentItem()->text()].Preview);
4649 fschmid 83
        clearSelection();
3 paul 84
        return dr;
85
}
86
 
87
void BibView::AddObj(QString name, QString daten, QPixmap Bild)
88
{
89
        struct Elem DrElem;
248 Franz 90
        DrElem.Data = daten;
91
        DrElem.Preview = Bild;
2144 cbradney 92
        objectMap.insert(name, DrElem);
3 paul 93
}
94
 
4611 fschmid 95
void BibView::SaveContents(QString name, QString oldName)
3 paul 96
{
4611 fschmid 97
        QDir d(oldName, "*.sce", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
98
        if ((d.exists()) && (d.count() != 0))
248 Franz 99
        {
4611 fschmid 100
                for (uint dc = 0; dc < d.count(); ++dc)
101
                {
102
                        QString f = "";
103
                        if (!loadText(QDir::cleanDirPath(QDir::convertSeparators(oldName + "/" + d[dc])), &f))
104
                                continue;
4649 fschmid 105
                        QFile fil(QDir::cleanDirPath(QDir::convertSeparators(name + "/" + d[dc])));
106
                        if(!fil.open(IO_WriteOnly))
4611 fschmid 107
                                continue ;
4649 fschmid 108
                        QTextStream s(&fil);
4611 fschmid 109
                        s.writeRawBytes(f, f.length());
4649 fschmid 110
                        fil.close();
111
                        QPixmap pm;
112
                        QFileInfo fi(QDir::cleanDirPath(QDir::convertSeparators(oldName + "/" + d[dc])));
113
                        QFileInfo fi2(QDir::cleanDirPath(QDir::convertSeparators(fi.dirPath()+"/"+fi.baseName()+".png")));
114
                        if (fi2.exists())
115
                                pm.load(QDir::cleanDirPath(QDir::convertSeparators(fi.dirPath()+"/"+fi.baseName()+".png")));
116
                        else
117
                        {
118
                                ScPreview *pre = new ScPreview();
119
                                pm = pre->createPreview(f);
120
                                delete pre;
121
                        }
122
                        QFileInfo fi3(QDir::cleanDirPath(QDir::convertSeparators(oldName + "/" + d[dc])));
123
                        pm.save(QDir::cleanDirPath(QDir::convertSeparators(fi3.dirPath()+"/"+fi3.baseName()+".png")), "PNG");
4611 fschmid 124
                }
248 Franz 125
        }
4735 fschmid 126
        QDir d2(oldName, "*.sml", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
127
        if ((d.exists()) && (d.count() != 0))
128
        {
129
                for (uint dc = 0; dc < d2.count(); ++dc)
130
                {
131
                        QString f = "";
132
                        if (!loadText(QDir::cleanDirPath(QDir::convertSeparators(oldName + "/" + d2[dc])), &f))
133
                                continue;
134
                        QFile fil(QDir::cleanDirPath(QDir::convertSeparators(name + "/" + d2[dc])));
135
                        if(!fil.open(IO_WriteOnly))
136
                                continue ;
137
                        QTextStream s(&fil);
138
                        s.writeRawBytes(f, f.length());
139
                        fil.close();
140
                        QPixmap pm;
141
                        QFileInfo fi(QDir::cleanDirPath(QDir::convertSeparators(oldName + "/" + d2[dc])));
142
                        QFileInfo fi2(QDir::cleanDirPath(QDir::convertSeparators(fi.dirPath()+"/"+fi.baseName()+".png")));
143
                        if (fi2.exists())
144
                                pm.load(QDir::cleanDirPath(QDir::convertSeparators(fi.dirPath()+"/"+fi.baseName()+".png")));
145
                        else
146
                        {
147
                                StencilReader *pre = new StencilReader();
148
                                pm = pre->createPreview(f);
149
                                delete pre;
150
                        }
151
                        QFileInfo fi3(QDir::cleanDirPath(QDir::convertSeparators(oldName + "/" + d2[dc])));
152
                        pm.save(QDir::cleanDirPath(QDir::convertSeparators(fi3.dirPath()+"/"+fi3.baseName()+".png")), "PNG");
153
                }
154
        }
3 paul 155
}
156
 
4611 fschmid 157
void BibView::ReadOldContents(QString name, QString newName)
3 paul 158
{
159
        QDomDocument docu("scridoc");
160
        QString f = "";
161
        if (!loadText(name, &f))
162
                return;
163
        QString ff = "";
5057 tsoots 164
        // these were corrupting the scrapbook entries, removed and works ok now, Riku
165
//      if (f.startsWith("<SCRIBUSSCRAPUTF8"))
166
//              ff = QString::fromUtf8(f);
167
//      else
3 paul 168
                ff = f;
169
        if(!docu.setContent(ff))
170
                return;
171
        QDomElement elem=docu.documentElement();
172
        if ((elem.tagName() != "SCRIBUSSCRAP") && (elem.tagName() != "SCRIBUSSCRAPUTF8"))
173
                return;
174
        QDomNode DOC=elem.firstChild();
175
        while(!DOC.isNull())
248 Franz 176
        {
3 paul 177
                QDomElement dc=DOC.toElement();
178
                if (dc.tagName()=="OBJEKT")
248 Franz 179
                {
4611 fschmid 180
                        QFile fi(QDir::cleanDirPath(QDir::convertSeparators(newName + "/" + GetAttr(&dc, "NAME") + ".sce")));
181
                        if(!fi.open(IO_WriteOnly))
182
                                continue ;
183
                        QTextStream s(&fi);
184
                        QString fn = GetAttr(&dc, "DATA");
185
                        s.writeRawBytes(fn, fn.length());
186
                        fi.close();
187
                }
188
                DOC=DOC.nextSibling();
189
        }
190
}
191
 
192
void BibView::ReadContents(QString name)
193
{
194
        clear();
195
        objectMap.clear();
4708 fschmid 196
        QString nd;
197
        if (name.endsWith(QDir::convertSeparators("/")))
198
                nd = name.left(name.length()-1);
4735 fschmid 199
//      QFileInfo fd(nd);
200
//      canWrite = fd.permission( QFileInfo::WriteUser );
201
// Above code is commented out because QFileInfo::permissons does not work properly
4611 fschmid 202
        QDir d(name, "*.sce", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
203
        if ((d.exists()) && (d.count() != 0))
204
        {
205
                for (uint dc = 0; dc < d.count(); ++dc)
206
                {
207
                        QString f = "";
4649 fschmid 208
                        QPixmap pm;
4611 fschmid 209
                        if (!loadText(QDir::cleanDirPath(QDir::convertSeparators(name + "/" + d[dc])), &f))
210
                                continue;
211
                        QFileInfo fi(QDir::cleanDirPath(QDir::convertSeparators(name + "/" + d[dc])));
4649 fschmid 212
                        QFileInfo fi2(QDir::cleanDirPath(QDir::convertSeparators(fi.dirPath()+"/"+fi.baseName()+".png")));
213
                        if (fi2.exists())
214
                                pm.load(QDir::cleanDirPath(QDir::convertSeparators(fi.dirPath()+"/"+fi.baseName()+".png")));
215
                        else
216
                        {
217
                                ScPreview *pre = new ScPreview();
218
                                pm = pre->createPreview(f);
4735 fschmid 219
//                              if (canWrite)
220
// Above code is commented out because QFileInfo::permissons does not work properly
4693 fschmid 221
                                        pm.save(QDir::cleanDirPath(QDir::convertSeparators(fi.dirPath()+"/"+fi.baseName()+".png")), "PNG");
4649 fschmid 222
                                delete pre;
223
                        }
224
                        AddObj(fi.baseName(), QDir::cleanDirPath(QDir::convertSeparators(name + "/" + d[dc])), pm);
248 Franz 225
                }
226
        }
4693 fschmid 227
        QDir d2(name, "*.sml", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
228
        if ((d2.exists()) && (d2.count() != 0))
248 Franz 229
        {
4693 fschmid 230
                for (uint dc = 0; dc < d2.count(); ++dc)
231
                {
232
                        QString f = "";
233
                        QPixmap pm;
234
                        if (!loadText(QDir::cleanDirPath(QDir::convertSeparators(name + "/" + d2[dc])), &f))
235
                                continue;
236
                        QFileInfo fi(QDir::cleanDirPath(QDir::convertSeparators(name + "/" + d2[dc])));
237
                        QFileInfo fi2(QDir::cleanDirPath(QDir::convertSeparators(fi.dirPath()+"/"+fi.baseName()+".png")));
238
                        if (fi2.exists())
239
                                pm.load(QDir::cleanDirPath(QDir::convertSeparators(fi.dirPath()+"/"+fi.baseName()+".png")));
240
                        else
241
                        {
242
                                StencilReader *pre = new StencilReader();
243
                                pm = pre->createPreview(f);
4735 fschmid 244
//                              if (canWrite)
245
// Above code is commented out because QFileInfo::permissons does not work properly
4693 fschmid 246
                                        pm.save(QDir::cleanDirPath(QDir::convertSeparators(fi.dirPath()+"/"+fi.baseName()+".png")), "PNG");
247
                                delete pre;
248
                        }
249
                        AddObj(fi.baseName(), QDir::cleanDirPath(QDir::convertSeparators(name + "/" + d2[dc])), pm);
250
                }
248 Franz 251
        }
3 paul 252
        QMap<QString,Elem>::Iterator itf;
2144 cbradney 253
        for (itf = objectMap.begin(); itf != objectMap.end(); ++itf)
248 Franz 254
        {
255
                (void) new QIconViewItem(this, itf.key(), itf.data().Preview);
256
        }
3 paul 257
}
4693 fschmid 258
 
3 paul 259
/* This is the main Dialog-Class for the Scrapbook */
2834 cbradney 260
Biblio::Biblio( QWidget* parent) : ScrPaletteBase( parent, "Sclib", false, 0 )
3 paul 261
{
1447 fschmid 262
        resize( 230, 190 );
1448 cbradney 263
        setIcon(loadIcon("AppIcon.png"));
248 Franz 264
        BiblioLayout = new QVBoxLayout( this );
265
        BiblioLayout->setSpacing( 0 );
1448 cbradney 266
        BiblioLayout->setMargin( 0 );
5358 cbradney 267
 
268
        buttonLayout = new QHBoxLayout;
269
        buttonLayout->setSpacing( 5 );
270
        buttonLayout->setMargin( 0 );
271
        newButton = new QToolButton(this, "newButton" );
272
        newButton->setPixmap(loadIcon("DateiNeu16.png"));
273
        loadButton = new QToolButton(this, "loadButton" );
274
        loadButton->setPixmap(loadIcon("DateiOpen16.png"));
275
        saveAsButton = new QToolButton(this, "saveAsButton" );
276
        saveAsButton->setPixmap(loadIcon("DateiSave16.png"));
277
        importButton = new QToolButton(this, "importButton" );
278
        importButton->setPixmap(loadIcon("compfile16.png"));
279
        closeButton = new QToolButton(this, "closeButton" );
280
        closeButton->setPixmap(loadIcon("DateiClos16.png"));
281
        buttonLayout->addWidget( newButton );
282
        buttonLayout->addWidget( loadButton );
283
        buttonLayout->addWidget( saveAsButton );
284
        buttonLayout->addWidget( importButton );
285
        buttonLayout->addWidget( closeButton );
286
        QSpacerItem* spacer = new QSpacerItem( 16, 16, QSizePolicy::Expanding, QSizePolicy::Minimum );
287
        buttonLayout->addItem( spacer );
288
        BiblioLayout->addLayout( buttonLayout );
289
 
290
        connect(newButton, SIGNAL(clicked()), this, SLOT(NewLib()));
291
        connect(loadButton, SIGNAL(clicked()), this, SLOT(Load()));
292
        connect(saveAsButton, SIGNAL(clicked()), this, SLOT(SaveAs()));
293
        connect(importButton, SIGNAL(clicked()), this, SLOT(Import()));
294
        connect(closeButton, SIGNAL(clicked()), this, SLOT(closeLib()));
295
 
296
        /*
248 Franz 297
        fmenu = new QPopupMenu();
2191 cbradney 298
        fNew = fmenu->insertItem(loadIcon("DateiNeu16.png"), "", this, SLOT(NewLib()), CTRL+Key_N);
299
        fLoad = fmenu->insertItem(loadIcon("DateiOpen16.png"), "", this, SLOT(Load()), CTRL+Key_O);
4611 fschmid 300
        fSaveAs = fmenu->insertItem( loadIcon("DateiSave16.png"), "", this, SLOT(SaveAs()));
5058 tsoots 301
        fmenu->insertSeparator();
302
        fImport = fmenu->insertItem("", this, SLOT(Import()));
303
        fmenu->insertSeparator();
4643 fschmid 304
        fClose = fmenu->insertItem(loadIcon("DateiClos16.png"), "", this, SLOT(closeLib()));
248 Franz 305
        menuBar = new QMenuBar(this);
2191 cbradney 306
        mFile=menuBar->insertItem( "", fmenu);
248 Franz 307
        BiblioLayout->setMenuBar( menuBar );
5358 cbradney 308
        */
4643 fschmid 309
        Frame3 = new QTabWidget( this, "Frame3" );
3 paul 310
 
4643 fschmid 311
        activeBView = new BibView(this);
312
        Frame3->addTab(activeBView, "Main");
5760 fschmid 313
        tempBView = new BibView(this);
314
        Frame3->addTab(tempBView, "Temp");
248 Franz 315
        BiblioLayout->addWidget( Frame3 );
2191 cbradney 316
        languageChange();
4643 fschmid 317
        connect(activeBView, SIGNAL(dropped(QDropEvent *, const QValueList<QIconDragItem> &)), this, SLOT(DropOn(QDropEvent *)));
318
        connect(activeBView, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint &)), this, SLOT(HandleMouse(QIconViewItem*)));
319
        connect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
320
        connect(Frame3, SIGNAL(currentChanged(QWidget*)), this, SLOT(libChanged(QWidget* )));
3 paul 321
}
2144 cbradney 322
 
4735 fschmid 323
void Biblio::setOpenScrapbooks(QStringList &fileNames)
324
{
325
        disconnect(activeBView, SIGNAL(dropped(QDropEvent *, const QValueList<QIconDragItem> &)), this, SLOT(DropOn(QDropEvent *)));
326
        disconnect(activeBView, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint &)), this, SLOT(HandleMouse(QIconViewItem*)));
327
        disconnect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
328
        for (uint rd = 0; rd < fileNames.count(); ++rd)
329
        {
330
                QString fileName = fileNames[rd];
331
                if (!fileName.isEmpty())
332
                {
333
                        QDir d(fileName);
334
                        activeBView = new BibView(this);
335
/*                      if (!activeBView->canWrite)
336
                                Frame3->addTab(activeBView, loadIcon("spot.png"), d.dirName());
337
                        else */
338
// Above code is commented out because QFileInfo::permissons does not work properly
339
                        Frame3->addTab(activeBView, d.dirName());
340
                        activeBView->ReadContents(fileName);
341
                        activeBView->ScFilename = fileName;
342
                }
343
        }
344
        activeBView = (BibView*)Frame3->page(0);
345
        Frame3->setCurrentPage(0);
346
        connect(activeBView, SIGNAL(dropped(QDropEvent *, const QValueList<QIconDragItem> &)), this, SLOT(DropOn(QDropEvent *)));
347
        connect(activeBView, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint &)), this, SLOT(HandleMouse(QIconViewItem*)));
348
        connect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
349
}
350
 
351
QStringList Biblio::getOpenScrapbooks()
352
{
353
        QStringList ret;
354
        ret.clear();
5760 fschmid 355
        if (Frame3->count() > 2) // omit the first 2 Tabs since they contain the main and temp scrapbook
4735 fschmid 356
        {
5760 fschmid 357
                for (int a = 2; a < Frame3->count(); a++)
4735 fschmid 358
                {
359
                        BibView* bv = (BibView*)Frame3->page(a);
360
                        ret.append(bv->ScFilename);
361
                }
362
        }
363
        return ret;
364
}
365
 
2144 cbradney 366
void Biblio::setScrapbookFileName(QString fileName)
1448 cbradney 367
{
4643 fschmid 368
        activeBView->ScFilename=fileName;
1448 cbradney 369
}
370
 
2144 cbradney 371
const QString Biblio::getScrapbookFileName()
1448 cbradney 372
{
4643 fschmid 373
        return activeBView->ScFilename;
1448 cbradney 374
}
375
 
2144 cbradney 376
const int Biblio::objectCount()
377
{
4643 fschmid 378
        return activeBView->objectMap.count();
2144 cbradney 379
}
4693 fschmid 380
 
4611 fschmid 381
void Biblio::readOldContents(QString fileName, QString newName)
382
{
4643 fschmid 383
        activeBView->ReadOldContents(fileName, newName);
4611 fschmid 384
}
385
 
2144 cbradney 386
void Biblio::readContents(QString fileName)
387
{
4643 fschmid 388
        activeBView->ReadContents(fileName);
2144 cbradney 389
}
390
 
5760 fschmid 391
void Biblio::readTempContents(QString fileName)
392
{
393
        tempBView->ReadContents(fileName);
394
        tempBView->ScFilename = fileName;
395
}
396
 
2144 cbradney 397
void Biblio::installEventFilter(const QObject *filterObj)
398
{
399
        ScrPaletteBase::installEventFilter(filterObj);
4643 fschmid 400
        activeBView->installEventFilter(filterObj);
5760 fschmid 401
        tempBView->installEventFilter(filterObj);
2144 cbradney 402
}
403
 
4643 fschmid 404
void Biblio::NewLib()
3 paul 405
{
2856 cbradney 406
        PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
4643 fschmid 407
        QString fileName = QFileDialog::getExistingDirectory("", this, "d", tr("Choose a Scrapbook Directory"), true);
408
        if (!fileName.isEmpty())
248 Franz 409
        {
4643 fschmid 410
                for (int a = 0; a < Frame3->count(); a++)
411
                {
412
                        BibView* bv = (BibView*)Frame3->page(a);
413
                        if (fileName == bv->ScFilename)
414
                                return;
415
                }
416
                disconnect(activeBView, SIGNAL(dropped(QDropEvent *, const QValueList<QIconDragItem> &)), this, SLOT(DropOn(QDropEvent *)));
417
                disconnect(activeBView, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint &)), this, SLOT(HandleMouse(QIconViewItem*)));
418
                disconnect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
419
                QDir d(fileName);
420
                activeBView = new BibView(this);
421
                Frame3->addTab(activeBView, d.dirName());
422
                activeBView->ScFilename = fileName;
423
                Frame3->showPage(activeBView);
4649 fschmid 424
                d.cdUp();
425
                dirs->set("scrap_load", d.absPath());
4643 fschmid 426
                connect(activeBView, SIGNAL(dropped(QDropEvent *, const QValueList<QIconDragItem> &)), this, SLOT(DropOn(QDropEvent *)));
427
                connect(activeBView, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint &)), this, SLOT(HandleMouse(QIconViewItem*)));
428
                connect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
248 Franz 429
        }
3 paul 430
}
431
 
432
void Biblio::Load()
433
{
2856 cbradney 434
        PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
4611 fschmid 435
        QString fileName = QFileDialog::getExistingDirectory(dirs->get("scrap_load", "."), this, "d", tr("Choose a Scrapbook Directory"), true);
3 paul 436
        if (!fileName.isEmpty())
248 Franz 437
        {
4643 fschmid 438
                for (int a = 0; a < Frame3->count(); a++)
439
                {
440
                        BibView* bv = (BibView*)Frame3->page(a);
441
                        if (fileName == bv->ScFilename)
442
                                return;
443
                }
444
                disconnect(activeBView, SIGNAL(dropped(QDropEvent *, const QValueList<QIconDragItem> &)), this, SLOT(DropOn(QDropEvent *)));
445
                disconnect(activeBView, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint &)), this, SLOT(HandleMouse(QIconViewItem*)));
446
                disconnect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
447
                QDir d(fileName);
448
                activeBView = new BibView(this);
4735 fschmid 449
/*              if (!activeBView->canWrite)
4693 fschmid 450
                        Frame3->addTab(activeBView, loadIcon("spot.png"), d.dirName());
4735 fschmid 451
                else */
452
// Above code is commented out because QFileInfo::permissons does not work properly
4693 fschmid 453
                        Frame3->addTab(activeBView, d.dirName());
4643 fschmid 454
                activeBView->ReadContents(fileName);
455
                activeBView->ScFilename = fileName;
456
                Frame3->showPage(activeBView);
4649 fschmid 457
                d.cdUp();
458
                dirs->set("scrap_load", d.absPath());
4643 fschmid 459
                connect(activeBView, SIGNAL(dropped(QDropEvent *, const QValueList<QIconDragItem> &)), this, SLOT(DropOn(QDropEvent *)));
460
                connect(activeBView, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint &)), this, SLOT(HandleMouse(QIconViewItem*)));
461
                connect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
248 Franz 462
        }
3 paul 463
}
464
 
5058 tsoots 465
void Biblio::Import()
466
{
467
        PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
468
        QString s = QFileDialog::getOpenFileName(dirs->get("old_scrap_load", "."),
469
                                                 tr("Scrapbook (*.scs)"),
470
                                                 this,
471
                                                 "open file dialog",
472
                                                 tr("Choose a scrapbook file to import"));
473
 
474
        if (!s.isEmpty())
475
        {
476
                dirs->set("old_scrap_load", s.left(s.findRev(QDir::convertSeparators("/"))));
477
 
478
                QString scrapbookFileO = s;
479
                QFileInfo scrapbookFileInfoO = QFileInfo(scrapbookFileO);
480
                if (scrapbookFileInfoO.exists())
481
                {
482
                        readOldContents(scrapbookFileO, activeBView->ScFilename);
483
                        readContents(activeBView->ScFilename);
484
                }
485
        }
486
}
487
 
4643 fschmid 488
void Biblio::SaveAs()
489
{
490
        PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
491
        QString fn = QFileDialog::getExistingDirectory(dirs->get("scrap_saveas", "."), this, "d", tr("Choose a Directory"), true);
492
        if (!fn.isEmpty())
493
        {
494
                for (int a = 0; a < Frame3->count(); a++)
495
                {
496
                        BibView* bv = (BibView*)Frame3->page(a);
497
                        if (fn == bv->ScFilename)
498
                                return;
499
                }
4649 fschmid 500
                QDir d(fn);
4643 fschmid 501
                dirs->set("scrap_saveas", fn);
502
                activeBView->SaveContents(fn, activeBView->ScFilename);
503
                activeBView->ScFilename = fn;
504
                Frame3->changeTab(activeBView, d.dirName());
4649 fschmid 505
                d.cdUp();
506
                dirs->set("scrap_saveas", d.absPath());
4643 fschmid 507
        }
508
}
509
 
510
void Biblio::closeLib()
511
{
5760 fschmid 512
        if (Frame3->count() == 2)
4643 fschmid 513
                close();
5779 fschmid 514
        if ((Frame3->currentPageIndex() == 0) || (Frame3->currentPageIndex() == 1))
515
                return;
4643 fschmid 516
        else
517
        {
518
                disconnect(activeBView, SIGNAL(dropped(QDropEvent *, const QValueList<QIconDragItem> &)), this, SLOT(DropOn(QDropEvent *)));
519
                disconnect(activeBView, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint &)), this, SLOT(HandleMouse(QIconViewItem*)));
520
                disconnect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
521
                Frame3->removePage(activeBView);
4649 fschmid 522
//              delete activeBView;   currently disabled as the whole TabWidget vanishes when executing that delete?????
523
                activeBView = (BibView*)Frame3->page(0);
524
                Frame3->setCurrentPage(0);
4643 fschmid 525
                connect(activeBView, SIGNAL(dropped(QDropEvent *, const QValueList<QIconDragItem> &)), this, SLOT(DropOn(QDropEvent *)));
526
                connect(activeBView, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint &)), this, SLOT(HandleMouse(QIconViewItem*)));
527
                connect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
4649 fschmid 528
        }
4643 fschmid 529
}
530
 
531
void Biblio::libChanged(QWidget *lib)
532
{
533
        disconnect(activeBView, SIGNAL(dropped(QDropEvent *, const QValueList<QIconDragItem> &)), this, SLOT(DropOn(QDropEvent *)));
534
        disconnect(activeBView, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint &)), this, SLOT(HandleMouse(QIconViewItem*)));
535
        disconnect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
536
        activeBView = (BibView*)lib;
537
        connect(activeBView, SIGNAL(dropped(QDropEvent *, const QValueList<QIconDragItem> &)), this, SLOT(DropOn(QDropEvent *)));
538
        connect(activeBView, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint &)), this, SLOT(HandleMouse(QIconViewItem*)));
539
        connect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
540
}
3 paul 541
 
542
void Biblio::HandleMouse(QIconViewItem *ite)
543
{
291 Franz 544
        int mret, del, ren;
3 paul 545
        if (ite != 0)
248 Franz 546
        {
3 paul 547
                QPopupMenu *pmenu = new QPopupMenu();
548
                qApp->setOverrideCursor(QCursor(ArrowCursor), true);
291 Franz 549
                ren = pmenu->insertItem( tr("Rename"));
112 Franz 550
                del = pmenu->insertItem( tr("Delete"));
3 paul 551
                mret = pmenu->exec(QCursor::pos());
552
                if (mret == del)
248 Franz 553
                        DeleteObj(ite->text(), ite);
291 Franz 554
                if (mret == ren)
555
                {
556
                        ite->setRenameEnabled(true);
557
                        OldName = ite->text();
558
                        ite->rename();
559
                        ite->setRenameEnabled(false);
560
                }
248 Franz 561
                delete pmenu;
562
        }
3 paul 563
}
564
 
565
void Biblio::DeleteObj(QString name, QIconViewItem *ite)
566
{
4735 fschmid 567
/*      if (!activeBView->canWrite)
568
                return; */
569
// Above code is commented out because QFileInfo::permissons does not work properly
4643 fschmid 570
        QFile f(activeBView->objectMap[name].Data);
4611 fschmid 571
        f.remove();
4649 fschmid 572
        QFileInfo fi(QDir::convertSeparators(activeBView->ScFilename + "/" + name + ".png"));
573
        if (fi.exists())
574
        {
575
                QFile f2(QDir::convertSeparators(activeBView->ScFilename + "/" + name + ".png"));
576
                f2.remove();
577
        }
4643 fschmid 578
        activeBView->objectMap.remove(name);
3 paul 579
        delete ite;
4643 fschmid 580
        activeBView->sort(activeBView->sortDirection());
581
        activeBView->arrangeItemsInGrid(true);
3 paul 582
}
583
 
291 Franz 584
void Biblio::ItemRenamed(QIconViewItem *ite)
585
{
4735 fschmid 586
/*      if (!activeBView->canWrite)
587
                return; */
588
// Above code is commented out because QFileInfo::permissons does not work properly
291 Franz 589
        QString ObjData;
590
        QPixmap ObjPreview;
4643 fschmid 591
        disconnect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
291 Franz 592
        if (OldName != ite->text())
593
        {
4643 fschmid 594
                if (activeBView->objectMap.contains(ite->text()))
291 Franz 595
                {
3510 cbradney 596
                        QMessageBox::warning(this, CommonStrings::trWarning, tr("Name \"%1\" is not unique.\nPlease choose another.").arg(ite->text()), CommonStrings::tr_OK);
291 Franz 597
                        ite->setText(OldName);
598
                }
599
                else
600
                {
4643 fschmid 601
                        ObjData = activeBView->objectMap[OldName].Data;
602
                        ObjPreview = activeBView->objectMap[OldName].Preview;
4611 fschmid 603
                        QDir d = QDir();
4643 fschmid 604
                        d.rename(ObjData, QDir::cleanDirPath(QDir::convertSeparators(activeBView->ScFilename + "/" + ite->text() + ".sce")));
4649 fschmid 605
                        QFileInfo fi(QDir::convertSeparators(activeBView->ScFilename + "/" + OldName + ".png"));
606
                        if (fi.exists())
607
                                d.rename(QDir::convertSeparators(activeBView->ScFilename + "/" + OldName + ".png"), QDir::cleanDirPath(QDir::convertSeparators(activeBView->ScFilename + "/" + ite->text() + ".png")));
4643 fschmid 608
                        activeBView->objectMap.remove(OldName);
609
                        activeBView->AddObj(ite->text(), QDir::cleanDirPath(QDir::convertSeparators(activeBView->ScFilename + "/" + ite->text() + ".sce")), ObjPreview);
610
                        activeBView->sort(activeBView->sortDirection());
611
                        activeBView->arrangeItemsInGrid(true);
291 Franz 612
                }
613
        }
4643 fschmid 614
        connect(activeBView, SIGNAL(itemRenamed(QIconViewItem*)), this, SLOT(ItemRenamed(QIconViewItem*)));
291 Franz 615
}
616
 
3 paul 617
void Biblio::DropOn(QDropEvent *e)
618
{
619
        QString text, tmp, nam;
620
        bool img;
621
        tmp = "";
622
        if (QTextDrag::decode(e, text))
248 Franz 623
        {
3 paul 624
                QUrl ur(text);
625
                QFileInfo fi = QFileInfo(ur.path());
626
                QString ext = fi.extension(false).lower();
627
                img = ((ext=="eps")||(ext=="ps")||(ext=="png")||(ext=="gif")||(ext=="jpg")||(ext=="xpm"));
628
                if ((fi.exists()) && (!img))
248 Franz 629
                {
630
                        if (loadText(ur.path(), &text))
3 paul 631
                        {
248 Franz 632
                                if (text.startsWith("<SCRIBUSELEM>"))
3 paul 633
                                {
634
                                        tmp = text;
248 Franz 635
                                }
3 paul 636
                        }
248 Franz 637
                }
3 paul 638
                else
248 Franz 639
                {
640
                        if (text.startsWith("<SCRIBUSELEM>"))
3 paul 641
                        {
642
                                tmp = text;
248 Franz 643
                        }
644
                }
3 paul 645
                ObjFromMenu(text);
248 Franz 646
        }
3 paul 647
}
648
 
649
void Biblio::ObjFromMenu(QString text)
650
{
651
        QString nam, tmp;
4735 fschmid 652
/*      if (!activeBView->canWrite)
653
                return; */
654
// Above code is commented out because QFileInfo::permissons does not work properly
4643 fschmid 655
        nam = tr("Object") + tmp.setNum(activeBView->objectMap.count());
348 Franz 656
        Query *dia = new Query(this, "tt", 1, 0, tr("&Name:"), tr("New Entry"));
702 cbradney 657
        dia->setEditText(nam, true);
248 Franz 658
        if (dia->exec())
659
        {
702 cbradney 660
                nam = dia->getEditText();
4643 fschmid 661
                while (activeBView->objectMap.contains(nam))
248 Franz 662
                {
663
                        if (!dia->exec())
664
                        {
665
                                delete dia;
666
                                return;
667
                        }
702 cbradney 668
                        nam = dia->getEditText();
248 Franz 669
                }
670
        }
671
        else
672
        {
673
                delete dia;
674
                return;
675
        }
676
        delete dia;
3 paul 677
        tmp = text;
678
        QString ff = "";
5057 tsoots 679
        // these were corrupting the encoding, by removing it should be now ok, we'll see, Riku
680
//      if (tmp.startsWith("<SCRIBUSELEMUTF8"))
681
//              ff = QString::fromUtf8(tmp);
682
//      else
3 paul 683
                ff = tmp;
4643 fschmid 684
        QFile f(QDir::cleanDirPath(QDir::convertSeparators(activeBView->ScFilename + "/" + nam + ".sce")));
4611 fschmid 685
        if(!f.open(IO_WriteOnly))
686
                return ;
5057 tsoots 687
        QTextStream s;
688
        s.setEncoding(QTextStream::UnicodeUTF8);
689
        s.setDevice(&f);
4611 fschmid 690
        s.writeRawBytes(ff, ff.length());
691
        f.close();
2834 cbradney 692
        ScPreview *pre = new ScPreview();
30 Franz 693
        QPixmap pm = pre->createPreview(ff);
4643 fschmid 694
        activeBView->AddObj(nam, QDir::cleanDirPath(QDir::convertSeparators(activeBView->ScFilename + "/" + nam + ".sce")), pm);
4649 fschmid 695
        pm.save(QDir::cleanDirPath(QDir::convertSeparators(activeBView->ScFilename + "/" + nam +".png")), "PNG");
4643 fschmid 696
        (void) new QIconViewItem(activeBView, nam, pm);
30 Franz 697
        delete pre;
3 paul 698
}
2191 cbradney 699
 
5760 fschmid 700
void Biblio::ObjFromCopyAction(QString text)
701
{
702
        QString nam, tmp;
703
        nam = tr("Object") + tmp.setNum(tempBView->objectMap.count());
704
        QString ff = text;
705
        QFile f(QDir::cleanDirPath(QDir::convertSeparators(tempBView->ScFilename + "/" + nam + ".sce")));
706
        if(!f.open(IO_WriteOnly))
707
                return ;
708
        QTextStream s;
709
        s.setEncoding(QTextStream::UnicodeUTF8);
710
        s.setDevice(&f);
711
        s.writeRawBytes(ff, ff.length());
712
        f.close();
713
        ScPreview *pre = new ScPreview();
714
        QPixmap pm = pre->createPreview(ff);
715
        tempBView->AddObj(nam, QDir::cleanDirPath(QDir::convertSeparators(activeBView->ScFilename + "/" + nam + ".sce")), pm);
716
        pm.save(QDir::cleanDirPath(QDir::convertSeparators(tempBView->ScFilename + "/" + nam +".png")), "PNG");
717
        (void) new QIconViewItem(tempBView, nam, pm);
718
        delete pre;
719
}
720
 
721
void Biblio::CleanUpTemp()
722
{
723
        QMap<QString,BibView::Elem>::Iterator it;
724
        for (it = tempBView->objectMap.begin(); it != tempBView->objectMap.end(); ++it)
725
        {
726
                QFile f(it.data().Data);
727
                f.remove();
728
                QFileInfo fi(QDir::convertSeparators(tempBView->ScFilename + "/" + it.key() + ".png"));
729
                if (fi.exists())
730
                {
731
                        QFile f2(QDir::convertSeparators(tempBView->ScFilename + "/" + it.key() + ".png"));
732
                        f2.remove();
733
                }
734
        }
735
}
736
 
2191 cbradney 737
void Biblio::languageChange()
738
{
739
        setCaption( tr( "Scrapbook" ) );
5358 cbradney 740
//      menuBar->changeItem( mFile, tr("&File"));
741
//      menuBar->changeItem( mView, tr("&Preview"));
742
// 
743
//      fmenu->changeItem(fNew, tr("&New"));
744
//      fmenu->changeItem(fLoad, tr("&Load..."));
745
//      fmenu->changeItem(fSaveAs, tr("Save &As..."));
746
//      fmenu->changeItem(fClose, tr("&Close"));
747
//      fmenu->changeItem(fImport, tr("&Import Scrapbook File..."));
748
 
749
        QToolTip::add( newButton, tr( "Create a new scrapbook page" ) );
750
        QToolTip::add( loadButton, tr( "Load an existing scrapbook" ) );
751
        QToolTip::add( saveAsButton, tr( "Save the selected scrapbook" ) );
752
        QToolTip::add( importButton, tr( "Import an scrapbook file from Scribus <=1.3.2" ) );
753
        QToolTip::add( closeButton, tr( "Close the selected scrapbook" ) );
2191 cbradney 754
}