Hack: store/restore font name box mru entries
When a LibreOffice window with a FontNameBox control is closed the list of mru entries for the control is stored in a file, discarding the previous saved entry list; when a document is opened or created the last saved mru entry list for the FontNameBox control is restored.
This commit is contained in:
parent
4fc170d3e8
commit
f82a46dabe
2 changed files with 86 additions and 2 deletions
|
@ -31,6 +31,7 @@
|
|||
|
||||
#include "svtools/svtdllapi.h"
|
||||
|
||||
#include <tools/string.hxx>
|
||||
#include <vcl/lstbox.hxx>
|
||||
#include <vcl/combobox.hxx>
|
||||
#include <vcl/image.hxx>
|
||||
|
@ -56,6 +57,8 @@ typedef ::std::vector< ImplFontNameListData* > ImplFontList;
|
|||
#define CHANGE_DIST ( ( sal_uInt16 ) 4 )
|
||||
#define ADAPT_DIST ( ( sal_uInt16 ) 8 )
|
||||
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
|
||||
Beschreibung
|
||||
|
@ -461,8 +464,9 @@ private:
|
|||
Image maImagePrinterFont;
|
||||
Image maImageBitmapFont;
|
||||
Image maImageScalableFont;
|
||||
sal_Bool mbWYSIWYG;
|
||||
sal_Bool mbSymbols;
|
||||
sal_Bool mbWYSIWYG;
|
||||
sal_Bool mbSymbols;
|
||||
String maFontMRUEntriesFile;
|
||||
|
||||
#ifdef _CTRLBOX_CXX
|
||||
SVT_DLLPRIVATE void ImplCalcUserItemSize();
|
||||
|
@ -472,6 +476,8 @@ private:
|
|||
void InitBitmaps( void );
|
||||
protected:
|
||||
virtual void DataChanged( const DataChangedEvent& rDCEvt );
|
||||
void LoadMRUEntries( const String& aFontMRUEntriesFile, xub_Unicode cSep = ';' );
|
||||
void SaveMRUEntries( const String& aFontMRUEntriesFile, xub_Unicode cSep = ';' ) const;
|
||||
public:
|
||||
FontNameBox( Window* pParent,
|
||||
WinBits nWinStyle = WB_SORT );
|
||||
|
@ -489,6 +495,8 @@ public:
|
|||
sal_Bool IsSymbolsEnabled() const { return mbSymbols; }
|
||||
|
||||
private:
|
||||
void InitFontMRUEntriesFile();
|
||||
|
||||
// declared as private because some compilers would generate the default functions
|
||||
FontNameBox( const FontNameBox& );
|
||||
FontNameBox& operator =( const FontNameBox& );
|
||||
|
|
|
@ -31,8 +31,10 @@
|
|||
|
||||
#define _CTRLBOX_CXX
|
||||
#include <tools/debug.hxx>
|
||||
#include <tools/stream.hxx>
|
||||
#include <vcl/svapp.hxx>
|
||||
#include <vcl/field.hxx>
|
||||
#include <vcl/helper.hxx>
|
||||
#include <sal/macros.h>
|
||||
#include <comphelper/processfactory.hxx>
|
||||
#include <unotools/charclass.hxx>
|
||||
|
@ -48,6 +50,10 @@
|
|||
#include <basegfx/polygon/b2dpolygon.hxx>
|
||||
#include <basegfx/polygon/b2dpolygontools.hxx>
|
||||
|
||||
#if OSL_DEBUG_LEVEL > 1
|
||||
#include <cstdio>
|
||||
#endif
|
||||
|
||||
#define IMGINNERTEXTSPACE 2
|
||||
#define IMGOUTERTEXTSPACE 5
|
||||
#define EXTRAFONTSIZE 5
|
||||
|
@ -56,7 +62,10 @@
|
|||
#define TWIPS_TO_PT100(val) (val * 5)
|
||||
#define PT100_TO_TWIPS(val) (val / 5)
|
||||
|
||||
#define FONTNAMEBOXMRUENTRIESFILE "/user/config/fontnameboxmruentries"
|
||||
|
||||
using namespace ::com::sun::star;
|
||||
using namespace psp;
|
||||
|
||||
// ========================================================================
|
||||
// ColorListBox
|
||||
|
@ -986,6 +995,7 @@ FontNameBox::FontNameBox( Window* pParent, WinBits nWinStyle ) :
|
|||
mpFontList = NULL;
|
||||
mbWYSIWYG = sal_False;
|
||||
mbSymbols = sal_False;
|
||||
InitFontMRUEntriesFile();
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
@ -997,12 +1007,14 @@ FontNameBox::FontNameBox( Window* pParent, const ResId& rResId ) :
|
|||
mpFontList = NULL;
|
||||
mbWYSIWYG = sal_False;
|
||||
mbSymbols = sal_False;
|
||||
InitFontMRUEntriesFile();
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
FontNameBox::~FontNameBox()
|
||||
{
|
||||
SaveMRUEntries (maFontMRUEntriesFile);
|
||||
ImplDestroyFontList();
|
||||
}
|
||||
|
||||
|
@ -1018,6 +1030,63 @@ void FontNameBox::DataChanged( const DataChangedEvent& rDCEvt )
|
|||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
void FontNameBox::SaveMRUEntries( const String& aFontMRUEntriesFile, xub_Unicode cSep ) const
|
||||
{
|
||||
ByteString aEntries = ByteString( GetMRUEntries( cSep ), RTL_TEXTENCODING_UTF8 );
|
||||
|
||||
if( ! aEntries.Len() || ! aFontMRUEntriesFile.Len() )
|
||||
return;
|
||||
|
||||
SvFileStream aStream;
|
||||
aStream.Open( aFontMRUEntriesFile, STREAM_WRITE | STREAM_TRUNC );
|
||||
if( ! (aStream.IsOpen() && aStream.IsWritable()) )
|
||||
{
|
||||
#if OSL_DEBUG_LEVEL > 1
|
||||
fprintf( stderr, "FontNameBox::SaveMRUEntries: opening mru entries file %s failed\n", ByteString(aFontMRUEntriesFile , RTL_TEXTENCODING_UTF8 ).GetBuffer() );
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
aStream.SetLineDelimiter( LINEEND_LF );
|
||||
aStream.WriteLine( aEntries );
|
||||
aStream.WriteLine( ByteString() );
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
void FontNameBox::LoadMRUEntries( const String& aFontMRUEntriesFile, xub_Unicode cSep )
|
||||
{
|
||||
if( ! aFontMRUEntriesFile.Len() )
|
||||
return;
|
||||
|
||||
SvFileStream aStream( aFontMRUEntriesFile, STREAM_READ );
|
||||
if( ! aStream.IsOpen() )
|
||||
{
|
||||
#if OSL_DEBUG_LEVEL > 1
|
||||
fprintf( stderr, "FontNameBox::LoadMRUEntries: opening mru entries file %s failed\n", ByteString( aFontMRUEntriesFile, RTL_TEXTENCODING_UTF8 ).GetBuffer() );
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
ByteString aLine;
|
||||
aStream.ReadLine( aLine );
|
||||
XubString aEntries = XubString( aLine, RTL_TEXTENCODING_UTF8 );
|
||||
SetMRUEntries( aEntries, cSep );
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
|
||||
void FontNameBox::InitFontMRUEntriesFile()
|
||||
{
|
||||
maFontMRUEntriesFile = getOfficePath( UserPath );
|
||||
if( maFontMRUEntriesFile.Len() )
|
||||
{
|
||||
maFontMRUEntriesFile.AppendAscii( FONTNAMEBOXMRUENTRIESFILE );
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
void FontNameBox::InitBitmaps( void )
|
||||
{
|
||||
maImagePrinterFont = Image( SvtResId( RID_IMG_PRINTERFONT ) );
|
||||
|
@ -1045,6 +1114,8 @@ void FontNameBox::Fill( const FontList* pList )
|
|||
{
|
||||
// store old text and clear box
|
||||
XubString aOldText = GetText();
|
||||
XubString rEntries = GetMRUEntries();
|
||||
sal_Bool bLoadFromFile = ! rEntries.Len();
|
||||
Clear();
|
||||
|
||||
ImplDestroyFontList();
|
||||
|
@ -1070,6 +1141,11 @@ void FontNameBox::Fill( const FontList* pList )
|
|||
}
|
||||
}
|
||||
|
||||
if ( bLoadFromFile )
|
||||
LoadMRUEntries (maFontMRUEntriesFile);
|
||||
else
|
||||
SetMRUEntries( rEntries );
|
||||
|
||||
ImplCalcUserItemSize();
|
||||
|
||||
// restore text
|
||||
|
|
Loading…
Reference in a new issue