2010-10-14 08:27:31 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2000-09-18 16:07:07 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2008-04-10 19:18:32 +00:00
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2010-02-12 15:01:35 +01:00
|
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 19:18:32 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 19:18:32 +00:00
|
|
|
* This file is part of OpenOffice.org.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 19:18:32 +00:00
|
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
|
|
* only, as published by the Free Software Foundation.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 19:18:32 +00:00
|
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Lesser General Public License version 3 for more details
|
|
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
2008-04-10 19:18:32 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
|
|
* <http://www.openoffice.org/license.html>
|
|
|
|
* for a copy of the LGPLv3 License.
|
2000-09-18 16:07:07 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
2006-09-17 13:37:05 +00:00
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
|
|
#include "precompiled_svtools.hxx"
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
#define _CTRLBOX_CXX
|
|
|
|
#include <tools/debug.hxx>
|
2011-04-14 12:36:44 +02:00
|
|
|
#include <tools/stream.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
#include <vcl/svapp.hxx>
|
|
|
|
#include <vcl/field.hxx>
|
2011-04-14 12:36:44 +02:00
|
|
|
#include <vcl/helper.hxx>
|
2010-10-18 12:28:33 +02:00
|
|
|
#include <sal/macros.h>
|
2000-10-22 16:44:39 +00:00
|
|
|
#include <comphelper/processfactory.hxx>
|
|
|
|
#include <unotools/charclass.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2007-06-27 20:23:24 +00:00
|
|
|
#include <svtools/svtdata.hxx>
|
2010-04-09 11:05:09 +02:00
|
|
|
#include <svtools/svtools.hrc>
|
2010-04-16 23:00:12 +02:00
|
|
|
#include <svtools/ctrlbox.hxx>
|
|
|
|
#include <svtools/ctrltool.hxx>
|
2011-03-11 18:04:44 +00:00
|
|
|
#include <svtools/borderhelper.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2001-08-28 09:25:06 +00:00
|
|
|
#include <vcl/i18nhelp.hxx>
|
2011-02-28 16:57:28 +00:00
|
|
|
#include <vcl/fontcapabilities.hxx>
|
2010-10-06 23:53:00 +02:00
|
|
|
#include <basegfx/polygon/b2dpolygon.hxx>
|
|
|
|
#include <basegfx/polygon/b2dpolygontools.hxx>
|
2001-08-28 09:25:06 +00:00
|
|
|
|
2011-04-15 16:11:05 +01:00
|
|
|
#include <rtl/bootstrap.hxx>
|
|
|
|
|
2011-04-14 12:36:44 +02:00
|
|
|
#if OSL_DEBUG_LEVEL > 1
|
|
|
|
#include <cstdio>
|
|
|
|
#endif
|
|
|
|
|
2011-02-03 14:08:51 +00:00
|
|
|
#define IMGINNERTEXTSPACE 2
|
|
|
|
#define IMGOUTERTEXTSPACE 5
|
|
|
|
#define EXTRAFONTSIZE 5
|
2011-02-10 13:26:08 +00:00
|
|
|
#define MAXPREVIEWWIDTH 100
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2011-01-04 13:41:04 +01:00
|
|
|
#define TWIPS_TO_PT100(val) (val * 5)
|
|
|
|
#define PT100_TO_TWIPS(val) (val / 5)
|
|
|
|
|
2011-04-14 12:36:44 +02:00
|
|
|
#define FONTNAMEBOXMRUENTRIESFILE "/user/config/fontnameboxmruentries"
|
|
|
|
|
2011-02-03 14:08:51 +00:00
|
|
|
using namespace ::com::sun::star;
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
// ========================================================================
|
|
|
|
// ColorListBox
|
|
|
|
// ========================================================================
|
|
|
|
|
|
|
|
// --------------------
|
|
|
|
// - ImplColorListData -
|
|
|
|
// --------------------
|
|
|
|
|
|
|
|
struct ImplColorListData
|
|
|
|
{
|
|
|
|
Color aColor;
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_Bool bColor;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
ImplColorListData() : aColor( COL_BLACK ) { bColor = sal_False; }
|
|
|
|
ImplColorListData( const Color& rColor ) : aColor( rColor ) { bColor = sal_True; }
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void ColorListBox::ImplInit()
|
|
|
|
{
|
2011-02-05 06:23:11 -08:00
|
|
|
pColorList = new ImpColorList();
|
2000-09-18 16:07:07 +00:00
|
|
|
aImageSize.Width() = GetTextWidth( XubString( RTL_CONSTASCII_USTRINGPARAM( "xxx" ) ) );
|
|
|
|
aImageSize.Height() = GetTextHeight();
|
|
|
|
aImageSize.Height() -= 2;
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
EnableUserDraw( sal_True );
|
2000-09-18 16:07:07 +00:00
|
|
|
SetUserItemSize( aImageSize );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void ColorListBox::ImplDestroyColorEntries()
|
|
|
|
{
|
2011-02-05 06:23:11 -08:00
|
|
|
for ( size_t n = pColorList->size(); n; )
|
|
|
|
delete (*pColorList)[ --n ];
|
|
|
|
pColorList->clear();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
ColorListBox::ColorListBox( Window* pParent, WinBits nWinStyle ) :
|
|
|
|
ListBox( pParent, nWinStyle )
|
|
|
|
{
|
|
|
|
ImplInit();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
ColorListBox::ColorListBox( Window* pParent, const ResId& rResId ) :
|
|
|
|
ListBox( pParent, rResId )
|
|
|
|
{
|
|
|
|
ImplInit();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
ColorListBox::~ColorListBox()
|
|
|
|
{
|
|
|
|
ImplDestroyColorEntries();
|
|
|
|
delete pColorList;
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 ColorListBox::InsertEntry( const XubString& rStr, sal_uInt16 nPos )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
nPos = ListBox::InsertEntry( rStr, nPos );
|
|
|
|
if ( nPos != LISTBOX_ERROR )
|
|
|
|
{
|
|
|
|
ImplColorListData* pData = new ImplColorListData;
|
2011-02-05 06:23:11 -08:00
|
|
|
if ( nPos < pColorList->size() )
|
|
|
|
{
|
|
|
|
ImpColorList::iterator it = pColorList->begin();
|
|
|
|
::std::advance( it, nPos );
|
|
|
|
pColorList->insert( it, pData );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pColorList->push_back( pData );
|
|
|
|
nPos = pColorList->size() - 1;
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
return nPos;
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 ColorListBox::InsertEntry( const Color& rColor, const XubString& rStr,
|
|
|
|
sal_uInt16 nPos )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
nPos = ListBox::InsertEntry( rStr, nPos );
|
|
|
|
if ( nPos != LISTBOX_ERROR )
|
|
|
|
{
|
|
|
|
ImplColorListData* pData = new ImplColorListData( rColor );
|
2011-02-05 06:23:11 -08:00
|
|
|
if ( nPos < pColorList->size() )
|
|
|
|
{
|
|
|
|
ImpColorList::iterator it = pColorList->begin();
|
|
|
|
::std::advance( it, nPos );
|
|
|
|
pColorList->insert( it, pData );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pColorList->push_back( pData );
|
|
|
|
nPos = pColorList->size() - 1;
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
return nPos;
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2001-03-22 05:44:04 +00:00
|
|
|
void ColorListBox::InsertAutomaticEntry()
|
|
|
|
{
|
|
|
|
// insert the "Automatic"-entry always on the first position
|
|
|
|
InsertEntry( Color( COL_AUTO ), SvtResId( STR_SVT_AUTOMATIC_COLOR ), 0 );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
void ColorListBox::RemoveEntry( sal_uInt16 nPos )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
ListBox::RemoveEntry( nPos );
|
2011-02-05 06:23:11 -08:00
|
|
|
if ( nPos < pColorList->size() )
|
|
|
|
{
|
|
|
|
ImpColorList::iterator it = pColorList->begin();
|
|
|
|
::std::advance( it, nPos );
|
|
|
|
delete *it;
|
|
|
|
pColorList->erase( it );
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void ColorListBox::Clear()
|
|
|
|
{
|
|
|
|
ImplDestroyColorEntries();
|
|
|
|
ListBox::Clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void ColorListBox::CopyEntries( const ColorListBox& rBox )
|
|
|
|
{
|
|
|
|
// Liste leeren
|
|
|
|
ImplDestroyColorEntries();
|
|
|
|
|
|
|
|
// Daten kopieren
|
2011-02-05 06:23:11 -08:00
|
|
|
size_t nCount = rBox.pColorList->size();
|
|
|
|
for ( size_t n = 0; n < nCount; n++ )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2011-02-05 06:23:11 -08:00
|
|
|
ImplColorListData* pData = (*rBox.pColorList)[ n ];
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 nPos = InsertEntry( rBox.GetEntry( n ), LISTBOX_APPEND );
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( nPos != LISTBOX_ERROR )
|
2011-02-05 06:23:11 -08:00
|
|
|
{
|
|
|
|
if ( nPos < pColorList->size() )
|
|
|
|
{
|
|
|
|
ImpColorList::iterator it = pColorList->begin();
|
|
|
|
::std::advance( it, nPos );
|
|
|
|
pColorList->insert( it, new ImplColorListData( *pData ) );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pColorList->push_back( new ImplColorListData( *pData ) );
|
|
|
|
}
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 ColorListBox::GetEntryPos( const Color& rColor ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
Merge commit 'ooo/DEV300_m101' into intm101
The following builds for me:
basebmp, basegfx, comphelper, dtrans, i18npool, i18nutil, l10ntools, o3tl,
psprint_config, regexp, rsc, sax, sot, tools, ucbhelper, unotools, vcl
The rest still needs fixing ;-)
Conflicts:
canvas/prj/build.lst
canvas/source/cairo/cairo_textlayout.cxx
canvas/source/directx/dx_winstuff.hxx
canvas/source/tools/image.cxx
canvas/source/vcl/canvashelper.cxx
comphelper/inc/comphelper/documentconstants.hxx
comphelper/inc/comphelper/optionalvalue.hxx
comphelper/inc/comphelper/querydeep.hxx
comphelper/prj/build.lst
comphelper/qa/complex/makefile.mk
comphelper/qa/string/test_string_noadditional.cxx
comphelper/source/misc/componentmodule.cxx
comphelper/source/misc/mimeconfighelper.cxx
comphelper/source/misc/querydeep.cxx
comphelper/source/misc/uieventslogger.cxx
comphelper/source/property/TypeGeneration.cxx
comphelper/test/uno_iterators/uno_iterators.cxx
comphelper/util/makefile.mk
cppcanvas/source/mtfrenderer/implrenderer.cxx
dtrans/prj/build.lst
dtrans/source/generic/dtrans.cxx
dtrans/source/win32/dtobj/FmtFilter.cxx
i18npool/prj/build.lst
i18npool/source/localedata/data/localedata_others.map
i18npool/source/localedata/data/makefile.mk
i18npool/source/localedata/localedata.cxx
i18npool/source/localedata/saxparser.cxx
i18npool/source/registerservices/registerservices.cxx
i18npool/source/search/textsearch.cxx
l10ntools/inc/cfgmerge.hxx
l10ntools/inc/export.hxx
l10ntools/inc/gsicheck.hxx
l10ntools/inc/l10ntools/vosapp.hxx
l10ntools/inc/tagtest.hxx
l10ntools/inc/xmlparse.hxx
l10ntools/layout/layoutparse.cxx
l10ntools/layout/tralay.cxx
l10ntools/source/cfgmerge.cxx
l10ntools/source/export.cxx
l10ntools/source/export2.cxx
l10ntools/source/gsicheck.cxx
l10ntools/source/help/HelpLinker.cxx
l10ntools/source/lngex.cxx
l10ntools/source/lngmerge.cxx
l10ntools/source/merge.cxx
l10ntools/source/tagtest.cxx
l10ntools/source/xmlparse.cxx
padmin/source/fontentry.cxx
padmin/source/padialog.cxx
padmin/source/padialog.src
padmin/source/pamain.cxx
rsc/inc/rscarray.hxx
rsc/inc/rscclass.hxx
rsc/inc/rscclobj.hxx
rsc/inc/rsccont.hxx
rsc/inc/rscdb.hxx
rsc/inc/rscdef.hxx
rsc/inc/rscmgr.hxx
rsc/inc/rscrange.hxx
rsc/inc/rsctop.hxx
rsc/inc/vclrsc.hxx
rsc/source/parser/rscdb.cxx
rsc/source/parser/rscicpx.cxx
rsc/source/parser/rscinit.cxx
rsc/source/prj/start.cxx
rsc/source/res/rscarray.cxx
rsc/source/res/rscclass.cxx
rsc/source/res/rscclobj.cxx
rsc/source/res/rsccont.cxx
rsc/source/res/rscmgr.cxx
rsc/source/res/rscrange.cxx
rsc/source/res/rsctop.cxx
rsc/source/rsc/rsc.cxx
rsc/source/tools/rscdef.cxx
rsc/source/tools/rsctools.cxx
sax/source/expatwrap/sax_expat.cxx
sax/source/fastparser/facreg.cxx
sax/source/tools/fastserializer.cxx
sot/inc/sot/filelist.hxx
sot/inc/sot/object.hxx
sot/source/base/factory.cxx
sot/source/base/filelist.cxx
sot/source/sdstor/stg.cxx
sot/source/sdstor/stgcache.cxx
sot/source/sdstor/stgole.cxx
sot/source/sdstor/stgstrms.cxx
sot/source/sdstor/storage.cxx
sot/source/sdstor/ucbstorage.cxx
svl/inc/svl/cenumitm.hxx
svl/inc/svl/cintitem.hxx
svl/inc/svl/cntwall.hxx
svl/inc/svl/ctypeitm.hxx
svl/inc/svl/custritm.hxx
svl/inc/svl/dateitem.hxx
svl/inc/svl/filerec.hxx
svl/inc/svl/globalnameitem.hxx
svl/inc/svl/ilstitem.hxx
svl/inc/svl/imageitm.hxx
svl/inc/svl/intitem.hxx
svl/inc/svl/itempool.hxx
svl/inc/svl/itemset.hxx
svl/inc/svl/lckbitem.hxx
svl/inc/svl/poolitem.hxx
svl/inc/svl/ptitem.hxx
svl/inc/svl/rectitem.hxx
svl/inc/svl/sfontitm.hxx
svl/inc/svl/slstitm.hxx
svl/inc/svl/srchitem.hxx
svl/inc/svl/svarray.hxx
svl/inc/svl/svdde.hxx
svl/inc/svl/svstdarr.hxx
svl/inc/svl/szitem.hxx
svl/inc/svl/visitem.hxx
svl/inc/svl/zforlist.hxx
svl/inc/svl/zformat.hxx
svl/prj/build.lst
svl/qa/complex/ConfigItems/helper/ConfigItemTest.cxx
svl/qa/complex/ConfigItems/helper/makefile.mk
svl/qa/makefile.mk
svl/source/filepicker/pickerhelper.cxx
svl/source/filerec/filerec.cxx
svl/source/items/cenumitm.cxx
svl/source/items/cintitem.cxx
svl/source/items/cntwall.cxx
svl/source/items/ctypeitm.cxx
svl/source/items/custritm.cxx
svl/source/items/dateitem.cxx
svl/source/items/globalnameitem.cxx
svl/source/items/ilstitem.cxx
svl/source/items/imageitm.cxx
svl/source/items/intitem.cxx
svl/source/items/itempool.cxx
svl/source/items/itemprop.cxx
svl/source/items/itemset.cxx
svl/source/items/lckbitem.cxx
svl/source/items/poolio.cxx
svl/source/items/poolitem.cxx
svl/source/items/ptitem.cxx
svl/source/items/rectitem.cxx
svl/source/items/slstitm.cxx
svl/source/items/srchitem.cxx
svl/source/items/style.cxx
svl/source/items/szitem.cxx
svl/source/items/visitem.cxx
svl/source/items/whiter.cxx
svl/source/memtools/svarray.cxx
svl/source/misc/PasswordHelper.cxx
svl/source/misc/adrparse.cxx
svl/source/misc/lngmisc.cxx
svl/source/notify/brdcst.cxx
svl/source/notify/listener.cxx
svl/source/notify/listenerbase.cxx
svl/source/numbers/makefile.mk
svl/source/numbers/nbdll.cxx
svl/source/numbers/zforfind.cxx
svl/source/numbers/zforlist.cxx
svl/source/numbers/zformat.cxx
svl/source/numbers/zforscan.cxx
svl/source/passwordcontainer/passwordcontainer.cxx
svl/source/svdde/ddecli.cxx
svl/source/svdde/ddeimp.hxx
svl/source/svdde/ddemlos2.h
svl/source/svdde/ddesvr.cxx
svl/source/undo/undo.cxx
svl/source/uno/registerservices.cxx
svl/util/makefile.mk
svtools/bmpmaker/bmpsum.cxx
svtools/bmpmaker/g2g.cxx
svtools/bmpmaker/makefile.mk
svtools/inc/borderhelper.hxx
svtools/inc/svtools/accessiblefactory.hxx
svtools/inc/svtools/apearcfg.hxx
svtools/inc/svtools/brwbox.hxx
svtools/inc/svtools/ctrlbox.hxx
svtools/inc/svtools/ctrltool.hxx
svtools/inc/svtools/editbrowsebox.hxx
svtools/inc/svtools/ehdl.hxx
svtools/inc/svtools/embedhlp.hxx
svtools/inc/svtools/filter.hxx
svtools/inc/svtools/ivctrl.hxx
svtools/inc/svtools/parhtml.hxx
svtools/inc/svtools/printdlg.hxx
svtools/inc/svtools/rtftoken.h
svtools/inc/svtools/ruler.hxx
svtools/inc/svtools/svicnvw.hxx
svtools/inc/svtools/svlbitm.hxx
svtools/inc/svtools/svlbox.hxx
svtools/inc/svtools/svtreebx.hxx
svtools/inc/svtools/tabbar.hxx
svtools/inc/svtools/table/abstracttablecontrol.hxx
svtools/inc/svtools/taskbar.hxx
svtools/inc/svtools/textview.hxx
svtools/inc/svtools/valueset.hxx
svtools/source/brwbox/brwbox1.cxx
svtools/source/brwbox/brwbox2.cxx
svtools/source/brwbox/datwin.cxx
svtools/source/brwbox/datwin.hxx
svtools/source/brwbox/makefile.mk
svtools/source/config/apearcfg.cxx
svtools/source/config/htmlcfg.cxx
svtools/source/config/menuoptions.cxx
svtools/source/config/miscopt.cxx
svtools/source/contnr/cont_pch.cxx
svtools/source/contnr/ctrdll.cxx
svtools/source/contnr/fileview.cxx
svtools/source/contnr/imivctl1.cxx
svtools/source/contnr/ivctrl.cxx
svtools/source/contnr/makefile.mk
svtools/source/contnr/svcontnr.src
svtools/source/contnr/svicnvw.cxx
svtools/source/contnr/svimpbox.cxx
svtools/source/contnr/svimpicn.cxx
svtools/source/contnr/svlbitm.cxx
svtools/source/contnr/svtreebx.cxx
svtools/source/contnr/templwin.cxx
svtools/source/contnr/templwin.hxx
svtools/source/control/asynclink.cxx
svtools/source/control/ctrlbox.cxx
svtools/source/control/ctrldll.cxx
svtools/source/control/ctrltool.cxx
svtools/source/control/filectrl.cxx
svtools/source/control/filectrl.src
svtools/source/control/headbar.cxx
svtools/source/control/inettbc.cxx
svtools/source/control/makefile.mk
svtools/source/control/prgsbar.cxx
svtools/source/control/roadmap.cxx
svtools/source/control/ruler.cxx
svtools/source/control/scriptedtext.cxx
svtools/source/control/stdmenu.cxx
svtools/source/control/tabbar.cxx
svtools/source/control/taskbar.cxx
svtools/source/control/taskbox.cxx
svtools/source/control/taskmisc.cxx
svtools/source/control/taskstat.cxx
svtools/source/control/valueacc.cxx
svtools/source/control/valueset.cxx
svtools/source/dialogs/addresstemplate.cxx
svtools/source/dialogs/addresstemplate.src
svtools/source/dialogs/colrdlg.src
svtools/source/dialogs/filedlg2.cxx
svtools/source/dialogs/filedlg2.hxx
svtools/source/dialogs/makefile.mk
svtools/source/dialogs/printdlg.cxx
svtools/source/dialogs/printdlg.src
svtools/source/dialogs/propctrl.cxx
svtools/source/dialogs/propctrl.hxx
svtools/source/dialogs/property.cxx
svtools/source/edit/makefile.mk
svtools/source/edit/sychconv.cxx
svtools/source/edit/syntaxhighlight.cxx
svtools/source/edit/textdoc.cxx
svtools/source/edit/texteng.cxx
svtools/source/edit/textundo.cxx
svtools/source/edit/textview.cxx
svtools/source/filter.vcl/filter/SvFilterOptionsDialog.cxx
svtools/source/filter.vcl/filter/dlgejpg.cxx
svtools/source/filter.vcl/filter/dlgejpg.hxx
svtools/source/filter.vcl/filter/dlgejpg.src
svtools/source/filter.vcl/filter/dlgepng.cxx
svtools/source/filter.vcl/filter/dlgepng.hxx
svtools/source/filter.vcl/filter/dlgepng.src
svtools/source/filter.vcl/filter/dlgexpor.cxx
svtools/source/filter.vcl/filter/dlgexpor.hxx
svtools/source/filter.vcl/filter/dlgexpor.src
svtools/source/filter.vcl/filter/filter2.cxx
svtools/source/filter.vcl/filter/makefile.mk
svtools/source/filter.vcl/filter/sgfbram.cxx
svtools/source/filter.vcl/filter/sgvmain.cxx
svtools/source/filter.vcl/filter/sgvspln.cxx
svtools/source/filter.vcl/filter/strings.src
svtools/source/filter.vcl/jpeg/makefile.mk
svtools/source/filter.vcl/wmf/emfwr.cxx
svtools/source/filter.vcl/wmf/emfwr.hxx
svtools/source/filter.vcl/wmf/enhwmf.cxx
svtools/source/filter.vcl/wmf/winmtf.hxx
svtools/source/filter.vcl/wmf/wmfwr.cxx
svtools/source/filter.vcl/wmf/wmfwr.hxx
svtools/source/graphic/grfcache.cxx
svtools/source/graphic/grfcache.hxx
svtools/source/graphic/grfmgr.cxx
svtools/source/graphic/makefile.mk
svtools/source/inc/accessibletableimp.hxx
svtools/source/inc/svimpbox.hxx
svtools/source/java/patchjavaerror.src
svtools/source/misc/ehdl.cxx
svtools/source/misc/errtxt.src
svtools/source/misc/helpagentwindow.cxx
svtools/source/misc/imagemgr.cxx
svtools/source/misc/imagemgr.src
svtools/source/misc/imageresourceaccess.cxx
svtools/source/misc/imap.cxx
svtools/source/misc/langtab.src
svtools/source/misc/makefile.mk
svtools/source/misc/svtdata.cxx
svtools/source/misc/templatefoldercache.cxx
svtools/source/misc/transfer2.cxx
svtools/source/misc/undo.src
svtools/source/plugapp/commtest.cxx
svtools/source/plugapp/commtest.src
svtools/source/plugapp/makefile.mk
svtools/source/plugapp/testtool.src
svtools/source/productregistration/productregistration.cxx
svtools/source/svhtml/htmlkywd.cxx
svtools/source/svhtml/parhtml.cxx
svtools/source/svrtf/rtfkey2.cxx
svtools/source/svrtf/rtfkeywd.cxx
svtools/source/table/defaultinputhandler.cxx
svtools/source/table/makefile.mk
svtools/source/table/tablecontrol.cxx
svtools/source/table/tablecontrol_impl.cxx
svtools/source/table/tablecontrol_impl.hxx
svtools/source/table/tabledatawindow.cxx
svtools/source/table/tablegeometry.cxx
svtools/source/table/tablegeometry.hxx
svtools/source/toolpanel/makefile.mk
svtools/source/toolpanel/toolpaneldrawer.cxx
svtools/source/uno/addrtempuno.cxx
svtools/source/uno/miscservices.cxx
svtools/source/uno/svtxgridcontrol.cxx
svtools/source/uno/svtxgridcontrol.hxx
svtools/source/uno/toolboxcontroller.cxx
svtools/source/uno/treecontrolpeer.cxx
svtools/source/uno/unocontroltablemodel.cxx
svtools/source/uno/unocontroltablemodel.hxx
svtools/source/uno/unoimap.cxx
svtools/source/urlobj/inetimg.cxx
svtools/util/makefile.mk
svtools/workben/browser.cxx
svtools/workben/cui/makefile.mk
svtools/workben/makefile.mk
svtools/workben/stest.cxx
svtools/workben/toolpanel/makefile.mk
svtools/workben/urange.cxx
toolkit/inc/toolkit/awt/vclxdevice.hxx
toolkit/inc/toolkit/awt/vclxgraphics.hxx
toolkit/inc/toolkit/awt/vclxwindows.hxx
toolkit/inc/toolkit/controls/dialogcontrol.hxx
toolkit/inc/toolkit/helper/property.hxx
toolkit/inc/toolkit/helper/servicenames.hxx
toolkit/inc/toolkit/helper/throbberimpl.hxx
toolkit/qa/complex/toolkit/accessibility/_XAccessibleComponent.java
toolkit/source/awt/asynccallback.cxx
toolkit/source/awt/vclxgraphics.cxx
toolkit/source/awt/vclxtoolkit.cxx
toolkit/source/awt/vclxwindow.cxx
toolkit/source/awt/xsimpleanimation.cxx
toolkit/source/awt/xthrobber.cxx
toolkit/source/controls/dialogcontrol.cxx
toolkit/source/controls/grid/defaultgridcolumnmodel.cxx
toolkit/source/controls/grid/defaultgriddatamodel.cxx
toolkit/source/controls/grid/gridcontrol.cxx
toolkit/source/controls/grid/initguard.hxx
toolkit/source/controls/unocontrol.cxx
toolkit/source/controls/unocontrolcontainer.cxx
toolkit/source/controls/unocontrols.cxx
toolkit/source/helper/listenermultiplexer.cxx
toolkit/source/helper/property.cxx
toolkit/source/helper/registerservices.cxx
toolkit/source/helper/servicenames.cxx
toolkit/source/helper/throbberimpl.cxx
toolkit/source/helper/tkresmgr.cxx
tools/StaticLibrary_ooopathutils.mk
tools/bootstrp/addexes/makefile.mk
tools/bootstrp/addexes2/makefile.mk
tools/bootstrp/addexes2/mkfilt.cxx
tools/bootstrp/command.cxx
tools/bootstrp/cppdep.cxx
tools/bootstrp/iserver.cxx
tools/bootstrp/makefile.mk
tools/bootstrp/mkcreate.cxx
tools/bootstrp/prj.cxx
tools/bootstrp/rscdep.cxx
tools/bootstrp/sstring.cxx
tools/inc/bootstrp/command.hxx
tools/inc/bootstrp/mkcreate.hxx
tools/inc/bootstrp/prj.hxx
tools/inc/bootstrp/sstring.hxx
tools/inc/tools/agapi.hxx
tools/inc/tools/agitem.hxx
tools/inc/tools/chapi.hxx
tools/inc/tools/download.hxx
tools/inc/tools/eacopier.hxx
tools/inc/tools/fract.hxx
tools/inc/tools/fsys.hxx
tools/inc/tools/geninfo.hxx
tools/inc/tools/globname.hxx
tools/inc/tools/inetmime.hxx
tools/inc/tools/multisel.hxx
tools/inc/tools/poly.hxx
tools/inc/tools/postsys.h
tools/inc/tools/postwin.h
tools/inc/tools/presys.h
tools/inc/tools/prewin.h
tools/inc/tools/pstm.hxx
tools/inc/tools/ref.hxx
tools/inc/tools/simplerm.hxx
tools/inc/tools/solar.h
tools/inc/tools/table.hxx
tools/inc/tools/urlkeys.hxx
tools/inc/tools/urlobj.hxx
tools/prj/build.lst
tools/prj/d.lst
tools/qa/makefile.mk
tools/source/communi/geninfo.cxx
tools/source/debug/debug.cxx
tools/source/fsys/dirent.cxx
tools/source/fsys/tdir.cxx
tools/source/fsys/unx.cxx
tools/source/fsys/urlobj.cxx
tools/source/generic/color.cxx
tools/source/generic/config.cxx
tools/source/generic/fract.cxx
tools/source/inet/inetmime.cxx
tools/source/memtools/multisel.cxx
tools/source/memtools/table.cxx
tools/source/rc/resmgr.cxx
tools/source/ref/globname.cxx
tools/source/ref/pstm.cxx
tools/source/solar/solar.c
tools/source/stream/strmos2.cxx
tools/source/stream/strmunx.cxx
tools/source/stream/strmwnt.cxx
tools/source/string/makefile.mk
tools/source/testtoolloader/testtoolloader.cxx
tools/test/makefile.mk
tools/util/makefile.mk
tools/win/inc/dll.hxx
tools/win/inc/parser.hxx
tools/win/inc/shellex.h
tools/win/inc/shutil.h
tools/win/inc/toolsdll.hxx
tools/win/inc/winshell.hxx
tools/workben/makefile.mk
ucbhelper/source/client/proxydecider.cxx
ucbhelper/workben/ucbexplorer/ucbexplorer.hrc
unotools/inc/unotools/unotunnelhelper.hxx
unotools/source/config/fltrcfg.cxx
unotools/source/config/lingucfg.cxx
unotools/source/config/misccfg.cxx
unotools/source/config/pathoptions.cxx
unotools/source/config/searchopt.cxx
unotools/source/i18n/localedatawrapper.cxx
unotools/source/ucbhelper/localfilehelper.cxx
unotools/source/ucbhelper/ucbhelper.cxx
unotools/source/ucbhelper/xtempfile.cxx
vcl/aqua/inc/salbmp.h
vcl/aqua/inc/salgdi.h
vcl/aqua/inc/salinst.h
vcl/aqua/source/app/salinst.cxx
vcl/aqua/source/gdi/aquaprintaccessoryview.mm
vcl/aqua/source/gdi/salgdi.cxx
vcl/aqua/source/gdi/salprn.cxx
vcl/aqua/source/window/salframeview.mm
vcl/aqua/source/window/salobj.cxx
vcl/inc/vcl/bitmap.hxx
vcl/inc/vcl/brdwin.hxx
vcl/inc/vcl/button.hxx
vcl/inc/vcl/cmdevt.hxx
vcl/inc/vcl/cvtgrf.hxx
vcl/inc/vcl/dialog.hxx
vcl/inc/vcl/dockwin.hxx
vcl/inc/vcl/event.hxx
vcl/inc/vcl/fixed.hxx
vcl/inc/vcl/fldunit.hxx
vcl/inc/vcl/floatwin.hxx
vcl/inc/vcl/gdimtf.hxx
vcl/inc/vcl/glyphcache.hxx
vcl/inc/vcl/graphite_adaptors.hxx
vcl/inc/vcl/graphite_features.hxx
vcl/inc/vcl/graphite_layout.hxx
vcl/inc/vcl/ilstbox.hxx
vcl/inc/vcl/image.h
vcl/inc/vcl/imgctrl.hxx
vcl/inc/vcl/impbmpconv.hxx
vcl/inc/vcl/impprn.hxx
vcl/inc/vcl/jobset.h
vcl/inc/vcl/keycodes.hxx
vcl/inc/vcl/lstbox.hxx
vcl/inc/vcl/mapunit.hxx
vcl/inc/vcl/menu.hxx
vcl/inc/vcl/msgbox.hxx
vcl/inc/vcl/outdev.hxx
vcl/inc/vcl/prndlg.hxx
vcl/inc/vcl/salatype.hxx
vcl/inc/vcl/salbmp.hxx
vcl/inc/vcl/salgdi.hxx
vcl/inc/vcl/salinst.hxx
vcl/inc/vcl/seleng.hxx
vcl/inc/vcl/settings.hxx
vcl/inc/vcl/smartid.hxx
vcl/inc/vcl/status.hxx
vcl/inc/vcl/strhelper.hxx
vcl/inc/vcl/svapp.hxx
vcl/inc/vcl/svdata.hxx
vcl/inc/vcl/syschild.hxx
vcl/inc/vcl/sysdata.hxx
vcl/inc/vcl/taskpanelist.hxx
vcl/inc/vcl/toolbox.hxx
vcl/inc/vcl/vclevent.hxx
vcl/inc/vcl/windata.hxx
vcl/inc/vcl/window.hxx
vcl/inc/vcl/wintypes.hxx
vcl/os2/source/app/salinst.cxx
vcl/os2/source/gdi/salgdi.cxx
vcl/os2/source/window/salmenu.cxx
vcl/os2/source/window/salobj.cxx
vcl/prj/build.lst
vcl/source/app/dbggui.cxx
vcl/source/app/help.cxx
vcl/source/app/idlemgr.cxx
vcl/source/app/settings.cxx
vcl/source/app/svapp.cxx
vcl/source/app/svdata.cxx
vcl/source/app/svmain.cxx
vcl/source/app/svmainhook.cxx
vcl/source/app/unohelp.cxx
vcl/source/app/vclevent.cxx
vcl/source/control/button.cxx
vcl/source/control/combobox.cxx
vcl/source/control/edit.cxx
vcl/source/control/field.cxx
vcl/source/control/fixed.cxx
vcl/source/control/ilstbox.cxx
vcl/source/control/imgctrl.cxx
vcl/source/control/makefile.mk
vcl/source/control/tabctrl.cxx
vcl/source/gdi/bitmap.cxx
vcl/source/gdi/bitmap2.cxx
vcl/source/gdi/bitmap4.cxx
vcl/source/gdi/bmpconv.cxx
vcl/source/gdi/cvtsvm.cxx
vcl/source/gdi/font.cxx
vcl/source/gdi/gdimtf.cxx
vcl/source/gdi/image.cxx
vcl/source/gdi/impimage.cxx
vcl/source/gdi/jobset.cxx
vcl/source/gdi/makefile.mk
vcl/source/gdi/metaact.cxx
vcl/source/gdi/outdev.cxx
vcl/source/gdi/outdev3.cxx
vcl/source/gdi/outdev4.cxx
vcl/source/gdi/outdevnative.cxx
vcl/source/gdi/pdfwriter.cxx
vcl/source/gdi/pdfwriter_impl.cxx
vcl/source/gdi/print3.cxx
vcl/source/gdi/salmisc.cxx
vcl/source/glyphs/gcach_ftyp.cxx
vcl/source/glyphs/gcach_ftyp.hxx
vcl/source/glyphs/glyphcache.cxx
vcl/source/glyphs/graphite_cache.cxx
vcl/source/glyphs/graphite_layout.cxx
vcl/source/glyphs/graphite_textsrc.hxx
vcl/source/helper/canvasbitmap.cxx
vcl/source/helper/smartid.cxx
vcl/source/helper/xconnection.cxx
vcl/source/src/btntext.src
vcl/source/src/images.src
vcl/source/src/print.src
vcl/source/window/accel.cxx
vcl/source/window/accmgr.cxx
vcl/source/window/brdwin.cxx
vcl/source/window/btndlg.cxx
vcl/source/window/dlgctrl.cxx
vcl/source/window/javachild.cxx
vcl/source/window/menu.cxx
vcl/source/window/msgbox.cxx
vcl/source/window/printdlg.cxx
vcl/source/window/status.cxx
vcl/source/window/syschild.cxx
vcl/source/window/toolbox.cxx
vcl/source/window/toolbox2.cxx
vcl/source/window/window.cxx
vcl/source/window/window2.cxx
vcl/source/window/wrkwin.cxx
vcl/unx/gtk/app/gtkdata.cxx
vcl/unx/gtk/app/gtkinst.cxx
vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
vcl/unx/gtk/window/gtkframe.cxx
vcl/unx/gtk/window/gtkobject.cxx
vcl/unx/headless/svpbmp.hxx
vcl/unx/headless/svpgdi.cxx
vcl/unx/headless/svpgdi.hxx
vcl/unx/headless/svpinst.cxx
vcl/unx/headless/svpinst.hxx
vcl/unx/headless/svpprn.cxx
vcl/unx/headless/svpprn.hxx
vcl/unx/headless/svppspgraphics.cxx
vcl/unx/headless/svppspgraphics.hxx
vcl/unx/headless/svptext.cxx
vcl/unx/inc/dtint.hxx
vcl/unx/inc/plugins/gtk/gtkdata.hxx
vcl/unx/inc/pspgraphics.h
vcl/unx/inc/salbmp.h
vcl/unx/inc/saldata.hxx
vcl/unx/inc/saldisp.hxx
vcl/unx/inc/salgdi.h
vcl/unx/inc/salinst.h
vcl/unx/inc/xfont.hxx
vcl/unx/kde/kdedata.cxx
vcl/unx/kde4/KDESalGraphics.cxx
vcl/unx/source/app/keysymnames.cxx
vcl/unx/source/app/saldata.cxx
vcl/unx/source/app/saldisp.cxx
vcl/unx/source/app/salinst.cxx
vcl/unx/source/app/wmadaptor.cxx
vcl/unx/source/dtrans/X11_selection.cxx
vcl/unx/source/dtrans/X11_service.cxx
vcl/unx/source/gdi/makefile.mk
vcl/unx/source/gdi/pspgraphics.cxx
vcl/unx/source/gdi/salgdi.cxx
vcl/unx/source/gdi/salgdi3.cxx
vcl/unx/source/gdi/salprnpsp.cxx
vcl/unx/source/gdi/xfont.cxx
vcl/unx/source/gdi/xlfd_attr.cxx
vcl/unx/source/gdi/xlfd_attr.hxx
vcl/unx/source/gdi/xlfd_extd.cxx
vcl/unx/source/gdi/xlfd_extd.hxx
vcl/unx/source/gdi/xlfd_smpl.cxx
vcl/unx/source/gdi/xlfd_smpl.hxx
vcl/unx/source/printer/ppdparser.cxx
vcl/unx/source/printer/printerinfomanager.cxx
vcl/unx/source/window/salframe.cxx
vcl/unx/source/window/salmenu.cxx
vcl/unx/source/window/salobj.cxx
vcl/util/makefile2.pmk
vcl/win/inc/salbmp.h
vcl/win/inc/saldata.hxx
vcl/win/inc/salgdi.h
vcl/win/inc/salinst.h
vcl/win/source/app/saldata.cxx
vcl/win/source/app/salinst.cxx
vcl/win/source/gdi/salgdi.cxx
vcl/win/source/gdi/salgdi3.cxx
vcl/win/source/gdi/salprn.cxx
vcl/win/source/gdi/winlayout.cxx
vcl/win/source/window/salframe.cxx
vcl/win/source/window/salobj.cxx
vcl/workben/outdevgrind.cxx
vos/inc/vos/execabl.hxx
vos/inc/vos/macros.hxx
vos/inc/vos/pipe.hxx
vos/inc/vos/process.hxx
vos/inc/vos/refernce.hxx
vos/inc/vos/signal.hxx
vos/inc/vos/socket.hxx
vos/inc/vos/stream.hxx
vos/inc/vos/thread.hxx
vos/source/pipe.cxx
vos/source/process.cxx
vos/source/signal.cxx
vos/source/thread.cxx
vos/source/timer.cxx
2011-03-11 14:24:23 +01:00
|
|
|
for( sal_uInt16 n = (sal_uInt16) pColorList->size(); n; )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2011-02-05 06:23:11 -08:00
|
|
|
ImplColorListData* pData = (*pColorList)[ --n ];
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( pData->bColor && ( pData->aColor == rColor ) )
|
|
|
|
return n;
|
|
|
|
}
|
|
|
|
return LISTBOX_ENTRY_NOTFOUND;
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
Color ColorListBox::GetEntryColor( sal_uInt16 nPos ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
Color aColor;
|
2011-02-05 06:23:11 -08:00
|
|
|
ImplColorListData* pData = ( nPos < pColorList->size() ) ? (*pColorList)[ nPos ] : NULL;
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( pData && pData->bColor )
|
|
|
|
aColor = pData->aColor;
|
|
|
|
return aColor;
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void ColorListBox::UserDraw( const UserDrawEvent& rUDEvt )
|
|
|
|
{
|
2011-02-05 06:23:11 -08:00
|
|
|
size_t nPos = rUDEvt.GetItemId();
|
|
|
|
ImplColorListData* pData = ( nPos < pColorList->size() ) ? (*pColorList)[ nPos ] : NULL;
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( pData )
|
|
|
|
{
|
|
|
|
if ( pData->bColor )
|
|
|
|
{
|
|
|
|
Point aPos( rUDEvt.GetRect().TopLeft() );
|
|
|
|
aPos.X() += 2;
|
|
|
|
aPos.Y() += ( rUDEvt.GetRect().GetHeight() - aImageSize.Height() ) / 2;
|
|
|
|
rUDEvt.GetDevice()->Push();
|
|
|
|
rUDEvt.GetDevice()->SetFillColor( pData->aColor );
|
2002-07-19 10:10:38 +00:00
|
|
|
rUDEvt.GetDevice()->SetLineColor( rUDEvt.GetDevice()->GetTextColor() );
|
2000-09-18 16:07:07 +00:00
|
|
|
rUDEvt.GetDevice()->DrawRect( Rectangle( aPos, aImageSize ) );
|
|
|
|
rUDEvt.GetDevice()->Pop();
|
2010-11-05 10:31:15 +08:00
|
|
|
ListBox::DrawEntry( rUDEvt, sal_False, sal_True, sal_False );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
else
|
2010-11-05 10:31:15 +08:00
|
|
|
ListBox::DrawEntry( rUDEvt, sal_False, sal_True, sal_True );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
else
|
2010-11-05 10:31:15 +08:00
|
|
|
ListBox::DrawEntry( rUDEvt, sal_True, sal_True, sal_False );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// =======================================================================
|
|
|
|
// LineListBox
|
|
|
|
// =======================================================================
|
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
BorderWidthImpl::BorderWidthImpl( sal_uInt16 nFlags, double nRate1, double nRate2, double nRateGap ):
|
|
|
|
m_nFlags( nFlags ),
|
|
|
|
m_nRate1( nRate1 ),
|
|
|
|
m_nRate2( nRate2 ),
|
|
|
|
m_nRateGap( nRateGap )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
BorderWidthImpl& BorderWidthImpl::operator= ( const BorderWidthImpl& r )
|
|
|
|
{
|
|
|
|
m_nFlags = r.m_nFlags;
|
|
|
|
m_nRate1 = r.m_nRate1;
|
|
|
|
m_nRate2 = r.m_nRate2;
|
|
|
|
m_nRateGap = r.m_nRateGap;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool BorderWidthImpl::operator== ( const BorderWidthImpl& r ) const
|
|
|
|
{
|
|
|
|
return ( m_nFlags == r.m_nFlags ) &&
|
|
|
|
( m_nRate1 == r.m_nRate1 ) &&
|
|
|
|
( m_nRate2 == r.m_nRate2 ) &&
|
|
|
|
( m_nRateGap == r.m_nRateGap );
|
|
|
|
}
|
|
|
|
|
|
|
|
long BorderWidthImpl::GetLine1( long nWidth ) const
|
|
|
|
{
|
|
|
|
long result = m_nRate1;
|
|
|
|
if ( ( m_nFlags & CHANGE_LINE1 ) > 0 )
|
|
|
|
result = m_nRate1 * nWidth;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
long BorderWidthImpl::GetLine2( long nWidth ) const
|
|
|
|
{
|
|
|
|
long result = m_nRate2;
|
|
|
|
if ( ( m_nFlags & CHANGE_LINE2 ) > 0 )
|
|
|
|
result = m_nRate2 * nWidth;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
long BorderWidthImpl::GetGap( long nWidth ) const
|
|
|
|
{
|
|
|
|
long result = m_nRateGap;
|
|
|
|
if ( ( m_nFlags & CHANGE_DIST ) > 0 )
|
|
|
|
result = m_nRateGap * nWidth;
|
|
|
|
|
2011-01-20 15:22:49 +01:00
|
|
|
// Avoid having too small distances (less than 1pt)
|
|
|
|
if ( result < 20 && m_nRate1 > 0 && m_nRate2 > 0 )
|
|
|
|
result = 20;
|
2011-01-06 15:58:56 +01:00
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
double lcl_getGuessedWidth( long nTested, double nRate, bool nChanging )
|
|
|
|
{
|
2011-01-07 13:40:45 +01:00
|
|
|
double nWidth = -1.0;
|
2011-01-06 15:58:56 +01:00
|
|
|
if ( nChanging )
|
|
|
|
nWidth = double( nTested ) / nRate;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if ( double( nTested ) == nRate )
|
|
|
|
nWidth = nRate;
|
|
|
|
}
|
|
|
|
|
|
|
|
return nWidth;
|
|
|
|
}
|
|
|
|
|
|
|
|
long BorderWidthImpl::GuessWidth( long nLine1, long nLine2, long nGap )
|
|
|
|
{
|
|
|
|
std::vector< double > aToCompare;
|
|
|
|
bool bInvalid = false;
|
|
|
|
|
|
|
|
bool bLine1Change = ( m_nFlags & CHANGE_LINE1 ) > 0;
|
|
|
|
double nWidth1 = lcl_getGuessedWidth( nLine1, m_nRate1, bLine1Change );
|
|
|
|
if ( bLine1Change )
|
|
|
|
aToCompare.push_back( nWidth1 );
|
2011-01-07 13:40:45 +01:00
|
|
|
else if ( !bLine1Change && nWidth1 < 0 )
|
2011-01-06 15:58:56 +01:00
|
|
|
bInvalid = true;
|
|
|
|
|
|
|
|
bool bLine2Change = ( m_nFlags & CHANGE_LINE2 ) > 0;
|
|
|
|
double nWidth2 = lcl_getGuessedWidth( nLine2, m_nRate2, bLine2Change );
|
|
|
|
if ( bLine2Change )
|
|
|
|
aToCompare.push_back( nWidth2 );
|
2011-01-07 13:40:45 +01:00
|
|
|
else if ( !bLine2Change && nWidth2 < 0 )
|
2011-01-06 15:58:56 +01:00
|
|
|
bInvalid = true;
|
|
|
|
|
|
|
|
bool bGapChange = ( m_nFlags & CHANGE_DIST ) > 0;
|
|
|
|
double nWidthGap = lcl_getGuessedWidth( nGap, m_nRateGap, bGapChange );
|
2011-01-20 15:22:49 +01:00
|
|
|
if ( bGapChange && nGap > 20 )
|
2011-01-06 15:58:56 +01:00
|
|
|
aToCompare.push_back( nWidthGap );
|
2011-01-07 13:40:45 +01:00
|
|
|
else if ( !bGapChange && nWidthGap < 0 )
|
2011-01-06 15:58:56 +01:00
|
|
|
bInvalid = true;
|
|
|
|
|
|
|
|
double nWidth = 0.0;
|
|
|
|
if ( !bInvalid && aToCompare.size() > 0 )
|
|
|
|
{
|
|
|
|
nWidth = *aToCompare.begin();
|
|
|
|
std::vector< double >::iterator pIt = aToCompare.begin();
|
|
|
|
while ( pIt != aToCompare.end() && !bInvalid )
|
|
|
|
{
|
|
|
|
bInvalid = ( nWidth != *pIt );
|
2011-04-19 10:29:42 +01:00
|
|
|
++pIt;
|
2011-01-06 15:58:56 +01:00
|
|
|
}
|
|
|
|
if ( bInvalid )
|
|
|
|
nWidth = 0.0;
|
|
|
|
}
|
|
|
|
|
|
|
|
return long( nWidth );
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
/** Utility class storing the border line width, style and colors. The widths
|
|
|
|
are defined in Twips.
|
|
|
|
*/
|
|
|
|
class ImpLineListData
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2011-01-06 15:58:56 +01:00
|
|
|
private:
|
|
|
|
BorderWidthImpl m_aWidthImpl;
|
|
|
|
|
|
|
|
Color ( *m_pColor1Fn )( Color );
|
|
|
|
Color ( *m_pColor2Fn )( Color );
|
|
|
|
Color ( *m_pColorDistFn )( Color, Color );
|
|
|
|
|
|
|
|
long m_nMinWidth;
|
|
|
|
sal_uInt16 m_nStyle;
|
|
|
|
|
|
|
|
public:
|
|
|
|
ImpLineListData( BorderWidthImpl aWidthImpl, sal_uInt16 nStyle,
|
|
|
|
long nMinWidth=0, Color ( *pColor1Fn ) ( Color ) = &sameColor,
|
|
|
|
Color ( *pColor2Fn ) ( Color ) = &sameColor, Color ( *pColorDistFn ) ( Color, Color ) = &sameDistColor );
|
|
|
|
|
|
|
|
/** Returns the computed width of the line 1 in twips. */
|
|
|
|
long GetLine1ForWidth( long nWidth ) { return m_aWidthImpl.GetLine1( nWidth ); }
|
|
|
|
|
|
|
|
/** Returns the computed width of the line 2 in twips. */
|
|
|
|
long GetLine2ForWidth( long nWidth ) { return m_aWidthImpl.GetLine2( nWidth ); }
|
|
|
|
|
|
|
|
/** Returns the computed width of the gap in twips. */
|
|
|
|
long GetDistForWidth( long nWidth ) { return m_aWidthImpl.GetGap( nWidth ); }
|
|
|
|
|
|
|
|
Color GetColorLine1( const Color& aMain );
|
|
|
|
Color GetColorLine2( const Color& aMain );
|
|
|
|
Color GetColorDist( const Color& aMain, const Color& rDefault );
|
|
|
|
|
|
|
|
/** Returns the minimum width in twips */
|
|
|
|
long GetMinWidth( );
|
|
|
|
sal_uInt16 GetStyle( );
|
2000-09-18 16:07:07 +00:00
|
|
|
};
|
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
ImpLineListData::ImpLineListData( BorderWidthImpl aWidthImpl,
|
|
|
|
sal_uInt16 nStyle, long nMinWidth, Color ( *pColor1Fn )( Color ),
|
|
|
|
Color ( *pColor2Fn )( Color ), Color ( *pColorDistFn )( Color, Color ) ) :
|
|
|
|
m_aWidthImpl( aWidthImpl ),
|
|
|
|
m_pColor1Fn( pColor1Fn ),
|
|
|
|
m_pColor2Fn( pColor2Fn ),
|
|
|
|
m_pColorDistFn( pColorDistFn ),
|
|
|
|
m_nMinWidth( nMinWidth ),
|
|
|
|
m_nStyle( nStyle )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
long ImpLineListData::GetMinWidth( )
|
|
|
|
{
|
|
|
|
return m_nMinWidth;
|
|
|
|
}
|
|
|
|
|
|
|
|
Color ImpLineListData::GetColorLine1( const Color& rMain )
|
|
|
|
{
|
|
|
|
return ( *m_pColor1Fn )( rMain );
|
|
|
|
}
|
|
|
|
|
|
|
|
Color ImpLineListData::GetColorLine2( const Color& rMain )
|
|
|
|
{
|
|
|
|
return ( *m_pColor2Fn )( rMain );
|
|
|
|
}
|
|
|
|
|
|
|
|
Color ImpLineListData::GetColorDist( const Color& rMain, const Color& rDefault )
|
|
|
|
{
|
|
|
|
return ( *m_pColorDistFn )( rMain, rDefault );
|
|
|
|
}
|
|
|
|
|
|
|
|
sal_uInt16 LineListBox::GetSelectEntryStyle( sal_uInt16 nSelIndex ) const
|
|
|
|
{
|
|
|
|
sal_uInt16 nStyle = STYLE_SOLID;
|
|
|
|
sal_uInt16 nPos = GetSelectEntryPos( nSelIndex );
|
|
|
|
if ( nPos != LISTBOX_ENTRY_NOTFOUND )
|
|
|
|
{
|
|
|
|
if ( m_sNone.Len( ) > 0 )
|
|
|
|
nPos--;
|
|
|
|
nStyle = GetEntryStyle( nPos );
|
|
|
|
}
|
|
|
|
|
|
|
|
return nStyle;
|
|
|
|
}
|
|
|
|
|
|
|
|
sal_uInt16 ImpLineListData::GetStyle( )
|
|
|
|
{
|
|
|
|
return m_nStyle;
|
|
|
|
}
|
|
|
|
|
2002-07-19 08:43:19 +00:00
|
|
|
// -----------------------------------------------------------------------
|
2006-05-04 13:25:27 +00:00
|
|
|
|
2010-11-06 19:24:28 +01:00
|
|
|
void lclDrawPolygon( OutputDevice& rDev, const basegfx::B2DPolygon& rPolygon, long nWidth, sal_uInt16 nDashing )
|
2010-10-06 23:53:00 +02:00
|
|
|
{
|
2011-03-11 18:04:44 +00:00
|
|
|
sal_uInt16 nOldAA = rDev.GetAntialiasing();
|
2010-10-06 23:53:00 +02:00
|
|
|
rDev.SetAntialiasing( nOldAA & !ANTIALIASING_ENABLE_B2DDRAW );
|
|
|
|
|
|
|
|
basegfx::B2DPolyPolygon aPolygons = svtools::ApplyLineDashing( rPolygon, nDashing, rDev.GetMapMode().GetMapUnit() );
|
|
|
|
for ( sal_uInt32 i = 0; i < aPolygons.count( ); i++ )
|
|
|
|
{
|
|
|
|
basegfx::B2DPolygon aDash = aPolygons.getB2DPolygon( i );
|
|
|
|
basegfx::B2DPoint aStart = aDash.getB2DPoint( 0 );
|
|
|
|
basegfx::B2DPoint aEnd = aDash.getB2DPoint( aDash.count() - 1 );
|
|
|
|
|
|
|
|
basegfx::B2DVector aVector( aEnd - aStart );
|
|
|
|
aVector.normalize( );
|
|
|
|
const basegfx::B2DVector aPerpendicular(basegfx::getPerpendicular(aVector));
|
|
|
|
|
2010-11-06 19:24:28 +01:00
|
|
|
// Handle problems of width 1px in Pixel mode: 0.5px gives a 1px line
|
|
|
|
long nPix = rDev.PixelToLogic( Size( 0, 1 ) ).Height();
|
|
|
|
if ( rDev.GetMapMode().GetMapUnit() == MAP_PIXEL && nWidth == nPix )
|
|
|
|
nWidth = 0;
|
|
|
|
|
|
|
|
const basegfx::B2DVector aWidthOffset( double( nWidth ) / 2 * aPerpendicular);
|
2010-10-06 23:53:00 +02:00
|
|
|
basegfx::B2DPolygon aDashPolygon;
|
|
|
|
aDashPolygon.append( aStart + aWidthOffset );
|
|
|
|
aDashPolygon.append( aEnd + aWidthOffset );
|
|
|
|
aDashPolygon.append( aEnd - aWidthOffset );
|
|
|
|
aDashPolygon.append( aStart - aWidthOffset );
|
|
|
|
aDashPolygon.setClosed( true );
|
|
|
|
|
|
|
|
rDev.DrawPolygon( aDashPolygon );
|
|
|
|
}
|
|
|
|
|
|
|
|
rDev.SetAntialiasing( nOldAA );
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace svtools
|
|
|
|
{
|
2010-11-06 19:24:28 +01:00
|
|
|
std::vector < double > GetDashing( sal_uInt16 nDashing, MapUnit eUnit )
|
2010-10-06 23:53:00 +02:00
|
|
|
{
|
|
|
|
::std::vector < double >aPattern;
|
|
|
|
switch ( nDashing )
|
|
|
|
{
|
|
|
|
case STYLE_DOTTED:
|
|
|
|
if ( eUnit == MAP_TWIP )
|
|
|
|
{
|
|
|
|
aPattern.push_back( 30.0 );
|
|
|
|
aPattern.push_back( 110.0 );
|
|
|
|
}
|
|
|
|
else if ( eUnit == MAP_100TH_MM )
|
|
|
|
{
|
|
|
|
aPattern.push_back( 50 );
|
|
|
|
aPattern.push_back( 200 );
|
|
|
|
}
|
|
|
|
else if ( eUnit == MAP_PIXEL )
|
|
|
|
{
|
|
|
|
aPattern.push_back( 1.0 );
|
|
|
|
aPattern.push_back( 3.0 );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case STYLE_DASHED:
|
|
|
|
if ( eUnit == MAP_TWIP )
|
|
|
|
{
|
|
|
|
aPattern.push_back( 110 );
|
|
|
|
aPattern.push_back( 110 );
|
|
|
|
}
|
|
|
|
else if ( eUnit == MAP_100TH_MM )
|
|
|
|
{
|
|
|
|
aPattern.push_back( 200 );
|
|
|
|
aPattern.push_back( 200 );
|
|
|
|
}
|
|
|
|
else if ( eUnit == MAP_PIXEL )
|
|
|
|
{
|
|
|
|
aPattern.push_back( 10 );
|
|
|
|
aPattern.push_back( 20 );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2010-11-06 19:24:28 +01:00
|
|
|
return aPattern;
|
|
|
|
}
|
|
|
|
|
|
|
|
basegfx::B2DPolyPolygon ApplyLineDashing( const basegfx::B2DPolygon& rPolygon, sal_uInt16 nDashing, MapUnit eUnit )
|
|
|
|
{
|
|
|
|
std::vector< double > aPattern = GetDashing( nDashing, eUnit );
|
2010-10-06 23:53:00 +02:00
|
|
|
basegfx::B2DPolyPolygon aPolygons;
|
|
|
|
if ( ! aPattern.empty() )
|
|
|
|
basegfx::tools::applyLineDashing( rPolygon, aPattern, &aPolygons );
|
|
|
|
else
|
|
|
|
aPolygons.append( rPolygon );
|
|
|
|
|
|
|
|
return aPolygons;
|
|
|
|
}
|
|
|
|
|
|
|
|
void DrawLine( OutputDevice& rDev, const Point& rP1, const Point& rP2,
|
2011-03-11 18:04:44 +00:00
|
|
|
sal_uInt32 nWidth, sal_uInt16 nDashing )
|
2010-11-06 19:24:28 +01:00
|
|
|
{
|
|
|
|
DrawLine( rDev, basegfx::B2DPoint( rP1.X(), rP1.Y() ),
|
|
|
|
basegfx::B2DPoint( rP2.X(), rP2.Y( ) ), nWidth, nDashing );
|
|
|
|
}
|
|
|
|
|
|
|
|
void DrawLine( OutputDevice& rDev, const basegfx::B2DPoint& rP1, const basegfx::B2DPoint& rP2,
|
|
|
|
sal_uInt32 nWidth, sal_uInt16 nDashing )
|
2010-10-06 23:53:00 +02:00
|
|
|
{
|
|
|
|
basegfx::B2DPolygon aPolygon;
|
2010-11-06 19:24:28 +01:00
|
|
|
aPolygon.append( rP1 );
|
|
|
|
aPolygon.append( rP2 );
|
2010-10-06 23:53:00 +02:00
|
|
|
lclDrawPolygon( rDev, aPolygon, nWidth, nDashing );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
void LineListBox::ImpGetLine( long nLine1, long nLine2, long nDistance,
|
2010-11-06 19:24:28 +01:00
|
|
|
Color aColor1, Color aColor2, Color aColorDist,
|
2011-01-11 20:44:15 +01:00
|
|
|
sal_uInt16 nStyle, Bitmap& rBmp )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
Size aSize = GetOutputSizePixel();
|
|
|
|
aSize.Width() -= 20;
|
|
|
|
aSize.Width() -= aTxtSize.Width();
|
|
|
|
aSize.Height() = aTxtSize.Height();
|
|
|
|
|
|
|
|
// SourceUnit nach Twips
|
|
|
|
if ( eSourceUnit == FUNIT_POINT )
|
|
|
|
{
|
2011-01-06 15:58:56 +01:00
|
|
|
nLine1 /= 5;
|
|
|
|
nLine2 /= 5;
|
|
|
|
nDistance /= 5;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Linien malen
|
|
|
|
aSize = aVirDev.PixelToLogic( aSize );
|
|
|
|
long nPix = aVirDev.PixelToLogic( Size( 0, 1 ) ).Height();
|
2011-01-06 15:58:56 +01:00
|
|
|
sal_uInt32 n1 = nLine1;
|
|
|
|
sal_uInt32 n2 = nLine2;
|
|
|
|
long nDist = nDistance;
|
2000-09-18 16:07:07 +00:00
|
|
|
n1 += nPix-1;
|
|
|
|
n1 -= n1%nPix;
|
|
|
|
if ( n2 )
|
|
|
|
{
|
|
|
|
nDist += nPix-1;
|
|
|
|
nDist -= nDist%nPix;
|
|
|
|
n2 += nPix-1;
|
|
|
|
n2 -= n2%nPix;
|
|
|
|
}
|
|
|
|
long nVirHeight = n1+nDist+n2;
|
|
|
|
if ( nVirHeight > aSize.Height() )
|
|
|
|
aSize.Height() = nVirHeight;
|
|
|
|
// negative Breiten muss und darf man nicht painten
|
|
|
|
if ( aSize.Width() > 0 )
|
|
|
|
{
|
|
|
|
Size aVirSize = aVirDev.LogicToPixel( aSize );
|
|
|
|
if ( aVirDev.GetOutputSizePixel() != aVirSize )
|
|
|
|
aVirDev.SetOutputSizePixel( aVirSize );
|
2010-11-06 19:24:28 +01:00
|
|
|
aVirDev.SetFillColor( aColorDist );
|
2000-09-18 16:07:07 +00:00
|
|
|
aVirDev.DrawRect( Rectangle( Point(), aSize ) );
|
2002-07-19 08:43:19 +00:00
|
|
|
|
2010-11-06 19:24:28 +01:00
|
|
|
aVirDev.SetFillColor( aColor1 );
|
2010-10-06 23:53:00 +02:00
|
|
|
|
2010-11-06 19:24:28 +01:00
|
|
|
double y1 = double( n1 ) / 2;
|
|
|
|
svtools::DrawLine( aVirDev, basegfx::B2DPoint( 0, y1 ), basegfx::B2DPoint( aSize.Width( ), y1 ), n1, nStyle );
|
2010-10-06 23:53:00 +02:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( n2 )
|
|
|
|
{
|
2010-11-06 19:24:28 +01:00
|
|
|
double y2 = n1 + nDist + double( n2 ) / 2;
|
|
|
|
aVirDev.SetFillColor( aColor2 );
|
|
|
|
svtools::DrawLine( aVirDev, basegfx::B2DPoint( 0, y2 ), basegfx::B2DPoint( aSize.Width(), y2 ), n2, STYLE_SOLID );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
rBmp = aVirDev.GetBitmap( Point(), Size( aSize.Width(), n1+nDist+n2 ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void LineListBox::ImplInit()
|
|
|
|
{
|
2011-01-11 20:44:15 +01:00
|
|
|
aTxtSize.Width() = GetTextWidth( XubString( RTL_CONSTASCII_USTRINGPARAM( " " ) ) );
|
2000-09-18 16:07:07 +00:00
|
|
|
aTxtSize.Height() = GetTextHeight();
|
2011-02-05 06:57:33 -08:00
|
|
|
pLineList = new ImpLineList();
|
2000-09-18 16:07:07 +00:00
|
|
|
eUnit = FUNIT_POINT;
|
|
|
|
eSourceUnit = FUNIT_POINT;
|
|
|
|
|
|
|
|
aVirDev.SetLineColor();
|
|
|
|
aVirDev.SetMapMode( MapMode( MAP_TWIP ) );
|
2002-08-07 12:04:08 +00:00
|
|
|
|
|
|
|
UpdatePaintLineColor();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
LineListBox::LineListBox( Window* pParent, WinBits nWinStyle ) :
|
|
|
|
ListBox( pParent, nWinStyle ),
|
2011-01-06 15:58:56 +01:00
|
|
|
m_nWidth( 5 ),
|
|
|
|
m_sNone( ),
|
2002-07-19 08:43:19 +00:00
|
|
|
aColor( COL_BLACK ),
|
|
|
|
maPaintCol( COL_BLACK )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
ImplInit();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
LineListBox::LineListBox( Window* pParent, const ResId& rResId ) :
|
|
|
|
ListBox( pParent, rResId ),
|
2011-01-06 15:58:56 +01:00
|
|
|
m_nWidth( 5 ),
|
|
|
|
m_sNone( ),
|
2002-07-19 08:43:19 +00:00
|
|
|
aColor( COL_BLACK ),
|
|
|
|
maPaintCol( COL_BLACK )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
ImplInit();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
LineListBox::~LineListBox()
|
|
|
|
{
|
2011-02-05 06:57:33 -08:00
|
|
|
for ( size_t i = 0, n = pLineList->size(); i < n; ++i ) {
|
|
|
|
if ( (*pLineList)[ i ] ) {
|
|
|
|
delete (*pLineList)[ i ];
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
2011-02-05 06:57:33 -08:00
|
|
|
pLineList->clear();
|
2000-09-18 16:07:07 +00:00
|
|
|
delete pLineList;
|
|
|
|
}
|
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
sal_uInt16 LineListBox::GetStylePos( sal_uInt16 nListPos, long nWidth )
|
|
|
|
{
|
|
|
|
sal_uInt16 nPos = LISTBOX_ENTRY_NOTFOUND;
|
|
|
|
if ( m_sNone.Len( ) > 0 )
|
|
|
|
nListPos--;
|
|
|
|
|
|
|
|
sal_uInt16 i = 0;
|
|
|
|
sal_uInt16 n = 0;
|
2011-02-15 15:43:26 +01:00
|
|
|
sal_uInt16 nCount = pLineList->size();
|
2011-01-06 15:58:56 +01:00
|
|
|
while ( nPos == LISTBOX_ENTRY_NOTFOUND && i < nCount )
|
|
|
|
{
|
2011-02-15 15:43:26 +01:00
|
|
|
ImpLineListData* pData = (*pLineList)[ i ];
|
2011-01-06 15:58:56 +01:00
|
|
|
if ( pData && pData->GetMinWidth() <= nWidth )
|
|
|
|
{
|
|
|
|
if ( nListPos == n )
|
|
|
|
nPos = i;
|
|
|
|
n++;
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
|
|
|
return nPos;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void LineListBox::SelectEntry( sal_uInt16 nStyle, sal_Bool bSelect )
|
2010-11-06 19:24:28 +01:00
|
|
|
{
|
2011-01-06 15:58:56 +01:00
|
|
|
sal_uInt16 nPos = GetEntryPos( nStyle );
|
2010-11-06 19:24:28 +01:00
|
|
|
if ( nPos != LISTBOX_ENTRY_NOTFOUND )
|
|
|
|
ListBox::SelectEntryPos( nPos, bSelect );
|
|
|
|
}
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 LineListBox::InsertEntry( const XubString& rStr, sal_uInt16 nPos )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
nPos = ListBox::InsertEntry( rStr, nPos );
|
2011-02-05 06:57:33 -08:00
|
|
|
if ( nPos != LISTBOX_ERROR ) {
|
|
|
|
if ( nPos < pLineList->size() ) {
|
|
|
|
ImpLineList::iterator it = pLineList->begin();
|
|
|
|
::std::advance( it, nPos );
|
|
|
|
pLineList->insert( it, NULL );
|
|
|
|
} else {
|
|
|
|
pLineList->push_back( NULL );
|
|
|
|
}
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
return nPos;
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
void LineListBox::InsertEntry(
|
|
|
|
BorderWidthImpl aWidthImpl,
|
|
|
|
sal_uInt16 nStyle, long nMinWidth,
|
|
|
|
Color ( *pColor1Fn )( Color ), Color ( *pColor2Fn )( Color ),
|
|
|
|
Color ( *pColorDistFn )( Color, Color ) )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2011-01-06 15:58:56 +01:00
|
|
|
ImpLineListData* pData = new ImpLineListData(
|
|
|
|
aWidthImpl, nStyle, nMinWidth,
|
|
|
|
pColor1Fn, pColor2Fn, pColorDistFn );
|
|
|
|
pLineList->push_back( pData );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
void LineListBox::RemoveEntry( sal_uInt16 nPos )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
ListBox::RemoveEntry( nPos );
|
2011-02-05 06:57:33 -08:00
|
|
|
|
|
|
|
if ( nPos < pLineList->size() ) {
|
|
|
|
ImpLineList::iterator it = pLineList->begin();
|
|
|
|
::std::advance( it, nPos );
|
|
|
|
if ( *it ) delete *it;
|
|
|
|
pLineList->erase( it );
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void LineListBox::Clear()
|
|
|
|
{
|
2011-02-05 06:57:33 -08:00
|
|
|
for ( size_t i = 0, n = pLineList->size(); i < n; ++i ) {
|
|
|
|
if ( (*pLineList)[ i ] ) {
|
|
|
|
delete (*pLineList)[ i ];
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
2011-02-05 06:57:33 -08:00
|
|
|
pLineList->clear();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
ListBox::Clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
sal_uInt16 LineListBox::GetEntryPos( sal_uInt16 nStyle ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2011-02-05 06:57:33 -08:00
|
|
|
for ( size_t i = 0, n = pLineList->size(); i < n; ++i ) {
|
2011-02-08 10:05:57 +01:00
|
|
|
ImpLineListData* pData = (*pLineList)[ i ];
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( pData )
|
|
|
|
{
|
2011-01-06 15:58:56 +01:00
|
|
|
if ( GetEntryStyle( i ) == nStyle )
|
|
|
|
{
|
|
|
|
size_t nPos = i;
|
|
|
|
if ( m_sNone.Len() > 0 )
|
|
|
|
nPos ++;
|
|
|
|
return (sal_uInt16)nPos;
|
2011-02-05 06:57:33 -08:00
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return LISTBOX_ENTRY_NOTFOUND;
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
long LineListBox::GetEntryLine1( sal_uInt16 nPos ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2011-02-05 06:57:33 -08:00
|
|
|
ImpLineListData* pData = (nPos < pLineList->size()) ? (*pLineList)[ nPos ] : NULL;
|
2011-01-06 15:58:56 +01:00
|
|
|
return ( pData ) ? pData->GetLine1ForWidth( m_nWidth ) : 0;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
long LineListBox::GetEntryLine2( sal_uInt16 nPos ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2011-02-05 06:57:33 -08:00
|
|
|
ImpLineListData* pData = (nPos < pLineList->size()) ? (*pLineList)[ nPos ] : NULL;
|
2011-01-06 15:58:56 +01:00
|
|
|
return ( pData ) ? pData->GetLine2ForWidth( m_nWidth ) : 0;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2011-03-11 18:04:44 +00:00
|
|
|
long LineListBox::GetEntryDistance( sal_uInt16 nPos ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2011-02-05 06:57:33 -08:00
|
|
|
ImpLineListData* pData = (nPos < pLineList->size()) ? (*pLineList)[ nPos ] : NULL;
|
2011-01-06 15:58:56 +01:00
|
|
|
return ( pData ) ? pData->GetDistForWidth( m_nWidth ) : 0;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2011-03-11 18:04:44 +00:00
|
|
|
sal_uInt16 LineListBox::GetEntryStyle( sal_uInt16 nPos ) const
|
2010-10-06 23:53:00 +02:00
|
|
|
{
|
2011-02-05 06:57:33 -08:00
|
|
|
ImpLineListData* pData = (nPos < pLineList->size()) ? (*pLineList)[ nPos ] : NULL;
|
2011-01-06 15:58:56 +01:00
|
|
|
return ( pData ) ? pData->GetStyle() : STYLE_SOLID;
|
2002-08-07 12:04:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_Bool LineListBox::UpdatePaintLineColor( void )
|
2002-08-07 12:04:08 +00:00
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_Bool bRet = sal_True;
|
2002-08-07 12:04:08 +00:00
|
|
|
const StyleSettings& rSettings = GetSettings().GetStyleSettings();
|
|
|
|
Color aNewCol( rSettings.GetWindowColor().IsDark()? rSettings.GetLabelTextColor() : aColor );
|
|
|
|
|
|
|
|
bRet = aNewCol != maPaintCol;
|
2002-07-19 08:43:19 +00:00
|
|
|
|
2002-08-07 12:04:08 +00:00
|
|
|
if( bRet )
|
|
|
|
maPaintCol = aNewCol;
|
2002-07-19 08:43:19 +00:00
|
|
|
|
2002-08-07 12:04:08 +00:00
|
|
|
return bRet;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
void LineListBox::UpdateEntries( long nOldWidth )
|
2010-11-06 19:24:28 +01:00
|
|
|
{
|
2011-01-06 15:58:56 +01:00
|
|
|
SetUpdateMode( sal_False );
|
2010-11-06 19:24:28 +01:00
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
UpdatePaintLineColor( );
|
2010-11-06 19:24:28 +01:00
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
sal_uInt16 nSelEntry = GetSelectEntryPos();
|
|
|
|
sal_uInt16 nTypePos = GetStylePos( nSelEntry, nOldWidth );
|
2002-07-19 08:43:19 +00:00
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
// Remove the old entries
|
|
|
|
while ( GetEntryCount( ) > 0 )
|
|
|
|
ListBox::RemoveEntry( 0 );
|
2002-07-19 08:43:19 +00:00
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
// Add the new entries based on the defined width
|
|
|
|
if ( m_sNone.Len( ) > 0 )
|
|
|
|
ListBox::InsertEntry( m_sNone, LISTBOX_APPEND );
|
2002-07-19 08:43:19 +00:00
|
|
|
|
2010-11-06 19:24:28 +01:00
|
|
|
sal_uInt16 n = 0;
|
2011-02-15 15:43:26 +01:00
|
|
|
sal_uInt16 nCount = pLineList->size( );
|
2010-11-06 19:24:28 +01:00
|
|
|
while ( n < nCount )
|
|
|
|
{
|
2011-02-15 15:43:26 +01:00
|
|
|
ImpLineListData* pData = (*pLineList)[ n ];
|
2011-01-06 15:58:56 +01:00
|
|
|
if ( pData && pData->GetMinWidth() <= m_nWidth )
|
|
|
|
{
|
|
|
|
Bitmap aBmp;
|
|
|
|
ImpGetLine( pData->GetLine1ForWidth( m_nWidth ),
|
|
|
|
pData->GetLine2ForWidth( m_nWidth ),
|
|
|
|
pData->GetDistForWidth( m_nWidth ),
|
|
|
|
GetColorLine1( GetEntryCount( ) ),
|
|
|
|
GetColorLine2( GetEntryCount( ) ),
|
|
|
|
GetColorDist( GetEntryCount( ) ),
|
2011-01-11 20:44:15 +01:00
|
|
|
pData->GetStyle(), aBmp );
|
|
|
|
ListBox::InsertEntry( XubString( RTL_CONSTASCII_USTRINGPARAM( " " ) ), aBmp, LISTBOX_APPEND );
|
2011-01-06 15:58:56 +01:00
|
|
|
if ( n == nTypePos )
|
|
|
|
SelectEntryPos( GetEntryCount() - 1 );
|
|
|
|
}
|
|
|
|
else if ( n == nTypePos )
|
|
|
|
SetNoSelection();
|
2010-11-06 19:24:28 +01:00
|
|
|
n++;
|
|
|
|
}
|
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
SetUpdateMode( sal_True );
|
|
|
|
Invalidate();
|
2010-11-06 19:24:28 +01:00
|
|
|
}
|
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
Color LineListBox::GetColorLine1( sal_uInt16 nPos )
|
2010-11-06 19:24:28 +01:00
|
|
|
{
|
2011-01-06 15:58:56 +01:00
|
|
|
Color rResult = GetPaintColor( );
|
2010-11-06 19:24:28 +01:00
|
|
|
|
|
|
|
sal_uInt16 nStyle = GetStylePos( nPos, m_nWidth );
|
2011-02-15 15:43:26 +01:00
|
|
|
ImpLineListData* pData = (*pLineList)[ nStyle ];
|
2010-11-06 19:24:28 +01:00
|
|
|
if ( pData )
|
|
|
|
rResult = pData->GetColorLine1( GetColor( ) );
|
|
|
|
|
|
|
|
return rResult;
|
|
|
|
}
|
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
Color LineListBox::GetColorLine2( sal_uInt16 nPos )
|
2010-11-06 19:24:28 +01:00
|
|
|
{
|
2011-01-06 15:58:56 +01:00
|
|
|
Color rResult = GetPaintColor( );
|
2010-11-06 19:24:28 +01:00
|
|
|
|
|
|
|
sal_uInt16 nStyle = GetStylePos( nPos, m_nWidth );
|
2011-02-15 15:43:26 +01:00
|
|
|
ImpLineListData* pData = (*pLineList)[ nStyle ];
|
2010-11-06 19:24:28 +01:00
|
|
|
if ( pData )
|
|
|
|
rResult = pData->GetColorLine2( GetColor( ) );
|
|
|
|
|
|
|
|
return rResult;
|
|
|
|
}
|
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
Color LineListBox::GetColorDist( sal_uInt16 nPos )
|
2010-11-06 19:24:28 +01:00
|
|
|
{
|
2011-01-06 15:58:56 +01:00
|
|
|
Color rResult = GetSettings().GetStyleSettings().GetFieldColor();
|
2010-11-06 19:24:28 +01:00
|
|
|
|
|
|
|
sal_uInt16 nStyle = GetStylePos( nPos, m_nWidth );
|
2011-02-15 15:43:26 +01:00
|
|
|
ImpLineListData* pData = (*pLineList)[ nStyle ];
|
2010-11-06 19:24:28 +01:00
|
|
|
if ( pData )
|
|
|
|
rResult = pData->GetColorDist( GetColor( ), rResult );
|
|
|
|
|
|
|
|
return rResult;
|
|
|
|
}
|
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
// -----------------------------------------------------------------------
|
2010-11-06 19:24:28 +01:00
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
void LineListBox::DataChanged( const DataChangedEvent& rDCEvt )
|
2010-11-06 19:24:28 +01:00
|
|
|
{
|
2011-01-06 15:58:56 +01:00
|
|
|
ListBox::DataChanged( rDCEvt );
|
2010-11-06 19:24:28 +01:00
|
|
|
|
2011-01-06 15:58:56 +01:00
|
|
|
if( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
|
|
|
|
UpdateEntries( m_nWidth );
|
2010-11-06 19:24:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
// ===================================================================
|
|
|
|
// FontNameBox
|
|
|
|
// ===================================================================
|
|
|
|
|
|
|
|
struct ImplFontNameListData
|
|
|
|
{
|
|
|
|
FontInfo maInfo;
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 mnType;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
ImplFontNameListData( const FontInfo& rInfo,
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 nType ) :
|
2000-09-18 16:07:07 +00:00
|
|
|
maInfo( rInfo ),
|
|
|
|
mnType( nType )
|
|
|
|
{}
|
|
|
|
};
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
FontNameBox::FontNameBox( Window* pParent, WinBits nWinStyle ) :
|
2002-07-31 06:49:06 +00:00
|
|
|
ComboBox( pParent, nWinStyle )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2002-07-31 06:49:06 +00:00
|
|
|
InitBitmaps();
|
2000-09-18 16:07:07 +00:00
|
|
|
mpFontList = NULL;
|
2010-11-05 10:31:15 +08:00
|
|
|
mbWYSIWYG = sal_False;
|
|
|
|
mbSymbols = sal_False;
|
2011-04-14 12:36:44 +02:00
|
|
|
InitFontMRUEntriesFile();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
FontNameBox::FontNameBox( Window* pParent, const ResId& rResId ) :
|
2002-07-31 06:49:06 +00:00
|
|
|
ComboBox( pParent, rResId )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2002-07-31 06:49:06 +00:00
|
|
|
InitBitmaps();
|
2000-09-18 16:07:07 +00:00
|
|
|
mpFontList = NULL;
|
2010-11-05 10:31:15 +08:00
|
|
|
mbWYSIWYG = sal_False;
|
|
|
|
mbSymbols = sal_False;
|
2011-04-14 12:36:44 +02:00
|
|
|
InitFontMRUEntriesFile();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
FontNameBox::~FontNameBox()
|
|
|
|
{
|
2011-04-14 12:36:44 +02:00
|
|
|
SaveMRUEntries (maFontMRUEntriesFile);
|
2000-09-18 16:07:07 +00:00
|
|
|
ImplDestroyFontList();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
2002-07-31 06:49:06 +00:00
|
|
|
void FontNameBox::DataChanged( const DataChangedEvent& rDCEvt )
|
|
|
|
{
|
|
|
|
ComboBox::DataChanged( rDCEvt );
|
|
|
|
|
|
|
|
if( rDCEvt.GetType() == DATACHANGED_SETTINGS && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
|
|
|
|
InitBitmaps();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
2011-04-14 12:36:44 +02:00
|
|
|
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()
|
|
|
|
{
|
2011-04-15 16:11:05 +01:00
|
|
|
rtl::OUString sUserConfigDir(RTL_CONSTASCII_USTRINGPARAM("${$BRAND_BASE_DIR/program/bootstrap.ini:UserInstallation}"));
|
|
|
|
rtl::Bootstrap::expandMacros(sUserConfigDir);
|
|
|
|
|
|
|
|
maFontMRUEntriesFile = sUserConfigDir;
|
2011-04-14 12:36:44 +02:00
|
|
|
if( maFontMRUEntriesFile.Len() )
|
|
|
|
{
|
|
|
|
maFontMRUEntriesFile.AppendAscii( FONTNAMEBOXMRUENTRIESFILE );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
2002-07-31 06:49:06 +00:00
|
|
|
void FontNameBox::InitBitmaps( void )
|
|
|
|
{
|
2010-11-11 14:55:06 +01:00
|
|
|
maImagePrinterFont = Image( SvtResId( RID_IMG_PRINTERFONT ) );
|
|
|
|
maImageBitmapFont = Image( SvtResId( RID_IMG_BITMAPFONT ) );
|
|
|
|
maImageScalableFont = Image( SvtResId( RID_IMG_SCALABLEFONT ) );
|
2002-07-31 06:49:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
void FontNameBox::ImplDestroyFontList()
|
|
|
|
{
|
|
|
|
if ( mpFontList )
|
|
|
|
{
|
2011-02-05 07:25:59 -08:00
|
|
|
for ( size_t i = 0, n = mpFontList->size(); i < n; ++i ) {
|
|
|
|
delete (*mpFontList)[ i ];
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
2011-02-05 07:25:59 -08:00
|
|
|
mpFontList->clear();
|
2000-09-18 16:07:07 +00:00
|
|
|
delete mpFontList;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
void FontNameBox::Fill( const FontList* pList )
|
|
|
|
{
|
2001-07-19 16:20:19 +00:00
|
|
|
// store old text and clear box
|
2000-09-18 16:07:07 +00:00
|
|
|
XubString aOldText = GetText();
|
2011-04-14 12:36:44 +02:00
|
|
|
XubString rEntries = GetMRUEntries();
|
|
|
|
sal_Bool bLoadFromFile = ! rEntries.Len();
|
2000-09-18 16:07:07 +00:00
|
|
|
Clear();
|
|
|
|
|
|
|
|
ImplDestroyFontList();
|
|
|
|
mpFontList = new ImplFontList;
|
|
|
|
|
2001-07-19 16:20:19 +00:00
|
|
|
// insert fonts
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 nFontCount = pList->GetFontNameCount();
|
|
|
|
for ( sal_uInt16 i = 0; i < nFontCount; i++ )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
const FontInfo& rFontInfo = pList->GetFontName( i );
|
2011-01-12 15:56:50 +01:00
|
|
|
sal_uLong nIndex = InsertEntry( rFontInfo.GetName() );
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( nIndex != LISTBOX_ERROR )
|
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 nType = pList->GetFontNameType( i );
|
2000-09-18 16:07:07 +00:00
|
|
|
ImplFontNameListData* pData = new ImplFontNameListData( rFontInfo, nType );
|
2011-02-05 07:25:59 -08:00
|
|
|
if ( nIndex < mpFontList->size() ) {
|
|
|
|
ImplFontList::iterator it = mpFontList->begin();
|
|
|
|
::std::advance( it, nIndex );
|
|
|
|
mpFontList->insert( it, pData );
|
|
|
|
} else {
|
|
|
|
mpFontList->push_back( pData );
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-04-14 12:36:44 +02:00
|
|
|
if ( bLoadFromFile )
|
|
|
|
LoadMRUEntries (maFontMRUEntriesFile);
|
|
|
|
else
|
|
|
|
SetMRUEntries( rEntries );
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
ImplCalcUserItemSize();
|
|
|
|
|
2001-07-19 16:20:19 +00:00
|
|
|
// restore text
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( aOldText.Len() )
|
|
|
|
SetText( aOldText );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
void FontNameBox::EnableWYSIWYG( sal_Bool bEnable )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
if ( bEnable != mbWYSIWYG )
|
|
|
|
{
|
|
|
|
mbWYSIWYG = bEnable;
|
|
|
|
EnableUserDraw( mbWYSIWYG | mbSymbols );
|
|
|
|
ImplCalcUserItemSize();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
void FontNameBox::EnableSymbols( sal_Bool bEnable )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
if ( bEnable != mbSymbols )
|
|
|
|
{
|
|
|
|
mbSymbols = bEnable;
|
|
|
|
EnableUserDraw( mbWYSIWYG | mbSymbols );
|
|
|
|
ImplCalcUserItemSize();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
void FontNameBox::ImplCalcUserItemSize()
|
|
|
|
{
|
|
|
|
Size aUserItemSz;
|
|
|
|
if ( mbWYSIWYG && mpFontList )
|
|
|
|
{
|
2011-02-03 14:08:51 +00:00
|
|
|
aUserItemSz = Size(MAXPREVIEWWIDTH, GetTextHeight() );
|
|
|
|
aUserItemSz.Height() *= 16;
|
|
|
|
aUserItemSz.Height() /= 10;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
if ( mbSymbols )
|
|
|
|
{
|
|
|
|
Size aSz = maImageScalableFont.GetSizePixel();
|
2011-02-03 14:08:51 +00:00
|
|
|
aUserItemSz.Width() += aSz.Width() + IMGINNERTEXTSPACE;
|
|
|
|
|
|
|
|
if ( mbWYSIWYG && mpFontList )
|
|
|
|
aUserItemSz.Width() += IMGOUTERTEXTSPACE;
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( aSz.Height() > aUserItemSz.Height() )
|
|
|
|
aUserItemSz.Height() = aSz.Height();
|
|
|
|
}
|
|
|
|
SetUserItemSize( aUserItemSz );
|
|
|
|
}
|
|
|
|
|
2011-02-06 13:46:45 +00:00
|
|
|
#define MKTAG(s) sal_uInt32((((((s[0]<<8)+s[1])<<8)+s[2])<<8)+s[3])
|
2011-02-28 16:57:28 +00:00
|
|
|
#define TRADITIONAL_CHINESE 0x01000000
|
|
|
|
#define SIMPLIFIED_CHINESE 0x02000000
|
|
|
|
#define JAPANESE 0x04000000
|
|
|
|
#define KOREAN 0x08000000
|
|
|
|
#define HEBREW_MINIMAL 0x10000000
|
2011-03-01 15:38:00 +00:00
|
|
|
#define GREEK_MINIMAL 0x20000000
|
2011-02-03 14:08:51 +00:00
|
|
|
|
|
|
|
namespace
|
|
|
|
{
|
2011-02-28 16:57:28 +00:00
|
|
|
rtl::OUString getRepresentativeText(size_t nScript)
|
2011-02-06 13:46:45 +00:00
|
|
|
{
|
|
|
|
rtl::OUString sSampleText;
|
2011-02-28 16:57:28 +00:00
|
|
|
switch (nScript)
|
2011-02-06 13:46:45 +00:00
|
|
|
{
|
2011-03-01 15:38:00 +00:00
|
|
|
case vcl::UnicodeCoverage::GREEK_AND_COPTIC:
|
|
|
|
{
|
|
|
|
const sal_Unicode aGrek[] = {
|
|
|
|
0x0391, 0x03BB, 0x03C6, 0x03AC, 0x03B2, 0x03B7, 0x03C4, 0x03BF
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aGrek, SAL_N_ELEMENTS(aGrek));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case GREEK_MINIMAL:
|
|
|
|
{
|
|
|
|
const sal_Unicode aGrek[] = {
|
|
|
|
0x0391, 0x0392
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aGrek, SAL_N_ELEMENTS(aGrek));
|
|
|
|
break;
|
|
|
|
}
|
2011-02-28 16:57:28 +00:00
|
|
|
case vcl::UnicodeCoverage::HEBREW:
|
|
|
|
{
|
|
|
|
const sal_Unicode aHebr[] = {
|
|
|
|
0x05D0, 0x05B8, 0x05DC, 0x05B6, 0x05E3, 0x05D1, 0x05B5, 0x05BC,
|
|
|
|
0x05D9, 0x05EA, 0x0020, 0x05E2, 0x05B4, 0x05D1, 0x05B0, 0x05E8,
|
|
|
|
0x05B4, 0x05D9
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aHebr, SAL_N_ELEMENTS(aHebr));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case HEBREW_MINIMAL:
|
|
|
|
{
|
|
|
|
const sal_Unicode aHebr[] = {
|
|
|
|
0x05D0, 0x05D1
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aHebr, SAL_N_ELEMENTS(aHebr));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::ARABIC:
|
|
|
|
{
|
|
|
|
const sal_Unicode aArab[] = {
|
|
|
|
0x0623, 0x0628, 0x062C, 0x062F, 0x064A, 0x0629, 0x0020, 0x0639,
|
|
|
|
0x0631, 0x0628, 0x064A, 0x0629
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aArab, SAL_N_ELEMENTS(aArab));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::DEVANAGARI:
|
|
|
|
{
|
|
|
|
const sal_Unicode aDeva[] = {
|
|
|
|
0x0926, 0x0947, 0x0935, 0x0928, 0x093E, 0x0917, 0x0930, 0x0940
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aDeva, SAL_N_ELEMENTS(aDeva));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::BENGALI:
|
|
|
|
{
|
|
|
|
const sal_Unicode aBeng[] = {
|
|
|
|
0x09AC, 0x09BE, 0x0982, 0x09B2, 0x09BE, 0x0020, 0x09B2, 0x09BF,
|
|
|
|
0x09AA, 0x09BF
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aBeng, SAL_N_ELEMENTS(aBeng));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::GURMUKHI:
|
|
|
|
{
|
|
|
|
const sal_Unicode aGuru[] = {
|
|
|
|
0x0A17, 0x0A41, 0x0A30, 0x0A2E, 0x0A41, 0x0A16, 0x0A40
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aGuru, SAL_N_ELEMENTS(aGuru));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::GUJARATI:
|
|
|
|
{
|
|
|
|
const sal_Unicode aGujr[] = {
|
|
|
|
0x0A97, 0x0AC1, 0x0A9C, 0x0AB0, 0x0ABE, 0x0AA4, 0x0aC0, 0x0020,
|
|
|
|
0x0AB2, 0x0ABF, 0x0AAA, 0x0ABF
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aGujr, SAL_N_ELEMENTS(aGujr));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::ORIYA:
|
|
|
|
{
|
|
|
|
const sal_Unicode aOrya[] = {
|
|
|
|
0x0B09, 0x0B24, 0x0B4D, 0x0B15, 0x0B33, 0x0020, 0x0B32, 0x0B3F,
|
|
|
|
0x0B2A, 0x0B3F
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aOrya, SAL_N_ELEMENTS(aOrya));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::TAMIL:
|
|
|
|
{
|
|
|
|
const sal_Unicode aTaml[] = {
|
|
|
|
0x0B85, 0x0BB0, 0x0BBF, 0x0B9A, 0x0BCD, 0x0B9A, 0x0BC1, 0x0BB5,
|
|
|
|
0x0B9F, 0x0BBF
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aTaml, SAL_N_ELEMENTS(aTaml));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::TELUGU:
|
|
|
|
{
|
|
|
|
const sal_Unicode aTelu[] = {
|
|
|
|
0x0C24, 0x0C46, 0x0C32, 0x0C41, 0x0C17, 0x0C41
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aTelu, SAL_N_ELEMENTS(aTelu));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::KANNADA:
|
|
|
|
{
|
|
|
|
const sal_Unicode aKnda[] = {
|
|
|
|
0x0C95, 0x0CA8, 0x0CCD, 0x0CA8, 0x0CA1, 0x0020, 0x0CB2, 0x0CBF,
|
|
|
|
0x0CAA, 0x0CBF
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aKnda, SAL_N_ELEMENTS(aKnda));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::MALAYALAM:
|
|
|
|
{
|
|
|
|
const sal_Unicode aMlym[] = {
|
|
|
|
0x0D2E, 0x0D32, 0x0D2F, 0x0D3E, 0x0D33, 0x0D32, 0x0D3F, 0x0D2A,
|
|
|
|
0x0D3F
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aMlym, SAL_N_ELEMENTS(aMlym));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::THAI:
|
|
|
|
{
|
|
|
|
const sal_Unicode aThai[] = {
|
|
|
|
0x0E2D, 0x0E31, 0x0E01, 0x0E29, 0x0E23, 0x0E44, 0x0E17, 0x0E22
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aThai, SAL_N_ELEMENTS(aThai));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::LAO:
|
|
|
|
{
|
|
|
|
const sal_Unicode aLao[] = {
|
|
|
|
0x0EAD, 0x0EB1, 0x0E81, 0x0EAA, 0x0EAD, 0x0E99, 0x0EA5, 0x0EB2,
|
|
|
|
0x0EA7
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aLao, SAL_N_ELEMENTS(aLao));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::GEORGIAN:
|
|
|
|
{
|
|
|
|
const sal_Unicode aGeorgian[] = {
|
|
|
|
0x10D3, 0x10D0, 0x10DB, 0x10EC, 0x10D4, 0x10E0, 0x10DA, 0x10DD,
|
|
|
|
0x10D1, 0x10D0
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aGeorgian, SAL_N_ELEMENTS(aGeorgian));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::HANGUL_JAMO:
|
|
|
|
case KOREAN:
|
|
|
|
{
|
|
|
|
const sal_Unicode aHang[] = {
|
|
|
|
0xD55C, 0xAE00
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aHang, SAL_N_ELEMENTS(aHang));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::TIBETAN:
|
|
|
|
{
|
|
|
|
const sal_Unicode aTibt[] = {
|
|
|
|
0x0F51, 0x0F56, 0x0F74, 0x0F0B, 0x0F45, 0x0F53, 0x0F0B
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aTibt, SAL_N_ELEMENTS(aTibt));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::SYRIAC:
|
|
|
|
{
|
|
|
|
const sal_Unicode aSyri[] = {
|
|
|
|
0x0723, 0x071B, 0x072A, 0x0722, 0x0713, 0x0720, 0x0710
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aSyri, SAL_N_ELEMENTS(aSyri));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::THAANA:
|
|
|
|
{
|
|
|
|
const sal_Unicode aThaa[] = {
|
|
|
|
0x078C, 0x07A7, 0x0782, 0x07A6
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aThaa, SAL_N_ELEMENTS(aThaa));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::SINHALA:
|
|
|
|
{
|
|
|
|
const sal_Unicode aSinh[] = {
|
|
|
|
0x0DC1, 0x0DD4, 0x0DAF, 0x0DCA, 0x0DB0, 0x0020, 0x0DC3, 0x0DD2,
|
|
|
|
0x0D82, 0x0DC4, 0x0DBD
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aSinh, SAL_N_ELEMENTS(aSinh));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::MYANMAR:
|
|
|
|
{
|
|
|
|
const sal_Unicode aMymr[] = {
|
|
|
|
0x1019, 0x103C, 0x1014, 0x103A, 0x1019, 0x102C, 0x1021, 0x1000,
|
|
|
|
0x1039, 0x1001, 0x101B, 0x102C
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aMymr, SAL_N_ELEMENTS(aMymr));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::ETHIOPIC:
|
|
|
|
{
|
|
|
|
const sal_Unicode aEthi[] = {
|
|
|
|
0x130D, 0x12D5, 0x12DD
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aEthi, SAL_N_ELEMENTS(aEthi));
|
|
|
|
break;
|
2011-03-09 20:58:56 +00:00
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::CHEROKEE:
|
|
|
|
{
|
|
|
|
const sal_Unicode aCher[] = {
|
|
|
|
0x13D7, 0x13AA, 0x13EA, 0x13B6, 0x13D9, 0x13D7
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aCher, SAL_N_ELEMENTS(aCher));
|
|
|
|
break;
|
2011-02-28 16:57:28 +00:00
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::KHMER:
|
|
|
|
{
|
|
|
|
const sal_Unicode aKhmr[] = {
|
|
|
|
0x17A2, 0x1780, 0x17D2, 0x1781, 0x179A, 0x1780, 0x17D2, 0x179A,
|
|
|
|
0x1798, 0x1781, 0x17C1, 0x1798, 0x179A, 0x1797, 0x17B6, 0x179F,
|
|
|
|
0x17B6
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aKhmr, SAL_N_ELEMENTS(aKhmr));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::MONGOLIAN:
|
|
|
|
{
|
|
|
|
const sal_Unicode aMongolian[] = {
|
|
|
|
0x182A, 0x1822, 0x1834, 0x1822, 0x182D, 0x180C
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aMongolian, SAL_N_ELEMENTS(aMongolian));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case vcl::UnicodeCoverage::TAGALOG:
|
|
|
|
{
|
|
|
|
const sal_Unicode aTagalog[] = {
|
|
|
|
0x170A, 0x170A, 0x170C, 0x1712
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aTagalog, SAL_N_ELEMENTS(aTagalog));
|
|
|
|
break;
|
|
|
|
}
|
2011-03-11 16:44:37 +00:00
|
|
|
case vcl::UnicodeCoverage::NEW_TAI_LUE:
|
|
|
|
{
|
|
|
|
const sal_Unicode aTalu[] = {
|
|
|
|
0x1991, 0x19BA, 0x199F, 0x19B9, 0x19C9
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aTalu, SAL_N_ELEMENTS(aTalu));
|
|
|
|
break;
|
|
|
|
}
|
2011-02-28 16:57:28 +00:00
|
|
|
case TRADITIONAL_CHINESE:
|
|
|
|
{
|
|
|
|
const sal_Unicode aTraditionalChinese[] = {
|
|
|
|
0x7E41
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aTraditionalChinese, SAL_N_ELEMENTS(aTraditionalChinese));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case SIMPLIFIED_CHINESE:
|
|
|
|
{
|
|
|
|
const sal_Unicode aSimplifiedChinese[] = {
|
|
|
|
0x7B80
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aSimplifiedChinese, SAL_N_ELEMENTS(aSimplifiedChinese));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case TRADITIONAL_CHINESE|SIMPLIFIED_CHINESE:
|
|
|
|
{
|
|
|
|
const sal_Unicode aSimplifiedAndTraditionalChinese[] = {
|
|
|
|
0x7B80, 0x7E41
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aSimplifiedAndTraditionalChinese, SAL_N_ELEMENTS(aSimplifiedAndTraditionalChinese));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case JAPANESE:
|
|
|
|
{
|
|
|
|
const sal_Unicode aJapanese[] = {
|
|
|
|
0x65E5, 0x672C, 0x8A9E
|
|
|
|
};
|
|
|
|
sSampleText = rtl::OUString(aJapanese, SAL_N_ELEMENTS(aJapanese));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
break;
|
2011-02-06 13:46:45 +00:00
|
|
|
}
|
|
|
|
return sSampleText;
|
|
|
|
}
|
|
|
|
|
2011-02-28 16:57:28 +00:00
|
|
|
#if OSL_DEBUG_LEVEL > 2
|
|
|
|
void lcl_dump_unicode_coverage(const boost::dynamic_bitset<sal_uInt32> &rIn)
|
2011-02-06 13:46:45 +00:00
|
|
|
{
|
2011-02-28 16:57:28 +00:00
|
|
|
if (rIn[vcl::UnicodeCoverage::BASIC_LATIN])
|
|
|
|
fprintf(stderr, "BASIC_LATIN\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::LATIN_1_SUPPLEMENT])
|
|
|
|
fprintf(stderr, "LATIN_1_SUPPLEMENT\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::LATIN_EXTENDED_A])
|
|
|
|
fprintf(stderr, "LATIN_EXTENDED_A\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::LATIN_EXTENDED_B])
|
|
|
|
fprintf(stderr, "LATIN_EXTENDED_B\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::IPA_EXTENSIONS])
|
|
|
|
fprintf(stderr, "IPA_EXTENSIONS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::SPACING_MODIFIER_LETTERS])
|
|
|
|
fprintf(stderr, "SPACING_MODIFIER_LETTERS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::COMBINING_DIACRITICAL_MARKS])
|
|
|
|
fprintf(stderr, "COMBINING_DIACRITICAL_MARKS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::GREEK_AND_COPTIC])
|
|
|
|
fprintf(stderr, "GREEK_AND_COPTIC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::COPTIC])
|
|
|
|
fprintf(stderr, "COPTIC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CYRILLIC])
|
|
|
|
fprintf(stderr, "CYRILLIC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ARMENIAN])
|
|
|
|
fprintf(stderr, "ARMENIAN\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::HEBREW])
|
|
|
|
fprintf(stderr, "HEBREW\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::VAI])
|
|
|
|
fprintf(stderr, "VAI\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ARABIC])
|
|
|
|
fprintf(stderr, "ARABIC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::NKO])
|
|
|
|
fprintf(stderr, "NKO\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::DEVANAGARI])
|
|
|
|
fprintf(stderr, "DEVANAGARI\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::BENGALI])
|
|
|
|
fprintf(stderr, "BENGALI\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::GURMUKHI])
|
|
|
|
fprintf(stderr, "GURMUKHI\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::GUJARATI])
|
|
|
|
fprintf(stderr, "GUJARATI\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ORIYA])
|
|
|
|
fprintf(stderr, "ORIYA\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::TAMIL])
|
|
|
|
fprintf(stderr, "TAMIL\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::TELUGU])
|
|
|
|
fprintf(stderr, "TELUGU\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::KANNADA])
|
|
|
|
fprintf(stderr, "KANNADA\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::MALAYALAM])
|
|
|
|
fprintf(stderr, "MALAYALAM\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::THAI])
|
|
|
|
fprintf(stderr, "THAI\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::LAO])
|
|
|
|
fprintf(stderr, "LAO\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::GEORGIAN])
|
|
|
|
fprintf(stderr, "GEORGIAN\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::BALINESE])
|
|
|
|
fprintf(stderr, "BALINESE\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::HANGUL_JAMO])
|
|
|
|
fprintf(stderr, "HANGUL_JAMO\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::LATIN_EXTENDED_ADDITIONAL])
|
|
|
|
fprintf(stderr, "LATIN_EXTENDED_ADDITIONAL\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::GREEK_EXTENDED])
|
|
|
|
fprintf(stderr, "GREEK_EXTENDED\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::GENERAL_PUNCTUATION])
|
|
|
|
fprintf(stderr, "GENERAL_PUNCTUATION\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::SUPERSCRIPTS_AND_SUBSCRIPTS])
|
|
|
|
fprintf(stderr, "SUPERSCRIPTS_AND_SUBSCRIPTS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CURRENCY_SYMBOLS])
|
|
|
|
fprintf(stderr, "CURRENCY_SYMBOLS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS])
|
|
|
|
fprintf(stderr, "COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::LETTERLIKE_SYMBOLS])
|
|
|
|
fprintf(stderr, "LETTERLIKE_SYMBOLS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::NUMBER_FORMS])
|
|
|
|
fprintf(stderr, "NUMBER_FORMS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ARROWS])
|
|
|
|
fprintf(stderr, "ARROWS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::MATHEMATICAL_OPERATORS])
|
|
|
|
fprintf(stderr, "MATHEMATICAL_OPERATORS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::MISCELLANEOUS_TECHNICAL])
|
|
|
|
fprintf(stderr, "MISCELLANEOUS_TECHNICAL\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CONTROL_PICTURES])
|
|
|
|
fprintf(stderr, "CONTROL_PICTURES\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::OPTICAL_CHARACTER_RECOGNITION])
|
|
|
|
fprintf(stderr, "OPTICAL_CHARACTER_RECOGNITION\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ENCLOSED_ALPHANUMERICS])
|
|
|
|
fprintf(stderr, "ENCLOSED_ALPHANUMERICS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::BOX_DRAWING])
|
|
|
|
fprintf(stderr, "BOX_DRAWING\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::BLOCK_ELEMENTS])
|
|
|
|
fprintf(stderr, "BLOCK_ELEMENTS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::GEOMETRIC_SHAPES])
|
|
|
|
fprintf(stderr, "GEOMETRIC_SHAPES\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::MISCELLANEOUS_SYMBOLS])
|
|
|
|
fprintf(stderr, "MISCELLANEOUS_SYMBOLS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::DINGBATS])
|
|
|
|
fprintf(stderr, "DINGBATS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CJK_SYMBOLS_AND_PUNCTUATION])
|
|
|
|
fprintf(stderr, "CJK_SYMBOLS_AND_PUNCTUATION\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::HIRAGANA])
|
|
|
|
fprintf(stderr, "HIRAGANA\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::KATAKANA])
|
|
|
|
fprintf(stderr, "KATAKANA\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::BOPOMOFO])
|
|
|
|
fprintf(stderr, "BOPOMOFO\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::HANGUL_COMPATIBILITY_JAMO])
|
|
|
|
fprintf(stderr, "HANGUL_COMPATIBILITY_JAMO\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::PHAGS_PA])
|
|
|
|
fprintf(stderr, "PHAGS_PA\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ENCLOSED_CJK_LETTERS_AND_MONTHS])
|
|
|
|
fprintf(stderr, "ENCLOSED_CJK_LETTERS_AND_MONTHS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CJK_COMPATIBILITY])
|
|
|
|
fprintf(stderr, "CJK_COMPATIBILITY\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::HANGUL_SYLLABLES])
|
|
|
|
fprintf(stderr, "HANGUL_SYLLABLES\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::NONPLANE_0])
|
|
|
|
fprintf(stderr, "NONPLANE_0\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::PHOENICIAN])
|
|
|
|
fprintf(stderr, "PHOENICIAN\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CJK_UNIFIED_IDEOGRAPHS])
|
|
|
|
fprintf(stderr, "CJK_UNIFIED_IDEOGRAPHS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::PRIVATE_USE_AREA_PLANE_0])
|
|
|
|
fprintf(stderr, "PRIVATE_USE_AREA_PLANE_0\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CJK_STROKES])
|
|
|
|
fprintf(stderr, "CJK_STROKES\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ALPHABETIC_PRESENTATION_FORMS])
|
|
|
|
fprintf(stderr, "ALPHABETIC_PRESENTATION_FORMS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ARABIC_PRESENTATION_FORMS_A])
|
|
|
|
fprintf(stderr, "ARABIC_PRESENTATION_FORMS_A\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::COMBINING_HALF_MARKS])
|
|
|
|
fprintf(stderr, "COMBINING_HALF_MARKS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::VERTICAL_FORMS])
|
|
|
|
fprintf(stderr, "VERTICAL_FORMS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::SMALL_FORM_VARIANTS])
|
|
|
|
fprintf(stderr, "SMALL_FORM_VARIANTS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ARABIC_PRESENTATION_FORMS_B])
|
|
|
|
fprintf(stderr, "ARABIC_PRESENTATION_FORMS_B\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::HALFWIDTH_AND_FULLWIDTH_FORMS])
|
|
|
|
fprintf(stderr, "HALFWIDTH_AND_FULLWIDTH_FORMS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::SPECIALS])
|
|
|
|
fprintf(stderr, "SPECIALS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::TIBETAN])
|
|
|
|
fprintf(stderr, "TIBETAN\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::SYRIAC])
|
|
|
|
fprintf(stderr, "SYRIAC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::THAANA])
|
|
|
|
fprintf(stderr, "THAANA\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::SINHALA])
|
|
|
|
fprintf(stderr, "SINHALA\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::MYANMAR])
|
|
|
|
fprintf(stderr, "MYANMAR\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ETHIOPIC])
|
|
|
|
fprintf(stderr, "ETHIOPIC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CHEROKEE])
|
|
|
|
fprintf(stderr, "CHEROKEE\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS])
|
|
|
|
fprintf(stderr, "UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::OGHAM])
|
|
|
|
fprintf(stderr, "OGHAM\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::RUNIC])
|
|
|
|
fprintf(stderr, "RUNIC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::KHMER])
|
|
|
|
fprintf(stderr, "KHMER\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::MONGOLIAN])
|
|
|
|
fprintf(stderr, "MONGOLIAN\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::BRAILLE_PATTERNS])
|
|
|
|
fprintf(stderr, "BRAILLE_PATTERNS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::YI_SYLLABLES])
|
|
|
|
fprintf(stderr, "YI_SYLLABLES\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::TAGALOG])
|
|
|
|
fprintf(stderr, "TAGALOG\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::OLD_ITALIC])
|
|
|
|
fprintf(stderr, "OLD_ITALIC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::GOTHIC])
|
|
|
|
fprintf(stderr, "GOTHIC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::DESERET])
|
|
|
|
fprintf(stderr, "DESERET\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::BYZANTINE_MUSICAL_SYMBOLS])
|
|
|
|
fprintf(stderr, "BYZANTINE_MUSICAL_SYMBOLS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::MATHEMATICAL_ALPHANUMERIC_SYMBOLS])
|
|
|
|
fprintf(stderr, "MATHEMATICAL_ALPHANUMERIC_SYMBOLS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::PRIVATE_USE_PLANE_15])
|
|
|
|
fprintf(stderr, "PRIVATE_USE_PLANE_15\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::VARIATION_SELECTORS])
|
|
|
|
fprintf(stderr, "VARIATION_SELECTORS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::TAGS])
|
|
|
|
fprintf(stderr, "TAGS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::LIMBU])
|
|
|
|
fprintf(stderr, "LIMBU\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::TAI_LE])
|
|
|
|
fprintf(stderr, "TAI_LE\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::NEW_TAI_LUE])
|
|
|
|
fprintf(stderr, "NEW_TAI_LUE\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::BUGINESE])
|
|
|
|
fprintf(stderr, "BUGINESE\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::GLAGOLITIC])
|
|
|
|
fprintf(stderr, "GLAGOLITIC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::TIFINAGH])
|
|
|
|
fprintf(stderr, "TIFINAGH\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::YIJING_HEXAGRAM_SYMBOLS])
|
|
|
|
fprintf(stderr, "YIJING_HEXAGRAM_SYMBOLS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::SYLOTI_NAGRI])
|
|
|
|
fprintf(stderr, "SYLOTI_NAGRI\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::LINEAR_B_SYLLABARY])
|
|
|
|
fprintf(stderr, "LINEAR_B_SYLLABARY\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ANCIENT_GREEK_NUMBERS])
|
|
|
|
fprintf(stderr, "ANCIENT_GREEK_NUMBERS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::UGARITIC])
|
|
|
|
fprintf(stderr, "UGARITIC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::OLD_PERSIAN])
|
|
|
|
fprintf(stderr, "OLD_PERSIAN\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::SHAVIAN])
|
|
|
|
fprintf(stderr, "SHAVIAN\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::OSMANYA])
|
|
|
|
fprintf(stderr, "OSMANYA\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CYPRIOT_SYLLABARY])
|
|
|
|
fprintf(stderr, "CYPRIOT_SYLLABARY\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::KHAROSHTHI])
|
|
|
|
fprintf(stderr, "KHAROSHTHI\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::TAI_XUAN_JING_SYMBOLS])
|
|
|
|
fprintf(stderr, "TAI_XUAN_JING_SYMBOLS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CUNEIFORM])
|
|
|
|
fprintf(stderr, "CUNEIFORM\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::COUNTING_ROD_NUMERALS])
|
|
|
|
fprintf(stderr, "COUNTING_ROD_NUMERALS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::SUNDANESE])
|
|
|
|
fprintf(stderr, "SUNDANESE\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::LEPCHA])
|
|
|
|
fprintf(stderr, "LEPCHA\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::OL_CHIKI])
|
|
|
|
fprintf(stderr, "OL_CHIKI\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::SAURASHTRA])
|
|
|
|
fprintf(stderr, "SAURASHTRA\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::KAYAH_LI])
|
|
|
|
fprintf(stderr, "KAYAH_LI\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::REJANG])
|
|
|
|
fprintf(stderr, "REJANG\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CHAM])
|
|
|
|
fprintf(stderr, "CHAM\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::ANCIENT_SYMBOLS])
|
|
|
|
fprintf(stderr, "ANCIENT_SYMBOLS\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::PHAISTOS_DISC])
|
|
|
|
fprintf(stderr, "PHAISTOS_DISC\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::CARIAN])
|
|
|
|
fprintf(stderr, "CARIAN\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::DOMINO_TILES])
|
|
|
|
fprintf(stderr, "DOMINO_TILES\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::RESERVED1])
|
|
|
|
fprintf(stderr, "RESERVED1\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::RESERVED2])
|
|
|
|
fprintf(stderr, "RESERVED2\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::RESERVED3])
|
|
|
|
fprintf(stderr, "RESERVED3\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::RESERVED4])
|
|
|
|
fprintf(stderr, "RESERVED4\n");
|
|
|
|
if (rIn[vcl::UnicodeCoverage::RESERVED5])
|
|
|
|
fprintf(stderr, "RESERVED5\n");
|
|
|
|
}
|
2011-02-06 13:46:45 +00:00
|
|
|
|
2011-02-28 16:57:28 +00:00
|
|
|
void lcl_dump_codepage_coverage(const boost::dynamic_bitset<sal_uInt32> &rIn)
|
|
|
|
{
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP1252])
|
|
|
|
fprintf(stderr, "CP1252\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP1250])
|
|
|
|
fprintf(stderr, "CP1250\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP1251])
|
|
|
|
fprintf(stderr, "CP1251\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP1253])
|
|
|
|
fprintf(stderr, "CP1253\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP1254])
|
|
|
|
fprintf(stderr, "CP1254\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP1255])
|
|
|
|
fprintf(stderr, "CP1255\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP1256])
|
|
|
|
fprintf(stderr, "CP1256\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP1257])
|
|
|
|
fprintf(stderr, "CP1257\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP1258])
|
|
|
|
fprintf(stderr, "CP1258\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP874])
|
|
|
|
fprintf(stderr, "CP874\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP932])
|
|
|
|
fprintf(stderr, "CP932\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP936])
|
|
|
|
fprintf(stderr, "CP936\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP949])
|
|
|
|
fprintf(stderr, "CP949\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP950])
|
|
|
|
fprintf(stderr, "CP950\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP1361])
|
|
|
|
fprintf(stderr, "CP1361\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP869])
|
|
|
|
fprintf(stderr, "CP869\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP866])
|
|
|
|
fprintf(stderr, "CP866\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP865])
|
|
|
|
fprintf(stderr, "CP865\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP864])
|
|
|
|
fprintf(stderr, "CP864\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP863])
|
|
|
|
fprintf(stderr, "CP863\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP862])
|
|
|
|
fprintf(stderr, "CP862\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP861])
|
|
|
|
fprintf(stderr, "CP861\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP860])
|
|
|
|
fprintf(stderr, "CP860\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP857])
|
|
|
|
fprintf(stderr, "CP857\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP855])
|
|
|
|
fprintf(stderr, "CP855\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP852])
|
|
|
|
fprintf(stderr, "CP852\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP775])
|
|
|
|
fprintf(stderr, "CP775\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP737])
|
|
|
|
fprintf(stderr, "CP737\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP780])
|
|
|
|
fprintf(stderr, "CP780\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP850])
|
|
|
|
fprintf(stderr, "CP850\n");
|
|
|
|
if (rIn[vcl::CodePageCoverage::CP437])
|
|
|
|
fprintf(stderr, "CP437\n");
|
|
|
|
}
|
|
|
|
#endif
|
2011-02-06 13:46:45 +00:00
|
|
|
|
2011-02-28 16:57:28 +00:00
|
|
|
size_t getScript(const vcl::FontCapabilities &rFontCapabilities)
|
|
|
|
{
|
|
|
|
boost::dynamic_bitset<sal_uInt32> aGenericMask(vcl::UnicodeCoverage::MAX_UC_ENUM);
|
|
|
|
aGenericMask.set();
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::BASIC_LATIN, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::LATIN_1_SUPPLEMENT, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::LATIN_EXTENDED_A, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::LATIN_EXTENDED_B, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::IPA_EXTENSIONS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::SPACING_MODIFIER_LETTERS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::COMBINING_DIACRITICAL_MARKS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::LATIN_EXTENDED_ADDITIONAL, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::GENERAL_PUNCTUATION, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::GEOMETRIC_SHAPES, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::SUPERSCRIPTS_AND_SUBSCRIPTS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::CURRENCY_SYMBOLS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::LETTERLIKE_SYMBOLS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::DINGBATS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::PRIVATE_USE_AREA_PLANE_0, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::ALPHABETIC_PRESENTATION_FORMS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::NUMBER_FORMS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::ARROWS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::MATHEMATICAL_OPERATORS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::MATHEMATICAL_ALPHANUMERIC_SYMBOLS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::MISCELLANEOUS_TECHNICAL, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::CONTROL_PICTURES, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::ENCLOSED_ALPHANUMERICS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::BOX_DRAWING, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::BLOCK_ELEMENTS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::MISCELLANEOUS_SYMBOLS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::SPECIALS, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::NONPLANE_0, false);
|
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::PRIVATE_USE_PLANE_15, false);
|
2011-03-09 20:52:07 +00:00
|
|
|
aGenericMask.set(vcl::UnicodeCoverage::CJK_SYMBOLS_AND_PUNCTUATION, false);
|
2011-02-28 16:57:28 +00:00
|
|
|
|
|
|
|
boost::dynamic_bitset<sal_uInt32> aMasked = rFontCapabilities.maUnicodeRange & aGenericMask;
|
|
|
|
|
|
|
|
if (aMasked.count() == 1)
|
|
|
|
return aMasked.find_first();
|
|
|
|
|
2011-03-09 20:52:07 +00:00
|
|
|
|
2011-02-28 16:57:28 +00:00
|
|
|
if (aMasked[vcl::UnicodeCoverage::ARABIC])
|
|
|
|
{
|
|
|
|
aMasked.set(vcl::UnicodeCoverage::ARABIC_PRESENTATION_FORMS_A, false);
|
|
|
|
aMasked.set(vcl::UnicodeCoverage::ARABIC_PRESENTATION_FORMS_B, false);
|
|
|
|
aMasked.set(vcl::UnicodeCoverage::NKO, false);
|
|
|
|
//Probably strongly tuned for Arabic
|
|
|
|
if (aMasked.count() == 1)
|
|
|
|
return vcl::UnicodeCoverage::ARABIC;
|
|
|
|
if (aMasked.count() == 2 && aMasked[vcl::UnicodeCoverage::SYRIAC])
|
|
|
|
return vcl::UnicodeCoverage::SYRIAC;
|
|
|
|
}
|
2011-02-06 13:46:45 +00:00
|
|
|
|
2011-02-28 16:57:28 +00:00
|
|
|
if (aMasked[vcl::UnicodeCoverage::DEVANAGARI])
|
|
|
|
{
|
|
|
|
aMasked.set(vcl::UnicodeCoverage::DEVANAGARI, false);
|
|
|
|
//Probably strongly tuned for a single Indic script
|
|
|
|
if (aMasked.count() == 1)
|
|
|
|
return aMasked.find_first();
|
|
|
|
}
|
2011-02-10 14:08:40 +00:00
|
|
|
|
2011-02-28 16:57:28 +00:00
|
|
|
aMasked.set(vcl::UnicodeCoverage::GREEK_EXTENDED, false);
|
|
|
|
aMasked.set(vcl::UnicodeCoverage::GREEK_AND_COPTIC, false);
|
|
|
|
if (aMasked.count() == 1)
|
|
|
|
return aMasked.find_first();
|
|
|
|
|
2011-03-09 20:27:47 +00:00
|
|
|
if (aMasked[vcl::UnicodeCoverage::CYRILLIC])
|
|
|
|
{
|
|
|
|
//Probably strongly tuned for Georgian
|
|
|
|
if (aMasked.count() == 2 && aMasked[vcl::UnicodeCoverage::GEORGIAN])
|
|
|
|
return vcl::UnicodeCoverage::GEORGIAN;
|
|
|
|
}
|
|
|
|
|
2011-02-28 16:57:28 +00:00
|
|
|
boost::dynamic_bitset<sal_uInt32> aCJKMask(vcl::UnicodeCoverage::MAX_UC_ENUM);
|
|
|
|
aCJKMask.set();
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::CJK_SYMBOLS_AND_PUNCTUATION, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::HIRAGANA, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::KATAKANA, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::HANGUL_JAMO, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::HANGUL_SYLLABLES, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::HANGUL_COMPATIBILITY_JAMO, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::ENCLOSED_CJK_LETTERS_AND_MONTHS, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::CJK_COMPATIBILITY, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::CJK_UNIFIED_IDEOGRAPHS, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::CJK_STROKES, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::HALFWIDTH_AND_FULLWIDTH_FORMS, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::VERTICAL_FORMS, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::BOPOMOFO, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::SMALL_FORM_VARIANTS, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::PHAGS_PA, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::CYRILLIC, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::THAI, false);
|
|
|
|
aCJKMask.set(vcl::UnicodeCoverage::DESERET, false);
|
|
|
|
|
|
|
|
aMasked = aMasked & aCJKMask;
|
|
|
|
|
|
|
|
//So, apparently a CJK font
|
|
|
|
if (!aMasked.count())
|
2011-02-06 13:46:45 +00:00
|
|
|
{
|
2011-02-28 16:57:28 +00:00
|
|
|
boost::dynamic_bitset<sal_uInt32> aCJKCodePageMask(vcl::CodePageCoverage::MAX_CP_ENUM);
|
|
|
|
aCJKCodePageMask.set(vcl::CodePageCoverage::CP932);
|
|
|
|
aCJKCodePageMask.set(vcl::CodePageCoverage::CP936);
|
|
|
|
aCJKCodePageMask.set(vcl::CodePageCoverage::CP949);
|
|
|
|
aCJKCodePageMask.set(vcl::CodePageCoverage::CP950);
|
|
|
|
aCJKCodePageMask.set(vcl::CodePageCoverage::CP1361);
|
|
|
|
boost::dynamic_bitset<sal_uInt32> aMaskedCodePage =
|
|
|
|
rFontCapabilities.maCodePageRange & aCJKCodePageMask;
|
|
|
|
//fold Korean
|
|
|
|
if (aMaskedCodePage[vcl::CodePageCoverage::CP1361])
|
|
|
|
{
|
|
|
|
aMaskedCodePage.set(vcl::CodePageCoverage::CP949);
|
|
|
|
aMaskedCodePage.set(vcl::CodePageCoverage::CP1361, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
sal_uInt32 nRet = 0;
|
|
|
|
if (aMaskedCodePage[vcl::CodePageCoverage::CP936])
|
|
|
|
nRet |= SIMPLIFIED_CHINESE;
|
|
|
|
if (aMaskedCodePage[vcl::CodePageCoverage::CP950])
|
|
|
|
nRet |= TRADITIONAL_CHINESE;
|
|
|
|
if (aMaskedCodePage[vcl::CodePageCoverage::CP932])
|
|
|
|
nRet |= JAPANESE;
|
|
|
|
if (aMaskedCodePage[vcl::CodePageCoverage::CP949])
|
|
|
|
nRet |= KOREAN;
|
|
|
|
return nRet;
|
2011-02-06 13:46:45 +00:00
|
|
|
}
|
2011-02-10 14:08:40 +00:00
|
|
|
|
2011-02-06 13:46:45 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2011-02-03 14:08:51 +00:00
|
|
|
rtl::OUString makeRepresentativeSymbolText(bool bOpenSymbol, OutputDevice &rDevice)
|
|
|
|
{
|
|
|
|
rtl::OUString sSampleText;
|
|
|
|
|
|
|
|
FontCharMap aFontCharMap;
|
|
|
|
bool bHasCharMap = rDevice.GetFontCharMap( aFontCharMap );
|
|
|
|
if( bHasCharMap )
|
|
|
|
{
|
|
|
|
// use some sample characters available in the font
|
|
|
|
sal_Unicode aText[8];
|
|
|
|
|
|
|
|
// start just above the PUA used by most symbol fonts
|
|
|
|
sal_uInt32 cNewChar = 0xFF00;
|
2011-02-06 13:46:45 +00:00
|
|
|
#ifdef QUARTZ
|
2011-02-03 14:08:51 +00:00
|
|
|
// on MacOSX there are too many non-presentable symbols above the codepoint 0x0192
|
|
|
|
if( !bOpenSymbol )
|
|
|
|
cNewChar = 0x0192;
|
2011-02-06 13:46:45 +00:00
|
|
|
#endif
|
2011-02-03 14:08:51 +00:00
|
|
|
|
|
|
|
const int nMaxCount = sizeof(aText)/sizeof(*aText) - 1;
|
|
|
|
int nSkip = aFontCharMap.GetCharCount() / nMaxCount;
|
|
|
|
if( nSkip > 10 )
|
|
|
|
nSkip = 10;
|
|
|
|
else if( nSkip <= 0 )
|
|
|
|
nSkip = 1;
|
|
|
|
for( int i = 0; i < nMaxCount; ++i )
|
|
|
|
{
|
|
|
|
sal_uInt32 cOldChar = cNewChar;
|
|
|
|
for( int j = nSkip; --j >= 0; )
|
|
|
|
cNewChar = aFontCharMap.GetPrevChar( cNewChar );
|
|
|
|
if( cOldChar == cNewChar )
|
|
|
|
break;
|
|
|
|
aText[ i ] = static_cast<sal_Unicode>(cNewChar); // TODO: support UCS4 samples
|
|
|
|
aText[ i+1 ] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
sSampleText = rtl::OUString(aText);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2011-02-06 13:46:45 +00:00
|
|
|
static sal_Unicode aImplSymbolFontText[] = {
|
|
|
|
0xF021,0xF032,0xF043,0xF054,0xF065,0xF076,0xF0B7,0xF0C8,0};
|
2011-02-03 14:08:51 +00:00
|
|
|
const sal_Unicode* pText = aImplSymbolFontText;
|
|
|
|
if( bOpenSymbol )
|
2011-02-06 13:46:45 +00:00
|
|
|
{
|
|
|
|
static sal_Unicode aImplStarSymbolText[] = {
|
|
|
|
0x2706,0x2704,0x270D,0xE033,0x2211,0x2288,0};
|
2011-02-03 14:08:51 +00:00
|
|
|
pText = aImplStarSymbolText;
|
2011-02-06 13:46:45 +00:00
|
|
|
}
|
2011-02-03 14:08:51 +00:00
|
|
|
sSampleText = rtl::OUString(pText);
|
|
|
|
}
|
|
|
|
|
|
|
|
return sSampleText;
|
|
|
|
}
|
|
|
|
|
|
|
|
long shrinkFontToFit(rtl::OUString &rSampleText, long nH, Font &rFont, OutputDevice &rDevice, Rectangle &rTextRect)
|
|
|
|
{
|
|
|
|
long nWidth = 0;
|
|
|
|
|
|
|
|
Size aSize( rFont.GetSize() );
|
|
|
|
|
|
|
|
//Make sure it fits in the available height
|
|
|
|
while (aSize.Height() > 0)
|
|
|
|
{
|
|
|
|
if (!rDevice.GetTextBoundRect(rTextRect, rSampleText, 0, 0))
|
|
|
|
break;
|
|
|
|
if (rTextRect.GetHeight() <= nH)
|
|
|
|
{
|
|
|
|
nWidth = rTextRect.GetWidth();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
aSize.Height() -= EXTRAFONTSIZE;
|
|
|
|
rFont.SetSize(aSize);
|
|
|
|
rDevice.SetFont(rFont);
|
|
|
|
}
|
|
|
|
|
|
|
|
return nWidth;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
void FontNameBox::UserDraw( const UserDrawEvent& rUDEvt )
|
|
|
|
{
|
2011-02-05 07:25:59 -08:00
|
|
|
ImplFontNameListData* pData = (*mpFontList)[ rUDEvt.GetItemId() ];
|
2000-09-18 16:07:07 +00:00
|
|
|
const FontInfo& rInfo = pData->maInfo;
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 nType = pData->mnType;
|
2000-09-18 16:07:07 +00:00
|
|
|
Point aTopLeft = rUDEvt.GetRect().TopLeft();
|
|
|
|
long nX = aTopLeft.X();
|
|
|
|
long nH = rUDEvt.GetRect().GetHeight();
|
|
|
|
|
|
|
|
if ( mbSymbols )
|
|
|
|
{
|
2011-02-03 14:08:51 +00:00
|
|
|
nX += IMGINNERTEXTSPACE;
|
2000-09-18 16:07:07 +00:00
|
|
|
Image* pImg = NULL;
|
|
|
|
if ( (nType & (FONTLIST_FONTNAMETYPE_PRINTER | FONTLIST_FONTNAMETYPE_SCREEN)) == FONTLIST_FONTNAMETYPE_PRINTER )
|
|
|
|
pImg = &maImagePrinterFont;
|
|
|
|
else if ( nType & FONTLIST_FONTNAMETYPE_SCALABLE )
|
|
|
|
pImg = &maImageScalableFont;
|
|
|
|
else
|
|
|
|
pImg = &maImageBitmapFont;
|
|
|
|
|
|
|
|
if ( pImg )
|
|
|
|
{
|
|
|
|
Point aPos( nX, aTopLeft.Y() + (nH-pImg->GetSizePixel().Height())/2 );
|
|
|
|
rUDEvt.GetDevice()->DrawImage( aPos, *pImg );
|
|
|
|
}
|
|
|
|
|
|
|
|
// X immer um gleiche Breite aendern, auch wenn kein Image ausgegeben.
|
|
|
|
nX += maImagePrinterFont.GetSizePixel().Width();
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( mbWYSIWYG && mpFontList )
|
|
|
|
{
|
2011-02-03 14:08:51 +00:00
|
|
|
nX += IMGOUTERTEXTSPACE;
|
2001-07-19 16:20:19 +00:00
|
|
|
|
2011-02-03 13:34:48 +00:00
|
|
|
bool bSymbolFont = (rInfo.GetCharSet() == RTL_TEXTENCODING_SYMBOL)
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("cmsy10")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("cmex10")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("feta26")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("jsMath-cmsy10")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("jsMath-cmex10")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("msam10")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("msbm10")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("wasy10")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("Denemo")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("GlyphBasic1")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("GlyphBasic2")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("GlyphBasic3")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("GlyphBasic4")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("Letters Laughing")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("MusiQwik")
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii("MusiSync");
|
|
|
|
|
2001-07-19 16:20:19 +00:00
|
|
|
// starsymbol is a unicode font, but cannot display its own name
|
2008-04-03 16:13:16 +00:00
|
|
|
const bool bOpenSymbol = rInfo.GetName().EqualsIgnoreCaseAscii( "starsymbol" )
|
|
|
|
|| rInfo.GetName().EqualsIgnoreCaseAscii( "opensymbol" );
|
|
|
|
bSymbolFont |= bOpenSymbol;
|
2001-07-19 16:20:19 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
Color aTextColor = rUDEvt.GetDevice()->GetTextColor();
|
|
|
|
Font aOldFont( rUDEvt.GetDevice()->GetFont() );
|
2001-07-19 16:20:19 +00:00
|
|
|
Size aSize( aOldFont.GetSize() );
|
|
|
|
aSize.Height() += EXTRAFONTSIZE;
|
2000-09-18 16:07:07 +00:00
|
|
|
Font aFont( rInfo );
|
2001-07-19 16:20:19 +00:00
|
|
|
aFont.SetSize( aSize );
|
2000-09-18 16:07:07 +00:00
|
|
|
rUDEvt.GetDevice()->SetFont( aFont );
|
|
|
|
rUDEvt.GetDevice()->SetTextColor( aTextColor );
|
2008-04-03 16:13:16 +00:00
|
|
|
|
2011-02-03 14:08:51 +00:00
|
|
|
bool bUsingCorrectFont = true;
|
|
|
|
Rectangle aTextRect;
|
2001-07-19 16:20:19 +00:00
|
|
|
|
2011-02-03 14:08:51 +00:00
|
|
|
// Preview the font name
|
|
|
|
rtl::OUString sFontName = rInfo.GetName();
|
2008-04-03 16:13:16 +00:00
|
|
|
|
2011-02-03 14:08:51 +00:00
|
|
|
//If it shouldn't or can't draw its own name because it doesn't have the glyphs
|
|
|
|
if (bSymbolFont || (STRING_LEN != rUDEvt.GetDevice()->HasGlyphs(aFont, sFontName)))
|
|
|
|
bUsingCorrectFont = false;
|
|
|
|
else
|
2001-07-19 16:20:19 +00:00
|
|
|
{
|
2011-02-03 14:08:51 +00:00
|
|
|
//Make sure it fits in the available height, shrinking the font if necessary
|
|
|
|
bUsingCorrectFont = shrinkFontToFit(sFontName, nH, aFont, *rUDEvt.GetDevice(), aTextRect) != 0;
|
|
|
|
}
|
2008-04-03 16:13:16 +00:00
|
|
|
|
2011-02-03 14:08:51 +00:00
|
|
|
if (!bUsingCorrectFont)
|
|
|
|
{
|
|
|
|
rUDEvt.GetDevice()->SetFont(aOldFont);
|
|
|
|
rUDEvt.GetDevice()->GetTextBoundRect(aTextRect, sFontName, 0, 0);
|
|
|
|
}
|
2002-11-07 08:03:21 +00:00
|
|
|
|
2011-02-03 14:08:51 +00:00
|
|
|
long nTextHeight = aTextRect.GetHeight();
|
|
|
|
long nDesiredGap = (nH-nTextHeight)/2;
|
|
|
|
long nVertAdjust = nDesiredGap - aTextRect.Top();
|
|
|
|
// long nHortAdjust = 0 - aTextRect.Left();
|
|
|
|
Point aPos( nX, aTopLeft.Y() + nVertAdjust );
|
|
|
|
rUDEvt.GetDevice()->DrawText( aPos, sFontName );
|
|
|
|
Rectangle aHack(aPos.X(), aTopLeft.Y() + nH/2 - 5, aPos.X() + 40, aTopLeft.Y() + nH/2 + 5);
|
|
|
|
long nTextX = aPos.X() + aTextRect.GetWidth();
|
|
|
|
|
|
|
|
if (!bUsingCorrectFont)
|
|
|
|
rUDEvt.GetDevice()->SetFont( aFont );
|
|
|
|
|
|
|
|
rtl::OUString sSampleText;
|
|
|
|
bool bHasSampleTextGlyphs=false;
|
|
|
|
|
2011-02-06 13:46:45 +00:00
|
|
|
if (!bSymbolFont)
|
|
|
|
{
|
|
|
|
const bool bNameBeginsWithLatinText = rInfo.GetName().GetChar(0) <= 'z';
|
2011-02-28 16:57:28 +00:00
|
|
|
vcl::FontCapabilities aFontCapabilities;
|
2011-03-01 15:38:00 +00:00
|
|
|
#if OSL_DEBUG_LEVEL > 2
|
|
|
|
lcl_dump_unicode_coverage(aFontCapabilities.maUnicodeRange);
|
|
|
|
lcl_dump_codepage_coverage(aFontCapabilities.maCodePageRange);
|
|
|
|
#endif
|
2011-02-28 16:57:28 +00:00
|
|
|
if (bNameBeginsWithLatinText && rUDEvt.GetDevice()->GetFontCapabilities(aFontCapabilities))
|
2011-02-06 13:46:45 +00:00
|
|
|
{
|
|
|
|
//If this font is probably tuned to display a single non-Latin
|
|
|
|
//script and the font name is itself in Latin, then show a small
|
|
|
|
//chunk of representative text for that script
|
2011-02-28 16:57:28 +00:00
|
|
|
size_t nScript = getScript(aFontCapabilities);
|
|
|
|
if (nScript)
|
2011-02-06 13:46:45 +00:00
|
|
|
{
|
2011-02-28 16:57:28 +00:00
|
|
|
//If we're a CJK font, see if we seem to be tuned
|
|
|
|
//for C, J or K
|
|
|
|
if (nScript & JAPANESE && nScript ^ JAPANESE)
|
2011-02-06 13:46:45 +00:00
|
|
|
{
|
2011-02-28 16:57:28 +00:00
|
|
|
const sal_Unicode aJapanese[] = { 0x3007, 0x9F9D };
|
|
|
|
rtl::OUString sJapanese(aJapanese, SAL_N_ELEMENTS(aJapanese));
|
|
|
|
if (STRING_LEN != rUDEvt.GetDevice()->HasGlyphs(aFont, sJapanese))
|
|
|
|
nScript ^= JAPANESE;
|
2011-02-06 13:46:45 +00:00
|
|
|
}
|
2011-02-28 16:57:28 +00:00
|
|
|
|
|
|
|
if (nScript & TRADITIONAL_CHINESE && nScript ^ TRADITIONAL_CHINESE)
|
|
|
|
{
|
|
|
|
const sal_Unicode aTraditionalChinese[] = { 0xFA0D };
|
|
|
|
rtl::OUString sTraditionalChinese(aTraditionalChinese, SAL_N_ELEMENTS(aTraditionalChinese));
|
|
|
|
if (STRING_LEN != rUDEvt.GetDevice()->HasGlyphs(aFont, sTraditionalChinese))
|
|
|
|
nScript ^= TRADITIONAL_CHINESE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (nScript & SIMPLIFIED_CHINESE && nScript ^ SIMPLIFIED_CHINESE)
|
|
|
|
{
|
|
|
|
const sal_Unicode aSimplifiedChinese[] = { 0x9FA0 };
|
|
|
|
rtl::OUString sSimplifiedChinese(aSimplifiedChinese, SAL_N_ELEMENTS(aSimplifiedChinese));
|
|
|
|
if (STRING_LEN != rUDEvt.GetDevice()->HasGlyphs(aFont, sSimplifiedChinese))
|
|
|
|
nScript ^= SIMPLIFIED_CHINESE;
|
|
|
|
}
|
|
|
|
|
|
|
|
sSampleText = getRepresentativeText(nScript);
|
|
|
|
bHasSampleTextGlyphs = (STRING_LEN == rUDEvt.GetDevice()->HasGlyphs(aFont, sSampleText));
|
2011-02-06 13:46:45 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//If we're not a symbol font, but could neither render our own name and
|
|
|
|
//we can't determine what script it would like to render, then try a
|
|
|
|
//few well known scripts
|
|
|
|
if (!sSampleText.getLength() && !bUsingCorrectFont)
|
|
|
|
{
|
2011-02-28 16:57:28 +00:00
|
|
|
static const sal_Int32 aScripts[] =
|
2011-02-06 13:46:45 +00:00
|
|
|
{
|
2011-02-28 16:57:28 +00:00
|
|
|
vcl::UnicodeCoverage::ARABIC,
|
|
|
|
vcl::UnicodeCoverage::HEBREW,
|
|
|
|
|
|
|
|
vcl::UnicodeCoverage::BENGALI,
|
|
|
|
vcl::UnicodeCoverage::GURMUKHI,
|
|
|
|
vcl::UnicodeCoverage::GUJARATI,
|
|
|
|
vcl::UnicodeCoverage::ORIYA,
|
|
|
|
vcl::UnicodeCoverage::TAMIL,
|
|
|
|
vcl::UnicodeCoverage::TELUGU,
|
|
|
|
vcl::UnicodeCoverage::KANNADA,
|
|
|
|
vcl::UnicodeCoverage::MALAYALAM,
|
|
|
|
vcl::UnicodeCoverage::SINHALA,
|
|
|
|
vcl::UnicodeCoverage::DEVANAGARI,
|
|
|
|
|
|
|
|
vcl::UnicodeCoverage::THAI,
|
|
|
|
vcl::UnicodeCoverage::LAO,
|
|
|
|
vcl::UnicodeCoverage::GEORGIAN,
|
|
|
|
vcl::UnicodeCoverage::TIBETAN,
|
|
|
|
vcl::UnicodeCoverage::SYRIAC,
|
|
|
|
vcl::UnicodeCoverage::MYANMAR,
|
|
|
|
vcl::UnicodeCoverage::ETHIOPIC,
|
|
|
|
vcl::UnicodeCoverage::KHMER,
|
|
|
|
vcl::UnicodeCoverage::MONGOLIAN,
|
|
|
|
|
|
|
|
KOREAN,
|
|
|
|
JAPANESE,
|
|
|
|
TRADITIONAL_CHINESE|SIMPLIFIED_CHINESE,
|
|
|
|
|
2011-03-01 15:38:00 +00:00
|
|
|
vcl::UnicodeCoverage::GREEK_AND_COPTIC,
|
|
|
|
|
|
|
|
HEBREW_MINIMAL,
|
|
|
|
GREEK_MINIMAL
|
2011-02-06 13:46:45 +00:00
|
|
|
};
|
|
|
|
|
2011-02-28 16:57:28 +00:00
|
|
|
for (size_t i = 0; i < SAL_N_ELEMENTS(aScripts); ++i)
|
2011-02-06 13:46:45 +00:00
|
|
|
{
|
2011-02-28 16:57:28 +00:00
|
|
|
sSampleText = getRepresentativeText(aScripts[i]);
|
2011-02-06 13:46:45 +00:00
|
|
|
if (sSampleText.getLength())
|
|
|
|
{
|
|
|
|
bHasSampleTextGlyphs = (STRING_LEN == rUDEvt.GetDevice()->HasGlyphs(aFont, sSampleText));
|
|
|
|
if (bHasSampleTextGlyphs)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2011-02-03 14:16:16 +00:00
|
|
|
|
2011-02-03 14:08:51 +00:00
|
|
|
//If we're a symbol font, or for some reason the font still couldn't
|
|
|
|
//render something representative of what it would like to render then
|
|
|
|
//make up some semi-random text that it *can* display
|
2011-02-06 13:46:45 +00:00
|
|
|
if (bSymbolFont || (!bUsingCorrectFont && !bHasSampleTextGlyphs))
|
2011-02-03 14:08:51 +00:00
|
|
|
{
|
|
|
|
sSampleText = makeRepresentativeSymbolText(bOpenSymbol, *rUDEvt.GetDevice());
|
|
|
|
bHasSampleTextGlyphs = (STRING_LEN == rUDEvt.GetDevice()->HasGlyphs(aFont, sSampleText));
|
2008-04-03 16:13:16 +00:00
|
|
|
}
|
2011-02-03 14:08:51 +00:00
|
|
|
|
|
|
|
if (sSampleText.getLength() && bHasSampleTextGlyphs)
|
2008-04-03 16:13:16 +00:00
|
|
|
{
|
2011-02-03 14:08:51 +00:00
|
|
|
const Size &rItemSize = rUDEvt.GetDevice()->GetOutputSize();
|
|
|
|
//leave a little border at the edge
|
|
|
|
long nSpace = rItemSize.Width() - nTextX - IMGOUTERTEXTSPACE;
|
|
|
|
if (nSpace >= 0)
|
|
|
|
{
|
|
|
|
//Make sure it fits in the available height, and get how wide that would be
|
|
|
|
long nWidth = shrinkFontToFit(sSampleText, nH, aFont, *rUDEvt.GetDevice(), aTextRect);
|
|
|
|
//Chop letters off until it fits in the available width
|
|
|
|
while (nWidth > nSpace || nWidth > MAXPREVIEWWIDTH)
|
|
|
|
{
|
|
|
|
sSampleText = sSampleText.copy(0, sSampleText.getLength()-1);
|
|
|
|
nWidth = rUDEvt.GetDevice()->GetTextBoundRect(aTextRect, sSampleText, 0, 0) ?
|
|
|
|
aTextRect.GetWidth() : 0;
|
|
|
|
}
|
2002-11-07 08:03:21 +00:00
|
|
|
|
2011-02-03 14:08:51 +00:00
|
|
|
//center the text on the line
|
|
|
|
if (sSampleText.getLength() && nWidth)
|
|
|
|
{
|
|
|
|
nTextHeight = aTextRect.GetHeight();
|
|
|
|
nDesiredGap = (nH-nTextHeight)/2;
|
|
|
|
nVertAdjust = nDesiredGap - aTextRect.Top();
|
|
|
|
aPos = Point(nTextX + nSpace - nWidth, aTopLeft.Y() + nVertAdjust);
|
|
|
|
rUDEvt.GetDevice()->DrawText( aPos, sSampleText );
|
|
|
|
}
|
|
|
|
}
|
2001-07-19 16:20:19 +00:00
|
|
|
}
|
2002-11-07 08:03:21 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
rUDEvt.GetDevice()->SetFont( aOldFont );
|
2010-11-05 10:31:15 +08:00
|
|
|
DrawEntry( rUDEvt, sal_False, sal_False); // draw seperator
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
DrawEntry( rUDEvt, sal_True, sal_True );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ===================================================================
|
|
|
|
// FontStyleBox
|
|
|
|
// ===================================================================
|
|
|
|
|
|
|
|
FontStyleBox::FontStyleBox( Window* pParent, WinBits nWinStyle ) :
|
|
|
|
ComboBox( pParent, nWinStyle )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
FontStyleBox::FontStyleBox( Window* pParent, const ResId& rResId ) :
|
|
|
|
ComboBox( pParent, rResId )
|
|
|
|
{
|
|
|
|
aLastStyle = GetText();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
FontStyleBox::~FontStyleBox()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
void FontStyleBox::Select()
|
|
|
|
{
|
2001-07-19 16:20:19 +00:00
|
|
|
// keep text over fill operation
|
2000-09-18 16:07:07 +00:00
|
|
|
aLastStyle = GetText();
|
|
|
|
ComboBox::Select();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
void FontStyleBox::LoseFocus()
|
|
|
|
{
|
2001-07-19 16:20:19 +00:00
|
|
|
// keep text over fill operation
|
2000-09-18 16:07:07 +00:00
|
|
|
aLastStyle = GetText();
|
|
|
|
ComboBox::LoseFocus();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
void FontStyleBox::Modify()
|
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
CharClass aChrCls( ::comphelper::getProcessServiceFactory(),
|
2001-07-19 16:20:19 +00:00
|
|
|
GetSettings().GetLocale() );
|
2001-03-09 14:43:51 +00:00
|
|
|
XubString aStr = GetText();
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 nEntryCount = GetEntryCount();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
if ( GetEntryPos( aStr ) == COMBOBOX_ENTRY_NOTFOUND )
|
|
|
|
{
|
2000-10-22 16:44:39 +00:00
|
|
|
aChrCls.toUpper( aStr );
|
2010-11-05 10:31:15 +08:00
|
|
|
for ( sal_uInt16 i = 0; i < nEntryCount; i++ )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
XubString aEntryText = GetEntry( i );
|
2000-10-22 16:44:39 +00:00
|
|
|
aChrCls.toUpper( aEntryText );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
if ( aStr == aEntryText )
|
|
|
|
{
|
|
|
|
SetText( GetEntry( i ) );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ComboBox::Modify();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
|
|
|
|
void FontStyleBox::Fill( const XubString& rName, const FontList* pList )
|
|
|
|
{
|
2001-07-19 16:20:19 +00:00
|
|
|
// note: this method must call ComboBox::SetText(),
|
|
|
|
// else aLastStyle will overwritten
|
|
|
|
// store prior selection position and clear box
|
2000-09-18 16:07:07 +00:00
|
|
|
XubString aOldText = GetText();
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 nPos = GetEntryPos( aOldText );
|
2000-09-18 16:07:07 +00:00
|
|
|
Clear();
|
|
|
|
|
2001-07-19 16:20:19 +00:00
|
|
|
// does a font with this name already exist?
|
2000-09-18 16:07:07 +00:00
|
|
|
sal_Handle hFontInfo = pList->GetFirstFontInfo( rName );
|
|
|
|
if ( hFontInfo )
|
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
XubString aStyleText;
|
|
|
|
FontWeight eLastWeight = WEIGHT_DONTKNOW;
|
|
|
|
FontItalic eLastItalic = ITALIC_NONE;
|
|
|
|
FontWidth eLastWidth = WIDTH_DONTKNOW;
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_Bool bNormal = sal_False;
|
|
|
|
sal_Bool bItalic = sal_False;
|
|
|
|
sal_Bool bBold = sal_False;
|
|
|
|
sal_Bool bBoldItalic = sal_False;
|
|
|
|
sal_Bool bInsert = sal_False;
|
2000-09-18 16:07:07 +00:00
|
|
|
FontInfo aInfo;
|
|
|
|
while ( hFontInfo )
|
|
|
|
{
|
|
|
|
aInfo = pList->GetFontInfo( hFontInfo );
|
|
|
|
|
|
|
|
FontWeight eWeight = aInfo.GetWeight();
|
|
|
|
FontItalic eItalic = aInfo.GetItalic();
|
2001-03-09 14:43:51 +00:00
|
|
|
FontWidth eWidth = aInfo.GetWidthType();
|
|
|
|
// Only if the attributes are different, we insert the
|
|
|
|
// Font to avoid double Entries in different languages
|
|
|
|
if ( (eWeight != eLastWeight) || (eItalic != eLastItalic) ||
|
|
|
|
(eWidth != eLastWidth) )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( bInsert )
|
|
|
|
InsertEntry( aStyleText );
|
|
|
|
|
|
|
|
if ( eWeight <= WEIGHT_NORMAL )
|
|
|
|
{
|
|
|
|
if ( eItalic != ITALIC_NONE )
|
2010-11-05 10:31:15 +08:00
|
|
|
bItalic = sal_True;
|
2001-03-09 14:43:51 +00:00
|
|
|
else
|
2010-11-05 10:31:15 +08:00
|
|
|
bNormal = sal_True;
|
2001-03-09 14:43:51 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if ( eItalic != ITALIC_NONE )
|
2010-11-05 10:31:15 +08:00
|
|
|
bBoldItalic = sal_True;
|
2001-03-09 14:43:51 +00:00
|
|
|
else
|
2010-11-05 10:31:15 +08:00
|
|
|
bBold = sal_True;
|
2001-03-09 14:43:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// For wrong StyleNames we replace this with the correct once
|
|
|
|
aStyleText = pList->GetStyleName( aInfo );
|
|
|
|
bInsert = GetEntryPos( aStyleText ) == LISTBOX_ENTRY_NOTFOUND;
|
|
|
|
if ( !bInsert )
|
|
|
|
{
|
|
|
|
aStyleText = pList->GetStyleName( eWeight, eItalic );
|
|
|
|
bInsert = GetEntryPos( aStyleText ) == LISTBOX_ENTRY_NOTFOUND;
|
|
|
|
}
|
|
|
|
|
|
|
|
eLastWeight = eWeight;
|
|
|
|
eLastItalic = eItalic;
|
|
|
|
eLastWidth = eWidth;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( bInsert )
|
|
|
|
{
|
|
|
|
// If we have two names for the same attributes
|
|
|
|
// we prefer the translated standard names
|
|
|
|
const XubString& rAttrStyleText = pList->GetStyleName( eWeight, eItalic );
|
|
|
|
if ( rAttrStyleText != aStyleText )
|
|
|
|
{
|
|
|
|
XubString aTempStyleText = pList->GetStyleName( aInfo );
|
|
|
|
if ( rAttrStyleText == aTempStyleText )
|
|
|
|
aStyleText = rAttrStyleText;
|
|
|
|
bInsert = GetEntryPos( aStyleText ) == LISTBOX_ENTRY_NOTFOUND;
|
|
|
|
}
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
2001-03-09 14:43:51 +00:00
|
|
|
|
|
|
|
if ( !bItalic && (aStyleText == pList->GetItalicStr()) )
|
2010-11-05 10:31:15 +08:00
|
|
|
bItalic = sal_True;
|
2001-03-09 14:43:51 +00:00
|
|
|
else if ( !bBold && (aStyleText == pList->GetBoldStr()) )
|
2010-11-05 10:31:15 +08:00
|
|
|
bBold = sal_True;
|
2001-03-09 14:43:51 +00:00
|
|
|
else if ( !bBoldItalic && (aStyleText == pList->GetBoldItalicStr()) )
|
2010-11-05 10:31:15 +08:00
|
|
|
bBoldItalic = sal_True;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
hFontInfo = pList->GetNextFontInfo( hFontInfo );
|
|
|
|
}
|
|
|
|
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( bInsert )
|
|
|
|
InsertEntry( aStyleText );
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
// Bestimmte Styles als Nachbildung
|
|
|
|
if ( bNormal )
|
|
|
|
{
|
|
|
|
if ( !bItalic )
|
|
|
|
InsertEntry( pList->GetItalicStr() );
|
|
|
|
if ( !bBold )
|
|
|
|
InsertEntry( pList->GetBoldStr() );
|
|
|
|
}
|
|
|
|
if ( !bBoldItalic )
|
|
|
|
{
|
|
|
|
if ( bNormal || bItalic || bBold )
|
|
|
|
InsertEntry( pList->GetBoldItalicStr() );
|
|
|
|
}
|
|
|
|
if ( aOldText.Len() )
|
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( GetEntryPos( aLastStyle ) != LISTBOX_ENTRY_NOTFOUND )
|
2000-09-18 16:07:07 +00:00
|
|
|
ComboBox::SetText( aLastStyle );
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if ( nPos >= GetEntryCount() )
|
|
|
|
ComboBox::SetText( GetEntry( 0 ) );
|
|
|
|
else
|
|
|
|
ComboBox::SetText( GetEntry( nPos ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// Wenn Font nicht, dann Standard-Styles einfuegen
|
|
|
|
InsertEntry( pList->GetNormalStr() );
|
|
|
|
InsertEntry( pList->GetItalicStr() );
|
|
|
|
InsertEntry( pList->GetBoldStr() );
|
|
|
|
InsertEntry( pList->GetBoldItalicStr() );
|
|
|
|
if ( aOldText.Len() )
|
|
|
|
{
|
|
|
|
if ( nPos > GetEntryCount() )
|
|
|
|
ComboBox::SetText( GetEntry( 0 ) );
|
|
|
|
else
|
|
|
|
ComboBox::SetText( GetEntry( nPos ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ===================================================================
|
|
|
|
// FontSizeBox
|
|
|
|
// ===================================================================
|
|
|
|
|
|
|
|
FontSizeBox::FontSizeBox( Window* pParent, WinBits nWinSize ) :
|
|
|
|
MetricBox( pParent, nWinSize )
|
|
|
|
{
|
|
|
|
ImplInit();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
FontSizeBox::FontSizeBox( Window* pParent, const ResId& rResId ) :
|
|
|
|
MetricBox( pParent, rResId )
|
|
|
|
{
|
|
|
|
ImplInit();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
FontSizeBox::~FontSizeBox()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void FontSizeBox::ImplInit()
|
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
EnableAutocomplete( sal_False );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
bRelativeMode = sal_False;
|
|
|
|
bPtRelative = sal_False;
|
|
|
|
bRelative = sal_False;
|
|
|
|
bStdSize = sal_False;
|
2000-09-18 16:07:07 +00:00
|
|
|
pFontList = NULL;
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
SetShowTrailingZeros( sal_False );
|
2000-09-18 16:07:07 +00:00
|
|
|
SetDecimalDigits( 1 );
|
|
|
|
SetMin( 20 );
|
|
|
|
SetMax( 9999 );
|
2009-12-18 15:29:59 +01:00
|
|
|
SetProminentEntryType( PROMINENT_MIDDLE );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2001-03-09 14:43:51 +00:00
|
|
|
void FontSizeBox::Reformat()
|
|
|
|
{
|
2007-03-26 10:53:44 +00:00
|
|
|
FontSizeNames aFontSizeNames( GetSettings().GetUILanguage() );
|
|
|
|
if ( !bRelativeMode || !aFontSizeNames.IsEmpty() )
|
2001-03-09 14:43:51 +00:00
|
|
|
{
|
|
|
|
long nNewValue = aFontSizeNames.Name2Size( GetText() );
|
2007-03-26 10:53:44 +00:00
|
|
|
if ( nNewValue)
|
2001-03-09 14:43:51 +00:00
|
|
|
{
|
|
|
|
mnLastValue = nNewValue;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
MetricBox::Reformat();
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
void FontSizeBox::Modify()
|
|
|
|
{
|
|
|
|
MetricBox::Modify();
|
|
|
|
|
|
|
|
if ( bRelativeMode )
|
|
|
|
{
|
|
|
|
XubString aStr = GetText();
|
|
|
|
aStr.EraseLeadingChars();
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_Bool bNewMode = bRelative;
|
|
|
|
sal_Bool bOldPtRelMode = bPtRelative;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
if ( bRelative )
|
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
bPtRelative = sal_False;
|
2000-09-18 16:07:07 +00:00
|
|
|
const xub_Unicode* pStr = aStr.GetBuffer();
|
|
|
|
while ( *pStr )
|
|
|
|
{
|
|
|
|
if ( ((*pStr < '0') || (*pStr > '9')) && (*pStr != '%') )
|
|
|
|
{
|
|
|
|
if ( ('-' == *pStr || '+' == *pStr) && !bPtRelative )
|
2010-11-05 10:31:15 +08:00
|
|
|
bPtRelative = sal_True;
|
2000-09-18 16:07:07 +00:00
|
|
|
else if ( bPtRelative && 'p' == *pStr && 't' == *++pStr )
|
|
|
|
;
|
|
|
|
else
|
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
bNewMode = sal_False;
|
2000-09-18 16:07:07 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pStr++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if ( STRING_NOTFOUND != aStr.Search( '%' ) )
|
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
bNewMode = sal_True;
|
|
|
|
bPtRelative = sal_False;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( '-' == aStr.GetChar( 0 ) || '+' == aStr.GetChar( 0 ) )
|
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
bNewMode = sal_True;
|
|
|
|
bPtRelative = sal_True;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( bNewMode != bRelative || bPtRelative != bOldPtRelMode )
|
|
|
|
SetRelative( bNewMode );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2007-01-23 07:50:49 +00:00
|
|
|
void FontSizeBox::Fill( const FontInfo* pInfo, const FontList* pList )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2000-12-07 15:07:37 +00:00
|
|
|
// remember for relative mode
|
2000-09-18 16:07:07 +00:00
|
|
|
pFontList = pList;
|
|
|
|
|
2000-12-07 15:07:37 +00:00
|
|
|
// no font sizes need to be set for relative mode
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( bRelative )
|
|
|
|
return;
|
|
|
|
|
2000-12-07 15:07:37 +00:00
|
|
|
// query font sizes
|
2001-03-09 14:43:51 +00:00
|
|
|
const long* pTempAry;
|
2007-01-23 07:50:49 +00:00
|
|
|
const long* pAry = 0;
|
|
|
|
|
|
|
|
if( pInfo )
|
|
|
|
{
|
|
|
|
aFontInfo = *pInfo;
|
|
|
|
pAry = pList->GetSizeAry( *pInfo );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pAry = pList->GetStdSizeAry();
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2007-03-26 10:53:44 +00:00
|
|
|
// first insert font size names (for simplified/traditional chinese)
|
|
|
|
FontSizeNames aFontSizeNames( GetSettings().GetUILanguage() );
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( pAry == pList->GetStdSizeAry() )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
// for standard sizes we don't need to bother
|
2007-03-26 10:53:44 +00:00
|
|
|
if ( bStdSize && GetEntryCount() && aFontSizeNames.IsEmpty() )
|
2000-09-18 16:07:07 +00:00
|
|
|
return;
|
2010-11-05 10:31:15 +08:00
|
|
|
bStdSize = sal_True;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
else
|
2010-11-05 10:31:15 +08:00
|
|
|
bStdSize = sal_False;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2007-03-26 10:53:44 +00:00
|
|
|
Selection aSelection = GetSelection();
|
|
|
|
XubString aStr = GetText();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
Clear();
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 nPos = 0;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( !aFontSizeNames.IsEmpty() )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( pAry == pList->GetStdSizeAry() )
|
2000-12-07 15:07:37 +00:00
|
|
|
{
|
|
|
|
// for scalable fonts all font size names
|
2011-01-12 15:56:50 +01:00
|
|
|
sal_uLong nCount = aFontSizeNames.Count();
|
|
|
|
for( sal_uLong i = 0; i < nCount; i++ )
|
2000-12-07 15:07:37 +00:00
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
String aSizeName = aFontSizeNames.GetIndexName( i );
|
|
|
|
long nSize = aFontSizeNames.GetIndexSize( i );
|
|
|
|
ComboBox::InsertEntry( aSizeName, nPos );
|
|
|
|
ComboBox::SetEntryData( nPos, (void*)(-nSize) ); // mark as special
|
|
|
|
nPos++;
|
2000-12-07 15:07:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// for fixed size fonts only selectable font size names
|
2001-03-09 14:43:51 +00:00
|
|
|
pTempAry = pAry;
|
|
|
|
while ( *pTempAry )
|
2000-12-07 15:07:37 +00:00
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
String aSizeName = aFontSizeNames.Size2Name( *pTempAry );
|
|
|
|
if ( aSizeName.Len() )
|
2000-12-07 15:07:37 +00:00
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
ComboBox::InsertEntry( aSizeName, nPos );
|
|
|
|
ComboBox::SetEntryData( nPos, (void*)(-(*pTempAry)) ); // mark as special
|
|
|
|
nPos++;
|
2000-12-07 15:07:37 +00:00
|
|
|
}
|
2001-03-09 14:43:51 +00:00
|
|
|
pTempAry++;
|
2000-12-07 15:07:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// then insert numerical font size values
|
2001-03-09 14:43:51 +00:00
|
|
|
pTempAry = pAry;
|
|
|
|
while ( *pTempAry )
|
2000-12-07 15:07:37 +00:00
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
InsertValue( *pTempAry, FUNIT_NONE, nPos );
|
|
|
|
ComboBox::SetEntryData( nPos, (void*)(*pTempAry) );
|
|
|
|
nPos++;
|
|
|
|
pTempAry++;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SetText( aStr );
|
|
|
|
SetSelection( aSelection );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
void FontSizeBox::EnableRelativeMode( sal_uInt16 nMin, sal_uInt16 nMax, sal_uInt16 nStep )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
bRelativeMode = sal_True;
|
2000-09-18 16:07:07 +00:00
|
|
|
nRelMin = nMin;
|
|
|
|
nRelMax = nMax;
|
|
|
|
nRelStep = nStep;
|
|
|
|
SetUnit( FUNIT_POINT );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
|
|
|
void FontSizeBox::EnablePtRelativeMode( short nMin, short nMax, short nStep )
|
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
bRelativeMode = sal_True;
|
2000-09-18 16:07:07 +00:00
|
|
|
nPtRelMin = nMin;
|
|
|
|
nPtRelMax = nMax;
|
|
|
|
nPtRelStep = nStep;
|
|
|
|
SetUnit( FUNIT_POINT );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
void FontSizeBox::SetRelative( sal_Bool bNewRelative )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
if ( bRelativeMode )
|
|
|
|
{
|
|
|
|
Selection aSelection = GetSelection();
|
|
|
|
XubString aStr = GetText();
|
|
|
|
aStr.EraseLeadingChars();
|
|
|
|
|
|
|
|
if ( bNewRelative )
|
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
bRelative = sal_True;
|
|
|
|
bStdSize = sal_False;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
if ( bPtRelative )
|
|
|
|
{
|
|
|
|
SetDecimalDigits( 1 );
|
|
|
|
SetMin( nPtRelMin );
|
|
|
|
SetMax( nPtRelMax );
|
|
|
|
SetUnit( FUNIT_POINT );
|
|
|
|
|
|
|
|
Clear();
|
2001-07-19 16:20:19 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
short i = nPtRelMin, n = 0;
|
2000-12-07 15:07:37 +00:00
|
|
|
// JP 30.06.98: more than 100 values are not useful
|
2000-09-18 16:07:07 +00:00
|
|
|
while ( i <= nPtRelMax && n++ < 100 )
|
|
|
|
{
|
|
|
|
InsertValue( i );
|
2006-10-12 14:11:29 +00:00
|
|
|
i = i + nPtRelStep;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
SetDecimalDigits( 0 );
|
|
|
|
SetMin( nRelMin );
|
|
|
|
SetMax( nRelMax );
|
|
|
|
SetCustomUnitText( '%' );
|
|
|
|
SetUnit( FUNIT_CUSTOM );
|
|
|
|
|
|
|
|
Clear();
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_uInt16 i = nRelMin;
|
2000-09-18 16:07:07 +00:00
|
|
|
while ( i <= nRelMax )
|
|
|
|
{
|
|
|
|
InsertValue( i );
|
2006-10-12 14:11:29 +00:00
|
|
|
i = i + nRelStep;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2010-11-05 10:31:15 +08:00
|
|
|
bRelative = bPtRelative = sal_False;
|
2000-09-18 16:07:07 +00:00
|
|
|
SetDecimalDigits( 1 );
|
|
|
|
SetMin( 20 );
|
|
|
|
SetMax( 9999 );
|
|
|
|
SetUnit( FUNIT_POINT );
|
|
|
|
if ( pFontList )
|
2007-01-23 07:50:49 +00:00
|
|
|
Fill( &aFontInfo, pFontList );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SetText( aStr );
|
|
|
|
SetSelection( aSelection );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2007-01-23 10:44:29 +00:00
|
|
|
XubString FontSizeBox::CreateFieldText( sal_Int64 nValue ) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
XubString sRet( MetricBox::CreateFieldText( nValue ) );
|
|
|
|
if ( bRelativeMode && bPtRelative && (0 <= nValue) && sRet.Len() )
|
|
|
|
sRet.Insert( '+', 0 );
|
|
|
|
return sRet;
|
|
|
|
}
|
2000-12-07 15:07:37 +00:00
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2007-01-23 10:44:29 +00:00
|
|
|
void FontSizeBox::SetValue( sal_Int64 nNewValue, FieldUnit eInUnit )
|
2001-03-09 14:43:51 +00:00
|
|
|
{
|
|
|
|
if ( !bRelative )
|
|
|
|
{
|
2007-01-23 10:44:29 +00:00
|
|
|
sal_Int64 nTempValue = MetricField::ConvertValue( nNewValue, GetBaseValue(), GetDecimalDigits(), eInUnit, GetUnit() );
|
2001-08-01 18:21:13 +00:00
|
|
|
FontSizeNames aFontSizeNames( GetSettings().GetUILanguage() );
|
2007-01-23 10:44:29 +00:00
|
|
|
// conversion loses precision; however font sizes should
|
|
|
|
// never have a problem with that
|
|
|
|
String aName = aFontSizeNames.Size2Name( static_cast<long>(nTempValue) );
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( aName.Len() && (GetEntryPos( aName ) != LISTBOX_ENTRY_NOTFOUND) )
|
|
|
|
{
|
|
|
|
mnLastValue = nTempValue;
|
|
|
|
SetText( aName );
|
|
|
|
mnFieldValue = mnLastValue;
|
2010-11-05 10:31:15 +08:00
|
|
|
SetEmptyFieldValueData( sal_False );
|
2007-03-26 10:53:44 +00:00
|
|
|
return;
|
2001-03-09 14:43:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
MetricBox::SetValue( nNewValue, eInUnit );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2007-01-23 10:44:29 +00:00
|
|
|
void FontSizeBox::SetValue( sal_Int64 nNewValue )
|
2001-03-09 14:43:51 +00:00
|
|
|
{
|
|
|
|
SetValue( nNewValue, FUNIT_NONE );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2010-11-05 10:31:15 +08:00
|
|
|
sal_Int64 FontSizeBox::GetValue( sal_uInt16 nPos, FieldUnit eOutUnit ) const
|
2000-12-07 15:07:37 +00:00
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( !bRelative )
|
2000-12-07 15:07:37 +00:00
|
|
|
{
|
2007-01-23 10:44:29 +00:00
|
|
|
sal_Int64 nComboVal = static_cast<sal_Int64>(reinterpret_cast<long>(ComboBox::GetEntryData( nPos )));
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( nComboVal < 0 ) // marked as special?
|
|
|
|
{
|
2007-01-23 10:44:29 +00:00
|
|
|
return MetricField::ConvertValue( -nComboVal, mnBaseValue, GetDecimalDigits(),
|
|
|
|
meUnit, eOutUnit );
|
2001-03-09 14:43:51 +00:00
|
|
|
}
|
2000-12-07 15:07:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// do normal font size processing
|
2007-01-23 10:44:29 +00:00
|
|
|
sal_Int64 nRetValue = MetricBox::GetValue( nPos, eOutUnit );
|
2000-12-07 15:07:37 +00:00
|
|
|
return nRetValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2007-01-23 10:44:29 +00:00
|
|
|
sal_Int64 FontSizeBox::GetValue( FieldUnit eOutUnit ) const
|
2000-12-07 15:07:37 +00:00
|
|
|
{
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( !bRelative )
|
2000-12-07 15:07:37 +00:00
|
|
|
{
|
2001-08-01 18:21:13 +00:00
|
|
|
FontSizeNames aFontSizeNames( GetSettings().GetUILanguage() );
|
2007-01-23 10:44:29 +00:00
|
|
|
sal_Int64 nValue = aFontSizeNames.Name2Size( GetText() );
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( nValue)
|
|
|
|
return MetricField::ConvertValue( nValue, GetBaseValue(), GetDecimalDigits(), GetUnit(), eOutUnit );
|
2000-12-07 15:07:37 +00:00
|
|
|
}
|
|
|
|
|
2001-03-09 14:43:51 +00:00
|
|
|
return MetricBox::GetValue( eOutUnit );
|
2000-12-07 15:07:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
|
|
|
2007-01-23 10:44:29 +00:00
|
|
|
sal_Int64 FontSizeBox::GetValue() const
|
2000-12-07 15:07:37 +00:00
|
|
|
{
|
2001-07-19 16:20:19 +00:00
|
|
|
// implementation not inline, because it is a virtual function
|
2001-03-09 14:43:51 +00:00
|
|
|
return GetValue( FUNIT_NONE );
|
2000-12-07 15:07:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
2001-03-09 14:43:51 +00:00
|
|
|
|
2007-01-23 10:44:29 +00:00
|
|
|
void FontSizeBox::SetUserValue( sal_Int64 nNewValue, FieldUnit eInUnit )
|
2001-03-09 14:43:51 +00:00
|
|
|
{
|
|
|
|
if ( !bRelative )
|
|
|
|
{
|
2007-01-23 10:44:29 +00:00
|
|
|
sal_Int64 nTempValue = MetricField::ConvertValue( nNewValue, GetBaseValue(), GetDecimalDigits(), eInUnit, GetUnit() );
|
2001-08-01 18:21:13 +00:00
|
|
|
FontSizeNames aFontSizeNames( GetSettings().GetUILanguage() );
|
2007-01-23 10:44:29 +00:00
|
|
|
// conversion loses precision
|
|
|
|
// however font sizes should never have a problem with that
|
|
|
|
String aName = aFontSizeNames.Size2Name( static_cast<long>(nTempValue) );
|
2001-03-09 14:43:51 +00:00
|
|
|
if ( aName.Len() && (GetEntryPos( aName ) != LISTBOX_ENTRY_NOTFOUND) )
|
|
|
|
{
|
|
|
|
mnLastValue = nTempValue;
|
|
|
|
SetText( aName );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
MetricBox::SetUserValue( nNewValue, eInUnit );
|
|
|
|
}
|
2006-05-04 13:25:27 +00:00
|
|
|
|
2010-10-14 08:27:31 +02:00
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|