[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/karbon
From: Jan Hambrecht <jaham () gmx ! net>
Date: 2009-06-18 22:53:20
Message-ID: 1245365600.476654.2922.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 983733 by jaham:
fix importing graphics into existing document
BUG:180599
M +11 -2 common/KarbonDocument.cpp
M +3 -1 common/KarbonDocument.h
M +2 -1 ui/CMakeLists.txt
A ui/KarbonDocumentMergeCommand.cpp [License: LGPL (v2+)]
A ui/KarbonDocumentMergeCommand.h [License: LGPL (v2+)]
M +51 -14 ui/KarbonView.cpp
--- trunk/koffice/karbon/common/KarbonDocument.cpp #983732:983733
@@ -55,13 +55,13 @@
#include <qdom.h>
#include <QRectF>
-
class KarbonDocument::Private
{
public:
Private()
: pageSize(0.0, 0.0)
, unit( KoUnit::Millimeter )
+ , hasExternalDataCenterMap(false)
{
// Ask every shapefactory to populate the dataCenterMap
foreach( const QString & id, KoShapeRegistry::instance()->keys())
@@ -77,7 +77,8 @@
layers.clear();
qDeleteAll( objects );
objects.clear();
- qDeleteAll( dataCenterMap );
+ if (!hasExternalDataCenterMap)
+ qDeleteAll( dataCenterMap );
}
QSizeF pageSize; ///< the documents page size
@@ -87,6 +88,7 @@
KoUnit unit; ///< The unit.
QMap<QString, KoDataCenter*> dataCenterMap;
+ bool hasExternalDataCenterMap;
};
KarbonDocument::KarbonDocument()
@@ -286,6 +288,13 @@
return d->dataCenterMap;
}
+void KarbonDocument::useExternalDataCenterMap( QMap<QString, KoDataCenter*> \
dataCenters ) +{
+ qDeleteAll( d->dataCenterMap );
+ d->dataCenterMap = dataCenters;
+ d->hasExternalDataCenterMap = true;
+}
+
//#############################################################################
// ODF saving
//#############################################################################
--- trunk/koffice/karbon/common/KarbonDocument.h #983732:983733
@@ -204,8 +204,10 @@
KoImageCollection * imageCollection();
/// Returns the documents data centers
- virtual QMap<QString, KoDataCenter*> dataCenterMap() const;
+ QMap<QString, KoDataCenter*> dataCenterMap() const;
+ /// Sets the data centers to be used by this document
+ void useExternalDataCenterMap( QMap<QString, KoDataCenter*> dataCenters );
private:
class Private;
--- trunk/koffice/karbon/ui/CMakeLists.txt #983732:983733
@@ -15,7 +15,8 @@
KarbonView.cpp
KarbonPrintJob.cpp
KarbonZoomController.cpp
-
+ KarbonDocumentMergeCommand.cpp
+
dialogs/KarbonConfigureDialog.cpp
dockers/KarbonLayerDocker.cpp
--- trunk/koffice/karbon/ui/KarbonView.cpp #983732:983733
@@ -59,6 +59,7 @@
#include "KarbonPrintJob.h"
#include "KarbonZoomController.h"
#include "KarbonSmallStylePreview.h"
+#include "KarbonDocumentMergeCommand.h"
//#include "karbon_drag.h"
#include <KoMainWindow.h>
@@ -404,31 +405,67 @@
debugView("KarbonView::fileImportGraphic()");
QStringList filter;
- filter << "application/x-karbon" << "image/svg+xml" << "image/x-wmf" << \
"image/x-eps" << "application/postscript";
- QPointer<KFileDialog> dialog = new KFileDialog(KUrl("foo"), "", 0);
+ filter << part()->nativeFormatMimeType();
+ filter << "application/x-karbon";
+ filter << "image/svg+xml";
+ filter << "application/x-wpg";
+ filter << "image/x-wmf";
+ filter << "image/x-eps";
+ filter << "application/postscript";
+
+ QPointer<KFileDialog> dialog = new KFileDialog(KUrl(), "", 0);
dialog->setCaption(i18n("Choose Graphic to Add"));
dialog->setModal(true);
- dialog->setMimeFilter( filter, "application/x-karbon" );
+ dialog->setMimeFilter( filter );
if(dialog->exec()!=QDialog::Accepted) {
delete dialog;
return;
}
QString fname = dialog->selectedFile();
- //kDebug(38000) <<"in :" << fname.latin1();
- //kDebug(38000) <<"part()->document()->nativeFormatMimeType().latin1() :" << \
part()->nativeFormatMimeType();
- //kDebug(38000) <<"dialog->currentMimeFilter().latin1() :" << \
dialog->currentMimeFilter().latin1();
- if( part()->nativeFormatMimeType() == dialog->currentMimeFilter().toLatin1() )
- part()->mergeNativeFormat( fname );
- else
- {
- KoFilterManager man( part() );
- KoFilter::ConversionStatus status;
+
+ KarbonPart importPart;
+ // use data centers of this document for importing
+ importPart.document().useExternalDataCenterMap( \
part()->document().dataCenterMap() ); +
+ bool success = true;
+
+ if (importPart.nativeFormatMimeType() == dialog->currentMimeFilter()) {
+ // directly load the native format
+ success = importPart.loadNativeFormat( fname );
+ if ( !success ) {
+ importPart.showLoadingErrorDialog();
+ }
+ } else {
+ // use import filters to load the file
+ KoFilterManager man( &importPart );
+ KoFilter::ConversionStatus status = KoFilter::OK;
QString importedFile = man.importDocument( fname, status );
- part()->mergeNativeFormat( importedFile );
- if( !importedFile.isEmpty() )
+ if (status != KoFilter::OK) {
+ importPart.showLoadingErrorDialog();
+ success = false;
+ }
+ else if( !importedFile.isEmpty() ) {
+ success = importPart.loadNativeFormat( importedFile );
+ if (!success) {
+ importPart.showLoadingErrorDialog();
+ }
+ // remove the temporary file created during format conversion
unlink( QFile::encodeName( importedFile ) );
+ }
}
+
delete dialog;
+
+ if (success) {
+ QList<KoShape*> importedShapes = importPart.document().shapes();
+
+ KarbonDocumentMergeCommand * cmd = new KarbonDocumentMergeCommand(part(), \
&importPart); + d->canvas->addCommand( cmd );
+
+ foreach( KoShape * shape, importedShapes ) {
+ d->canvas->shapeManager()->selection()->select( shape, false );
+ }
+ }
}
void KarbonView::selectionDuplicate()
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic