View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0011626 | Scribus | Import / Export | public | 2013-06-24 13:29 | 2026-10-10 01:26 |
| Reporter | Chelen | Assigned To | Chelen | ||
| Priority | normal | Severity | feature | Reproducibility | always |
| Status | assigned | Resolution | open | ||
| Product Version | 1.5.0svn | ||||
| Summary | 0011626: [PATCH] Improve Import management | ||||
| Description | This patch come next to image loader. To be more uniform, all files can be import with a single option instead of : "import image", "import text", "append text", "import vector file", there is just an "Import" option Through preference, we can select if we want: For oneclick frame creation: ask for a dimension, insert with doc size, insert with a default dimension Undo/redo are added too. This is tested by jluc | ||||
| Tags | #please_test, #rottenpatch | ||||
| Attached Files | patch.diff (135,046 bytes)
diff --git a/Scribus/Scribus.pro b/Scribus/Scribus.pro
index 6e42599..b01e1e8 100644
--- a/Scribus/Scribus.pro
+++ b/Scribus/Scribus.pro
@@ -596,7 +596,6 @@ HEADERS += scribus/actionmanager.h \
scribus/ui/gradientpreview.h \
scribus/ui/gradientvectordialog.h \
scribus/ui/gtdialogs.h \
- scribus/ui/gtfiledialog.h \
scribus/ui/guidemanager.h \
scribus/ui/helpbrowser.h \
scribus/ui/helpnavigation.h \
@@ -1129,7 +1128,8 @@ HEADERS += scribus/actionmanager.h \
scribus/styles/cellstyle.attrdefs.cxx \
scribus/main_nix.cpp \
scribus/main_win32.cpp \
- scribus/styles/linestyle.attrdefs.cxx
+ scribus/styles/linestyle.attrdefs.cxx \
+ scribus/canvasmode_importdata.h
FORMS += scribus/ui/aboutplugins.ui \
scribus/ui/aligndistribute.ui \
scribus/ui/arcvectorbase.ui \
@@ -1143,7 +1143,6 @@ FORMS += scribus/ui/aboutplugins.ui \
scribus/ui/gradientaddedit.ui \
scribus/ui/gradienteditor.ui \
scribus/ui/gradientvectorbase.ui \
- scribus/ui/gtfiledialog.ui \
scribus/ui/guidemanager.ui \
scribus/ui/helpbrowser.ui \
scribus/ui/helpbrowsernavigation.ui \
@@ -1607,7 +1606,6 @@ SOURCES += scribus/actionmanager.cpp \
scribus/ui/gradientpreview.cpp \
scribus/ui/gradientvectordialog.cpp \
scribus/ui/gtdialogs.cpp \
- scribus/ui/gtfiledialog.cpp \
scribus/ui/guidemanager.cpp \
scribus/ui/helpbrowser.cpp \
scribus/ui/helpnavigation.cpp \
@@ -2178,7 +2176,8 @@ SOURCES += scribus/actionmanager.cpp \
scribus/plugins/tools/2geomtools/meshdistortion/meshdistortion.cpp \
scribus/plugins/tools/2geomtools/meshdistortion/meshdistortiondialog.cpp \
scribus/plugins/tools/2geomtools/pathalongpath/pathalongpath.cpp \
- scribus/plugins/tools/2geomtools/pathalongpath/pathdialog.cpp
+ scribus/plugins/tools/2geomtools/pathalongpath/pathdialog.cpp \
+ scribus/canvasmode_importdata.cpp
RESOURCES += scribus/plugins/scripter/python/sceditor/dockwidget_icons.qrc
TRANSLATIONS += resources/translations/po/scribus.af.ts \
resources/translations/po/scribus.ar.ts \
diff --git a/Scribus/scribus/CMakeLists.txt b/Scribus/scribus/CMakeLists.txt
index 0e2ddb6..01997ad 100644
--- a/Scribus/scribus/CMakeLists.txt
+++ b/Scribus/scribus/CMakeLists.txt
@@ -84,7 +84,6 @@ SET(SCRIBUS_UI_SRC
ui/gradientaddedit.ui
ui/gradienteditor.ui
ui/gradientvectorbase.ui
- ui/gtfiledialog.ui
ui/guidemanager.ui
ui/insertaframe.ui
ui/inserttablecolumnsdialog.ui
@@ -316,7 +315,6 @@ SET(SCRIBUS_MOC_CLASSES
ui/gradientvectordialog.h
ui/gradientpreview.h
ui/gtdialogs.h
- ui/gtfiledialog.h
ui/guidemanager.h
ui/helpbrowser.h
ui/hruler.h
@@ -520,7 +518,7 @@ SET(SCRIBUS_SOURCES
canvasmode_drawfreehand.cpp
canvasmode_eyedropper.cpp
canvasmode_framelinks.cpp
- canvasmode_imageimport.cpp
+ canvasmode_importdata.cpp
canvasmode_edit.cpp
canvasmode_editarc.cpp
canvasmode_editgradient.cpp
@@ -761,7 +759,6 @@ SET(SCRIBUS_SOURCES
ui/gradientvectordialog.cpp
ui/gradientpreview.cpp
ui/gtdialogs.cpp
- ui/gtfiledialog.cpp
ui/guidemanager.cpp
ui/helpbrowser.cpp
ui/hruler.cpp
diff --git a/Scribus/scribus/actionmanager.cpp b/Scribus/scribus/actionmanager.cpp
index 4a7f806..595c86d 100644
--- a/Scribus/scribus/actionmanager.cpp
+++ b/Scribus/scribus/actionmanager.cpp
@@ -118,15 +118,7 @@ void ActionManager::initFileMenuActions()
name="fileCollect";
scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
//File Import Menu
- name="fileImportText";
- scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
- name="fileImportText2";
- scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
- name="fileImportAppendText";
- scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
- name="fileImportImage";
- scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
- name="fileImportVector";
+ name="fileImport";
scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
//File Export Menu
@@ -171,11 +163,7 @@ void ActionManager::initFileMenuActions()
connect( (*scrActions)["fileCollect"], SIGNAL(triggered()), mainWindow, SLOT(fileCollect()) );
connect( (*scrActions)["fileQuit"], SIGNAL(triggered()), mainWindow, SLOT(slotFileQuit()) );
//File Import Menu
- connect( (*scrActions)["fileImportText"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent()) );
- connect( (*scrActions)["fileImportText2"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent2()) );
- connect( (*scrActions)["fileImportAppendText"], SIGNAL(triggered()), mainWindow, SLOT(slotFileAppend()) );
- connect( (*scrActions)["fileImportImage"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent()) );
- connect( (*scrActions)["fileImportVector"], SIGNAL(triggered()), mainWindow, SLOT(importVectorFile()) );
+ connect( (*scrActions)["fileImport"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent()) );
//File Export Menu
connect( (*scrActions)["fileExportText"], SIGNAL(triggered()), mainWindow, SLOT(SaveText()) );
connect( (*scrActions)["fileExportAsEPS"], SIGNAL(triggered()), mainWindow, SLOT(SaveAsEps()) );
@@ -1424,10 +1412,7 @@ void ActionManager::languageChange()
(*scrActions)["fileSaveAs"]->setTexts( tr("Save &As..."));
(*scrActions)["fileRevert"]->setTexts( tr("Re&vert to Saved"));
(*scrActions)["fileCollect"]->setTexts( tr("Collect for O&utput..."));
- (*scrActions)["fileImportText"]->setTexts( tr("Get Text..."));
- (*scrActions)["fileImportAppendText"]->setTexts( tr("Append &Text..."));
- (*scrActions)["fileImportImage"]->setTexts( tr("Get Image..."));
- (*scrActions)["fileImportVector"]->setTexts( tr("Get Vector File..."));
+ (*scrActions)["fileImport"]->setTexts( tr("Get File..."));
(*scrActions)["fileExportText"]->setTexts( tr("Save &Text..."));
(*scrActions)["fileExportAsEPS"]->setTexts( tr("Save as &EPS..."));
@@ -1766,8 +1751,7 @@ void ActionManager::createDefaultShortcuts()
defKeys.insert("fileClose", QKeySequence::Close);
defKeys.insert("fileSave", QKeySequence::Save);
defKeys.insert("fileSaveAs", Qt::CTRL+Qt::SHIFT+Qt::Key_S);
- defKeys.insert("fileImportText", Qt::CTRL+Qt::Key_I);
- defKeys.insert("fileImportImage", Qt::CTRL+Qt::Key_I);
+ defKeys.insert("fileImport", Qt::CTRL+Qt::Key_I);
defKeys.insert("filePrint", QKeySequence::Print);
defKeys.insert("fileExportAsPDF", Qt::CTRL+Qt::SHIFT+Qt::Key_P);
defKeys.insert("fileQuit", Qt::CTRL+Qt::Key_Q);
@@ -1926,10 +1910,7 @@ void ActionManager::createDefaultMenus()
<< "fileSaveAs"
<< "fileRevert"
<< "fileCollect"
- << "fileImportText"
- << "fileImportAppendText"
- << "fileImportImage"
- << "fileImportVector"
+ << "fileImport"
<< "fileExportText"
<< "fileExportAsEPS"
<< "fileExportAsPDF"
diff --git a/Scribus/scribus/canvas.h b/Scribus/scribus/canvas.h
index 3f34b38..518a414 100644
--- a/Scribus/scribus/canvas.h
+++ b/Scribus/scribus/canvas.h
@@ -101,7 +101,7 @@ public:
friend class CanvasMode_EditTable;
friend class CanvasMode_EyeDropper;
friend class CanvasMode_FrameLinks;
- friend class CanvasMode_ImageImport;
+ friend class CanvasMode_ImportData;
friend class CanvasMode_Magnifier;
friend class CanvasMode_NodeEdit;
friend class CanvasMode_ObjImport;
diff --git a/Scribus/scribus/canvasgesture_resize.cpp b/Scribus/scribus/canvasgesture_resize.cpp
index 6e2f646..b0ad5f6 100644
--- a/Scribus/scribus/canvasgesture_resize.cpp
+++ b/Scribus/scribus/canvasgesture_resize.cpp
@@ -268,7 +268,7 @@ void ResizeGesture::doResize(bool scaleContent)
double imgScX = (newBounds.width() - m_extraWidth) / divX * currItem->imageXScale();
double imgScY = (newBounds.height() - m_extraHeight) / divY * currItem->imageYScale();
// The aspect ratio has been fixed, so make the modification in the direction of the larger movement.
- if (currItem->keepAspectRatio() && currItem->fitImageToFrame())
+ if (currItem->keepAspectRatio() && currItem->fitImageToFrame())
{
if (qAbs((newBounds.width() - m_extraWidth) - currItem->width()) > qAbs((newBounds.height() - m_extraHeight) - currItem->height()))
imgScY = imgScX;
@@ -305,10 +305,10 @@ void ResizeGesture::doResize(bool scaleContent)
}
// We do not want to scale the text of a linked frame
// as it would alter text in other frames of the string
- else if((currItem->itemType() == PageItem::TextFrame)
- && (currItem->nextInChain() == 0)
- && (currItem->prevInChain() == 0)
- && scaleContent)
+ else if((currItem->itemType() == PageItem::TextFrame)
+ && (currItem->nextInChain() == 0)
+ && (currItem->prevInChain() == 0)
+ && scaleContent)
{
double divX = (currItem->width() != 0) ? currItem->width() : 1.0;
double divY = (currItem->height() != 0) ? currItem->height() : 1.0;
@@ -331,7 +331,7 @@ void ResizeGesture::doResize(bool scaleContent)
#endif
// We need to scale the linespacing _only once_ per paragraph.
- if((aa == 0)
+ if((aa == 0)
|| ( SpecialChars::isBreak(currItem->itemText.itemText(aa - 1).at(0))))
{
ParagraphStyle ps(currItem->itemText.paragraphStyle(aa));
@@ -353,8 +353,8 @@ void ResizeGesture::doResize(bool scaleContent)
if (mm.m22() < 0)
dy *= -1;
currItem->moveBy(-dx, -dy, true);
- currItem->setWidth(newBounds.width() / m_scaleX - m_extraWidth);
- currItem->setHeight(newBounds.height() / m_scaleY - m_extraHeight);
+ currItem->setWidth(newBounds.width() / m_scaleX - m_extraWidth + currItem->lineWidth());
+ currItem->setHeight(newBounds.height() / m_scaleY - m_extraHeight + currItem->lineWidth());
if (mm.m11() < 0)
currItem->moveBy(-currItem->width(), 0);
if (mm.m22() < 0)
diff --git a/Scribus/scribus/canvasgesture_rulermove.cpp b/Scribus/scribus/canvasgesture_rulermove.cpp
index 1ed6642..67fd876 100644
--- a/Scribus/scribus/canvasgesture_rulermove.cpp
+++ b/Scribus/scribus/canvasgesture_rulermove.cpp
@@ -158,14 +158,20 @@ void RulerGesture::mouseSelectGuide(QMouseEvent *m)
void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
{
FPoint mousePointDoc = m_canvas->globalToCanvas(m->globalPos());
- const int page = m_doc->OnPage(mousePointDoc.x(), mousePointDoc.y());
+ double x = mousePointDoc.x(), y = mousePointDoc.y();
+ double dx = -x, dy = -y;
+ m_doc->ApplyGuides(&x,&y,true);
+ dx += x;
+ dy += y;
+ const int page = m_doc->OnPage(x, y);
QRect viewport(m_view->viewport()->mapToGlobal(QPoint(0,0)), QSize(m_view->visibleWidth(), m_view->visibleHeight()));
- QPoint newMousePoint = m->globalPos() - (m_canvas->mapToParent(QPoint(0, 0)) + m_canvas->parentWidget()->mapToGlobal(QPoint(0, 0)));
+ QPointF newMousePoint = m->globalPos() - (m_canvas->mapToParent(QPoint(0, 0)) + m_canvas->parentWidget()->mapToGlobal(QPoint(0, 0)));
+ newMousePoint += QPointF(dx,dy)*m_canvas->scale();
switch (m_mode)
{
case ORIGIN:
m_canvas->repaint();
- m_canvas->displayCorrectedXYHUD(m->globalPos(), mousePointDoc.x(), mousePointDoc.y());
+ m_canvas->displayCorrectedXYHUD(m->globalPos(), x, y);
break;
case HORIZONTAL:
if (!m_ScMW->doc->guidesPrefs().guidesShown)
@@ -179,8 +185,8 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
qApp->changeOverrideCursor(QCursor(Qt::SplitVCursor));
if (mouseRelease)
{
- m_doc->Pages->at(page)->guides.addHorizontal(mousePointDoc.y() - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
- m_guide = mousePointDoc.y() - m_doc->Pages->at(page)->yOffset();
+ m_doc->Pages->at(page)->guides.addHorizontal(y - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
+ m_guide = y - m_doc->Pages->at(page)->yOffset();
m_page = page;
m_haveGuide = true;
m_doc->changed();
@@ -189,11 +195,11 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
else if (mouseRelease)
{
if (page == m_page)
- m_doc->Pages->at(page)->guides.moveHorizontal( m_guide, mousePointDoc.y() - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
+ m_doc->Pages->at(page)->guides.moveHorizontal( m_guide, y - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
else
{
m_doc->Pages->at(m_page)->guides.deleteHorizontal( m_guide, GuideManagerCore::Standard);
- m_doc->Pages->at(page)->guides.addHorizontal(mousePointDoc.y() - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
+ m_doc->Pages->at(page)->guides.addHorizontal(y - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
m_page = page;
}
if (m_doc->currentPage() != m_doc->Pages->at(m_page))
@@ -206,7 +212,7 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
if (cursor && (cursor->shape() != Qt::SplitVCursor))
qApp->changeOverrideCursor(QCursor(Qt::SplitVCursor));
}
- m_currentGuide = mousePointDoc.y() - m_doc->Pages->at(page)->yOffset();
+ m_currentGuide = y - m_doc->Pages->at(page)->yOffset();
}
else
{
@@ -221,7 +227,7 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
}
}
}
- m_canvas->displayCorrectedSingleHUD(m->globalPos(), mousePointDoc.y(), false);
+ m_canvas->displayCorrectedSingleHUD(m->globalPos(),y, false);
break;
case VERTICAL:
if (!m_ScMW->doc->guidesPrefs().guidesShown)
@@ -235,8 +241,8 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
qApp->changeOverrideCursor(QCursor(Qt::SplitHCursor));
if (mouseRelease)
{
- m_doc->Pages->at(page)->guides.addVertical(mousePointDoc.x() - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
- m_guide = mousePointDoc.x() - m_doc->Pages->at(page)->xOffset();
+ m_doc->Pages->at(page)->guides.addVertical(x - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
+ m_guide = x - m_doc->Pages->at(page)->xOffset();
m_page = page;
m_haveGuide = true;
m_doc->changed();
@@ -245,11 +251,11 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
else if (mouseRelease)
{
if (page == m_page)
- m_doc->Pages->at(page)->guides.moveVertical( m_guide, mousePointDoc.x() - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
+ m_doc->Pages->at(page)->guides.moveVertical( m_guide,x - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
else
{
m_doc->Pages->at(m_page)->guides.deleteVertical( m_guide, GuideManagerCore::Standard);
- m_doc->Pages->at(page)->guides.addVertical(mousePointDoc.x() - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
+ m_doc->Pages->at(page)->guides.addVertical(x - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
m_page = page;
}
if (m_doc->currentPage() != m_doc->Pages->at(m_page))
@@ -262,7 +268,7 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
if (cursor && (cursor->shape() != Qt::SplitHCursor))
qApp->changeOverrideCursor(QCursor(Qt::SplitHCursor));
}
- m_currentGuide = mousePointDoc.x() - m_doc->Pages->at(page)->xOffset();
+ m_currentGuide = x - m_doc->Pages->at(page)->xOffset();
}
else
{
@@ -277,7 +283,7 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
}
}
}
- m_canvas->displayCorrectedSingleHUD(m->globalPos(), mousePointDoc.x(), true);
+ m_canvas->displayCorrectedSingleHUD(m->globalPos(), x, true);
break;
}
m_xy = newMousePoint;
diff --git a/Scribus/scribus/canvasgesture_rulermove.h b/Scribus/scribus/canvasgesture_rulermove.h
index 42eaf17..c2cd312 100644
--- a/Scribus/scribus/canvasgesture_rulermove.h
+++ b/Scribus/scribus/canvasgesture_rulermove.h
@@ -88,7 +88,7 @@ private:
double m_currentGuide;
bool m_haveCursor;
QCursor m_cursor;
- QPoint m_xy;
+ QPointF m_xy;
void movePoint(QMouseEvent *m, bool mouseRelease);
signals:
diff --git a/Scribus/scribus/canvasmode.cpp b/Scribus/scribus/canvasmode.cpp
index 26153b9..c9e38a4 100644
--- a/Scribus/scribus/canvasmode.cpp
+++ b/Scribus/scribus/canvasmode.cpp
@@ -34,7 +34,7 @@
#include "canvasmode_editweldpoint.h"
#include "canvasmode_eyedropper.h"
#include "canvasmode_framelinks.h"
-#include "canvasmode_imageimport.h"
+#include "canvasmode_importdata.h"
#include "canvasmode_magnifier.h"
#include "canvasmode_measurements.h"
#include "canvasmode_nodeedit.h"
@@ -177,8 +177,8 @@ CanvasMode* CanvasMode::createForAppMode(ScribusView* view, int appMode)
case modeUnlinkFrames:
result = new CanvasMode_FrameLinks(view);
break;
- case modeImportImage:
- result = new CanvasMode_ImageImport(view);
+ case modeImportData:
+ result = new CanvasMode_ImportData(view);
break;
case modeMagnifier:
result = new CanvasMode_Magnifier(view);
diff --git a/Scribus/scribus/canvasmode_create.cpp b/Scribus/scribus/canvasmode_create.cpp
index 6a71ebf..ed3029f 100644
--- a/Scribus/scribus/canvasmode_create.cpp
+++ b/Scribus/scribus/canvasmode_create.cpp
@@ -596,15 +596,8 @@ PageItem* CreateMode::doCreateNewObject(void)
skipOneClick = false;
}
if (!skipOneClick)
- {
if ((!m_view->moveTimerElapsed()) || ((fabs(wSize) < 2.0) && (fabs(hSize) < 2.0)))
- {
- if (!doOneClick(createObjectPos, canvasCurrCoord))
- {
- return NULL;
- }
- }
- }
+ !doOneClick(createObjectPos, canvasCurrCoord);
wSize = canvasCurrCoord.x() - createObjectPos.x();
hSize = canvasCurrCoord.y() - createObjectPos.y();
@@ -850,102 +843,78 @@ PageItem* CreateMode::doCreateNewObject(void)
bool CreateMode::doOneClick(FPoint& startPoint, FPoint& endPoint)
{
- bool doCreate = false;
double xSize, ySize;
int originPoint = 0;
if (QApplication::keyboardModifiers() & Qt::ControlModifier)
return true;
- PrefsContext* sizes = PrefsManager::instance()->prefsFile->getContext("ObjectSize");
- bool doRemember = sizes->getBool("Remember", true);
+ ItemToolPrefs sizes = m_doc->prefsData().itemToolPrefs;
int lmode = (createObjectMode == modeDrawLine) ? 1 : 0;
- if (lmode == 0)
- {
- xSize = sizes->getDouble("defWidth", 100.0);
- ySize = sizes->getDouble("defHeight", 100.0);
- originPoint = sizes->getInt("Origin", 0);
- }
- else
- {
- xSize = sizes->getDouble("defLength", 100.0);
- ySize = sizes->getDouble("defAngle", 0.0);
- originPoint = sizes->getInt("OriginL", 0);
- }
+ xSize = sizes.imageDefaultWidth;
+ ySize = sizes.imageDefaultHeight;
+ originPoint = sizes.imageDefaultBasePoint;
-// qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
- OneClick *dia = new OneClick(m_view, ScribusView::tr("Enter Object Size"), m_doc->unitIndex(), xSize, ySize, doRemember, originPoint, lmode);
- if (dia->exec())
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+ OneClick *dia = NULL;
+ if(sizes.imageDefaultSize > 1 && !(view()->ImageAfterDraw && sizes.imageDefaultSize == 2))
{
- doRemember = dia->checkRemember->isChecked();
- if (lmode == 0)
+ dia = new OneClick(m_view, ScribusView::tr("Enter Object Size"), m_doc->unitIndex(), xSize, ySize, originPoint, lmode);
+ if (dia->exec())
{
xSize = dia->spinWidth->value() / unitGetRatioFromIndex(m_doc->unitIndex());
ySize = dia->spinHeight->value() / unitGetRatioFromIndex(m_doc->unitIndex());
originPoint = dia->RotationGroup->checkedId();
- if (doRemember)
- {
- sizes->set("defWidth", xSize);
- sizes->set("defHeight", ySize);
- sizes->set("Origin", originPoint);
- }
- endPoint.setXY(startPoint.x() + xSize, startPoint.y() + ySize);
- switch (originPoint)
- {
- case 0:
- break;
- case 1:
- startPoint.setX(startPoint.x() - xSize);
- endPoint.setX(endPoint.x() - xSize);
- break;
- case 2:
- startPoint.setXY(startPoint.x() - xSize / 2.0, startPoint.y() - ySize / 2.0);
- endPoint.setXY(endPoint.x() - xSize / 2.0, endPoint.y() - ySize / 2.0);
- break;
- case 3:
- startPoint.setY(startPoint.y() - ySize);
- endPoint.setY(endPoint.y() - ySize);
- break;
- case 4:
- startPoint.setXY(startPoint.x() - xSize, startPoint.y() - ySize);
- endPoint.setXY(endPoint.x() - xSize, endPoint.y() - ySize);
- break;
- }
}
- else
+ }
+ if (lmode == 0)
+ {
+ endPoint.setXY(startPoint.x() + xSize, startPoint.y() + ySize);
+ switch (originPoint)
{
- FPoint oldStart = startPoint;
- xSize = dia->spinWidth->value() / unitGetRatioFromIndex(m_doc->unitIndex());
- ySize = dia->spinHeight->value();
- originPoint = dia->RotationGroup->checkedId();
- if (doRemember)
- {
- sizes->set("defLength", xSize);
- sizes->set("defAngle", ySize);
- sizes->set("OriginL", originPoint);
- }
- double angle = -ySize * M_PI / 180.0;
- switch (originPoint)
- {
- case 0:
- endPoint = FPoint(startPoint.x() + xSize * cos(angle), startPoint.y() + xSize * sin(angle));
- break;
- case 1:
- startPoint = FPoint(oldStart.x() - xSize * cos(angle), oldStart.y() - xSize * sin(angle));
- endPoint = oldStart;
- break;
- case 2:
- startPoint = FPoint(oldStart.x() - xSize / 2.0 * cos(angle), oldStart.y() - xSize / 2.0 * sin(angle));
- endPoint = FPoint(oldStart.x() + xSize / 2.0 * cos(angle), oldStart.y() + xSize / 2.0 * sin(angle));
- break;
- }
+ case 0:
+ break;
+ case 1:
+ startPoint.setX(startPoint.x() - xSize);
+ endPoint.setX(endPoint.x() - xSize);
+ break;
+ case 2:
+ startPoint.setXY(startPoint.x() - xSize / 2.0, startPoint.y() - ySize / 2.0);
+ endPoint.setXY(endPoint.x() - xSize / 2.0, endPoint.y() - ySize / 2.0);
+ break;
+ case 3:
+ startPoint.setY(startPoint.y() - ySize);
+ endPoint.setY(endPoint.y() - ySize);
+ break;
+ case 4:
+ startPoint.setXY(startPoint.x() - xSize, startPoint.y() - ySize);
+ endPoint.setXY(endPoint.x() - xSize, endPoint.y() - ySize);
+ break;
+ }
+ }
+ else
+ {
+ FPoint oldStart = startPoint;
+ double angle = -ySize * M_PI / 180.0;
+ switch (originPoint)
+ {
+ case 0:
+ endPoint = FPoint(startPoint.x() + xSize * cos(angle), startPoint.y() + xSize * sin(angle));
+ break;
+ case 1:
+ startPoint = FPoint(oldStart.x() - xSize * cos(angle), oldStart.y() - xSize * sin(angle));
+ endPoint = oldStart;
+ break;
+ case 2:
+ startPoint = FPoint(oldStart.x() - xSize / 2.0 * cos(angle), oldStart.y() - xSize / 2.0 * sin(angle));
+ endPoint = FPoint(oldStart.x() + xSize / 2.0 * cos(angle), oldStart.y() + xSize / 2.0 * sin(angle));
+ break;
}
- sizes->set("Remember", doRemember);
- doCreate = true;
}
- delete dia;
- return doCreate;
+ if(dia)
+ delete dia;
+ return true;
}
FRect CreateMode::adjustedRect(FPoint &firstPoint, FPoint &secondPoint)
diff --git a/Scribus/scribus/canvasmode_imageimport.cpp b/Scribus/scribus/canvasmode_imageimport.cpp
deleted file mode 100644
index 5c88ea5..0000000
--- a/Scribus/scribus/canvasmode_imageimport.cpp
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- 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.
- */
-/***************************************************************************
-* *
-* This program is free software; you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation; either version 2 of the License, or *
-* (at your option) any later version. *
-* *
-***************************************************************************/
-
-#include "canvasmode_imageimport.h"
-
-#include <QApplication>
-#include <QBuffer>
-#include <QCursor>
-#include <QEvent>
-#include <QMouseEvent>
-#include <QPainterPath>
-#include <QPixmap>
-#include <QPoint>
-#include <QRect>
-#include <QToolTip>
-#include <QDebug>
-
-#include "canvas.h"
-#include "canvasmode.h"
-#include "prefsmanager.h"
-#include "ui/propertiespalette.h"
-#include "ui/propertiespalette_image.h"
-#include "scribus.h"
-#include "scribusdoc.h"
-#include "scribusview.h"
-#include "selection.h"
-#include "util_icon.h"
-
-CanvasMode_ImageImport::CanvasMode_ImageImport(ScribusView *view) : CanvasMode(view), m_ScMW(view->m_ScMW)
-{
- Mx=0;
- My=0;
-}
-
-void CanvasMode_ImageImport::setImageList(QStringList l)
-{
- imageList = l;
- if(l.size()==1)
- {
- while(!(m_doc->m_Selection->itemAt(0)->isImageFrame()))
- m_doc->m_Selection->removeFirst();
- if(!m_doc->m_Selection->isEmpty())
- {
- setImage(m_doc->m_Selection->itemAt(0));
- m_view->requestMode(submodePaintingDone);
- }
- else
- newToolTip(l.first());
- }
- else
- newToolTip(l.first());
-}
-
-void CanvasMode_ImageImport::newToolTip(QString name)
-{
- QPainter p;
- QImage pm = QImage(80, 80, QImage::Format_ARGB32_Premultiplied);
- QBrush b(QColor(205,205,205), loadIcon("testfill.png"));
- p.begin(&pm);
- p.fillRect(QRectF(0, 0, 80, 80), b);
- QImage thumb;
- if(thumb.load(name))
- {
- thumb = thumb.scaled(80,80,Qt::KeepAspectRatio);
- p.drawImage((80 - thumb.width()) / 2, (80 - thumb.height()) / 2, thumb);
- QBuffer buffer;
- buffer.open(QIODevice::WriteOnly);
- pm.save(&buffer, "PNG");
- QByteArray ba = buffer.buffer().toBase64();
- buffer.close();
- tipText = "<p align=\"center\"><img src=\"data:image/png;base64," + QString(ba) + "\"></p>";
- }
- else
- tipText = "<p align=\"center\">" + name.right(name.lastIndexOf("/")) + "</p>";
- QToolTip::showText(QPoint(Mx,My), tipText, qApp->activeWindow());
- p.end();
-}
-
-void CanvasMode_ImageImport::drawControls(QPainter* p)
-{
- commonDrawControls(p, false);
-}
-
-void CanvasMode_ImageImport::enterEvent(QEvent *)
-{
- if (!m_canvas->m_viewMode.m_MouseButtonPressed)
- setModeCursor();
-}
-
-void CanvasMode_ImageImport::keyPressEvent(QKeyEvent *e)
-{
- int kk = e->key();
- if (m_keyRepeat)
- return;
- m_keyRepeat = true;
- e->accept();
- switch (kk)
- {
- case Qt::Key_Tab:
- imageList.prepend(imageList.takeLast());
- break;
- case Qt::Key_Backtab:
- imageList.append(imageList.takeFirst());
- break;
- case Qt::Key_Backspace:
- imageList.removeFirst();
- break;
- case Qt::Key_Escape:
- imageList.clear();
- break;
- }
- updateList();
- m_keyRepeat = false;
-}
-
-
-void CanvasMode_ImageImport::leaveEvent(QEvent *e)
-{
-}
-
-void CanvasMode_ImageImport::activate(bool fromGesture)
-{
- m_canvas->m_viewMode.m_MouseButtonPressed = false;
- m_canvas->resetRenderMode();
- m_keyRepeat = false;
- m_doc->DragP = false;
- m_doc->leaveDrag = false;
- m_canvas->m_viewMode.operItemMoving = false;
- m_canvas->m_viewMode.operItemResizing = false;
- m_view->MidButt = false;
- setModeCursor();
- if (fromGesture)
- m_view->update();
-}
-
-void CanvasMode_ImageImport::deactivate(bool forGesture)
-{
- m_view->redrawMarker->hide();
-}
-
-void CanvasMode_ImageImport::mouseDoubleClickEvent(QMouseEvent *m)
-{
- m->accept();
- m_canvas->m_viewMode.m_MouseButtonPressed = false;
- m_canvas->resetRenderMode();
-}
-
-void CanvasMode_ImageImport::mouseMoveEvent(QMouseEvent *m)
-{
- Mx = m->globalPos().x();
- My = m->globalPos().y();
- QToolTip::showText(m->globalPos(), tipText, qApp->activeWindow());
- QToolTip::showText(m->globalPos(), tipText + "<b></b>", qApp->activeWindow());
- m->accept();
- PageItem *item;
- if((item = m_canvas->itemUnderCursor(m->globalPos())) != NULL)
- {
- PageItem_ImageFrame *currItem;
- if((currItem = item->asImageFrame()) != NULL)
- m_view->setCursor(QCursor(loadIcon("DrawImageFrame.xpm")));
- else
- m_view->setCursor(QCursor(Qt::ArrowCursor));
- }
- else
- m_view->setCursor(QCursor(loadIcon("DrawImageFrame.xpm")));
- if (commonMouseMove(m))
- return;
-}
-
-void CanvasMode_ImageImport::mousePressEvent(QMouseEvent *m)
-{
- m_canvas->PaintSizeRect(QRect());
- m_canvas->m_viewMode.m_MouseButtonPressed = true;
- m_canvas->m_viewMode.operItemMoving = false;
- m_view->HaveSelRect = false;
- m_doc->DragP = false;
- m_doc->leaveDrag = false;
- m->accept();
- m_view->registerMousePress(m->globalPos());
- PageItem *item;
- if(imageList.size()>0)
- {
- if((item = m_canvas->itemUnderCursor(m->globalPos())) != NULL)
- {
- PageItem_ImageFrame *currItem;
- if((currItem = item->asImageFrame()) != NULL)
- setImage(currItem);
- }
- else
- view()->ImageAfterDraw = true;
- }
- if (m->button() == Qt::MidButton)
- {
- m_view->MidButt = true;
- if (m->modifiers() & Qt::ControlModifier)
- m_view->DrawNew();
- return;
- }
-}
-
-void CanvasMode_ImageImport::mouseReleaseEvent(QMouseEvent *m)
-{
- m_canvas->m_viewMode.m_MouseButtonPressed = false;
- m_canvas->resetRenderMode();
- m->accept();
- m_view->updateContents();
- m_canvas->setRenderModeUseBuffer(false);
- m_doc->DragP = false;
- m_doc->leaveDrag = false;
- m_canvas->m_viewMode.operItemMoving = false;
- m_canvas->m_viewMode.operItemResizing = false;
- m_view->MidButt = false;
- updateList();
-}
-
-void CanvasMode_ImageImport::setImage(PageItem *currItem)
-{
- QString fileName = imageList.takeFirst();
- currItem->EmProfile = "";
- currItem->pixm.imgInfo.isRequest = false;
- currItem->UseEmbedded = true;
- currItem->IProfile = m_doc->cmsSettings().DefaultImageRGBProfile;
- currItem->IRender = m_doc->cmsSettings().DefaultIntentImages;
- qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
- m_doc->loadPict(fileName, currItem, false, true);
- m_ScMW->propertiesPalette->imagePal->displayScaleAndOffset(currItem->imageXScale(), currItem->imageYScale(), currItem->imageXOffset(), currItem->imageYOffset());
- m_ScMW->repaint();
- qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
- m_view->DrawNew();
- currItem->emitAllToGUI();
-}
-
-void CanvasMode_ImageImport::updateList()
-{
- if(imageList.isEmpty())
- {
- m_view->requestMode(submodePaintingDone);
- QToolTip::hideText();
- }
- else
- newToolTip(imageList.first());
-}
diff --git a/Scribus/scribus/canvasmode_imageimport.h b/Scribus/scribus/canvasmode_imageimport.h
deleted file mode 100644
index 673dfba..0000000
--- a/Scribus/scribus/canvasmode_imageimport.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- 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.
- */
-/***************************************************************************
-* *
-* This program is free software; you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation; either version 2 of the License, or *
-* (at your option) any later version. *
-* *
-***************************************************************************/
-
-
-#ifndef CANVASMODE_IMAGEIMPORT_H
-#define CANVASMODE_IMAGEIMPORT_H
-
-#include <QEvent>
-#include <QMouseEvent>
-#include <QPainter>
-#include <QPixmap>
-#include <QStringList>
-
-#include "canvasmode.h"
-
-class PageItem;
-class ScribusView;
-class ScribusMainWindow;
-
-class CanvasMode_ImageImport : public CanvasMode
-{
-public:
- explicit CanvasMode_ImageImport(ScribusView* view);
- virtual ~CanvasMode_ImageImport() {}
-
- virtual void enterEvent(QEvent *);
- virtual void leaveEvent(QEvent *);
-
- virtual void activate(bool);
- virtual void deactivate(bool);
- virtual void keyPressEvent(QKeyEvent *e);
- virtual bool handleKeyEvents() { return true; }
- virtual void mouseDoubleClickEvent(QMouseEvent *m);
- virtual void mouseReleaseEvent(QMouseEvent *m);
- virtual void mouseMoveEvent(QMouseEvent *m);
- virtual void mousePressEvent(QMouseEvent *m);
- virtual void drawControls(QPainter* p);
-
- void setImageList(QStringList l);
- void setImage(PageItem* item);
- void updateList();
-
-private:
- bool m_keyRepeat;
- QString tipText;
- QStringList imageList;
- ScribusMainWindow *m_ScMW;
- double Mx, My;
- void newToolTip(QString name);
-};
-
-#endif // CANVASMODE_IMAGEIMPORT_H
diff --git a/Scribus/scribus/canvasmode_importdata.cpp b/Scribus/scribus/canvasmode_importdata.cpp
new file mode 100644
index 0000000..7d304dd
--- /dev/null
+++ b/Scribus/scribus/canvasmode_importdata.cpp
@@ -0,0 +1,337 @@
+/*
+ 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.
+ */
+/***************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+***************************************************************************/
+
+#include "canvasmode_importdata.h"
+
+#include <QApplication>
+#include <QBuffer>
+#include <QCursor>
+#include <QDrag>
+#include <QEvent>
+#include <QMessageBox>
+#include <QMouseEvent>
+#include <QPainterPath>
+#include <QPixmap>
+#include <QPoint>
+#include <QRect>
+#include <QToolTip>
+#include <QUrl>
+#include <QDebug>
+
+#include "canvas.h"
+#include "canvasmode.h"
+#include "ui/bookmarkpalette.h"
+#include "fileloader.h"
+#include "plugins/formatidlist.h"
+#include "hyphenator.h"
+#include "loadsaveplugin.h"
+#include "pageitem_textframe.h"
+#include "prefsmanager.h"
+#include "ui/propertiespalette.h"
+#include "ui/propertiespalette_image.h"
+#include "scribus.h"
+#include "scribusdoc.h"
+#include "scribusview.h"
+#include "selection.h"
+#include "ui/stylemanager.h"
+#include "util_formats.h"
+#include "util_icon.h"
+
+CanvasMode_ImportData::CanvasMode_ImportData(ScribusView *view) : CanvasMode(view), m_ScMW(view->m_ScMW)
+{
+ pw = new FDialogPreview(m_ScMW,Qt::ToolTip);
+ trans = NULL;
+}
+
+void CanvasMode_ImportData::setInformation(ImportSetup is)
+{
+ impsetup = is;
+ if(!m_doc->m_Selection->isEmpty() && is.filename.size()==1)
+ {
+ if(m_doc->m_Selection->itemAt(0)->isTextFrame())
+ {
+ setText(m_doc->m_Selection->itemAt(0)->asTextFrame());
+ m_view->requestMode(submodePaintingDone);
+ }
+ else if(m_doc->m_Selection->itemAt(0)->isImageFrame())
+ {
+ setImage(m_doc->m_Selection->itemAt(0)->asImageFrame());
+ m_view->requestMode(submodePaintingDone);
+ }
+ else
+ pw->GenPreview(is.filename.first());
+ }
+ else
+ pw->GenPreview(is.filename.first());
+}
+
+void CanvasMode_ImportData::drawControls(QPainter* p)
+{
+ commonDrawControls(p, false);
+}
+
+void CanvasMode_ImportData::enterEvent(QEvent *)
+{
+ if (!m_canvas->m_viewMode.m_MouseButtonPressed)
+ setModeCursor();
+}
+
+void CanvasMode_ImportData::keyPressEvent(QKeyEvent *e)
+{
+ int kk = e->key();
+ if (m_keyRepeat)
+ return;
+ m_keyRepeat = true;
+ e->accept();
+ switch (kk)
+ {
+ case Qt::Key_Tab:
+ impsetup.filename.prepend(impsetup.filename.takeLast());
+ break;
+ case Qt::Key_Backtab:
+ impsetup.filename.append(impsetup.filename.takeFirst());
+ break;
+ case Qt::Key_Backspace:
+ impsetup.filename.removeFirst();
+ break;
+ case Qt::Key_Escape:
+ impsetup.filename.clear();
+ break;
+ }
+ updateList();
+ m_keyRepeat = false;
+}
+
+
+void CanvasMode_ImportData::leaveEvent(QEvent *e)
+{
+ if (!m_canvas->m_viewMode.m_MouseButtonPressed)
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+}
+
+void CanvasMode_ImportData::activate(bool fromGesture)
+{
+ pw->setVisible(true);
+ m_canvas->m_viewMode.m_MouseButtonPressed = false;
+ m_canvas->resetRenderMode();
+ m_keyRepeat = false;
+ m_doc->DragP = false;
+ m_doc->leaveDrag = false;
+ m_canvas->m_viewMode.operItemMoving = false;
+ m_canvas->m_viewMode.operItemResizing = false;
+ m_view->MidButt = false;
+ setModeCursor();
+ if (fromGesture)
+ m_view->update();
+}
+
+void CanvasMode_ImportData::deactivate(bool forGesture)
+{
+ pw->hide();
+ m_view->redrawMarker->hide();
+}
+
+void CanvasMode_ImportData::mouseDoubleClickEvent(QMouseEvent *m)
+{
+ m->accept();
+ m_canvas->m_viewMode.m_MouseButtonPressed = false;
+ m_canvas->resetRenderMode();
+}
+
+void CanvasMode_ImportData::mouseMoveEvent(QMouseEvent *m)
+{
+ pw->move(m->globalPos() + QPoint(10,10));
+ m->accept();
+ if (commonMouseMove(m))
+ return;
+}
+
+void CanvasMode_ImportData::mousePressEvent(QMouseEvent *m)
+{
+ m_canvas->PaintSizeRect(QRect());
+ m_canvas->m_viewMode.m_MouseButtonPressed = true;
+ m_canvas->m_viewMode.operItemMoving = false;
+ m_view->HaveSelRect = false;
+ m_doc->DragP = false;
+ m_doc->leaveDrag = false;
+ m->accept();
+ m_view->registerMousePress(m->globalPos());
+ PageItem *item;
+ if(impsetup.filename.size()>0)
+ {
+ if(UndoManager::undoEnabled())
+ {
+ trans = new UndoTransaction(undoManager->beginTransaction(Um::NoObjectFrame, Um::IImageFrame, Um::ImportFile,"",Um::ICreate));
+ SimpleState *ss = new SimpleState(Um::ImportFile,"",Um::ICreate);
+ ss->set("FILE_LOADER","file_loader");
+ ss->set("name",impsetup.filename.first());
+ undoManager->action(m_ScMW,ss);
+ }
+ if(FormatsManager::instance()->isVectorFile(impsetup.filename.at(0)))
+ {
+ QFileInfo fi(impsetup.filename.at(0));
+ QString suffix = fi.suffix().toLower();
+ if ((suffix == "sce") || (suffix == "shape"))
+ {
+ QList<QUrl> urls;
+ QMimeData* md = new QMimeData();
+ urls.append( QUrl::fromLocalFile(impsetup.filename.takeFirst()) );
+ md->setUrls(urls);
+ QDrag* dr = new QDrag(m_ScMW);
+ dr->setMimeData(md);
+ dr->setPixmap(loadIcon("DragPix.xpm"));
+ dr->exec();
+ }
+ else
+ {
+ FileLoader *fileLoader = new FileLoader(impsetup.filename.at(0));
+ int testResult = fileLoader->testFile();
+ delete fileLoader;
+ if ((testResult != -1) && (testResult >= FORMATID_FIRSTUSER))
+ {
+ const FileFormat * fmt = LoadSavePlugin::getFormatById(testResult);
+ if( fmt )
+ {
+ m_doc->dontResize = true;
+ fmt->loadFile(impsetup.filename.takeFirst(), LoadSavePlugin::lfUseCurrentPage|LoadSavePlugin::lfInteractive);
+ m_doc->dontResize = false;
+ }
+ }
+ }
+ }
+ else if(getImageType(impsetup.filename.at(0)) == QString(""))
+ {
+ if((item = m_canvas->itemUnderCursor(m->globalPos())) != NULL)
+ {
+ if((item->asTextFrame()) != NULL)
+ setText(item->asTextFrame());
+ else
+ view()->TextAfterDraw = true;
+ }
+ else
+ view()->TextAfterDraw = true;
+ }
+ else if((item = m_canvas->itemUnderCursor(m->globalPos())) != NULL)
+ {
+ if((item->asImageFrame()) != NULL)
+ setImage(item->asImageFrame());
+ else
+ view()->ImageAfterDraw = true;
+ }
+ else
+ view()->ImageAfterDraw = true;
+ }
+ if (m->button() == Qt::MidButton)
+ {
+ m_view->MidButt = true;
+ if (m->modifiers() & Qt::ControlModifier)
+ m_view->DrawNew();
+ return;
+ }
+}
+
+void CanvasMode_ImportData::mouseReleaseEvent(QMouseEvent *m)
+{
+ m_canvas->m_viewMode.m_MouseButtonPressed = false;
+ m_canvas->resetRenderMode();
+ m->accept();
+ m_view->updateContents();
+ m_canvas->setRenderModeUseBuffer(false);
+ m_doc->DragP = false;
+ m_doc->leaveDrag = false;
+ m_canvas->m_viewMode.operItemMoving = false;
+ m_canvas->m_viewMode.operItemResizing = false;
+ m_view->MidButt = false;
+ updateList();
+}
+
+void CanvasMode_ImportData::setImage(PageItem *currItem)
+{
+ QString fileName = impsetup.filename.takeFirst();
+ currItem->EmProfile = "";
+ currItem->pixm.imgInfo.isRequest = false;
+ currItem->UseEmbedded = true;
+ currItem->IProfile = m_doc->cmsSettings().DefaultImageRGBProfile;
+ currItem->IRender = m_doc->cmsSettings().DefaultIntentImages;
+ qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
+ m_doc->loadPict(fileName, currItem, false, true);
+ // if preference is image simze value
+ if(!(1 & m_doc->prefsData().itemToolPrefs.imageDefaultSize))
+ {
+ currItem->setWidthHeight(currItem->pixm.width(),currItem->pixm.height());
+ currItem->updateClip();
+ }
+ m_ScMW->propertiesPalette->imagePal->displayScaleAndOffset(currItem->imageXScale(), currItem->imageYScale(), currItem->imageXOffset(), currItem->imageYOffset());
+ m_ScMW->repaint();
+ qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
+ m_view->DrawNew();
+ currItem->emitAllToGUI();
+}
+
+void CanvasMode_ImportData::updateList()
+{
+ if(trans)
+ {
+ trans->commit();
+ delete trans;
+ trans = NULL;
+ }
+ if(impsetup.filename.isEmpty())
+ {
+ pw->hide();
+ m_view->requestMode(submodePaintingDone);
+ }
+ else
+ pw->GenPreview(impsetup.filename.first());
+}
+
+
+void CanvasMode_ImportData::setText(PageItem_TextFrame *currItem)
+{
+ QString fileName = impsetup.filename.takeFirst();
+ gtGetText* gt = new gtGetText(m_doc);
+ if (currItem->itemText.length() != 0)
+ {
+ int t = QMessageBox::warning(m_doc->scMW(), CommonStrings::trWarning, tr("Do you really want to clear all your text?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
+ if (t == QMessageBox::No)
+ return;
+ }
+ gt->launchImporter(-1, fileName, impsetup.textOnly, impsetup.encoding, false,currItem);
+ if (m_doc->docHyphenator->AutoCheck)
+ m_doc->docHyphenator->slotHyphenate(currItem);
+ for (int a = 0; a < m_doc->Items->count(); ++a)
+ {
+ if (m_doc->Items->at(a)->isBookmark)
+ m_doc->scMW()->bookmarkPalette->BView->ChangeText(m_doc->Items->at(a));
+ }
+ m_view->DrawNew();
+ m_doc->changed();
+ m_doc->scMW()->styleMgr()->setDoc(m_doc);
+ delete gt;
+}
+
+void CanvasMode_ImportData::insertImage(int i,QString fileName)
+{
+ impsetup.filename.insert(i, fileName);
+ if(i==0)
+ {
+ pw->GenPreview(fileName);
+ }
+}
+
+void CanvasMode_ImportData::deleteImage(QString fileName)
+{
+ impsetup.filename.removeAt(impsetup.filename.indexOf(fileName));
+}
diff --git a/Scribus/scribus/canvasmode_importdata.h b/Scribus/scribus/canvasmode_importdata.h
new file mode 100644
index 0000000..3c790fb
--- /dev/null
+++ b/Scribus/scribus/canvasmode_importdata.h
@@ -0,0 +1,69 @@
+/*
+ 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.
+ */
+/***************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+***************************************************************************/
+
+
+#ifndef CANVASMODE_IMPORTDATA_H
+#define CANVASMODE_IMPORTDATA_H
+
+#include <QEvent>
+#include <QMouseEvent>
+#include <QPainter>
+#include <QPixmap>
+#include <QStringList>
+
+#include "canvasmode.h"
+#include "ui/customfdialog.h"
+#include "gtgettext.h"
+#include "undomanager.h"
+
+class PageItem;
+class ScribusView;
+class ScribusMainWindow;
+
+class CanvasMode_ImportData : public CanvasMode
+{
+public:
+ explicit CanvasMode_ImportData(ScribusView* view);
+ virtual ~CanvasMode_ImportData() {}
+
+ virtual void enterEvent(QEvent *);
+ virtual void leaveEvent(QEvent *);
+
+ virtual void activate(bool);
+ virtual void deactivate(bool);
+ virtual void keyPressEvent(QKeyEvent *e);
+ virtual bool handleKeyEvents() { return true; }
+ virtual void mouseDoubleClickEvent(QMouseEvent *m);
+ virtual void mouseReleaseEvent(QMouseEvent *m);
+ virtual void mouseMoveEvent(QMouseEvent *m);
+ virtual void mousePressEvent(QMouseEvent *m);
+ virtual void drawControls(QPainter* p);
+
+ void setInformation(ImportSetup is);
+ void insertImage(int i,QString fileName);
+ void deleteImage(QString fileName);
+ void setImage(PageItem* item);
+ void setText(PageItem_TextFrame* item);
+ void updateList();
+
+private:
+ UndoTransaction *trans;
+ FDialogPreview *pw;
+ bool m_keyRepeat;
+ ImportSetup impsetup;
+ ScribusMainWindow *m_ScMW;
+};
+
+#endif // CANVASMODE_IMPORTDATA_H
diff --git a/Scribus/scribus/canvasmode_objimport.cpp b/Scribus/scribus/canvasmode_objimport.cpp
index 3b1e1ea..f70325b 100644
--- a/Scribus/scribus/canvasmode_objimport.cpp
+++ b/Scribus/scribus/canvasmode_objimport.cpp
@@ -180,8 +180,8 @@ void CanvasMode_ObjImport::mousePressEvent(QMouseEvent *m)
delete undoTransaction;
undoTransaction = NULL;
}
- // Return to normal mode
- m_view->requestMode(modeNormal);
+ // Return to Import data mode
+ m_view->requestMode(modeImportData);
}
}
diff --git a/Scribus/scribus/gtgettext.cpp b/Scribus/scribus/gtgettext.cpp
index 7355a84..4afde4b 100644
--- a/Scribus/scribus/gtgettext.cpp
+++ b/Scribus/scribus/gtgettext.cpp
@@ -35,14 +35,13 @@ for which a new license (GPL+exception) is in place.
//Added by qt3to4:
#include <QPixmap>
#include "util_icon.h"
+#include "util_formats.h"
// Constructor
gtGetText::gtGetText(ScribusDoc* doc)
{
// Attach to the active document
m_Doc=doc;
- // Load the plugins array.
- loadImporterPlugins();
} // gtGetText::gtGetText(ScribusDoc* doc)
// Look at the results of the file selection dialog and figure out if you need to use an importer.
@@ -61,6 +60,7 @@ void gtGetText::launchImporter(int importer, const QString& filename, bool textO
{
// Attempt to determine the importer based on the file's extension.
// Create a Qstring with what could be an extension.
+ QMap<QString, ImporterData*> importerMap = FormatsManager::instance()->getMap();
QString fend = filename.right(filename.length() - filename.lastIndexOf(".") - 1);
QString fendL(fend.toLower());
// Look for that extension in the importer QMap.
@@ -79,19 +79,14 @@ void gtGetText::launchImporter(int importer, const QString& filename, bool textO
dias = new gtDialogs();
// Pop up the dialog asking the user to select the type from our list (ilist) of
// importable file types. If one is not selected, set callImporter to false.
- callImporter = dias->runImporterDialog(ilist);
+ callImporter = dias->runImporterDialog(FormatsManager::instance()->getIlist(),filename);
// If we're gonna call an importer, we need to copy it's struct to ida.
if (callImporter)
- ida = importers[dias->getImporter()];
+ ida = (FormatsManager::instance()->getImporters())[dias->getImporter()];
// Destroy the diag
delete dias;
- } // else - if (importerMap.find(fend) != importerMap.end())
+ }
}
- else // If we know which importer to use
- {
- // Copy the importer's struct to ida.
- ida = importers[importer];
- } // else - if (importer == -1)
// Create a target text frame for the imported text and assign it to the parameter "target"
PageItem* targetFrame=target;
@@ -108,116 +103,9 @@ void gtGetText::launchImporter(int importer, const QString& filename, bool textO
} //void gtGetText::launchImporter(int importer, const QString& filename, bool textOnly,
// const QString& encoding, bool append, PageItem* target)
-// Find the available plugins based on the environment, validate they load, and
-// create quick lookup mappings.
-void gtGetText::loadImporterPlugins()
-{
- // Get the path to the plugins
- QString gtdir = ScPaths::instance().pluginDir();
- // Append the gettext path to the plugin
- gtdir += "gettext";
- // Set the search parameteer for the platform specific extension for the plugins ( DLL, so, etc. )
- QString libPattern = QString("*.%1*").arg(PluginManager::platformDllExtension());
- // Search for matches.
- QDir d(gtdir, libPattern, QDir::Name, (QDir::Filter) PluginManager::platformDllSearchFlags());
-
- // Initialize a structure for the importers found
- struct ImporterData ida;
- ida.fileFormatName = "";
-
- // Check and see if the directory existed and if the count of files matching is greater than 0.
- if ((d.exists()) && (d.count() != 0))
- {
- // loop through the entries.
- for (uint dc = 0; dc < d.count(); ++dc)
- {
- // Verify the Plugin will load. If it does, collect the info on the plugin ( Name, extension, format, etc )
- if (DLLName(d[dc], &ida.fileFormatName, &ida.fileEndings))
- {
- // no plugin's "format name" marks "don't load plug"
- if (ida.fileFormatName.isNull())
- continue;
- // Store the path to the plugin.
- ida.soFilePath = d[dc];
- // If the plugin path does not begin with /, prepend a /.
- if (ida.soFilePath.left(1) != "/")
- ida.soFilePath = "/" + ida.soFilePath;
- // Add the plugin data to the end of the importer's vector.
- importers.push_back(ida);
- } // if (DLLName(d[dc], &ida.fileFormatName, &ida.fileEndings))
- } // for (uint dc = 0; dc < d.count(); ++dc)
- } // if ((d.exists()) && (d.count() != 0))
- // Create the Importer Extension to Plugin data qmap.
- createMap();
-} // void gtGetText::loadImporterPlugins()
-
-// Creates the dialog for the user to import a file based on the supported file formats.
-ImportSetup gtGetText::run()
-{
- // Initialize a filters list.
- QString filters = "";
- // Create a string for the "All supported files filter". Start with the label then loop through
- // the importers vector and add all of the file extensions supported.
- QString allSupported = QObject::tr("All Supported Formats") + " (";
- // Loop through the importers vector.
- for (uint i = 0; i < importers.size(); ++i)
- {
- // If there are any file extnsions declared by the importer
- if (importers[i].fileEndings.count() != 0)
- {
- // Add the importer name to the filters list
- filters += importers[i].fileFormatName + " (";
- // Loop though the extensions supported by the importer
- for (int j = 0; j < importers[i].fileEndings.count(); ++j)
- {
- // Add the extension to both the filter and allSupported strings
- filters += "*." + importers[i].fileEndings[j] + " ";
- allSupported += "*." + importers[i].fileEndings[j] + " ";
- } // for (int j = 0; j < importers[i].fileEndings.count(); ++j)
- // Trim the Qstring
- filters = filters.trimmed();
- // Append "entry of entry" information to the end of the filter.
- filters += ");;";
- } // if (importers[i].fileEndings.count() != 0)
- } // for (uint i = 0; i < importers.size(); ++i)
- // Trim the allSupported QString and append "end of entry" data to the end of it.
- allSupported = allSupported.trimmed();
- allSupported += ");;";
- // Prepend allSupported to the filters Qstring.
- filters = allSupported + filters;
- // Add an "all files" entry to the end of the filters QString
- filters += QObject::tr("All Files (*)");
- // Populate ilist with the file importer names.
- for (uint i = 0; i < importers.size(); ++i)
- ilist.append(importers[i].fileFormatName);
- // Create a new dialog.
- dias = new gtDialogs();
- // Create a new ImportSetup struct
- ImportSetup impsetup;
- // INitialize runDialog to false
- impsetup.runDialog=false;
- // If we get a true back from the File selection Dialog ( which we send our filters and extensions lists )
- if (dias->runFileDialog(filters, ilist))
- {
- // Set the runDialog to true
- impsetup.runDialog=true;
- // Copy the other values for the struct from the dialog results
- impsetup.encoding=dias->getEncoding();
- impsetup.filename=dias->getFileName();
- impsetup.importer=dias->getImporter();
- impsetup.textOnly=dias->importTextOnly();
-// launchImporter(dias->getImporter(), dias->getFileName(),
-// dias->importTextOnly(), dias->getEncoding(), append);
- } // if (dias->runFileDialog(filters, ilist))
- // Destroy the dialog.
- delete dias;
- // Return the ImportSetup struct.
- return impsetup;
-} // ImportSetup gtGetText::run()
-
// Loads, validates, and executes the Importer code.
void gtGetText::CallDLL(const ImporterData& idata, const QString& filePath,
- const QString& encoding, bool textOnly, bool append, PageItem* importItem)
+ const QString& encoding, bool textOnly, bool append, PageItem* importItem)
{
// Pointer for the loaded plugin.
void* gtplugin;
@@ -246,7 +134,7 @@ void gtGetText::CallDLL(const ImporterData& idata, const QString& filePath,
importItem->itemText.clear();
// Execute the importer's "GetText2" method.
(*fp_GetText2)(filePath, encoding, textOnly, importItem);
- } // if (!fp_GetText2)
+ } // if (!fp_GetText2)
else
{
// Attempt to map the old GetText method to to the pointer via the PluginManager. Store the result in fp_GetText.
@@ -273,73 +161,6 @@ void gtGetText::CallDLL(const ImporterData& idata, const QString& filePath,
} // void gtGetText::CallDLL(const ImporterData& idata, const QString& filePath,
// const QString& encoding, bool textOnly, bool append, PageItem* importItem)
-// Loads the "DLL", validates the importer is good, populates the passed parameters with
-// the plugin information.
-bool gtGetText::DLLName(QString name, QString *ffName, QStringList *fEndings)
-{
- // Pointer to the plugin, once loaded
- void* gtplugin;
- // typedef of Qstring to map the importer name (FileFormatName) method results to.
- typedef QString (*sdem0)();
- // typedef of QStringList to map the file extensions supported method results to.
- typedef QStringList (*sdem1)();
- // The actual importer name object
- sdem0 fp_FileFormatName;
- // The actual extensions supported object
- sdem1 fp_FileExtensions;
- // Initialise the plugin file path ( with filename )
- QString pluginFilePath = QString("%1/gettext/%2").arg(ScPaths::instance().pluginDir()).arg(name);
- // Attempt to load the plugin.
- gtplugin = PluginManager::loadDLL(pluginFilePath);
- // if gtplugin is NULL we were unable to load the plugin. Return an error and exit the method.
- if (!gtplugin)
- {
- qWarning("Failed to load plugin %s", pluginFilePath.toLatin1().constData());
- return false;
- }
- // Attempt to resolve the plugin symbol to the importer name (FileFormatName)
- fp_FileFormatName = (sdem0) PluginManager::resolveSym( gtplugin, "FileFormatName");
- // if fp_FileFormatName is NULL, we could not find the FileFormatName symbol. The plugin is incomplete.
- // Report an error, unload the plugin, and exit the method.
- if (!fp_FileFormatName)
- {
- qWarning("Failed to get FileFormatName() from %s", pluginFilePath.toLatin1().constData());
- PluginManager::unloadDLL(gtplugin);
- return false;
- }
- // Attempt to resolve the plugin symbol to the list of supported file extensions.
- fp_FileExtensions = (sdem1) PluginManager::resolveSym( gtplugin, "FileExtensions");
- // if fp_FileExtensions is NULL, we could not find the FileExtensions symbol. The plugin is incomplete.
- // Report an error, unload the plugin, and exit the method.
- if (!fp_FileExtensions)
- {
- qWarning("Failed to get FileExtensions() from %s", pluginFilePath.toLatin1().constData());
- PluginManager::unloadDLL(gtplugin);
- return false;
- }
- // Set the format name based on the resolved method.
- *ffName = (*fp_FileFormatName)();
- // Set the extensions list based on the resolved method.
- *fEndings = (*fp_FileExtensions)();
- // Unload the plugin
- PluginManager::unloadDLL(gtplugin);
- // Successfully return!
- return true;
-} // bool gtGetText::DLLName(QString name, QString *ffName, QStringList *fEndings)
-
-// Create the importer Qmap.
-void gtGetText::createMap()
-{
- // Loop through the importers Vector
- for (uint i = 0; i < importers.size(); ++i)
- {
- // Loop through each file extension the importer uses/importers and create an individual
- // Qmap entry for it.
- for (int j = 0; j < importers[i].fileEndings.count(); ++j)
- importerMap.insert(importers[i].fileEndings[j], &importers[i]);
- } // for (uint i = 0; i < importers.size(); ++i)
-} // void gtGetText::createMap()
-
// Destructor
gtGetText::~gtGetText()
{
diff --git a/Scribus/scribus/gtgettext.h b/Scribus/scribus/gtgettext.h
index ff30238..a247b24 100644
--- a/Scribus/scribus/gtgettext.h
+++ b/Scribus/scribus/gtgettext.h
@@ -39,51 +39,26 @@ for which a new license (GPL+exception) is in place.
#include "scconfig.h"
#include "scribusapi.h"
#include "scfonts.h"
+#include "util_formats.h"
class PageItem;
class ScribusDoc;
class gtDialogs;
-// A struct for holding the Importer specific information.
-struct ImporterData {
- QString soFilePath; // Path to the Importer
- QString fileFormatName; // Name of the Importer
- QStringList fileEndings; // Array of filenames supported by the importer
-};
-
-// A Struct for holding the results of the File selection Dialog
-struct ImportSetup {
- bool runDialog; // Did the dialog run correctly?
- int importer; // Which importer was selected?
- QString filename; // What filename is to be loaded?
- bool textOnly; // Do we import as text only?
- QString encoding; // File encoding
-};
-
/*
- GetText handles the open file dialog and importer plugins loading and launching.
+ GetText handles importer plugins loading and launching.
*/
class SCRIBUS_API gtGetText
{
private:
- std::vector<ImporterData> importers; // Vector of the loaded importers
- QMap<QString, ImporterData*> importerMap; // QMap of the supported extensions to their relevant importers entry for easy access
- void loadImporterPlugins(); // Find the available plugins based on the environment, validate they load, and
- // create quick lookup mappings.
void CallDLL(const ImporterData& idata, const QString& filePath,
- const QString& encoding, bool textOnly, bool append, PageItem* importItem);
+ const QString& encoding, bool textOnly, bool append, PageItem* importItem);
// Loads, validates, and executes the Importer code.
- bool DLLName(QString name, QString *ffName, QStringList *fileEndings);
- // Loads the "DLL", validates the importer is good, populates the passed parameters with
- // the plugin information.
- void createMap(); // Create the importer Qmap.
gtDialogs* dias; // File Selection Dialog pointer.
- QStringList ilist; // List of supported importers, used with dialogs
ScribusDoc* m_Doc; // Which document are we working with.
public:
gtGetText(ScribusDoc* doc); // Constructor
~gtGetText(); // Destructor
- ImportSetup run(); // Creates the dialog for the user to import a file based on the supported file formats.
void launchImporter(int importer, const QString& filename, bool textOnly, const QString& encoding, bool append, PageItem* target=0);
// Look at the results of the file selection dialog and figure out if you need to use an importer.
// Prompt the user if the importer to use isn't obvious.
diff --git a/Scribus/scribus/pageitem.cpp b/Scribus/scribus/pageitem.cpp
index c74ed26..1d21c05 100644
--- a/Scribus/scribus/pageitem.cpp
+++ b/Scribus/scribus/pageitem.cpp
@@ -4996,6 +4996,14 @@ void PageItem::restore(UndoState *state, bool isUndo)
restoreUniteItem(ss, isUndo);
else if (ss->contains("SPLITITEM"))
restoreSplitItem(ss, isUndo);
+ else if (ss->contains("CREATE_MESH_GRAD"))
+ restoreCreateMeshGrad(ss, isUndo);
+ else if (ss->contains("MOVE_MESH_GRAD"))
+ restoreMoveMeshGrad(ss, isUndo);
+ else if (ss->contains("RESET_MESH_GRAD"))
+ restoreResetMeshGrad(ss, isUndo);
+ else if (ss->contains("REMOVE_MESH_PATCH"))
+ restoreRemoveMeshPatch(ss, isUndo);
else if (ss->contains("MIRROR_PATH_H"))
{
bool editContour = m_Doc->nodeEdit.isContourLine;
@@ -5565,6 +5573,7 @@ void PageItem::restoreTransform(SimpleState *ss, bool isUndo)
}
}
+
void PageItem::restoreSnapToPatchGrid(SimpleState *state, bool isUndo)
{
if (isUndo)
@@ -5574,7 +5583,6 @@ void PageItem::restoreSnapToPatchGrid(SimpleState *state, bool isUndo)
update();
}
-
void PageItem::restoreMaskType(SimpleState *state, bool isUndo)
{
if (isUndo)
@@ -9082,7 +9090,7 @@ bool PageItem::loadImage(const QString& filename, const bool reload, const int g
}
}
}
-
+
Pfile = fi.absoluteFilePath();
if (reload && pixm.imgInfo.PDSpathData.contains(clPath))
{
@@ -9423,7 +9431,7 @@ void PageItem::AdjustPictScale()
{
if (itemType() != PageItem::ImageFrame)
return;
- if (ScaleType)
+ if (ScaleType || !(doc()->prefsData().itemToolPrefs.imageDefaultSize &1))
return;
if (OrigW == 0 || OrigH == 0)
return;
diff --git a/Scribus/scribus/pageitem_imageframe.cpp b/Scribus/scribus/pageitem_imageframe.cpp
index 9f57ef6..8499a21 100644
--- a/Scribus/scribus/pageitem_imageframe.cpp
+++ b/Scribus/scribus/pageitem_imageframe.cpp
@@ -424,7 +424,6 @@ bool PageItem_ImageFrame::createInfoGroup(QFrame *infoGroup, QGridLayout *infoGr
void PageItem_ImageFrame::applicableActions(QStringList & actionList)
{
- actionList << "fileImportImage";
actionList << "itemConvertToTextFrame";
actionList << "itemImageIsVisible";
actionList << "itemPreviewFull";
diff --git a/Scribus/scribus/pageitem_textframe.cpp b/Scribus/scribus/pageitem_textframe.cpp
index a5490d1..be812b3 100644
--- a/Scribus/scribus/pageitem_textframe.cpp
+++ b/Scribus/scribus/pageitem_textframe.cpp
@@ -5214,14 +5214,13 @@ void PageItem_TextFrame::togleEditModeActions()
void PageItem_TextFrame::applicableActions(QStringList & actionList)
{
+ actionList << "fileImport";
actionList << "insertMarkVariableText";
if (!m_Doc->masterPageMode())
actionList << "insertMarkAnchor";
//notes frames are not simply text frames
if (isNoteFrame())
return;
- actionList << "fileImportText";
- actionList << "fileImportAppendText";
actionList << "toolsEditWithStoryEditor";
actionList << "insertSampleText";
actionList << "itemPDFIsAnnotation";
diff --git a/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp b/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
index 407e6a8..f8192b5 100644
--- a/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
+++ b/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
@@ -4585,6 +4585,7 @@ PageItem* Scribus150Format::pasteItem(ScribusDoc *doc, ScXmlStreamAttributes& at
break;
}
+ UndoManager::instance()->setUndoEnabled(false);
currItem->FrameType = attrs.valueAsInt("FRTYPE", 0);
int startArrowIndex = attrs.valueAsInt("startArrowIndex", 0);
if ((startArrowIndex < 0) || (startArrowIndex > static_cast<int>(doc->arrowStyles().size())))
@@ -5213,6 +5214,7 @@ PageItem* Scribus150Format::pasteItem(ScribusDoc *doc, ScXmlStreamAttributes& at
//currItem->setRedrawBounding();
//currItem->OwnPage = view->OnPage(currItem);
+ UndoManager::instance()->setUndoEnabled(true);
return currItem;
}
diff --git a/Scribus/scribus/plugins/scripter/api_Scripter.dialogs.mainWindow.api b/Scribus/scribus/plugins/scripter/api_Scripter.dialogs.mainWindow.api
index a2f6556..cfecd46 100644
--- a/Scribus/scribus/plugins/scripter/api_Scripter.dialogs.mainWindow.api
+++ b/Scribus/scribus/plugins/scripter/api_Scripter.dialogs.mainWindow.api
@@ -804,14 +804,6 @@
*/
/**
-* Scripter.dialogs.mainWindow.slotGetContent2()
-*/
-
-/**
-* Scripter.dialogs.mainWindow.slotFileAppend()
-*/
-
-/**
* Scripter.dialogs.mainWindow.removeRecent(fn)
* fn is a QString
*/
@@ -840,10 +832,6 @@
*/
/**
-* Scripter.dialogs.mainWindow.importVectorFile()
-*/
-
-/**
* Scripter.dialogs.mainWindow.rebuildLayersList()
*/
diff --git a/Scribus/scribus/plugins/scripter/doc/reference_dialogs.html b/Scribus/scribus/plugins/scripter/doc/reference_dialogs.html
index ced0f38..abf7511 100644
--- a/Scribus/scribus/plugins/scripter/doc/reference_dialogs.html
+++ b/Scribus/scribus/plugins/scripter/doc/reference_dialogs.html
@@ -5194,10 +5194,6 @@
<tr><td colspan="2"><hr></td></tr>
<tr>
- <td><strong>ScripterNG.dialogs.mainWindow.importVectorFile()</strong></td>
- <td><strong>PROCEDURE</strong></td>
-</tr>
-<tr>
<td colspan="2">
<em></em>
</td>
@@ -7418,11 +7414,6 @@
</td>
</tr>
<tr><td colspan="2"><hr></td></tr>
-
-<tr>
- <td><strong>ScripterNG.dialogs.mainWindow.slotFileAppend()</strong></td>
- <td><strong>PROCEDURE</strong></td>
-</tr>
<tr>
<td colspan="2">
<em></em>
@@ -7607,11 +7598,6 @@
</td>
</tr>
<tr><td colspan="2"><hr></td></tr>
-
-<tr>
- <td><strong>ScripterNG.dialogs.mainWindow.slotGetContent2()</strong></td>
- <td><strong>PROCEDURE</strong></td>
-</tr>
<tr>
<td colspan="2">
<em></em>
diff --git a/Scribus/scribus/plugins/scriptplugin/scripts/InfoBox.py b/Scribus/scribus/plugins/scriptplugin/scripts/InfoBox.py
index f2bf0a2..3d91a8e 100644
--- a/Scribus/scribus/plugins/scriptplugin/scripts/InfoBox.py
+++ b/Scribus/scribus/plugins/scriptplugin/scripts/InfoBox.py
@@ -61,7 +61,6 @@ except ImportError:
print "Unable to import the 'scribus' module. This script will only run within"
print "the Python interpreter embedded in Scribus. Try Script->Execute Script."
sys.exit(1)
-
pil_found = 1
try:
diff --git a/Scribus/scribus/prefsmanager.cpp b/Scribus/scribus/prefsmanager.cpp
index be10da4..2f068f5 100644
--- a/Scribus/scribus/prefsmanager.cpp
+++ b/Scribus/scribus/prefsmanager.cpp
@@ -289,6 +289,10 @@ void PrefsManager::initDefaults()
appPrefs.itemToolPrefs.imageAspectRatio = true;
appPrefs.itemToolPrefs.imageLowResType = 1;
appPrefs.itemToolPrefs.imageUseEmbeddedPath = false;
+ appPrefs.itemToolPrefs.imageDefaultSize = 3;
+ appPrefs.itemToolPrefs.imageDefaultWidth = 100;
+ appPrefs.itemToolPrefs.imageDefaultHeight = 100;
+ appPrefs.itemToolPrefs.imageDefaultBasePoint = 0;
// appPrefs.PSize = 40;
appPrefs.printerPrefs.ClipMargin = false;
appPrefs.printerPrefs.GCRMode = false;
@@ -1503,6 +1507,10 @@ bool PrefsManager::WritePref(QString ho)
dcItemTools.setAttribute("ImageStrokeColorShade",appPrefs.itemToolPrefs.imageStrokeColorShade);
dcItemTools.setAttribute("ImageScaleX",ScCLocale::toQStringC(appPrefs.itemToolPrefs.imageScaleX));
dcItemTools.setAttribute("ImageScaleY",ScCLocale::toQStringC(appPrefs.itemToolPrefs.imageScaleY));
+ dcItemTools.setAttribute("ImageDefaultSize",appPrefs.itemToolPrefs.imageDefaultSize);
+ dcItemTools.setAttribute("ImageDefaultWidth",ScCLocale::toQStringC(appPrefs.itemToolPrefs.imageDefaultWidth));
+ dcItemTools.setAttribute("ImageDefaultHeight",ScCLocale::toQStringC(appPrefs.itemToolPrefs.imageDefaultHeight));
+ dcItemTools.setAttribute("ImageDefaultBasePoint",appPrefs.itemToolPrefs.imageDefaultBasePoint);
dcItemTools.setAttribute("PolygonCorners", appPrefs.itemToolPrefs.polyCorners);
dcItemTools.setAttribute("PolygonFactor", ScCLocale::toQStringC(appPrefs.itemToolPrefs.polyFactor));
dcItemTools.setAttribute("PolygonRotation", ScCLocale::toQStringC(appPrefs.itemToolPrefs.polyRotation));
@@ -2114,6 +2122,10 @@ bool PrefsManager::ReadPref(QString ho)
appPrefs.itemToolPrefs.imageStrokeColorShade = dc.attribute("ImageStrokeColorShade", "100").toInt();
appPrefs.itemToolPrefs.imageScaleX = ScCLocale::toDoubleC(dc.attribute("ImageScaleX"), 1.0);
appPrefs.itemToolPrefs.imageScaleY = ScCLocale::toDoubleC(dc.attribute("ImageScaleY"), 1.0);
+ appPrefs.itemToolPrefs.imageDefaultSize = dc.attribute("ImageDefaultSize").toInt();
+ appPrefs.itemToolPrefs.imageDefaultBasePoint = dc.attribute("ImageDefaultBasePoint").toInt();
+ appPrefs.itemToolPrefs.imageDefaultWidth = ScCLocale::toDoubleC(dc.attribute("ImageDefaultWidth"), 100.0);
+ appPrefs.itemToolPrefs.imageDefaultHeight = ScCLocale::toDoubleC(dc.attribute("ImageDefaultHeight"), 100.0);
appPrefs.itemToolPrefs.imageScaleType = static_cast<bool>(dc.attribute("PSCALE", "0").toInt());
appPrefs.itemToolPrefs.imageAspectRatio = static_cast<bool>(dc.attribute("PASPECT", "1").toInt());
appPrefs.itemToolPrefs.imageUseEmbeddedPath = static_cast<bool>(dc.attribute("EmbeddedPath", "0").toInt());
diff --git a/Scribus/scribus/prefsstructs.h b/Scribus/scribus/prefsstructs.h
index cc58c93..2175614 100644
--- a/Scribus/scribus/prefsstructs.h
+++ b/Scribus/scribus/prefsstructs.h
@@ -237,6 +237,10 @@ struct ItemToolPrefs
bool imageAspectRatio; //! Use stored aspect ratio for the image
int imageLowResType; //! Preview type for an image frame
bool imageUseEmbeddedPath; //! Use embedded path, eg from an EPS etc.
+ int imageDefaultSize; //! Default behaviour for oneclick event
+ double imageDefaultHeight; //! Default height value for oneclick event
+ double imageDefaultWidth; //! Defaut width value for oneclick event
+ double imageDefaultBasePoint; //! Defaut basepoint for oneclick event
/* Calligraphic Pen Tool */
QString calligrapicPenFillColor; //! Default calligrapicPen fill color
QString calligrapicPenLineColor; //! Default calligrapicPen line color
diff --git a/Scribus/scribus/scpage.cpp b/Scribus/scribus/scpage.cpp
index dc04495..e0e1f2e 100644
--- a/Scribus/scribus/scpage.cpp
+++ b/Scribus/scribus/scpage.cpp
@@ -311,6 +311,8 @@ void ScPage::restorePageItemCreation(ScItemState<PageItem*> *state, bool isUndo)
return;
int stateCode = state->transactionCode;
PageItem *ite = state->getItem();
+ bool old_lock =ite->locked();
+ ite->setLocked(false);
bool oldMPMode=m_Doc->masterPageMode();
if ((stateCode == 0) || (stateCode == 1))
{
@@ -344,6 +346,7 @@ void ScPage::restorePageItemCreation(ScItemState<PageItem*> *state, bool isUndo)
}
m_Doc->setMasterPageMode(oldMPMode);
m_Doc->m_Selection->delaySignalsOff();
+ ite->setLocked(old_lock);
}
void ScPage::restorePageItemDeletion(ScItemState< QList<PageItem*> > *state, bool isUndo)
diff --git a/Scribus/scribus/scribus.cpp b/Scribus/scribus/scribus.cpp
index 24ff0f4..a5faa43 100644
--- a/Scribus/scribus/scribus.cpp
+++ b/Scribus/scribus/scribus.cpp
@@ -86,7 +86,7 @@ for which a new license (GPL+exception) is in place.
#include "actionmanager.h"
#include "canvasmode.h"
-#include "canvasmode_imageimport.h"
+#include "canvasmode_importdata.h"
#include "commonstrings.h"
#include "desaxe/digester.h"
#include "desaxe/saxXML.h"
@@ -738,12 +738,7 @@ void ScribusMainWindow::initMenuBar()
scrMenuMgr->addMenuItem(scrActions["fileRevert"], "File", false);
scrMenuMgr->addMenuItem(scrActions["fileCollect"], "File", false);
scrMenuMgr->addMenuSeparator("File");
- scrMenuMgr->createMenu("FileImport", tr("&Import"), "File");
- scrMenuMgr->addMenuItem(scrActions["fileImportText"], "FileImport", false);
-// scrMenuMgr->addMenuItem(scrActions["fileImportText2"], "FileImport", false);
- scrMenuMgr->addMenuItem(scrActions["fileImportAppendText"], "FileImport", false);
- scrMenuMgr->addMenuItem(scrActions["fileImportImage"], "FileImport", false);
- scrMenuMgr->addMenuItem(scrActions["fileImportVector"], "FileImport", true);
+ scrMenuMgr->addMenuItem(scrActions["fileImport"], "File", true);
scrMenuMgr->createMenu("FileExport", tr("&Export"), "File");
scrMenuMgr->addMenuItem(scrActions["fileExportText"], "FileExport", false);
@@ -1476,7 +1471,7 @@ void ScribusMainWindow::keyPressEvent(QKeyEvent *k)
case modeEditWeldPoint:
case modeEyeDropper:
case modeImportObject:
- case modeImportImage:
+ case modeImportData:
case modePanning:
view->requestMode(modeNormal);
break;
@@ -2660,7 +2655,6 @@ void ScribusMainWindow::HaveNewDoc()
connect(view, SIGNAL(CutItem()), this, SLOT(slotEditCut()), Qt::UniqueConnection);
connect(view, SIGNAL(LoadPic()), this, SLOT(slotGetContent()), Qt::UniqueConnection);
connect(view, SIGNAL(StatusPic()), this, SLOT(StatusPic()), Qt::UniqueConnection);
- connect(view, SIGNAL(AppendText()), this, SLOT(slotFileAppend()), Qt::UniqueConnection);
connect(view, SIGNAL(AnnotProps()), this, SLOT(ModifyAnnot()), Qt::UniqueConnection);
connect(view, SIGNAL(LoadElem(QString, double ,double, bool, bool, ScribusDoc *, ScribusView*)), this, SLOT(slotElemRead(QString, double, double, bool, bool, ScribusDoc *, ScribusView*)), Qt::UniqueConnection);
connect(view, SIGNAL(AddBM(PageItem *)), this, SLOT(AddBookMark(PageItem *)), Qt::UniqueConnection);
@@ -2807,10 +2801,6 @@ void ScribusMainWindow::HaveNewSel(int SelectedType)
switch (SelectedType)
{
case -1: // None
- scrActions["fileImportText"]->setEnabled(false);
- scrActions["fileImportText2"]->setEnabled(false);
- scrActions["fileImportImage"]->setEnabled(false);
- scrActions["fileImportAppendText"]->setEnabled(false);
scrActions["fileExportText"]->setEnabled(false);
scrActions["itemDuplicate"]->setEnabled(false);
scrActions["itemMulDuplicate"]->setEnabled(false);
@@ -2867,10 +2857,6 @@ void ScribusMainWindow::HaveNewSel(int SelectedType)
propertiesPalette->setGradientEditMode(false);
break;
case PageItem::ImageFrame: //Image Frame
- scrActions["fileImportAppendText"]->setEnabled(false);
- scrActions["fileImportText"]->setEnabled(false);
- scrActions["fileImportText2"]->setEnabled(false);
- scrActions["fileImportImage"]->setEnabled(true);
scrActions["editCut"]->setEnabled(true);
scrActions["editCopy"]->setEnabled(true);
scrMenuMgr->setMenuEnabled("EditContents", true);
@@ -2920,10 +2906,6 @@ void ScribusMainWindow::HaveNewSel(int SelectedType)
break;
case PageItem::TextFrame: //Text Frame
- scrActions["fileImportText"]->setEnabled(true);
- scrActions["fileImportText2"]->setEnabled(true);
- scrActions["fileImportImage"]->setEnabled(false);
- scrActions["fileImportAppendText"]->setEnabled(true);
scrActions["fileExportText"]->setEnabled(true);
scrActions["editCut"]->setEnabled(true);
scrActions["editCopy"]->setEnabled(true);
@@ -3039,10 +3021,6 @@ void ScribusMainWindow::HaveNewSel(int SelectedType)
}
break;
case PageItem::PathText: //Path Text
- scrActions["fileImportText"]->setEnabled(true);
- scrActions["fileImportText2"]->setEnabled(true);
- scrActions["fileImportImage"]->setEnabled(false);
- scrActions["fileImportAppendText"]->setEnabled(true);
scrActions["fileExportText"]->setEnabled(true);
scrActions["editCut"]->setEnabled(true);
scrActions["editCopy"]->setEnabled(true);
@@ -3104,10 +3082,6 @@ void ScribusMainWindow::HaveNewSel(int SelectedType)
}
break;
default:
- scrActions["fileImportText"]->setEnabled(false);
- scrActions["fileImportText2"]->setEnabled(false);
- scrActions["fileImportImage"]->setEnabled(false);
- scrActions["fileImportAppendText"]->setEnabled(false);
scrActions["fileExportText"]->setEnabled(false);
scrActions["editCut"]->setEnabled(true);
scrActions["editCopy"]->setEnabled(true);
@@ -3636,78 +3610,6 @@ void ScribusMainWindow::doPasteRecent(QString data)
}
}
-void ScribusMainWindow::importVectorFile()
-{
- QString fileName = "";
- QStringList formats;
- QString allFormats = tr("All Supported Formats")+" (";
- int fmtCode = FORMATID_FIRSTUSER;
- const FileFormat *fmt = LoadSavePlugin::getFormatById(fmtCode);
- while (fmt != 0)
- {
- if (fmt->load)
- {
- formats.append(fmt->filter);
- int an = fmt->filter.indexOf("(");
- int en = fmt->filter.indexOf(")");
- while (an != -1)
- {
- allFormats += fmt->filter.mid(an+1, en-an-1)+" ";
- an = fmt->filter.indexOf("(", en);
- en = fmt->filter.indexOf(")", an);
- }
- }
- fmtCode++;
- fmt = LoadSavePlugin::getFormatById(fmtCode);
- }
- allFormats += "*.sce *.SCE);;";
- formats.append("Scribus Objects (*.sce *.SCE)");
- qSort(formats);
- allFormats += formats.join(";;");
- PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
- QString wdir = dirs->get("pastefile", ".");
- CustomFDialog dia(this, wdir, tr("Open"), allFormats, fdExistingFiles);
- if (dia.exec() == QDialog::Accepted)
- fileName = dia.selectedFile();
- else
- return;
- if (!fileName.isEmpty())
- {
- PrefsManager::instance()->prefsFile->getContext("dirs")->set("pastefile", fileName.left(fileName.lastIndexOf("/")));
- QFileInfo fi(fileName);
- QString suffix = fi.suffix().toLower();
- if ((suffix == "sce") || (suffix == "shape"))
- {
- QList<QUrl> urls;
- QMimeData* md = new QMimeData();
- urls.append( QUrl::fromLocalFile(fileName) );
- md->setUrls(urls);
- QDrag* dr = new QDrag(this);
- dr->setMimeData(md);
- const QPixmap& dragCursor = loadIcon("DragPix.xpm");
- dr->setPixmap(dragCursor);
- dr->exec();
- }
- else
- {
- FileLoader *fileLoader = new FileLoader(fileName);
- int testResult = fileLoader->testFile();
- delete fileLoader;
- if ((testResult != -1) && (testResult >= FORMATID_FIRSTUSER))
- {
- const FileFormat * fmt = LoadSavePlugin::getFormatById(testResult);
- if( fmt )
- {
- doc->dontResize = true;
- fmt->loadFile(fileName, LoadSavePlugin::lfUseCurrentPage|LoadSavePlugin::lfInteractive);
- doc->dontResize = false;
- }
- }
- }
- requestUpdate(reqColorsUpdate | reqSymbolsUpdate | reqLineStylesUpdate | reqTextStylesUpdate);
- }
-}
-
void ScribusMainWindow::rebuildLayersList()
{
if (HaveDoc)
@@ -3799,8 +3701,6 @@ bool ScribusMainWindow::slotPageImport()
bool ret = false;
MergeDoc *dia = new MergeDoc(this, false, doc->DocPages.count(), doc->currentPage()->pageNr() + 1);
UndoTransaction* activeTransaction = NULL;
- if(UndoManager::undoEnabled())
- activeTransaction = new UndoTransaction(undoManager->beginTransaction(Um::ImportPage, Um::IGroup, Um::ImportPage, 0, Um::ILock));
if (dia->exec())
{
@@ -4378,87 +4278,71 @@ bool ScribusMainWindow::postLoadDoc()
// do with file->open for a LONG time. It's used for get text / get picture.
void ScribusMainWindow::slotGetContent()
{
- if (doc->m_Selection->count() != 0)
+ int flags = fdExistingFilesI;
+ QString docDir = ".";
+ ImportSetup impsetup;
+ QString allFormats = "";
+ QString formatD = "";
+ PageItem *currItem = doc->m_Selection->itemAt(0);
+ if(!currItem)
{
- PageItem *currItem = doc->m_Selection->itemAt(0);
- if (currItem->itemType() == PageItem::ImageFrame)
- {
- QString formatD(FormatsManager::instance()->fileDialogFormatList(FormatsManager::IMAGESIMGFRAME));
-
- QString docDir = ".";
- QString prefsDocDir=prefsManager->documentDir();
- if (!prefsDocDir.isEmpty())
- docDir = prefsManager->prefsFile->getContext("dirs")->get("images", prefsDocDir);
- else
- docDir = prefsManager->prefsFile->getContext("dirs")->get("images", ".");
-
- QStringList fileNames;
- fileNames.clear();
- CustomFDialog *dia = new CustomFDialog(qApp->activeWindow(), docDir, tr("Open"), formatD, fdShowPreview | fdExistingFilesI);
- if (dia->exec() == QDialog::Accepted)
- fileNames = dia->fileDialog->selectedFiles();
- delete dia;
- //QStringList fileNames = CFileDialog( docDir, tr("Open"), formatD, "", fdShowPreview | fdExistingFiles);
- if (!fileNames.isEmpty())
- {
- prefsManager->prefsFile->getContext("dirs")->set("images", fileNames[0].left(fileNames[0].lastIndexOf("/")));
- view->requestMode(modeImportImage);
- dynamic_cast<CanvasMode_ImageImport*>(view->canvasMode())->setImageList(fileNames);
- }
- }
- else if (currItem->asTextFrame())
- {
- gtGetText* gt = new gtGetText(doc);
- ImportSetup impsetup=gt->run();
- if (impsetup.runDialog)
- {
- if (currItem->itemText.length() != 0)
- {
- int t = QMessageBox::warning(this, CommonStrings::trWarning, tr("Do you really want to clear all your text?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
- if (t == QMessageBox::No)
- return;
- }
- gt->launchImporter(impsetup.importer, impsetup.filename, impsetup.textOnly, impsetup.encoding, false);
- }
- delete gt;
- if (doc->docHyphenator->AutoCheck)
- doc->docHyphenator->slotHyphenate(currItem);
- for (int a = 0; a < doc->Items->count(); ++a)
- {
- if (doc->Items->at(a)->isBookmark)
- bookmarkPalette->BView->ChangeText(doc->Items->at(a));
- }
- if (!impsetup.textOnly)
- doc->flag_NumUpdateRequest = true;
- view->DrawNew();
- slotDocCh();
- styleManager->setDoc(doc);
- marksManager->setDoc(doc);
- nsEditor->setDoc(doc);
- }
+ formatD = FormatsManager::instance()->fileDialogVectorFormatList();
+ PrefsContext* dirs = prefsManager->prefsFile->getContext("dirs");
+ docDir = dirs->get("pastefile", ".");
+ allFormats += " " + formatD.mid(formatD.indexOf("(")+1,formatD.indexOf(")")-(formatD.indexOf("(")+1));
}
-}
-
-void ScribusMainWindow::slotGetContent2() // kk2006
-{
- if (doc->m_Selection->count() == 0)
- return; // nothing to do, no selection
-
- PageItem *currItem = doc->m_Selection->itemAt(0);
+ if (!currItem || currItem->itemType() == PageItem::ImageFrame)
+ {
+ flags |= fdShowPreview;
+ QString formatI = FormatsManager::instance()->fileDialogFormatList(FormatsManager::IMAGESIMGFRAME);
+ allFormats += " " + formatI.mid(formatI.indexOf("(")+1,formatI.indexOf(")")-(formatI.indexOf("(")+1));
+ if(formatD.length()!=0)
+ formatD = formatD.left(formatD.lastIndexOf(";") +1);
+ formatD +=formatI;
+ QString prefsDocDir=prefsManager->documentDir();
+ if (!prefsDocDir.isEmpty())
+ docDir = prefsManager->prefsFile->getContext("dirs")->get("images", prefsDocDir);
+ else
+ docDir = prefsManager->prefsFile->getContext("dirs")->get("images", ".");
+ }
+ if (!currItem || currItem->asTextFrame())
+ {
+ flags |= fdShowCodecs;
+ QString formatT = FormatsManager::instance()->fileDialogTextFormatList();
+ allFormats += " " + formatT.mid(formatT.indexOf("(")+1,formatT.indexOf(")")-(formatT.indexOf("(")+1));
+ if(formatD.length()!=0)
+ formatD = formatD.left(formatD.lastIndexOf(";") +1);
+ formatD += formatT;
+ }
+ formatD = tr("All Supported Formats") + "(" + allFormats + ");;" + formatD;
+ CustomFDialog *dia = new CustomFDialog(qApp->activeWindow(), docDir, tr("Open"), formatD, flags );
+ if (dia->exec() == QDialog::Accepted)
+ impsetup.filename = dia->fileDialog->selectedFiles();
- if (!currItem->asTextFrame())
- return; // not a text frame
+ if(flags & fdShowCodecs)
+ {
+ impsetup.encoding=dia->TxCodeM->currentText();
+ impsetup.textOnly=dia->TextOnly->isChecked();
+ }
+ else
+ {
+ QString localEn = QTextCodec::codecForLocale()->name();
+ if (localEn == "ISO-10646-UCS-2")
+ localEn = "UTF-16";
+ impsetup.encoding = localEn;
+ impsetup.textOnly = false;
+ }
- ScGTPluginManager::instance()->run();
- if (doc->docHyphenator->AutoCheck)
- doc->docHyphenator->slotHyphenate(currItem);
- for (int a = 0; a < doc->Items->count(); ++a)
+ if (!impsetup.filename.isEmpty())
{
- if (doc->Items->at(a)->isBookmark)
- bookmarkPalette->BView->ChangeText(doc->Items->at(a));
+ if (currItem && currItem->itemType() == PageItem::ImageFrame)
+ prefsManager->prefsFile->getContext("dirs")->set("images", impsetup.filename.first().left(impsetup.filename.first().lastIndexOf("/")));
+ if(!currItem)
+ prefsManager->prefsFile->getContext("dirs")->set("pastefile", impsetup.filename.first().left(impsetup.filename.first().lastIndexOf("/")));
+ view->requestMode(modeImportData);
+ dynamic_cast<CanvasMode_ImportData*>(view->canvasMode())->setInformation(impsetup);
}
- view->DrawNew();
- slotDocCh();
+ delete dia;
}
void ScribusMainWindow::slotGetClipboardImage()
@@ -4571,25 +4455,6 @@ void ScribusMainWindow::toogleInlineState()
}
}
-void ScribusMainWindow::slotFileAppend()
-{
- if (doc->m_Selection->count() != 0)
- {
- gtGetText* gt = new gtGetText(doc);
- ImportSetup impsetup=gt->run();
- if (impsetup.runDialog)
- {
- gt->launchImporter(impsetup.importer, impsetup.filename, impsetup.textOnly, impsetup.encoding, true);
- }
- delete gt;
- //CB Hyphenating now emits doc changed, plus we change lang as appropriate
- if (doc->docHyphenator->AutoCheck)
- doc->itemSelection_DoHyphenate();
- view->DrawNew();
- //slotDocCh();
- }
-}
-
void ScribusMainWindow::slotFileRevert()
{
if ((doc->hasName) && (doc->isModified()) && (!doc->masterPageMode()) && (!doc->isConverted))
@@ -4829,10 +4694,7 @@ bool ScribusMainWindow::DoFileClose()
scrActions["fileExportAsPDF"]->setEnabled(false);
scrActions["fileExportText"]->setEnabled(false);
scrActions["fileExportAsEPS"]->setEnabled(false);
- scrActions["fileImportText"]->setEnabled(false);
- scrActions["fileImportText2"]->setEnabled(false);
- scrActions["fileImportImage"]->setEnabled(false);
- scrActions["fileImportAppendText"]->setEnabled(false);
+ scrActions["fileImport"]->setEnabled(false);
// scrMenuMgr->setMenuEnabled("Page", false);
scrActions["pageInsert"]->setEnabled(false);
scrActions["pageImport"]->setEnabled(false);
@@ -9254,7 +9116,21 @@ void ScribusMainWindow::restore(UndoState* state, bool isUndo)
restoreAddPage(ss, isUndo);
else if (ss->contains("DELETE_PAGE"))
restoreDeletePage(ss, isUndo);
+ else if (ss->contains("FILE_LOADER"))
+ restoreFileLoader(ss, isUndo);
+ }
+}
+
+void ScribusMainWindow::restoreFileLoader(SimpleState *state, bool isUndo)
+{
+ if(isUndo)
+ {
+ if(doc->appMode != modeImportData)
+ view->requestMode(modeImportData);
+ dynamic_cast<CanvasMode_ImportData*>(view->canvasMode())->insertImage(0,state->get("name"));
}
+ else
+ dynamic_cast<CanvasMode_ImportData*>(view->canvasMode())->deleteImage(state->get("name"));
}
void ScribusMainWindow::restoreDeletePage(SimpleState *state, bool isUndo)
diff --git a/Scribus/scribus/scribus.h b/Scribus/scribus/scribus.h
index 9872c53..7e2b0bb 100644
--- a/Scribus/scribus/scribus.h
+++ b/Scribus/scribus/scribus.h
@@ -183,6 +183,7 @@ public:
void restoreUngrouping(SimpleState *state, bool isUndo);
void restoreAddPage(SimpleState *state, bool isUndo);
void restoreDeletePage(SimpleState *state, bool isUndo);
+ void restoreFileLoader(SimpleState *state, bool isUndo);
void setPreviewToolbar();
struct CopyContentsBuffer contentsBuffer;
bool internalCopy;
@@ -296,14 +297,8 @@ public slots:
bool loadPage(QString fileName, int Nr, bool Mpa, const QString& renamedPageName=QString::null);
void slotGetContent();
- void slotGetContent2(); // kk2006
void slotGetClipboardImage();
void toogleInlineState();
- /*!
- \author Franz Schmid
- \brief Appends a Textfile to the Text in the selected Textframe at the Cursorposition
- */
- void slotFileAppend();
void removeRecent(QString fn, bool fromFileWatcher = false);
void removeRecentFromWatcher(QString fn);
@@ -312,7 +307,6 @@ public slots:
void rebuildRecentPasteMenu();
void pasteRecent(QString fn);
void pasteFromScrapbook(QString fn);
- void importVectorFile();
void rebuildLayersList();
bool slotDocOpen();
bool loadDoc(QString);
diff --git a/Scribus/scribus/scribusdoc.cpp b/Scribus/scribus/scribusdoc.cpp
index ee2f298..f365cc8 100644
--- a/Scribus/scribus/scribusdoc.cpp
+++ b/Scribus/scribus/scribusdoc.cpp
@@ -5582,8 +5582,7 @@ int ScribusDoc::itemAddUserFrame(InsertAFrameData &iafData)
if (!iafData.source.isEmpty() && prevItem == NULL && QFile::exists(iafData.source))
{
gtGetText* gt = new gtGetText(this);
- if (iafData.impsetup.runDialog)
- gt->launchImporter(iafData.impsetup.importer, iafData.impsetup.filename, iafData.impsetup.textOnly, iafData.impsetup.encoding, true, currItem);
+ gt->launchImporter(-1, iafData.impsetup.filename.at(0), iafData.impsetup.textOnly, iafData.impsetup.encoding, true, currItem);
delete gt;
}
prevItem=currItem;
diff --git a/Scribus/scribus/scribusstructs.h b/Scribus/scribus/scribusstructs.h
index 2323e98..16fe139 100644
--- a/Scribus/scribus/scribusstructs.h
+++ b/Scribus/scribus/scribusstructs.h
@@ -289,7 +289,7 @@ enum AppMode
modeDrawLine,
modeRotation,
modeLinkFrames,
- modeImportImage,
+ modeImportData,
modeUnlinkFrames,
modeDrawRegularPolygon,
modeDrawBezierLine,
diff --git a/Scribus/scribus/scribusview.cpp b/Scribus/scribus/scribusview.cpp
index 3d1304f..f639b6d 100644
--- a/Scribus/scribus/scribusview.cpp
+++ b/Scribus/scribus/scribusview.cpp
@@ -77,7 +77,7 @@ for which a new license (GPL+exception) is in place.
#include "canvasgesture.h"
#include "canvasmode.h"
#include "canvasmode_objimport.h"
-#include "canvasmode_imageimport.h"
+#include "canvasmode_importdata.h"
#include "actionmanager.h"
#include "commonstrings.h"
#include "filewatcher.h"
@@ -164,6 +164,7 @@ ScribusView::ScribusView(QWidget* win, ScribusMainWindow* mw, ScribusDoc *doc) :
_isGlobalMode(true),
linkAfterDraw(false),
ImageAfterDraw(false),
+ TextAfterDraw(false),
m_vhRulerHW(17)
{
setObjectName("s");
@@ -4356,16 +4357,26 @@ bool ScribusView::eventFilter(QObject *obj, QEvent *event)
}
if (ImageAfterDraw)
{
- //user creates new frame using linking tool
PageItem * frame = Doc->m_Selection->itemAt(0);
- requestMode(modeImportImage);
+ requestMode(modeImportData);
if (frame)
{
- dynamic_cast<CanvasMode_ImageImport*>(canvasMode())->setImage(frame);
- dynamic_cast<CanvasMode_ImageImport*>(canvasMode())->updateList();
+ dynamic_cast<CanvasMode_ImportData*>(canvasMode())->setImage(frame);
+ dynamic_cast<CanvasMode_ImportData*>(canvasMode())->updateList();
}
ImageAfterDraw = false;
}
+ else if (TextAfterDraw)
+ {
+ PageItem * frame = Doc->m_Selection->itemAt(0);
+ requestMode(modeImportData);
+ if (frame)
+ {
+ dynamic_cast<CanvasMode_ImportData*>(canvasMode())->setText(frame->asTextFrame());
+ dynamic_cast<CanvasMode_ImportData*>(canvasMode())->updateList();
+ }
+ TextAfterDraw = false;
+ }
return true;
}
else if (obj == widget() && event->type() == QEvent::MouseButtonPress)
@@ -4385,10 +4396,12 @@ bool ScribusView::eventFilter(QObject *obj, QEvent *event)
}
else
firstFrame = NULL;
- if(Doc->appMode == modeImportImage && ImageAfterDraw)
+ if(Doc->appMode == modeImportData && (ImageAfterDraw || TextAfterDraw))
{
- //switch to drawing new text frame
- requestMode(modeDrawImage);
+ if(TextAfterDraw)
+ requestMode(modeDrawText);
+ else
+ requestMode(modeDrawImage);
m_canvasMode->mousePressEvent(m);
}
m_canvas->m_viewMode.m_MouseButtonPressed = true;
diff --git a/Scribus/scribus/scribusview.h b/Scribus/scribus/scribusview.h
index 1cb9ad3..f21a0ca 100644
--- a/Scribus/scribus/scribusview.h
+++ b/Scribus/scribus/scribusview.h
@@ -107,12 +107,13 @@ public:
friend class CanvasMode_EditArc;
friend class CanvasMode_EditSpiral;
friend class CanvasMode_FrameLinks;
- friend class CanvasMode_ImageImport;
+ friend class CanvasMode_ImportData;
friend class CanvasMode_Magnifier;
friend class CanvasMode_NodeEdit;
friend class CanvasMode_Normal;
friend class CanvasMode_ObjImport;
friend class CanvasMode_Rotate;
+ friend class CreateMode;
void requestMode(int appMode);
void startGesture(CanvasGesture*);
@@ -325,6 +326,7 @@ private: // Private attributes
bool _isGlobalMode;
bool linkAfterDraw;
bool ImageAfterDraw;
+ bool TextAfterDraw;
double oldItemX;
double oldItemY;
diff --git a/Scribus/scribus/ui/contextmenu.cpp b/Scribus/scribus/ui/contextmenu.cpp
index c1c5a53..28a92bf 100644
--- a/Scribus/scribus/ui/contextmenu.cpp
+++ b/Scribus/scribus/ui/contextmenu.cpp
@@ -195,13 +195,15 @@ void ContextMenu::createMenuItems_Selection()
addSeparator();
addAction(m_AP->scrActions["itemUpdateMarks"]);
}
- if (m_actionList.contains("fileImportText"))
+ if (m_actionList.contains("fileImport"))
{
addSeparator();
- addAction(m_AP->scrActions["fileImportText"]);
- addAction(m_AP->scrActions["fileImportAppendText"]);
- addAction(m_AP->scrActions["toolsEditWithStoryEditor"]);
- addAction(m_AP->scrActions["insertSampleText"]);
+ addAction(m_AP->scrActions["fileImport"]);
+ if (currItem->isTextFrame())
+ {
+ addAction(m_AP->scrActions["toolsEditWithStoryEditor"]);
+ addAction(m_AP->scrActions["insertSampleText"]);
+ }
}
else //enable this for, eg, text on a path
if (m_actionList.contains("toolsEditWithStoryEditor"))
@@ -210,8 +212,6 @@ void ContextMenu::createMenuItems_Selection()
addAction(m_AP->scrActions["toolsEditWithStoryEditor"]);
}
addSeparator();
- if (m_actionList.contains("fileImportImage"))
- addAction(m_AP->scrActions["fileImportImage"]);
if (selectedItemCount==1 && currItem->asImageFrame())
{
if (QApplication::clipboard()->mimeData()->hasImage())
diff --git a/Scribus/scribus/ui/customfdialog.cpp b/Scribus/scribus/ui/customfdialog.cpp
index 666db23..6c6e763 100644
--- a/Scribus/scribus/ui/customfdialog.cpp
+++ b/Scribus/scribus/ui/customfdialog.cpp
@@ -24,6 +24,7 @@ for which a new license (GPL+exception) is in place.
#include <QCheckBox>
#include <QComboBox>
+#include <QCoreApplication>
#include <QDir>
#include <QFileInfo>
#include <QFrame>
@@ -35,6 +36,7 @@ for which a new license (GPL+exception) is in place.
#include <QPixmap>
#include <QPushButton>
#include <QTextCodec>
+#include <Qt>
#include <QVBoxLayout>
#include "customfdialog.h"
@@ -111,7 +113,7 @@ QIcon ImIconProvider::icon(const QFileInfo &fi) const
return QIcon();
}
-FDialogPreview::FDialogPreview(QWidget *pa) : QLabel(pa)
+FDialogPreview::FDialogPreview(QWidget *pa, Qt::WindowFlags f) : QLabel(pa,f)
{
setAlignment(Qt::AlignLeft | Qt::AlignTop);
setFixedSize( QSize( 200, 200 ) );
@@ -298,7 +300,7 @@ CustomFDialog::CustomFDialog(QWidget *parent, QString wDir, QString caption, QSt
vboxLayout = new QVBoxLayout(this);
vboxLayout->setSpacing(5);
vboxLayout->setMargin(10);
- hboxLayout = new QHBoxLayout;
+ hboxLayout = new QHBoxLayout;
hboxLayout->setSpacing(5);
hboxLayout->setMargin(0);
fileDialog = new ScFileWidget(this);
@@ -318,7 +320,7 @@ CustomFDialog::CustomFDialog(QWidget *parent, QString wDir, QString caption, QSt
vboxLayout1->addWidget(pw);
hboxLayout->addLayout(vboxLayout1);
vboxLayout->addLayout(hboxLayout);
- QHBoxLayout *hboxLayout1 = new QHBoxLayout;
+ QHBoxLayout *hboxLayout1 = new QHBoxLayout;
hboxLayout1->setSpacing(5);
hboxLayout1->setContentsMargins(9, 0, 0, 0);
showPreview = new QCheckBox(this);
@@ -440,6 +442,12 @@ CustomFDialog::CustomFDialog(QWidget *parent, QString wDir, QString caption, QSt
}
TxCodeM->setMinimumSize(QSize(200, 0));
Layout1C->addWidget(TxCodeM);
+ Layout1C->addStretch();
+ TextOnly = new QCheckBox();
+ TextOnly->setText( tr("Import &Text only"));
+ TextOnly->setToolTip( tr("Import the text without style formating"));
+ TextOnly->setChecked(false);
+ Layout1C->addWidget(TextOnly);
QSpacerItem* spacer2 = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum );
Layout1C->addItem( spacer2 );
vboxLayout->addWidget(LayoutC);
@@ -511,6 +519,11 @@ QString CustomFDialog::selectedFile()
return QString();
}
+QStringList CustomFDialog::selectedFiles()
+{
+ return fileDialog->selectedFiles();
+}
+
void CustomFDialog::addWidgets(QWidget *widgets)
{
vboxLayout->addWidget(widgets);
diff --git a/Scribus/scribus/ui/customfdialog.h b/Scribus/scribus/ui/customfdialog.h
index 52d154f..987d58a 100644
--- a/Scribus/scribus/ui/customfdialog.h
+++ b/Scribus/scribus/ui/customfdialog.h
@@ -62,7 +62,7 @@ class SCRIBUS_API FDialogPreview : public QLabel
{
Q_OBJECT
public:
- FDialogPreview(QWidget *pa);
+ FDialogPreview(QWidget *pa, Qt::WindowFlags f = 0);
~FDialogPreview() {};
void updtPix();
void GenPreview(QString name);
@@ -122,10 +122,12 @@ public:
ScFileWidget *fileDialog;
FDialogPreview *pw;
QCheckBox *showPreview;
+ QCheckBox *TextOnly;
QPushButton* OKButton;
QPushButton* CancelB;
void setSelection(QString );
QString selectedFile();
+ QStringList selectedFiles();
void addWidgets(QWidget *widgets);
private slots:
//! \brief Go to the document home dir.
diff --git a/Scribus/scribus/ui/delpages.cpp b/Scribus/scribus/ui/delpages.cpp
index 83dc4ae..904e41d 100644
--- a/Scribus/scribus/ui/delpages.cpp
+++ b/Scribus/scribus/ui/delpages.cpp
@@ -27,7 +27,6 @@ DelPages::DelPages( QWidget* parent, int currentPage, int maxPage ) : QDialog( p
fromToLayout->addWidget( fromLabel );
fromPageData = new ScrSpinBox(this);
fromPageData->setDecimals(0);
- fromPageData->setSuffix("");
fromPageData->setMinimum(1);
fromPageData->setMaximum(maxPage);
fromPageData->setSuffix("");
@@ -42,7 +41,6 @@ DelPages::DelPages( QWidget* parent, int currentPage, int maxPage ) : QDialog( p
toPageData->setMaximum(maxPage);
toPageData->setSuffix("");
toPageData->setValue( currentPage );
- toPageData->setSuffix("");
fromToLayout->addWidget( toPageData );
dialogLayout->addLayout( fromToLayout );
diff --git a/Scribus/scribus/ui/gtdialogs.cpp b/Scribus/scribus/ui/gtdialogs.cpp
index af88379..79dd452 100644
--- a/Scribus/scribus/ui/gtdialogs.cpp
+++ b/Scribus/scribus/ui/gtdialogs.cpp
@@ -38,7 +38,6 @@ for which a new license (GPL+exception) is in place.
#include <QPushButton>
#include "commonstrings.h"
#include "util_icon.h"
-#include "ui/gtfiledialog.h"
extern QString DocDir;
@@ -114,44 +113,19 @@ gtImporterDialog::~gtImporterDialog()
gtDialogs::gtDialogs()
{
fdia = NULL;
- fileName = "";
- encoding = "";
importer = -1;
prefs = PrefsManager::instance()->prefsFile->getContext("gtDialogs");
- pwd = QDir::currentPath();
}
-bool gtDialogs::runFileDialog(const QString& filters, const QStringList& importers)
-{
- bool accepted = false;
- PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
- QString dir = dirs->get("get_text", ".");
- fdia = new gtFileDialog(filters, importers, dir);
-
- if (fdia->exec() == QDialog::Accepted)
- {
- fileName = fdia->selectedFile();
- if (!fileName.isEmpty())
- accepted = true;
- encoding = fdia->encodingCombo->currentText();
-// if (encoding == "UTF-16")
-// encoding = "ISO-10646-UCS-2";
- importer = fdia->importerCombo->currentIndex() - 1;
- dirs->set("get_text", fileName.left(fileName.lastIndexOf("/")));
- }
- QDir::setCurrent(pwd);
- return accepted;
-}
-
-bool gtDialogs::runImporterDialog(const QStringList& importers)
+bool gtDialogs::runImporterDialog(const QStringList& importers, QString filename)
{
int curSel = prefs->getInt("curSel", 0);
QString extension = "";
- QString shortName = fileName.right(fileName.length() - fileName.lastIndexOf("/") - 1);
+ QString shortName = filename.right(filename.length() - filename.lastIndexOf("/") - 1);
if (shortName.indexOf(".") == -1)
extension = ".no_extension";
else
- extension = fileName.right(fileName.length() - fileName.lastIndexOf("."));
+ extension = filename.right(filename.length() - filename.lastIndexOf("."));
int extensionSel = prefs->getInt(extension, -1);
QString imp = prefs->get("remember"+extension, QString("false"));
QString res = "";
@@ -190,12 +164,12 @@ bool gtDialogs::runImporterDialog(const QStringList& importers)
{
importer = i;
prefs->set("curSel", static_cast<int>(i));
- if (fileName.indexOf(".") != -1)
+ if (filename.indexOf(".") != -1)
{
if (shortName.indexOf(".") == -1)
fileExtension = ".no_extension";
else
- fileExtension = fileName.right(fileName.length() - fileName.lastIndexOf("."));
+ fileExtension = filename.right(filename.length() - filename.lastIndexOf("."));
if (!fileExtension.isEmpty())
{
prefs->set(fileExtension, static_cast<int>(i));
@@ -210,29 +184,11 @@ bool gtDialogs::runImporterDialog(const QStringList& importers)
return ok;
}
-const QString& gtDialogs::getFileName()
-{
- return fileName;
-}
-
-const QString& gtDialogs::getEncoding()
-{
- return encoding;
-}
-
int gtDialogs::getImporter()
{
return importer;
}
-bool gtDialogs::importTextOnly()
-{
- bool ret = false;
- if (fdia)
- ret = fdia->textOnlyCheckBox->isChecked();
- return ret;
-}
-
gtDialogs::~gtDialogs()
{
delete fdia;
diff --git a/Scribus/scribus/ui/gtdialogs.h b/Scribus/scribus/ui/gtdialogs.h
index 0b1616d..c38a5a1 100644
--- a/Scribus/scribus/ui/gtdialogs.h
+++ b/Scribus/scribus/ui/gtdialogs.h
@@ -28,6 +28,7 @@ for which a new license (GPL+exception) is in place.
#define GTDIALOGS_H
#include <QDialog>
+#include <QCheckBox>
#include "scribusapi.h"
@@ -55,20 +56,13 @@ class SCRIBUS_API gtDialogs
{
private:
gtFileDialog* fdia;
- QString fileName;
- QString encoding;
int importer;
PrefsContext* prefs;
- QString pwd;
public:
gtDialogs();
~gtDialogs();
- const QString& getFileName();
- const QString& getEncoding();
int getImporter();
- bool importTextOnly();
- bool runFileDialog(const QString& filters, const QStringList& importers);
- bool runImporterDialog(const QStringList& importers);
+ bool runImporterDialog(const QStringList& importers, QString filename);
};
#endif // GTDIALOGS_H
diff --git a/Scribus/scribus/ui/gtfiledialog.h b/Scribus/scribus/ui/gtfiledialog.h
deleted file mode 100644
index 8b1e5a8..0000000
--- a/Scribus/scribus/ui/gtfiledialog.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-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.
-*/
-#ifndef GTFILEDIALOG_H
-#define GTFILEDIALOG_H
-
-#include <QDialog>
-#include "ui_gtfiledialog.h"
-#include "scribusapi.h"
-
-
-/*! \brief Enhanced file dialog for get-text plugins
-This class is separated from gtdialogs.h file due the huge
-(almost) circle dependencies with fonts subdir/library
-\author Petr Vanek <petr@scribus.info>
-\author Riku Leino
-*/
-class SCRIBUS_API gtFileDialog : public QDialog, public Ui::gtFileDialog
-{
- Q_OBJECT
-public:
- gtFileDialog(const QString& filters, const QStringList& importers, const QString& wdir);
- ~gtFileDialog();
-
- QString selectedFile();
-
-public slots:
- virtual void accept();
-
-protected:
- void loadSettings(void);
- void saveSettings(void);
-};
-
-#endif
diff --git a/Scribus/scribus/ui/gtfiledialog.ui b/Scribus/scribus/ui/gtfiledialog.ui
deleted file mode 100644
index b0a6726..0000000
--- a/Scribus/scribus/ui/gtfiledialog.ui
+++ /dev/null
@@ -1,112 +0,0 @@
-<ui version="4.0" >
- <class>gtFileDialog</class>
- <widget class="QDialog" name="gtFileDialog" >
- <property name="geometry" >
- <rect>
- <x>0</x>
- <y>0</y>
- <width>373</width>
- <height>317</height>
- </rect>
- </property>
- <property name="windowTitle" >
- <string>Open</string>
- </property>
- <layout class="QGridLayout" >
- <item row="0" column="0" colspan="3" >
- <widget class="ScFileWidget" native="1" name="fileWidget" />
- </item>
- <item row="1" column="0" >
- <widget class="QLabel" name="label" >
- <property name="text" >
- <string>&Importer:</string>
- </property>
- <property name="buddy" >
- <cstring>importerCombo</cstring>
- </property>
- </widget>
- </item>
- <item row="1" column="1" >
- <widget class="ScComboBox" name="importerCombo" />
- </item>
- <item row="1" column="2" >
- <widget class="QCheckBox" name="textOnlyCheckBox" >
- <property name="text" >
- <string>Import &Text Only</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0" >
- <widget class="QLabel" name="label_2" >
- <property name="text" >
- <string>&Encoding:</string>
- </property>
- <property name="buddy" >
- <cstring>encodingCombo</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="1" >
- <widget class="ScComboBox" name="encodingCombo" />
- </item>
- <item row="3" column="0" colspan="3" >
- <widget class="QDialogButtonBox" name="buttonBox" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons" >
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <customwidgets>
- <customwidget>
- <class>ScFileWidget</class>
- <extends>QWidget</extends>
- <header>ui/scfilewidget.h</header>
- <container>1</container>
- </customwidget>
- <customwidget>
- <class>ScComboBox</class>
- <extends>QComboBox</extends>
- <header>ui/sccombobox.h</header>
- </customwidget>
- </customwidgets>
- <resources/>
- <connections>
- <connection>
- <sender>buttonBox</sender>
- <signal>accepted()</signal>
- <receiver>gtFileDialog</receiver>
- <slot>accept()</slot>
- <hints>
- <hint type="sourcelabel" >
- <x>248</x>
- <y>254</y>
- </hint>
- <hint type="destinationlabel" >
- <x>157</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>buttonBox</sender>
- <signal>rejected()</signal>
- <receiver>gtFileDialog</receiver>
- <slot>reject()</slot>
- <hints>
- <hint type="sourcelabel" >
- <x>316</x>
- <y>260</y>
- </hint>
- <hint type="destinationlabel" >
- <x>286</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/Scribus/scribus/ui/insertaframe.cpp b/Scribus/scribus/ui/insertaframe.cpp
index c336a26..d8912aa 100644
--- a/Scribus/scribus/ui/insertaframe.cpp
+++ b/Scribus/scribus/ui/insertaframe.cpp
@@ -232,19 +232,19 @@ void InsertAFrame::locateImageFile()
QString fileName("");
CustomFDialog dia(this, docDir, tr("Open"), formatD, fdShowPreview | fdExistingFiles);
if (dia.exec() == QDialog::Accepted)
- fileName = dia.selectedFile();
+ fileName = dia.selectedFile().at(0);
sourceImageLineEdit->setText(QDir::toNativeSeparators(fileName));
}
void InsertAFrame::locateDocFile()
{
- m_ImportSetup.runDialog=false;
- gtGetText* gt = new gtGetText(m_Doc);
- m_ImportSetup=gt->run();
- if (m_ImportSetup.runDialog)
- sourceDocLineEdit->setText(QDir::toNativeSeparators(m_ImportSetup.filename));
- delete gt;
+ QString formatD(FormatsManager::instance()->fileDialogTextFormatList());
+
+ CustomFDialog *dia = new CustomFDialog(qApp->activeWindow(), ".", tr("Open"), formatD, fdShowCodecs | fdExistingFiles);
+ if (dia->exec() == QDialog::Accepted)
+ sourceDocLineEdit->setText(QDir::toNativeSeparators(dia->selectedFile()));
+ delete dia;
}
void InsertAFrame::slotCreatePageNumberRange( )
diff --git a/Scribus/scribus/ui/oneclick.cpp b/Scribus/scribus/ui/oneclick.cpp
index ddeb72c..5df24b2 100644
--- a/Scribus/scribus/ui/oneclick.cpp
+++ b/Scribus/scribus/ui/oneclick.cpp
@@ -23,7 +23,7 @@ for which a new license (GPL+exception) is in place.
#include "units.h"
#include "commonstrings.h"
-OneClick::OneClick( QWidget* parent, QString titel, int unitIndex, double defW, double defH, bool remember, int origin, int mode ) : QDialog( parent )
+OneClick::OneClick( QWidget* parent, QString titel, int unitIndex, double defW, double defH, int origin, int mode ) : QDialog( parent )
{
double m_unitRatio = unitGetRatioFromIndex(unitIndex);
QString m_suffix = unitGetSuffixFromIndex(unitIndex);
@@ -98,11 +98,6 @@ OneClick::OneClick( QWidget* parent, QString titel, int unitIndex, double defW,
}
editLayout->addWidget( SizeGroup, 0, 1 );
- checkRemember = new QCheckBox(this);
- checkRemember->setText( tr("Remember Values"));
- checkRemember->setChecked(remember);
- editLayout->addWidget( checkRemember, 1, 0, 1, 2 );
-
queryLayout->addLayout( editLayout );
okCancelLayout = new QHBoxLayout;
okCancelLayout->setSpacing( 5 );
diff --git a/Scribus/scribus/ui/oneclick.h b/Scribus/scribus/ui/oneclick.h
index 325642a..e143f7f 100644
--- a/Scribus/scribus/ui/oneclick.h
+++ b/Scribus/scribus/ui/oneclick.h
@@ -27,12 +27,11 @@ class SCRIBUS_API OneClick : public QDialog
Q_OBJECT
public:
- OneClick( QWidget* parent, QString titel, int unitIndex, double defW, double defH, bool remember, int origin, int mode );
+ OneClick( QWidget* parent, QString titel, int unitIndex, double defW, double defH, int origin, int mode );
~OneClick() {};
ScrSpinBox *spinWidth;
ScrSpinBox *spinHeight;
LinkButton* linkSize;
- QCheckBox* checkRemember;
QGroupBox* RotationGroupContainer;
BasePointWidget* RotationGroup;
diff --git a/Scribus/scribus/ui/prefs_itemtools.cpp b/Scribus/scribus/ui/prefs_itemtools.cpp
index eda3540..b1e001b 100644
--- a/Scribus/scribus/ui/prefs_itemtools.cpp
+++ b/Scribus/scribus/ui/prefs_itemtools.cpp
@@ -154,6 +154,12 @@ void Prefs_ItemTools::restoreDefaults(struct ApplicationPrefs *prefsData)
onscreenResolutionLowRadioButton->setChecked(true);
break;
}
+ basepoint->setCheckedId(prefsData->itemToolPrefs.imageDefaultBasePoint);
+ imageSize->setChecked(!(prefsData->itemToolPrefs.imageDefaultSize & 1));
+ defaultSize->setChecked(prefsData->itemToolPrefs.imageDefaultSize & 1);
+ askOneClick->setChecked(prefsData->itemToolPrefs.imageDefaultSize & 2);
+ defaultWidth->setValue(prefsData->itemToolPrefs.imageDefaultWidth);
+ defaultHeight->setValue(prefsData->itemToolPrefs.imageDefaultHeight);
//Shape Tool
shapeFrameLineColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.shapeLineColor);
@@ -274,7 +280,10 @@ void Prefs_ItemTools::saveGuiToPrefs(struct ApplicationPrefs *prefsData) const
if (onscreenResolutionLowRadioButton->isChecked())
haRes = 2;
prefsData->itemToolPrefs.imageLowResType = haRes;
-
+ prefsData->itemToolPrefs.imageDefaultBasePoint = basepoint->checkedId();
+ prefsData->itemToolPrefs.imageDefaultSize = defaultSize->isChecked() + askOneClick->isChecked()*2 ;
+ prefsData->itemToolPrefs.imageDefaultHeight = defaultHeight->value() / unitRatio;
+ prefsData->itemToolPrefs.imageDefaultWidth = defaultWidth->value() / unitRatio;
//Shape tool
prefsData->itemToolPrefs.shapeLineColor = shapeFrameLineColorComboBox->currentText();
diff --git a/Scribus/scribus/ui/prefs_itemtoolsbase.ui b/Scribus/scribus/ui/prefs_itemtoolsbase.ui
index f6cef40..bf013c3 100644
--- a/Scribus/scribus/ui/prefs_itemtoolsbase.ui
+++ b/Scribus/scribus/ui/prefs_itemtoolsbase.ui
@@ -78,9 +78,9 @@
<property name="geometry">
<rect>
<x>0</x>
- <y>0</y>
- <width>643</width>
- <height>646</height>
+ <y>-44</y>
+ <width>622</width>
+ <height>677</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
@@ -651,8 +651,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>643</width>
- <height>646</height>
+ <width>637</width>
+ <height>633</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
@@ -806,7 +806,7 @@
<string>Free Scaling</string>
</property>
<attribute name="buttonGroup">
- <string>scalingButtonGroup</string>
+ <string notr="true">scalingButtonGroup</string>
</attribute>
</widget>
</item>
@@ -884,7 +884,7 @@
<string>Scale Image to Frame Size</string>
</property>
<attribute name="buttonGroup">
- <string>scalingButtonGroup</string>
+ <string notr="true">scalingButtonGroup</string>
</attribute>
</widget>
</item>
@@ -937,7 +937,7 @@
<string>Full Resolution</string>
</property>
<attribute name="buttonGroup">
- <string>previewButtonGroup</string>
+ <string notr="true">previewButtonGroup</string>
</attribute>
</widget>
</item>
@@ -947,7 +947,7 @@
<string>Normal Resolution</string>
</property>
<attribute name="buttonGroup">
- <string>previewButtonGroup</string>
+ <string notr="true">previewButtonGroup</string>
</attribute>
</widget>
</item>
@@ -957,11 +957,184 @@
<string>Low Resolution</string>
</property>
<attribute name="buttonGroup">
- <string>previewButtonGroup</string>
+ <string notr="true">previewButtonGroup</string>
</attribute>
</widget>
</item>
<item>
+ <spacer name="verticalSpacer_13">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_53">
+ <property name="text">
+ <string>Default frame size</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="Line" name="line_7">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="imageSize">
+ <property name="text">
+ <string>Use image size</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_13">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMaximumSize</enum>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QRadioButton" name="defaultSize">
+ <property name="text">
+ <string>Use default size</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_19">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QFormLayout" name="formLayout_15">
+ <item row="0" column="0">
+ <widget class="QLabel" name="width">
+ <property name="text">
+ <string>width</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QDoubleSpinBox" name="defaultWidth">
+ <property name="minimum">
+ <double>1.000000000000000</double>
+ </property>
+ <property name="maximum">
+ <double>1000.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="height">
+ <property name="text">
+ <string>height</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QDoubleSpinBox" name="defaultHeight">
+ <property name="minimum">
+ <double>1.000000000000000</double>
+ </property>
+ <property name="maximum">
+ <double>1000.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_20">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="minimumSize">
+ <size>
+ <width>50</width>
+ <height>74</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Baseline</string>
+ </property>
+ <widget class="BasePointWidget" name="basepoint" native="true">
+ <property name="geometry">
+ <rect>
+ <x>12</x>
+ <y>15</y>
+ <width>58</width>
+ <height>55</height>
+ </rect>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>55</width>
+ <height>55</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_21">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Maximum</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="askOneClick">
+ <property name="text">
+ <string>Ask before apply</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -969,7 +1142,7 @@
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>145</height>
+ <height>40</height>
</size>
</property>
</spacer>
@@ -1580,6 +1753,12 @@
<header>ui/spiralwidget.h</header>
<container>1</container>
</customwidget>
+ <customwidget>
+ <class>BasePointWidget</class>
+ <extends>QWidget</extends>
+ <header location="global">ui/basepointwidget.h</header>
+ <container>1</container>
+ </customwidget>
</customwidgets>
<tabstops>
<tabstop>tabWidget</tabstop>
diff --git a/Scribus/scribus/ui/prefs_operatortoolsbase.ui b/Scribus/scribus/ui/prefs_operatortoolsbase.ui
index 9a5c63b..c932504 100644
--- a/Scribus/scribus/ui/prefs_operatortoolsbase.ui
+++ b/Scribus/scribus/ui/prefs_operatortoolsbase.ui
@@ -89,10 +89,10 @@
<string> %</string>
</property>
<property name="minimum">
- <number>1</number>
+ <double>1.000000000000000</double>
</property>
<property name="maximum">
- <number>3200</number>
+ <double>3200.000000000000000</double>
</property>
</widget>
</item>
@@ -115,7 +115,7 @@
<string> %</string>
</property>
<property name="minimum">
- <number>100</number>
+ <number>0</number>
</property>
<property name="maximum">
<number>500</number>
@@ -266,8 +266,8 @@
<customwidgets>
<customwidget>
<class>ScrSpinBox</class>
- <extends>QSpinBox</extends>
- <header location="global">ui/scrspinbox.h</header>
+ <extends>QDoubleSpinBox</extends>
+ <header>ui/scrspinbox.h</header>
</customwidget>
</customwidgets>
<resources/>
diff --git a/Scribus/scribus/undomanager.cpp b/Scribus/scribus/undomanager.cpp
index 460ad84..101c05d 100644
--- a/Scribus/scribus/undomanager.cpp
+++ b/Scribus/scribus/undomanager.cpp
@@ -1051,6 +1051,7 @@ void UndoManager::languageChange()
UndoManager::PathOperation = tr("Path Operation");
UndoManager::ChangePageAttrs = tr("Change Page Attributes");
UndoManager::Transform = tr("Transform");
+ UndoManager::ImportFile = tr("Import file");
UndoManager::WeldItems = tr("Weld Items");
}
@@ -1323,6 +1324,7 @@ QString UndoManager::ClearImage = "";
QString UndoManager::PathOperation = "";
QString UndoManager::ChangePageAttrs = "";
QString UndoManager::Transform = "";
+QString UndoManager::ImportFile = "";
QString UndoManager::WeldItems = "";
/*** Icons for UndoObjects *******************************************/
diff --git a/Scribus/scribus/undomanager.h b/Scribus/scribus/undomanager.h
index 5d7a17f..9ca06c5 100644
--- a/Scribus/scribus/undomanager.h
+++ b/Scribus/scribus/undomanager.h
@@ -631,6 +631,7 @@ public:
static QString MultipleDuplicate;
static QString Duplicate;
static QString Transform;
+ static QString ImportFile;
static QString ApplyTextStyle;
static QString RemoveTextStyle;
static QString Columns;
diff --git a/Scribus/scribus/util_formats.cpp b/Scribus/scribus/util_formats.cpp
index e052355..37643bf 100644
--- a/Scribus/scribus/util_formats.cpp
+++ b/Scribus/scribus/util_formats.cpp
@@ -5,11 +5,16 @@ 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.
*/
+#include <QDir>
#include <QImageReader>
#include <QMapIterator>
#include <QObject>
#include "commonstrings.h"
+#include "plugins/formatidlist.h"
+#include "loadsaveplugin.h"
+#include "pluginmanager.h"
+#include "scpaths.h"
#include "util_formats.h"
FormatsManager* FormatsManager::_instance = 0;
@@ -93,6 +98,7 @@ FormatsManager::FormatsManager()
m_qtSupportedImageFormats=QImageReader::supportedImageFormats();
m_supportedImageFormats=m_qtSupportedImageFormats;
updateSupportedImageFormats(m_supportedImageFormats);
+ loadImporterPlugins();
}
FormatsManager::~FormatsManager()
@@ -214,7 +220,7 @@ QString FormatsManager::extensionListForFormat(int type, int listType)
void FormatsManager::fileTypeStrings(int type, QString& formatList, QString& formatText, QString& formatAll, bool lowerCaseOnly)
{
- QString fmtList = QObject::tr("All Supported Formats")+" (";
+ QString fmtList = QObject::tr("All Supported Image Formats")+" (";
QString fmtText;
QMapIterator<int, QStringList> it(m_fmts);
bool first=true;
@@ -352,3 +358,214 @@ QString getImageType(QString filename)
}
return ret;
}
+
+// Find the available plugins based on the environment, validate they load, and
+// create quick lookup mappings.
+void FormatsManager::loadImporterPlugins()
+{
+ // Get the path to the plugins
+ QString gtdir = ScPaths::instance().pluginDir();
+ // Append the gettext path to the plugin
+ gtdir += "gettext";
+ // Set the search parameteer for the platform specific extension for the plugins ( DLL, so, etc. )
+ QString libPattern = QString("*.%1*").arg(PluginManager::platformDllExtension());
+ // Search for matches.
+ QDir d(gtdir, libPattern, QDir::Name, (QDir::Filter) PluginManager::platformDllSearchFlags());
+
+ // Initialize a structure for the importers found
+ struct ImporterData ida;
+ ida.fileFormatName = "";
+
+ // Check and see if the directory existed and if the count of files matching is greater than 0.
+ if ((d.exists()) && (d.count() != 0))
+ {
+ // loop through the entries.
+ for (uint dc = 0; dc < d.count(); ++dc)
+ {
+ // Verify the Plugin will load. If it does, collect the info on the plugin ( Name, extension, format, etc )
+ if (DLLName(d[dc], &ida.fileFormatName, &ida.fileEndings))
+ {
+ // no plugin's "format name" marks "don't load plug"
+ if (ida.fileFormatName.isNull())
+ continue;
+ // Store the path to the plugin.
+ ida.soFilePath = d[dc];
+ // If the plugin path does not begin with /, prepend a /.
+ if (ida.soFilePath.left(1) != "/")
+ ida.soFilePath = "/" + ida.soFilePath;
+ // Add the plugin data to the end of the importer's vector.
+ importers.push_back(ida);
+ } // if (DLLName(d[dc], &ida.fileFormatName, &ida.fileEndings))
+ } // for (uint dc = 0; dc < d.count(); ++dc)
+ } // if ((d.exists()) && (d.count() != 0))
+ // Create the Importer Extension to Plugin data qmap.
+ createMap();
+ // Populate ilist with the file importer names.
+ for (uint i = 0; i < importers.size(); ++i)
+ ilist.append(importers[i].fileFormatName);
+} // void gtGetText::loadImporterPlugins()
+
+// Create the importer Qmap.
+void FormatsManager::createMap()
+{
+ // Loop through the importers Vector
+ for (uint i = 0; i < importers.size(); ++i)
+ {
+ // Loop through each file extension the importer uses/importers and create an individual
+ // Qmap entry for it.
+ for (int j = 0; j < importers[i].fileEndings.count(); ++j)
+ importerMap.insert(importers[i].fileEndings[j], &importers[i]);
+ } // for (uint i = 0; i < importers.size(); ++i)
+} // void gtGetText::createMap()
+
+QString FormatsManager::fileDialogTextFormatList()
+{
+ // Initialize a filters list.
+ QString filters = "";
+ // Create a string for the "All supported files filter". Start with the label then loop through
+ // the importers vector and add all of the file extensions supported.
+ QString allSupported = QObject::tr("All Supported Text Formats") + " (";
+ // Loop through the importers vector.
+ for (uint i = 0; i < importers.size(); ++i)
+ {
+ // If there are any file extnsions declared by the importer
+ if (importers[i].fileEndings.count() != 0)
+ {
+ // Add the importer name to the filters list
+ filters += importers[i].fileFormatName + " (";
+ // Loop though the extensions supported by the importer
+ for (int j = 0; j < importers[i].fileEndings.count(); ++j)
+ {
+ // Add the extension to both the filter and allSupported strings
+ filters += "*." + importers[i].fileEndings[j] + " ";
+ allSupported += "*." + importers[i].fileEndings[j] + " ";
+ } // for (int j = 0; j < importers[i].fileEndings.count(); ++j)
+ // Trim the Qstring
+ filters = filters.trimmed();
+ // Append "entry of entry" information to the end of the filter.
+ filters += ");;";
+ } // if (importers[i].fileEndings.count() != 0)
+ } // for (uint i = 0; i < importers.size(); ++i)
+ // Trim the allSupported QString and append "end of entry" data to the end of it.
+ allSupported = allSupported.trimmed();
+ allSupported += ");;";
+ // Prepend allSupported to the filters Qstring.
+ filters = allSupported + filters;
+ // Add an "all files" entry to the end of the filters QString
+ filters += QObject::tr("All Files (*)");
+ return filters;
+}
+
+// Loads the "DLL", validates the importer is good, populates the passed parameters with
+// the plugin information.
+bool FormatsManager::DLLName(QString name, QString *ffName, QStringList *fEndings)
+{
+ // Pointer to the plugin, once loaded
+ void* gtplugin;
+ // typedef of Qstring to map the importer name (FileFormatName) method results to.
+ typedef QString (*sdem0)();
+ // typedef of QStringList to map the file extensions supported method results to.
+ typedef QStringList (*sdem1)();
+ // The actual importer name object
+ sdem0 fp_FileFormatName;
+ // The actual extensions supported object
+ sdem1 fp_FileExtensions;
+ // Initialise the plugin file path ( with filename )
+ QString pluginFilePath = QString("%1/gettext/%2").arg(ScPaths::instance().pluginDir()).arg(name);
+ // Attempt to load the plugin.
+ gtplugin = PluginManager::loadDLL(pluginFilePath);
+ // if gtplugin is NULL we were unable to load the plugin. Return an error and exit the method.
+ if (!gtplugin)
+ {
+ qWarning("Failed to load plugin %s", pluginFilePath.toAscii().constData());
+ return false;
+ }
+ // Attempt to resolve the plugin symbol to the importer name (FileFormatName)
+ fp_FileFormatName = (sdem0) PluginManager::resolveSym( gtplugin, "FileFormatName");
+ // if fp_FileFormatName is NULL, we could not find the FileFormatName symbol. The plugin is incomplete.
+ // Report an error, unload the plugin, and exit the method.
+ if (!fp_FileFormatName)
+ {
+ qWarning("Failed to get FileFormatName() from %s", pluginFilePath.toAscii().constData());
+ PluginManager::unloadDLL(gtplugin);
+ return false;
+ }
+ // Attempt to resolve the plugin symbol to the list of supported file extensions.
+ fp_FileExtensions = (sdem1) PluginManager::resolveSym( gtplugin, "FileExtensions");
+ // if fp_FileExtensions is NULL, we could not find the FileExtensions symbol. The plugin is incomplete.
+ // Report an error, unload the plugin, and exit the method.
+ if (!fp_FileExtensions)
+ {
+ qWarning("Failed to get FileExtensions() from %s", pluginFilePath.toAscii().constData());
+ PluginManager::unloadDLL(gtplugin);
+ return false;
+ }
+ // Set the format name based on the resolved method.
+ *ffName = (*fp_FileFormatName)();
+ // Set the extensions list based on the resolved method.
+ *fEndings = (*fp_FileExtensions)();
+ // Unload the plugin
+ PluginManager::unloadDLL(gtplugin);
+ // Successfully return!
+ return true;
+} // bool gtGetText::DLLName(QString name, QString *ffName, QStringList *fEndings)
+
+
+QString FormatsManager::fileDialogVectorFormatList()
+{
+ QStringList formats;
+ QString allFormats = QObject::tr("All Supported Vector Formats")+" (";
+ int fmtCode = FORMATID_FIRSTUSER;
+ const FileFormat *fmt = LoadSavePlugin::getFormatById(fmtCode);
+ while (fmt != 0)
+ {
+ if (fmt->load)
+ {
+ formats.append(fmt->filter);
+ int an = fmt->filter.indexOf("(");
+ int en = fmt->filter.indexOf(")");
+ while (an != -1)
+ {
+ allFormats += fmt->filter.mid(an+1, en-an-1)+" ";
+ an = fmt->filter.indexOf("(", en);
+ en = fmt->filter.indexOf(")", an);
+ }
+ }
+ fmtCode++;
+ fmt = LoadSavePlugin::getFormatById(fmtCode);
+ }
+ allFormats += "*.sce *.SCE);;";
+ formats.append("Scribus Objects (*.sce *.SCE)");
+ qSort(formats);
+ allFormats += formats.join(";;");
+ return allFormats;
+}
+
+bool FormatsManager::isVectorFile(QString fileName)
+{
+ QStringList formats;
+ QFileInfo fi(fileName);
+ int fmtCode = FORMATID_FIRSTUSER;
+ const FileFormat *fmt = LoadSavePlugin::getFormatById(fmtCode);
+ while (fmt != 0)
+ {
+ if (fmt->load)
+ {
+ formats.append(fmt->filter);
+ int an = fmt->filter.indexOf("(");
+ int en = fmt->filter.indexOf(")");
+ while (an != -1)
+ {
+ if(fmt->filter.mid(an+1, en-an-1).toLower().contains(fi.suffix().toLower()))
+ return true;
+ an = fmt->filter.indexOf("(", en);
+ en = fmt->filter.indexOf(")", an);
+ }
+ }
+ fmtCode++;
+ fmt = LoadSavePlugin::getFormatById(fmtCode);
+ }
+ if(QString("*.sce *.SCE").toLower().contains(fi.suffix().toLower()))
+ return true;
+ return false;
+}
diff --git a/Scribus/scribus/util_formats.h b/Scribus/scribus/util_formats.h
index bb717a9..95ef0c0 100644
--- a/Scribus/scribus/util_formats.h
+++ b/Scribus/scribus/util_formats.h
@@ -31,6 +31,21 @@ bool SCRIBUS_API extensionIndicatesPattern(const QString &ext);
bool SCRIBUS_API extensionIndicatesTIFF(const QString &ext);
QString SCRIBUS_API getImageType(QString filename);
+
+// A struct for holding the Importer specific information.
+struct ImporterData {
+ QString soFilePath; // Path to the Importer
+ QString fileFormatName; // Name of the Importer
+ QStringList fileEndings; // Array of filenames supported by the importer
+};
+
+// A Struct for holding the results of the File selection Dialog
+struct ImportSetup {
+ QStringList filename; // What filename is to be loaded?
+ bool textOnly; // Do we import as text only?
+ QString encoding; // File encoding
+};
+
class SCRIBUS_API FormatsManager
{
public:
@@ -126,7 +141,15 @@ class SCRIBUS_API FormatsManager
//! Returns in the form of "All Supported Formats (*.eps *.EPS *.epsf *.EPSF *.epsi *.EPSI);;EPS (*.eps *.EPS);;EPSI (*.epsf *.EPSF);;EPSI (*.epsi *.EPSI);;All Files (*)"
QString fileDialogFormatList(int type);
-
+ QString fileDialogTextFormatList();
+ QString fileDialogVectorFormatList();
+
+ bool isVectorFile(QString);
+
+ QMap<QString, ImporterData*> getMap(){return importerMap;}
+ QList<ImporterData> getImporters(){return importers;}
+ QStringList getIlist(){return ilist;}
+
protected:
QMap<int, QString> m_fmtNames;
QMap<int, QStringList> m_fmtMimeTypes;
@@ -146,6 +169,20 @@ class SCRIBUS_API FormatsManager
* instance().
*/
static FormatsManager* _instance;
+
+//we need some informations about importer and dll to know which text format can be use
+
+ QMap<QString, ImporterData*> importerMap; // QMap of the supported extensions to their relevant importers entry for easy access
+ QStringList ilist; // List of supported importers, used with dialogs
+ QList<ImporterData> importers; // Vector of the loaded importers
+
+ void loadImporterPlugins(); // Find the available plugins based on the environment, validate they load, and
+ // create quick lookup mappings.
+ void createMap(); // Create the importer Qmap.
+
+ bool DLLName(QString name, QString *ffName, QStringList *fileEndings);
+ // Loads the "DLL", validates the importer is good, populates the passed parameters with
+ // the plugin information.
};
#endif
unitloaderpatch.diff (135,287 bytes)
diff --git a/Scribus/Scribus.pro b/Scribus/Scribus.pro
index a17cc45..ee124db 100644
--- a/Scribus/Scribus.pro
+++ b/Scribus/Scribus.pro
@@ -595,7 +595,6 @@ HEADERS += scribus/actionmanager.h \
scribus/ui/gradientpreview.h \
scribus/ui/gradientvectordialog.h \
scribus/ui/gtdialogs.h \
- scribus/ui/gtfiledialog.h \
scribus/ui/guidemanager.h \
scribus/ui/helpbrowser.h \
scribus/ui/helpnavigation.h \
@@ -1128,7 +1127,8 @@ HEADERS += scribus/actionmanager.h \
scribus/styles/cellstyle.attrdefs.cxx \
scribus/main_nix.cpp \
scribus/main_win32.cpp \
- scribus/styles/linestyle.attrdefs.cxx
+ scribus/styles/linestyle.attrdefs.cxx \
+ scribus/canvasmode_importdata.h
FORMS += scribus/ui/aboutplugins.ui \
scribus/ui/aligndistribute.ui \
scribus/ui/arcvectorbase.ui \
@@ -1142,7 +1142,6 @@ FORMS += scribus/ui/aboutplugins.ui \
scribus/ui/gradientaddedit.ui \
scribus/ui/gradienteditor.ui \
scribus/ui/gradientvectorbase.ui \
- scribus/ui/gtfiledialog.ui \
scribus/ui/guidemanager.ui \
scribus/ui/helpbrowser.ui \
scribus/ui/helpbrowsernavigation.ui \
@@ -1606,7 +1605,6 @@ SOURCES += scribus/actionmanager.cpp \
scribus/ui/gradientpreview.cpp \
scribus/ui/gradientvectordialog.cpp \
scribus/ui/gtdialogs.cpp \
- scribus/ui/gtfiledialog.cpp \
scribus/ui/guidemanager.cpp \
scribus/ui/helpbrowser.cpp \
scribus/ui/helpnavigation.cpp \
@@ -2177,7 +2175,8 @@ SOURCES += scribus/actionmanager.cpp \
scribus/plugins/tools/2geomtools/meshdistortion/meshdistortion.cpp \
scribus/plugins/tools/2geomtools/meshdistortion/meshdistortiondialog.cpp \
scribus/plugins/tools/2geomtools/pathalongpath/pathalongpath.cpp \
- scribus/plugins/tools/2geomtools/pathalongpath/pathdialog.cpp
+ scribus/plugins/tools/2geomtools/pathalongpath/pathdialog.cpp \
+ scribus/canvasmode_importdata.cpp
RESOURCES += scribus/plugins/scripter/python/sceditor/dockwidget_icons.qrc
TRANSLATIONS += resources/translations/po/scribus.af.ts \
resources/translations/po/scribus.ar.ts \
diff --git a/Scribus/scribus/CMakeLists.txt b/Scribus/scribus/CMakeLists.txt
index 80cea9d..7d4e840 100644
--- a/Scribus/scribus/CMakeLists.txt
+++ b/Scribus/scribus/CMakeLists.txt
@@ -78,7 +78,6 @@ SET(SCRIBUS_UI_SRC
ui/gradientaddedit.ui
ui/gradienteditor.ui
ui/gradientvectorbase.ui
- ui/gtfiledialog.ui
ui/guidemanager.ui
ui/insertaframe.ui
ui/inserttablecolumnsdialog.ui
@@ -312,7 +311,6 @@ SET(SCRIBUS_MOC_CLASSES
ui/gradientvectordialog.h
ui/gradientpreview.h
ui/gtdialogs.h
- ui/gtfiledialog.h
ui/guidemanager.h
ui/helpbrowser.h
ui/hruler.h
@@ -515,7 +513,7 @@ SET(SCRIBUS_SOURCES
canvasmode_drawfreehand.cpp
canvasmode_eyedropper.cpp
canvasmode_framelinks.cpp
- canvasmode_imageimport.cpp
+ canvasmode_importdata.cpp
canvasmode_edit.cpp
canvasmode_editarc.cpp
canvasmode_editgradient.cpp
@@ -758,7 +756,6 @@ SET(SCRIBUS_SOURCES
ui/gradientvectordialog.cpp
ui/gradientpreview.cpp
ui/gtdialogs.cpp
- ui/gtfiledialog.cpp
ui/guidemanager.cpp
ui/helpbrowser.cpp
ui/hruler.cpp
diff --git a/Scribus/scribus/actionmanager.cpp b/Scribus/scribus/actionmanager.cpp
index 39a7274..f3a6ab4 100644
--- a/Scribus/scribus/actionmanager.cpp
+++ b/Scribus/scribus/actionmanager.cpp
@@ -118,15 +118,7 @@ void ActionManager::initFileMenuActions()
name="fileCollect";
scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
//File Import Menu
- name="fileImportText";
- scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
- name="fileImportText2";
- scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
- name="fileImportAppendText";
- scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
- name="fileImportImage";
- scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
- name="fileImportVector";
+ name="fileImport";
scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
//File Export Menu
@@ -171,11 +163,7 @@ void ActionManager::initFileMenuActions()
connect( (*scrActions)["fileCollect"], SIGNAL(triggered()), mainWindow, SLOT(fileCollect()) );
connect( (*scrActions)["fileQuit"], SIGNAL(triggered()), mainWindow, SLOT(slotFileQuit()) );
//File Import Menu
- connect( (*scrActions)["fileImportText"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent()) );
- connect( (*scrActions)["fileImportText2"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent2()) );
- connect( (*scrActions)["fileImportAppendText"], SIGNAL(triggered()), mainWindow, SLOT(slotFileAppend()) );
- connect( (*scrActions)["fileImportImage"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent()) );
- connect( (*scrActions)["fileImportVector"], SIGNAL(triggered()), mainWindow, SLOT(importVectorFile()) );
+ connect( (*scrActions)["fileImport"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent()) );
//File Export Menu
connect( (*scrActions)["fileExportText"], SIGNAL(triggered()), mainWindow, SLOT(SaveText()) );
connect( (*scrActions)["fileExportAsEPS"], SIGNAL(triggered()), mainWindow, SLOT(SaveAsEps()) );
@@ -1426,10 +1414,7 @@ void ActionManager::languageChange()
(*scrActions)["fileSaveAs"]->setTexts( tr("Save &As..."));
(*scrActions)["fileRevert"]->setTexts( tr("Re&vert to Saved"));
(*scrActions)["fileCollect"]->setTexts( tr("Collect for O&utput..."));
- (*scrActions)["fileImportText"]->setTexts( tr("Get Text..."));
- (*scrActions)["fileImportAppendText"]->setTexts( tr("Append &Text..."));
- (*scrActions)["fileImportImage"]->setTexts( tr("Get Image..."));
- (*scrActions)["fileImportVector"]->setTexts( tr("Get Vector File..."));
+ (*scrActions)["fileImport"]->setTexts( tr("Get File..."));
(*scrActions)["fileExportText"]->setTexts( tr("Save &Text..."));
(*scrActions)["fileExportAsEPS"]->setTexts( tr("Save as &EPS..."));
@@ -1818,8 +1803,7 @@ void ActionManager::createDefaultShortcuts()
defKeys.insert("fileClose", QKeySequence::Close);
defKeys.insert("fileSave", QKeySequence::Save);
defKeys.insert("fileSaveAs", Qt::CTRL+Qt::SHIFT+Qt::Key_S);
- defKeys.insert("fileImportText", Qt::CTRL+Qt::Key_I);
- defKeys.insert("fileImportImage", Qt::CTRL+Qt::Key_I);
+ defKeys.insert("fileImport", Qt::CTRL+Qt::Key_I);
defKeys.insert("filePrint", QKeySequence::Print);
defKeys.insert("fileExportAsPDF", Qt::CTRL+Qt::SHIFT+Qt::Key_P);
defKeys.insert("fileQuit", Qt::CTRL+Qt::Key_Q);
@@ -1978,10 +1962,7 @@ void ActionManager::createDefaultMenus()
<< "fileSaveAs"
<< "fileRevert"
<< "fileCollect"
- << "fileImportText"
- << "fileImportAppendText"
- << "fileImportImage"
- << "fileImportVector"
+ << "fileImport"
<< "fileExportText"
<< "fileExportAsEPS"
<< "fileExportAsPDF"
diff --git a/Scribus/scribus/canvas.h b/Scribus/scribus/canvas.h
index e76447f..529d147 100644
--- a/Scribus/scribus/canvas.h
+++ b/Scribus/scribus/canvas.h
@@ -101,7 +101,7 @@ public:
friend class CanvasMode_EditTable;
friend class CanvasMode_EyeDropper;
friend class CanvasMode_FrameLinks;
- friend class CanvasMode_ImageImport;
+ friend class CanvasMode_ImportData;
friend class CanvasMode_Magnifier;
friend class CanvasMode_NodeEdit;
friend class CanvasMode_ObjImport;
diff --git a/Scribus/scribus/canvasgesture_resize.cpp b/Scribus/scribus/canvasgesture_resize.cpp
index a8e0505..ef23eeb 100644
--- a/Scribus/scribus/canvasgesture_resize.cpp
+++ b/Scribus/scribus/canvasgesture_resize.cpp
@@ -268,7 +268,7 @@ void ResizeGesture::doResize(bool scaleContent)
double imgScX = (newBounds.width() - m_extraWidth) / divX * currItem->imageXScale();
double imgScY = (newBounds.height() - m_extraHeight) / divY * currItem->imageYScale();
// The aspect ratio has been fixed, so make the modification in the direction of the larger movement.
- if (currItem->keepAspectRatio() && currItem->fitImageToFrame())
+ if (currItem->keepAspectRatio() && currItem->fitImageToFrame())
{
if (qAbs((newBounds.width() - m_extraWidth) - currItem->width()) > qAbs((newBounds.height() - m_extraHeight) - currItem->height()))
imgScY = imgScX;
@@ -305,10 +305,10 @@ void ResizeGesture::doResize(bool scaleContent)
}
// We do not want to scale the text of a linked frame
// as it would alter text in other frames of the string
- else if((currItem->itemType() == PageItem::TextFrame)
- && (currItem->nextInChain() == 0)
- && (currItem->prevInChain() == 0)
- && scaleContent)
+ else if((currItem->itemType() == PageItem::TextFrame)
+ && (currItem->nextInChain() == 0)
+ && (currItem->prevInChain() == 0)
+ && scaleContent)
{
double divX = (currItem->width() != 0) ? currItem->width() : 1.0;
double divY = (currItem->height() != 0) ? currItem->height() : 1.0;
@@ -352,8 +352,8 @@ void ResizeGesture::doResize(bool scaleContent)
if (mm.m22() < 0)
dy *= -1;
currItem->moveBy(-dx, -dy, true);
- currItem->setWidth(newBounds.width() / m_scaleX - m_extraWidth);
- currItem->setHeight(newBounds.height() / m_scaleY - m_extraHeight);
+ currItem->setWidth(newBounds.width() / m_scaleX - m_extraWidth + currItem->lineWidth());
+ currItem->setHeight(newBounds.height() / m_scaleY - m_extraHeight + currItem->lineWidth());
if (mm.m11() < 0)
currItem->moveBy(-currItem->width(), 0);
if (mm.m22() < 0)
diff --git a/Scribus/scribus/canvasgesture_rulermove.cpp b/Scribus/scribus/canvasgesture_rulermove.cpp
index ee61520..5c107ab 100644
--- a/Scribus/scribus/canvasgesture_rulermove.cpp
+++ b/Scribus/scribus/canvasgesture_rulermove.cpp
@@ -158,14 +158,20 @@ void RulerGesture::mouseSelectGuide(QMouseEvent *m)
void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
{
FPoint mousePointDoc = m_canvas->globalToCanvas(m->globalPos());
- const int page = m_doc->OnPage(mousePointDoc.x(), mousePointDoc.y());
+ double x = mousePointDoc.x(), y = mousePointDoc.y();
+ double dx = -x, dy = -y;
+ m_doc->ApplyGuides(&x,&y,true);
+ dx += x;
+ dy += y;
+ const int page = m_doc->OnPage(x, y);
QRect viewport(m_view->viewport()->mapToGlobal(QPoint(0,0)), QSize(m_view->visibleWidth(), m_view->visibleHeight()));
- QPoint newMousePoint = m->globalPos() - (m_canvas->mapToParent(QPoint(0, 0)) + m_canvas->parentWidget()->mapToGlobal(QPoint(0, 0)));
+ QPointF newMousePoint = m->globalPos() - (m_canvas->mapToParent(QPoint(0, 0)) + m_canvas->parentWidget()->mapToGlobal(QPoint(0, 0)));
+ newMousePoint += QPointF(dx,dy)*m_canvas->scale();
switch (m_mode)
{
case ORIGIN:
m_canvas->repaint();
- m_canvas->displayCorrectedXYHUD(m->globalPos(), mousePointDoc.x(), mousePointDoc.y());
+ m_canvas->displayCorrectedXYHUD(m->globalPos(), x, y);
break;
case HORIZONTAL:
if (!m_ScMW->doc->guidesPrefs().guidesShown)
@@ -179,8 +185,8 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
qApp->changeOverrideCursor(QCursor(Qt::SplitVCursor));
if (mouseRelease)
{
- m_doc->Pages->at(page)->guides.addHorizontal(mousePointDoc.y() - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
- m_guide = mousePointDoc.y() - m_doc->Pages->at(page)->yOffset();
+ m_doc->Pages->at(page)->guides.addHorizontal(y - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
+ m_guide = y - m_doc->Pages->at(page)->yOffset();
m_page = page;
m_haveGuide = true;
m_doc->changed();
@@ -189,11 +195,11 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
else if (mouseRelease)
{
if (page == m_page)
- m_doc->Pages->at(page)->guides.moveHorizontal( m_guide, mousePointDoc.y() - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
+ m_doc->Pages->at(page)->guides.moveHorizontal( m_guide, y - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
else
{
m_doc->Pages->at(m_page)->guides.deleteHorizontal( m_guide, GuideManagerCore::Standard);
- m_doc->Pages->at(page)->guides.addHorizontal(mousePointDoc.y() - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
+ m_doc->Pages->at(page)->guides.addHorizontal(y - m_doc->Pages->at(page)->yOffset(), GuideManagerCore::Standard);
m_page = page;
}
if (m_doc->currentPage() != m_doc->Pages->at(m_page))
@@ -206,7 +212,7 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
if (cursor && (cursor->shape() != Qt::SplitVCursor))
qApp->changeOverrideCursor(QCursor(Qt::SplitVCursor));
}
- m_currentGuide = mousePointDoc.y() - m_doc->Pages->at(page)->yOffset();
+ m_currentGuide = y - m_doc->Pages->at(page)->yOffset();
}
else
{
@@ -221,7 +227,7 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
}
}
}
- m_canvas->displayCorrectedSingleHUD(m->globalPos(), mousePointDoc.y(), false);
+ m_canvas->displayCorrectedSingleHUD(m->globalPos(),y, false);
break;
case VERTICAL:
if (!m_ScMW->doc->guidesPrefs().guidesShown)
@@ -235,8 +241,8 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
qApp->changeOverrideCursor(QCursor(Qt::SplitHCursor));
if (mouseRelease)
{
- m_doc->Pages->at(page)->guides.addVertical(mousePointDoc.x() - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
- m_guide = mousePointDoc.x() - m_doc->Pages->at(page)->xOffset();
+ m_doc->Pages->at(page)->guides.addVertical(x - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
+ m_guide = x - m_doc->Pages->at(page)->xOffset();
m_page = page;
m_haveGuide = true;
m_doc->changed();
@@ -245,11 +251,11 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
else if (mouseRelease)
{
if (page == m_page)
- m_doc->Pages->at(page)->guides.moveVertical( m_guide, mousePointDoc.x() - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
+ m_doc->Pages->at(page)->guides.moveVertical( m_guide,x - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
else
{
m_doc->Pages->at(m_page)->guides.deleteVertical( m_guide, GuideManagerCore::Standard);
- m_doc->Pages->at(page)->guides.addVertical(mousePointDoc.x() - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
+ m_doc->Pages->at(page)->guides.addVertical(x - m_doc->Pages->at(page)->xOffset(), GuideManagerCore::Standard);
m_page = page;
}
if (m_doc->currentPage() != m_doc->Pages->at(m_page))
@@ -262,7 +268,7 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
if (cursor && (cursor->shape() != Qt::SplitHCursor))
qApp->changeOverrideCursor(QCursor(Qt::SplitHCursor));
}
- m_currentGuide = mousePointDoc.x() - m_doc->Pages->at(page)->xOffset();
+ m_currentGuide = x - m_doc->Pages->at(page)->xOffset();
}
else
{
@@ -277,7 +283,7 @@ void RulerGesture::movePoint(QMouseEvent* m, bool mouseRelease)
}
}
}
- m_canvas->displayCorrectedSingleHUD(m->globalPos(), mousePointDoc.x(), true);
+ m_canvas->displayCorrectedSingleHUD(m->globalPos(), x, true);
break;
}
m_xy = newMousePoint;
diff --git a/Scribus/scribus/canvasgesture_rulermove.h b/Scribus/scribus/canvasgesture_rulermove.h
index 42eaf17..c2cd312 100644
--- a/Scribus/scribus/canvasgesture_rulermove.h
+++ b/Scribus/scribus/canvasgesture_rulermove.h
@@ -88,7 +88,7 @@ private:
double m_currentGuide;
bool m_haveCursor;
QCursor m_cursor;
- QPoint m_xy;
+ QPointF m_xy;
void movePoint(QMouseEvent *m, bool mouseRelease);
signals:
diff --git a/Scribus/scribus/canvasmode.cpp b/Scribus/scribus/canvasmode.cpp
index b09f184..a501b1d 100644
--- a/Scribus/scribus/canvasmode.cpp
+++ b/Scribus/scribus/canvasmode.cpp
@@ -34,7 +34,7 @@
#include "canvasmode_editweldpoint.h"
#include "canvasmode_eyedropper.h"
#include "canvasmode_framelinks.h"
-#include "canvasmode_imageimport.h"
+#include "canvasmode_importdata.h"
#include "canvasmode_magnifier.h"
#include "canvasmode_measurements.h"
#include "canvasmode_nodeedit.h"
@@ -177,8 +177,8 @@ CanvasMode* CanvasMode::createForAppMode(ScribusView* view, int appMode)
case modeUnlinkFrames:
result = new CanvasMode_FrameLinks(view);
break;
- case modeImportImage:
- result = new CanvasMode_ImageImport(view);
+ case modeImportData:
+ result = new CanvasMode_ImportData(view);
break;
case modeMagnifier:
result = new CanvasMode_Magnifier(view);
diff --git a/Scribus/scribus/canvasmode_create.cpp b/Scribus/scribus/canvasmode_create.cpp
index 6a71ebf..ed3029f 100644
--- a/Scribus/scribus/canvasmode_create.cpp
+++ b/Scribus/scribus/canvasmode_create.cpp
@@ -596,15 +596,8 @@ PageItem* CreateMode::doCreateNewObject(void)
skipOneClick = false;
}
if (!skipOneClick)
- {
if ((!m_view->moveTimerElapsed()) || ((fabs(wSize) < 2.0) && (fabs(hSize) < 2.0)))
- {
- if (!doOneClick(createObjectPos, canvasCurrCoord))
- {
- return NULL;
- }
- }
- }
+ !doOneClick(createObjectPos, canvasCurrCoord);
wSize = canvasCurrCoord.x() - createObjectPos.x();
hSize = canvasCurrCoord.y() - createObjectPos.y();
@@ -850,102 +843,78 @@ PageItem* CreateMode::doCreateNewObject(void)
bool CreateMode::doOneClick(FPoint& startPoint, FPoint& endPoint)
{
- bool doCreate = false;
double xSize, ySize;
int originPoint = 0;
if (QApplication::keyboardModifiers() & Qt::ControlModifier)
return true;
- PrefsContext* sizes = PrefsManager::instance()->prefsFile->getContext("ObjectSize");
- bool doRemember = sizes->getBool("Remember", true);
+ ItemToolPrefs sizes = m_doc->prefsData().itemToolPrefs;
int lmode = (createObjectMode == modeDrawLine) ? 1 : 0;
- if (lmode == 0)
- {
- xSize = sizes->getDouble("defWidth", 100.0);
- ySize = sizes->getDouble("defHeight", 100.0);
- originPoint = sizes->getInt("Origin", 0);
- }
- else
- {
- xSize = sizes->getDouble("defLength", 100.0);
- ySize = sizes->getDouble("defAngle", 0.0);
- originPoint = sizes->getInt("OriginL", 0);
- }
+ xSize = sizes.imageDefaultWidth;
+ ySize = sizes.imageDefaultHeight;
+ originPoint = sizes.imageDefaultBasePoint;
-// qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
- OneClick *dia = new OneClick(m_view, ScribusView::tr("Enter Object Size"), m_doc->unitIndex(), xSize, ySize, doRemember, originPoint, lmode);
- if (dia->exec())
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+ OneClick *dia = NULL;
+ if(sizes.imageDefaultSize > 1 && !(view()->ImageAfterDraw && sizes.imageDefaultSize == 2))
{
- doRemember = dia->checkRemember->isChecked();
- if (lmode == 0)
+ dia = new OneClick(m_view, ScribusView::tr("Enter Object Size"), m_doc->unitIndex(), xSize, ySize, originPoint, lmode);
+ if (dia->exec())
{
xSize = dia->spinWidth->value() / unitGetRatioFromIndex(m_doc->unitIndex());
ySize = dia->spinHeight->value() / unitGetRatioFromIndex(m_doc->unitIndex());
originPoint = dia->RotationGroup->checkedId();
- if (doRemember)
- {
- sizes->set("defWidth", xSize);
- sizes->set("defHeight", ySize);
- sizes->set("Origin", originPoint);
- }
- endPoint.setXY(startPoint.x() + xSize, startPoint.y() + ySize);
- switch (originPoint)
- {
- case 0:
- break;
- case 1:
- startPoint.setX(startPoint.x() - xSize);
- endPoint.setX(endPoint.x() - xSize);
- break;
- case 2:
- startPoint.setXY(startPoint.x() - xSize / 2.0, startPoint.y() - ySize / 2.0);
- endPoint.setXY(endPoint.x() - xSize / 2.0, endPoint.y() - ySize / 2.0);
- break;
- case 3:
- startPoint.setY(startPoint.y() - ySize);
- endPoint.setY(endPoint.y() - ySize);
- break;
- case 4:
- startPoint.setXY(startPoint.x() - xSize, startPoint.y() - ySize);
- endPoint.setXY(endPoint.x() - xSize, endPoint.y() - ySize);
- break;
- }
}
- else
+ }
+ if (lmode == 0)
+ {
+ endPoint.setXY(startPoint.x() + xSize, startPoint.y() + ySize);
+ switch (originPoint)
{
- FPoint oldStart = startPoint;
- xSize = dia->spinWidth->value() / unitGetRatioFromIndex(m_doc->unitIndex());
- ySize = dia->spinHeight->value();
- originPoint = dia->RotationGroup->checkedId();
- if (doRemember)
- {
- sizes->set("defLength", xSize);
- sizes->set("defAngle", ySize);
- sizes->set("OriginL", originPoint);
- }
- double angle = -ySize * M_PI / 180.0;
- switch (originPoint)
- {
- case 0:
- endPoint = FPoint(startPoint.x() + xSize * cos(angle), startPoint.y() + xSize * sin(angle));
- break;
- case 1:
- startPoint = FPoint(oldStart.x() - xSize * cos(angle), oldStart.y() - xSize * sin(angle));
- endPoint = oldStart;
- break;
- case 2:
- startPoint = FPoint(oldStart.x() - xSize / 2.0 * cos(angle), oldStart.y() - xSize / 2.0 * sin(angle));
- endPoint = FPoint(oldStart.x() + xSize / 2.0 * cos(angle), oldStart.y() + xSize / 2.0 * sin(angle));
- break;
- }
+ case 0:
+ break;
+ case 1:
+ startPoint.setX(startPoint.x() - xSize);
+ endPoint.setX(endPoint.x() - xSize);
+ break;
+ case 2:
+ startPoint.setXY(startPoint.x() - xSize / 2.0, startPoint.y() - ySize / 2.0);
+ endPoint.setXY(endPoint.x() - xSize / 2.0, endPoint.y() - ySize / 2.0);
+ break;
+ case 3:
+ startPoint.setY(startPoint.y() - ySize);
+ endPoint.setY(endPoint.y() - ySize);
+ break;
+ case 4:
+ startPoint.setXY(startPoint.x() - xSize, startPoint.y() - ySize);
+ endPoint.setXY(endPoint.x() - xSize, endPoint.y() - ySize);
+ break;
+ }
+ }
+ else
+ {
+ FPoint oldStart = startPoint;
+ double angle = -ySize * M_PI / 180.0;
+ switch (originPoint)
+ {
+ case 0:
+ endPoint = FPoint(startPoint.x() + xSize * cos(angle), startPoint.y() + xSize * sin(angle));
+ break;
+ case 1:
+ startPoint = FPoint(oldStart.x() - xSize * cos(angle), oldStart.y() - xSize * sin(angle));
+ endPoint = oldStart;
+ break;
+ case 2:
+ startPoint = FPoint(oldStart.x() - xSize / 2.0 * cos(angle), oldStart.y() - xSize / 2.0 * sin(angle));
+ endPoint = FPoint(oldStart.x() + xSize / 2.0 * cos(angle), oldStart.y() + xSize / 2.0 * sin(angle));
+ break;
}
- sizes->set("Remember", doRemember);
- doCreate = true;
}
- delete dia;
- return doCreate;
+ if(dia)
+ delete dia;
+ return true;
}
FRect CreateMode::adjustedRect(FPoint &firstPoint, FPoint &secondPoint)
diff --git a/Scribus/scribus/canvasmode_imageimport.cpp b/Scribus/scribus/canvasmode_imageimport.cpp
deleted file mode 100644
index 5c88e07..0000000
--- a/Scribus/scribus/canvasmode_imageimport.cpp
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- 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.
- */
-/***************************************************************************
-* *
-* This program is free software; you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation; either version 2 of the License, or *
-* (at your option) any later version. *
-* *
-***************************************************************************/
-
-#include "canvasmode_imageimport.h"
-
-#include <QApplication>
-#include <QBuffer>
-#include <QCursor>
-#include <QEvent>
-#include <QMouseEvent>
-#include <QPainterPath>
-#include <QPixmap>
-#include <QPoint>
-#include <QRect>
-#include <QToolTip>
-#include <QDebug>
-
-#include "canvas.h"
-#include "canvasmode.h"
-#include "prefsmanager.h"
-#include "ui/propertiespalette.h"
-#include "ui/propertiespalette_image.h"
-#include "scribus.h"
-#include "scribusdoc.h"
-#include "scribusview.h"
-#include "selection.h"
-#include "util_icon.h"
-
-CanvasMode_ImageImport::CanvasMode_ImageImport(ScribusView *view) : CanvasMode(view), m_ScMW(view->m_ScMW)
-{
- Mx=0;
- My=0;
-}
-
-void CanvasMode_ImageImport::setImageList(QStringList l)
-{
- imageList = l;
- if(l.size()==1)
- {
- while(!(m_doc->m_Selection->itemAt(0)->isImageFrame()))
- m_doc->m_Selection->removeFirst();
- if(!m_doc->m_Selection->isEmpty())
- {
- setImage(m_doc->m_Selection->itemAt(0));
- m_view->requestMode(submodePaintingDone);
- }
- else
- newToolTip(l.first());
- }
- else
- newToolTip(l.first());
-}
-
-void CanvasMode_ImageImport::newToolTip(QString name)
-{
- QPainter p;
- QImage pm = QImage(80, 80, QImage::Format_ARGB32_Premultiplied);
- QBrush b(QColor(205,205,205), loadIcon("testfill.png"));
- p.begin(&pm);
- p.fillRect(QRectF(0, 0, 80, 80), b);
- QImage thumb;
- if(thumb.load(name))
- {
- thumb = thumb.scaled(80,80,Qt::KeepAspectRatio);
- p.drawImage((80 - thumb.width()) / 2, (80 - thumb.height()) / 2, thumb);
- QBuffer buffer;
- buffer.open(QIODevice::WriteOnly);
- pm.save(&buffer, "PNG");
- QByteArray ba = buffer.buffer().toBase64();
- buffer.close();
- tipText = "<p align=\"center\"><img src=\"data:image/png;base64," + QString(ba) + "\"></p>";
- }
- else
- tipText = "<p align=\"center\">" + name.right(name.lastIndexOf("/")) + "</p>";
- QToolTip::showText(QPoint(Mx,My), tipText, qApp->activeWindow());
- p.end();
-}
-
-void CanvasMode_ImageImport::drawControls(QPainter* p)
-{
- commonDrawControls(p, false);
-}
-
-void CanvasMode_ImageImport::enterEvent(QEvent *)
-{
- if (!m_canvas->m_viewMode.m_MouseButtonPressed)
- setModeCursor();
-}
-
-void CanvasMode_ImageImport::keyPressEvent(QKeyEvent *e)
-{
- int kk = e->key();
- if (m_keyRepeat)
- return;
- m_keyRepeat = true;
- e->accept();
- switch (kk)
- {
- case Qt::Key_Tab:
- imageList.prepend(imageList.takeLast());
- break;
- case Qt::Key_Backtab:
- imageList.append(imageList.takeFirst());
- break;
- case Qt::Key_Backspace:
- imageList.removeFirst();
- break;
- case Qt::Key_Escape:
- imageList.clear();
- break;
- }
- updateList();
- m_keyRepeat = false;
-}
-
-
-void CanvasMode_ImageImport::leaveEvent(QEvent *e)
-{
-}
-
-void CanvasMode_ImageImport::activate(bool fromGesture)
-{
- m_canvas->m_viewMode.m_MouseButtonPressed = false;
- m_canvas->resetRenderMode();
- m_keyRepeat = false;
- m_doc->DragP = false;
- m_doc->leaveDrag = false;
- m_canvas->m_viewMode.operItemMoving = false;
- m_canvas->m_viewMode.operItemResizing = false;
- m_view->MidButt = false;
- setModeCursor();
- if (fromGesture)
- m_view->update();
-}
-
-void CanvasMode_ImageImport::deactivate(bool forGesture)
-{
- m_view->setRedrawMarkerShown(false);
-}
-
-void CanvasMode_ImageImport::mouseDoubleClickEvent(QMouseEvent *m)
-{
- m->accept();
- m_canvas->m_viewMode.m_MouseButtonPressed = false;
- m_canvas->resetRenderMode();
-}
-
-void CanvasMode_ImageImport::mouseMoveEvent(QMouseEvent *m)
-{
- Mx = m->globalPos().x();
- My = m->globalPos().y();
- QToolTip::showText(m->globalPos(), tipText, qApp->activeWindow());
- QToolTip::showText(m->globalPos(), tipText + "<b></b>", qApp->activeWindow());
- m->accept();
- PageItem *item;
- if((item = m_canvas->itemUnderCursor(m->globalPos())) != NULL)
- {
- PageItem_ImageFrame *currItem;
- if((currItem = item->asImageFrame()) != NULL)
- m_view->setCursor(QCursor(loadIcon("DrawImageFrame.xpm")));
- else
- m_view->setCursor(QCursor(Qt::ArrowCursor));
- }
- else
- m_view->setCursor(QCursor(loadIcon("DrawImageFrame.xpm")));
- if (commonMouseMove(m))
- return;
-}
-
-void CanvasMode_ImageImport::mousePressEvent(QMouseEvent *m)
-{
- m_canvas->PaintSizeRect(QRect());
- m_canvas->m_viewMode.m_MouseButtonPressed = true;
- m_canvas->m_viewMode.operItemMoving = false;
- m_view->HaveSelRect = false;
- m_doc->DragP = false;
- m_doc->leaveDrag = false;
- m->accept();
- m_view->registerMousePress(m->globalPos());
- PageItem *item;
- if(imageList.size()>0)
- {
- if((item = m_canvas->itemUnderCursor(m->globalPos())) != NULL)
- {
- PageItem_ImageFrame *currItem;
- if((currItem = item->asImageFrame()) != NULL)
- setImage(currItem);
- }
- else
- view()->ImageAfterDraw = true;
- }
- if (m->button() == Qt::MidButton)
- {
- m_view->MidButt = true;
- if (m->modifiers() & Qt::ControlModifier)
- m_view->DrawNew();
- return;
- }
-}
-
-void CanvasMode_ImageImport::mouseReleaseEvent(QMouseEvent *m)
-{
- m_canvas->m_viewMode.m_MouseButtonPressed = false;
- m_canvas->resetRenderMode();
- m->accept();
- m_view->updateContents();
- m_canvas->setRenderModeUseBuffer(false);
- m_doc->DragP = false;
- m_doc->leaveDrag = false;
- m_canvas->m_viewMode.operItemMoving = false;
- m_canvas->m_viewMode.operItemResizing = false;
- m_view->MidButt = false;
- updateList();
-}
-
-void CanvasMode_ImageImport::setImage(PageItem *currItem)
-{
- QString fileName = imageList.takeFirst();
- currItem->EmProfile = "";
- currItem->pixm.imgInfo.isRequest = false;
- currItem->UseEmbedded = true;
- currItem->IProfile = m_doc->cmsSettings().DefaultImageRGBProfile;
- currItem->IRender = m_doc->cmsSettings().DefaultIntentImages;
- qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
- m_doc->loadPict(fileName, currItem, false, true);
- m_ScMW->propertiesPalette->imagePal->displayScaleAndOffset(currItem->imageXScale(), currItem->imageYScale(), currItem->imageXOffset(), currItem->imageYOffset());
- m_ScMW->repaint();
- qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
- m_view->DrawNew();
- currItem->emitAllToGUI();
-}
-
-void CanvasMode_ImageImport::updateList()
-{
- if(imageList.isEmpty())
- {
- m_view->requestMode(submodePaintingDone);
- QToolTip::hideText();
- }
- else
- newToolTip(imageList.first());
-}
diff --git a/Scribus/scribus/canvasmode_imageimport.h b/Scribus/scribus/canvasmode_imageimport.h
deleted file mode 100644
index 673dfba..0000000
--- a/Scribus/scribus/canvasmode_imageimport.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- 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.
- */
-/***************************************************************************
-* *
-* This program is free software; you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation; either version 2 of the License, or *
-* (at your option) any later version. *
-* *
-***************************************************************************/
-
-
-#ifndef CANVASMODE_IMAGEIMPORT_H
-#define CANVASMODE_IMAGEIMPORT_H
-
-#include <QEvent>
-#include <QMouseEvent>
-#include <QPainter>
-#include <QPixmap>
-#include <QStringList>
-
-#include "canvasmode.h"
-
-class PageItem;
-class ScribusView;
-class ScribusMainWindow;
-
-class CanvasMode_ImageImport : public CanvasMode
-{
-public:
- explicit CanvasMode_ImageImport(ScribusView* view);
- virtual ~CanvasMode_ImageImport() {}
-
- virtual void enterEvent(QEvent *);
- virtual void leaveEvent(QEvent *);
-
- virtual void activate(bool);
- virtual void deactivate(bool);
- virtual void keyPressEvent(QKeyEvent *e);
- virtual bool handleKeyEvents() { return true; }
- virtual void mouseDoubleClickEvent(QMouseEvent *m);
- virtual void mouseReleaseEvent(QMouseEvent *m);
- virtual void mouseMoveEvent(QMouseEvent *m);
- virtual void mousePressEvent(QMouseEvent *m);
- virtual void drawControls(QPainter* p);
-
- void setImageList(QStringList l);
- void setImage(PageItem* item);
- void updateList();
-
-private:
- bool m_keyRepeat;
- QString tipText;
- QStringList imageList;
- ScribusMainWindow *m_ScMW;
- double Mx, My;
- void newToolTip(QString name);
-};
-
-#endif // CANVASMODE_IMAGEIMPORT_H
diff --git a/Scribus/scribus/canvasmode_importdata.cpp b/Scribus/scribus/canvasmode_importdata.cpp
new file mode 100644
index 0000000..7d304dd
--- /dev/null
+++ b/Scribus/scribus/canvasmode_importdata.cpp
@@ -0,0 +1,337 @@
+/*
+ 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.
+ */
+/***************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+***************************************************************************/
+
+#include "canvasmode_importdata.h"
+
+#include <QApplication>
+#include <QBuffer>
+#include <QCursor>
+#include <QDrag>
+#include <QEvent>
+#include <QMessageBox>
+#include <QMouseEvent>
+#include <QPainterPath>
+#include <QPixmap>
+#include <QPoint>
+#include <QRect>
+#include <QToolTip>
+#include <QUrl>
+#include <QDebug>
+
+#include "canvas.h"
+#include "canvasmode.h"
+#include "ui/bookmarkpalette.h"
+#include "fileloader.h"
+#include "plugins/formatidlist.h"
+#include "hyphenator.h"
+#include "loadsaveplugin.h"
+#include "pageitem_textframe.h"
+#include "prefsmanager.h"
+#include "ui/propertiespalette.h"
+#include "ui/propertiespalette_image.h"
+#include "scribus.h"
+#include "scribusdoc.h"
+#include "scribusview.h"
+#include "selection.h"
+#include "ui/stylemanager.h"
+#include "util_formats.h"
+#include "util_icon.h"
+
+CanvasMode_ImportData::CanvasMode_ImportData(ScribusView *view) : CanvasMode(view), m_ScMW(view->m_ScMW)
+{
+ pw = new FDialogPreview(m_ScMW,Qt::ToolTip);
+ trans = NULL;
+}
+
+void CanvasMode_ImportData::setInformation(ImportSetup is)
+{
+ impsetup = is;
+ if(!m_doc->m_Selection->isEmpty() && is.filename.size()==1)
+ {
+ if(m_doc->m_Selection->itemAt(0)->isTextFrame())
+ {
+ setText(m_doc->m_Selection->itemAt(0)->asTextFrame());
+ m_view->requestMode(submodePaintingDone);
+ }
+ else if(m_doc->m_Selection->itemAt(0)->isImageFrame())
+ {
+ setImage(m_doc->m_Selection->itemAt(0)->asImageFrame());
+ m_view->requestMode(submodePaintingDone);
+ }
+ else
+ pw->GenPreview(is.filename.first());
+ }
+ else
+ pw->GenPreview(is.filename.first());
+}
+
+void CanvasMode_ImportData::drawControls(QPainter* p)
+{
+ commonDrawControls(p, false);
+}
+
+void CanvasMode_ImportData::enterEvent(QEvent *)
+{
+ if (!m_canvas->m_viewMode.m_MouseButtonPressed)
+ setModeCursor();
+}
+
+void CanvasMode_ImportData::keyPressEvent(QKeyEvent *e)
+{
+ int kk = e->key();
+ if (m_keyRepeat)
+ return;
+ m_keyRepeat = true;
+ e->accept();
+ switch (kk)
+ {
+ case Qt::Key_Tab:
+ impsetup.filename.prepend(impsetup.filename.takeLast());
+ break;
+ case Qt::Key_Backtab:
+ impsetup.filename.append(impsetup.filename.takeFirst());
+ break;
+ case Qt::Key_Backspace:
+ impsetup.filename.removeFirst();
+ break;
+ case Qt::Key_Escape:
+ impsetup.filename.clear();
+ break;
+ }
+ updateList();
+ m_keyRepeat = false;
+}
+
+
+void CanvasMode_ImportData::leaveEvent(QEvent *e)
+{
+ if (!m_canvas->m_viewMode.m_MouseButtonPressed)
+ qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+}
+
+void CanvasMode_ImportData::activate(bool fromGesture)
+{
+ pw->setVisible(true);
+ m_canvas->m_viewMode.m_MouseButtonPressed = false;
+ m_canvas->resetRenderMode();
+ m_keyRepeat = false;
+ m_doc->DragP = false;
+ m_doc->leaveDrag = false;
+ m_canvas->m_viewMode.operItemMoving = false;
+ m_canvas->m_viewMode.operItemResizing = false;
+ m_view->MidButt = false;
+ setModeCursor();
+ if (fromGesture)
+ m_view->update();
+}
+
+void CanvasMode_ImportData::deactivate(bool forGesture)
+{
+ pw->hide();
+ m_view->redrawMarker->hide();
+}
+
+void CanvasMode_ImportData::mouseDoubleClickEvent(QMouseEvent *m)
+{
+ m->accept();
+ m_canvas->m_viewMode.m_MouseButtonPressed = false;
+ m_canvas->resetRenderMode();
+}
+
+void CanvasMode_ImportData::mouseMoveEvent(QMouseEvent *m)
+{
+ pw->move(m->globalPos() + QPoint(10,10));
+ m->accept();
+ if (commonMouseMove(m))
+ return;
+}
+
+void CanvasMode_ImportData::mousePressEvent(QMouseEvent *m)
+{
+ m_canvas->PaintSizeRect(QRect());
+ m_canvas->m_viewMode.m_MouseButtonPressed = true;
+ m_canvas->m_viewMode.operItemMoving = false;
+ m_view->HaveSelRect = false;
+ m_doc->DragP = false;
+ m_doc->leaveDrag = false;
+ m->accept();
+ m_view->registerMousePress(m->globalPos());
+ PageItem *item;
+ if(impsetup.filename.size()>0)
+ {
+ if(UndoManager::undoEnabled())
+ {
+ trans = new UndoTransaction(undoManager->beginTransaction(Um::NoObjectFrame, Um::IImageFrame, Um::ImportFile,"",Um::ICreate));
+ SimpleState *ss = new SimpleState(Um::ImportFile,"",Um::ICreate);
+ ss->set("FILE_LOADER","file_loader");
+ ss->set("name",impsetup.filename.first());
+ undoManager->action(m_ScMW,ss);
+ }
+ if(FormatsManager::instance()->isVectorFile(impsetup.filename.at(0)))
+ {
+ QFileInfo fi(impsetup.filename.at(0));
+ QString suffix = fi.suffix().toLower();
+ if ((suffix == "sce") || (suffix == "shape"))
+ {
+ QList<QUrl> urls;
+ QMimeData* md = new QMimeData();
+ urls.append( QUrl::fromLocalFile(impsetup.filename.takeFirst()) );
+ md->setUrls(urls);
+ QDrag* dr = new QDrag(m_ScMW);
+ dr->setMimeData(md);
+ dr->setPixmap(loadIcon("DragPix.xpm"));
+ dr->exec();
+ }
+ else
+ {
+ FileLoader *fileLoader = new FileLoader(impsetup.filename.at(0));
+ int testResult = fileLoader->testFile();
+ delete fileLoader;
+ if ((testResult != -1) && (testResult >= FORMATID_FIRSTUSER))
+ {
+ const FileFormat * fmt = LoadSavePlugin::getFormatById(testResult);
+ if( fmt )
+ {
+ m_doc->dontResize = true;
+ fmt->loadFile(impsetup.filename.takeFirst(), LoadSavePlugin::lfUseCurrentPage|LoadSavePlugin::lfInteractive);
+ m_doc->dontResize = false;
+ }
+ }
+ }
+ }
+ else if(getImageType(impsetup.filename.at(0)) == QString(""))
+ {
+ if((item = m_canvas->itemUnderCursor(m->globalPos())) != NULL)
+ {
+ if((item->asTextFrame()) != NULL)
+ setText(item->asTextFrame());
+ else
+ view()->TextAfterDraw = true;
+ }
+ else
+ view()->TextAfterDraw = true;
+ }
+ else if((item = m_canvas->itemUnderCursor(m->globalPos())) != NULL)
+ {
+ if((item->asImageFrame()) != NULL)
+ setImage(item->asImageFrame());
+ else
+ view()->ImageAfterDraw = true;
+ }
+ else
+ view()->ImageAfterDraw = true;
+ }
+ if (m->button() == Qt::MidButton)
+ {
+ m_view->MidButt = true;
+ if (m->modifiers() & Qt::ControlModifier)
+ m_view->DrawNew();
+ return;
+ }
+}
+
+void CanvasMode_ImportData::mouseReleaseEvent(QMouseEvent *m)
+{
+ m_canvas->m_viewMode.m_MouseButtonPressed = false;
+ m_canvas->resetRenderMode();
+ m->accept();
+ m_view->updateContents();
+ m_canvas->setRenderModeUseBuffer(false);
+ m_doc->DragP = false;
+ m_doc->leaveDrag = false;
+ m_canvas->m_viewMode.operItemMoving = false;
+ m_canvas->m_viewMode.operItemResizing = false;
+ m_view->MidButt = false;
+ updateList();
+}
+
+void CanvasMode_ImportData::setImage(PageItem *currItem)
+{
+ QString fileName = impsetup.filename.takeFirst();
+ currItem->EmProfile = "";
+ currItem->pixm.imgInfo.isRequest = false;
+ currItem->UseEmbedded = true;
+ currItem->IProfile = m_doc->cmsSettings().DefaultImageRGBProfile;
+ currItem->IRender = m_doc->cmsSettings().DefaultIntentImages;
+ qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
+ m_doc->loadPict(fileName, currItem, false, true);
+ // if preference is image simze value
+ if(!(1 & m_doc->prefsData().itemToolPrefs.imageDefaultSize))
+ {
+ currItem->setWidthHeight(currItem->pixm.width(),currItem->pixm.height());
+ currItem->updateClip();
+ }
+ m_ScMW->propertiesPalette->imagePal->displayScaleAndOffset(currItem->imageXScale(), currItem->imageYScale(), currItem->imageXOffset(), currItem->imageYOffset());
+ m_ScMW->repaint();
+ qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
+ m_view->DrawNew();
+ currItem->emitAllToGUI();
+}
+
+void CanvasMode_ImportData::updateList()
+{
+ if(trans)
+ {
+ trans->commit();
+ delete trans;
+ trans = NULL;
+ }
+ if(impsetup.filename.isEmpty())
+ {
+ pw->hide();
+ m_view->requestMode(submodePaintingDone);
+ }
+ else
+ pw->GenPreview(impsetup.filename.first());
+}
+
+
+void CanvasMode_ImportData::setText(PageItem_TextFrame *currItem)
+{
+ QString fileName = impsetup.filename.takeFirst();
+ gtGetText* gt = new gtGetText(m_doc);
+ if (currItem->itemText.length() != 0)
+ {
+ int t = QMessageBox::warning(m_doc->scMW(), CommonStrings::trWarning, tr("Do you really want to clear all your text?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
+ if (t == QMessageBox::No)
+ return;
+ }
+ gt->launchImporter(-1, fileName, impsetup.textOnly, impsetup.encoding, false,currItem);
+ if (m_doc->docHyphenator->AutoCheck)
+ m_doc->docHyphenator->slotHyphenate(currItem);
+ for (int a = 0; a < m_doc->Items->count(); ++a)
+ {
+ if (m_doc->Items->at(a)->isBookmark)
+ m_doc->scMW()->bookmarkPalette->BView->ChangeText(m_doc->Items->at(a));
+ }
+ m_view->DrawNew();
+ m_doc->changed();
+ m_doc->scMW()->styleMgr()->setDoc(m_doc);
+ delete gt;
+}
+
+void CanvasMode_ImportData::insertImage(int i,QString fileName)
+{
+ impsetup.filename.insert(i, fileName);
+ if(i==0)
+ {
+ pw->GenPreview(fileName);
+ }
+}
+
+void CanvasMode_ImportData::deleteImage(QString fileName)
+{
+ impsetup.filename.removeAt(impsetup.filename.indexOf(fileName));
+}
diff --git a/Scribus/scribus/canvasmode_importdata.h b/Scribus/scribus/canvasmode_importdata.h
new file mode 100644
index 0000000..3c790fb
--- /dev/null
+++ b/Scribus/scribus/canvasmode_importdata.h
@@ -0,0 +1,69 @@
+/*
+ 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.
+ */
+/***************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+***************************************************************************/
+
+
+#ifndef CANVASMODE_IMPORTDATA_H
+#define CANVASMODE_IMPORTDATA_H
+
+#include <QEvent>
+#include <QMouseEvent>
+#include <QPainter>
+#include <QPixmap>
+#include <QStringList>
+
+#include "canvasmode.h"
+#include "ui/customfdialog.h"
+#include "gtgettext.h"
+#include "undomanager.h"
+
+class PageItem;
+class ScribusView;
+class ScribusMainWindow;
+
+class CanvasMode_ImportData : public CanvasMode
+{
+public:
+ explicit CanvasMode_ImportData(ScribusView* view);
+ virtual ~CanvasMode_ImportData() {}
+
+ virtual void enterEvent(QEvent *);
+ virtual void leaveEvent(QEvent *);
+
+ virtual void activate(bool);
+ virtual void deactivate(bool);
+ virtual void keyPressEvent(QKeyEvent *e);
+ virtual bool handleKeyEvents() { return true; }
+ virtual void mouseDoubleClickEvent(QMouseEvent *m);
+ virtual void mouseReleaseEvent(QMouseEvent *m);
+ virtual void mouseMoveEvent(QMouseEvent *m);
+ virtual void mousePressEvent(QMouseEvent *m);
+ virtual void drawControls(QPainter* p);
+
+ void setInformation(ImportSetup is);
+ void insertImage(int i,QString fileName);
+ void deleteImage(QString fileName);
+ void setImage(PageItem* item);
+ void setText(PageItem_TextFrame* item);
+ void updateList();
+
+private:
+ UndoTransaction *trans;
+ FDialogPreview *pw;
+ bool m_keyRepeat;
+ ImportSetup impsetup;
+ ScribusMainWindow *m_ScMW;
+};
+
+#endif // CANVASMODE_IMPORTDATA_H
diff --git a/Scribus/scribus/canvasmode_objimport.cpp b/Scribus/scribus/canvasmode_objimport.cpp
index 210c8b4..9d6eba2 100644
--- a/Scribus/scribus/canvasmode_objimport.cpp
+++ b/Scribus/scribus/canvasmode_objimport.cpp
@@ -195,8 +195,8 @@ void CanvasMode_ObjImport::mouseReleaseEvent(QMouseEvent *m)
delete undoTransaction;
undoTransaction = NULL;
}
- // Return to normal mode
- m_view->requestMode(modeNormal);
+ // Return to Import data mode
+ m_view->requestMode(modeImportData);
}
// m_view->stopDragTimer();
diff --git a/Scribus/scribus/gtgettext.cpp b/Scribus/scribus/gtgettext.cpp
index 7355a84..4afde4b 100644
--- a/Scribus/scribus/gtgettext.cpp
+++ b/Scribus/scribus/gtgettext.cpp
@@ -35,14 +35,13 @@ for which a new license (GPL+exception) is in place.
//Added by qt3to4:
#include <QPixmap>
#include "util_icon.h"
+#include "util_formats.h"
// Constructor
gtGetText::gtGetText(ScribusDoc* doc)
{
// Attach to the active document
m_Doc=doc;
- // Load the plugins array.
- loadImporterPlugins();
} // gtGetText::gtGetText(ScribusDoc* doc)
// Look at the results of the file selection dialog and figure out if you need to use an importer.
@@ -61,6 +60,7 @@ void gtGetText::launchImporter(int importer, const QString& filename, bool textO
{
// Attempt to determine the importer based on the file's extension.
// Create a Qstring with what could be an extension.
+ QMap<QString, ImporterData*> importerMap = FormatsManager::instance()->getMap();
QString fend = filename.right(filename.length() - filename.lastIndexOf(".") - 1);
QString fendL(fend.toLower());
// Look for that extension in the importer QMap.
@@ -79,19 +79,14 @@ void gtGetText::launchImporter(int importer, const QString& filename, bool textO
dias = new gtDialogs();
// Pop up the dialog asking the user to select the type from our list (ilist) of
// importable file types. If one is not selected, set callImporter to false.
- callImporter = dias->runImporterDialog(ilist);
+ callImporter = dias->runImporterDialog(FormatsManager::instance()->getIlist(),filename);
// If we're gonna call an importer, we need to copy it's struct to ida.
if (callImporter)
- ida = importers[dias->getImporter()];
+ ida = (FormatsManager::instance()->getImporters())[dias->getImporter()];
// Destroy the diag
delete dias;
- } // else - if (importerMap.find(fend) != importerMap.end())
+ }
}
- else // If we know which importer to use
- {
- // Copy the importer's struct to ida.
- ida = importers[importer];
- } // else - if (importer == -1)
// Create a target text frame for the imported text and assign it to the parameter "target"
PageItem* targetFrame=target;
@@ -108,116 +103,9 @@ void gtGetText::launchImporter(int importer, const QString& filename, bool textO
} //void gtGetText::launchImporter(int importer, const QString& filename, bool textOnly,
// const QString& encoding, bool append, PageItem* target)
-// Find the available plugins based on the environment, validate they load, and
-// create quick lookup mappings.
-void gtGetText::loadImporterPlugins()
-{
- // Get the path to the plugins
- QString gtdir = ScPaths::instance().pluginDir();
- // Append the gettext path to the plugin
- gtdir += "gettext";
- // Set the search parameteer for the platform specific extension for the plugins ( DLL, so, etc. )
- QString libPattern = QString("*.%1*").arg(PluginManager::platformDllExtension());
- // Search for matches.
- QDir d(gtdir, libPattern, QDir::Name, (QDir::Filter) PluginManager::platformDllSearchFlags());
-
- // Initialize a structure for the importers found
- struct ImporterData ida;
- ida.fileFormatName = "";
-
- // Check and see if the directory existed and if the count of files matching is greater than 0.
- if ((d.exists()) && (d.count() != 0))
- {
- // loop through the entries.
- for (uint dc = 0; dc < d.count(); ++dc)
- {
- // Verify the Plugin will load. If it does, collect the info on the plugin ( Name, extension, format, etc )
- if (DLLName(d[dc], &ida.fileFormatName, &ida.fileEndings))
- {
- // no plugin's "format name" marks "don't load plug"
- if (ida.fileFormatName.isNull())
- continue;
- // Store the path to the plugin.
- ida.soFilePath = d[dc];
- // If the plugin path does not begin with /, prepend a /.
- if (ida.soFilePath.left(1) != "/")
- ida.soFilePath = "/" + ida.soFilePath;
- // Add the plugin data to the end of the importer's vector.
- importers.push_back(ida);
- } // if (DLLName(d[dc], &ida.fileFormatName, &ida.fileEndings))
- } // for (uint dc = 0; dc < d.count(); ++dc)
- } // if ((d.exists()) && (d.count() != 0))
- // Create the Importer Extension to Plugin data qmap.
- createMap();
-} // void gtGetText::loadImporterPlugins()
-
-// Creates the dialog for the user to import a file based on the supported file formats.
-ImportSetup gtGetText::run()
-{
- // Initialize a filters list.
- QString filters = "";
- // Create a string for the "All supported files filter". Start with the label then loop through
- // the importers vector and add all of the file extensions supported.
- QString allSupported = QObject::tr("All Supported Formats") + " (";
- // Loop through the importers vector.
- for (uint i = 0; i < importers.size(); ++i)
- {
- // If there are any file extnsions declared by the importer
- if (importers[i].fileEndings.count() != 0)
- {
- // Add the importer name to the filters list
- filters += importers[i].fileFormatName + " (";
- // Loop though the extensions supported by the importer
- for (int j = 0; j < importers[i].fileEndings.count(); ++j)
- {
- // Add the extension to both the filter and allSupported strings
- filters += "*." + importers[i].fileEndings[j] + " ";
- allSupported += "*." + importers[i].fileEndings[j] + " ";
- } // for (int j = 0; j < importers[i].fileEndings.count(); ++j)
- // Trim the Qstring
- filters = filters.trimmed();
- // Append "entry of entry" information to the end of the filter.
- filters += ");;";
- } // if (importers[i].fileEndings.count() != 0)
- } // for (uint i = 0; i < importers.size(); ++i)
- // Trim the allSupported QString and append "end of entry" data to the end of it.
- allSupported = allSupported.trimmed();
- allSupported += ");;";
- // Prepend allSupported to the filters Qstring.
- filters = allSupported + filters;
- // Add an "all files" entry to the end of the filters QString
- filters += QObject::tr("All Files (*)");
- // Populate ilist with the file importer names.
- for (uint i = 0; i < importers.size(); ++i)
- ilist.append(importers[i].fileFormatName);
- // Create a new dialog.
- dias = new gtDialogs();
- // Create a new ImportSetup struct
- ImportSetup impsetup;
- // INitialize runDialog to false
- impsetup.runDialog=false;
- // If we get a true back from the File selection Dialog ( which we send our filters and extensions lists )
- if (dias->runFileDialog(filters, ilist))
- {
- // Set the runDialog to true
- impsetup.runDialog=true;
- // Copy the other values for the struct from the dialog results
- impsetup.encoding=dias->getEncoding();
- impsetup.filename=dias->getFileName();
- impsetup.importer=dias->getImporter();
- impsetup.textOnly=dias->importTextOnly();
-// launchImporter(dias->getImporter(), dias->getFileName(),
-// dias->importTextOnly(), dias->getEncoding(), append);
- } // if (dias->runFileDialog(filters, ilist))
- // Destroy the dialog.
- delete dias;
- // Return the ImportSetup struct.
- return impsetup;
-} // ImportSetup gtGetText::run()
-
// Loads, validates, and executes the Importer code.
void gtGetText::CallDLL(const ImporterData& idata, const QString& filePath,
- const QString& encoding, bool textOnly, bool append, PageItem* importItem)
+ const QString& encoding, bool textOnly, bool append, PageItem* importItem)
{
// Pointer for the loaded plugin.
void* gtplugin;
@@ -246,7 +134,7 @@ void gtGetText::CallDLL(const ImporterData& idata, const QString& filePath,
importItem->itemText.clear();
// Execute the importer's "GetText2" method.
(*fp_GetText2)(filePath, encoding, textOnly, importItem);
- } // if (!fp_GetText2)
+ } // if (!fp_GetText2)
else
{
// Attempt to map the old GetText method to to the pointer via the PluginManager. Store the result in fp_GetText.
@@ -273,73 +161,6 @@ void gtGetText::CallDLL(const ImporterData& idata, const QString& filePath,
} // void gtGetText::CallDLL(const ImporterData& idata, const QString& filePath,
// const QString& encoding, bool textOnly, bool append, PageItem* importItem)
-// Loads the "DLL", validates the importer is good, populates the passed parameters with
-// the plugin information.
-bool gtGetText::DLLName(QString name, QString *ffName, QStringList *fEndings)
-{
- // Pointer to the plugin, once loaded
- void* gtplugin;
- // typedef of Qstring to map the importer name (FileFormatName) method results to.
- typedef QString (*sdem0)();
- // typedef of QStringList to map the file extensions supported method results to.
- typedef QStringList (*sdem1)();
- // The actual importer name object
- sdem0 fp_FileFormatName;
- // The actual extensions supported object
- sdem1 fp_FileExtensions;
- // Initialise the plugin file path ( with filename )
- QString pluginFilePath = QString("%1/gettext/%2").arg(ScPaths::instance().pluginDir()).arg(name);
- // Attempt to load the plugin.
- gtplugin = PluginManager::loadDLL(pluginFilePath);
- // if gtplugin is NULL we were unable to load the plugin. Return an error and exit the method.
- if (!gtplugin)
- {
- qWarning("Failed to load plugin %s", pluginFilePath.toLatin1().constData());
- return false;
- }
- // Attempt to resolve the plugin symbol to the importer name (FileFormatName)
- fp_FileFormatName = (sdem0) PluginManager::resolveSym( gtplugin, "FileFormatName");
- // if fp_FileFormatName is NULL, we could not find the FileFormatName symbol. The plugin is incomplete.
- // Report an error, unload the plugin, and exit the method.
- if (!fp_FileFormatName)
- {
- qWarning("Failed to get FileFormatName() from %s", pluginFilePath.toLatin1().constData());
- PluginManager::unloadDLL(gtplugin);
- return false;
- }
- // Attempt to resolve the plugin symbol to the list of supported file extensions.
- fp_FileExtensions = (sdem1) PluginManager::resolveSym( gtplugin, "FileExtensions");
- // if fp_FileExtensions is NULL, we could not find the FileExtensions symbol. The plugin is incomplete.
- // Report an error, unload the plugin, and exit the method.
- if (!fp_FileExtensions)
- {
- qWarning("Failed to get FileExtensions() from %s", pluginFilePath.toLatin1().constData());
- PluginManager::unloadDLL(gtplugin);
- return false;
- }
- // Set the format name based on the resolved method.
- *ffName = (*fp_FileFormatName)();
- // Set the extensions list based on the resolved method.
- *fEndings = (*fp_FileExtensions)();
- // Unload the plugin
- PluginManager::unloadDLL(gtplugin);
- // Successfully return!
- return true;
-} // bool gtGetText::DLLName(QString name, QString *ffName, QStringList *fEndings)
-
-// Create the importer Qmap.
-void gtGetText::createMap()
-{
- // Loop through the importers Vector
- for (uint i = 0; i < importers.size(); ++i)
- {
- // Loop through each file extension the importer uses/importers and create an individual
- // Qmap entry for it.
- for (int j = 0; j < importers[i].fileEndings.count(); ++j)
- importerMap.insert(importers[i].fileEndings[j], &importers[i]);
- } // for (uint i = 0; i < importers.size(); ++i)
-} // void gtGetText::createMap()
-
// Destructor
gtGetText::~gtGetText()
{
diff --git a/Scribus/scribus/gtgettext.h b/Scribus/scribus/gtgettext.h
index ff30238..a247b24 100644
--- a/Scribus/scribus/gtgettext.h
+++ b/Scribus/scribus/gtgettext.h
@@ -39,51 +39,26 @@ for which a new license (GPL+exception) is in place.
#include "scconfig.h"
#include "scribusapi.h"
#include "scfonts.h"
+#include "util_formats.h"
class PageItem;
class ScribusDoc;
class gtDialogs;
-// A struct for holding the Importer specific information.
-struct ImporterData {
- QString soFilePath; // Path to the Importer
- QString fileFormatName; // Name of the Importer
- QStringList fileEndings; // Array of filenames supported by the importer
-};
-
-// A Struct for holding the results of the File selection Dialog
-struct ImportSetup {
- bool runDialog; // Did the dialog run correctly?
- int importer; // Which importer was selected?
- QString filename; // What filename is to be loaded?
- bool textOnly; // Do we import as text only?
- QString encoding; // File encoding
-};
-
/*
- GetText handles the open file dialog and importer plugins loading and launching.
+ GetText handles importer plugins loading and launching.
*/
class SCRIBUS_API gtGetText
{
private:
- std::vector<ImporterData> importers; // Vector of the loaded importers
- QMap<QString, ImporterData*> importerMap; // QMap of the supported extensions to their relevant importers entry for easy access
- void loadImporterPlugins(); // Find the available plugins based on the environment, validate they load, and
- // create quick lookup mappings.
void CallDLL(const ImporterData& idata, const QString& filePath,
- const QString& encoding, bool textOnly, bool append, PageItem* importItem);
+ const QString& encoding, bool textOnly, bool append, PageItem* importItem);
// Loads, validates, and executes the Importer code.
- bool DLLName(QString name, QString *ffName, QStringList *fileEndings);
- // Loads the "DLL", validates the importer is good, populates the passed parameters with
- // the plugin information.
- void createMap(); // Create the importer Qmap.
gtDialogs* dias; // File Selection Dialog pointer.
- QStringList ilist; // List of supported importers, used with dialogs
ScribusDoc* m_Doc; // Which document are we working with.
public:
gtGetText(ScribusDoc* doc); // Constructor
~gtGetText(); // Destructor
- ImportSetup run(); // Creates the dialog for the user to import a file based on the supported file formats.
void launchImporter(int importer, const QString& filename, bool textOnly, const QString& encoding, bool append, PageItem* target=0);
// Look at the results of the file selection dialog and figure out if you need to use an importer.
// Prompt the user if the importer to use isn't obvious.
diff --git a/Scribus/scribus/pageitem.cpp b/Scribus/scribus/pageitem.cpp
index 291ef45..9efbc8e 100644
--- a/Scribus/scribus/pageitem.cpp
+++ b/Scribus/scribus/pageitem.cpp
@@ -4945,6 +4945,14 @@ void PageItem::restore(UndoState *state, bool isUndo)
restoreUniteItem(ss, isUndo);
else if (ss->contains("SPLITITEM"))
restoreSplitItem(ss, isUndo);
+ else if (ss->contains("CREATE_MESH_GRAD"))
+ restoreCreateMeshGrad(ss, isUndo);
+ else if (ss->contains("MOVE_MESH_GRAD"))
+ restoreMoveMeshGrad(ss, isUndo);
+ else if (ss->contains("RESET_MESH_GRAD"))
+ restoreResetMeshGrad(ss, isUndo);
+ else if (ss->contains("REMOVE_MESH_PATCH"))
+ restoreRemoveMeshPatch(ss, isUndo);
else if (ss->contains("MIRROR_PATH_H"))
{
bool editContour = m_Doc->nodeEdit.isContourLine;
@@ -5514,6 +5522,7 @@ void PageItem::restoreTransform(SimpleState *ss, bool isUndo)
}
}
+
void PageItem::restoreSnapToPatchGrid(SimpleState *state, bool isUndo)
{
if (isUndo)
@@ -5523,7 +5532,6 @@ void PageItem::restoreSnapToPatchGrid(SimpleState *state, bool isUndo)
update();
}
-
void PageItem::restoreMaskType(SimpleState *state, bool isUndo)
{
if (isUndo)
@@ -9035,7 +9043,7 @@ bool PageItem::loadImage(const QString& filename, const bool reload, const int g
}
}
}
-
+
Pfile = fi.absoluteFilePath();
if (reload && pixm.imgInfo.PDSpathData.contains(clPath))
{
@@ -9376,7 +9384,7 @@ void PageItem::AdjustPictScale()
{
if (itemType() != PageItem::ImageFrame)
return;
- if (ScaleType)
+ if (ScaleType || !(doc()->prefsData().itemToolPrefs.imageDefaultSize &1))
return;
if (OrigW == 0 || OrigH == 0)
return;
diff --git a/Scribus/scribus/pageitem_imageframe.cpp b/Scribus/scribus/pageitem_imageframe.cpp
index 9f57ef6..8499a21 100644
--- a/Scribus/scribus/pageitem_imageframe.cpp
+++ b/Scribus/scribus/pageitem_imageframe.cpp
@@ -424,7 +424,6 @@ bool PageItem_ImageFrame::createInfoGroup(QFrame *infoGroup, QGridLayout *infoGr
void PageItem_ImageFrame::applicableActions(QStringList & actionList)
{
- actionList << "fileImportImage";
actionList << "itemConvertToTextFrame";
actionList << "itemImageIsVisible";
actionList << "itemPreviewFull";
diff --git a/Scribus/scribus/pageitem_textframe.cpp b/Scribus/scribus/pageitem_textframe.cpp
index 4a4c258..476f7fd 100644
--- a/Scribus/scribus/pageitem_textframe.cpp
+++ b/Scribus/scribus/pageitem_textframe.cpp
@@ -5219,14 +5219,13 @@ void PageItem_TextFrame::togleEditModeActions()
void PageItem_TextFrame::applicableActions(QStringList & actionList)
{
+ actionList << "fileImport";
actionList << "insertMarkVariableText";
if (!m_Doc->masterPageMode())
actionList << "insertMarkAnchor";
//notes frames are not simply text frames
if (isNoteFrame())
return;
- actionList << "fileImportText";
- actionList << "fileImportAppendText";
actionList << "toolsEditWithStoryEditor";
actionList << "insertSampleText";
actionList << "itemPDFIsAnnotation";
diff --git a/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp b/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
index 94ddb52..46547b8 100644
--- a/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
+++ b/Scribus/scribus/plugins/fileloader/scribus150format/scribus150format.cpp
@@ -4609,6 +4609,7 @@ PageItem* Scribus150Format::pasteItem(ScribusDoc *doc, ScXmlStreamAttributes& at
break;
}
+ UndoManager::instance()->setUndoEnabled(false);
currItem->FrameType = attrs.valueAsInt("FRTYPE", 0);
int startArrowIndex = attrs.valueAsInt("startArrowIndex", 0);
if ((startArrowIndex < 0) || (startArrowIndex > static_cast<int>(doc->arrowStyles().size())))
@@ -5237,6 +5238,7 @@ PageItem* Scribus150Format::pasteItem(ScribusDoc *doc, ScXmlStreamAttributes& at
//currItem->setRedrawBounding();
//currItem->OwnPage = view->OnPage(currItem);
+ UndoManager::instance()->setUndoEnabled(true);
return currItem;
}
diff --git a/Scribus/scribus/plugins/scripter/api_Scripter.dialogs.mainWindow.api b/Scribus/scribus/plugins/scripter/api_Scripter.dialogs.mainWindow.api
index a2f6556..cfecd46 100644
--- a/Scribus/scribus/plugins/scripter/api_Scripter.dialogs.mainWindow.api
+++ b/Scribus/scribus/plugins/scripter/api_Scripter.dialogs.mainWindow.api
@@ -804,14 +804,6 @@
*/
/**
-* Scripter.dialogs.mainWindow.slotGetContent2()
-*/
-
-/**
-* Scripter.dialogs.mainWindow.slotFileAppend()
-*/
-
-/**
* Scripter.dialogs.mainWindow.removeRecent(fn)
* fn is a QString
*/
@@ -840,10 +832,6 @@
*/
/**
-* Scripter.dialogs.mainWindow.importVectorFile()
-*/
-
-/**
* Scripter.dialogs.mainWindow.rebuildLayersList()
*/
diff --git a/Scribus/scribus/plugins/scripter/doc/reference_dialogs.html b/Scribus/scribus/plugins/scripter/doc/reference_dialogs.html
index ced0f38..abf7511 100644
--- a/Scribus/scribus/plugins/scripter/doc/reference_dialogs.html
+++ b/Scribus/scribus/plugins/scripter/doc/reference_dialogs.html
@@ -5194,10 +5194,6 @@
<tr><td colspan="2"><hr></td></tr>
<tr>
- <td><strong>ScripterNG.dialogs.mainWindow.importVectorFile()</strong></td>
- <td><strong>PROCEDURE</strong></td>
-</tr>
-<tr>
<td colspan="2">
<em></em>
</td>
@@ -7418,11 +7414,6 @@
</td>
</tr>
<tr><td colspan="2"><hr></td></tr>
-
-<tr>
- <td><strong>ScripterNG.dialogs.mainWindow.slotFileAppend()</strong></td>
- <td><strong>PROCEDURE</strong></td>
-</tr>
<tr>
<td colspan="2">
<em></em>
@@ -7607,11 +7598,6 @@
</td>
</tr>
<tr><td colspan="2"><hr></td></tr>
-
-<tr>
- <td><strong>ScripterNG.dialogs.mainWindow.slotGetContent2()</strong></td>
- <td><strong>PROCEDURE</strong></td>
-</tr>
<tr>
<td colspan="2">
<em></em>
diff --git a/Scribus/scribus/plugins/scriptplugin/scripts/InfoBox.py b/Scribus/scribus/plugins/scriptplugin/scripts/InfoBox.py
index f2bf0a2..3d91a8e 100644
--- a/Scribus/scribus/plugins/scriptplugin/scripts/InfoBox.py
+++ b/Scribus/scribus/plugins/scriptplugin/scripts/InfoBox.py
@@ -61,7 +61,6 @@ except ImportError:
print "Unable to import the 'scribus' module. This script will only run within"
print "the Python interpreter embedded in Scribus. Try Script->Execute Script."
sys.exit(1)
-
pil_found = 1
try:
diff --git a/Scribus/scribus/prefsmanager.cpp b/Scribus/scribus/prefsmanager.cpp
index 1abf735..4935ed2 100644
--- a/Scribus/scribus/prefsmanager.cpp
+++ b/Scribus/scribus/prefsmanager.cpp
@@ -289,6 +289,10 @@ void PrefsManager::initDefaults()
appPrefs.itemToolPrefs.imageAspectRatio = true;
appPrefs.itemToolPrefs.imageLowResType = 1;
appPrefs.itemToolPrefs.imageUseEmbeddedPath = false;
+ appPrefs.itemToolPrefs.imageDefaultSize = 3;
+ appPrefs.itemToolPrefs.imageDefaultWidth = 100;
+ appPrefs.itemToolPrefs.imageDefaultHeight = 100;
+ appPrefs.itemToolPrefs.imageDefaultBasePoint = 0;
// appPrefs.PSize = 40;
appPrefs.printerPrefs.ClipMargin = false;
appPrefs.printerPrefs.GCRMode = false;
@@ -1502,6 +1506,10 @@ bool PrefsManager::WritePref(QString ho)
dcItemTools.setAttribute("ImageStrokeColorShade",appPrefs.itemToolPrefs.imageStrokeColorShade);
dcItemTools.setAttribute("ImageScaleX",ScCLocale::toQStringC(appPrefs.itemToolPrefs.imageScaleX));
dcItemTools.setAttribute("ImageScaleY",ScCLocale::toQStringC(appPrefs.itemToolPrefs.imageScaleY));
+ dcItemTools.setAttribute("ImageDefaultSize",appPrefs.itemToolPrefs.imageDefaultSize);
+ dcItemTools.setAttribute("ImageDefaultWidth",ScCLocale::toQStringC(appPrefs.itemToolPrefs.imageDefaultWidth));
+ dcItemTools.setAttribute("ImageDefaultHeight",ScCLocale::toQStringC(appPrefs.itemToolPrefs.imageDefaultHeight));
+ dcItemTools.setAttribute("ImageDefaultBasePoint",appPrefs.itemToolPrefs.imageDefaultBasePoint);
dcItemTools.setAttribute("PolygonCorners", appPrefs.itemToolPrefs.polyCorners);
dcItemTools.setAttribute("PolygonFactor", ScCLocale::toQStringC(appPrefs.itemToolPrefs.polyFactor));
dcItemTools.setAttribute("PolygonRotation", ScCLocale::toQStringC(appPrefs.itemToolPrefs.polyRotation));
@@ -2115,6 +2123,10 @@ bool PrefsManager::ReadPref(QString ho)
appPrefs.itemToolPrefs.imageStrokeColorShade = dc.attribute("ImageStrokeColorShade", "100").toInt();
appPrefs.itemToolPrefs.imageScaleX = ScCLocale::toDoubleC(dc.attribute("ImageScaleX"), 1.0);
appPrefs.itemToolPrefs.imageScaleY = ScCLocale::toDoubleC(dc.attribute("ImageScaleY"), 1.0);
+ appPrefs.itemToolPrefs.imageDefaultSize = dc.attribute("ImageDefaultSize").toInt();
+ appPrefs.itemToolPrefs.imageDefaultBasePoint = dc.attribute("ImageDefaultBasePoint").toInt();
+ appPrefs.itemToolPrefs.imageDefaultWidth = ScCLocale::toDoubleC(dc.attribute("ImageDefaultWidth"), 100.0);
+ appPrefs.itemToolPrefs.imageDefaultHeight = ScCLocale::toDoubleC(dc.attribute("ImageDefaultHeight"), 100.0);
appPrefs.itemToolPrefs.imageScaleType = static_cast<bool>(dc.attribute("PSCALE", "0").toInt());
appPrefs.itemToolPrefs.imageAspectRatio = static_cast<bool>(dc.attribute("PASPECT", "1").toInt());
appPrefs.itemToolPrefs.imageUseEmbeddedPath = static_cast<bool>(dc.attribute("EmbeddedPath", "0").toInt());
diff --git a/Scribus/scribus/prefsstructs.h b/Scribus/scribus/prefsstructs.h
index 68f643e..a267f2b 100644
--- a/Scribus/scribus/prefsstructs.h
+++ b/Scribus/scribus/prefsstructs.h
@@ -244,6 +244,10 @@ struct ItemToolPrefs
bool imageAspectRatio; //! Use stored aspect ratio for the image
int imageLowResType; //! Preview type for an image frame
bool imageUseEmbeddedPath; //! Use embedded path, eg from an EPS etc.
+ int imageDefaultSize; //! Default behaviour for oneclick event
+ double imageDefaultHeight; //! Default height value for oneclick event
+ double imageDefaultWidth; //! Defaut width value for oneclick event
+ double imageDefaultBasePoint; //! Defaut basepoint for oneclick event
/* Calligraphic Pen Tool */
QString calligrapicPenFillColor; //! Default calligrapicPen fill color
QString calligrapicPenLineColor; //! Default calligrapicPen line color
diff --git a/Scribus/scribus/scpage.cpp b/Scribus/scribus/scpage.cpp
index 84d2da7..27995ec 100644
--- a/Scribus/scribus/scpage.cpp
+++ b/Scribus/scribus/scpage.cpp
@@ -317,6 +317,8 @@ void ScPage::restorePageItemCreation(ScItemState<PageItem*> *state, bool isUndo)
return;
int stateCode = state->transactionCode;
PageItem *ite = state->getItem();
+ bool old_lock =ite->locked();
+ ite->setLocked(false);
bool oldMPMode=m_Doc->masterPageMode();
if ((stateCode == 0) || (stateCode == 1))
{
@@ -350,6 +352,7 @@ void ScPage::restorePageItemCreation(ScItemState<PageItem*> *state, bool isUndo)
}
m_Doc->setMasterPageMode(oldMPMode);
m_Doc->m_Selection->delaySignalsOff();
+ ite->setLocked(old_lock);
}
void ScPage::restorePageItemDeletion(ScItemState< QList<PageItem*> > *state, bool isUndo)
diff --git a/Scribus/scribus/scribus.cpp b/Scribus/scribus/scribus.cpp
index 42b855d..94275fb 100644
--- a/Scribus/scribus/scribus.cpp
+++ b/Scribus/scribus/scribus.cpp
@@ -87,7 +87,7 @@ for which a new license (GPL+exception) is in place.
#include "actionmanager.h"
#include "canvasmode.h"
-#include "canvasmode_imageimport.h"
+#include "canvasmode_importdata.h"
#include "commonstrings.h"
#include "desaxe/digester.h"
#include "desaxe/saxXML.h"
@@ -734,12 +734,7 @@ void ScribusMainWindow::initMenuBar()
scrMenuMgr->addMenuItem(scrActions["fileRevert"], "File", false);
scrMenuMgr->addMenuItem(scrActions["fileCollect"], "File", false);
scrMenuMgr->addMenuSeparator("File");
- scrMenuMgr->createMenu("FileImport", tr("&Import"), "File");
- scrMenuMgr->addMenuItem(scrActions["fileImportText"], "FileImport", false);
-// scrMenuMgr->addMenuItem(scrActions["fileImportText2"], "FileImport", false);
- scrMenuMgr->addMenuItem(scrActions["fileImportAppendText"], "FileImport", false);
- scrMenuMgr->addMenuItem(scrActions["fileImportImage"], "FileImport", false);
- scrMenuMgr->addMenuItem(scrActions["fileImportVector"], "FileImport", true);
+ scrMenuMgr->addMenuItem(scrActions["fileImport"], "File", true);
scrMenuMgr->createMenu("FileExport", tr("&Export"), "File");
scrMenuMgr->addMenuItem(scrActions["fileExportText"], "FileExport", false);
@@ -1468,7 +1463,7 @@ void ScribusMainWindow::keyPressEvent(QKeyEvent *k)
case modeEditWeldPoint:
case modeEyeDropper:
case modeImportObject:
- case modeImportImage:
+ case modeImportData:
case modePanning:
view->requestMode(modeNormal);
break;
@@ -2652,7 +2647,6 @@ void ScribusMainWindow::HaveNewDoc()
connect(view, SIGNAL(CutItem()), this, SLOT(slotEditCut()), Qt::UniqueConnection);
connect(view, SIGNAL(LoadPic()), this, SLOT(slotGetContent()), Qt::UniqueConnection);
connect(view, SIGNAL(StatusPic()), this, SLOT(StatusPic()), Qt::UniqueConnection);
- connect(view, SIGNAL(AppendText()), this, SLOT(slotFileAppend()), Qt::UniqueConnection);
connect(view, SIGNAL(AnnotProps()), this, SLOT(ModifyAnnot()), Qt::UniqueConnection);
connect(view, SIGNAL(LoadElem(QString, double ,double, bool, bool, ScribusDoc *, ScribusView*)), this, SLOT(slotElemRead(QString, double, double, bool, bool, ScribusDoc *, ScribusView*)), Qt::UniqueConnection);
connect(view, SIGNAL(AddBM(PageItem *)), this, SLOT(AddBookMark(PageItem *)), Qt::UniqueConnection);
@@ -2799,10 +2793,6 @@ void ScribusMainWindow::HaveNewSel(int SelectedType)
switch (SelectedType)
{
case -1: // None
- scrActions["fileImportText"]->setEnabled(false);
- scrActions["fileImportText2"]->setEnabled(false);
- scrActions["fileImportImage"]->setEnabled(false);
- scrActions["fileImportAppendText"]->setEnabled(false);
scrActions["fileExportText"]->setEnabled(false);
scrActions["itemDuplicate"]->setEnabled(false);
scrActions["itemMulDuplicate"]->setEnabled(false);
@@ -2859,10 +2849,6 @@ void ScribusMainWindow::HaveNewSel(int SelectedType)
propertiesPalette->setGradientEditMode(false);
break;
case PageItem::ImageFrame: //Image Frame
- scrActions["fileImportAppendText"]->setEnabled(false);
- scrActions["fileImportText"]->setEnabled(false);
- scrActions["fileImportText2"]->setEnabled(false);
- scrActions["fileImportImage"]->setEnabled(true);
scrActions["editCut"]->setEnabled(true);
scrActions["editCopy"]->setEnabled(true);
scrMenuMgr->setMenuEnabled("EditContents", true);
@@ -2912,10 +2898,6 @@ void ScribusMainWindow::HaveNewSel(int SelectedType)
break;
case PageItem::TextFrame: //Text Frame
- scrActions["fileImportText"]->setEnabled(true);
- scrActions["fileImportText2"]->setEnabled(true);
- scrActions["fileImportImage"]->setEnabled(false);
- scrActions["fileImportAppendText"]->setEnabled(true);
scrActions["fileExportText"]->setEnabled(true);
scrActions["editCut"]->setEnabled(true);
scrActions["editCopy"]->setEnabled(true);
@@ -3031,10 +3013,6 @@ void ScribusMainWindow::HaveNewSel(int SelectedType)
}
break;
case PageItem::PathText: //Path Text
- scrActions["fileImportText"]->setEnabled(true);
- scrActions["fileImportText2"]->setEnabled(true);
- scrActions["fileImportImage"]->setEnabled(false);
- scrActions["fileImportAppendText"]->setEnabled(true);
scrActions["fileExportText"]->setEnabled(true);
scrActions["editCut"]->setEnabled(true);
scrActions["editCopy"]->setEnabled(true);
@@ -3096,10 +3074,6 @@ void ScribusMainWindow::HaveNewSel(int SelectedType)
}
break;
default:
- scrActions["fileImportText"]->setEnabled(false);
- scrActions["fileImportText2"]->setEnabled(false);
- scrActions["fileImportImage"]->setEnabled(false);
- scrActions["fileImportAppendText"]->setEnabled(false);
scrActions["fileExportText"]->setEnabled(false);
scrActions["editCut"]->setEnabled(true);
scrActions["editCopy"]->setEnabled(true);
@@ -3630,78 +3604,6 @@ void ScribusMainWindow::doPasteRecent(QString data)
}
}
-void ScribusMainWindow::importVectorFile()
-{
- QString fileName = "";
- QStringList formats;
- QString allFormats = tr("All Supported Formats")+" (";
- int fmtCode = FORMATID_FIRSTUSER;
- const FileFormat *fmt = LoadSavePlugin::getFormatById(fmtCode);
- while (fmt != 0)
- {
- if (fmt->load)
- {
- formats.append(fmt->filter);
- int an = fmt->filter.indexOf("(");
- int en = fmt->filter.indexOf(")");
- while (an != -1)
- {
- allFormats += fmt->filter.mid(an+1, en-an-1)+" ";
- an = fmt->filter.indexOf("(", en);
- en = fmt->filter.indexOf(")", an);
- }
- }
- fmtCode++;
- fmt = LoadSavePlugin::getFormatById(fmtCode);
- }
- allFormats += "*.sce *.SCE);;";
- formats.append("Scribus Objects (*.sce *.SCE)");
- qSort(formats);
- allFormats += formats.join(";;");
- PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
- QString wdir = dirs->get("pastefile", ".");
- CustomFDialog dia(this, wdir, tr("Open"), allFormats, fdExistingFiles);
- if (dia.exec() == QDialog::Accepted)
- fileName = dia.selectedFile();
- else
- return;
- if (!fileName.isEmpty())
- {
- PrefsManager::instance()->prefsFile->getContext("dirs")->set("pastefile", fileName.left(fileName.lastIndexOf("/")));
- QFileInfo fi(fileName);
- QString suffix = fi.suffix().toLower();
- if ((suffix == "sce") || (suffix == "shape"))
- {
- QList<QUrl> urls;
- QMimeData* md = new QMimeData();
- urls.append( QUrl::fromLocalFile(fileName) );
- md->setUrls(urls);
- QDrag* dr = new QDrag(this);
- dr->setMimeData(md);
- const QPixmap& dragCursor = loadIcon("DragPix.xpm");
- dr->setPixmap(dragCursor);
- dr->exec();
- }
- else
- {
- FileLoader *fileLoader = new FileLoader(fileName);
- int testResult = fileLoader->testFile();
- delete fileLoader;
- if ((testResult != -1) && (testResult >= FORMATID_FIRSTUSER))
- {
- const FileFormat * fmt = LoadSavePlugin::getFormatById(testResult);
- if( fmt )
- {
- doc->dontResize = true;
- fmt->loadFile(fileName, LoadSavePlugin::lfUseCurrentPage|LoadSavePlugin::lfInteractive);
- doc->dontResize = false;
- }
- }
- }
- requestUpdate(reqColorsUpdate | reqSymbolsUpdate | reqLineStylesUpdate | reqTextStylesUpdate);
- }
-}
-
void ScribusMainWindow::rebuildLayersList()
{
if (HaveDoc)
@@ -3793,8 +3695,6 @@ bool ScribusMainWindow::slotPageImport()
bool ret = false;
MergeDoc *dia = new MergeDoc(this, false, doc->DocPages.count(), doc->currentPage()->pageNr() + 1);
UndoTransaction* activeTransaction = NULL;
- if(UndoManager::undoEnabled())
- activeTransaction = new UndoTransaction(undoManager->beginTransaction(Um::ImportPage, Um::IGroup, Um::ImportPage, 0, Um::ILock));
if (dia->exec())
{
@@ -4378,87 +4278,71 @@ bool ScribusMainWindow::postLoadDoc()
// do with file->open for a LONG time. It's used for get text / get picture.
void ScribusMainWindow::slotGetContent()
{
- if (doc->m_Selection->count() != 0)
+ int flags = fdExistingFilesI;
+ QString docDir = ".";
+ ImportSetup impsetup;
+ QString allFormats = "";
+ QString formatD = "";
+ PageItem *currItem = doc->m_Selection->itemAt(0);
+ if(!currItem)
{
- PageItem *currItem = doc->m_Selection->itemAt(0);
- if (currItem->itemType() == PageItem::ImageFrame)
- {
- QString formatD(FormatsManager::instance()->fileDialogFormatList(FormatsManager::IMAGESIMGFRAME));
-
- QString docDir = ".";
- QString prefsDocDir=prefsManager->documentDir();
- if (!prefsDocDir.isEmpty())
- docDir = prefsManager->prefsFile->getContext("dirs")->get("images", prefsDocDir);
- else
- docDir = prefsManager->prefsFile->getContext("dirs")->get("images", ".");
-
- QStringList fileNames;
- fileNames.clear();
- CustomFDialog *dia = new CustomFDialog(qApp->activeWindow(), docDir, tr("Open"), formatD, fdShowPreview | fdExistingFilesI);
- if (dia->exec() == QDialog::Accepted)
- fileNames = dia->fileDialog->selectedFiles();
- delete dia;
- //QStringList fileNames = CFileDialog( docDir, tr("Open"), formatD, "", fdShowPreview | fdExistingFiles);
- if (!fileNames.isEmpty())
- {
- prefsManager->prefsFile->getContext("dirs")->set("images", fileNames[0].left(fileNames[0].lastIndexOf("/")));
- view->requestMode(modeImportImage);
- dynamic_cast<CanvasMode_ImageImport*>(view->canvasMode())->setImageList(fileNames);
- }
- }
- else if (currItem->asTextFrame())
- {
- gtGetText* gt = new gtGetText(doc);
- ImportSetup impsetup=gt->run();
- if (impsetup.runDialog)
- {
- if (currItem->itemText.length() != 0)
- {
- int t = QMessageBox::warning(this, CommonStrings::trWarning, tr("Do you really want to clear all your text?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
- if (t == QMessageBox::No)
- return;
- }
- gt->launchImporter(impsetup.importer, impsetup.filename, impsetup.textOnly, impsetup.encoding, false);
- }
- delete gt;
- if (doc->docHyphenator->AutoCheck)
- doc->docHyphenator->slotHyphenate(currItem);
- for (int a = 0; a < doc->Items->count(); ++a)
- {
- if (doc->Items->at(a)->isBookmark)
- bookmarkPalette->BView->ChangeText(doc->Items->at(a));
- }
- if (!impsetup.textOnly)
- doc->flag_NumUpdateRequest = true;
- view->DrawNew();
- slotDocCh();
- styleManager->setDoc(doc);
- marksManager->setDoc(doc);
- nsEditor->setDoc(doc);
- }
+ formatD = FormatsManager::instance()->fileDialogVectorFormatList();
+ PrefsContext* dirs = prefsManager->prefsFile->getContext("dirs");
+ docDir = dirs->get("pastefile", ".");
+ allFormats += " " + formatD.mid(formatD.indexOf("(")+1,formatD.indexOf(")")-(formatD.indexOf("(")+1));
}
-}
-
-void ScribusMainWindow::slotGetContent2() // kk2006
-{
- if (doc->m_Selection->count() == 0)
- return; // nothing to do, no selection
-
- PageItem *currItem = doc->m_Selection->itemAt(0);
+ if (!currItem || currItem->itemType() == PageItem::ImageFrame)
+ {
+ flags |= fdShowPreview;
+ QString formatI = FormatsManager::instance()->fileDialogFormatList(FormatsManager::IMAGESIMGFRAME);
+ allFormats += " " + formatI.mid(formatI.indexOf("(")+1,formatI.indexOf(")")-(formatI.indexOf("(")+1));
+ if(formatD.length()!=0)
+ formatD = formatD.left(formatD.lastIndexOf(";") +1);
+ formatD +=formatI;
+ QString prefsDocDir=prefsManager->documentDir();
+ if (!prefsDocDir.isEmpty())
+ docDir = prefsManager->prefsFile->getContext("dirs")->get("images", prefsDocDir);
+ else
+ docDir = prefsManager->prefsFile->getContext("dirs")->get("images", ".");
+ }
+ if (!currItem || currItem->asTextFrame())
+ {
+ flags |= fdShowCodecs;
+ QString formatT = FormatsManager::instance()->fileDialogTextFormatList();
+ allFormats += " " + formatT.mid(formatT.indexOf("(")+1,formatT.indexOf(")")-(formatT.indexOf("(")+1));
+ if(formatD.length()!=0)
+ formatD = formatD.left(formatD.lastIndexOf(";") +1);
+ formatD += formatT;
+ }
+ formatD = tr("All Supported Formats") + "(" + allFormats + ");;" + formatD;
+ CustomFDialog *dia = new CustomFDialog(qApp->activeWindow(), docDir, tr("Open"), formatD, flags );
+ if (dia->exec() == QDialog::Accepted)
+ impsetup.filename = dia->fileDialog->selectedFiles();
- if (!currItem->asTextFrame())
- return; // not a text frame
+ if(flags & fdShowCodecs)
+ {
+ impsetup.encoding=dia->TxCodeM->currentText();
+ impsetup.textOnly=dia->TextOnly->isChecked();
+ }
+ else
+ {
+ QString localEn = QTextCodec::codecForLocale()->name();
+ if (localEn == "ISO-10646-UCS-2")
+ localEn = "UTF-16";
+ impsetup.encoding = localEn;
+ impsetup.textOnly = false;
+ }
- ScGTPluginManager::instance()->run();
- if (doc->docHyphenator->AutoCheck)
- doc->docHyphenator->slotHyphenate(currItem);
- for (int a = 0; a < doc->Items->count(); ++a)
+ if (!impsetup.filename.isEmpty())
{
- if (doc->Items->at(a)->isBookmark)
- bookmarkPalette->BView->ChangeText(doc->Items->at(a));
+ if (currItem && currItem->itemType() == PageItem::ImageFrame)
+ prefsManager->prefsFile->getContext("dirs")->set("images", impsetup.filename.first().left(impsetup.filename.first().lastIndexOf("/")));
+ if(!currItem)
+ prefsManager->prefsFile->getContext("dirs")->set("pastefile", impsetup.filename.first().left(impsetup.filename.first().lastIndexOf("/")));
+ view->requestMode(modeImportData);
+ dynamic_cast<CanvasMode_ImportData*>(view->canvasMode())->setInformation(impsetup);
}
- view->DrawNew();
- slotDocCh();
+ delete dia;
}
void ScribusMainWindow::slotGetClipboardImage()
@@ -4571,25 +4455,6 @@ void ScribusMainWindow::toogleInlineState()
}
}
-void ScribusMainWindow::slotFileAppend()
-{
- if (doc->m_Selection->count() != 0)
- {
- gtGetText* gt = new gtGetText(doc);
- ImportSetup impsetup=gt->run();
- if (impsetup.runDialog)
- {
- gt->launchImporter(impsetup.importer, impsetup.filename, impsetup.textOnly, impsetup.encoding, true);
- }
- delete gt;
- //CB Hyphenating now emits doc changed, plus we change lang as appropriate
- if (doc->docHyphenator->AutoCheck)
- doc->itemSelection_DoHyphenate();
- view->DrawNew();
- //slotDocCh();
- }
-}
-
void ScribusMainWindow::slotFileRevert()
{
if ((doc->hasName) && (doc->isModified()) && (!doc->masterPageMode()) && (!doc->isConverted))
@@ -4829,10 +4694,7 @@ bool ScribusMainWindow::DoFileClose()
scrActions["fileExportAsPDF"]->setEnabled(false);
scrActions["fileExportText"]->setEnabled(false);
scrActions["fileExportAsEPS"]->setEnabled(false);
- scrActions["fileImportText"]->setEnabled(false);
- scrActions["fileImportText2"]->setEnabled(false);
- scrActions["fileImportImage"]->setEnabled(false);
- scrActions["fileImportAppendText"]->setEnabled(false);
+ scrActions["fileImport"]->setEnabled(false);
// scrMenuMgr->setMenuEnabled("Page", false);
scrActions["pageInsert"]->setEnabled(false);
scrActions["pageImport"]->setEnabled(false);
@@ -9258,7 +9120,21 @@ void ScribusMainWindow::restore(UndoState* state, bool isUndo)
restoreAddPage(ss, isUndo);
else if (ss->contains("DELETE_PAGE"))
restoreDeletePage(ss, isUndo);
+ else if (ss->contains("FILE_LOADER"))
+ restoreFileLoader(ss, isUndo);
+ }
+}
+
+void ScribusMainWindow::restoreFileLoader(SimpleState *state, bool isUndo)
+{
+ if(isUndo)
+ {
+ if(doc->appMode != modeImportData)
+ view->requestMode(modeImportData);
+ dynamic_cast<CanvasMode_ImportData*>(view->canvasMode())->insertImage(0,state->get("name"));
}
+ else
+ dynamic_cast<CanvasMode_ImportData*>(view->canvasMode())->deleteImage(state->get("name"));
}
void ScribusMainWindow::restoreDeletePage(SimpleState *state, bool isUndo)
diff --git a/Scribus/scribus/scribus.h b/Scribus/scribus/scribus.h
index a3709a5..8bd3189 100644
--- a/Scribus/scribus/scribus.h
+++ b/Scribus/scribus/scribus.h
@@ -184,6 +184,7 @@ public:
void restoreUngrouping(SimpleState *state, bool isUndo);
void restoreAddPage(SimpleState *state, bool isUndo);
void restoreDeletePage(SimpleState *state, bool isUndo);
+ void restoreFileLoader(SimpleState *state, bool isUndo);
void setPreviewToolbar();
struct CopyContentsBuffer contentsBuffer;
bool internalCopy;
@@ -297,14 +298,8 @@ public slots:
bool loadPage(QString fileName, int Nr, bool Mpa, const QString& renamedPageName=QString::null);
void slotGetContent();
- void slotGetContent2(); // kk2006
void slotGetClipboardImage();
void toogleInlineState();
- /*!
- \author Franz Schmid
- \brief Appends a Textfile to the Text in the selected Textframe at the Cursorposition
- */
- void slotFileAppend();
void removeRecent(QString fn, bool fromFileWatcher = false);
void removeRecentFromWatcher(QString fn);
@@ -313,7 +308,6 @@ public slots:
void rebuildRecentPasteMenu();
void pasteRecent(QString fn);
void pasteFromScrapbook(QString fn);
- void importVectorFile();
void rebuildLayersList();
bool slotDocOpen();
bool loadDoc(QString);
diff --git a/Scribus/scribus/scribusdoc.cpp b/Scribus/scribus/scribusdoc.cpp
index 958b6d6..1de8821 100644
--- a/Scribus/scribus/scribusdoc.cpp
+++ b/Scribus/scribus/scribusdoc.cpp
@@ -5586,8 +5586,7 @@ int ScribusDoc::itemAddUserFrame(InsertAFrameData &iafData)
if (!iafData.source.isEmpty() && prevItem == NULL && QFile::exists(iafData.source))
{
gtGetText* gt = new gtGetText(this);
- if (iafData.impsetup.runDialog)
- gt->launchImporter(iafData.impsetup.importer, iafData.impsetup.filename, iafData.impsetup.textOnly, iafData.impsetup.encoding, true, currItem);
+ gt->launchImporter(-1, iafData.impsetup.filename.at(0), iafData.impsetup.textOnly, iafData.impsetup.encoding, true, currItem);
delete gt;
}
prevItem=currItem;
diff --git a/Scribus/scribus/scribusstructs.h b/Scribus/scribus/scribusstructs.h
index 0f9ab37..f8b6ce9 100644
--- a/Scribus/scribus/scribusstructs.h
+++ b/Scribus/scribus/scribusstructs.h
@@ -297,7 +297,7 @@ enum AppMode
modeDrawLine,
modeRotation,
modeLinkFrames,
- modeImportImage,
+ modeImportData,
modeUnlinkFrames,
modeDrawRegularPolygon,
modeDrawBezierLine,
diff --git a/Scribus/scribus/scribusview.cpp b/Scribus/scribus/scribusview.cpp
index 441cf2c..782c73b 100644
--- a/Scribus/scribus/scribusview.cpp
+++ b/Scribus/scribus/scribusview.cpp
@@ -72,7 +72,7 @@ for which a new license (GPL+exception) is in place.
#include "canvasgesture.h"
#include "canvasmode.h"
#include "canvasmode_objimport.h"
-#include "canvasmode_imageimport.h"
+#include "canvasmode_importdata.h"
#include "actionmanager.h"
#include "commonstrings.h"
#include "filewatcher.h"
@@ -158,6 +158,7 @@ ScribusView::ScribusView(QWidget* win, ScribusMainWindow* mw, ScribusDoc *doc) :
_isGlobalMode(true),
linkAfterDraw(false),
ImageAfterDraw(false),
+ TextAfterDraw(false),
m_vhRulerHW(17)
{
setObjectName("s");
@@ -4347,16 +4348,26 @@ bool ScribusView::eventFilter(QObject *obj, QEvent *event)
}
if (ImageAfterDraw)
{
- //user creates new frame using linking tool
PageItem * frame = Doc->m_Selection->itemAt(0);
- requestMode(modeImportImage);
+ requestMode(modeImportData);
if (frame)
{
- dynamic_cast<CanvasMode_ImageImport*>(canvasMode())->setImage(frame);
- dynamic_cast<CanvasMode_ImageImport*>(canvasMode())->updateList();
+ dynamic_cast<CanvasMode_ImportData*>(canvasMode())->setImage(frame);
+ dynamic_cast<CanvasMode_ImportData*>(canvasMode())->updateList();
}
ImageAfterDraw = false;
}
+ else if (TextAfterDraw)
+ {
+ PageItem * frame = Doc->m_Selection->itemAt(0);
+ requestMode(modeImportData);
+ if (frame)
+ {
+ dynamic_cast<CanvasMode_ImportData*>(canvasMode())->setText(frame->asTextFrame());
+ dynamic_cast<CanvasMode_ImportData*>(canvasMode())->updateList();
+ }
+ TextAfterDraw = false;
+ }
return true;
}
else if (obj == widget() && event->type() == QEvent::MouseButtonPress)
@@ -4376,10 +4387,12 @@ bool ScribusView::eventFilter(QObject *obj, QEvent *event)
}
else
firstFrame = NULL;
- if(Doc->appMode == modeImportImage && ImageAfterDraw)
+ if(Doc->appMode == modeImportData && (ImageAfterDraw || TextAfterDraw))
{
- //switch to drawing new text frame
- requestMode(modeDrawImage);
+ if(TextAfterDraw)
+ requestMode(modeDrawText);
+ else
+ requestMode(modeDrawImage);
m_canvasMode->mousePressEvent(m);
}
m_canvas->m_viewMode.m_MouseButtonPressed = true;
diff --git a/Scribus/scribus/scribusview.h b/Scribus/scribus/scribusview.h
index 2db2a38..58a907a 100644
--- a/Scribus/scribus/scribusview.h
+++ b/Scribus/scribus/scribusview.h
@@ -108,12 +108,13 @@ public:
friend class CanvasMode_EditArc;
friend class CanvasMode_EditSpiral;
friend class CanvasMode_FrameLinks;
- friend class CanvasMode_ImageImport;
+ friend class CanvasMode_ImportData;
friend class CanvasMode_Magnifier;
friend class CanvasMode_NodeEdit;
friend class CanvasMode_Normal;
friend class CanvasMode_ObjImport;
friend class CanvasMode_Rotate;
+ friend class CreateMode;
void requestMode(int appMode);
void startGesture(CanvasGesture*);
@@ -327,6 +328,7 @@ private: // Private attributes
bool _isGlobalMode;
bool linkAfterDraw;
bool ImageAfterDraw;
+ bool TextAfterDraw;
double oldItemX;
double oldItemY;
diff --git a/Scribus/scribus/ui/contextmenu.cpp b/Scribus/scribus/ui/contextmenu.cpp
index 365ecae..e60444a 100644
--- a/Scribus/scribus/ui/contextmenu.cpp
+++ b/Scribus/scribus/ui/contextmenu.cpp
@@ -197,13 +197,15 @@ void ContextMenu::createMenuItems_Selection()
addSeparator();
addAction(m_ScMW->scrActions["itemUpdateMarks"]);
}
- if (m_actionList.contains("fileImportText"))
+ if (m_actionList.contains("fileImport"))
{
addSeparator();
- addAction(m_ScMW->scrActions["fileImportText"]);
- addAction(m_ScMW->scrActions["fileImportAppendText"]);
- addAction(m_ScMW->scrActions["toolsEditWithStoryEditor"]);
- addAction(m_ScMW->scrActions["insertSampleText"]);
+ addAction(m_ScMW->scrActions["fileImport"]);
+ if (currItem->isTextFrame())
+ {
+ addAction(m_ScMW->scrActions["toolsEditWithStoryEditor"]);
+ addAction(m_ScMW->scrActions["insertSampleText"]);
+ }
}
else //enable this for, eg, text on a path
if (m_actionList.contains("toolsEditWithStoryEditor"))
@@ -212,8 +214,6 @@ void ContextMenu::createMenuItems_Selection()
addAction(m_ScMW->scrActions["toolsEditWithStoryEditor"]);
}
addSeparator();
- if (m_actionList.contains("fileImportImage"))
- addAction(m_ScMW->scrActions["fileImportImage"]);
if (selectedItemCount==1 && currItem->asImageFrame())
{
if (QApplication::clipboard()->mimeData()->hasImage())
diff --git a/Scribus/scribus/ui/customfdialog.cpp b/Scribus/scribus/ui/customfdialog.cpp
index 25c5cd5..b143ec2 100644
--- a/Scribus/scribus/ui/customfdialog.cpp
+++ b/Scribus/scribus/ui/customfdialog.cpp
@@ -24,6 +24,7 @@ for which a new license (GPL+exception) is in place.
#include <QCheckBox>
#include <QComboBox>
+#include <QCoreApplication>
#include <QDir>
#include <QFileInfo>
#include <QFrame>
@@ -35,6 +36,7 @@ for which a new license (GPL+exception) is in place.
#include <QPixmap>
#include <QPushButton>
#include <QTextCodec>
+#include <Qt>
#include <QVBoxLayout>
#include "customfdialog.h"
@@ -111,7 +113,7 @@ QIcon ImIconProvider::icon(const QFileInfo &fi) const
return QIcon();
}
-FDialogPreview::FDialogPreview(QWidget *pa) : QLabel(pa)
+FDialogPreview::FDialogPreview(QWidget *pa, Qt::WindowFlags f) : QLabel(pa,f)
{
setAlignment(Qt::AlignLeft | Qt::AlignTop);
setFixedSize( QSize( 200, 200 ) );
@@ -298,7 +300,7 @@ CustomFDialog::CustomFDialog(QWidget *parent, QString wDir, QString caption, QSt
vboxLayout = new QVBoxLayout(this);
vboxLayout->setSpacing(5);
vboxLayout->setMargin(10);
- hboxLayout = new QHBoxLayout;
+ hboxLayout = new QHBoxLayout;
hboxLayout->setSpacing(5);
hboxLayout->setMargin(0);
fileDialog = new ScFileWidget(this);
@@ -318,7 +320,7 @@ CustomFDialog::CustomFDialog(QWidget *parent, QString wDir, QString caption, QSt
vboxLayout1->addWidget(pw);
hboxLayout->addLayout(vboxLayout1);
vboxLayout->addLayout(hboxLayout);
- QHBoxLayout *hboxLayout1 = new QHBoxLayout;
+ QHBoxLayout *hboxLayout1 = new QHBoxLayout;
hboxLayout1->setSpacing(5);
hboxLayout1->setContentsMargins(9, 0, 0, 0);
showPreview = new QCheckBox(this);
@@ -440,6 +442,12 @@ CustomFDialog::CustomFDialog(QWidget *parent, QString wDir, QString caption, QSt
}
TxCodeM->setMinimumSize(QSize(200, 0));
Layout1C->addWidget(TxCodeM);
+ Layout1C->addStretch();
+ TextOnly = new QCheckBox();
+ TextOnly->setText( tr("Import &Text only"));
+ TextOnly->setToolTip( tr("Import the text without style formating"));
+ TextOnly->setChecked(false);
+ Layout1C->addWidget(TextOnly);
QSpacerItem* spacer2 = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum );
Layout1C->addItem( spacer2 );
vboxLayout->addWidget(LayoutC);
@@ -507,6 +515,11 @@ QString CustomFDialog::selectedFile()
return QString();
}
+QStringList CustomFDialog::selectedFiles()
+{
+ return fileDialog->selectedFiles();
+}
+
void CustomFDialog::addWidgets(QWidget *widgets)
{
vboxLayout->addWidget(widgets);
diff --git a/Scribus/scribus/ui/customfdialog.h b/Scribus/scribus/ui/customfdialog.h
index 52d154f..987d58a 100644
--- a/Scribus/scribus/ui/customfdialog.h
+++ b/Scribus/scribus/ui/customfdialog.h
@@ -62,7 +62,7 @@ class SCRIBUS_API FDialogPreview : public QLabel
{
Q_OBJECT
public:
- FDialogPreview(QWidget *pa);
+ FDialogPreview(QWidget *pa, Qt::WindowFlags f = 0);
~FDialogPreview() {};
void updtPix();
void GenPreview(QString name);
@@ -122,10 +122,12 @@ public:
ScFileWidget *fileDialog;
FDialogPreview *pw;
QCheckBox *showPreview;
+ QCheckBox *TextOnly;
QPushButton* OKButton;
QPushButton* CancelB;
void setSelection(QString );
QString selectedFile();
+ QStringList selectedFiles();
void addWidgets(QWidget *widgets);
private slots:
//! \brief Go to the document home dir.
diff --git a/Scribus/scribus/ui/delpages.cpp b/Scribus/scribus/ui/delpages.cpp
index 83dc4ae..904e41d 100644
--- a/Scribus/scribus/ui/delpages.cpp
+++ b/Scribus/scribus/ui/delpages.cpp
@@ -27,7 +27,6 @@ DelPages::DelPages( QWidget* parent, int currentPage, int maxPage ) : QDialog( p
fromToLayout->addWidget( fromLabel );
fromPageData = new ScrSpinBox(this);
fromPageData->setDecimals(0);
- fromPageData->setSuffix("");
fromPageData->setMinimum(1);
fromPageData->setMaximum(maxPage);
fromPageData->setSuffix("");
@@ -42,7 +41,6 @@ DelPages::DelPages( QWidget* parent, int currentPage, int maxPage ) : QDialog( p
toPageData->setMaximum(maxPage);
toPageData->setSuffix("");
toPageData->setValue( currentPage );
- toPageData->setSuffix("");
fromToLayout->addWidget( toPageData );
dialogLayout->addLayout( fromToLayout );
diff --git a/Scribus/scribus/ui/gtdialogs.cpp b/Scribus/scribus/ui/gtdialogs.cpp
index af88379..79dd452 100644
--- a/Scribus/scribus/ui/gtdialogs.cpp
+++ b/Scribus/scribus/ui/gtdialogs.cpp
@@ -38,7 +38,6 @@ for which a new license (GPL+exception) is in place.
#include <QPushButton>
#include "commonstrings.h"
#include "util_icon.h"
-#include "ui/gtfiledialog.h"
extern QString DocDir;
@@ -114,44 +113,19 @@ gtImporterDialog::~gtImporterDialog()
gtDialogs::gtDialogs()
{
fdia = NULL;
- fileName = "";
- encoding = "";
importer = -1;
prefs = PrefsManager::instance()->prefsFile->getContext("gtDialogs");
- pwd = QDir::currentPath();
}
-bool gtDialogs::runFileDialog(const QString& filters, const QStringList& importers)
-{
- bool accepted = false;
- PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
- QString dir = dirs->get("get_text", ".");
- fdia = new gtFileDialog(filters, importers, dir);
-
- if (fdia->exec() == QDialog::Accepted)
- {
- fileName = fdia->selectedFile();
- if (!fileName.isEmpty())
- accepted = true;
- encoding = fdia->encodingCombo->currentText();
-// if (encoding == "UTF-16")
-// encoding = "ISO-10646-UCS-2";
- importer = fdia->importerCombo->currentIndex() - 1;
- dirs->set("get_text", fileName.left(fileName.lastIndexOf("/")));
- }
- QDir::setCurrent(pwd);
- return accepted;
-}
-
-bool gtDialogs::runImporterDialog(const QStringList& importers)
+bool gtDialogs::runImporterDialog(const QStringList& importers, QString filename)
{
int curSel = prefs->getInt("curSel", 0);
QString extension = "";
- QString shortName = fileName.right(fileName.length() - fileName.lastIndexOf("/") - 1);
+ QString shortName = filename.right(filename.length() - filename.lastIndexOf("/") - 1);
if (shortName.indexOf(".") == -1)
extension = ".no_extension";
else
- extension = fileName.right(fileName.length() - fileName.lastIndexOf("."));
+ extension = filename.right(filename.length() - filename.lastIndexOf("."));
int extensionSel = prefs->getInt(extension, -1);
QString imp = prefs->get("remember"+extension, QString("false"));
QString res = "";
@@ -190,12 +164,12 @@ bool gtDialogs::runImporterDialog(const QStringList& importers)
{
importer = i;
prefs->set("curSel", static_cast<int>(i));
- if (fileName.indexOf(".") != -1)
+ if (filename.indexOf(".") != -1)
{
if (shortName.indexOf(".") == -1)
fileExtension = ".no_extension";
else
- fileExtension = fileName.right(fileName.length() - fileName.lastIndexOf("."));
+ fileExtension = filename.right(filename.length() - filename.lastIndexOf("."));
if (!fileExtension.isEmpty())
{
prefs->set(fileExtension, static_cast<int>(i));
@@ -210,29 +184,11 @@ bool gtDialogs::runImporterDialog(const QStringList& importers)
return ok;
}
-const QString& gtDialogs::getFileName()
-{
- return fileName;
-}
-
-const QString& gtDialogs::getEncoding()
-{
- return encoding;
-}
-
int gtDialogs::getImporter()
{
return importer;
}
-bool gtDialogs::importTextOnly()
-{
- bool ret = false;
- if (fdia)
- ret = fdia->textOnlyCheckBox->isChecked();
- return ret;
-}
-
gtDialogs::~gtDialogs()
{
delete fdia;
diff --git a/Scribus/scribus/ui/gtdialogs.h b/Scribus/scribus/ui/gtdialogs.h
index 0b1616d..c38a5a1 100644
--- a/Scribus/scribus/ui/gtdialogs.h
+++ b/Scribus/scribus/ui/gtdialogs.h
@@ -28,6 +28,7 @@ for which a new license (GPL+exception) is in place.
#define GTDIALOGS_H
#include <QDialog>
+#include <QCheckBox>
#include "scribusapi.h"
@@ -55,20 +56,13 @@ class SCRIBUS_API gtDialogs
{
private:
gtFileDialog* fdia;
- QString fileName;
- QString encoding;
int importer;
PrefsContext* prefs;
- QString pwd;
public:
gtDialogs();
~gtDialogs();
- const QString& getFileName();
- const QString& getEncoding();
int getImporter();
- bool importTextOnly();
- bool runFileDialog(const QString& filters, const QStringList& importers);
- bool runImporterDialog(const QStringList& importers);
+ bool runImporterDialog(const QStringList& importers, QString filename);
};
#endif // GTDIALOGS_H
diff --git a/Scribus/scribus/ui/gtfiledialog.h b/Scribus/scribus/ui/gtfiledialog.h
deleted file mode 100644
index 8b1e5a8..0000000
--- a/Scribus/scribus/ui/gtfiledialog.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-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.
-*/
-#ifndef GTFILEDIALOG_H
-#define GTFILEDIALOG_H
-
-#include <QDialog>
-#include "ui_gtfiledialog.h"
-#include "scribusapi.h"
-
-
-/*! \brief Enhanced file dialog for get-text plugins
-This class is separated from gtdialogs.h file due the huge
-(almost) circle dependencies with fonts subdir/library
-\author Petr Vanek <petr@scribus.info>
-\author Riku Leino
-*/
-class SCRIBUS_API gtFileDialog : public QDialog, public Ui::gtFileDialog
-{
- Q_OBJECT
-public:
- gtFileDialog(const QString& filters, const QStringList& importers, const QString& wdir);
- ~gtFileDialog();
-
- QString selectedFile();
-
-public slots:
- virtual void accept();
-
-protected:
- void loadSettings(void);
- void saveSettings(void);
-};
-
-#endif
diff --git a/Scribus/scribus/ui/gtfiledialog.ui b/Scribus/scribus/ui/gtfiledialog.ui
deleted file mode 100644
index b0a6726..0000000
--- a/Scribus/scribus/ui/gtfiledialog.ui
+++ /dev/null
@@ -1,112 +0,0 @@
-<ui version="4.0" >
- <class>gtFileDialog</class>
- <widget class="QDialog" name="gtFileDialog" >
- <property name="geometry" >
- <rect>
- <x>0</x>
- <y>0</y>
- <width>373</width>
- <height>317</height>
- </rect>
- </property>
- <property name="windowTitle" >
- <string>Open</string>
- </property>
- <layout class="QGridLayout" >
- <item row="0" column="0" colspan="3" >
- <widget class="ScFileWidget" native="1" name="fileWidget" />
- </item>
- <item row="1" column="0" >
- <widget class="QLabel" name="label" >
- <property name="text" >
- <string>&Importer:</string>
- </property>
- <property name="buddy" >
- <cstring>importerCombo</cstring>
- </property>
- </widget>
- </item>
- <item row="1" column="1" >
- <widget class="ScComboBox" name="importerCombo" />
- </item>
- <item row="1" column="2" >
- <widget class="QCheckBox" name="textOnlyCheckBox" >
- <property name="text" >
- <string>Import &Text Only</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0" >
- <widget class="QLabel" name="label_2" >
- <property name="text" >
- <string>&Encoding:</string>
- </property>
- <property name="buddy" >
- <cstring>encodingCombo</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="1" >
- <widget class="ScComboBox" name="encodingCombo" />
- </item>
- <item row="3" column="0" colspan="3" >
- <widget class="QDialogButtonBox" name="buttonBox" >
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons" >
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <customwidgets>
- <customwidget>
- <class>ScFileWidget</class>
- <extends>QWidget</extends>
- <header>ui/scfilewidget.h</header>
- <container>1</container>
- </customwidget>
- <customwidget>
- <class>ScComboBox</class>
- <extends>QComboBox</extends>
- <header>ui/sccombobox.h</header>
- </customwidget>
- </customwidgets>
- <resources/>
- <connections>
- <connection>
- <sender>buttonBox</sender>
- <signal>accepted()</signal>
- <receiver>gtFileDialog</receiver>
- <slot>accept()</slot>
- <hints>
- <hint type="sourcelabel" >
- <x>248</x>
- <y>254</y>
- </hint>
- <hint type="destinationlabel" >
- <x>157</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>buttonBox</sender>
- <signal>rejected()</signal>
- <receiver>gtFileDialog</receiver>
- <slot>reject()</slot>
- <hints>
- <hint type="sourcelabel" >
- <x>316</x>
- <y>260</y>
- </hint>
- <hint type="destinationlabel" >
- <x>286</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/Scribus/scribus/ui/insertaframe.cpp b/Scribus/scribus/ui/insertaframe.cpp
index c336a26..d8912aa 100644
--- a/Scribus/scribus/ui/insertaframe.cpp
+++ b/Scribus/scribus/ui/insertaframe.cpp
@@ -232,19 +232,19 @@ void InsertAFrame::locateImageFile()
QString fileName("");
CustomFDialog dia(this, docDir, tr("Open"), formatD, fdShowPreview | fdExistingFiles);
if (dia.exec() == QDialog::Accepted)
- fileName = dia.selectedFile();
+ fileName = dia.selectedFile().at(0);
sourceImageLineEdit->setText(QDir::toNativeSeparators(fileName));
}
void InsertAFrame::locateDocFile()
{
- m_ImportSetup.runDialog=false;
- gtGetText* gt = new gtGetText(m_Doc);
- m_ImportSetup=gt->run();
- if (m_ImportSetup.runDialog)
- sourceDocLineEdit->setText(QDir::toNativeSeparators(m_ImportSetup.filename));
- delete gt;
+ QString formatD(FormatsManager::instance()->fileDialogTextFormatList());
+
+ CustomFDialog *dia = new CustomFDialog(qApp->activeWindow(), ".", tr("Open"), formatD, fdShowCodecs | fdExistingFiles);
+ if (dia->exec() == QDialog::Accepted)
+ sourceDocLineEdit->setText(QDir::toNativeSeparators(dia->selectedFile()));
+ delete dia;
}
void InsertAFrame::slotCreatePageNumberRange( )
diff --git a/Scribus/scribus/ui/oneclick.cpp b/Scribus/scribus/ui/oneclick.cpp
index ddeb72c..5df24b2 100644
--- a/Scribus/scribus/ui/oneclick.cpp
+++ b/Scribus/scribus/ui/oneclick.cpp
@@ -23,7 +23,7 @@ for which a new license (GPL+exception) is in place.
#include "units.h"
#include "commonstrings.h"
-OneClick::OneClick( QWidget* parent, QString titel, int unitIndex, double defW, double defH, bool remember, int origin, int mode ) : QDialog( parent )
+OneClick::OneClick( QWidget* parent, QString titel, int unitIndex, double defW, double defH, int origin, int mode ) : QDialog( parent )
{
double m_unitRatio = unitGetRatioFromIndex(unitIndex);
QString m_suffix = unitGetSuffixFromIndex(unitIndex);
@@ -98,11 +98,6 @@ OneClick::OneClick( QWidget* parent, QString titel, int unitIndex, double defW,
}
editLayout->addWidget( SizeGroup, 0, 1 );
- checkRemember = new QCheckBox(this);
- checkRemember->setText( tr("Remember Values"));
- checkRemember->setChecked(remember);
- editLayout->addWidget( checkRemember, 1, 0, 1, 2 );
-
queryLayout->addLayout( editLayout );
okCancelLayout = new QHBoxLayout;
okCancelLayout->setSpacing( 5 );
diff --git a/Scribus/scribus/ui/oneclick.h b/Scribus/scribus/ui/oneclick.h
index 325642a..e143f7f 100644
--- a/Scribus/scribus/ui/oneclick.h
+++ b/Scribus/scribus/ui/oneclick.h
@@ -27,12 +27,11 @@ class SCRIBUS_API OneClick : public QDialog
Q_OBJECT
public:
- OneClick( QWidget* parent, QString titel, int unitIndex, double defW, double defH, bool remember, int origin, int mode );
+ OneClick( QWidget* parent, QString titel, int unitIndex, double defW, double defH, int origin, int mode );
~OneClick() {};
ScrSpinBox *spinWidth;
ScrSpinBox *spinHeight;
LinkButton* linkSize;
- QCheckBox* checkRemember;
QGroupBox* RotationGroupContainer;
BasePointWidget* RotationGroup;
diff --git a/Scribus/scribus/ui/prefs_itemtools.cpp b/Scribus/scribus/ui/prefs_itemtools.cpp
index eda3540..654aa25 100644
--- a/Scribus/scribus/ui/prefs_itemtools.cpp
+++ b/Scribus/scribus/ui/prefs_itemtools.cpp
@@ -64,6 +64,12 @@ void Prefs_ItemTools::unitChange(int newIndex)
{
textColumnGapSpinBox->setNewUnit(newIndex);
textTabWidthSpinBox->setNewUnit(newIndex);
+ topTextDistanceSpinBox->setNewUnit(newIndex);
+ bottomTextDistanceSpinBox->setNewUnit(newIndex);
+ leftTextDistanceSpinBox->setNewUnit(newIndex);
+ rightTextDistanceSpinBox->setNewUnit(newIndex);
+ defaultWidth->setNewUnit(newIndex);
+ defaultHeight->setNewUnit(newIndex);
}
void Prefs_ItemTools::restoreDefaults(struct ApplicationPrefs *prefsData)
@@ -154,6 +160,12 @@ void Prefs_ItemTools::restoreDefaults(struct ApplicationPrefs *prefsData)
onscreenResolutionLowRadioButton->setChecked(true);
break;
}
+ basepoint->setCheckedId(prefsData->itemToolPrefs.imageDefaultBasePoint);
+ imageSize->setChecked(!(prefsData->itemToolPrefs.imageDefaultSize & 1));
+ defaultSize->setChecked(prefsData->itemToolPrefs.imageDefaultSize & 1);
+ askOneClick->setChecked(prefsData->itemToolPrefs.imageDefaultSize & 2);
+ defaultWidth->setValue(prefsData->itemToolPrefs.imageDefaultWidth * unitRatio);
+ defaultHeight->setValue(prefsData->itemToolPrefs.imageDefaultHeight * unitRatio);
//Shape Tool
shapeFrameLineColorComboBox->initColorList(colorList, m_doc, prefsData->itemToolPrefs.shapeLineColor);
@@ -274,7 +286,10 @@ void Prefs_ItemTools::saveGuiToPrefs(struct ApplicationPrefs *prefsData) const
if (onscreenResolutionLowRadioButton->isChecked())
haRes = 2;
prefsData->itemToolPrefs.imageLowResType = haRes;
-
+ prefsData->itemToolPrefs.imageDefaultBasePoint = basepoint->checkedId();
+ prefsData->itemToolPrefs.imageDefaultSize = defaultSize->isChecked() + askOneClick->isChecked()*2 ;
+ prefsData->itemToolPrefs.imageDefaultHeight = defaultHeight->value() / unitRatio;
+ prefsData->itemToolPrefs.imageDefaultWidth = defaultWidth->value() / unitRatio;
//Shape tool
prefsData->itemToolPrefs.shapeLineColor = shapeFrameLineColorComboBox->currentText();
diff --git a/Scribus/scribus/ui/prefs_itemtoolsbase.ui b/Scribus/scribus/ui/prefs_itemtoolsbase.ui
index f6cef40..a2fe031 100644
--- a/Scribus/scribus/ui/prefs_itemtoolsbase.ui
+++ b/Scribus/scribus/ui/prefs_itemtoolsbase.ui
@@ -78,9 +78,9 @@
<property name="geometry">
<rect>
<x>0</x>
- <y>0</y>
- <width>643</width>
- <height>646</height>
+ <y>-44</y>
+ <width>622</width>
+ <height>677</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
@@ -651,8 +651,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>643</width>
- <height>646</height>
+ <width>637</width>
+ <height>633</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
@@ -806,7 +806,7 @@
<string>Free Scaling</string>
</property>
<attribute name="buttonGroup">
- <string>scalingButtonGroup</string>
+ <string notr="true">scalingButtonGroup</string>
</attribute>
</widget>
</item>
@@ -884,7 +884,7 @@
<string>Scale Image to Frame Size</string>
</property>
<attribute name="buttonGroup">
- <string>scalingButtonGroup</string>
+ <string notr="true">scalingButtonGroup</string>
</attribute>
</widget>
</item>
@@ -937,7 +937,7 @@
<string>Full Resolution</string>
</property>
<attribute name="buttonGroup">
- <string>previewButtonGroup</string>
+ <string notr="true">previewButtonGroup</string>
</attribute>
</widget>
</item>
@@ -947,7 +947,7 @@
<string>Normal Resolution</string>
</property>
<attribute name="buttonGroup">
- <string>previewButtonGroup</string>
+ <string notr="true">previewButtonGroup</string>
</attribute>
</widget>
</item>
@@ -957,11 +957,184 @@
<string>Low Resolution</string>
</property>
<attribute name="buttonGroup">
- <string>previewButtonGroup</string>
+ <string notr="true">previewButtonGroup</string>
</attribute>
</widget>
</item>
<item>
+ <spacer name="verticalSpacer_13">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_53">
+ <property name="text">
+ <string>Default frame size</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="Line" name="line_7">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="imageSize">
+ <property name="text">
+ <string>Use image size</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_13">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMaximumSize</enum>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QRadioButton" name="defaultSize">
+ <property name="text">
+ <string>Use default size</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_19">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QFormLayout" name="formLayout_15">
+ <item row="0" column="0">
+ <widget class="QLabel" name="width">
+ <property name="text">
+ <string>width</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="ScrSpinBox" name="defaultWidth">
+ <property name="minimum">
+ <double>1.000000000000000</double>
+ </property>
+ <property name="maximum">
+ <double>1000.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="height">
+ <property name="text">
+ <string>height</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="ScrSpinBox" name="defaultHeight">
+ <property name="minimum">
+ <double>1.000000000000000</double>
+ </property>
+ <property name="maximum">
+ <double>1000.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_20">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="minimumSize">
+ <size>
+ <width>50</width>
+ <height>74</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Baseline</string>
+ </property>
+ <widget class="BasePointWidget" name="basepoint" native="true">
+ <property name="geometry">
+ <rect>
+ <x>12</x>
+ <y>15</y>
+ <width>58</width>
+ <height>55</height>
+ </rect>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>55</width>
+ <height>55</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_21">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Maximum</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="askOneClick">
+ <property name="text">
+ <string>Ask before apply</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -969,7 +1142,7 @@
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>145</height>
+ <height>40</height>
</size>
</property>
</spacer>
@@ -1580,6 +1753,12 @@
<header>ui/spiralwidget.h</header>
<container>1</container>
</customwidget>
+ <customwidget>
+ <class>BasePointWidget</class>
+ <extends>QWidget</extends>
+ <header location="global">ui/basepointwidget.h</header>
+ <container>1</container>
+ </customwidget>
</customwidgets>
<tabstops>
<tabstop>tabWidget</tabstop>
diff --git a/Scribus/scribus/ui/prefs_operatortoolsbase.ui b/Scribus/scribus/ui/prefs_operatortoolsbase.ui
index 9a5c63b..c932504 100644
--- a/Scribus/scribus/ui/prefs_operatortoolsbase.ui
+++ b/Scribus/scribus/ui/prefs_operatortoolsbase.ui
@@ -89,10 +89,10 @@
<string> %</string>
</property>
<property name="minimum">
- <number>1</number>
+ <double>1.000000000000000</double>
</property>
<property name="maximum">
- <number>3200</number>
+ <double>3200.000000000000000</double>
</property>
</widget>
</item>
@@ -115,7 +115,7 @@
<string> %</string>
</property>
<property name="minimum">
- <number>100</number>
+ <number>0</number>
</property>
<property name="maximum">
<number>500</number>
@@ -266,8 +266,8 @@
<customwidgets>
<customwidget>
<class>ScrSpinBox</class>
- <extends>QSpinBox</extends>
- <header location="global">ui/scrspinbox.h</header>
+ <extends>QDoubleSpinBox</extends>
+ <header>ui/scrspinbox.h</header>
</customwidget>
</customwidgets>
<resources/>
diff --git a/Scribus/scribus/undomanager.cpp b/Scribus/scribus/undomanager.cpp
index 460ad84..101c05d 100644
--- a/Scribus/scribus/undomanager.cpp
+++ b/Scribus/scribus/undomanager.cpp
@@ -1051,6 +1051,7 @@ void UndoManager::languageChange()
UndoManager::PathOperation = tr("Path Operation");
UndoManager::ChangePageAttrs = tr("Change Page Attributes");
UndoManager::Transform = tr("Transform");
+ UndoManager::ImportFile = tr("Import file");
UndoManager::WeldItems = tr("Weld Items");
}
@@ -1323,6 +1324,7 @@ QString UndoManager::ClearImage = "";
QString UndoManager::PathOperation = "";
QString UndoManager::ChangePageAttrs = "";
QString UndoManager::Transform = "";
+QString UndoManager::ImportFile = "";
QString UndoManager::WeldItems = "";
/*** Icons for UndoObjects *******************************************/
diff --git a/Scribus/scribus/undomanager.h b/Scribus/scribus/undomanager.h
index 5d7a17f..9ca06c5 100644
--- a/Scribus/scribus/undomanager.h
+++ b/Scribus/scribus/undomanager.h
@@ -631,6 +631,7 @@ public:
static QString MultipleDuplicate;
static QString Duplicate;
static QString Transform;
+ static QString ImportFile;
static QString ApplyTextStyle;
static QString RemoveTextStyle;
static QString Columns;
diff --git a/Scribus/scribus/util_formats.cpp b/Scribus/scribus/util_formats.cpp
index d796753..e83ac6b 100644
--- a/Scribus/scribus/util_formats.cpp
+++ b/Scribus/scribus/util_formats.cpp
@@ -5,11 +5,16 @@ 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.
*/
+#include <QDir>
#include <QImageReader>
#include <QMapIterator>
#include <QObject>
#include "commonstrings.h"
+#include "plugins/formatidlist.h"
+#include "loadsaveplugin.h"
+#include "pluginmanager.h"
+#include "scpaths.h"
#include "util_formats.h"
FormatsManager* FormatsManager::_instance = 0;
@@ -93,6 +98,7 @@ FormatsManager::FormatsManager()
m_qtSupportedImageFormats=QImageReader::supportedImageFormats();
m_supportedImageFormats=m_qtSupportedImageFormats;
updateSupportedImageFormats(m_supportedImageFormats);
+ loadImporterPlugins();
}
FormatsManager::~FormatsManager()
@@ -214,7 +220,7 @@ QString FormatsManager::extensionListForFormat(int type, int listType)
void FormatsManager::fileTypeStrings(int type, QString& formatList, QString& formatText, QString& formatAll, bool lowerCaseOnly)
{
- QString fmtList = QObject::tr("All Supported Formats")+" (";
+ QString fmtList = QObject::tr("All Supported Image Formats")+" (";
QString fmtText;
QMapIterator<int, QStringList> it(m_fmts);
bool first=true;
@@ -352,3 +358,214 @@ QString getImageType(QString filename)
}
return ret;
}
+
+// Find the available plugins based on the environment, validate they load, and
+// create quick lookup mappings.
+void FormatsManager::loadImporterPlugins()
+{
+ // Get the path to the plugins
+ QString gtdir = ScPaths::instance().pluginDir();
+ // Append the gettext path to the plugin
+ gtdir += "gettext";
+ // Set the search parameteer for the platform specific extension for the plugins ( DLL, so, etc. )
+ QString libPattern = QString("*.%1*").arg(PluginManager::platformDllExtension());
+ // Search for matches.
+ QDir d(gtdir, libPattern, QDir::Name, (QDir::Filter) PluginManager::platformDllSearchFlags());
+
+ // Initialize a structure for the importers found
+ struct ImporterData ida;
+ ida.fileFormatName = "";
+
+ // Check and see if the directory existed and if the count of files matching is greater than 0.
+ if ((d.exists()) && (d.count() != 0))
+ {
+ // loop through the entries.
+ for (uint dc = 0; dc < d.count(); ++dc)
+ {
+ // Verify the Plugin will load. If it does, collect the info on the plugin ( Name, extension, format, etc )
+ if (DLLName(d[dc], &ida.fileFormatName, &ida.fileEndings))
+ {
+ // no plugin's "format name" marks "don't load plug"
+ if (ida.fileFormatName.isNull())
+ continue;
+ // Store the path to the plugin.
+ ida.soFilePath = d[dc];
+ // If the plugin path does not begin with /, prepend a /.
+ if (ida.soFilePath.left(1) != "/")
+ ida.soFilePath = "/" + ida.soFilePath;
+ // Add the plugin data to the end of the importer's vector.
+ importers.push_back(ida);
+ } // if (DLLName(d[dc], &ida.fileFormatName, &ida.fileEndings))
+ } // for (uint dc = 0; dc < d.count(); ++dc)
+ } // if ((d.exists()) && (d.count() != 0))
+ // Create the Importer Extension to Plugin data qmap.
+ createMap();
+ // Populate ilist with the file importer names.
+ for (uint i = 0; i < importers.size(); ++i)
+ ilist.append(importers[i].fileFormatName);
+} // void gtGetText::loadImporterPlugins()
+
+// Create the importer Qmap.
+void FormatsManager::createMap()
+{
+ // Loop through the importers Vector
+ for (uint i = 0; i < importers.size(); ++i)
+ {
+ // Loop through each file extension the importer uses/importers and create an individual
+ // Qmap entry for it.
+ for (int j = 0; j < importers[i].fileEndings.count(); ++j)
+ importerMap.insert(importers[i].fileEndings[j], &importers[i]);
+ } // for (uint i = 0; i < importers.size(); ++i)
+} // void gtGetText::createMap()
+
+QString FormatsManager::fileDialogTextFormatList()
+{
+ // Initialize a filters list.
+ QString filters = "";
+ // Create a string for the "All supported files filter". Start with the label then loop through
+ // the importers vector and add all of the file extensions supported.
+ QString allSupported = QObject::tr("All Supported Text Formats") + " (";
+ // Loop through the importers vector.
+ for (uint i = 0; i < importers.size(); ++i)
+ {
+ // If there are any file extnsions declared by the importer
+ if (importers[i].fileEndings.count() != 0)
+ {
+ // Add the importer name to the filters list
+ filters += importers[i].fileFormatName + " (";
+ // Loop though the extensions supported by the importer
+ for (int j = 0; j < importers[i].fileEndings.count(); ++j)
+ {
+ // Add the extension to both the filter and allSupported strings
+ filters += "*." + importers[i].fileEndings[j] + " ";
+ allSupported += "*." + importers[i].fileEndings[j] + " ";
+ } // for (int j = 0; j < importers[i].fileEndings.count(); ++j)
+ // Trim the Qstring
+ filters = filters.trimmed();
+ // Append "entry of entry" information to the end of the filter.
+ filters += ");;";
+ } // if (importers[i].fileEndings.count() != 0)
+ } // for (uint i = 0; i < importers.size(); ++i)
+ // Trim the allSupported QString and append "end of entry" data to the end of it.
+ allSupported = allSupported.trimmed();
+ allSupported += ");;";
+ // Prepend allSupported to the filters Qstring.
+ filters = allSupported + filters;
+ // Add an "all files" entry to the end of the filters QString
+ filters += QObject::tr("All Files (*)");
+ return filters;
+}
+
+// Loads the "DLL", validates the importer is good, populates the passed parameters with
+// the plugin information.
+bool FormatsManager::DLLName(QString name, QString *ffName, QStringList *fEndings)
+{
+ // Pointer to the plugin, once loaded
+ void* gtplugin;
+ // typedef of Qstring to map the importer name (FileFormatName) method results to.
+ typedef QString (*sdem0)();
+ // typedef of QStringList to map the file extensions supported method results to.
+ typedef QStringList (*sdem1)();
+ // The actual importer name object
+ sdem0 fp_FileFormatName;
+ // The actual extensions supported object
+ sdem1 fp_FileExtensions;
+ // Initialise the plugin file path ( with filename )
+ QString pluginFilePath = QString("%1/gettext/%2").arg(ScPaths::instance().pluginDir()).arg(name);
+ // Attempt to load the plugin.
+ gtplugin = PluginManager::loadDLL(pluginFilePath);
+ // if gtplugin is NULL we were unable to load the plugin. Return an error and exit the method.
+ if (!gtplugin)
+ {
+ qWarning("Failed to load plugin %s", pluginFilePath.toAscii().constData());
+ return false;
+ }
+ // Attempt to resolve the plugin symbol to the importer name (FileFormatName)
+ fp_FileFormatName = (sdem0) PluginManager::resolveSym( gtplugin, "FileFormatName");
+ // if fp_FileFormatName is NULL, we could not find the FileFormatName symbol. The plugin is incomplete.
+ // Report an error, unload the plugin, and exit the method.
+ if (!fp_FileFormatName)
+ {
+ qWarning("Failed to get FileFormatName() from %s", pluginFilePath.toAscii().constData());
+ PluginManager::unloadDLL(gtplugin);
+ return false;
+ }
+ // Attempt to resolve the plugin symbol to the list of supported file extensions.
+ fp_FileExtensions = (sdem1) PluginManager::resolveSym( gtplugin, "FileExtensions");
+ // if fp_FileExtensions is NULL, we could not find the FileExtensions symbol. The plugin is incomplete.
+ // Report an error, unload the plugin, and exit the method.
+ if (!fp_FileExtensions)
+ {
+ qWarning("Failed to get FileExtensions() from %s", pluginFilePath.toAscii().constData());
+ PluginManager::unloadDLL(gtplugin);
+ return false;
+ }
+ // Set the format name based on the resolved method.
+ *ffName = (*fp_FileFormatName)();
+ // Set the extensions list based on the resolved method.
+ *fEndings = (*fp_FileExtensions)();
+ // Unload the plugin
+ PluginManager::unloadDLL(gtplugin);
+ // Successfully return!
+ return true;
+} // bool gtGetText::DLLName(QString name, QString *ffName, QStringList *fEndings)
+
+
+QString FormatsManager::fileDialogVectorFormatList()
+{
+ QStringList formats;
+ QString allFormats = QObject::tr("All Supported Vector Formats")+" (";
+ int fmtCode = FORMATID_FIRSTUSER;
+ const FileFormat *fmt = LoadSavePlugin::getFormatById(fmtCode);
+ while (fmt != 0)
+ {
+ if (fmt->load)
+ {
+ formats.append(fmt->filter);
+ int an = fmt->filter.indexOf("(");
+ int en = fmt->filter.indexOf(")");
+ while (an != -1)
+ {
+ allFormats += fmt->filter.mid(an+1, en-an-1)+" ";
+ an = fmt->filter.indexOf("(", en);
+ en = fmt->filter.indexOf(")", an);
+ }
+ }
+ fmtCode++;
+ fmt = LoadSavePlugin::getFormatById(fmtCode);
+ }
+ allFormats += "*.sce *.SCE);;";
+ formats.append("Scribus Objects (*.sce *.SCE)");
+ qSort(formats);
+ allFormats += formats.join(";;");
+ return allFormats;
+}
+
+bool FormatsManager::isVectorFile(QString fileName)
+{
+ QStringList formats;
+ QFileInfo fi(fileName);
+ int fmtCode = FORMATID_FIRSTUSER;
+ const FileFormat *fmt = LoadSavePlugin::getFormatById(fmtCode);
+ while (fmt != 0)
+ {
+ if (fmt->load)
+ {
+ formats.append(fmt->filter);
+ int an = fmt->filter.indexOf("(");
+ int en = fmt->filter.indexOf(")");
+ while (an != -1)
+ {
+ if(fmt->filter.mid(an+1, en-an-1).toLower().contains(fi.suffix().toLower()))
+ return true;
+ an = fmt->filter.indexOf("(", en);
+ en = fmt->filter.indexOf(")", an);
+ }
+ }
+ fmtCode++;
+ fmt = LoadSavePlugin::getFormatById(fmtCode);
+ }
+ if(QString("*.sce *.SCE").toLower().contains(fi.suffix().toLower()))
+ return true;
+ return false;
+}
diff --git a/Scribus/scribus/util_formats.h b/Scribus/scribus/util_formats.h
index bb717a9..95ef0c0 100644
--- a/Scribus/scribus/util_formats.h
+++ b/Scribus/scribus/util_formats.h
@@ -31,6 +31,21 @@ bool SCRIBUS_API extensionIndicatesPattern(const QString &ext);
bool SCRIBUS_API extensionIndicatesTIFF(const QString &ext);
QString SCRIBUS_API getImageType(QString filename);
+
+// A struct for holding the Importer specific information.
+struct ImporterData {
+ QString soFilePath; // Path to the Importer
+ QString fileFormatName; // Name of the Importer
+ QStringList fileEndings; // Array of filenames supported by the importer
+};
+
+// A Struct for holding the results of the File selection Dialog
+struct ImportSetup {
+ QStringList filename; // What filename is to be loaded?
+ bool textOnly; // Do we import as text only?
+ QString encoding; // File encoding
+};
+
class SCRIBUS_API FormatsManager
{
public:
@@ -126,7 +141,15 @@ class SCRIBUS_API FormatsManager
//! Returns in the form of "All Supported Formats (*.eps *.EPS *.epsf *.EPSF *.epsi *.EPSI);;EPS (*.eps *.EPS);;EPSI (*.epsf *.EPSF);;EPSI (*.epsi *.EPSI);;All Files (*)"
QString fileDialogFormatList(int type);
-
+ QString fileDialogTextFormatList();
+ QString fileDialogVectorFormatList();
+
+ bool isVectorFile(QString);
+
+ QMap<QString, ImporterData*> getMap(){return importerMap;}
+ QList<ImporterData> getImporters(){return importers;}
+ QStringList getIlist(){return ilist;}
+
protected:
QMap<int, QString> m_fmtNames;
QMap<int, QStringList> m_fmtMimeTypes;
@@ -146,6 +169,20 @@ class SCRIBUS_API FormatsManager
* instance().
*/
static FormatsManager* _instance;
+
+//we need some informations about importer and dll to know which text format can be use
+
+ QMap<QString, ImporterData*> importerMap; // QMap of the supported extensions to their relevant importers entry for easy access
+ QStringList ilist; // List of supported importers, used with dialogs
+ QList<ImporterData> importers; // Vector of the loaded importers
+
+ void loadImporterPlugins(); // Find the available plugins based on the environment, validate they load, and
+ // create quick lookup mappings.
+ void createMap(); // Create the importer Qmap.
+
+ bool DLLName(QString name, QString *ffName, QStringList *fileEndings);
+ // Loads the "DLL", validates the importer is good, populates the passed parameters with
+ // the plugin information.
};
#endif
| ||||
| Patch | Yes | ||||
|
|
More tests have revealed some non-crashing issue in the preference management. See 0011637 Plz wait for new patch. |
|
|
Chelen, let us know when the issues are resolved and we can review again. |
|
|
Maybe we could also make it easier for former InDesign users by adding a "Place" command? |
|
|
new patch is available. I only fix what we can call issue (bad unitRatio) but I prefer seeing it in the trunk before doing more work on it. Also, I may do really smallest patch later (so easier to review for you bradney). |
|
|
I did first tests of that patch. I encountered following issues : 1) Text import related dialog shown when importing images - File > Get File - Select several images (all png in my case) - After first image is imported, a setting dialog related to text import is shown to user 2) Image following mouse cursor quite loosely - File > Get File - Select several images (all png in my case) - Image previews are shown at some varying distance from text cursor, would be probably better if that distance was kept constant |
|
|
The "text import dialog" issue didnt occure when i first tested the unitloader branch so its probably a little bug that was introduced in latest fix. |
|
|
I see now that this "unified import" feature would be really usefull. Unfriendly is the requirement to use 2 completely different menu entries to import "normal" images and "svg" images : Image import is "Insert" menu, when svg import is in "File" > "vector import" submenu. This patch does a lot more, but basicaly unifying the image import and the svg import would be a great usability improvement. |
|
|
I liked the idea, and the fact that some devs tested it and gave a feedback, makes it valuable beyond doubt. So I gave it a try. It is a series of 8 pretty small patches (including 1 cleanup patch). Below are details on each patch. Please test. (fi = file import) ## fi1-import-routing-foundation-v1.00.patch * Adds `fileimport.{h,cpp}` with `FileImportJob` and `FileImportCandidate` as the common routing layer for external content import. * Represents supported routes as Image, Text, and Vector while retaining the concrete handler/plugin information required by existing importers. * Auto-resolves single-candidate jobs and leaves multi-candidate jobs unresolved for caller-side action selection. * Allows ambiguous formats such as PDF/EPS to expose multiple valid import routes. * Keeps unsupported/unknown files unresolved instead of defaulting them to text. * Preserves the existing image, `gtGetText`, and `LoadSavePlugin` import implementations. * Infrastructure-only patch; no existing command, canvas-placement, or drag-and-drop (DnD) behaviour changes. ## fi2-unified-image-vector-import-v1.01.patch * Adds `filePlace` / File → Place… as the common image/vector content-placement entry point. * Routes selected files through `FileImportJob` instead of separate image/vector classification paths. * Reuses `loadPict()` and the existing image-placement workflow for Image candidates. * Reuses `LoadSavePlugin` handling for Vector/Editable Objects candidates. * Uses a compatible selected image frame directly without resizing it. * Resolves formats with both image and vector candidates, such as PDF/EPS, through the available import actions. * Preserves existing image-placement queue behaviour for multiple files. * Removes Get Image and Get Vector File from the normal visible import UI while retaining their internal actions for compatibility. * Leaves text import and shortcut reassignment outside this patch. ## fi3-text-import-integration-v1.01.patch * Extends `filePlace` to Text candidates from the common `FileImportJob` routing layer. * Reuses the existing `gtGetText` importer path, including importer selection, encoding, and text-import preferences. * Adds `CanvasMode_TextImport` for text target selection and text-frame creation. * Imports directly into a compatible selected text frame. * With no selected target, supports clicking an existing text frame or creating a new text frame by click/drag before import. * Preserves Import Text Only and Prefix Styles with Item Name behaviour. * Invokes text-import UI only after the job has resolved to Text, preventing unrelated file types from entering the text importer. * Keeps the existing Get Text / Append Text entry points available as compatibility paths. * Does not alter the existing undo behaviour of `gtGetText` imports. ## fi4-import-action-resolver-v1.00.patch * Adds a common resolver for Place jobs with more than one valid import action. * Builds available actions from `FileImportCandidate` data rather than format-specific branching. * Supports Image, Text, Editable Objects, and Cancel according to the candidate set. * Automatically resolves compatible selected image/text-frame targets where no user choice is required. * For non-empty text frames, provides Replace Text, Append Text, and Cancel. * Append delegates to the existing `gtGetText::launchImporter(..., append=true, ...)` path. * Empty text frames bypass the Replace/Append resolver. * Cancel is non-destructive and does not consume the pending placement job. ## fi5-user-facing-import-unification-v1.01.patch * Makes `filePlace` the sole normal user-facing command for image, text, and vector/object content placement. * Removes the visible Get Text, Append Text, Get Image, and Get Vector File entries and the redundant File → Import submenu. * Assigns the default Ctrl+I shortcut to `filePlace`. * Migrates legacy/default import shortcuts to `filePlace` and clears conflicting shortcuts from compatibility actions. * Uses Place… in text- and image-frame context menus. * Preserves unrelated text-frame context actions such as Story Editor and Sample Text. * Retains the legacy import action objects and slots as internal compatibility entry points. * Does not change import routing, DnD behaviour, placement sizing, preview handling, or undo. ## fi6-drag-drop-convergence-v1.00.patch * Routes external-file drag/drop classification through `FileImportJob`, sharing the same Image/Text/Vector candidate model used by Place. * Adds `candidateIndex(FileImportKind)` and `hasCandidate(FileImportKind)` helpers for common candidate queries. * Uses FI candidate kinds when resolving compatible image- and text-frame drop targets. * Reuses the Vector candidate’s resolved plugin `formatId` instead of probing the same file again in `contentsDropEvent()`. * Removes redundant image/vector classification code from the external-file DnD path. * Preserves the existing specialized image, text, and vector import implementations and their placement behaviour. * Leaves internal Scribus element, symbol, inline-item, and move/copy DnD handling unchanged. * Keeps `.sce` on the Scribus-object path while Dia `.shape` files continue through their normal import plugin. * Limits the change to external-file routing rather than restructuring `ScribusView::contentsDropEvent()` broadly. ## fi7-legacy-import-cleanup-v1.01.patch * Cleans remaining legacy import-action/UI plumbing after Place and external DnD share the FI routing layer. * Removes obsolete legacy import-action references from remaining applicable-action/UI bookkeeping. * Retains legacy runtime QActions and slots where saved shortcuts, Scripter/internal callers, or compatibility paths may still reference them. * Migrates bundled keyboard keysets from the legacy content-import action IDs to `filePlace`. * Maps the Scribus 1.3/1.5/1.7 keysets to Ctrl+I, PageStream to Alt+F, and PagePlus X3 to Ctrl+G. * Preserves compatibility with older/custom shortcut configurations by keeping the legacy action IDs available internally. * Does not change routing, importer behaviour, DnD semantics, placement sizing, preview handling, or undo. ## fi8-image-placement-preview-v1.00.patch * Replaces `CanvasMode_ImageImport`’s moving `QToolTip` preview with a lightweight `QLabel` overlay parented to `ScribusView::viewport()`. * Removes the tooltip relocation hack, duplicate `showText()` calls, and PNG/Base64/HTML preview serialization. * Keeps the preview at a fixed cursor-relative offset in viewport coordinates, with edge flip/clamping near viewport bounds. * Makes the overlay mouse-transparent, focusless, and lifecycle-safe via viewport ownership and `QPointer<QLabel>`. * Preserves the existing 80×80 checkerboard thumbnail behaviour and image scaling. * Uses `QFileInfo::fileName()` for clean filename fallback when no thumbnail can be generated. * Hides the preview on mode exit, Escape, queue exhaustion, empty lists, and pointer leave. * Preserves existing image-placement queue controls and placement semantics; no changes to import routing, frame sizing, DnD, text/vector import, or undo. fi1-import-routing-foundation-v1.00.patch (5,598 bytes)
Index: scribus/CMakeLists_Sources.txt
===================================================================
--- scribus/CMakeLists_Sources.txt (revision 27816)
+++ scribus/CMakeLists_Sources.txt (working copy)
@@ -90,6 +90,7 @@
documentlogmanager.cpp
exif.cpp
fileloader.cpp
+ fileimport.cpp
filesearch.cpp
filewatcher.cpp
fontlistmodel.cpp
Index: scribus/fileimport.h
===================================================================
--- scribus/fileimport.h (nonexistent)
+++ scribus/fileimport.h (working copy)
@@ -0,0 +1,81 @@
+/*
+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.
+*/
+
+#ifndef FILEIMPORT_H
+#define FILEIMPORT_H
+
+#include <QList>
+#include <QString>
+#include <QStringList>
+
+#include "scribusapi.h"
+
+enum class FileImportKind
+{
+ None,
+ Image,
+ Text,
+ Vector
+};
+
+enum class FileImportHandler
+{
+ None,
+ ImageLoader,
+ TextImporter,
+ LoadSavePlugin,
+ ScribusObject
+};
+
+/**
+ * Describes one concrete import path for a file. formatId is used only by
+ * LoadSavePlugin candidates; the built-in image/text handlers leave it unset.
+ */
+struct SCRIBUS_API FileImportCandidate
+{
+ FileImportKind kind { FileImportKind::None };
+ FileImportHandler handler { FileImportHandler::None };
+ int formatId { -1 };
+
+ bool isValid() const { return kind != FileImportKind::None && handler != FileImportHandler::None; }
+};
+
+/**
+ * Per-file import state. Jobs with one candidate resolve automatically; jobs
+ * with multiple candidates stay unresolved until the caller selects one.
+ */
+class SCRIBUS_API FileImportJob
+{
+public:
+ FileImportJob() = default;
+ FileImportJob(const QString& fileName, const QList<FileImportCandidate>& candidates);
+
+ const QString& fileName() const { return m_fileName; }
+ const QList<FileImportCandidate>& candidates() const { return m_candidates; }
+
+ bool isSupported() const { return !m_candidates.isEmpty(); }
+ bool isAmbiguous() const { return m_candidates.size() > 1; }
+ bool isResolved() const { return m_selectedCandidate >= 0; }
+
+ int selectedCandidateIndex() const { return m_selectedCandidate; }
+ FileImportCandidate selectedCandidate() const;
+ bool selectCandidate(int index);
+
+private:
+ QString m_fileName;
+ QList<FileImportCandidate> m_candidates;
+ int m_selectedCandidate { -1 };
+};
+
+/**
+ * Discovers the import paths currently available for fileName without importing
+ * it. Text extensions are supplied by the text-import subsystem so this layer
+ * does not own or initialize gettext plugins.
+ */
+SCRIBUS_API FileImportJob createFileImportJob(const QString& fileName, const QStringList& textExtensions = QStringList());
+
+#endif
Index: scribus/fileimport.cpp
===================================================================
--- scribus/fileimport.cpp (nonexistent)
+++ scribus/fileimport.cpp (working copy)
@@ -0,0 +1,77 @@
+/*
+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.
+*/
+
+#include "fileimport.h"
+
+#include <QFileInfo>
+
+#include "fileloader.h"
+#include "loadsaveplugin.h"
+#include "plugins/formatidlist.h"
+#include "util_formats.h"
+
+FileImportJob::FileImportJob(const QString& fileName, const QList<FileImportCandidate>& candidates)
+ : m_fileName(fileName)
+{
+ for (const FileImportCandidate& candidate : candidates)
+ {
+ if (candidate.isValid())
+ m_candidates.append(candidate);
+ }
+ if (m_candidates.size() == 1)
+ m_selectedCandidate = 0;
+}
+
+FileImportCandidate FileImportJob::selectedCandidate() const
+{
+ if (!isResolved())
+ return FileImportCandidate();
+ return m_candidates.at(m_selectedCandidate);
+}
+
+bool FileImportJob::selectCandidate(int index)
+{
+ if (index < 0 || index >= m_candidates.size())
+ return false;
+ m_selectedCandidate = index;
+ return true;
+}
+
+FileImportJob createFileImportJob(const QString& fileName, const QStringList& textExtensions)
+{
+ QList<FileImportCandidate> candidates;
+ QFileInfo fileInfo(fileName);
+ if (!fileInfo.exists() || !fileInfo.isFile())
+ return FileImportJob(fileName, candidates);
+
+ const QString suffix = fileInfo.suffix().toLower();
+ if (suffix.isEmpty())
+ return FileImportJob(fileName, candidates);
+
+ const QString imageExtensions = FormatsManager::instance()->extensionListForFormat(FormatsManager::IMAGESIMGFRAME, 1);
+ if (imageExtensions.split('|', Qt::SkipEmptyParts).contains(suffix, Qt::CaseInsensitive))
+ candidates.append({ FileImportKind::Image, FileImportHandler::ImageLoader, -1 });
+
+ if (textExtensions.contains(suffix, Qt::CaseInsensitive))
+ candidates.append({ FileImportKind::Text, FileImportHandler::TextImporter, -1 });
+
+ if (suffix == "sce" || suffix == "shape")
+ candidates.append({ FileImportKind::Vector, FileImportHandler::ScribusObject, -1 });
+ else
+ {
+ FileLoader fileLoader(fileName);
+ const int formatId = fileLoader.testFile();
+ if (formatId >= FORMATID_FIRSTUSER)
+ {
+ const FileFormat* format = LoadSavePlugin::getFormatById(formatId);
+ if (format && format->load)
+ candidates.append({ FileImportKind::Vector, FileImportHandler::LoadSavePlugin, formatId });
+ }
+ }
+
+ return FileImportJob(fileName, candidates);
+}
fi2-unified-image-vector-import-v1.01.patch (14,821 bytes)
Index: scribus/actionmanager.cpp
===================================================================
--- scribus/actionmanager.cpp (revision 27816)
+++ scribus/actionmanager.cpp (working copy)
@@ -132,6 +132,8 @@
name = "fileCollect";
scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
//File Import Menu
+ name = "filePlace";
+ scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
name = "fileImportText";
scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
name = "fileImportText2";
@@ -191,6 +193,7 @@
connect( (*scrActions)["fileCollect"], SIGNAL(triggered()), mainWindow, SLOT(fileCollect()) );
connect( (*scrActions)["fileQuit"], SIGNAL(triggered()), mainWindow, SLOT(slotFileQuit()) );
//File Import Menu
+ connect( (*scrActions)["filePlace"], SIGNAL(triggered()), mainWindow, SLOT(slotPlaceFile()) );
connect( (*scrActions)["fileImportText"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent()) );
connect( (*scrActions)["fileImportText2"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent2()) );
connect( (*scrActions)["fileImportAppendText"], SIGNAL(triggered()), mainWindow, SLOT(slotFileAppend()) );
@@ -1571,6 +1574,7 @@
(*scrActions)["fileSaveAs"]->setTexts( tr("Save &As..."));
(*scrActions)["fileRevert"]->setTexts( tr("Re&vert to Saved"));
(*scrActions)["fileCollect"]->setTexts( tr("Collect for O&utput..."));
+ (*scrActions)["filePlace"]->setTexts( tr("&Place..."));
(*scrActions)["fileImportText"]->setTexts( tr("Get Text..."));
(*scrActions)["fileImportAppendText"]->setTexts( tr("Append &Text..."));
(*scrActions)["fileImportImage"]->setTexts( tr("Get Image..."));
@@ -2175,6 +2179,7 @@
<< "fileSaveAs"
<< "fileRevert"
<< "fileCollect"
+ << "filePlace"
<< "fileImportText"
<< "fileImportAppendText"
<< "fileImportImage"
Index: scribus/appmodehelper.cpp
===================================================================
--- scribus/appmodehelper.cpp (revision 27816)
+++ scribus/appmodehelper.cpp (working copy)
@@ -1485,6 +1485,7 @@
(*a_scrActions)["fileExportAsEPS"]->setEnabled(true);
(*a_scrActions)["fileExportAsPDF"]->setEnabled(true);
(*a_scrActions)["fileImportVector"]->setEnabled(true);
+ (*a_scrActions)["filePlace"]->setEnabled(true);
(*a_scrActions)["pageImport"]->setEnabled(true);
if (ScCore->haveGS() || ScCore->isWinGUI())
@@ -1698,6 +1699,7 @@
(*a_scrActions)["fileImportText"]->setEnabled(false);
(*a_scrActions)["fileImportText2"]->setEnabled(false);
(*a_scrActions)["fileImportVector"]->setEnabled(false);
+ (*a_scrActions)["filePlace"]->setEnabled(false);
(*a_scrActions)["filePrint"]->setEnabled(false);
(*a_scrActions)["fileRevert"]->setEnabled(false);
(*a_scrActions)["fileSave"]->setEnabled(false);
@@ -1894,6 +1896,7 @@
(*a_scrActions)["fileImportImage"]->setEnabled(false);
(*a_scrActions)["fileImportAppendText"]->setEnabled(false);
(*a_scrActions)["fileImportVector"]->setEnabled(false);
+ (*a_scrActions)["filePlace"]->setEnabled(false);
(*a_scrActions)["pageInsert"]->setEnabled(false);
(*a_scrActions)["pageImport"]->setEnabled(false);
(*a_scrActions)["pageDelete"]->setEnabled(false);
Index: scribus/canvasmode_imageimport.cpp
===================================================================
--- scribus/canvasmode_imageimport.cpp (revision 27816)
+++ scribus/canvasmode_imageimport.cpp (working copy)
@@ -43,20 +43,30 @@
void CanvasMode_ImageImport::setImageList(QStringList l)
{
m_imageList = l;
- if (l.size()==1)
+ if (m_imageList.isEmpty())
+ return;
+
+ if (m_imageList.size() == 1)
{
- while (!(m_doc->m_Selection->itemAt(0)->isImageFrame()))
- m_doc->m_Selection->removeFirst();
- if (m_doc->m_Selection->isNotEmpty())
+ PageItem* targetFrame = nullptr;
+ for (int i = 0; i < m_doc->m_Selection->count(); ++i)
+ {
+ PageItem* item = m_doc->m_Selection->itemAt(i);
+ if (item && item->isImageFrame())
+ {
+ targetFrame = item;
+ break;
+ }
+ }
+ if (targetFrame)
{
- setImage(m_doc->m_Selection->itemAt(0));
+ setImage(targetFrame);
m_view->requestMode(submodePaintingDone);
+ return;
}
- else
- newToolTip(l.first());
}
- else
- newToolTip(l.first());
+
+ newToolTip(m_imageList.constFirst());
}
void CanvasMode_ImageImport::newToolTip(const QString& name)
Index: scribus/pageitem_imageframe.cpp
===================================================================
--- scribus/pageitem_imageframe.cpp (revision 27816)
+++ scribus/pageitem_imageframe.cpp (working copy)
@@ -447,7 +447,7 @@
void PageItem_ImageFrame::applicableActions(QStringList & actionList)
{
- actionList << "fileImportImage";
+ actionList << "filePlace";
actionList << "itemConvertToTextFrame";
actionList << "itemImageIsVisible";
actionList << "itemPreviewFull";
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp (revision 27816)
+++ scribus/scribus.cpp (working copy)
@@ -103,6 +103,7 @@
#include "desaxe/digester.h"
#include "documentchecker.h"
#include "documentlogmanager.h"
+#include "fileimport.h"
#include "fileloader.h"
#include "filewatcher.h"
#include "fpoint.h"
@@ -941,12 +942,11 @@
scrMenuMgr->addMenuItemString("fileRevert", "File");
scrMenuMgr->addMenuItemString("fileCollect", "File");
scrMenuMgr->addMenuItemString("SEPARATOR", "File");
+ scrMenuMgr->addMenuItemString("filePlace", "File");
scrMenuMgr->createMenu("FileImport", tr("&Import"), "File");
scrMenuMgr->addMenuItemString("FileImport", "File");
scrMenuMgr->addMenuItemString("fileImportText", "FileImport");
scrMenuMgr->addMenuItemString("fileImportAppendText", "FileImport");
- scrMenuMgr->addMenuItemString("fileImportImage", "FileImport");
- scrMenuMgr->addMenuItemString("fileImportVector", "FileImport");
scrMenuMgr->addMenuItemString("FileExport", "File");
scrMenuMgr->createMenu("FileExport", tr("&Export"), "File");
scrMenuMgr->addMenuItemString("fileExportText", "FileExport");
@@ -3054,6 +3054,166 @@
view->dragY = 0;
}
+void ScribusMainWindow::slotPlaceFile()
+{
+ QStringList allPatterns;
+ QStringList filters;
+ auto appendPattern = [&allPatterns](const QString& extension)
+ {
+ if (extension.isEmpty())
+ return;
+ const QString lowerPattern = "*." + extension.toLower();
+ const QString upperPattern = lowerPattern.toUpper();
+ if (!allPatterns.contains(lowerPattern))
+ allPatterns.append(lowerPattern);
+ if (!allPatterns.contains(upperPattern))
+ allPatterns.append(upperPattern);
+ };
+
+ const QStringList imageExtensions = FormatsManager::instance()->extensionListForFormat(FormatsManager::IMAGESIMGFRAME, 1).split('|', Qt::SkipEmptyParts);
+ for (const QString& extension : imageExtensions)
+ appendPattern(extension);
+
+ QStringList imageFilters = FormatsManager::instance()->fileDialogFormatList(FormatsManager::IMAGESIMGFRAME).split(";;", Qt::SkipEmptyParts);
+ if (!imageFilters.isEmpty())
+ imageFilters.removeFirst();
+ if (!imageFilters.isEmpty())
+ imageFilters.removeLast();
+ for (const QString& filter : imageFilters)
+ {
+ if (!filters.contains(filter))
+ filters.append(filter);
+ }
+
+ const QList<FileFormat>& supportedFormats = LoadSavePlugin::supportedFormats();
+ for (const FileFormat& format : supportedFormats)
+ {
+ if (!format.load || format.formatId < FORMATID_FIRSTUSER)
+ continue;
+ for (const QString& extension : format.fileExtensions)
+ appendPattern(extension);
+ if (!format.filter.isEmpty() && !filters.contains(format.filter))
+ filters.append(format.filter);
+ }
+ appendPattern("sce");
+ appendPattern("shape");
+ filters.append(tr("Scribus Objects (*.sce *.SCE *.shape *.SHAPE)"));
+
+ allPatterns.sort(Qt::CaseInsensitive);
+ filters.sort(Qt::CaseInsensitive);
+ QString formatList = tr("All Supported Formats") + " (" + allPatterns.join(' ') + ")";
+ if (!filters.isEmpty())
+ formatList += ";;" + filters.join(";;");
+ formatList += ";;" + tr("All Files (*)");
+
+ const bool selectedImageFrame = doc->m_Selection->count() == 1 && doc->m_Selection->itemAt(0)->isImageFrame();
+ PrefsContext* dirs = m_prefsManager.prefsFile->getContext("dirs");
+ QString workDir;
+ if (selectedImageFrame)
+ {
+ const QString prefsDocDir = m_prefsManager.documentDir();
+ workDir = dirs->get("images", prefsDocDir.isEmpty() ? "." : prefsDocDir);
+ }
+ else
+ workDir = dirs->get("pastefile", ".");
+
+ CustomFDialog dialog(this, workDir, tr("Place"), formatList, fdShowPreview | fdExistingFilesI | fdDisableOk);
+ if (dialog.exec() != QDialog::Accepted)
+ return;
+
+ const QStringList fileNames = dialog.selectedFiles();
+ if (fileNames.isEmpty())
+ return;
+
+ QStringList imageFiles;
+ QList<QPair<QString, FileImportCandidate>> vectorFiles;
+ for (const QString& fileName : fileNames)
+ {
+ FileImportJob job = createFileImportJob(fileName);
+ if (!job.isSupported())
+ {
+ ScMessageBox::warning(this, CommonStrings::trWarning,
+ tr("The file cannot be placed because no supported importer was found:\n%1").arg(QDir::toNativeSeparators(fileName)));
+ return;
+ }
+
+ if (!job.isResolved())
+ {
+ int imageCandidate = -1;
+ int vectorCandidate = -1;
+ for (int i = 0; i < job.candidates().size(); ++i)
+ {
+ if (job.candidates().at(i).kind == FileImportKind::Image)
+ imageCandidate = i;
+ else if (job.candidates().at(i).kind == FileImportKind::Vector)
+ vectorCandidate = i;
+ }
+
+ if (selectedImageFrame && fileNames.size() == 1 && imageCandidate >= 0)
+ job.selectCandidate(imageCandidate);
+ else if (imageCandidate >= 0 && vectorCandidate >= 0)
+ {
+ QMessageBox choice(QMessageBox::Question, tr("Place File"),
+ tr("How do you want to place %1?").arg(QFileInfo(fileName).fileName()),
+ QMessageBox::Cancel, this);
+ QPushButton* imageButton = choice.addButton(tr("As Image"), QMessageBox::AcceptRole);
+ QPushButton* vectorButton = choice.addButton(tr("As Editable Objects"), QMessageBox::AcceptRole);
+ choice.exec();
+ if (choice.clickedButton() == imageButton)
+ job.selectCandidate(imageCandidate);
+ else if (choice.clickedButton() == vectorButton)
+ job.selectCandidate(vectorCandidate);
+ else
+ return;
+ }
+ }
+
+ if (!job.isResolved())
+ {
+ ScMessageBox::warning(this, CommonStrings::trWarning,
+ tr("The file has more than one available import path and could not be resolved:\n%1").arg(QDir::toNativeSeparators(fileName)));
+ return;
+ }
+
+ const FileImportCandidate candidate = job.selectedCandidate();
+ if (candidate.kind == FileImportKind::Image)
+ imageFiles.append(fileName);
+ else if (candidate.kind == FileImportKind::Vector)
+ vectorFiles.append(qMakePair(fileName, candidate));
+ }
+
+ if (!imageFiles.isEmpty() && !vectorFiles.isEmpty())
+ {
+ ScMessageBox::information(this, tr("Place Files"),
+ tr("Mixed image and editable-object batches are not supported yet. Please place one content type at a time."));
+ return;
+ }
+ if (vectorFiles.size() > 1)
+ {
+ ScMessageBox::information(this, tr("Place Files"),
+ tr("Placing multiple editable-object files in one operation is not supported yet. Please select one file."));
+ return;
+ }
+
+ const QString firstDir = fileNames.first().left(fileNames.first().lastIndexOf('/'));
+ if (!imageFiles.isEmpty())
+ {
+ dirs->set("images", firstDir);
+ view->requestMode(modeImportImage);
+ CanvasMode_ImageImport* imageImport = qobject_cast<CanvasMode_ImageImport*>(view->canvasMode());
+ if (imageImport)
+ imageImport->setImageList(imageFiles);
+ return;
+ }
+
+ if (!vectorFiles.isEmpty())
+ {
+ dirs->set("pastefile", firstDir);
+ const FileImportCandidate candidate = vectorFiles.first().second;
+ importVectorFile(vectorFiles.first().first, candidate.formatId);
+ }
+}
+
void ScribusMainWindow::importVectorFile()
{
QStringList formats;
@@ -3093,13 +3253,18 @@
return;
PrefsManager::instance().prefsFile->getContext("dirs")->set("pastefile", fileName.left(fileName.lastIndexOf("/")));
+ importVectorFile(fileName, -1);
+}
+
+void ScribusMainWindow::importVectorFile(const QString& fileName, int formatId)
+{
QFileInfo fi(fileName);
- QString suffix = fi.suffix().toLower();
+ const QString suffix = fi.suffix().toLower();
if ((suffix == "sce") || (suffix == "shape"))
{
QList<QUrl> urls;
QMimeData* md = new QMimeData();
- urls.append( QUrl::fromLocalFile(fileName) );
+ urls.append(QUrl::fromLocalFile(fileName));
md->setUrls(urls);
QDrag* dr = new QDrag(this);
dr->setMimeData(md);
@@ -3109,16 +3274,19 @@
}
else
{
- FileLoader *fileLoader = new FileLoader(fileName);
- int testResult = fileLoader->testFile();
- delete fileLoader;
- if ((testResult != -1) && (testResult >= FORMATID_FIRSTUSER))
+ int resolvedFormatId = formatId;
+ if (resolvedFormatId < FORMATID_FIRSTUSER)
{
- const FileFormat * fmt = LoadSavePlugin::getFormatById(testResult);
- if (fmt)
+ FileLoader fileLoader(fileName);
+ resolvedFormatId = fileLoader.testFile();
+ }
+ if (resolvedFormatId >= FORMATID_FIRSTUSER)
+ {
+ const FileFormat* format = LoadSavePlugin::getFormatById(resolvedFormatId);
+ if (format && format->load)
{
doc->dontResize = true;
- fmt->loadFile(fileName, LoadSavePlugin::lfUseCurrentPage|LoadSavePlugin::lfInteractive);
+ format->loadFile(fileName, LoadSavePlugin::lfUseCurrentPage | LoadSavePlugin::lfInteractive);
doc->dontResize = false;
}
}
Index: scribus/scribus.h
===================================================================
--- scribus/scribus.h (revision 27816)
+++ scribus/scribus.h (working copy)
@@ -358,6 +358,7 @@
bool slotPageImport();
bool loadPage(const QString& fileName, int Nr, bool Mpa, const QString& renamedPageName = QString());
void gotoLayer(int l);
+ void slotPlaceFile();
void slotGetContent();
void slotGetContent2(); // kk2006
void slotGetClipboardImage();
@@ -645,6 +646,7 @@
void initPalettes();
void initScrapbook();
void updateColorMenu(QProgressBar* progressBar = nullptr);
+ void importVectorFile(const QString& fileName, int formatId);
int m_ScriptRunning {0};
Index: scribus/ui/contextmenu.cpp
===================================================================
--- scribus/ui/contextmenu.cpp (revision 27816)
+++ scribus/ui/contextmenu.cpp (working copy)
@@ -170,8 +170,8 @@
addSeparator();
menuEditContent->addAction(m_ScMW->scrActions["toolsEditWithStoryEditor"]);
}
- if (m_actionList.contains("fileImportImage"))
- menuEditContent->addAction(m_ScMW->scrActions["fileImportImage"]);
+ if (m_actionList.contains("filePlace"))
+ menuEditContent->addAction(m_ScMW->scrActions["filePlace"]);
if (selectedItemCount == 1 && currItem->isImageFrame())
{
if (QApplication::clipboard()->mimeData()->hasImage())
fi3-text-import-integration-v1.01.patch (23,643 bytes)
Index: scribus/CMakeLists_Sources.txt
===================================================================
--- scribus/CMakeLists_Sources.txt (revision 27816)
+++ scribus/CMakeLists_Sources.txt (working copy)
@@ -57,6 +57,7 @@
canvasmode_eyedropper.cpp
canvasmode_framelinks.cpp
canvasmode_imageimport.cpp
+ canvasmode_textimport.cpp
canvasmode_edit.cpp
canvasmode_editarc.cpp
canvasmode_editgradient.cpp
Index: scribus/appmodehelper.cpp
===================================================================
--- scribus/appmodehelper.cpp (revision 27816)
+++ scribus/appmodehelper.cpp (working copy)
@@ -366,6 +366,7 @@
case modeEyeDropper:
break;
case modeImportImage:
+ case modeImportText:
break;
case modeImportObject:
break;
Index: scribus/appmodes.h
===================================================================
--- scribus/appmodes.h (revision 27816)
+++ scribus/appmodes.h (working copy)
@@ -46,7 +46,8 @@
modeEditTable,
modeEditMeshPatch,
modeEditWeldPoint,
- modeInsertPDFRadioButton
+ modeInsertPDFRadioButton,
+ modeImportText
};
#endif // APPMODES_H
Index: scribus/canvas.h
===================================================================
--- scribus/canvas.h (revision 27816)
+++ scribus/canvas.h (working copy)
@@ -96,6 +96,7 @@
friend class CanvasMode_EyeDropper;
friend class CanvasMode_FrameLinks;
friend class CanvasMode_ImageImport;
+ friend class CanvasMode_TextImport;
friend class CanvasMode_Magnifier;
friend class CanvasMode_NodeEdit;
friend class CanvasMode_ObjImport;
Index: scribus/canvasmode.cpp
===================================================================
--- scribus/canvasmode.cpp (revision 27816)
+++ scribus/canvasmode.cpp (working copy)
@@ -37,6 +37,7 @@
#include "canvasmode_eyedropper.h"
#include "canvasmode_framelinks.h"
#include "canvasmode_imageimport.h"
+#include "canvasmode_textimport.h"
#include "canvasmode_magnifier.h"
#include "canvasmode_measurements.h"
#include "canvasmode_nodeedit.h"
@@ -157,6 +158,9 @@
case modeImportImage:
result = new CanvasMode_ImageImport(view);
break;
+ case modeImportText:
+ result = new CanvasMode_TextImport(view);
+ break;
case modeMagnifier:
result = new CanvasMode_Magnifier(view);
break;
@@ -614,6 +618,7 @@
cursor = im.loadCursor("cursor-latex-frame");
break;
case modeDrawText:
+ case modeImportText:
cursor = im.loadCursor("cursor-text-frame");
break;
case modeDrawTable2:
@@ -879,6 +884,7 @@
case modeEyeDropper:
case modeImportObject:
case modeImportImage:
+ case modeImportText:
case modePanning:
m_view->requestMode(modeNormal);
break;
Index: scribus/canvasmode_textimport.cpp
===================================================================
--- scribus/canvasmode_textimport.cpp (nonexistent)
+++ scribus/canvasmode_textimport.cpp (working copy)
@@ -0,0 +1,141 @@
+/*
+ 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.
+ */
+
+#include "canvasmode_textimport.h"
+
+#include <QCursor>
+
+#include "canvas.h"
+#include "iconmanager.h"
+#include "pageitem.h"
+#include "scribus.h"
+#include "scribusdoc.h"
+#include "scribusview.h"
+
+CanvasMode_TextImport::CanvasMode_TextImport(ScribusView* view)
+ : CanvasMode(view), m_ScMW(view->m_ScMW)
+{
+}
+
+void CanvasMode_TextImport::setImportSetup(const ImportSetup& setup)
+{
+ m_setup = setup;
+}
+
+bool CanvasMode_TextImport::importInto(PageItem* item)
+{
+ if (!item || !item->isTextFrame() || !m_setup.runDialog)
+ return false;
+ return m_ScMW->placeTextFile(m_setup, item);
+}
+
+void CanvasMode_TextImport::drawControls(QPainter* p)
+{
+ commonDrawControls(p, false);
+}
+
+void CanvasMode_TextImport::enterEvent(QEvent*)
+{
+ if (!m_canvas->m_viewMode.m_MouseButtonPressed)
+ setModeCursor();
+}
+
+void CanvasMode_TextImport::keyPressEvent(QKeyEvent* e)
+{
+ if (e->key() == Qt::Key_Escape)
+ {
+ m_setup.runDialog = false;
+ m_view->requestMode(submodePaintingDone);
+ e->accept();
+ return;
+ }
+ CanvasMode::keyPressEvent(e);
+}
+
+void CanvasMode_TextImport::activate(bool fromGesture)
+{
+ CanvasMode::activate(fromGesture);
+ m_canvas->m_viewMode.m_MouseButtonPressed = false;
+ m_canvas->resetRenderMode();
+ m_doc->DragP = false;
+ m_doc->leaveDrag = false;
+ m_canvas->m_viewMode.operItemMoving = false;
+ m_canvas->m_viewMode.operItemResizing = false;
+ m_view->MidButt = false;
+ setModeCursor();
+ if (fromGesture)
+ m_view->update();
+}
+
+void CanvasMode_TextImport::deactivate(bool forGesture)
+{
+ m_view->setRedrawMarkerShown(false);
+ CanvasMode::deactivate(forGesture);
+}
+
+void CanvasMode_TextImport::mouseDoubleClickEvent(QMouseEvent* e)
+{
+ e->accept();
+ m_canvas->m_viewMode.m_MouseButtonPressed = false;
+ m_canvas->resetRenderMode();
+}
+
+void CanvasMode_TextImport::mouseMoveEvent(QMouseEvent* e)
+{
+ e->accept();
+ PageItem* item = m_canvas->itemUnderCursor(e->globalPosition());
+ if (item && item->isTextFrame())
+ m_view->setCursor(IconManager::instance().loadCursor("cursor-text-frame"));
+ else
+ setModeCursor();
+ commonMouseMove(e);
+}
+
+void CanvasMode_TextImport::mousePressEvent(QMouseEvent* e)
+{
+ m_canvas->PaintSizeRect(QRect());
+ m_canvas->m_viewMode.m_MouseButtonPressed = true;
+ m_canvas->m_viewMode.operItemMoving = false;
+ m_view->HaveSelRect = false;
+ m_doc->DragP = false;
+ m_doc->leaveDrag = false;
+ e->accept();
+ m_view->registerMousePress(e->globalPosition());
+
+ if (m_setup.runDialog)
+ {
+ PageItem* item = m_canvas->itemUnderCursor(e->globalPosition());
+ if (item && item->isTextFrame())
+ {
+ if (importInto(item))
+ m_view->requestMode(submodePaintingDone);
+ }
+ else
+ m_view->TextAfterDraw = true;
+ }
+
+ if (e->button() == Qt::MiddleButton)
+ {
+ m_view->MidButt = true;
+ if (e->modifiers() & Qt::ControlModifier)
+ m_view->DrawNew();
+ }
+}
+
+void CanvasMode_TextImport::mouseReleaseEvent(QMouseEvent* e)
+{
+ m_canvas->m_viewMode.m_MouseButtonPressed = false;
+ m_canvas->resetRenderMode();
+ e->accept();
+ m_view->updateContents();
+ m_canvas->setRenderModeUseBuffer(false);
+ m_doc->DragP = false;
+ m_doc->leaveDrag = false;
+ m_canvas->m_viewMode.operItemMoving = false;
+ m_canvas->m_viewMode.operItemResizing = false;
+ m_view->MidButt = false;
+}
Index: scribus/canvasmode_textimport.h
===================================================================
--- scribus/canvasmode_textimport.h (nonexistent)
+++ scribus/canvasmode_textimport.h (working copy)
@@ -0,0 +1,48 @@
+/*
+ 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.
+ */
+
+#ifndef CANVASMODE_TEXTIMPORT_H
+#define CANVASMODE_TEXTIMPORT_H
+
+#include <QEvent>
+#include <QMouseEvent>
+#include <QPainter>
+
+#include "canvasmode.h"
+#include "gtgettext.h"
+
+class PageItem;
+class ScribusMainWindow;
+class ScribusView;
+
+class CanvasMode_TextImport : public CanvasMode
+{
+ Q_OBJECT
+
+public:
+ explicit CanvasMode_TextImport(ScribusView* view);
+ ~CanvasMode_TextImport() override = default;
+
+ void activate(bool fromGesture) override;
+ void deactivate(bool forGesture) override;
+ void drawControls(QPainter* p) override;
+ void enterEvent(QEvent* e) override;
+ void keyPressEvent(QKeyEvent* e) override;
+ void mouseDoubleClickEvent(QMouseEvent* e) override;
+ void mouseMoveEvent(QMouseEvent* e) override;
+ void mousePressEvent(QMouseEvent* e) override;
+ void mouseReleaseEvent(QMouseEvent* e) override;
+
+ void setImportSetup(const ImportSetup& setup);
+ bool importInto(PageItem* item);
+
+private:
+ ImportSetup m_setup {};
+ ScribusMainWindow* m_ScMW { nullptr };
+};
+
+#endif // CANVASMODE_TEXTIMPORT_H
Index: scribus/gtgettext.cpp
===================================================================
--- scribus/gtgettext.cpp (revision 27816)
+++ scribus/gtgettext.cpp (working copy)
@@ -228,6 +228,35 @@
return impsetup;
}
+
+ImportSetup gtGetText::runOptions(const QString& fileName)
+{
+ ImportSetup impsetup;
+ impsetup.runDialog = false;
+ impsetup.importer = -1;
+ impsetup.filename = fileName;
+ impsetup.textOnly = false;
+ impsetup.prefixNames = false;
+ impsetup.encoding.clear();
+
+ m_ilist.clear();
+ for (const ImporterData& importerData : m_importers)
+ m_ilist.append(importerData.fileFormatName);
+
+ m_dias = new gtDialogs();
+ if (m_dias->runImportOptionsDialog(fileName, m_ilist))
+ {
+ impsetup.runDialog = true;
+ impsetup.importer = m_dias->getImporter();
+ impsetup.textOnly = m_dias->importTextOnly();
+ impsetup.prefixNames = m_dias->prefixStyles();
+ impsetup.encoding = m_dias->getEncoding();
+ }
+ delete m_dias;
+ m_dias = nullptr;
+ return impsetup;
+}
+
// Loads, validates, and executes the Importer code.
void gtGetText::CallDLL(const ImporterData& idata, const QString& filePath,
const QString& encoding, bool textOnly, bool append, bool prefix, PageItem* importItem)
Index: scribus/gtgettext.h
===================================================================
--- scribus/gtgettext.h (revision 27816)
+++ scribus/gtgettext.h (working copy)
@@ -73,6 +73,7 @@
QStringList getSupportedTypes(); // get all Fileextensions we support
ImportSetup run(); // Creates the dialog for the user to import a file based on the supported file formats.
+ ImportSetup runOptions(const QString& fileName); // Configures text import for a file already selected elsewhere.
void launchImporter(int importer,
const QString& filename,
bool textOnly,
Index: scribus/pageitem_textframe.cpp
===================================================================
--- scribus/pageitem_textframe.cpp (revision 27816)
+++ scribus/pageitem_textframe.cpp (working copy)
@@ -5357,6 +5357,7 @@
//notes frames are not simply text frames
if (isNoteFrame())
return;
+ actionList << "filePlace";
actionList << "fileImportText";
actionList << "fileImportAppendText";
actionList << "toolsEditWithStoryEditor";
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp (revision 27816)
+++ scribus/scribus.cpp (working copy)
@@ -99,6 +99,7 @@
#include "appmodes.h"
#include "canvasmode.h"
#include "canvasmode_imageimport.h"
+#include "canvasmode_textimport.h"
#include "commonstrings.h"
#include "desaxe/digester.h"
#include "documentchecker.h"
@@ -3070,6 +3071,9 @@
allPatterns.append(upperPattern);
};
+ gtGetText textImporter(doc);
+ const QStringList textExtensions = textImporter.getSupportedTypes();
+
const QStringList imageExtensions = FormatsManager::instance()->extensionListForFormat(FormatsManager::IMAGESIMGFRAME, 1).split('|', Qt::SkipEmptyParts);
for (const QString& extension : imageExtensions)
appendPattern(extension);
@@ -3085,6 +3089,18 @@
filters.append(filter);
}
+ QStringList textPatterns;
+ for (const QString& extension : textExtensions)
+ {
+ appendPattern(extension);
+ const QString pattern = "*." + extension.toLower();
+ if (!textPatterns.contains(pattern))
+ textPatterns.append(pattern);
+ }
+ textPatterns.sort(Qt::CaseInsensitive);
+ if (!textPatterns.isEmpty())
+ filters.append(tr("Text Documents") + " (" + textPatterns.join(' ') + ")");
+
const QList<FileFormat>& supportedFormats = LoadSavePlugin::supportedFormats();
for (const FileFormat& format : supportedFormats)
{
@@ -3107,6 +3123,7 @@
formatList += ";;" + tr("All Files (*)");
const bool selectedImageFrame = doc->m_Selection->count() == 1 && doc->m_Selection->itemAt(0)->isImageFrame();
+ const bool selectedTextFrame = doc->m_Selection->count() == 1 && doc->m_Selection->itemAt(0)->isTextFrame();
PrefsContext* dirs = m_prefsManager.prefsFile->getContext("dirs");
QString workDir;
if (selectedImageFrame)
@@ -3114,6 +3131,8 @@
const QString prefsDocDir = m_prefsManager.documentDir();
workDir = dirs->get("images", prefsDocDir.isEmpty() ? "." : prefsDocDir);
}
+ else if (selectedTextFrame)
+ workDir = dirs->get("get_text", ".");
else
workDir = dirs->get("pastefile", ".");
@@ -3126,10 +3145,11 @@
return;
QStringList imageFiles;
+ QStringList textFiles;
QList<QPair<QString, FileImportCandidate>> vectorFiles;
for (const QString& fileName : fileNames)
{
- FileImportJob job = createFileImportJob(fileName);
+ FileImportJob job = createFileImportJob(fileName, textExtensions);
if (!job.isSupported())
{
ScMessageBox::warning(this, CommonStrings::trWarning,
@@ -3178,10 +3198,19 @@
const FileImportCandidate candidate = job.selectedCandidate();
if (candidate.kind == FileImportKind::Image)
imageFiles.append(fileName);
+ else if (candidate.kind == FileImportKind::Text)
+ textFiles.append(fileName);
else if (candidate.kind == FileImportKind::Vector)
vectorFiles.append(qMakePair(fileName, candidate));
}
+ if (!textFiles.isEmpty() && (fileNames.size() != 1 || textFiles.size() != 1))
+ {
+ ScMessageBox::information(this, tr("Place Files"),
+ tr("Text files are placed one at a time for now. Please select a single text file."));
+ return;
+ }
+
if (!imageFiles.isEmpty() && !vectorFiles.isEmpty())
{
ScMessageBox::information(this, tr("Place Files"),
@@ -3196,6 +3225,26 @@
}
const QString firstDir = fileNames.first().left(fileNames.first().lastIndexOf('/'));
+ if (!textFiles.isEmpty())
+ {
+ dirs->set("get_text", firstDir);
+ ImportSetup setup = textImporter.runOptions(textFiles.first());
+ if (!setup.runDialog)
+ return;
+
+ if (selectedTextFrame)
+ {
+ placeTextFile(setup, doc->m_Selection->itemAt(0));
+ return;
+ }
+
+ view->requestMode(modeImportText);
+ auto* textImportMode = qobject_cast<CanvasMode_TextImport*>(view->canvasMode());
+ if (textImportMode)
+ textImportMode->setImportSetup(setup);
+ return;
+ }
+
if (!imageFiles.isEmpty())
{
dirs->set("images", firstDir);
@@ -3212,6 +3261,47 @@
const FileImportCandidate candidate = vectorFiles.first().second;
importVectorFile(vectorFiles.first().first, candidate.formatId);
}
+}
+
+bool ScribusMainWindow::placeTextFile(const ImportSetup& setup, PageItem* target)
+{
+ if (!target || !target->isTextFrame() || !setup.runDialog)
+ return false;
+
+ if (target->itemText.length() != 0)
+ {
+ const int result = ScMessageBox::warning(this, CommonStrings::trWarning, tr("Do you really want to clear all your text?"),
+ QMessageBox::Yes | QMessageBox::No,
+ QMessageBox::No,
+ QMessageBox::Yes);
+ if (result == QMessageBox::No)
+ return false;
+ }
+
+ gtGetText textImporter(doc);
+ textImporter.launchImporter(setup.importer, setup.filename, setup.textOnly, setup.encoding, false, setup.prefixNames, target);
+ doc->docHyphenator->autoHyphenate(target);
+ for (int i = 0; i < doc->Items->count(); ++i)
+ {
+ if (doc->Items->at(i)->isBookmark)
+ bookmarkPalette->BView->changeText(doc->Items->at(i));
+ }
+ if (!setup.textOnly)
+ doc->flag_NumUpdateRequest = true;
+ view->DrawNew();
+ slotDocCh();
+ m_styleManager->setDoc(doc);
+ marksManager->setDoc(doc);
+ nsEditor->setDoc(doc);
+ inlinePalette->unsetDoc();
+ inlinePalette->setDoc(doc);
+ if (outlinePalette->isVisible())
+ outlinePalette->BuildTree();
+ propertiesPalette->updateColorList();
+ contentPalette->updateColorList();
+ emit UpdateRequest(reqArrowStylesUpdate | reqLineStylesUpdate | reqStyleComboDocUpdate | reqInlinePalUpdate);
+ symbolPalette->updateSymbolList();
+ return true;
}
void ScribusMainWindow::importVectorFile()
Index: scribus/scribus.h
===================================================================
--- scribus/scribus.h (revision 27816)
+++ scribus/scribus.h (working copy)
@@ -83,6 +83,7 @@
class GuideManager;
class HelpBrowser;
class InlinePalette;
+struct ImportSetup;
class LayerPalette;
class MarksManager;
class Measurements;
@@ -359,6 +360,7 @@
bool loadPage(const QString& fileName, int Nr, bool Mpa, const QString& renamedPageName = QString());
void gotoLayer(int l);
void slotPlaceFile();
+ bool placeTextFile(const ImportSetup& setup, PageItem* target);
void slotGetContent();
void slotGetContent2(); // kk2006
void slotGetClipboardImage();
Index: scribus/scribusview.cpp
===================================================================
--- scribus/scribusview.cpp (revision 27816)
+++ scribus/scribusview.cpp (working copy)
@@ -72,6 +72,7 @@
#include "canvasgesture.h"
#include "canvasmode.h"
#include "canvasmode_imageimport.h"
+#include "canvasmode_textimport.h"
#include "canvasmode_objimport.h"
#include "commonstrings.h"
#include "fileloader.h"
@@ -3407,6 +3408,23 @@
}
ImageAfterDraw = false;
}
+ if (TextAfterDraw)
+ {
+ PageItem* frame = m_doc->m_Selection->itemAt(0);
+ requestMode(modeImportText);
+ if (frame)
+ {
+ auto* cm = qobject_cast<CanvasMode_TextImport*>(canvasMode());
+ if (!cm)
+ {
+ qFatal("ScribusView::eventFilter text import mode nullptr");
+ return true;
+ }
+ if (cm->importInto(frame))
+ requestMode(submodePaintingDone);
+ }
+ TextAfterDraw = false;
+ }
return true;
}
if (obj == widget() && event->type() == QEvent::MouseButtonPress)
@@ -3431,6 +3449,11 @@
{
//switch to drawing new text frame
requestMode(modeDrawImage);
+ m_canvasMode->mousePressEvent(m);
+ }
+ else if (m_doc->appMode == modeImportText && TextAfterDraw)
+ {
+ requestMode(modeDrawText);
m_canvasMode->mousePressEvent(m);
}
m_canvas->m_viewMode.m_MouseButtonPressed = true;
Index: scribus/scribusview.h
===================================================================
--- scribus/scribusview.h (revision 27816)
+++ scribus/scribusview.h (working copy)
@@ -102,6 +102,7 @@
friend class CanvasMode_EditSpiral;
friend class CanvasMode_FrameLinks;
friend class CanvasMode_ImageImport;
+ friend class CanvasMode_TextImport;
friend class CanvasMode_Magnifier;
friend class CanvasMode_NodeEdit;
friend class CanvasMode_Normal;
@@ -296,6 +297,7 @@
bool m_isGlobalMode { true };
bool linkAfterDraw { false };
bool ImageAfterDraw { false };
+ bool TextAfterDraw { false };
QStack<ViewState> m_viewStates;
private slots:
Index: scribus/ui/gtdialogs.cpp
===================================================================
--- scribus/ui/gtdialogs.cpp (revision 27816)
+++ scribus/ui/gtdialogs.cpp (working copy)
@@ -32,11 +32,16 @@
#include "prefsmanager.h"
#include "ui/gtfiledialog.h"
+#include <QCheckBox>
+#include <QComboBox>
+#include <QDialogButtonBox>
#include <QFileInfo>
+#include <QFormLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QPixmap>
#include <QPushButton>
+#include <QTextCodec>
#include <QToolTip>
#include <QVBoxLayout>
@@ -125,6 +130,8 @@
m_fileName = "";
m_encoding = "";
m_importer = -1;
+ m_textOnly = false;
+ m_prefixStyles = false;
m_prefs = PrefsManager::instance().prefsFile->getContext("gtDialogs");
}
@@ -142,9 +149,81 @@
accepted = true;
m_encoding = m_fdia->encodingCombo->currentText();
m_importer = m_fdia->importerCombo->currentIndex() - 1;
+ m_textOnly = m_fdia->textOnlyCheckBox->isChecked();
+ m_prefixStyles = m_fdia->prefixStylesCheckBox->isChecked();
dirs->set("get_text", m_fileName.left(m_fileName.lastIndexOf("/")));
}
return accepted;
+}
+
+
+bool gtDialogs::runImportOptionsDialog(const QString& fileName, const QStringList& importers)
+{
+ QDialog dialog;
+ dialog.setWindowTitle(QObject::tr("Text Import Options"));
+ dialog.setWindowIcon(IconManager::instance().loadIcon("app-icon"));
+
+ auto* layout = new QVBoxLayout(&dialog);
+ auto* fileLabel = new QLabel(QObject::tr("Import %1").arg(QFileInfo(fileName).fileName()), &dialog);
+ layout->addWidget(fileLabel);
+
+ auto* form = new QFormLayout;
+ auto* importerCombo = new QComboBox(&dialog);
+ importerCombo->addItem(QObject::tr("Automatic"));
+ importerCombo->addItems(importers);
+ form->addRow(QObject::tr("Importer:"), importerCombo);
+
+ auto* encodingCombo = new QComboBox(&dialog);
+ QStringList codecList;
+ const QList<QByteArray> codecNames = QTextCodec::availableCodecs();
+ for (const QByteArray& codecName : codecNames)
+ codecList.append(QString::fromLatin1(codecName));
+ codecList.sort(Qt::CaseInsensitive);
+ encodingCombo->addItems(codecList);
+ form->addRow(QObject::tr("Encoding:"), encodingCombo);
+ layout->addLayout(form);
+
+ auto* textOnlyCheck = new QCheckBox(QObject::tr("Import text only"), &dialog);
+ auto* prefixStylesCheck = new QCheckBox(QObject::tr("Prefix styles with item name"), &dialog);
+ layout->addWidget(textOnlyCheck);
+ layout->addWidget(prefixStylesCheck);
+
+ PrefsContext* context = PrefsManager::instance().prefsFile->getContext("textimport_dialog");
+ const QString importerName = context->get("importer", QObject::tr("Automatic"));
+ int importerIndex = importerCombo->findText(importerName);
+ if (importerIndex >= 0)
+ importerCombo->setCurrentIndex(importerIndex);
+
+ QString encoding = context->get("encoding", QString::fromLatin1(QTextCodec::codecForLocale()->name()));
+ int encodingIndex = encodingCombo->findText(encoding);
+ if (encodingIndex < 0)
+ {
+ encodingCombo->addItem(encoding);
+ encodingIndex = encodingCombo->count() - 1;
+ }
+ encodingCombo->setCurrentIndex(encodingIndex);
+ textOnlyCheck->setChecked(context->getBool("textonly", false));
+ prefixStylesCheck->setChecked(context->getBool("prefix", false));
+
+ auto* buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, &dialog);
+ layout->addWidget(buttons);
+ QObject::connect(buttons, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
+ QObject::connect(buttons, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
+
+ if (dialog.exec() != QDialog::Accepted)
+ return false;
+
+ m_fileName = fileName;
+ m_importer = importerCombo->currentIndex() - 1;
+ m_encoding = encodingCombo->currentText();
+ m_textOnly = textOnlyCheck->isChecked();
+ m_prefixStyles = prefixStylesCheck->isChecked();
+
+ context->set("importer", importerCombo->currentText());
+ context->set("encoding", m_encoding);
+ context->set("textonly", m_textOnly);
+ context->set("prefix", m_prefixStyles);
+ return true;
}
bool gtDialogs::runImporterDialog(const QString& fileName, const QStringList& importers)
@@ -222,18 +301,12 @@
bool gtDialogs::importTextOnly()
{
- bool ret = false;
- if (m_fdia)
- ret = m_fdia->textOnlyCheckBox->isChecked();
- return ret;
+ return m_textOnly;
}
bool gtDialogs::prefixStyles()
{
- bool ret = false;
- if (m_fdia)
- ret = m_fdia->prefixStylesCheckBox->isChecked();
- return ret;
+ return m_prefixStyles;
}
gtDialogs::~gtDialogs()
Index: scribus/ui/gtdialogs.h
===================================================================
--- scribus/ui/gtdialogs.h (revision 27816)
+++ scribus/ui/gtdialogs.h (working copy)
@@ -63,6 +63,7 @@
bool importTextOnly();
bool prefixStyles();
bool runFileDialog(const QString& filters, const QStringList& importers);
+ bool runImportOptionsDialog(const QString& file, const QStringList& importers);
bool runImporterDialog(const QString& file, const QStringList& importers);
private:
@@ -70,6 +71,8 @@
QString m_fileName;
QString m_encoding;
int m_importer;
+ bool m_textOnly { false };
+ bool m_prefixStyles { false };
PrefsContext* m_prefs;
};
fi4-import-action-resolver-v1.00.patch (4,547 bytes)
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp (revision 27816)
+++ scribus/scribus.cpp (working copy)
@@ -274,6 +274,24 @@
using namespace std;
using namespace ads;
+namespace
+{
+int resolveFileImportAction(QWidget* parent, const QString& title, const QString& message, const QStringList& actionLabels)
+{
+ QMessageBox dialog(QMessageBox::Question, title, message, QMessageBox::NoButton, parent);
+ QList<QPushButton*> actionButtons;
+ for (const QString& label : actionLabels)
+ actionButtons.append(dialog.addButton(label, QMessageBox::ActionRole));
+
+ QPushButton* cancelButton = dialog.addButton(QMessageBox::Cancel);
+ dialog.setDefaultButton(cancelButton);
+ dialog.setEscapeButton(cancelButton);
+ dialog.exec();
+
+ return actionButtons.indexOf(qobject_cast<QPushButton*>(dialog.clickedButton()));
+}
+}
+
bool previewDinUse;
bool printDinUse;
extern bool emergencyActivated;
@@ -3159,32 +3177,46 @@
if (!job.isResolved())
{
- int imageCandidate = -1;
- int vectorCandidate = -1;
+ int contextualCandidate = -1;
+ QStringList actionLabels;
+ QList<int> actionCandidates;
for (int i = 0; i < job.candidates().size(); ++i)
{
- if (job.candidates().at(i).kind == FileImportKind::Image)
- imageCandidate = i;
- else if (job.candidates().at(i).kind == FileImportKind::Vector)
- vectorCandidate = i;
+ const FileImportCandidate& candidate = job.candidates().at(i);
+ if (fileNames.size() == 1 && selectedImageFrame && candidate.kind == FileImportKind::Image)
+ contextualCandidate = i;
+ else if (fileNames.size() == 1 && selectedTextFrame && candidate.kind == FileImportKind::Text)
+ contextualCandidate = i;
+
+ switch (candidate.kind)
+ {
+ case FileImportKind::Image:
+ actionLabels.append(tr("Import as Image"));
+ break;
+ case FileImportKind::Text:
+ actionLabels.append(tr("Import as Text"));
+ break;
+ case FileImportKind::Vector:
+ actionLabels.append(tr("Import as Editable Objects"));
+ break;
+ default:
+ continue;
+ }
+ actionCandidates.append(i);
}
- if (selectedImageFrame && fileNames.size() == 1 && imageCandidate >= 0)
- job.selectCandidate(imageCandidate);
- else if (imageCandidate >= 0 && vectorCandidate >= 0)
+ if (contextualCandidate >= 0)
+ job.selectCandidate(contextualCandidate);
+ else if (actionCandidates.size() > 1)
{
- QMessageBox choice(QMessageBox::Question, tr("Place File"),
- tr("How do you want to place %1?").arg(QFileInfo(fileName).fileName()),
- QMessageBox::Cancel, this);
- QPushButton* imageButton = choice.addButton(tr("As Image"), QMessageBox::AcceptRole);
- QPushButton* vectorButton = choice.addButton(tr("As Editable Objects"), QMessageBox::AcceptRole);
- choice.exec();
- if (choice.clickedButton() == imageButton)
- job.selectCandidate(imageCandidate);
- else if (choice.clickedButton() == vectorButton)
- job.selectCandidate(vectorCandidate);
- else
+ QString formatName = QFileInfo(fileName).suffix().toUpper();
+ if (formatName.isEmpty())
+ formatName = QFileInfo(fileName).fileName();
+ const int action = resolveFileImportAction(this, tr("Place File"),
+ tr("How should this %1 be imported?").arg(formatName), actionLabels);
+ if (action < 0)
return;
+ job.selectCandidate(actionCandidates.at(action));
}
}
@@ -3268,18 +3300,19 @@
if (!target || !target->isTextFrame() || !setup.runDialog)
return false;
- if (target->itemText.length() != 0)
+ bool append = false;
+ if (target->itemText.isNotEmpty())
{
- const int result = ScMessageBox::warning(this, CommonStrings::trWarning, tr("Do you really want to clear all your text?"),
- QMessageBox::Yes | QMessageBox::No,
- QMessageBox::No,
- QMessageBox::Yes);
- if (result == QMessageBox::No)
+ const int action = resolveFileImportAction(this, tr("Place Text"),
+ tr("This text frame already contains text."),
+ { tr("Replace Text"), tr("Append Text") });
+ if (action < 0)
return false;
+ append = (action == 1);
}
gtGetText textImporter(doc);
- textImporter.launchImporter(setup.importer, setup.filename, setup.textOnly, setup.encoding, false, setup.prefixNames, target);
+ textImporter.launchImporter(setup.importer, setup.filename, setup.textOnly, setup.encoding, append, setup.prefixNames, target);
doc->docHyphenator->autoHyphenate(target);
for (int i = 0; i < doc->Items->count(); ++i)
{
fi5-user-facing-import-unification-v1.01.patch (4,974 bytes)
Index: scribus/actionmanager.cpp
===================================================================
--- scribus/actionmanager.cpp (revision 27816)
+++ scribus/actionmanager.cpp (working copy)
@@ -2012,8 +2012,7 @@
defKeys.insert("fileClose", QKeySequence::Close);
defKeys.insert("fileSave", QKeySequence::Save);
defKeys.insert("fileSaveAs", Qt::CTRL | Qt::SHIFT | Qt::Key_S);
- defKeys.insert("fileImportText", Qt::CTRL | Qt::Key_I);
- defKeys.insert("fileImportImage", Qt::CTRL | Qt::Key_I);
+ defKeys.insert("filePlace", Qt::CTRL | Qt::Key_I);
defKeys.insert("filePrint", QKeySequence::Print);
defKeys.insert("fileExportAsPDF", Qt::CTRL | Qt::SHIFT | Qt::Key_P);
defKeys.insert("fileQuit", Qt::CTRL | Qt::Key_Q);
@@ -2180,10 +2179,6 @@
<< "fileRevert"
<< "fileCollect"
<< "filePlace"
- << "fileImportText"
- << "fileImportAppendText"
- << "fileImportImage"
- << "fileImportVector"
<< "fileExportText"
<< "fileExportAsEPS"
<< "fileExportAsPDF"
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp (revision 27816)
+++ scribus/scribus.cpp (working copy)
@@ -962,10 +962,6 @@
scrMenuMgr->addMenuItemString("fileCollect", "File");
scrMenuMgr->addMenuItemString("SEPARATOR", "File");
scrMenuMgr->addMenuItemString("filePlace", "File");
- scrMenuMgr->createMenu("FileImport", tr("&Import"), "File");
- scrMenuMgr->addMenuItemString("FileImport", "File");
- scrMenuMgr->addMenuItemString("fileImportText", "FileImport");
- scrMenuMgr->addMenuItemString("fileImportAppendText", "FileImport");
scrMenuMgr->addMenuItemString("FileExport", "File");
scrMenuMgr->createMenu("FileExport", tr("&Export"), "File");
scrMenuMgr->addMenuItemString("fileExportText", "FileExport");
@@ -989,7 +985,6 @@
}
scrMenuMgr->addMenuItemString("fileQuit", "File");
- scrMenuMgr->setMenuEnabled("FileImport", false);
scrMenuMgr->setMenuEnabled("FileExport", false);
scrMenuMgr->setMenuEnabled("FileOutputPreview", false);
Index: scribus/pageitem_textframe.cpp
===================================================================
--- scribus/pageitem_textframe.cpp (revision 27816)
+++ scribus/pageitem_textframe.cpp (working copy)
@@ -5358,8 +5358,6 @@
if (isNoteFrame())
return;
actionList << "filePlace";
- actionList << "fileImportText";
- actionList << "fileImportAppendText";
actionList << "toolsEditWithStoryEditor";
actionList << "insertSampleText";
actionList << "itemPDFIsAnnotation";
Index: scribus/ui/contextmenu.cpp
===================================================================
--- scribus/ui/contextmenu.cpp (revision 27816)
+++ scribus/ui/contextmenu.cpp (working copy)
@@ -155,11 +155,11 @@
//<-- Add Contents Actions
//This part only for text frames
- if (m_actionList.contains("fileImportText"))
+ if (m_actionList.contains("insertSampleText"))
{
addSeparator();
- menuEditContent->addAction(m_ScMW->scrActions["fileImportText"]);
- menuEditContent->addAction(m_ScMW->scrActions["fileImportAppendText"]);
+ if (m_actionList.contains("filePlace"))
+ menuEditContent->addAction(m_ScMW->scrActions["filePlace"]);
menuEditContent->addAction(m_ScMW->scrActions["toolsEditWithStoryEditor"]);
menuEditContent->addAction(m_ScMW->scrActions["insertSampleText"]);
menuEditContent->addSeparator();
@@ -170,7 +170,7 @@
addSeparator();
menuEditContent->addAction(m_ScMW->scrActions["toolsEditWithStoryEditor"]);
}
- if (m_actionList.contains("filePlace"))
+ if (!m_actionList.contains("insertSampleText") && m_actionList.contains("filePlace"))
menuEditContent->addAction(m_ScMW->scrActions["filePlace"]);
if (selectedItemCount == 1 && currItem->isImageFrame())
{
Index: scribus/prefsmanager.cpp
===================================================================
--- scribus/prefsmanager.cpp (revision 27816)
+++ scribus/prefsmanager.cpp (working copy)
@@ -569,6 +569,25 @@
void PrefsManager::applyLoadedShortCuts()
{
+ const QKeySequence legacyImportShortcut(Qt::CTRL | Qt::Key_I);
+ bool migrateLegacyImportShortcut = false;
+ for (const QString& actionName : { QStringLiteral("fileImportText"), QStringLiteral("fileImportImage") })
+ {
+ auto it = appPrefs.keyShortcutPrefs.KeyActions.find(actionName);
+ if (it != appPrefs.keyShortcutPrefs.KeyActions.end() && it.value().keySequence == legacyImportShortcut)
+ {
+ it.value().keySequence = QKeySequence();
+ migrateLegacyImportShortcut = true;
+ }
+ }
+ if (migrateLegacyImportShortcut)
+ {
+ Keys& placeAction = appPrefs.keyShortcutPrefs.KeyActions[QStringLiteral("filePlace")];
+ placeAction.actionName = QStringLiteral("filePlace");
+ if (placeAction.keySequence.isEmpty())
+ placeAction.keySequence = legacyImportShortcut;
+ }
+
const auto &actions = ScCore->primaryMainWindow()->scrActions;
for (auto it = appPrefs.keyShortcutPrefs.KeyActions.cbegin(); it != appPrefs.keyShortcutPrefs.KeyActions.cend(); ++it)
fi7-legacy-import-cleanup-v1.01.patch (7,118 bytes)
Index: scribus/actionmanager.cpp
===================================================================
--- scribus/actionmanager.cpp (revision 27816)
+++ scribus/actionmanager.cpp (working copy)
@@ -131,7 +131,7 @@
scrActions->insert(name, new ScrAction("revert", QString(), "", defaultKey(name), mainWindow));
name = "fileCollect";
scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
- //File Import Menu
+ //File placement; legacy import actions remain for shortcut compatibility
name = "filePlace";
scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
name = "fileImportText";
@@ -192,7 +192,7 @@
connect( (*scrActions)["fileRevert"], SIGNAL(triggered()), mainWindow, SLOT(slotFileRevert()) );
connect( (*scrActions)["fileCollect"], SIGNAL(triggered()), mainWindow, SLOT(fileCollect()) );
connect( (*scrActions)["fileQuit"], SIGNAL(triggered()), mainWindow, SLOT(slotFileQuit()) );
- //File Import Menu
+ //File placement and legacy import compatibility actions
connect( (*scrActions)["filePlace"], SIGNAL(triggered()), mainWindow, SLOT(slotPlaceFile()) );
connect( (*scrActions)["fileImportText"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent()) );
connect( (*scrActions)["fileImportText2"], SIGNAL(triggered()), mainWindow, SLOT(slotGetContent2()) );
Index: scribus/pageitem_table.cpp
===================================================================
--- scribus/pageitem_table.cpp (revision 27816)
+++ scribus/pageitem_table.cpp (working copy)
@@ -2115,8 +2115,6 @@
actionList << "tableInsertColumns";
if (!tableEdit || selectedCells<1)
{
- actionList << "fileImportText";
- actionList << "fileImportAppendText";
actionList << "toolsEditWithStoryEditor";
actionList << "insertSampleText";
}
Index: resources/keysets/icalamus.xml
===================================================================
--- resources/keysets/icalamus.xml (revision 27816)
+++ resources/keysets/icalamus.xml (working copy)
@@ -58,11 +58,7 @@
<function shortcut="" name="fileExportAsEPS" />
<function shortcut="" name="fileExportAsPDF" />
<function shortcut="" name="fileExportText" />
- <function shortcut="" name="fileImportAppendText" />
- <function shortcut="" name="fileImportImage" />
- <function shortcut="" name="fileImportText" />
- <function shortcut="" name="fileImportText2" />
- <function shortcut="" name="fileImportVector" />
+ <function shortcut="" name="filePlace" />
<function shortcut="Ctrl+N" name="fileNew" />
<function shortcut="Ctrl+Alt+N" name="fileNewFromTemplate" />
<function shortcut="Ctrl+O" name="fileOpen" />
Index: resources/keysets/pageplusx3.xml
===================================================================
--- resources/keysets/pageplusx3.xml (revision 27816)
+++ resources/keysets/pageplusx3.xml (working copy)
@@ -58,11 +58,7 @@
<function shortcut="" name="fileExportAsEPS" />
<function shortcut="" name="fileExportAsPDF" />
<function shortcut="" name="fileExportText" />
- <function shortcut="" name="fileImportAppendText" />
- <function shortcut="Ctrl+G" name="fileImportImage" />
- <function shortcut="Ctrl+T" name="fileImportText" />
- <function shortcut="" name="fileImportText2" />
- <function shortcut="" name="fileImportVector" />
+ <function shortcut="Ctrl+G" name="filePlace" />
<function shortcut="Ctrl+N" name="fileNew" />
<function shortcut="Ctrl+Alt+O" name="fileNewFromTemplate" />
<function shortcut="Ctrl+O" name="fileOpen" />
Index: resources/keysets/pagestream.xml
===================================================================
--- resources/keysets/pagestream.xml (revision 27816)
+++ resources/keysets/pagestream.xml (working copy)
@@ -58,11 +58,7 @@
<function shortcut="" name="fileExportAsEPS" />
<function shortcut="" name="fileExportAsPDF" />
<function shortcut="" name="fileExportText" />
- <function shortcut="" name="fileImportAppendText" />
- <function shortcut="Alt+F" name="fileImportImage" />
- <function shortcut="Alt+F" name="fileImportText" />
- <function shortcut="" name="fileImportText2" />
- <function shortcut="" name="fileImportVector" />
+ <function shortcut="Alt+F" name="filePlace" />
<function shortcut="Ctrl+N" name="fileNew" />
<function shortcut="Ctrl+Alt+N" name="fileNewFromTemplate" />
<function shortcut="Ctrl+O" name="fileOpen" />
Index: resources/keysets/scribus13.xml
===================================================================
--- resources/keysets/scribus13.xml (revision 27816)
+++ resources/keysets/scribus13.xml (working copy)
@@ -58,11 +58,7 @@
<function shortcut="" name="fileExportAsEPS"/>
<function shortcut="" name="fileExportAsPDF"/>
<function shortcut="" name="fileExportText"/>
- <function shortcut="" name="fileImportAppendText"/>
- <function shortcut="Ctrl+I" name="fileImportImage"/>
- <function shortcut="Ctrl+I" name="fileImportText"/>
- <function shortcut="" name="fileImportText2"/>
- <function shortcut="" name="fileImportVector"/>
+ <function shortcut="Ctrl+I" name="filePlace"/>
<function shortcut="Ctrl+N" name="fileNew"/>
<function shortcut="Ctrl+Alt+N" name="fileNewFromTemplate"/>
<function shortcut="Ctrl+O" name="fileOpen"/>
Index: resources/keysets/scribus15.xml
===================================================================
--- resources/keysets/scribus15.xml (revision 27816)
+++ resources/keysets/scribus15.xml (working copy)
@@ -67,11 +67,7 @@
<function name="fileExportAsEPS" shortcut=""/>
<function name="fileExportAsPDF" shortcut="Ctrl+Shift+P"/>
<function name="fileExportText" shortcut=""/>
- <function name="fileImportAppendText" shortcut=""/>
- <function name="fileImportImage" shortcut="Ctrl+I"/>
- <function name="fileImportText" shortcut="Ctrl+I"/>
- <function name="fileImportText2" shortcut=""/>
- <function name="fileImportVector" shortcut=""/>
+ <function name="filePlace" shortcut="Ctrl+I"/>
<function name="fileNew" shortcut="Ctrl+N"/>
<function name="fileNewFromTemplate" shortcut="Ctrl+Alt+N"/>
<function name="fileOpen" shortcut="Ctrl+O"/>
Index: resources/keysets/scribus17.xml
===================================================================
--- resources/keysets/scribus17.xml (revision 27816)
+++ resources/keysets/scribus17.xml (working copy)
@@ -67,11 +67,7 @@
<function name="fileExportAsEPS" shortcut=""/>
<function name="fileExportAsPDF" shortcut="Ctrl+Shift+P"/>
<function name="fileExportText" shortcut=""/>
- <function name="fileImportAppendText" shortcut=""/>
- <function name="fileImportImage" shortcut="Ctrl+I"/>
- <function name="fileImportText" shortcut="Ctrl+I"/>
- <function name="fileImportText2" shortcut=""/>
- <function name="fileImportVector" shortcut=""/>
+ <function name="filePlace" shortcut="Ctrl+I"/>
<function name="fileNew" shortcut="Ctrl+N"/>
<function name="fileNewFromTemplate" shortcut="Ctrl+Alt+N"/>
<function name="fileOpen" shortcut="Ctrl+O"/>
fi8-image-placement-preview-v1.00.patch (6,776 bytes)
Index: scribus/canvasmode_imageimport.cpp
===================================================================
--- scribus/canvasmode_imageimport.cpp (revision 27816)
+++ scribus/canvasmode_imageimport.cpp (working copy)
@@ -16,16 +16,15 @@
#include <QApplication>
-#include <QBuffer>
#include <QCursor>
#include <QEvent>
+#include <QFileInfo>
+#include <QLabel>
#include <QMouseEvent>
#include <QPainterPath>
#include <QPixmap>
#include <QPoint>
#include <QRect>
-#include <QToolTip>
-#include <QDebug>
#include "canvas.h"
#include "canvasmode.h"
@@ -40,11 +39,19 @@
{
}
+CanvasMode_ImageImport::~CanvasMode_ImageImport()
+{
+ delete m_previewLabel.data();
+}
+
void CanvasMode_ImageImport::setImageList(QStringList l)
{
m_imageList = l;
if (m_imageList.isEmpty())
+ {
+ hidePreview();
return;
+ }
if (m_imageList.size() == 1)
{
@@ -66,33 +73,91 @@
}
}
- newToolTip(m_imageList.constFirst());
+ updatePreview(m_imageList.constFirst());
+ positionPreview(QCursor::pos());
+}
+
+void CanvasMode_ImageImport::ensurePreview()
+{
+ if (m_previewLabel)
+ return;
+
+ QWidget* viewport = m_view->viewport();
+ if (!viewport)
+ return;
+
+ m_previewLabel = new QLabel(viewport);
+ m_previewLabel->setFixedSize(80, 80);
+ m_previewLabel->setAttribute(Qt::WA_TransparentForMouseEvents);
+ m_previewLabel->setFocusPolicy(Qt::NoFocus);
+ m_previewLabel->hide();
+}
+
+void CanvasMode_ImageImport::hidePreview()
+{
+ if (m_previewLabel)
+ m_previewLabel->hide();
+}
+
+void CanvasMode_ImageImport::positionPreview(const QPoint& globalPos)
+{
+ if (!m_previewLabel || m_imageList.isEmpty())
+ return;
+
+ QWidget* viewport = m_view->viewport();
+ if (!viewport)
+ return;
+
+ const QPoint cursorPos = viewport->mapFromGlobal(globalPos);
+ if (!viewport->rect().contains(cursorPos))
+ {
+ hidePreview();
+ return;
+ }
+
+ constexpr int previewOffset = 16;
+ const QSize previewSize = m_previewLabel->size();
+ int x = cursorPos.x() + previewOffset;
+ int y = cursorPos.y() + previewOffset;
+
+ if (x + previewSize.width() > viewport->width())
+ x = cursorPos.x() - previewOffset - previewSize.width();
+ if (y + previewSize.height() > viewport->height())
+ y = cursorPos.y() - previewOffset - previewSize.height();
+
+ x = qBound(0, x, qMax(0, viewport->width() - previewSize.width()));
+ y = qBound(0, y, qMax(0, viewport->height() - previewSize.height()));
+
+ m_previewLabel->move(x, y);
+ m_previewLabel->raise();
+ m_previewLabel->show();
}
-void CanvasMode_ImageImport::newToolTip(const QString& name)
+void CanvasMode_ImageImport::updatePreview(const QString& name)
{
- QImage pm(80, 80, QImage::Format_ARGB32_Premultiplied);
- QBrush b(QColor(205,205,205), IconManager::instance().loadPixmap("testfill"));
-
- QPainter p;
- p.begin(&pm);
- p.fillRect(QRectF(0, 0, 80, 80), b);
+ ensurePreview();
+ if (!m_previewLabel)
+ return;
+
+ QImage preview(80, 80, QImage::Format_ARGB32_Premultiplied);
+ QBrush background(QColor(205, 205, 205), IconManager::instance().loadPixmap("testfill"));
+
+ QPainter painter(&preview);
+ painter.fillRect(preview.rect(), background);
+
QImage thumb;
if (thumb.load(name))
{
- thumb = thumb.scaled(80,80,Qt::KeepAspectRatio);
- p.drawImage((80 - thumb.width()) / 2, (80 - thumb.height()) / 2, thumb);
- QBuffer buffer;
- buffer.open(QIODevice::WriteOnly);
- pm.save(&buffer, "PNG");
- QByteArray ba = buffer.buffer().toBase64();
- buffer.close();
- m_tipText = "<p align=\"center\"><img src=\"data:image/png;base64," + QString(ba) + "\"></p>";
+ thumb = thumb.scaled(80, 80, Qt::KeepAspectRatio);
+ painter.drawImage((80 - thumb.width()) / 2, (80 - thumb.height()) / 2, thumb);
}
else
- m_tipText = "<p align=\"center\">" + name.right(name.lastIndexOf("/")) + "</p>";
- QToolTip::showText(QPoint(m_Mx,m_My), m_tipText, qApp->activeWindow());
- p.end();
+ {
+ const QRect textRect = preview.rect().adjusted(4, 4, -4, -4);
+ painter.drawText(textRect, Qt::AlignCenter | Qt::TextWordWrap, QFileInfo(name).fileName());
+ }
+
+ m_previewLabel->setPixmap(QPixmap::fromImage(preview));
}
void CanvasMode_ImageImport::drawControls(QPainter* p)
@@ -104,6 +169,7 @@
{
if (!m_canvas->m_viewMode.m_MouseButtonPressed)
setModeCursor();
+ positionPreview(QCursor::pos());
}
void CanvasMode_ImageImport::keyPressEvent(QKeyEvent *e)
@@ -135,6 +201,7 @@
void CanvasMode_ImageImport::leaveEvent(QEvent *e)
{
+ hidePreview();
}
void CanvasMode_ImageImport::activate(bool fromGesture)
@@ -150,12 +217,14 @@
m_canvas->m_viewMode.operItemResizing = false;
m_view->MidButt = false;
setModeCursor();
+ positionPreview(QCursor::pos());
if (fromGesture)
m_view->update();
}
void CanvasMode_ImageImport::deactivate(bool forGesture)
{
+ hidePreview();
m_view->setRedrawMarkerShown(false);
CanvasMode::deactivate(forGesture);
}
@@ -169,10 +238,7 @@
void CanvasMode_ImageImport::mouseMoveEvent(QMouseEvent *m)
{
- m_Mx = m->globalPosition().x();
- m_My = m->globalPosition().y();
- QToolTip::showText(m->globalPosition().toPoint(), m_tipText, qApp->activeWindow());
- QToolTip::showText(m->globalPosition().toPoint(), m_tipText + "<b></b>", qApp->activeWindow());
+ positionPreview(m->globalPosition().toPoint());
m->accept();
PageItem *item;
if ((item = m_canvas->itemUnderCursor(m->globalPosition())) != nullptr)
@@ -258,9 +324,12 @@
{
if (m_imageList.isEmpty())
{
+ hidePreview();
m_view->requestMode(submodePaintingDone);
- QToolTip::hideText();
}
else
- newToolTip(m_imageList.constFirst());
+ {
+ updatePreview(m_imageList.constFirst());
+ positionPreview(QCursor::pos());
+ }
}
Index: scribus/canvasmode_imageimport.h
===================================================================
--- scribus/canvasmode_imageimport.h (revision 27816)
+++ scribus/canvasmode_imageimport.h (working copy)
@@ -21,10 +21,12 @@
#include <QMouseEvent>
#include <QPainter>
#include <QPixmap>
+#include <QPointer>
#include <QStringList>
#include "canvasmode.h"
+class QLabel;
class PageItem;
class ScribusView;
class ScribusMainWindow;
@@ -35,7 +37,7 @@
public:
explicit CanvasMode_ImageImport(ScribusView* view);
- ~CanvasMode_ImageImport() override = default;
+ ~CanvasMode_ImageImport() override;
void enterEvent(QEvent *) override;
void leaveEvent(QEvent *) override;
@@ -55,12 +57,14 @@
private:
bool m_keyRepeat {false};
- QString m_tipText;
+ QPointer<QLabel> m_previewLabel;
QStringList m_imageList;
ScribusMainWindow *m_ScMW {nullptr};
- double m_Mx {0.0};
- double m_My {0.0};
- void newToolTip(const QString& name);
+
+ void ensurePreview();
+ void hidePreview();
+ void positionPreview(const QPoint& globalPos);
+ void updatePreview(const QString& name);
};
#endif // CANVASMODE_IMAGEIMPORT_H
|
|
|
Here are some screenshots. |
|
|
0010908 is related. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2013-06-24 13:29 | Chelen | New Issue | |
| 2013-06-24 13:29 | Chelen | Status | new => assigned |
| 2013-06-24 13:29 | Chelen | Assigned To | => Chelen |
| 2013-06-24 13:29 | Chelen | File Added: patch.diff | |
| 2013-06-27 14:19 | JLuc | Note Added: 0030382 | |
| 2013-06-28 07:22 | JLuc | Note Edited: 0030382 | |
| 2013-07-14 04:25 | cbradney | Note Added: 0030440 | |
| 2013-07-14 07:19 | christoph_s | Note Added: 0030441 | |
| 2013-10-08 11:41 | Chelen | Note Added: 0030685 | |
| 2013-10-08 11:41 | Chelen | File Added: unitloaderpatch.diff | |
| 2013-10-09 21:10 | jghali | Note Added: 0030699 | |
| 2014-01-30 07:15 | christoph_s | Relationship added | related to 0012015 |
| 2014-01-30 10:30 | JLuc | Note Added: 0031226 | |
| 2014-11-19 21:33 | JLuc | Note Added: 0034224 | |
| 2014-11-20 12:42 | Kunda | Patch | => Yes |
| 2014-11-20 12:42 | Kunda | Summary | Improve Import management => [PATCH] Improve Import management |
| 2016-01-23 16:30 | Kunda | Relationship added | related to 0010908 |
| 2016-01-23 16:44 | Kunda | Relationship added | related to 0010947 |
| 2018-04-30 13:00 | jghali | Target Version | 1.5.0svn => |
| 2018-04-30 14:37 | JLuc | Tag Attached: #rottenpatch | |
| 2026-09-07 03:29 | buttar | Note Added: 0054430 | |
| 2026-09-07 03:29 | buttar | File Added: fi1-import-routing-foundation-v1.00.patch | |
| 2026-09-07 03:29 | buttar | File Added: fi2-unified-image-vector-import-v1.01.patch | |
| 2026-09-07 03:29 | buttar | File Added: fi3-text-import-integration-v1.01.patch | |
| 2026-09-07 03:29 | buttar | File Added: fi4-import-action-resolver-v1.00.patch | |
| 2026-09-07 03:29 | buttar | File Added: fi5-user-facing-import-unification-v1.01.patch | |
| 2026-09-07 03:29 | buttar | File Added: fi7-legacy-import-cleanup-v1.01.patch | |
| 2026-09-07 03:29 | buttar | File Added: fi8-image-placement-preview-v1.00.patch | |
| 2026-09-07 03:31 | buttar | Tag Attached: #please_test | |
| 2026-09-07 06:00 | buttar | Note Added: 0054432 | |
| 2026-09-07 06:00 | buttar | File Added: import-unified-file-menu.png | |
| 2026-09-07 06:00 | buttar | File Added: import-unified-image-frame.png | |
| 2026-09-07 06:00 | buttar | File Added: import-unified-tex-frame.png | |
| 2026-10-10 01:26 | buttar | Note Added: 0054514 |