[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