Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3355

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/55/3355/1

Save a Copy refactoring

The way it works now is: SID_SAVEACOPY takes its parameters, and
sends a SID_EXPORTDOC request with it. SID_SAVEACOPYITEM is used
to differentiate Save a Copy from regular Export.

Saving to docx is still buggy :(
(You have to close the original file before you can open it, and
then it complains of:
warn:legacy.osl:18912:1:oox/source/helper/storagebase.cxx:71:
StorageBase::StorageBase - missing base input stream)

Change-Id: I876dbe17e43b26a43f29e797fdb157e31889ee1e
---
M reportdesign/source/ui/report/ReportController.cxx
M sfx2/inc/sfx2/sfxsids.hrc
M sfx2/sdi/sfx.sdi
M sfx2/source/appl/appuno.cxx
M sfx2/source/doc/guisaveas.cxx
M sfx2/source/doc/objserv.cxx
M sw/source/ui/uiview/srcview.cxx
M sw/source/ui/uiview/view.hrc
8 files changed, 52 insertions(+), 27 deletions(-)



diff --git a/reportdesign/source/ui/report/ReportController.cxx 
b/reportdesign/source/ui/report/ReportController.cxx
index 4498bed..15b0848 100644
--- a/reportdesign/source/ui/report/ReportController.cxx
+++ b/reportdesign/source/ui/report/ReportController.cxx
@@ -793,6 +793,9 @@
         case SID_SAVEASDOC:
             aReturn.bEnabled = isConnected() && isEditable();
             break;
+        case SID_SAVEACOPY:
+            aReturn.bEnabled = isConnected() && isEditable();
+            break;
         case SID_EDITDOC:
             aReturn.bChecked = isEditable();
             break;
@@ -1913,6 +1916,7 @@
     implDescribeSupportedFeature( ".uno:NewDoc",                    SID_NEWDOC,                    
 CommandGroup::DOCUMENT );
     implDescribeSupportedFeature( ".uno:Save",                      SID_SAVEDOC,                   
 CommandGroup::DOCUMENT );
     implDescribeSupportedFeature( ".uno:SaveAs",                    SID_SAVEASDOC,                 
 CommandGroup::DOCUMENT );
+    implDescribeSupportedFeature( ".uno:SaveACopy",                 SID_SAVEACOPY,                 
 CommandGroup::DOCUMENT );
 
     implDescribeSupportedFeature( ".uno:InsertPageNumberField",     SID_INSERT_FLD_PGNUMBER,       
 CommandGroup::INSERT );
     implDescribeSupportedFeature( ".uno:InsertDateTimeField",       SID_DATETIME,                  
 CommandGroup::INSERT );
diff --git a/sfx2/inc/sfx2/sfxsids.hrc b/sfx2/inc/sfx2/sfxsids.hrc
index 7130f06..121e080 100644
--- a/sfx2/inc/sfx2/sfxsids.hrc
+++ b/sfx2/inc/sfx2/sfxsids.hrc
@@ -118,6 +118,7 @@
 #define SID_OPENTEMPLATE                    (SID_SFX_START + 594)
 #define SID_SAVEASDOC                       (SID_SFX_START + 502)
 #define SID_SAVEACOPY                       (SID_SFX_START + 999)
+#define SID_SAVEACOPYITEM                   (SID_SFX_START + 998)
 #define SID_CLOSING                         (SID_SFX_START +1539)
 #define SID_CLOSEDOC                        (SID_SFX_START + 503)
 #define SID_CLOSEDOCS                       (SID_SFX_START + 595)
diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi
index 0fe9cdc..cdc922d 100644
--- a/sfx2/sdi/sfx.sdi
+++ b/sfx2/sdi/sfx.sdi
@@ -5583,8 +5583,9 @@
 ]
 
 //--------------------------------------------------------------------------
+
 SfxBoolItem SaveACopy SID_SAVEACOPY
-(SfxStringItem URL SID_FILE_NAME,SfxStringItem FilterName SID_FILTER_NAME,SfxStringItem Password 
SID_PASSWORD,SfxBoolItem PasswordInteraction SID_PASSWORDINTERACTION,SfxStringItem FilterOptions 
SID_FILE_FILTEROPTIONS,SfxStringItem VersionComment SID_DOCINFO_COMMENTS,SfxStringItem 
VersionAuthor SID_DOCINFO_AUTHOR,SfxBoolItem Overwrite SID_OVERWRITE,SfxBoolItem Unpacked 
SID_UNPACK,SfxBoolItem SaveTo SID_SAVETO)
+(SfxStringItem URL SID_FILE_NAME,SfxStringItem FilterName SID_FILTER_NAME,SfxBoolItem Overwrite 
SID_OVERWRITE, SfxStringItem FilterOptions SID_FILE_FILTEROPTIONS,SfxBoolItem SaveACopy 
SID_SAVEACOPYITEM)
 [
     /* flags: */
     AutoUpdate = FALSE,
@@ -5599,9 +5600,6 @@
     RecordPerSet;
     Synchron;
 
-    /* status: */
-    SlotType = SfxStringItem
-
     /* config: */
     AccelConfig = TRUE,
     MenuConfig = TRUE,
@@ -5609,7 +5607,6 @@
     ToolBoxConfig = TRUE,
     GroupId = GID_DOCUMENT;
 ]
-
 //--------------------------------------------------------------------------
 SfxVoidItem SaveBasicAs SID_BASICSAVEAS
 ()
@@ -7279,7 +7276,7 @@
 
 //--------------------------------------------------------------------------
 SfxBoolItem ExportTo SID_EXPORTDOC
-(SfxStringItem URL SID_FILE_NAME,SfxStringItem FilterName SID_FILTER_NAME,SfxBoolItem Overwrite 
SID_OVERWRITE, SfxStringItem FilterOptions SID_FILE_FILTEROPTIONS)
+(SfxStringItem URL SID_FILE_NAME,SfxStringItem FilterName SID_FILTER_NAME,SfxBoolItem Overwrite 
SID_OVERWRITE, SfxStringItem FilterOptions SID_FILE_FILTEROPTIONS,SfxBoolItem SaveACopy 
SID_SAVEACOPYITEM)
 [
     /* flags: */
     AutoUpdate = FALSE,
diff --git a/sfx2/source/appl/appuno.cxx b/sfx2/source/appl/appuno.cxx
index b707761..eefbd35 100644
--- a/sfx2/source/appl/appuno.cxx
+++ b/sfx2/source/appl/appuno.cxx
@@ -145,6 +145,7 @@
 //    SFX_ARGUMENT(SID_TEMPLATE_NAME,"Name",SfxStringItem),
     SFX_ARGUMENT(SID_UNPACK,"Unpacked",SfxBoolItem),
     SFX_ARGUMENT(SID_VERSION,"Version",SfxInt16Item),
+    SFX_ARGUMENT(SID_SAVEACOPYITEM,"SaveACopy",SfxBoolItem),
 };
 
 static sal_uInt16 nMediaArgsCount = sizeof(aFormalArgs) / sizeof (SfxFormalArgument);
@@ -210,7 +211,8 @@
     return ( nSlotId == SID_OPENDOC || nSlotId == SID_EXPORTDOC ||
              nSlotId == SID_SAVEASDOC || nSlotId == SID_SAVEDOC ||
              nSlotId == SID_SAVETO || nSlotId == SID_EXPORTDOCASPDF ||
-             nSlotId == SID_DIRECTEXPORTDOCASPDF );
+             nSlotId == SID_DIRECTEXPORTDOCASPDF || nSlotId == SID_SAVEACOPY ||
+             nSlotId == SID_SAVEACOPYITEM);
 }
 
 void TransformParameters( sal_uInt16 nSlotId, const uno::Sequence<beans::PropertyValue>& rArgs, 
SfxAllItemSet& rSet, const SfxSlot* pSlot )
@@ -1293,6 +1295,8 @@
                     // used only internally
                     if ( nId == SID_SAVETO )
                         continue;
+                    if ( nId == SID_SAVEACOPYITEM )
+                        continue;
                      if ( nId == SID_MODIFYPASSWORDINFO )
                         continue;
                      if ( nId == SID_SUGGESTEDSAVEASDIR )
@@ -1424,7 +1428,8 @@
     }
 
     if ( nSlotId == SID_OPENDOC || nSlotId == SID_EXPORTDOC || nSlotId == SID_SAVEASDOC ||  
nSlotId == SID_SAVEDOC ||
-         nSlotId == SID_SAVETO || nSlotId == SID_EXPORTDOCASPDF || nSlotId == 
SID_DIRECTEXPORTDOCASPDF )
+         nSlotId == SID_SAVETO || nSlotId == SID_EXPORTDOCASPDF || nSlotId == 
SID_DIRECTEXPORTDOCASPDF ||
+         nSlotId == SID_SAVEACOPY )
     {
         const SfxPoolItem *pItem=0;
         if ( rSet.GetItemState( SID_COMPONENTDATA, sal_False, &pItem ) == SFX_ITEM_SET )
diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx
index d795ea8..7394936 100644
--- a/sfx2/source/doc/guisaveas.cxx
+++ b/sfx2/source/doc/guisaveas.cxx
@@ -121,7 +121,7 @@
     // dialogs do not need parameters in SidSet representation any more
 
     sal_uInt16 nResult = 0;
-    if ( nStoreMode == EXPORT_REQUESTED )
+    if ( nStoreMode == EXPORT_REQUESTED || nStoreMode == ( EXPORT_REQUESTED | SAVEACOPY_REQUESTED 
) )
         nResult = SID_EXPORTDOC;
     else if ( nStoreMode == ( EXPORT_REQUESTED | PDFEXPORT_REQUESTED ) )
         nResult = SID_EXPORTDOCASPDF;
@@ -129,8 +129,6 @@
         nResult = SID_DIRECTEXPORTDOCASPDF;
     else if ( nStoreMode == SAVEAS_REQUESTED || nStoreMode == ( EXPORT_REQUESTED | 
WIDEEXPORT_REQUESTED ) )
         nResult = SID_SAVEASDOC;
-    else if ( nStoreMode == SAVEACOPY_REQUESTED || nStoreMode == ( EXPORT_REQUESTED | 
WIDEEXPORT_REQUESTED ) )
-        nResult = SID_SAVEACOPY;
     else {
         DBG_ASSERT( sal_False, "Unacceptable slot name is provided!\n" );
     }
@@ -152,8 +150,6 @@
         nResult = SAVE_REQUESTED;
     else if ( aSlotName == "SaveAs" )
         nResult = SAVEAS_REQUESTED;
-    else if ( aSlotName == "SaveACopy" )
-        nResult = SAVEACOPY_REQUESTED;
     else
         throw task::ErrorCodeIOException( OUString(),
                                             uno::Reference< uno::XInterface >(),
@@ -166,7 +162,7 @@
 static sal_Int32 getMustFlags( sal_Int8 nStoreMode )
 {
     return ( SFX_FILTER_EXPORT
-            | ( ( ( nStoreMode & EXPORT_REQUESTED ) && !( nStoreMode & WIDEEXPORT_REQUESTED ) ) ? 
0 : SFX_FILTER_IMPORT ) );
+            | ( ( ( nStoreMode & EXPORT_REQUESTED ) && !( nStoreMode & WIDEEXPORT_REQUESTED ) && 
!(nStoreMode & SAVEACOPY_REQUESTED)  ) ? 0 : SFX_FILTER_IMPORT ) );
 }
 
 //-------------------------------------------------------------------------
@@ -174,7 +170,7 @@
 {
     return ( SFX_FILTER_INTERNAL
             | SFX_FILTER_NOTINFILEDLG
-            | ( ( ( nStoreMode & EXPORT_REQUESTED ) && !( nStoreMode & WIDEEXPORT_REQUESTED ) ) ? 
SFX_FILTER_IMPORT : 0 ) );
+            | ( ( ( nStoreMode & EXPORT_REQUESTED ) && !( nStoreMode & WIDEEXPORT_REQUESTED ) && 
!(nStoreMode & SAVEACOPY_REQUESTED) ) ? SFX_FILTER_IMPORT : 0 ) );
 }
 
 //=========================================================================
@@ -927,7 +923,7 @@
         aDialogFlags = SFXWB_EXPORT;
     }
 
-    if ( nStoreMode & SAVEACOPY_REQUESTED)
+    if( ( nStoreMode & EXPORT_REQUESTED ) && ( nStoreMode & SAVEACOPY_REQUESTED ) )
     {
         aDialogFlags = SFXWB_SAVEACOPY;
     }
@@ -1377,6 +1373,15 @@
     sal_Int8 nStoreMode = getStoreModeFromSlotName( aSlotName );
     sal_Int8 nStatusSave = STATUS_NO_ACTION;
 
+    ::comphelper::SequenceAsHashMap::const_iterator aSaveACopyIter =
+                        aModelData.GetMediaDescr().find( ::rtl::OUString("SaveACopy") );
+    if ( aSaveACopyIter != aModelData.GetMediaDescr().end() )
+    {
+        sal_Bool bSaveACopy = sal_False;
+        aSaveACopyIter->second >>= bSaveACopy;
+        if ( bSaveACopy )
+            nStoreMode = EXPORT_REQUESTED | SAVEACOPY_REQUESTED;
+    }
     // handle the special cases
     if ( nStoreMode & SAVEAS_REQUESTED )
     {
@@ -1672,21 +1677,21 @@
         try {
             // Document properties can contain streams that should be freed before storing
             aModelData.FreeDocumentProps();
-            if ( ( (nStoreMode & EXPORT_REQUESTED) || (nStoreMode & SAVEACOPY_REQUESTED) ) )
+            if ( nStoreMode & EXPORT_REQUESTED )
                 aModelData.GetStorable()->storeToURL( aURL.GetMainURL( INetURLObject::NO_DECODE ), 
aArgsSequence );
             else
                 aModelData.GetStorable()->storeAsURL( aURL.GetMainURL( INetURLObject::NO_DECODE ), 
aArgsSequence );
         }
         catch( const uno::Exception& )
         {
-            if ( ( nStoreMode & EXPORT_REQUESTED ) )
+            if ( nStoreMode & EXPORT_REQUESTED )
             {
                 SetDocInfoState(aModelData.GetModel(), xOldDocProps, sal_True);
             }
             throw;
         }
 
-        if ( ( nStoreMode & EXPORT_REQUESTED ) )
+        if ( nStoreMode & EXPORT_REQUESTED )
         {
             SetDocInfoState(aModelData.GetModel(), xOldDocProps, sal_True);
         }
@@ -1698,7 +1703,7 @@
 
         // this is actually a save operation with different parameters
         // so storeTo or storeAs without DocInfo operations are used
-        if ( ( nStoreMode & EXPORT_REQUESTED ) || ( nStoreMode & SAVEACOPY_REQUESTED ) )
+        if ( nStoreMode & EXPORT_REQUESTED )
             aModelData.GetStorable()->storeToURL( aURL.GetMainURL( INetURLObject::NO_DECODE ), 
aArgsSequence );
         else
             aModelData.GetStorable()->storeAsURL( aURL.GetMainURL( INetURLObject::NO_DECODE ), 
aArgsSequence );
diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx
index ef09a7e..907ee1a 100644
--- a/sfx2/source/doc/objserv.cxx
+++ b/sfx2/source/doc/objserv.cxx
@@ -542,7 +542,6 @@
         case SID_EXPORTDOC:
         case SID_SAVEASDOC:
         case SID_SAVEDOC:
-        case SID_SAVEACOPY:
         {
             // derived class may decide to abort this
             if( !QuerySlotExecutable( nId ) )
@@ -575,11 +574,6 @@
                     SFX_ITEMSET_ARG( GetMedium()->GetItemSet(), pViewOnlyItem, SfxBoolItem, 
SID_VIEWONLY, sal_False );
                     if ( pViewOnlyItem && pViewOnlyItem->GetValue() )
                         rReq.AppendItem( SfxBoolItem( SID_SAVETO, sal_True ) );
-                }
-
-                if ( nId == SID_SAVEACOPY )
-                {
-                    rReq.AppendItem( SfxBoolItem( SID_SAVETO, sal_True ) );
                 }
 
                 // TODO/LATER: do the following GUI related actions in standalown method
@@ -755,7 +749,7 @@
                 nErrorCode = ( lErr != ERRCODE_IO_ABORT ) && ( nErrorCode == ERRCODE_NONE ) ? 
nErrorCode : lErr;
             }
 
-            if ( (nId == SID_SAVEASDOC || nId == SID_SAVEACOPY) && nErrorCode == ERRCODE_NONE )
+            if ( nId == SID_SAVEASDOC  && nErrorCode == ERRCODE_NONE )
             {
                 SetReadOnlyUI(false);
             }
@@ -768,6 +762,20 @@
             break;
         }
 
+        case SID_SAVEACOPY:
+        {
+            SfxAllItemSet aArgs( GetPool() );
+            aArgs.Put( SfxBoolItem( SID_SAVEACOPYITEM, sal_True ) );
+            SfxRequest aSaveACopyReq( SID_EXPORTDOC, SFX_CALLMODE_API, aArgs );
+            ExecFile_Impl( aSaveACopyReq );
+            if ( !aSaveACopyReq.IsDone() )
+            {
+                rReq.Ignore();
+                return;
+            }
+            break;
+        }
+
         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
         case SID_CLOSEDOC:
diff --git a/sw/source/ui/uiview/srcview.cxx b/sw/source/ui/uiview/srcview.cxx
index 1405cd4..432afb8 100644
--- a/sw/source/ui/uiview/srcview.cxx
+++ b/sw/source/ui/uiview/srcview.cxx
@@ -430,6 +430,9 @@
             case SID_SAVEASDOC:
                 rSet.Put(SfxStringItem(nWhich, String(SW_RES(STR_SAVEAS_SRC))));
             break;
+            case SID_SAVEACOPY:
+                rSet.Put(SfxStringItem(nWhich, String(SW_RES(STR_SAVEACOPY_SRC))));
+            break;
             case SID_SAVEDOC:
             {
                 SwDocShell* pDocShell = GetDocShell();
diff --git a/sw/source/ui/uiview/view.hrc b/sw/source/ui/uiview/view.hrc
index 256e394..92b3eaf 100644
--- a/sw/source/ui/uiview/view.hrc
+++ b/sw/source/ui/uiview/view.hrc
@@ -56,6 +56,8 @@
 #define RID_PVIEW_TOOLBOX           (RC_VIEW_BEGIN + 31)
 #define STR_WEBOPTIONS              (RC_VIEW_BEGIN + 32)
 #define STR_TEXTOPTIONS             (RC_VIEW_BEGIN + 33)
+
+#define STR_SAVEACOPY_SRC           (RC_VIEW_BEGIN + 34)
 // MSG -------------------------------------------------------------------
 
 #define MSG_ERR_INSERT_GLOS (RC_VIEW_BEGIN)

-- 
To view, visit https://gerrit.libreoffice.org/3355
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I876dbe17e43b26a43f29e797fdb157e31889ee1e
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Ádám Király <kiraly.adam.csaba@gmail.com>


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.