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/2506

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/06/2506/1

fdo#47011 autosave feature work in progress

Change-Id: Ib2cbcc33e6188c60c183b5f47e9ae9c9d4c91b95
---
M cui/source/options/optsave.cxx
M cui/source/options/optsave.hrc
M cui/source/options/optsave.hxx
M cui/source/options/optsave.src
M framework/inc/services/autorecovery.hxx
M framework/source/services/autorecovery.cxx
M officecfg/registry/data/org/openoffice/Office/Recovery.xcu
M officecfg/registry/schema/org/openoffice/Office/Recovery.xcs
M sfx2/inc/sfx2/sfxsids.hrc
M sfx2/source/appl/appcfg.cxx
M shell/source/backends/gconfbe/gconfaccess.cxx
M shell/source/backends/gconfbe/gconfaccess.hxx
M unotools/inc/unotools/saveopt.hxx
M unotools/source/config/saveopt.cxx
14 files changed, 186 insertions(+), 20 deletions(-)



diff --git a/cui/source/options/optsave.cxx b/cui/source/options/optsave.cxx
index d977cac..2ada021 100644
--- a/cui/source/options/optsave.cxx
+++ b/cui/source/options/optsave.cxx
@@ -55,8 +55,9 @@
 
 #define CFG_PAGE_AND_GROUP          OUString("General"), OUString("LoadSave")
 // !! you have to update these index, if you changed the list of the child windows !!
-#define WININDEX_AUTOSAVE           ((sal_uInt16)6)
-#define WININDEX_SAVEURL_RELFSYS    ((sal_uInt16)9)
+#define WININDEX_AUTOSAVE           ((sal_uInt16) 6)
+#define WININDEX_USERAUTOSAVE       ((sal_uInt16) 9)
+#define WININDEX_SAVEURL_RELFSYS    ((sal_uInt16)10)
 
 // ----------------------------------------------------------------------
 
@@ -102,6 +103,7 @@
     aMinuteFT           ( this, CUI_RES( FT_MINUTE ) ),
     aRelativeFsysCB     ( this, CUI_RES( BTN_RELATIVE_FSYS ) ),
     aRelativeInetCB     ( this, CUI_RES( BTN_RELATIVE_INET ) ),
+    aUserAutoSaveCB     ( this, CUI_RES( BTN_USERAUTOSAVE ) ),
 
     aDefaultFormatFL    ( this, CUI_RES( FL_FILTER ) ),
     aODFVersionFT       ( this, CUI_RES( FT_ODF_VERSION ) ),
@@ -239,11 +241,22 @@
         aAutoSaveEdit.Hide();
         aMinuteFT.Hide();
         // the other controls have to move upwards the height of checkbox + space
-        nDelta += aRelativeFsysCB.GetPosPixel().Y() - aAutoSaveCB.GetPosPixel().Y();
+        nDelta += aUserAutoSaveCB.GetPosPixel().Y() - aAutoSaveCB.GetPosPixel().Y();
     }
     else if ( nDelta > 0 )
         // the "AutoSave" controls have to move upwards too
         nWinIndex = WININDEX_AUTOSAVE;
+
+    if ( aOptionsDlgOpt.IsOptionHidden( "UserAutoSave", CFG_PAGE_AND_GROUP ) )
+    {
+        // hide controls of "UserAutoSave"
+        aUserAutoSaveCB.Hide();
+        // the other controls have to move upwards the height of checkbox + space
+        nDelta += aRelativeFsysCB.GetPosPixel().Y() - aUserAutoSaveCB.GetPosPixel().Y();
+    }
+    else if ( nDelta > 0 )
+        // the "UserAutoSave" controls have to move upwards too
+        nWinIndex = WININDEX_USERAUTOSAVE;
 
     if ( nDelta > 0 )
     {
@@ -313,6 +326,13 @@
     {
         rSet.Put( SfxUInt16Item( GetWhich( SID_ATTR_AUTOSAVEMINUTE ),
                                  (sal_uInt16)aAutoSaveEdit.GetValue() ) );
+        bModified |= sal_True;
+    }
+
+    if ( aUserAutoSaveCB.IsChecked() != aUserAutoSaveCB.GetSavedValue() )
+    {
+        rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_USERAUTOSAVE ),
+                               aUserAutoSaveCB.IsChecked() ) );
         bModified |= sal_True;
     }
     // save relatively
@@ -489,6 +509,7 @@
     aBackupFI.Show(bBackupRO);
 
     aAutoSaveCB.Check(aSaveOpt.IsAutoSave());
+    aUserAutoSaveCB.Check(aSaveOpt.IsUserAutoSave());
     aWarnAlienFormatCB.Check(aSaveOpt.IsWarnAlienFormat());
     aWarnAlienFormatCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_WARNALIENFORMAT));
 
@@ -515,6 +536,8 @@
     aAutoSaveCB.SaveValue();
     aAutoSaveEdit.SaveValue();
 
+    aUserAutoSaveCB.SaveValue();
+
     aRelativeFsysCB.SaveValue();
     aRelativeInetCB.SaveValue();
     aODFVersionLB.SaveValue();
@@ -530,11 +553,13 @@
         {
             aAutoSaveEdit.Enable();
             aMinuteFT.Enable();
+            aUserAutoSaveCB.Enable();
         }
         else
         {
             aAutoSaveEdit.Disable();
             aMinuteFT.Disable();
+            aUserAutoSaveCB.Disable();
         }
     }
     return 0;
diff --git a/cui/source/options/optsave.hrc b/cui/source/options/optsave.hrc
index 16891bc..36a95b6 100644
--- a/cui/source/options/optsave.hrc
+++ b/cui/source/options/optsave.hrc
@@ -29,6 +29,7 @@
 #define BTN_AUTOSAVE            16
 #define ED_AUTOSAVE             17
 #define FT_MINUTE               18
+#define BTN_USERAUTOSAVE        19
 #define BTN_NOPRETTYPRINTING    20
 #define FI_BACKUP               21
 #define BTN_WARNALIENFORMAT     22
diff --git a/cui/source/options/optsave.hxx b/cui/source/options/optsave.hxx
index 4ab3082..00cb63f 100644
--- a/cui/source/options/optsave.hxx
+++ b/cui/source/options/optsave.hxx
@@ -54,6 +54,7 @@
     CheckBox                aAutoSaveCB;
     NumericField            aAutoSaveEdit;
     FixedText               aMinuteFT;
+    CheckBox                aUserAutoSaveCB;
     CheckBox                aRelativeFsysCB;
     CheckBox                aRelativeInetCB;
 
diff --git a/cui/source/options/optsave.src b/cui/source/options/optsave.src
index 6dc878e..32bcb6e 100644
--- a/cui/source/options/optsave.src
+++ b/cui/source/options/optsave.src
@@ -110,36 +110,43 @@
         Size = MAP_APPFONT ( 65 , 8 ) ;
         Text [ en-US ] = "Minutes" ;
     };
+    CheckBox BTN_USERAUTOSAVE
+    {
+        HelpID = "cui:CheckBox:RID_SFXPAGE_SAVE:BTN_USERAUTOSAVE"; //? FIX ME
+        Pos = MAP_APPFONT ( 12 , 74 ) ;
+        Size = MAP_APPFONT ( 163 , 10 ) ;
+        Text [ en-US ] = "Save document when saving AutoRecovery information" ;
+    };
     CheckBox BTN_RELATIVE_FSYS
     {
         HelpID = "cui:CheckBox:RID_SFXPAGE_SAVE:BTN_RELATIVE_FSYS";
-        Pos = MAP_APPFONT ( 12 , 74 ) ;
+        Pos = MAP_APPFONT ( 12 , 85 ) ;
         Size = MAP_APPFONT ( 236 , 10 ) ;
         Text [ en-US ] = "Save URLs relative to file system" ;
     };
     CheckBox BTN_RELATIVE_INET
     {
         HelpID = "cui:CheckBox:RID_SFXPAGE_SAVE:BTN_RELATIVE_INET";
-        Pos = MAP_APPFONT ( 12 , 85 ) ;
+        Pos = MAP_APPFONT ( 12 , 96 ) ;
         Size = MAP_APPFONT ( 248 , 10 ) ;
         Text [ en-US ] = "Save URLs relative to internet" ;
     };
     FixedLine FL_FILTER
     {
-        Pos = MAP_APPFONT ( 6 , 97 ) ;
+        Pos = MAP_APPFONT ( 6 , 108 ) ;
         Size = MAP_APPFONT ( 248 , 8 ) ;
         Text [ en-US ] = "Default file format and ODF settings" ;
     };
     FixedText FT_ODF_VERSION
     {
-        Pos = MAP_APPFONT ( 12 , 107 ) ;
+        Pos = MAP_APPFONT ( 12 , 118 ) ;
         Size = MAP_APPFONT ( 121 , 8 ) ;
         Text [ en-US ] = "ODF format version" ;
     };
     ListBox LB_ODF_VERSION
     {
         HelpID = "cui:ListBox:RID_SFXPAGE_SAVE:LB_ODF_VERSION";
-        Pos = MAP_APPFONT ( 136 , 105 ) ;
+        Pos = MAP_APPFONT ( 136 , 116 ) ;
         Size = MAP_APPFONT ( 108 , 58 ) ;
         Border = TRUE;
         DropDown = TRUE;
@@ -154,33 +161,33 @@
     CheckBox BTN_NOPRETTYPRINTING
     {
         HelpID = "cui:CheckBox:RID_SFXPAGE_SAVE:BTN_NOPRETTYPRINTING";
-        Pos = MAP_APPFONT ( 12 , 120 ) ;
+        Pos = MAP_APPFONT ( 12 , 131 ) ;
         Size = MAP_APPFONT ( 248 , 10 ) ;
         Text [ en-US ] = "Size optimization for ODF format" ;
     };
     CheckBox BTN_WARNALIENFORMAT
     {
         HelpID = "cui:CheckBox:RID_SFXPAGE_SAVE:BTN_WARNALIENFORMAT";
-        Pos = MAP_APPFONT ( 12 , 131 ) ;
+        Pos = MAP_APPFONT ( 12 , 142 ) ;
         Size = MAP_APPFONT ( 248 , 10 ) ;
         Text [ en-US ] = "Warn when not saving in ODF or default format" ;
     };
     FixedText FT_APP
     {
-        Pos = MAP_APPFONT ( 12 , 142 ) ;
+        Pos = MAP_APPFONT ( 12 , 153 ) ;
         Size = MAP_APPFONT ( 120 , 8 ) ;
         Text [ en-US ] = "D~ocument type";
     };
     FixedText FT_FILTER
     {
-        Pos = MAP_APPFONT ( 136 , 142 ) ;
+        Pos = MAP_APPFONT ( 136 , 153 ) ;
         Size = MAP_APPFONT ( 120 , 8 ) ;
         Text [ en-US ] = "Always sa~ve as";
     };
     ListBox LB_APP
     {
         HelpID = "cui:ListBox:RID_SFXPAGE_SAVE:LB_APP";
-        Pos = MAP_APPFONT ( 12 , 153 ) ;
+        Pos = MAP_APPFONT ( 12 , 164 ) ;
         Size = MAP_APPFONT ( 108 , 58 ) ;
         Border = TRUE;
         DropDown = TRUE;
@@ -197,14 +204,14 @@
     };
     FixedImage FI_FILTER
     {
-        Pos = MAP_APPFONT ( 129, 154 ) ;
+        Pos = MAP_APPFONT ( 129, 165 ) ;
         Size = MAP_APPFONT ( 6 , 6 ) ;
         Hide = TRUE;
     };
     ListBox LB_FILTER
     {
         HelpID = "cui:ListBox:RID_SFXPAGE_SAVE:LB_FILTER";
-        Pos = MAP_APPFONT ( 136 , 153 ) ;
+        Pos = MAP_APPFONT ( 136 , 164 ) ;
         Size = MAP_APPFONT ( 108 , 58 ) ;
         Border = TRUE;
         Sort = TRUE;
@@ -212,13 +219,13 @@
     };
     FixedImage FI_ODF_WARNING
     {
-        Pos = MAP_APPFONT ( 12, 169 ) ;
+        Pos = MAP_APPFONT ( 12, 170 ) ;
         Size = MAP_APPFONT ( 8 , 8 ) ;
         Hide = TRUE;
     };
     FixedText FT_WARN
     {
-        Pos = MAP_APPFONT ( 23 , 169 ) ;
+        Pos = MAP_APPFONT ( 23 , 170 ) ;
         Size = MAP_APPFONT ( 239 , 8 ) ;
         Hide = TRUE;
         Text [ en-US ] = "Not using ODF 1.2 Extended may cause information to be lost.";
diff --git a/framework/inc/services/autorecovery.hxx b/framework/inc/services/autorecovery.hxx
index 9ef0a2f..90e98e7 100644
--- a/framework/inc/services/autorecovery.hxx
+++ b/framework/inc/services/autorecovery.hxx
@@ -213,7 +213,8 @@
             E_SESSION_RESTORE           = 128,
             E_DISABLE_AUTORECOVERY      = 256,
             E_SET_AUTOSAVE_STATE        = 512,
-            E_SESSION_QUIET_QUIT        = 1024
+            E_SESSION_QUIET_QUIT        = 1024,
+            E_USER_AUTO_SAVE            = 2048
         };
 
         //---------------------------------------
diff --git a/framework/source/services/autorecovery.cxx b/framework/source/services/autorecovery.cxx
index e1415df..8cc7e01 100644
--- a/framework/source/services/autorecovery.cxx
+++ b/framework/source/services/autorecovery.cxx
@@ -21,6 +21,8 @@
 #include "services/autorecovery.hxx"
 #include <loadenv/loadenv.hxx>
 
+#include <sfx2/sfxbasemodel.hxx> //?
+
 #include <loadenv/targethelper.hxx>
 #include <pattern/frame.hxx>
 #include <threadhelp/readguard.hxx>
@@ -123,6 +125,8 @@
 
 static const char CFG_ENTRY_AUTOSAVE_ENABLED[] = "AutoSave/Enabled";
 static const char CFG_ENTRY_AUTOSAVE_TIMEINTERVALL[] = "AutoSave/TimeIntervall"; //sic!
+
+static const char CFG_ENTRY_USERAUTOSAVE_ENABLED[] = "AutoSave/UserAutoSaveEnabled";
 
 static const char CFG_PATH_AUTOSAVE[] = "AutoSave";
 static const char CFG_ENTRY_MINSPACE_DOCSAVE[] = "MinSpaceDocSave";
@@ -977,12 +981,25 @@
     sal_Bool bEnabled = sal_False;
     xCommonRegistry->getByHierarchicalName(rtl::OUString(CFG_ENTRY_AUTOSAVE_ENABLED)) >>= bEnabled;
 
+    // UserAutoSave [bool]
+    sal_Bool bUserEnabled = sal_False;
+    xCommonRegistry->getByHierarchicalName(rtl::OUString(CFG_ENTRY_USERAUTOSAVE_ENABLED)) >>= 
bUserEnabled;
+
     // SAFE -> ------------------------------
     WriteGuard aWriteLock(m_aLock);
     if (bEnabled)
     {
         m_eJob       |= AutoRecovery::E_AUTO_SAVE;
         m_eTimerType  = AutoRecovery::E_NORMAL_AUTOSAVE_INTERVALL;
+
+        if (bUserEnabled)
+        {
+            m_eJob       |= AutoRecovery::E_USER_AUTO_SAVE;
+        }
+        else
+        {
+            m_eJob       &= ~AutoRecovery::E_USER_AUTO_SAVE;
+        }
     }
     else
     {
@@ -2328,6 +2345,7 @@
     // Mark AutoSave state as "INCOMPLETE" if it failed.
     // Because the last temp file is to old and does not include all changes.
     Reference< XDocumentRecovery > xDocRecover(rInfo.Document, css::uno::UNO_QUERY_THROW);
+    Reference< XStorable > xDocSave(rInfo.Document, css::uno::UNO_QUERY_THROW);
 
     // safe the state about "trying to save"
     // ... we need it for recovery if e.g. a crash occures inside next line!
@@ -2342,6 +2360,13 @@
         {
             xDocRecover->storeToRecoveryFile( rInfo.NewTempURL, 
lNewArgs.getAsConstPropertyValueList() );
 
+            // if userautosave is enabled, also save to the original file
+            //if((m_eJob & AutoRecovery::E_USER_AUTO_SAVE) == AutoRecovery::E_USER_AUTO_SAVE)
+            if(true)
+            {
+                xDocSave->store();
+            }
+
 #ifdef TRIGGER_FULL_DISC_CHECK
             throw css::uno::Exception();
 #else  // TRIGGER_FULL_DISC_CHECK
diff --git a/officecfg/registry/data/org/openoffice/Office/Recovery.xcu 
b/officecfg/registry/data/org/openoffice/Office/Recovery.xcu
index e5fbed4..92cbff7 100644
--- a/officecfg/registry/data/org/openoffice/Office/Recovery.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Recovery.xcu
@@ -25,6 +25,10 @@
       <value oor:external=
           "com.sun.star.configuration.backend.GconfBackend AutoSaveEnabled"/>
     </prop>
+    <prop oor:name="UserAutoSaveEnabled">
+      <value oor:external=
+          "com.sun.star.configuration.backend.GconfBackend UserAutoSaveEnabled"/>
+    </prop>
     <prop oor:name="TimeIntervall">
       <value oor:external=
        "com.sun.star.configuration.backend.GconfBackend AutoSaveTimeIntervall"/>
diff --git a/officecfg/registry/schema/org/openoffice/Office/Recovery.xcs 
b/officecfg/registry/schema/org/openoffice/Office/Recovery.xcs
index 19203f0..a44e611 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Recovery.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Recovery.xcs
@@ -131,6 +131,12 @@
                 </info>
                 <value>true</value>
             </prop>
+            <prop oor:name="UserAutoSaveEnabled" oor:type="xs:boolean" oor:nillable="false">
+                <info>
+                    <desc> </desc>
+                </info>
+                <value>true</value>
+            </prop>
             <prop oor:name="TimeIntervall" oor:type="xs:int" oor:nillable="false">
                 <info>
                     <desc> </desc>
diff --git a/sfx2/inc/sfx2/sfxsids.hrc b/sfx2/inc/sfx2/sfxsids.hrc
index d379d9f..33be620 100644
--- a/sfx2/inc/sfx2/sfxsids.hrc
+++ b/sfx2/inc/sfx2/sfxsids.hrc
@@ -514,6 +514,7 @@
 #define SID_ATTR_AUTOSAVE               (SID_OPTIONS_START +  2)
 #define SID_ATTR_AUTOSAVEPROMPT         (SID_OPTIONS_START +  3)
 #define SID_ATTR_AUTOSAVEMINUTE         (SID_OPTIONS_START +  5)
+#define SID_ATTR_USERAUTOSAVE           (SID_OPTIONS_START +  6)
 #define SID_ATTR_WORKINGSET             (SID_OPTIONS_START + 13)
 #define SID_ATTR_UNDO_COUNT             (SID_OPTIONS_START + 16)
     // unused
diff --git a/sfx2/source/appl/appcfg.cxx b/sfx2/source/appl/appcfg.cxx
index 11441cd..061f697 100644
--- a/sfx2/source/appl/appcfg.cxx
+++ b/sfx2/source/appl/appcfg.cxx
@@ -226,6 +226,14 @@
                                 bRet = sal_False;
                     }
                     break;
+                case SID_ATTR_USERAUTOSAVE :
+                    {
+                        bRet = sal_True;
+                        if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_USERAUTOSAVE))
+                            if (!rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_USERAUTOSAVE ), 
aSaveOptions.IsUserAutoSave())))
+                                bRet = sal_False;
+                    }
+                    break;
                 case SID_ATTR_DOCINFO :
                     {
                         bRet = sal_True;
@@ -582,6 +590,13 @@
         aSaveOptions.SetAutoSaveTime(((const SfxUInt16Item *)pItem)->GetValue());
     }
 
+    // UserAutoSave
+    if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_USERAUTOSAVE), sal_True, 
&pItem))
+    {
+        DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
+        aSaveOptions.SetUserAutoSave( ( (const SfxBoolItem*)pItem )->GetValue() );
+    }
+
     // DocInfo
     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_DOCINFO), sal_True, &pItem))
     {
diff --git a/shell/source/backends/gconfbe/gconfaccess.cxx 
b/shell/source/backends/gconfbe/gconfaccess.cxx
index 4705013..71276da 100644
--- a/shell/source/backends/gconfbe/gconfaccess.cxx
+++ b/shell/source/backends/gconfbe/gconfaccess.cxx
@@ -34,6 +34,7 @@
 
 #define GCONF_PROXY_MODE_KEY "/system/proxy/mode"
 #define GCONF_AUTO_SAVE_KEY  "/apps/openoffice/auto_save"
+#define GCONF_USER_AUTO_SAVE_KEY  "/apps/openoffice/user_auto_save"
 
 namespace gconfaccess {
 
@@ -433,6 +434,18 @@
             }
         }
             break;
+        case SETTING_USER_AUTO_SAVE:
+        {
+            GConfValue* pGconfValue = gconf_client_get( pClient, GCONF_USER_AUTO_SAVE_KEY, NULL );
+
+            if( ( pGconfValue != NULL ) )
+            {
+                bool bOk = gconf_value_get_bool( pGconfValue );
+                gconf_value_free( pGconfValue );
+                if (bOk) return sal_True;
+            }
+        }
+            break;
 #endif // ENABLE_LOCKDOWN
 
         default:
@@ -599,6 +612,14 @@
     },
 
     {
+        SETTING_USER_AUTO_SAVE,
+        GCONF_USER_AUTO_SAVE_KEY,
+        RTL_CONSTASCII_STRINGPARAM("UserAutoSaveEnabled"),
+        sal_False,
+        SETTINGS_LAST
+    },
+
+    {
         SETTING_AUTO_SAVE_INTERVAL,
         "/apps/openoffice/auto_save_interval",
         RTL_CONSTASCII_STRINGPARAM("AutoSaveTimeIntervall"),
diff --git a/shell/source/backends/gconfbe/gconfaccess.hxx 
b/shell/source/backends/gconfbe/gconfaccess.hxx
index 98ce947..7f0a52a 100644
--- a/shell/source/backends/gconfbe/gconfaccess.hxx
+++ b/shell/source/backends/gconfbe/gconfaccess.hxx
@@ -80,6 +80,7 @@
     SETTING_CREATE_BACKUP,
     SETTING_WARN_ALIEN_FORMAT,
     SETTING_AUTO_SAVE,
+    SETTING_USER_AUTO_SAVE,
     SETTING_AUTO_SAVE_INTERVAL,
     SETTING_WRITER_DEFAULT_DOC_FORMAT,
     SETTING_IMPRESS_DEFAULT_DOC_FORMAT,
diff --git a/unotools/inc/unotools/saveopt.hxx b/unotools/inc/unotools/saveopt.hxx
index 349b5e6..771c721 100644
--- a/unotools/inc/unotools/saveopt.hxx
+++ b/unotools/inc/unotools/saveopt.hxx
@@ -47,7 +47,8 @@
         E_LOADDOCPRINTER,
         E_ODFDEFAULTVERSION,
         E_USESHA1INODF12,
-        E_USEBLOWFISHINODF12
+        E_USEBLOWFISHINODF12,
+        E_USERAUTOSAVE,
     };
 
     // keep enum values sorted that a less or greater compare maps to older and newer versions!
@@ -81,6 +82,9 @@
     void                    SetAutoSavePrompt( sal_Bool b );
     sal_Bool                IsAutoSavePrompt() const;
 
+    void                    SetUserAutoSave( sal_Bool b );
+    sal_Bool                IsUserAutoSave() const;
+
     void                    SetDocInfoSave(sal_Bool b);
     sal_Bool                IsDocInfoSave() const;
 
diff --git a/unotools/source/config/saveopt.cxx b/unotools/source/config/saveopt.cxx
index 1618638..b0b8f06 100644
--- a/unotools/source/config/saveopt.cxx
+++ b/unotools/source/config/saveopt.cxx
@@ -57,6 +57,7 @@
                                         bBackup,
                                         bAutoSave,
                                         bAutoSavePrompt,
+                                        bUserAutoSave,
                                         bDocInfSave,
                                         bSaveWorkingSet,
                                         bSaveDocView,
@@ -76,6 +77,7 @@
                                         bROBackup,
                                         bROAutoSave,
                                         bROAutoSavePrompt,
+                                        bROUserAutoSave,
                                         bRODocInfSave,
                                         bROSaveWorkingSet,
                                         bROSaveDocView,
@@ -101,6 +103,7 @@
     sal_Bool                    IsBackup() const                    { return bBackup; }
     sal_Bool                    IsAutoSave() const                  { return bAutoSave; }
     sal_Bool                    IsAutoSavePrompt() const            { return bAutoSavePrompt; }
+    sal_Bool                    IsUserAutoSave() const              { return bUserAutoSave; }
     sal_Bool                    IsDocInfoSave() const               { return bDocInfSave; }
     sal_Bool                    IsSaveWorkingSet() const            { return bSaveWorkingSet;      
   }
     sal_Bool                    IsSaveDocView() const               { return bSaveDocView; }
@@ -121,6 +124,7 @@
     void                    SetBackup( sal_Bool b );
     void                    SetAutoSave( sal_Bool b );
     void                    SetAutoSavePrompt( sal_Bool b );
+    void                    SetUserAutoSave( sal_Bool b );
     void                    SetDocInfoSave( sal_Bool b );
     void                    SetSaveWorkingSet( sal_Bool b );
     void                    SetSaveDocView( sal_Bool b );
@@ -178,6 +182,16 @@
     {
         bAutoSavePrompt = b;
         SetModified();
+    }
+}
+
+void SvtSaveOptions_Impl::SetUserAutoSave( sal_Bool b )
+{
+    if (!bROUserAutoSave && bUserAutoSave!=b)
+    {
+        bUserAutoSave = b;
+        SetModified();
+        Commit();
     }
 }
 
@@ -282,6 +296,9 @@
         case SvtSaveOptions::E_AUTOSAVEPROMPT :
             bReadOnly = bROAutoSavePrompt;
             break;
+        case SvtSaveOptions::E_USERAUTOSAVE :
+            bReadOnly = bROUserAutoSave;
+            break;
         case SvtSaveOptions::E_DOCINFSAVE :
             bReadOnly = bRODocInfSave;
             break;
@@ -340,6 +357,7 @@
 #define ODFDEFAULTVERSION   15
 #define USESHA1INODF12      16
 #define USEBLOWFISHINODF12  17
+#define USERAUTOSAVE        18
 
 Sequence< OUString > GetPropertyNames()
 {
@@ -362,7 +380,8 @@
         "WorkingSet",
         "ODF/DefaultVersion",
         "ODF/UseSHA1InODF12",
-        "ODF/UseBlowfishInODF12"
+        "ODF/UseBlowfishInODF12",
+        "Document/UserAutoSave"
     };
 
     const int nCount = sizeof( aPropNames ) / sizeof( const char* );
@@ -383,6 +402,7 @@
     , bBackup( sal_False )
     , bAutoSave( sal_False )
     , bAutoSavePrompt( sal_False )
+    , bUserAutoSave( sal_False )
     , bDocInfSave( sal_False )
     , bSaveWorkingSet( sal_False )
     , bSaveDocView( sal_False )
@@ -400,6 +420,7 @@
     , bROBackup( CFG_READONLY_DEFAULT )
     , bROAutoSave( CFG_READONLY_DEFAULT )
     , bROAutoSavePrompt( CFG_READONLY_DEFAULT )
+    , bROUserAutoSave( CFG_READONLY_DEFAULT )
     , bRODocInfSave( CFG_READONLY_DEFAULT )
     , bROSaveWorkingSet( CFG_READONLY_DEFAULT )
     , bROSaveDocView( CFG_READONLY_DEFAULT )
@@ -478,6 +499,10 @@
                                 case AUTOSAVE :
                                     bAutoSave = bTemp;
                                     bROAutoSave = pROStates[nProp];
+                                    break;
+                                case USERAUTOSAVE :
+                                    bUserAutoSave = bTemp;
+                                    bROUserAutoSave = pROStates[nProp];
                                     break;
                                 case PROMPT :
                                     bAutoSavePrompt = bTemp;
@@ -563,6 +588,11 @@
         xCFG,
         ::rtl::OUString("AutoSave"),
         ::rtl::OUString("TimeIntervall")) >>= nAutoSaveTime;
+
+    ::comphelper::ConfigurationHelper::readRelativeKey(
+        xCFG,
+        ::rtl::OUString("AutoSave"),
+        ::rtl::OUString("UserAutoSaveEnabled")) >>= bUserAutoSave;
     }
     catch(const css::uno::Exception&)
         { OSL_FAIL("Could not find needed informations for AutoSave feature."); }
@@ -626,6 +656,14 @@
                 if (!bROAutoSavePrompt)
                 {
                     pValues[nRealCount] <<= bAutoSavePrompt;
+                    pNames[nRealCount] = pOrgNames[i];
+                    ++nRealCount;
+                }
+                break;
+            case USERAUTOSAVE :
+                if (!bROUserAutoSave)
+                {
+                    pValues[nRealCount] <<= bUserAutoSave;
                     pNames[nRealCount] = pOrgNames[i];
                     ++nRealCount;
                 }
@@ -752,6 +790,12 @@
         ::rtl::OUString("AutoSave"),
         ::rtl::OUString("Enabled"),
         css::uno::makeAny(bAutoSave));
+
+    ::comphelper::ConfigurationHelper::writeRelativeKey(
+        xCFG,
+        ::rtl::OUString("AutoSave"),
+        ::rtl::OUString("UserAutoSaveEnabled"),
+        css::uno::makeAny(bUserAutoSave));
 
     ::comphelper::ConfigurationHelper::flush(xCFG);
 }
@@ -908,6 +952,16 @@
     return pImp->pSaveOpt->IsAutoSavePrompt();
 }
 
+void SvtSaveOptions::SetUserAutoSave( sal_Bool b )
+{
+    pImp->pSaveOpt->SetUserAutoSave( b );
+}
+
+sal_Bool SvtSaveOptions::IsUserAutoSave() const
+{
+    return pImp->pSaveOpt->IsUserAutoSave();
+}
+
 void SvtSaveOptions::SetDocInfoSave(sal_Bool b)
 {
     pImp->pSaveOpt->SetDocInfoSave( b );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib2cbcc33e6188c60c183b5f47e9ae9c9d4c91b95
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Krisztian Pinter <pin.terminator@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.