r14676 by fschmid - Vector Import Plugins: more previews in the Fileselectors for vector images, added them for PCT and WPG.
scribus-commit
scribus-commit at lists.scribus.net
Wed Feb 10 10:50:49 CET 2010
Revision: 14676
Author: fschmid
Date: 2010-02-10T09:40:17.745369Z
Commit message: Vector Import Plugins: more previews in the Fileselectors for vector images, added them for PCT and WPG.
Changeset:
M /trunk/Scribus/scribus/scpainter.cpp
M /trunk/Scribus/scribus/util_formats.h
M /trunk/Scribus/scribus/plugins/import/wpg/importwpgplugin.cpp
M /trunk/Scribus/scribus/plugins/import/wpg/importwpg.cpp
M /trunk/Scribus/scribus/plugins/import/pct/importpctplugin.cpp
M /trunk/Scribus/scribus/plugins/import/cgm/importcgm.cpp
M /trunk/Scribus/scribus/plugins/import/pct/importpct.cpp
M /trunk/Scribus/scribus/units.cpp
M /trunk/Scribus/scribus/plugins/import/wpg/importwpgplugin.h
M /trunk/Scribus/scribus/plugins/import/wpg/importwpg.h
M /trunk/Scribus/scribus/plugins/import/pct/importpctplugin.h
M /trunk/Scribus/scribus/plugins/import/pct/importpct.h
Diffs:
Index: scribus/util_formats.h
===================================================================
--- scribus/util_formats.h (revision 14675)
+++ scribus/util_formats.h (revision 14676)
@@ -39,9 +39,9 @@
{
ALLIMAGES = 1|2|4|8|16|32|64|128|256|512|1024|2048|4096|8192|16384|32768,
#ifdef GMAGICK_FOUND
- IMAGESIMGFRAME = 1|2|4|16|32|64|128|256|512|32768|65536|262144, // all Types suitable for Image Frames
+ IMAGESIMGFRAME = 1|2|4|16|32|64|128|256|512|65536, // all Types suitable for Image Frames
#else
- IMAGESIMGFRAME = 1|2|4|16|32|64|128|256|512|32768|262144, // all Types suitable for Image Frames
+ IMAGESIMGFRAME = 1|2|4|16|32|64|128|256|512, // all Types suitable for Image Frames
#endif
VECTORIMAGES = 1|64|1024|2048|16384|32768|131072|262144, // All pure vector image types
RASTORIMAGES = 2|4|8|32|512|65536, // All pure rastor image types
Index: scribus/scpainter.cpp
===================================================================
--- scribus/scpainter.cpp (revision 14675)
+++ scribus/scpainter.cpp (revision 14676)
@@ -2217,7 +2217,7 @@
{
bool nPath = true;
bool first = true;
- FPoint np, np1, np2, np3;
+ FPoint np, np1, np2, np3, np4;
#ifdef HAVE_CAIRO
if (points->size() > 3)
{
@@ -2237,15 +2237,19 @@
cairo_move_to( m_cr, np.x(), np.y());
nPath = false;
first = false;
+ np4 = np;
}
np = points->point(poi);
np1 = points->point(poi+1);
np2 = points->point(poi+3);
np3 = points->point(poi+2);
- if ((np == np1) && (np2 == np3))
- cairo_line_to( m_cr, np3.x(), np3.y());
- else
+ if (np4 == np3)
+ continue;
+ // if ((np == np1) && (np2 == np3))
+ // cairo_line_to( m_cr, np3.x(), np3.y());
+ // else
cairo_curve_to(m_cr, np1.x(), np1.y(), np2.x(), np2.y(), np3.x(), np3.y());
+ np4 = np3;
}
if (closed)
cairo_close_path( m_cr );
Index: scribus/plugins/import/cgm/importcgm.cpp
===================================================================
--- scribus/plugins/import/cgm/importcgm.cpp (revision 14675)
+++ scribus/plugins/import/cgm/importcgm.cpp (revision 14676)
@@ -173,8 +173,7 @@
double xs = tmpSel->width();
double ys = tmpSel->height();
double sc = 500.0 / qMax(xs, ys);
- if (sc < 1)
- m_Doc->scaleGroup(sc, sc, true, tmpSel);
+ m_Doc->scaleGroup(sc, sc, true, tmpSel);
tmpImage = Elements.at(0)->DrawObj_toImage();
tmpImage.setText("XSize", QString("%1").arg(xs));
tmpImage.setText("YSize", QString("%1").arg(ys));
Index: scribus/plugins/import/pct/importpctplugin.cpp
===================================================================
--- scribus/plugins/import/pct/importpctplugin.cpp (revision 14675)
+++ scribus/plugins/import/pct/importpctplugin.cpp (revision 14676)
@@ -154,3 +154,23 @@
delete dia;
return true;
}
+
+QImage ImportPctPlugin::readThumbnail(const QString& fileName)
+{
+ bool wasUndo = false;
+ if( fileName.isEmpty() )
+ return QImage();
+ if (UndoManager::undoEnabled())
+ {
+ UndoManager::instance()->setUndoEnabled(false);
+ wasUndo = true;
+ }
+ m_Doc = ScCore->primaryMainWindow()->doc;
+ PctPlug *dia = new PctPlug(m_Doc, lfCreateThumbnail);
+ Q_CHECK_PTR(dia);
+ QImage ret = dia->readThumbnail(fileName);
+ if (wasUndo)
+ UndoManager::instance()->setUndoEnabled(true);
+ delete dia;
+ return ret;
+}
Index: scribus/plugins/import/pct/importpct.cpp
===================================================================
--- scribus/plugins/import/pct/importpct.cpp (revision 14675)
+++ scribus/plugins/import/pct/importpct.cpp (revision 14676)
@@ -55,9 +55,167 @@
{
tmpSel=new Selection(this, false);
m_Doc=doc;
+ importerFlags = flags;
interactive = (flags & LoadSavePlugin::lfInteractive);
}
+QImage PctPlug::readThumbnail(QString fName)
+{
+ QFileInfo fi = QFileInfo(fName);
+ baseFile = QDir::cleanPath(QDir::toNativeSeparators(fi.absolutePath()+"/"));
+ bool haveDoc = false;
+ double b, h, x, y;
+ parseHeader(fName, x, y, b, h);
+ if (b == 0.0)
+ b = PrefsManager::instance()->appPrefs.docSetupPrefs.pageWidth;
+ if (h == 0.0)
+ h = PrefsManager::instance()->appPrefs.docSetupPrefs.pageHeight;
+ docWidth = b;
+ docHeight = h;
+ ScribusView* tempView;
+ progressDialog = NULL;
+ haveDoc = true;
+ m_Doc = new ScribusDoc();
+ m_Doc->setup(0, 1, 1, 1, 1, "Custom", "Custom");
+ m_Doc->setPage(docWidth, docHeight, 0, 0, 0, 0, 0, 0, false, false);
+ m_Doc->addPage(0);
+ tempView = new ScribusView(0, ScCore->primaryMainWindow(), m_Doc);
+ tempView->setScale(1);
+ m_Doc->setGUI(false, ScCore->primaryMainWindow(), tempView);
+ baseX = m_Doc->currentPage()->xOffset() - x;
+ baseY = m_Doc->currentPage()->yOffset() - y;
+ Elements.clear();
+ m_Doc->setLoading(true);
+ m_Doc->DoDrawing = false;
+ m_Doc->view()->updatesOn(false);
+ m_Doc->scMW()->ScriptRunning = true;
+ qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
+ QString CurDirP = QDir::currentPath();
+ QDir::setCurrent(fi.path());
+ int groupCount = m_Doc->GroupCounter;
+ int itemCount = m_Doc->TotalItems;
+ if (convert(fName))
+ {
+ tmpSel->clear();
+ QDir::setCurrent(CurDirP);
+ if (Elements.count() > 0)
+ {
+ bool isGroup = true;
+ int firstElem = -1;
+ if (Elements.at(0)->Groups.count() != 0)
+ firstElem = Elements.at(0)->Groups.top();
+ for (int bx = 0; bx < Elements.count(); ++bx)
+ {
+ PageItem* bxi = Elements.at(bx);
+ if (bxi->Groups.count() != 0)
+ {
+ if (bxi->Groups.top() != firstElem)
+ isGroup = false;
+ }
+ else
+ isGroup = false;
+ }
+ if (!isGroup)
+ {
+ double minx = 99999.9;
+ double miny = 99999.9;
+ double maxx = -99999.9;
+ double maxy = -99999.9;
+ uint lowestItem = 999999;
+ uint highestItem = 0;
+ for (int a = 0; a < Elements.count(); ++a)
+ {
+ Elements.at(a)->Groups.push(m_Doc->GroupCounter);
+ PageItem* currItem = Elements.at(a);
+ lowestItem = qMin(lowestItem, currItem->ItemNr);
+ highestItem = qMax(highestItem, currItem->ItemNr);
+ double x1, x2, y1, y2;
+ currItem->getVisualBoundingRect(&x1, &y1, &x2, &y2);
+ minx = qMin(minx, x1);
+ miny = qMin(miny, y1);
+ maxx = qMax(maxx, x2);
+ maxy = qMax(maxy, y2);
+ }
+ double gx = minx;
+ double gy = miny;
+ double gw = maxx - minx;
+ double gh = maxy - miny;
+ PageItem *high = m_Doc->Items->at(highestItem);
+ int z = m_Doc->itemAdd(PageItem::Polygon, PageItem::Rectangle, gx, gy, gw, gh, 0, m_Doc->itemToolPrefs.shapeFillColor, m_Doc->itemToolPrefs.shapeLineColor, true);
+ PageItem *neu = m_Doc->Items->takeAt(z);
+ m_Doc->Items->insert(lowestItem, neu);
+ neu->Groups.push(m_Doc->GroupCounter);
+ neu->setItemName( tr("Group%1").arg(neu->Groups.top()));
+ neu->AutoName = false;
+ neu->isGroupControl = true;
+ neu->groupsLastItem = high;
+ neu->setTextFlowMode(PageItem::TextFlowDisabled);
+ for (int a = 0; a < m_Doc->Items->count(); ++a)
+ {
+ m_Doc->Items->at(a)->ItemNr = a;
+ }
+ Elements.prepend(neu);
+ m_Doc->GroupCounter++;
+ }
+ }
+ m_Doc->DoDrawing = true;
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+ m_Doc->m_Selection->delaySignalsOn();
+ QImage tmpImage;
+ if (Elements.count() > 0)
+ {
+ for (int dre=0; dre<Elements.count(); ++dre)
+ {
+ tmpSel->addItem(Elements.at(dre), true);
+ }
+ tmpSel->setGroupRect();
+ double xs = tmpSel->width();
+ double ys = tmpSel->height();
+ double sc = 500.0 / qMax(xs, ys);
+ m_Doc->scaleGroup(sc, sc, true, tmpSel);
+ tmpImage = Elements.at(0)->DrawObj_toImage();
+ tmpImage.setText("XSize", QString("%1").arg(xs));
+ tmpImage.setText("YSize", QString("%1").arg(ys));
+ }
+ m_Doc->itemSelection_DeleteItem(tmpSel);
+ m_Doc->view()->updatesOn(true);
+ m_Doc->scMW()->ScriptRunning = false;
+ m_Doc->setLoading(false);
+ if (importedColors.count() != 0)
+ {
+ for (int cd = 0; cd < importedColors.count(); cd++)
+ {
+ m_Doc->PageColors.remove(importedColors[cd]);
+ }
+ }
+ m_Doc->m_Selection->delaySignalsOff();
+ if (haveDoc)
+ {
+ delete tempView;
+ delete m_Doc;
+ }
+ m_Doc->GroupCounter = groupCount;
+ m_Doc->TotalItems = itemCount;
+ return tmpImage;
+ }
+ else
+ {
+ QDir::setCurrent(CurDirP);
+ m_Doc->DoDrawing = true;
+ m_Doc->scMW()->ScriptRunning = false;
+ m_Doc->view()->updatesOn(true);
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+ if (haveDoc)
+ {
+ delete tempView;
+ delete m_Doc;
+ }
+ }
+ m_Doc->GroupCounter = groupCount;
+ m_Doc->TotalItems = itemCount;
+ return QImage();
+}
+
bool PctPlug::import(QString fNameIn, const TransactionSettings& trSettings, int flags, bool showProgress)
{
QString fName = fNameIn;
Index: scribus/plugins/import/pct/importpctplugin.h
===================================================================
--- scribus/plugins/import/pct/importpctplugin.h (revision 14675)
+++ scribus/plugins/import/pct/importpctplugin.h (revision 14676)
@@ -33,6 +33,7 @@
virtual void languageChange();
virtual bool fileSupported(QIODevice* file, const QString & fileName=QString::null) const;
virtual bool loadFile(const QString & fileName, const FileFormat & fmt, int flags, int index = 0);
+ virtual QImage readThumbnail(const QString& fileName);
virtual void addToMainWindowMenu(ScribusMainWindow *) {};
public slots:
Index: scribus/plugins/import/pct/importpct.h
===================================================================
--- scribus/plugins/import/pct/importpct.h (revision 14675)
+++ scribus/plugins/import/pct/importpct.h (revision 14676)
@@ -54,6 +54,7 @@
\retval bool true if import was ok
*/
bool import(QString fn, const TransactionSettings& trSettings, int flags, bool showProgress = true);
+ QImage readThumbnail(QString fn);
private:
void parseHeader(QString fName, double &x, double &y, double &b, double &h);
Index: scribus/plugins/import/wpg/importwpgplugin.cpp
===================================================================
--- scribus/plugins/import/wpg/importwpgplugin.cpp (revision 14675)
+++ scribus/plugins/import/wpg/importwpgplugin.cpp (revision 14676)
@@ -161,3 +161,23 @@
delete dia;
return true;
}
+
+QImage ImportWpgPlugin::readThumbnail(const QString& fileName)
+{
+ bool wasUndo = false;
+ if( fileName.isEmpty() )
+ return QImage();
+ if (UndoManager::undoEnabled())
+ {
+ UndoManager::instance()->setUndoEnabled(false);
+ wasUndo = true;
+ }
+ m_Doc = ScCore->primaryMainWindow()->doc;
+ WpgPlug *dia = new WpgPlug(m_Doc, lfCreateThumbnail);
+ Q_CHECK_PTR(dia);
+ QImage ret = dia->readThumbnail(fileName);
+ if (wasUndo)
+ UndoManager::instance()->setUndoEnabled(true);
+ delete dia;
+ return ret;
+}
Index: scribus/plugins/import/wpg/importwpg.cpp
===================================================================
--- scribus/plugins/import/wpg/importwpg.cpp (revision 14675)
+++ scribus/plugins/import/wpg/importwpg.cpp (revision 14676)
@@ -468,9 +468,163 @@
{
tmpSel=new Selection(this, false);
m_Doc=doc;
+ importerFlags = flags;
interactive = (flags & LoadSavePlugin::lfInteractive);
}
+QImage WpgPlug::readThumbnail(QString fName)
+{
+ QFileInfo fi = QFileInfo(fName);
+ bool haveDoc = false;
+ double b, h;
+ b = PrefsManager::instance()->appPrefs.docSetupPrefs.pageWidth;
+ h = PrefsManager::instance()->appPrefs.docSetupPrefs.pageHeight;
+ docWidth = b;
+ docHeight = h;
+ ScribusView* tempView;
+ progressDialog = NULL;
+ haveDoc = true;
+ m_Doc = new ScribusDoc();
+ m_Doc->setup(0, 1, 1, 1, 1, "Custom", "Custom");
+ m_Doc->setPage(docWidth, docHeight, 0, 0, 0, 0, 0, 0, false, false);
+ m_Doc->addPage(0);
+ tempView = new ScribusView(0, ScCore->primaryMainWindow(), m_Doc);
+ tempView->setScale(1);
+ m_Doc->setGUI(false, ScCore->primaryMainWindow(), tempView);
+ baseX = m_Doc->currentPage()->xOffset();
+ baseY = m_Doc->currentPage()->yOffset();
+ Elements.clear();
+ m_Doc->setLoading(true);
+ m_Doc->DoDrawing = false;
+ m_Doc->view()->updatesOn(false);
+ m_Doc->scMW()->ScriptRunning = true;
+ qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
+ QString CurDirP = QDir::currentPath();
+ QDir::setCurrent(fi.path());
+ int groupCount = m_Doc->GroupCounter;
+ int itemCount = m_Doc->TotalItems;
+ if (convert(fName))
+ {
+ tmpSel->clear();
+ QDir::setCurrent(CurDirP);
+ if (Elements.count() > 0)
+ {
+ bool isGroup = true;
+ int firstElem = -1;
+ if (Elements.at(0)->Groups.count() != 0)
+ firstElem = Elements.at(0)->Groups.top();
+ for (int bx = 0; bx < Elements.count(); ++bx)
+ {
+ PageItem* bxi = Elements.at(bx);
+ if (bxi->Groups.count() != 0)
+ {
+ if (bxi->Groups.top() != firstElem)
+ isGroup = false;
+ }
+ else
+ isGroup = false;
+ }
+ if (!isGroup)
+ {
+ double minx = 99999.9;
+ double miny = 99999.9;
+ double maxx = -99999.9;
+ double maxy = -99999.9;
+ uint lowestItem = 999999;
+ uint highestItem = 0;
+ for (int a = 0; a < Elements.count(); ++a)
+ {
+ Elements.at(a)->Groups.push(m_Doc->GroupCounter);
+ PageItem* currItem = Elements.at(a);
+ lowestItem = qMin(lowestItem, currItem->ItemNr);
+ highestItem = qMax(highestItem, currItem->ItemNr);
+ double x1, x2, y1, y2;
+ currItem->getVisualBoundingRect(&x1, &y1, &x2, &y2);
+ minx = qMin(minx, x1);
+ miny = qMin(miny, y1);
+ maxx = qMax(maxx, x2);
+ maxy = qMax(maxy, y2);
+ }
+ double gx = minx;
+ double gy = miny;
+ double gw = maxx - minx;
+ double gh = maxy - miny;
+ PageItem *high = m_Doc->Items->at(highestItem);
+ int z = m_Doc->itemAdd(PageItem::Polygon, PageItem::Rectangle, gx, gy, gw, gh, 0, m_Doc->itemToolPrefs.shapeFillColor, m_Doc->itemToolPrefs.shapeLineColor, true);
+ PageItem *neu = m_Doc->Items->takeAt(z);
+ m_Doc->Items->insert(lowestItem, neu);
+ neu->Groups.push(m_Doc->GroupCounter);
+ neu->setItemName( tr("Group%1").arg(neu->Groups.top()));
+ neu->AutoName = false;
+ neu->isGroupControl = true;
+ neu->groupsLastItem = high;
+ neu->setTextFlowMode(PageItem::TextFlowDisabled);
+ for (int a = 0; a < m_Doc->Items->count(); ++a)
+ {
+ m_Doc->Items->at(a)->ItemNr = a;
+ }
+ Elements.prepend(neu);
+ m_Doc->GroupCounter++;
+ }
+ }
+ m_Doc->DoDrawing = true;
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+ m_Doc->m_Selection->delaySignalsOn();
+ QImage tmpImage;
+ if (Elements.count() > 0)
+ {
+ for (int dre=0; dre<Elements.count(); ++dre)
+ {
+ tmpSel->addItem(Elements.at(dre), true);
+ }
+ tmpSel->setGroupRect();
+ double xs = tmpSel->width();
+ double ys = tmpSel->height();
+ double sc = 500.0 / qMax(xs, ys);
+ m_Doc->scaleGroup(sc, sc, true, tmpSel);
+ tmpImage = Elements.at(0)->DrawObj_toImage();
+ tmpImage.setText("XSize", QString("%1").arg(xs));
+ tmpImage.setText("YSize", QString("%1").arg(ys));
+ }
+ m_Doc->itemSelection_DeleteItem(tmpSel);
+ m_Doc->view()->updatesOn(true);
+ m_Doc->scMW()->ScriptRunning = false;
+ m_Doc->setLoading(false);
+ if (importedColors.count() != 0)
+ {
+ for (int cd = 0; cd < importedColors.count(); cd++)
+ {
+ m_Doc->PageColors.remove(importedColors[cd]);
+ }
+ }
+ m_Doc->m_Selection->delaySignalsOff();
+ if (haveDoc)
+ {
+ delete tempView;
+ delete m_Doc;
+ }
+ m_Doc->GroupCounter = groupCount;
+ m_Doc->TotalItems = itemCount;
+ return tmpImage;
+ }
+ else
+ {
+ QDir::setCurrent(CurDirP);
+ m_Doc->DoDrawing = true;
+ m_Doc->scMW()->ScriptRunning = false;
+ m_Doc->view()->updatesOn(true);
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+ if (haveDoc)
+ {
+ delete tempView;
+ delete m_Doc;
+ }
+ }
+ m_Doc->GroupCounter = groupCount;
+ m_Doc->TotalItems = itemCount;
+ return QImage();
+}
+
bool WpgPlug::import(QString fNameIn, const TransactionSettings& trSettings, int flags, bool showProgress)
{
QString fName = fNameIn;
@@ -755,12 +909,6 @@
}
}
}
-/* if(progressDialog)
- {
- progressDialog->setOverallProgress(2);
- progressDialog->setLabel("GI", tr("Generating Items"));
- qApp->processEvents();
- } */
if (progressDialog)
progressDialog->close();
return true;
Index: scribus/plugins/import/wpg/importwpgplugin.h
===================================================================
--- scribus/plugins/import/wpg/importwpgplugin.h (revision 14675)
+++ scribus/plugins/import/wpg/importwpgplugin.h (revision 14676)
@@ -33,6 +33,7 @@
virtual void languageChange();
virtual bool fileSupported(QIODevice* file, const QString & fileName=QString::null) const;
virtual bool loadFile(const QString & fileName, const FileFormat & fmt, int flags, int index = 0);
+ virtual QImage readThumbnail(const QString& fileName);
virtual void addToMainWindowMenu(ScribusMainWindow *) {};
public slots:
Index: scribus/plugins/import/wpg/importwpg.h
===================================================================
--- scribus/plugins/import/wpg/importwpg.h (revision 14675)
+++ scribus/plugins/import/wpg/importwpg.h (revision 14676)
@@ -101,6 +101,7 @@
\retval bool true if import was ok
*/
bool import(QString fn, const TransactionSettings& trSettings, int flags, bool showProgress = true);
+ QImage readThumbnail(QString fn);
private:
bool convert(QString fn);
Index: scribus/units.cpp
===================================================================
--- scribus/units.cpp (revision 14675)
+++ scribus/units.cpp (revision 14676)
@@ -369,7 +369,7 @@
else
s=QString::number(pts2value(unitValue, unitIndex));
if (appendSuffix)
- s += unitGetStrFromIndex(unitIndex);
+ s += " "+unitGetStrFromIndex(unitIndex);
return s;
}
More information about the scribus-commit
mailing list