summaryrefslogtreecommitdiffstats
path: root/scribus/scrapbookpalette.cpp
diff options
context:
space:
mode:
authorcraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
committercraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
commit7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch)
tree4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/scrapbookpalette.cpp
downloadscribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.gz
scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.xz
scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.zip
Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/scrapbookpalette.cpp')
-rw-r--r--scribus/scrapbookpalette.cpp1530
1 files changed, 1530 insertions, 0 deletions
diff --git a/scribus/scrapbookpalette.cpp b/scribus/scrapbookpalette.cpp
new file mode 100644
index 0000000..cbc04bd
--- /dev/null
+++ b/scribus/scrapbookpalette.cpp
@@ -0,0 +1,1530 @@
+/*
+For general Scribus (>=1.3.2) copyright and licensing information please refer
+to the COPYING file provided with the program. Following this notice may exist
+a copyright and/or license notice that predates the release of Scribus 1.3.2
+for which a new license (GPL+exception) is in place.
+*/
+/****************************************************************************
+** Form implementation generated from reading ui file 'Bib.ui'
+**
+** Created: Sun Oct 14 19:47:56 2001
+**
+****************************************************************************/
+#include "scrapbookpalette.h"
+
+#include <QEvent>
+#include <QDataStream>
+#include <QApplication>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QSpacerItem>
+#include <QKeyEvent>
+#include <QByteArray>
+#include <QPixmap>
+#include <QFileDialog>
+#include <QUrl>
+#include <QDropEvent>
+#include <QMenu>
+#include <QAction>
+#include <QSignalMapper>
+#include <QFile>
+#include <QFileInfo>
+#include <QDomDocument>
+#include <QToolButton>
+#include <QCursor>
+#include <QToolBox>
+#include <QMessageBox>
+#include <QToolTip>
+#include <QPainter>
+
+#include "commonstrings.h"
+#include "prefsfile.h"
+#include "prefsmanager.h"
+#include "query.h"
+#include "scpreview.h"
+#include "stencilreader.h"
+#include "util.h"
+#include "util_file.h"
+#include "util_icon.h"
+//CB TODO bring in the prefsManager instance locally here too
+
+/* The Scrapbook View Class
+ * inherited from QListWidget */
+BibView::BibView(QWidget* parent) : QListWidget(parent)
+{
+ setDragEnabled(true);
+ setViewMode(QListView::IconMode);
+ setFlow(QListView::LeftToRight);
+ setSortingEnabled(true);
+ setWrapping(true);
+ setAcceptDrops(true);
+ setDropIndicatorShown(true);
+ setDragDropMode(QAbstractItemView::DragDrop);
+ setResizeMode(QListView::Adjust);
+ setSelectionMode(QAbstractItemView::SingleSelection);
+ setContextMenuPolicy(Qt::CustomContextMenu);
+ setIconSize(QSize(60, 60));
+ objectMap.clear();
+ ScFilename = "";
+ visibleName = "";
+ canWrite = true;
+}
+
+ void BibView::startDrag(Qt::DropActions supportedActions)
+ {
+ QString dt = objectMap[currentItem()->text()].Data;
+ QFileInfo fi(dt);
+ if (fi.suffix().toLower() == "sml")
+ {
+ QByteArray cf;
+ loadRawText(dt, cf);
+ QString f = QString::fromUtf8(cf.data());
+ StencilReader *pre = new StencilReader();
+ dt = pre->createObjects(f);
+ delete pre;
+ }
+ else if (fi.suffix().toLower() == "shape")
+ {
+ QByteArray cf;
+ loadRawText(dt, cf);
+ QString f = QString::fromUtf8(cf.data());
+ StencilReader *pre = new StencilReader();
+ dt = pre->createShape(f);
+ delete pre;
+ }
+ else if (fi.suffix().toLower() == "sce")
+ {
+ if ( fi.exists() )
+ {
+ QUrl ur = QUrl::fromLocalFile(dt);
+ dt = ur.toString();
+ }
+ }
+ QMimeData *mimeData = new QMimeData;
+ mimeData->setText(dt);
+ QDrag *drag = new QDrag(this);
+ drag->setMimeData(mimeData);
+ drag->setDragCursor(objectMap[currentItem()->text()].Preview, Qt::CopyAction);
+ drag->exec(Qt::CopyAction);
+ clearSelection();
+ }
+
+void BibView::dragEnterEvent(QDragEnterEvent *e)
+{
+ if (e->source() == this)
+ e->ignore();
+ else
+ e->acceptProposedAction();
+}
+
+void BibView::dragMoveEvent(QDragMoveEvent *e)
+{
+ if (e->source() == this)
+ e->ignore();
+ else
+ e->acceptProposedAction();
+}
+
+void BibView::dropEvent(QDropEvent *e)
+{
+ if (e->mimeData()->hasText())
+ {
+ e->acceptProposedAction();
+ if (e->source() == this)
+ return;
+ QString nam, tmp = "";
+ QString text = e->mimeData()->text();
+ int startElemPos = text.left(512).indexOf("<SCRIBUSELEM");
+ if (startElemPos >= 0)
+ emit objDropped(text);
+ }
+ else
+ e->ignore();
+}
+
+void BibView::AddObj(QString name, QString daten, QPixmap Bild)
+{
+ struct Elem DrElem;
+ DrElem.Data = daten;
+ DrElem.Preview = Bild;
+ objectMap.insert(name, DrElem);
+}
+
+void BibView::checkAndChange(QString &text, QString nam, QString dir)
+{
+ QDomDocument docu("scridoc");
+ docu.setContent(text);
+ QDomElement elem = docu.documentElement();
+ QDomNode DOC = elem.firstChild();
+ bool hasImage = false;
+ while(!DOC.isNull())
+ {
+ QDomElement pg = DOC.toElement();
+ if(pg.tagName() == "ITEM")
+ {
+ PageItem::ItemType PType = static_cast<PageItem::ItemType>(pg.attribute("PTYPE").toInt());
+ if ((PType == PageItem::ImageFrame) || (PType == PageItem::TextFrame))
+ {
+ QString Pfile = pg.attribute("PFILE");
+ QString Pfile2 = pg.attribute("PFILE2","");
+ QString Pfile3 = pg.attribute("PFILE3","");
+ if (!Pfile.isEmpty())
+ hasImage = true;
+ if (!Pfile2.isEmpty())
+ hasImage = true;
+ if (!Pfile3.isEmpty())
+ hasImage = true;
+ }
+ }
+ DOC = DOC.nextSibling();
+ }
+ QFileInfo fid(nam);
+ if (hasImage)
+ {
+ QDir dd = QDir(dir);
+ dd.mkdir(QDir::cleanPath(QDir::toNativeSeparators(dir + "/" + fid.baseName())));
+ }
+ QString source = "";
+ QString target = "";
+ bool first = true;
+ DOC = elem.firstChild();
+ while(!DOC.isNull())
+ {
+ QDomElement pg = DOC.toElement();
+ if(pg.tagName() == "ITEM")
+ {
+ if (first)
+ pg.setAttribute("ANNAME", fid.baseName());
+ first = false;
+ PageItem::ItemType PType = static_cast<PageItem::ItemType>(pg.attribute("PTYPE").toInt());
+ if ((PType == PageItem::ImageFrame) || (PType == PageItem::TextFrame))
+ {
+ QString Pfile = pg.attribute("PFILE");
+ if (!Pfile.isEmpty())
+ {
+ if (static_cast<bool>(pg.attribute("relativePaths", "0").toInt()))
+ {
+ QFileInfo pfi2(QDir::cleanPath(QDir::toNativeSeparators(dir+"/"+Pfile)));
+ source = pfi2.absoluteFilePath();
+ }
+ else
+ {
+ QFileInfo fi(Pfile);
+ source = QDir::cleanPath(QDir::toNativeSeparators(QDir::homePath()+"/"+Pfile));
+ }
+ QFileInfo fi(Pfile);
+ QString target = QDir::cleanPath(QDir::toNativeSeparators(dir + "/" + fid.baseName() + "/" + fi.fileName()));
+ copyFile(source, target);
+ pg.setAttribute("PFILE", fid.baseName() + "/" + fi.fileName());
+ }
+ QString Pfile2 = pg.attribute("PFILE2","");
+ if (!Pfile2.isEmpty())
+ {
+ if (static_cast<bool>(pg.attribute("relativePaths", "0").toInt()))
+ {
+ QFileInfo pfi2(QDir::cleanPath(QDir::toNativeSeparators(dir+"/"+Pfile2)));
+ source = pfi2.absoluteFilePath();
+ }
+ else
+ {
+ QFileInfo fi(Pfile2);
+ source = QDir::cleanPath(QDir::toNativeSeparators(QDir::homePath()+"/"+Pfile));
+ }
+ QFileInfo fi(Pfile2);
+ QString target = QDir::cleanPath(QDir::toNativeSeparators(dir + "/" + fid.baseName() + "/" + fi.fileName()));
+ copyFile(source, target);
+ pg.setAttribute("PFILE2", fid.baseName() + "/" + fi.fileName());
+ }
+ QString Pfile3 = pg.attribute("PFILE3","");
+ if (!Pfile3.isEmpty())
+ {
+ if (static_cast<bool>(pg.attribute("relativePaths", "0").toInt()))
+ {
+ QFileInfo pfi2(QDir::cleanPath(QDir::toNativeSeparators(dir+"/"+Pfile3)));
+ source = pfi2.absoluteFilePath();
+ }
+ else
+ {
+ QFileInfo fi(Pfile3);
+ source = QDir::cleanPath(QDir::toNativeSeparators(QDir::homePath()+"/"+Pfile3));
+ }
+ QFileInfo fi(Pfile3);
+ QString target = QDir::cleanPath(QDir::toNativeSeparators(dir + "/" + fid.baseName() + "/" + fi.fileName()));
+ copyFile(source, target);
+ pg.setAttribute("PFILE3", fid.baseName() + "/" + fi.fileName());
+ }
+ pg.setAttribute("relativePaths", 1);
+ }
+ }
+ DOC = DOC.nextSibling();
+ }
+ QFile f(nam);
+ if(!f.open(QIODevice::WriteOnly))
+ return ;
+ QDataStream s;
+ QByteArray cs = docu.toByteArray();
+ s.setDevice(&f);
+ s.writeRawData(cs.data(), cs.length());
+ f.close();
+}
+
+void BibView::SaveContents(QString name, QString oldName)
+{
+ QDir d(oldName, "*.sce", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d.exists()) && (d.count() != 0))
+ {
+ for (uint dc = 0; dc < d.count(); ++dc)
+ {
+ QByteArray cf;
+ if (!loadRawText(QDir::cleanPath(QDir::toNativeSeparators(oldName + "/" + d[dc])), cf))
+ continue;
+ QString ff = QString::fromUtf8(cf.data());
+ QPixmap pm;
+ QFileInfo fi(QDir::cleanPath(QDir::toNativeSeparators(oldName + "/" + d[dc])));
+ QFileInfo fi2(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ if (fi2.exists())
+ pm.load(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ else
+ {
+ QString f;
+ if (cf.left(16) == "<SCRIBUSELEMUTF8")
+ f = QString::fromUtf8(cf.data());
+ else
+ f = cf.data();
+ ScPreview *pre = new ScPreview();
+ pm = pre->createPreview(f);
+ delete pre;
+ }
+ QFileInfo fi3(QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d[dc])));
+ pm.save(QDir::cleanPath(QDir::toNativeSeparators(fi3.path()+"/"+fi3.baseName()+".png")), "PNG");
+ checkAndChange(ff, QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d[dc])), QDir::cleanPath(QDir::toNativeSeparators(name)));
+ }
+ }
+ QDir d2(oldName, "*.sml", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d2.exists()) && (d2.count() != 0))
+ {
+ for (uint dc = 0; dc < d2.count(); ++dc)
+ {
+ QByteArray cf;
+ if (!loadRawText(QDir::cleanPath(QDir::toNativeSeparators(oldName + "/" + d2[dc])), cf))
+ continue;
+ QFile fil(QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d2[dc])));
+ if(!fil.open(QIODevice::WriteOnly))
+ continue ;
+ QDataStream s(&fil);
+ s.writeRawData(cf.data(), cf.length());
+ fil.close();
+ QPixmap pm;
+ QFileInfo fi(QDir::cleanPath(QDir::toNativeSeparators(oldName + "/" + d2[dc])));
+ QFileInfo fi2(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ if (fi2.exists())
+ pm.load(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ else
+ {
+ QString f = QString::fromUtf8(cf.data());
+ StencilReader *pre = new StencilReader();
+ pm = pre->createPreview(f);
+ delete pre;
+ }
+ QFileInfo fi3(QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d2[dc])));
+ pm.save(QDir::cleanPath(QDir::toNativeSeparators(fi3.path()+"/"+fi3.baseName()+".png")), "PNG");
+ }
+ }
+ QDir d3(name, "*.shape", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d3.exists()) && (d3.count() != 0))
+ {
+ for (uint dc = 0; dc < d3.count(); ++dc)
+ {
+ QByteArray cf;
+ if (!loadRawText(QDir::cleanPath(QDir::toNativeSeparators(oldName + "/" + d3[dc])), cf))
+ continue;
+ QFile fil(QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d3[dc])));
+ if(!fil.open(QIODevice::WriteOnly))
+ continue ;
+ QDataStream s(&fil);
+ s.writeRawData(cf.data(), cf.length());
+ fil.close();
+ QPixmap pm;
+ QFileInfo fi(QDir::cleanPath(QDir::toNativeSeparators(oldName + "/" + d3[dc])));
+ QFileInfo fi2(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ if (fi2.exists())
+ pm.load(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ else
+ {
+ QString f = QString::fromUtf8(cf.data());
+ StencilReader *pre = new StencilReader();
+ QString f2 = pre->createShape(f);
+ ScPreview *pre2 = new ScPreview();
+ pm = pre2->createPreview(f2);
+ delete pre;
+ delete pre2;
+ }
+ QFileInfo fi3(QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d3[dc])));
+ pm.save(QDir::cleanPath(QDir::toNativeSeparators(fi3.path()+"/"+fi3.baseName()+".png")), "PNG");
+ }
+ }
+}
+
+void BibView::ReadOldContents(QString name, QString newName)
+{
+ bool isUtf8 = false;
+ QDomDocument docu("scridoc");
+ QString ff;
+ QByteArray cf;
+ if (!loadRawText(name, cf))
+ return;
+ if( cf.left(17) == "<SCRIBUSSCRAPUTF8")
+ {
+ ff = QString::fromUtf8(cf.data());
+ isUtf8 = true;
+ }
+ else
+ ff = QString::fromLocal8Bit(cf.data());
+ if(!docu.setContent(ff))
+ return;
+ QDomElement elem=docu.documentElement();
+ if ((elem.tagName() != "SCRIBUSSCRAP") && (elem.tagName() != "SCRIBUSSCRAPUTF8"))
+ return;
+ QDomNode DOC=elem.firstChild();
+ while(!DOC.isNull())
+ {
+ QDomElement dc=DOC.toElement();
+ if (dc.tagName()=="OBJEKT")
+ {
+ QFile fi(QDir::cleanPath(QDir::toNativeSeparators(newName + "/" + GetAttr(&dc, "NAME") + ".sce")));
+ if(!fi.open(QIODevice::WriteOnly))
+ continue ;
+ QDataStream s(&fi);
+ QString fn = GetAttr(&dc, "DATA");
+ cf = isUtf8? fn.toUtf8() : fn.toLocal8Bit();
+ s.writeRawData(cf.data(), cf.length());
+ fi.close();
+ }
+ DOC=DOC.nextSibling();
+ }
+}
+
+void BibView::ReadContents(QString name)
+{
+ clear();
+ objectMap.clear();
+ QString nd;
+ if (name.endsWith(QDir::toNativeSeparators("/")))
+ nd = name.left(name.length()-1);
+ QDir d(name, "*.sce", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d.exists()) && (d.count() != 0))
+ {
+ for (uint dc = 0; dc < d.count(); ++dc)
+ {
+ QPixmap pm;
+ QByteArray cf;
+ if (!loadRawText(QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d[dc])), cf))
+ continue;
+ QFileInfo fi(QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d[dc])));
+ QFileInfo fi2(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ if (fi2.exists())
+ pm.load(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ else
+ {
+ QString f;
+ if (cf.left(16) == "<SCRIBUSELEMUTF8")
+ f = QString::fromUtf8(cf.data());
+ else
+ f = cf.data();
+ ScPreview *pre = new ScPreview();
+ pm = pre->createPreview(f);
+ if (canWrite)
+ pm.save(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")), "PNG");
+ delete pre;
+ }
+ AddObj(fi.baseName(), QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d[dc])), pm);
+ }
+ }
+ QDir d2(name, "*.sml", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d2.exists()) && (d2.count() != 0))
+ {
+ for (uint dc = 0; dc < d2.count(); ++dc)
+ {
+ QPixmap pm;
+ QByteArray cf;
+ if (!loadRawText(QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d2[dc])), cf))
+ continue;
+ QFileInfo fi(QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d2[dc])));
+ QFileInfo fi2(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ if (fi2.exists())
+ pm.load(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ else
+ {
+ QString f = QString::fromUtf8(cf.data());
+ StencilReader *pre = new StencilReader();
+ pm = pre->createPreview(f);
+ if (canWrite)
+ pm.save(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")), "PNG");
+ delete pre;
+ }
+ AddObj(fi.baseName(), QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d2[dc])), pm);
+ }
+ }
+ QDir d3(name, "*.shape", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d3.exists()) && (d3.count() != 0))
+ {
+ for (uint dc = 0; dc < d3.count(); ++dc)
+ {
+ QPixmap pm;
+ QByteArray cf;
+ if (!loadRawText(QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d3[dc])), cf))
+ continue;
+ QFileInfo fi(QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d3[dc])));
+ QFileInfo fi2(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ QFileInfo fi2p(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".xpm")));
+ if ((fi2.exists()) || (fi2p.exists()))
+ {
+ if (fi2.exists())
+ pm.load(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")));
+ else
+ pm.load(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".xpm")));
+ }
+ else
+ {
+ QString f = QString::fromUtf8(cf.data());
+ StencilReader *pre = new StencilReader();
+ QString f2 = pre->createShape(f);
+ ScPreview *pre2 = new ScPreview();
+ pm = pre2->createPreview(f2);
+ if (canWrite)
+ pm.save(QDir::cleanPath(QDir::toNativeSeparators(fi.path()+"/"+fi.baseName()+".png")), "PNG");
+ delete pre;
+ delete pre2;
+ }
+ AddObj(fi.baseName(), QDir::cleanPath(QDir::toNativeSeparators(name + "/" + d3[dc])), pm);
+ }
+ }
+ QMap<QString,Elem>::Iterator itf;
+ for (itf = objectMap.begin(); itf != objectMap.end(); ++itf)
+ {
+ if (itf.value().Preview.width() > 60)
+ itf.value().Preview = itf.value().Preview.scaledToWidth(60, Qt::SmoothTransformation);
+ if (itf.value().Preview.height() > 60)
+ itf.value().Preview = itf.value().Preview.scaledToHeight(60, Qt::SmoothTransformation);
+ QPixmap pm(60, 60);
+ pm.fill(palette().color(QPalette::Base));
+ QPainter p;
+ p.begin(&pm);
+ p.drawPixmap(30 - itf.value().Preview.width() / 2, 30 - itf.value().Preview.height() / 2, itf.value().Preview);
+ p.end();
+ new QListWidgetItem(QIcon(pm), itf.key(), this);
+ }
+ sortItems();
+}
+
+/* This is the main Dialog-Class for the Scrapbook */
+Biblio::Biblio( QWidget* parent) : ScrPaletteBase( parent, "Sclib", false, 0 )
+{
+ resize( 230, 190 );
+ BiblioLayout = new QVBoxLayout( this );
+ BiblioLayout->setSpacing( 0 );
+ BiblioLayout->setMargin( 0 );
+
+ buttonLayout = new QHBoxLayout;
+ buttonLayout->setSpacing( 5 );
+ buttonLayout->setMargin( 0 );
+ newButton = new QToolButton(this);
+ newButton->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ newButton->setIcon(loadIcon("16/document-new.png"));
+ newButton->setIconSize(QSize(16, 16));
+ loadButton = new QToolButton(this);
+ loadButton->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ loadButton->setIcon(loadIcon("16/document-open.png"));
+ loadButton->setIconSize(QSize(16, 16));
+ saveAsButton = new QToolButton(this);
+ saveAsButton->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ saveAsButton->setIcon(loadIcon("16/document-save-as.png"));
+ saveAsButton->setIconSize(QSize(16, 16));
+ importButton = new QToolButton(this);
+ importButton->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ importButton->setIcon(loadIcon("compfile16.png"));
+ importButton->setIconSize(QSize(16, 16));
+ closeButton = new QToolButton(this);
+ closeButton->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ closeButton->setIcon(loadIcon("16/close.png"));
+ closeButton->setIconSize(QSize(16, 16));
+ buttonLayout->addWidget( newButton );
+ buttonLayout->addWidget( loadButton );
+ buttonLayout->addWidget( saveAsButton );
+ buttonLayout->addWidget( importButton );
+ buttonLayout->addWidget( closeButton );
+ QSpacerItem* spacer = new QSpacerItem( 1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ buttonLayout->addItem( spacer );
+ BiblioLayout->addLayout( buttonLayout );
+
+ Frame3 = new QToolBox( this );
+ activeBView = new BibView(this);
+ Frame3->addItem(activeBView, tr("Main"));
+ activeBView->visibleName = tr("Main");
+ tempBView = new BibView(this);
+ Frame3->addItem(tempBView, tr("Copied Items"));
+ tempBView->visibleName = tr("Copied Items");
+ tempCount = 0;
+ actItem = 0;
+ BiblioLayout->addWidget( Frame3 );
+
+ languageChange();
+
+ connect(newButton, SIGNAL(clicked()), this, SLOT(NewLib()));
+ connect(loadButton, SIGNAL(clicked()), this, SLOT(Load()));
+ connect(saveAsButton, SIGNAL(clicked()), this, SLOT(SaveAs()));
+ connect(importButton, SIGNAL(clicked()), this, SLOT(Import()));
+ connect(closeButton, SIGNAL(clicked()), this, SLOT(closeLib()));
+ connect(Frame3, SIGNAL(currentChanged(int)), this, SLOT(libChanged(int )));
+}
+
+void Biblio::setOpenScrapbooks(QStringList &fileNames)
+{
+ disconnect(activeBView, SIGNAL(objDropped(QString)), this, SLOT(ObjFromMenu(QString)));
+ disconnect(activeBView, SIGNAL(customContextMenuRequested (const QPoint &)), this, SLOT(HandleMouse(QPoint)));
+ disconnect(activeBView, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(handleDoubleClick(QListWidgetItem *)));
+ disconnect(Frame3, SIGNAL(currentChanged(int)), this, SLOT(libChanged(int )));
+ for (int rd = 0; rd < fileNames.count(); ++rd)
+ {
+ QString fileName = fileNames[rd];
+ if (!fileName.isEmpty())
+ {
+ QDir d(fileName);
+ activeBView = new BibView(this);
+ QFileInfo fd(fileName);
+ activeBView->canWrite = fd.isWritable();
+ activeBView->setAcceptDrops(activeBView->canWrite);
+ if (activeBView->canWrite)
+ Frame3->addItem(activeBView, d.dirName());
+ else
+ Frame3->addItem(activeBView, QIcon(loadIcon("16/lock.png")), d.dirName());
+ activeBView->ReadContents(fileName);
+ activeBView->ScFilename = fileName;
+ activeBView->visibleName = d.dirName();
+ activeBView->scrollToTop();
+ }
+ }
+ activeBView = (BibView*)Frame3->widget(0);
+ Frame3->setCurrentIndex(0);
+ connect(Frame3, SIGNAL(currentChanged(int)), this, SLOT(libChanged(int )));
+ connect(activeBView, SIGNAL(objDropped(QString)), this, SLOT(ObjFromMenu(QString)));
+ connect(activeBView, SIGNAL(customContextMenuRequested (const QPoint &)), this, SLOT(HandleMouse(QPoint)));
+ connect(activeBView, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(handleDoubleClick(QListWidgetItem *)));
+}
+
+QStringList Biblio::getOpenScrapbooks()
+{
+ QStringList ret;
+ ret.clear();
+ if (Frame3->count() > 2) // omit the first 2 Tabs since they contain the main and temp scrapbook
+ {
+ for (int a = 2; a < Frame3->count(); a++)
+ {
+ BibView* bv = (BibView*)Frame3->widget(a);
+ ret.append(bv->ScFilename);
+ }
+ }
+ return ret;
+}
+
+void Biblio::setScrapbookFileName(QString fileName)
+{
+ activeBView->ScFilename=fileName;
+}
+
+const QString Biblio::getScrapbookFileName()
+{
+ return activeBView->ScFilename;
+}
+
+const int Biblio::objectCount()
+{
+ return activeBView->objectMap.count();
+}
+
+void Biblio::readOldContents(QString fileName, QString newName)
+{
+ activeBView->ReadOldContents(fileName, newName);
+ activeBView->scrollToTop();
+}
+
+void Biblio::readContents(QString fileName)
+{
+ activeBView->ReadContents(fileName);
+}
+
+void Biblio::readTempContents(QString fileName)
+{
+ tempBView->ReadContents(fileName);
+ tempBView->ScFilename = fileName;
+ tempCount = tempBView->objectMap.count();
+}
+
+void Biblio::installEventFilter(QObject *filterObj)
+{
+ ScrPaletteBase::installEventFilter(filterObj);
+ activeBView->installEventFilter(filterObj);
+ tempBView->installEventFilter(filterObj);
+}
+
+void Biblio::NewLib()
+{
+ PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
+ QString fileName = QFileDialog::getExistingDirectory(this, tr("Choose a Scrapbook Directory"), dirs->get("scrap_load", "."));
+ if (!fileName.isEmpty())
+ {
+ for (int a = 0; a < Frame3->count(); a++)
+ {
+ BibView* bv = (BibView*)Frame3->widget(a);
+ if (fileName == bv->ScFilename)
+ return;
+ }
+ disconnect(activeBView, SIGNAL(objDropped(QString)), this, SLOT(ObjFromMenu(QString)));
+ disconnect(activeBView, SIGNAL(customContextMenuRequested (const QPoint &)), this, SLOT(HandleMouse(QPoint)));
+ disconnect(activeBView, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(handleDoubleClick(QListWidgetItem *)));
+ disconnect(Frame3, SIGNAL(currentChanged(int)), this, SLOT(libChanged(int )));
+ QDir d(fileName);
+ activeBView = new BibView(this);
+ QFileInfo fd(fileName);
+ activeBView->canWrite = fd.isWritable();
+ activeBView->setAcceptDrops(activeBView->canWrite);
+ if (activeBView->canWrite)
+ Frame3->addItem(activeBView, d.dirName());
+ else
+ Frame3->addItem(activeBView, QIcon(loadIcon("16/lock.png")), d.dirName());
+ activeBView->ReadContents(fileName);
+ activeBView->ScFilename = fileName;
+ Frame3->setCurrentWidget(activeBView);
+ d.cdUp();
+ dirs->set("scrap_load", d.absolutePath());
+ activeBView->scrollToTop();
+ connect(Frame3, SIGNAL(currentChanged(int)), this, SLOT(libChanged(int )));
+ connect(activeBView, SIGNAL(objDropped(QString)), this, SLOT(ObjFromMenu(QString)));
+ connect(activeBView, SIGNAL(customContextMenuRequested (const QPoint &)), this, SLOT(HandleMouse(QPoint)));
+ connect(activeBView, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(handleDoubleClick(QListWidgetItem *)));
+ }
+}
+
+void Biblio::Load()
+{
+ PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
+ QString fileName = QFileDialog::getExistingDirectory(this, tr("Choose a Scrapbook Directory"), dirs->get("scrap_load", "."));
+ if (!fileName.isEmpty())
+ {
+ for (int a = 0; a < Frame3->count(); a++)
+ {
+ BibView* bv = (BibView*)Frame3->widget(a);
+ if (fileName == bv->ScFilename)
+ return;
+ }
+ disconnect(activeBView, SIGNAL(objDropped(QString)), this, SLOT(ObjFromMenu(QString)));
+ disconnect(activeBView, SIGNAL(customContextMenuRequested (const QPoint &)), this, SLOT(HandleMouse(QPoint)));
+ disconnect(activeBView, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(handleDoubleClick(QListWidgetItem *)));
+ disconnect(Frame3, SIGNAL(currentChanged(int)), this, SLOT(libChanged(int )));
+ QDir d(fileName);
+ activeBView = new BibView(this);
+ QFileInfo fd(fileName);
+ activeBView->canWrite = fd.isWritable();
+ activeBView->setAcceptDrops(activeBView->canWrite);
+ if (activeBView->canWrite)
+ Frame3->addItem(activeBView, d.dirName());
+ else
+ Frame3->addItem(activeBView, QIcon(loadIcon("16/lock.png")), d.dirName());
+ activeBView->ReadContents(fileName);
+ activeBView->ScFilename = fileName;
+ activeBView->visibleName = d.dirName();
+ Frame3->setCurrentWidget(activeBView);
+ d.cdUp();
+ dirs->set("scrap_load", d.absolutePath());
+ activeBView->scrollToTop();
+ connect(Frame3, SIGNAL(currentChanged(int)), this, SLOT(libChanged(int )));
+ connect(activeBView, SIGNAL(objDropped(QString)), this, SLOT(ObjFromMenu(QString)));
+ connect(activeBView, SIGNAL(customContextMenuRequested (const QPoint &)), this, SLOT(HandleMouse(QPoint)));
+ connect(activeBView, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(handleDoubleClick(QListWidgetItem *)));
+ }
+}
+
+void Biblio::Import()
+{
+ PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
+ QString s = QFileDialog::getOpenFileName(this,
+ tr("Choose a scrapbook file to import"),
+ dirs->get("old_scrap_load", "."),
+ tr("Scrapbook (*.scs *.SCS)"));
+
+ if (!s.isEmpty())
+ {
+ dirs->set("old_scrap_load", s.left(s.lastIndexOf(QDir::toNativeSeparators("/"))));
+
+ QString scrapbookFileO = s;
+ QFileInfo scrapbookFileInfoO = QFileInfo(scrapbookFileO);
+ if (scrapbookFileInfoO.exists())
+ {
+ readOldContents(scrapbookFileO, activeBView->ScFilename);
+ readContents(activeBView->ScFilename);
+ }
+ activeBView->scrollToTop();
+ }
+}
+
+void Biblio::SaveAs()
+{
+ PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
+ QString fn = QFileDialog::getExistingDirectory(this, tr("Choose a Directory"), dirs->get("scrap_saveas", "."));
+ if (!fn.isEmpty())
+ {
+ for (int a = 0; a < Frame3->count(); a++)
+ {
+ BibView* bv = (BibView*)Frame3->widget(a);
+ if (fn == bv->ScFilename)
+ return;
+ }
+ QDir d(fn);
+ dirs->set("scrap_saveas", fn);
+ activeBView->SaveContents(fn, activeBView->ScFilename);
+ d.cdUp();
+ dirs->set("scrap_saveas", d.absolutePath());
+ }
+}
+
+void Biblio::closeLib()
+{
+ if (Frame3->count() == 2)
+ close();
+ if ((Frame3->currentIndex() == 0) || (Frame3->currentIndex() == 1))
+ return;
+ else
+ {
+ disconnect(activeBView, SIGNAL(objDropped(QString)), this, SLOT(ObjFromMenu(QString)));
+ disconnect(activeBView, SIGNAL(customContextMenuRequested (const QPoint &)), this, SLOT(HandleMouse(QPoint)));
+ disconnect(activeBView, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(handleDoubleClick(QListWidgetItem *)));
+ disconnect(Frame3, SIGNAL(currentChanged(int)), this, SLOT(libChanged(int )));
+ Frame3->removeItem(Frame3->indexOf(activeBView));
+ delete activeBView; // currently disabled as the whole TabWidget vanishes when executing that delete????? -> seems to be fixed in Qt-4.3.3
+ activeBView = (BibView*)Frame3->widget(0);
+ Frame3->setCurrentIndex(0);
+ connect(Frame3, SIGNAL(currentChanged(int)), this, SLOT(libChanged(int )));
+ connect(activeBView, SIGNAL(objDropped(QString)), this, SLOT(ObjFromMenu(QString)));
+ connect(activeBView, SIGNAL(customContextMenuRequested (const QPoint &)), this, SLOT(HandleMouse(QPoint)));
+ connect(activeBView, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(handleDoubleClick(QListWidgetItem *)));
+ }
+}
+
+void Biblio::libChanged(int index)
+{
+ disconnect(activeBView, SIGNAL(objDropped(QString)), this, SLOT(ObjFromMenu(QString)));
+ disconnect(activeBView, SIGNAL(customContextMenuRequested (const QPoint &)), this, SLOT(HandleMouse(QPoint)));
+ disconnect(activeBView, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(handleDoubleClick(QListWidgetItem *)));
+ activeBView = (BibView*)Frame3->widget(index);
+ connect(activeBView, SIGNAL(objDropped(QString)), this, SLOT(ObjFromMenu(QString)));
+ connect(activeBView, SIGNAL(customContextMenuRequested (const QPoint &)), this, SLOT(HandleMouse(QPoint)));
+ connect(activeBView, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(handleDoubleClick(QListWidgetItem *)));
+}
+
+void Biblio::handleDoubleClick(QListWidgetItem *ite)
+{
+ emit pasteToActualPage(ite->text());
+ activeBView->clearSelection();
+ actItem = 0;
+}
+
+void Biblio::handlePasteToPage()
+{
+ emit pasteToActualPage(actItem->text());
+ activeBView->clearSelection();
+ actItem = 0;
+}
+
+void Biblio::HandleMouse(QPoint p)
+{
+ QListWidgetItem *ite = activeBView->itemAt(p);
+ if (ite != 0)
+ {
+ actItem = ite;
+ QMenu *pmenu = new QMenu();
+ QAction* renAct;
+ QAction* delAct;
+ QAction* pasteAct = pmenu->addAction( tr("Paste to Page"));
+ connect(pasteAct, SIGNAL(triggered()), this, SLOT(handlePasteToPage()));
+ if (activeBView->canWrite)
+ {
+ renAct = pmenu->addAction( tr("Rename"));
+ connect(renAct, SIGNAL(triggered()), this, SLOT(renameObj()));
+ delAct = pmenu->addAction( tr("Delete"));
+ connect(delAct, SIGNAL(triggered()), this, SLOT(deleteObj()));
+ }
+ QSignalMapper *signalMapper = new QSignalMapper(this);
+ connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(copyObj(int)));
+ QMenu *pmenu2 = new QMenu( tr("Copy To:"));
+ QMenu *pmenu3 = new QMenu( tr("Move To:"));
+ QSignalMapper *signalMapper2 = new QSignalMapper(this);
+ connect(signalMapper2, SIGNAL(mapped(int)), this, SLOT(moveObj(int)));
+ for (int a = 0; a < Frame3->count(); a++)
+ {
+ BibView* bv = (BibView*)Frame3->widget(a);
+ if (bv != activeBView)
+ {
+ if (bv->canWrite)
+ {
+ QAction *action = pmenu2->addAction(Frame3->itemText(Frame3->indexOf(Frame3->widget(a))));
+ connect(action, SIGNAL(triggered()), signalMapper, SLOT(map()));
+ signalMapper->setMapping(action, a);
+ if (activeBView->canWrite)
+ {
+ QAction *action2 = pmenu3->addAction(Frame3->itemText(Frame3->indexOf(Frame3->widget(a))));
+ connect(action2, SIGNAL(triggered()), signalMapper2, SLOT(map()));
+ signalMapper2->setMapping(action2, a);
+ }
+ }
+ }
+ }
+ pmenu->addMenu(pmenu2);
+ if (activeBView->canWrite)
+ pmenu->addMenu(pmenu3);
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+ pmenu->exec(QCursor::pos());
+ delete pmenu;
+ delete pmenu2;
+ delete signalMapper;
+ if (activeBView->canWrite)
+ {
+ delete pmenu3;
+ delete signalMapper2;
+ }
+ }
+ else
+ {
+ QMenu *pmenu = new QMenu();
+ QAction* delAct;
+ QAction* saveAct;
+ QAction* closeAct;
+ if (activeBView->objectMap.count() != 0)
+ {
+ saveAct = pmenu->addAction( tr("Save as..."));
+ connect(saveAct, SIGNAL(triggered()), this, SLOT(SaveAs()));
+ }
+ closeAct = pmenu->addAction( tr("Close"));
+ if ((activeBView->canWrite) && (activeBView->objectMap.count() != 0))
+ {
+ delAct = pmenu->addAction( tr("Delete Contents"));
+ connect(delAct, SIGNAL(triggered()), this, SLOT(deleteAllObj()));
+ }
+ connect(closeAct, SIGNAL(triggered()), this, SLOT(closeLib()));
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+ pmenu->exec(QCursor::pos());
+ delete pmenu;
+ }
+ activeBView->clearSelection();
+ actItem = 0;
+}
+
+bool Biblio::copyObj(int id)
+{
+ QListWidgetItem *ite = actItem;
+ QString nam = ite->text();
+ BibView* bv = (BibView*)Frame3->widget(id);
+ if (bv->objectMap.contains(nam))
+ {
+ Query *dia = new Query(this, "tt", 1, 0, tr("&Name:"), tr("New Entry"));
+ dia->setEditText(nam, true);
+ if (dia->exec())
+ {
+ nam = dia->getEditText();
+ while (activeBView->objectMap.contains(nam))
+ {
+ if (!dia->exec())
+ {
+ delete dia;
+ return false;
+ }
+ nam = dia->getEditText();
+ }
+ }
+ else
+ {
+ delete dia;
+ return false;
+ }
+ }
+ QPixmap pm;
+ QByteArray cf;
+ if (!loadRawText(QDir::cleanPath(activeBView->objectMap[ite->text()].Data), cf))
+ return false;
+ pm = activeBView->objectMap[ite->text()].Preview;
+ QString dt = activeBView->objectMap[ite->text()].Data;
+ QFileInfo fi(dt);
+ QFile f(QDir::cleanPath(QDir::toNativeSeparators(bv->ScFilename + "/" + nam + "." + fi.completeSuffix().toLower())));
+ if(!f.open(QIODevice::WriteOnly))
+ return false;
+ QDataStream s;
+ s.setDevice(&f);
+ s.writeRawData(cf.data(), cf.length());
+ f.close();
+ bv->AddObj(nam, QDir::cleanPath(QDir::toNativeSeparators(bv->ScFilename + "/" + nam + "." + fi.completeSuffix().toLower())), pm);
+ pm.save(QDir::cleanPath(QDir::toNativeSeparators(bv->ScFilename + "/" + nam +".png")), "PNG");
+ QFileInfo fiD(QDir::toNativeSeparators(activeBView->ScFilename + "/" + fi.baseName()));
+ if ((fiD.exists()) && (fiD.isDir()))
+ {
+ QDir dd = QDir(QDir::cleanPath(QDir::toNativeSeparators(bv->ScFilename)));
+ dd.mkdir(QDir::cleanPath(QDir::toNativeSeparators(bv->ScFilename + "/" + nam)));
+ QDir d(QDir::toNativeSeparators(activeBView->ScFilename + "/" + fi.baseName()), "*", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d.exists()) && (d.count() != 0))
+ {
+ for (uint dc = 0; dc < d.count(); ++dc)
+ {
+ QString source = QDir::cleanPath(QDir::toNativeSeparators(activeBView->ScFilename + "/" + fi.baseName() + "/" + d[dc]));
+ QString target = QDir::cleanPath(QDir::toNativeSeparators(bv->ScFilename + "/" + nam + "/" + d[dc]));
+ copyFile(source, target);
+ }
+ }
+ if (fiD.baseName() != nam)
+ adjustReferences(QDir::toNativeSeparators(bv->ScFilename + "/" + nam + "." + fi.completeSuffix().toLower()));
+ }
+ if (pm.width() > 60)
+ pm = pm.scaledToWidth(60, Qt::SmoothTransformation);
+ if (pm.height() > 60)
+ pm = pm.scaledToHeight(60, Qt::SmoothTransformation);
+ QPixmap pm2(60, 60);
+ pm2.fill(palette().color(QPalette::Base));
+ QPainter p;
+ p.begin(&pm2);
+ p.drawPixmap(30 - pm.width() / 2, 30 - pm.height() / 2, pm);
+ p.end();
+ new QListWidgetItem(QIcon(pm), nam, bv);
+ if (bv == tempBView)
+ {
+ tempCount++;
+ if (tempBView->objectMap.count() > PrefsManager::instance()->appPrefs.numScrapbookCopies)
+ {
+ QMap<QString,BibView::Elem>::Iterator it;
+ it = tempBView->objectMap.begin();
+ QFile f(it.value().Data);
+ f.remove();
+ QFileInfo fi(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + ".png"));
+ if (fi.exists())
+ {
+ QFile f2(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + ".png"));
+ f2.remove();
+ }
+ QFileInfo fiD(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()));
+ if ((fiD.exists()) && (fiD.isDir()))
+ {
+ QDir dd = QDir(QDir::toNativeSeparators(tempBView->ScFilename));
+ QDir d(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()), "*", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d.exists()) && (d.count() != 0))
+ {
+ for (uint dc = 0; dc < d.count(); ++dc)
+ {
+ QFile::remove(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + "/" + d[dc]));
+ }
+ }
+ dd.rmdir(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()));
+ }
+ QString name = it.key();
+ tempBView->objectMap.erase(it);
+ QList<QListWidgetItem *> itL = tempBView->findItems(name, Qt::MatchExactly);
+ if (itL.count() > 0)
+ {
+ ite = itL.at(0);
+ delete tempBView->takeItem(tempBView->row(ite));
+ }
+ tempBView->sortItems();
+ }
+ emit updateRecentMenue();
+ }
+ return true;
+}
+
+void Biblio::moveObj(int id)
+{
+ if (copyObj(id))
+ {
+ deleteObj();
+ }
+}
+
+void Biblio::deleteObj()
+{
+ if (!activeBView->canWrite)
+ return;
+ QListWidgetItem *ite = actItem;
+ QString name = ite->text();
+ QFile::remove(activeBView->objectMap[name].Data);
+ QFileInfo fi(QDir::toNativeSeparators(activeBView->ScFilename + "/" + name + ".png"));
+ if (fi.exists())
+ QFile::remove(QDir::toNativeSeparators(activeBView->ScFilename + "/" + name + ".png"));
+ QFileInfo fiD(QDir::toNativeSeparators(activeBView->ScFilename + "/" + name));
+ if ((fiD.exists()) && (fiD.isDir()))
+ {
+ QDir dd = QDir(QDir::toNativeSeparators(activeBView->ScFilename));
+ QDir d(QDir::toNativeSeparators(activeBView->ScFilename + "/" + name), "*", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d.exists()) && (d.count() != 0))
+ {
+ for (uint dc = 0; dc < d.count(); ++dc)
+ {
+ QFile::remove(QDir::toNativeSeparators(activeBView->ScFilename + "/" + name + "/" + d[dc]));
+ }
+ }
+ dd.rmdir(name);
+ }
+ activeBView->objectMap.remove(name);
+ delete activeBView->takeItem(activeBView->row(ite));
+ activeBView->sortItems();
+ if (activeBView == tempBView)
+ emit updateRecentMenue();
+ actItem = 0;
+}
+
+void Biblio::deleteAllObj()
+{
+ if (!activeBView->canWrite)
+ return;
+ int t = QMessageBox::warning(this, CommonStrings::trWarning, tr("Do you really want to delete all entries?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
+ if (t == QMessageBox::No)
+ return;
+ QMap<QString,BibView::Elem>::Iterator it;
+ for (it = activeBView->objectMap.begin(); it != activeBView->objectMap.end(); ++it)
+ {
+ QFile f(it.value().Data);
+ f.remove();
+ QFileInfo fi(QDir::toNativeSeparators(activeBView->ScFilename + "/" + it.key() + ".png"));
+ if (fi.exists())
+ {
+ QFile f2(QDir::toNativeSeparators(activeBView->ScFilename + "/" + it.key() + ".png"));
+ f2.remove();
+ }
+ QFileInfo fiD(QDir::toNativeSeparators(activeBView->ScFilename + "/" + it.key()));
+ if ((fiD.exists()) && (fiD.isDir()))
+ {
+ QDir dd = QDir(QDir::toNativeSeparators(activeBView->ScFilename));
+ QDir d(QDir::toNativeSeparators(activeBView->ScFilename + "/" + it.key()), "*", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d.exists()) && (d.count() != 0))
+ {
+ for (uint dc = 0; dc < d.count(); ++dc)
+ {
+ QFile::remove(QDir::toNativeSeparators(activeBView->ScFilename + "/" + it.key() + "/" + d[dc]));
+ }
+ }
+ dd.rmdir(QDir::toNativeSeparators(activeBView->ScFilename + "/" + it.key()));
+ }
+ }
+ activeBView->clear();
+ activeBView->objectMap.clear();
+ if (activeBView == tempBView)
+ emit updateRecentMenue();
+ actItem = 0;
+}
+
+void Biblio::renameObj()
+{
+ if (!activeBView->canWrite)
+ return;
+ QString nam;
+ QString ObjData;
+ QPixmap ObjPreview;
+ QListWidgetItem *ite = actItem;
+ QString OldName = ite->text();
+ Query *dia = new Query(this, "tt", 1, 0, tr("&Name:"), tr("New Name"));
+ dia->setEditText(ite->text(), true);
+ if (dia->exec())
+ {
+ nam = dia->getEditText();
+ while (activeBView->objectMap.contains(nam))
+ {
+ QMessageBox::warning(this, CommonStrings::trWarning, tr("Name \"%1\" is not unique.\nPlease choose another.").arg(nam), CommonStrings::tr_OK);
+ if (!dia->exec())
+ {
+ delete dia;
+ return;
+ }
+ nam = dia->getEditText();
+ }
+ }
+ else
+ {
+ delete dia;
+ return;
+ }
+ delete dia;
+ ite->setText(nam);
+ ObjData = activeBView->objectMap[OldName].Data;
+ ObjPreview = activeBView->objectMap[OldName].Preview;
+ QDir d = QDir();
+ d.rename(ObjData, QDir::cleanPath(QDir::toNativeSeparators(activeBView->ScFilename + "/" + ite->text() + ".sce")));
+ QFileInfo fi(QDir::toNativeSeparators(activeBView->ScFilename + "/" + OldName + ".png"));
+ if (fi.exists())
+ d.rename(QDir::toNativeSeparators(activeBView->ScFilename + "/" + OldName + ".png"), QDir::cleanPath(QDir::toNativeSeparators(activeBView->ScFilename + "/" + ite->text() + ".png")));
+ QFileInfo fiD(QDir::toNativeSeparators(activeBView->ScFilename + "/" + OldName));
+ if ((fiD.exists()) && (fiD.isDir()))
+ {
+ QDir d = QDir();
+ d.rename(QDir::toNativeSeparators(activeBView->ScFilename + "/" + OldName), QDir::cleanPath(QDir::toNativeSeparators(activeBView->ScFilename + "/" + ite->text())));
+ adjustReferences(QDir::cleanPath(QDir::toNativeSeparators(activeBView->ScFilename + "/" + ite->text() + ".sce")));
+ }
+ activeBView->objectMap.remove(OldName);
+ activeBView->AddObj(ite->text(), QDir::cleanPath(QDir::toNativeSeparators(activeBView->ScFilename + "/" + ite->text() + ".sce")), ObjPreview);
+ activeBView->sortItems();
+ if (activeBView == tempBView)
+ emit updateRecentMenue();
+}
+
+void Biblio::adjustReferences(QString nam)
+{
+ QByteArray cf;
+ if (loadRawText(nam, cf))
+ {
+ QString f;
+ if (cf.left(16) == "<SCRIBUSELEMUTF8")
+ f = QString::fromUtf8(cf.data());
+ else
+ f = cf.data();
+ QDomDocument docu("scridoc");
+ docu.setContent(f);
+ QDomElement elem = docu.documentElement();
+ QDomNode DOC = elem.firstChild();
+ QFileInfo fid(nam);
+ while(!DOC.isNull())
+ {
+ QDomElement pg = DOC.toElement();
+ if(pg.tagName() == "ITEM")
+ {
+ PageItem::ItemType PType = static_cast<PageItem::ItemType>(pg.attribute("PTYPE").toInt());
+ if ((PType == PageItem::ImageFrame) || (PType == PageItem::TextFrame))
+ {
+ QString Pfile = pg.attribute("PFILE");
+ if (!Pfile.isEmpty())
+ {
+ QFileInfo fi(Pfile);
+ pg.setAttribute("PFILE", fid.baseName() + "/" + fi.fileName());
+ }
+ QString Pfile2 = pg.attribute("PFILE2","");
+ if (!Pfile2.isEmpty())
+ {
+ QFileInfo fi(Pfile2);
+ pg.setAttribute("PFILE2", fid.baseName() + "/" + fi.fileName());
+ }
+ QString Pfile3 = pg.attribute("PFILE3","");
+ if (!Pfile3.isEmpty())
+ {
+ QFileInfo fi(Pfile3);
+ pg.setAttribute("PFILE3", fid.baseName() + "/" + fi.fileName());
+ }
+ pg.setAttribute("relativePaths", 1);
+ }
+ }
+ DOC = DOC.nextSibling();
+ }
+ QFile fl(nam);
+ if(!fl.open(QIODevice::WriteOnly))
+ return ;
+ QDataStream s;
+ QByteArray cs = docu.toByteArray();
+ s.setDevice(&fl);
+ s.writeRawData(cs.data(), cs.length());
+ fl.close();
+ }
+}
+
+QString Biblio::getObjectName(QString &text)
+{
+ QDomDocument docu("scridoc");
+ docu.setContent(text);
+ QDomElement elem = docu.documentElement();
+ QDomNode DOC = elem.firstChild();
+ QString result = "";
+ while(!DOC.isNull())
+ {
+ QDomElement pg = DOC.toElement();
+ if(pg.tagName() == "ITEM")
+ {
+ result = pg.attribute("ANNAME");
+ break;
+ }
+ DOC = DOC.nextSibling();
+ }
+ return result;
+}
+
+QStringList Biblio::getOpenScrapbooksNames()
+{
+ QStringList ret;
+ ret.clear();
+ for (int a = 0; a < Frame3->count(); a++)
+ {
+ BibView* bv = (BibView*)Frame3->widget(a);
+ ret.append(bv->visibleName);
+ }
+ return ret;
+ }
+
+void Biblio::ObjFromMenu(QString text)
+{
+ QString nam = "";
+ QString tmp;
+ if (!activeBView->canWrite)
+ return;
+ nam = getObjectName(text);
+ if (Frame3->currentIndex() == 1)
+ {
+ if (nam.isEmpty())
+ nam = tr("Object") + tmp.setNum(tempCount);
+ if (activeBView->objectMap.contains(nam))
+ nam += "("+ tmp.setNum(tempCount) + ")";
+ tempCount++;
+ }
+ else
+ {
+ if (nam.isEmpty())
+ nam = tr("Object") + tmp.setNum(activeBView->objectMap.count());
+ if (activeBView->objectMap.contains(nam))
+ nam += "("+ tmp.setNum(tempCount) + ")";
+ }
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+ Query *dia = new Query(this, "tt", 1, 0, tr("&Name:"), tr("New Entry"));
+ dia->setEditText(nam, true);
+ if (dia->exec())
+ {
+ nam = dia->getEditText();
+ while (activeBView->objectMap.contains(nam))
+ {
+ if (!dia->exec())
+ {
+ delete dia;
+ return;
+ }
+ nam = dia->getEditText();
+ }
+ }
+ else
+ {
+ delete dia;
+ return;
+ }
+ delete dia;
+ QString ff = text;
+ activeBView->checkAndChange(ff, QDir::cleanPath(QDir::toNativeSeparators(activeBView->ScFilename + "/" + nam + ".sce")), QDir::cleanPath(QDir::toNativeSeparators(activeBView->ScFilename)));
+ ScPreview *pre = new ScPreview();
+ QPixmap pm = pre->createPreview(ff);
+ activeBView->AddObj(nam, QDir::cleanPath(QDir::toNativeSeparators(activeBView->ScFilename + "/" + nam + ".sce")), pm);
+ pm.save(QDir::cleanPath(QDir::toNativeSeparators(activeBView->ScFilename + "/" + nam +".png")), "PNG");
+ if (pm.width() > 60)
+ pm = pm.scaledToWidth(60, Qt::SmoothTransformation);
+ if (pm.height() > 60)
+ pm = pm.scaledToHeight(60, Qt::SmoothTransformation);
+ QPixmap pm2(60, 60);
+ pm2.fill(palette().color(QPalette::Base));
+ QPainter p;
+ p.begin(&pm2);
+ p.drawPixmap(30 - pm.width() / 2, 30 - pm.height() / 2, pm);
+ p.end();
+ new QListWidgetItem(QIcon(pm2), nam, activeBView);
+ delete pre;
+ if (Frame3->currentIndex() == 1)
+ {
+ if (tempBView->objectMap.count() > PrefsManager::instance()->appPrefs.numScrapbookCopies)
+ {
+ QMap<QString,BibView::Elem>::Iterator it;
+ it = tempBView->objectMap.begin();
+ QFile f(it.value().Data);
+ f.remove();
+ QFileInfo fi(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + ".png"));
+ if (fi.exists())
+ {
+ QFile f2(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + ".png"));
+ f2.remove();
+ }
+ QFileInfo fiD(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()));
+ if ((fiD.exists()) && (fiD.isDir()))
+ {
+ QDir dd = QDir(QDir::toNativeSeparators(tempBView->ScFilename));
+ QDir d(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()), "*", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d.exists()) && (d.count() != 0))
+ {
+ for (uint dc = 0; dc < d.count(); ++dc)
+ {
+ QFile::remove(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + "/" + d[dc]));
+ }
+ }
+ dd.rmdir(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()));
+ }
+ QString name = it.key();
+ tempBView->objectMap.erase(it);
+ QList<QListWidgetItem *> itL = tempBView->findItems(name, Qt::MatchExactly);
+ if (itL.count() > 0)
+ {
+ QListWidgetItem *ite = itL.at(0);
+ delete tempBView->takeItem(tempBView->row(ite));
+ }
+ tempBView->sortItems();
+ }
+ emit updateRecentMenue();
+ }
+}
+
+void Biblio::ObjFromCopyAction(QString text, QString name)
+{
+ QString nam = "";
+ QString tmp;
+ nam = name;
+ if (nam.isEmpty())
+ nam = tr("Object") + tmp.setNum(tempCount);
+ if (tempBView->objectMap.contains(nam))
+ nam += "("+ tmp.setNum(tempCount) + ")";
+ tempCount++;
+ QString ff = text;
+ tempBView->checkAndChange(ff, QDir::cleanPath(QDir::toNativeSeparators(tempBView->ScFilename + "/" + nam + ".sce")), QDir::cleanPath(QDir::toNativeSeparators(tempBView->ScFilename)));
+ ScPreview *pre = new ScPreview();
+ QPixmap pm = pre->createPreview(ff);
+ tempBView->AddObj(nam, QDir::cleanPath(QDir::toNativeSeparators(tempBView->ScFilename + "/" + nam + ".sce")), pm);
+ pm.save(QDir::cleanPath(QDir::toNativeSeparators(tempBView->ScFilename + "/" + nam +".png")), "PNG");
+ if (pm.width() > 60)
+ pm = pm.scaledToWidth(60, Qt::SmoothTransformation);
+ if (pm.height() > 60)
+ pm = pm.scaledToHeight(60, Qt::SmoothTransformation);
+ QPixmap pm2(60, 60);
+ pm2.fill(palette().color(QPalette::Base));
+ QPainter p;
+ p.begin(&pm2);
+ p.drawPixmap(30 - pm.width() / 2, 30 - pm.height() / 2, pm);
+ p.end();
+ new QListWidgetItem(QIcon(pm2), nam, tempBView);
+ delete pre;
+ if (tempBView->objectMap.count() > PrefsManager::instance()->appPrefs.numScrapbookCopies)
+ {
+ QMap<QString,BibView::Elem>::Iterator it;
+ it = tempBView->objectMap.begin();
+ QFile f(it.value().Data);
+ f.remove();
+ QFileInfo fi(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + ".png"));
+ if (fi.exists())
+ {
+ QFile f2(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + ".png"));
+ f2.remove();
+ }
+ QFileInfo fiD(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()));
+ if ((fiD.exists()) && (fiD.isDir()))
+ {
+ QDir dd = QDir(QDir::toNativeSeparators(tempBView->ScFilename));
+ QDir d(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()), "*", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d.exists()) && (d.count() != 0))
+ {
+ for (uint dc = 0; dc < d.count(); ++dc)
+ {
+ QFile::remove(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + "/" + d[dc]));
+ }
+ }
+ dd.rmdir(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()));
+ }
+ QString name = it.key();
+ tempBView->objectMap.erase(it);
+ QList<QListWidgetItem *> itL = tempBView->findItems(name, Qt::MatchExactly);
+ if (itL.count() > 0)
+ {
+ QListWidgetItem *ite = itL.at(0);
+ delete tempBView->takeItem(tempBView->row(ite));
+ }
+ tempBView->sortItems();
+ }
+}
+
+void Biblio::ObjFromMainMenu(QString text, int scrapID)
+{
+ QString nam = "";
+ QString tmp;
+ int scID = scrapID;
+ if (scID > 0)
+ scID++;
+ BibView* actBView = (BibView*)Frame3->widget(scID);
+ if (!actBView->canWrite)
+ return;
+ nam = getObjectName(text);
+ if (nam.isEmpty())
+ nam = tr("Object") + tmp.setNum(actBView->objectMap.count());
+ if (actBView->objectMap.contains(nam))
+ nam += "("+ tmp.setNum(tempCount) + ")";
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+ Query *dia = new Query(this, "tt", 1, 0, tr("&Name:"), tr("New Entry"));
+ dia->setEditText(nam, true);
+ if (dia->exec())
+ {
+ nam = dia->getEditText();
+ while (activeBView->objectMap.contains(nam))
+ {
+ if (!dia->exec())
+ {
+ delete dia;
+ return;
+ }
+ nam = dia->getEditText();
+ }
+ }
+ else
+ {
+ delete dia;
+ return;
+ }
+ delete dia;
+ QString ff = text;
+ actBView->checkAndChange(ff, QDir::cleanPath(QDir::toNativeSeparators(actBView->ScFilename + "/" + nam + ".sce")), QDir::cleanPath(QDir::toNativeSeparators(actBView->ScFilename)));
+ ScPreview *pre = new ScPreview();
+ QPixmap pm = pre->createPreview(ff);
+ actBView->AddObj(nam, QDir::cleanPath(QDir::toNativeSeparators(actBView->ScFilename + "/" + nam + ".sce")), pm);
+ pm.save(QDir::cleanPath(QDir::toNativeSeparators(actBView->ScFilename + "/" + nam +".png")), "PNG");
+ pm = pm.scaled(60, 60, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ QPixmap pm2(60, 60);
+ pm2.fill(palette().color(QPalette::Base));
+ QPainter p;
+ p.begin(&pm2);
+ p.drawPixmap(30 - pm.width() / 2, 30 - pm.height() / 2, pm);
+ p.end();
+ new QListWidgetItem(QIcon(pm2), nam, actBView);
+ delete pre;
+}
+
+void Biblio::CleanUpTemp()
+{
+ QMap<QString,BibView::Elem>::Iterator it;
+ for (it = tempBView->objectMap.begin(); it != tempBView->objectMap.end(); ++it)
+ {
+ QFile f(it.value().Data);
+ f.remove();
+ QFileInfo fi(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + ".png"));
+ if (fi.exists())
+ {
+ QFile f2(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + ".png"));
+ f2.remove();
+ }
+ QFileInfo fiD(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()));
+ if ((fiD.exists()) && (fiD.isDir()))
+ {
+ QDir dd = QDir(QDir::toNativeSeparators(tempBView->ScFilename));
+ QDir d(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()), "*", QDir::Name, QDir::Files | QDir::Readable | QDir::NoSymLinks);
+ if ((d.exists()) && (d.count() != 0))
+ {
+ for (uint dc = 0; dc < d.count(); ++dc)
+ {
+ QFile::remove(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key() + "/" + d[dc]));
+ }
+ }
+ dd.rmdir(QDir::toNativeSeparators(tempBView->ScFilename + "/" + it.key()));
+ }
+ }
+}
+
+void Biblio::changeEvent(QEvent *e)
+{
+ if (e->type() == QEvent::LanguageChange)
+ languageChange();
+ else
+ QWidget::changeEvent(e);
+}
+
+void Biblio::languageChange()
+{
+ setWindowTitle( tr( "Scrapbook" ) );
+ newButton->setToolTip( tr( "Create a new scrapbook page" ) );
+ loadButton->setToolTip( tr( "Load an existing scrapbook" ) );
+ saveAsButton->setToolTip( tr( "Save the selected scrapbook" ) );
+ importButton->setToolTip( tr( "Import a scrapbook file from Scribus <=1.3.2" ) );
+ closeButton->setToolTip( tr( "Close the selected scrapbook" ) );
+}