[PATCH] fdo#60780, Save a Copy wip

Ádám Király (via_Code_Review) gerrit at gerrit.libreoffice.org
Mon Mar 18 14:46:56 PDT 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/2829

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/29/2829/1

fdo#60780, Save a Copy wip

The saving seems to work fine, but immediately opening the copy
doesn't work, you have to close the program.

TODO:
- Set correct title on dialog
- Write help

Change-Id: I4d7fc9ebc91c2129e8d8dcf9978c324bdddae129
---
M officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
M sfx2/inc/filedlghelper.hrc
M sfx2/inc/sfx2/sfx.hrc
M sfx2/inc/sfx2/sfxsids.hrc
M sfx2/sdi/docslots.sdi
M sfx2/sdi/sfx.sdi
M sfx2/source/dialog/filedlghelper.cxx
M sfx2/source/dialog/filedlghelper.src
M sfx2/source/dialog/filedlgimpl.hxx
M sfx2/source/doc/doc.hrc
M sfx2/source/doc/doc.src
M sfx2/source/doc/guisaveas.cxx
M sfx2/source/doc/objserv.cxx
M sw/source/ui/uiview/srcview.cxx
M sw/uiconfig/swriter/menubar/menubar.xml
15 files changed, 94 insertions(+), 1 deletion(-)



diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
index 74b99f1..8558ee5 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
@@ -1895,6 +1895,14 @@
                     <value>1</value>
                 </prop>
             </node>
+            <node oor:name=".uno:SaveACopy" oor:op="replace">
+                <prop oor:name="Label" oor:type="xs:string">
+                    <value xml:lang="en-US">Save a Copy...</value>
+                </prop>
+                <prop oor:name="Properties" oor:type="xs:int">
+                    <value>1</value>
+                </prop>
+            </node>
             <node oor:name=".uno:CheckOut" oor:op="replace">
                 <prop oor:name="Label" oor:type="xs:string">
                     <value xml:lang="en-US">Check-Out</value>
diff --git a/sfx2/inc/filedlghelper.hrc b/sfx2/inc/filedlghelper.hrc
index 728de09..dd0b112 100644
--- a/sfx2/inc/filedlghelper.hrc
+++ b/sfx2/inc/filedlghelper.hrc
@@ -36,6 +36,8 @@
 #define STR_LB_IMAGE_TEMPLATE       (RID_SFX_EXPLORER_START + 62)
 #define STR_LB_TEMPLATES            (RID_SFX_EXPLORER_START + 63)
 #define STR_LB_VERSION              (RID_SFX_EXPLORER_START + 64)
+#define STR_PB_SAVEACOPY            (RID_SFX_EXPLORER_START + 65)
+
 
 #endif
 
diff --git a/sfx2/inc/sfx2/sfx.hrc b/sfx2/inc/sfx2/sfx.hrc
index 06b0fe9..245daa2 100644
--- a/sfx2/inc/sfx2/sfx.hrc
+++ b/sfx2/inc/sfx2/sfx.hrc
@@ -52,6 +52,7 @@
 #define SFX_EVENT_ACTIVATEDOC       (EVENT_SFX_START + 7)
 #define SFX_EVENT_DEACTIVATEDOC     (EVENT_SFX_START + 8)
 #define SFX_EVENT_PRINTDOC          (EVENT_SFX_START + 9)
+#define SFX_EVENT_SAVEACOPY         (EVENT_SFX_START + 10)
 
 #define SFX_EVENT_LOADFINISHED      (EVENT_SFX_START + 11)
 
diff --git a/sfx2/inc/sfx2/sfxsids.hrc b/sfx2/inc/sfx2/sfxsids.hrc
index 1b0d89b..51bfd36 100644
--- a/sfx2/inc/sfx2/sfxsids.hrc
+++ b/sfx2/inc/sfx2/sfxsids.hrc
@@ -117,6 +117,7 @@
 #define SID_JUMPTOMARK                      (SID_SFX_START + 598)
 #define SID_OPENTEMPLATE                    (SID_SFX_START + 594)
 #define SID_SAVEASDOC                       (SID_SFX_START + 502)
+#define SID_SAVEACOPY                       (SID_SFX_START + 999)
 #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/docslots.sdi b/sfx2/sdi/docslots.sdi
index 111ba6d..243a687 100644
--- a/sfx2/sdi/docslots.sdi
+++ b/sfx2/sdi/docslots.sdi
@@ -139,6 +139,11 @@
         ExecMethod = ExecFile_Impl ;
         StateMethod = GetState_Impl ;
     ]
+    SID_SAVEACOPY // ole(req) api(final/play/rec)
+    [
+        ExecMethod = ExecFile_Impl ;
+        StateMethod = GetState_Impl ;
+    ]
     SID_DOCTEMPLATE // ole(no) api(final/play/rec)
     [
         ExecMethod = ExecFile_Impl ;
diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi
index 607f206..0ffc66c 100644
--- a/sfx2/sdi/sfx.sdi
+++ b/sfx2/sdi/sfx.sdi
@@ -5610,6 +5610,34 @@
 ]
 
 //--------------------------------------------------------------------------
+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)
+[
+    /* flags: */
+    AutoUpdate = FALSE,
+    Cachable = Cachable,
+    FastCall = FALSE,
+    HasCoreId = FALSE,
+    HasDialog = TRUE,
+    ReadOnlyDoc = TRUE,
+    Toggle = FALSE,
+    Container = TRUE,
+    RecordAbsolute = FALSE,
+    RecordPerSet;
+    Synchron;
+
+    /* status: */
+    SlotType = SfxStringItem
+
+    /* config: */
+    AccelConfig = TRUE,
+    MenuConfig = TRUE,
+    StatusBarConfig = FALSE,
+    ToolBoxConfig = TRUE,
+    GroupId = GID_DOCUMENT;
+]
+
+//--------------------------------------------------------------------------
 SfxVoidItem SaveBasicAs SID_BASICSAVEAS
 ()
 [
diff --git a/sfx2/source/dialog/filedlghelper.cxx b/sfx2/source/dialog/filedlghelper.cxx
index 164bc7e..36860cb 100644
--- a/sfx2/source/dialog/filedlghelper.cxx
+++ b/sfx2/source/dialog/filedlghelper.cxx
@@ -924,6 +924,7 @@
     mbInsert                = SFXWB_INSERT == ( nFlags & SFXWB_INSERT );
     mbExport                = SFXWB_EXPORT == ( nFlags & SFXWB_EXPORT );
     mbIsSaveDlg             = sal_False;
+    mbIsSaveACopyDlg        = sal_False;
     mbPwdCheckBoxState      = sal_False;
     mbSelection             = sal_False;
     mbSelectionEnabled      = sal_True;
@@ -1119,6 +1120,12 @@
         catch( const Exception & ) { }
     }
 
+    // Save a copy dialog
+    if ( mbIsSaveACopyDlg )
+    {
+        mxFileDlg->setTitle( SfxResId( STR_PB_SAVEACOPY ).toString() );
+    }
+
     // the "insert file" dialog needs another title
     if ( mbInsert )
     {
diff --git a/sfx2/source/dialog/filedlghelper.src b/sfx2/source/dialog/filedlghelper.src
index 220e1e9..8e9c545 100644
--- a/sfx2/source/dialog/filedlghelper.src
+++ b/sfx2/source/dialog/filedlghelper.src
@@ -101,6 +101,12 @@
     Text [ en-US ] = "~Save" ;
 };
 
+String STR_PB_SAVEACOPY
+{
+    Text [ en-US ] = "Save a Copy" ;
+};
+
+
 String STR_LB_IMAGE_TEMPLATE
 {
     Text [ en-US ] = "Style:" ;
diff --git a/sfx2/source/dialog/filedlgimpl.hxx b/sfx2/source/dialog/filedlgimpl.hxx
index 6888e09..10b8bac 100644
--- a/sfx2/source/dialog/filedlgimpl.hxx
+++ b/sfx2/source/dialog/filedlgimpl.hxx
@@ -87,6 +87,7 @@
         sal_Bool                    mbHasPreview            : 1;
         sal_Bool                    mbShowPreview           : 1;
         sal_Bool                    mbIsSaveDlg             : 1;
+        sal_Bool                    mbIsSaveACopyDlg        : 1;
         sal_Bool                    mbExport                : 1;
 
         sal_Bool                    mbDeleteMatcher         : 1;
diff --git a/sfx2/source/doc/doc.hrc b/sfx2/source/doc/doc.hrc
index 9a38284..26947bd 100644
--- a/sfx2/source/doc/doc.hrc
+++ b/sfx2/source/doc/doc.hrc
@@ -88,6 +88,7 @@
 #define RID_STR_FILTCONFIG                  (RID_SFX_DOC_START+ 52)
 #define RID_STR_FILTBASIC                   (RID_SFX_DOC_START+ 53)
 #define RID_STR_WARNSTYLEOVERWRITE          (RID_SFX_DOC_START+ 54)
+#define STR_SAVEACOPY                       (RID_SFX_DOC_START+ 55)
 
 #define MSG_OPEN_READONLY                   (RID_SFX_DOC_START+ 58)
 
diff --git a/sfx2/source/doc/doc.src b/sfx2/source/doc/doc.src
index b3117c4..fa5889e 100644
--- a/sfx2/source/doc/doc.src
+++ b/sfx2/source/doc/doc.src
@@ -199,6 +199,10 @@
 {
     Text [ en-US ] = "Save Copy ~as..." ;
 };
+String STR_SAVEACOPY
+{
+    Text [ en-US ] = "Save a Copy..." ;
+};
 String STR_CLOSEDOC
 {
     Text [ en-US ] = "~Close" ;
diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx
index 45262eb..278c6b2 100644
--- a/sfx2/source/doc/guisaveas.cxx
+++ b/sfx2/source/doc/guisaveas.cxx
@@ -98,12 +98,14 @@
 #define WIDEEXPORT_REQUESTED        8
 #define SAVE_REQUESTED              16
 #define SAVEAS_REQUESTED            32
+#define SAVEACOPY_REQUESTED         64
 
 // possible statuses of save operation
 #define STATUS_NO_ACTION            0
 #define STATUS_SAVE                 1
 #define STATUS_SAVEAS               2
 #define STATUS_SAVEAS_STANDARDNAME  3
+#define STATUS_SAVEACOPY            4
 
 const char aFilterNameString[] = "FilterName";
 const char aFilterOptionsString[] = "FilterOptions";
@@ -128,6 +130,8 @@
         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" );
     }
@@ -149,6 +153,8 @@
         nResult = SAVE_REQUESTED;
     else if ( aSlotName == "SaveAs" )
         nResult = SAVEAS_REQUESTED;
+    else if ( aSlotName == "SaveACopy" )
+        nResult = SAVEACOPY_REQUESTED;
     else
         throw task::ErrorCodeIOException( ::rtl::OUString(),
                                             uno::Reference< uno::XInterface >(),
diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx
index 1d921c7..e4e5bea 100644
--- a/sfx2/source/doc/objserv.cxx
+++ b/sfx2/source/doc/objserv.cxx
@@ -542,6 +542,7 @@
         case SID_EXPORTDOC:
         case SID_SAVEASDOC:
         case SID_SAVEDOC:
+        case SID_SAVEACOPY:
         {
             // derived class may decide to abort this
             if( !QuerySlotExecutable( nId ) )
@@ -574,6 +575,12 @@
                     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 )
+                {
+                    SFX_ITEMSET_ARG( GetMedium()->GetItemSet(), pViewOnlyItem, SfxBoolItem, SID_VIEWONLY, sal_False );
+                    rReq.AppendItem( SfxBoolItem( SID_SAVETO, sal_True ) );
                 }
 
                 // TODO/LATER: do the following GUI related actions in standalown method
@@ -749,7 +756,7 @@
                 nErrorCode = ( lErr != ERRCODE_IO_ABORT ) && ( nErrorCode == ERRCODE_NONE ) ? nErrorCode : lErr;
             }
 
-            if (nId == SID_SAVEASDOC && nErrorCode == ERRCODE_NONE)
+            if ( (nId == SID_SAVEASDOC || nId == SID_SAVEACOPY) && nErrorCode == ERRCODE_NONE )
             {
                 SetReadOnlyUI(false);
             }
@@ -1054,6 +1061,20 @@
                 break;
             }
 
+            case SID_SAVEACOPY:
+            {
+                if( ( pImp->nLoadedFlags & SFX_LOADED_MAINDOCUMENT ) != SFX_LOADED_MAINDOCUMENT )
+                {
+                    rSet.DisableItem( nWhich );
+                    break;
+                }
+                if ( /*!pCombinedFilters ||*/ !GetMedium() )
+                    rSet.DisableItem( nWhich );
+                else
+                    rSet.Put( SfxStringItem( nWhich, SfxResId(STR_SAVEACOPY).toString() ) );
+                break;
+            }
+
             case SID_EXPORTDOCASPDF:
             case SID_DIRECTEXPORTDOCASPDF:
             {
diff --git a/sw/source/ui/uiview/srcview.cxx b/sw/source/ui/uiview/srcview.cxx
index 1cceff7..9a345c6 100644
--- a/sw/source/ui/uiview/srcview.cxx
+++ b/sw/source/ui/uiview/srcview.cxx
@@ -291,6 +291,7 @@
     TextView* pTextView = aEditWin.GetTextView();
     switch( nSlot )
     {
+        case SID_SAVEACOPY:
         case SID_SAVEASDOC:
         {
             SvtPathOptions aPathOpt;
diff --git a/sw/uiconfig/swriter/menubar/menubar.xml b/sw/uiconfig/swriter/menubar/menubar.xml
index 108aece..284cfe7 100644
--- a/sw/uiconfig/swriter/menubar/menubar.xml
+++ b/sw/uiconfig/swriter/menubar/menubar.xml
@@ -29,6 +29,7 @@
       <menu:menuitem menu:id=".uno:Save"/>
       <menu:menuitem menu:id=".uno:SaveAs"/>
       <menu:menuitem menu:id=".uno:SaveAsTemplate"/>
+      <menu:menuitem menu:id=".uno:SaveACopy"/>
       <menu:menuitem menu:id=".uno:SaveAll"/>
       <menu:menuitem menu:id=".uno:CheckOut"/>
       <menu:menuitem menu:id=".uno:CancelCheckOut"/>

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

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



More information about the LibreOffice mailing list