357 lines
16 KiB
C++
357 lines
16 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* 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.
|
|
*
|
|
* 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).
|
|
*
|
|
* 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.
|
|
*
|
|
************************************************************************/
|
|
|
|
#ifndef _RSCDB_HXX
|
|
#define _RSCDB_HXX
|
|
|
|
#include <rscall.h>
|
|
#include <rsckey.hxx>
|
|
#include <rscconst.hxx>
|
|
#include <rscflag.hxx>
|
|
#include <rscrange.hxx>
|
|
#include <rscstr.hxx>
|
|
#include <rscarray.hxx>
|
|
#include <rscdef.hxx>
|
|
|
|
#include <vector>
|
|
#include <map>
|
|
|
|
class RscError;
|
|
class RscTupel;
|
|
class RscCont;
|
|
class RscCmdLine;
|
|
|
|
struct WriteRcContext
|
|
{
|
|
FILE * fOutput;
|
|
rtl::OString aOutputRc;
|
|
rtl::OString aOutputSysList;
|
|
RscCmdLine* pCmdLine;
|
|
};
|
|
|
|
/****************** R s c T y p C o n ************************************/
|
|
// Liste die alle Basistypen enthaelt
|
|
typedef ::std::vector< RscTop* > RscBaseList;
|
|
|
|
// Tabelle fuer Systemabhaengige Resourcen
|
|
struct RscSysEntry
|
|
{
|
|
sal_uInt32 nKey;
|
|
sal_uInt32 nRscTyp;
|
|
ByteString aFileName;
|
|
sal_uInt32 nTyp;
|
|
sal_uInt32 nRefId;
|
|
};
|
|
|
|
typedef ::std::vector< RscSysEntry* > RscSysList;
|
|
|
|
class RscTypCont
|
|
{
|
|
CharSet nSourceCharSet;
|
|
sal_uInt32 nMachineId; // Globaler Maschinentyp
|
|
RSCBYTEORDER_TYPE nByteOrder; // Intel oder
|
|
ByteString aLanguage; // output language
|
|
std::vector< sal_uInt32 > aLangFallbacks; // language fallback list (entry 0 is language itself)
|
|
ByteString aSearchPath; // Suchen der Bitmap, Icon, Pointer
|
|
ByteString aSysSearchPath; // aSearchPath plus language specific paths
|
|
sal_uInt32 nUniqueId; // eindeutiger Id fuer Systemresourcen
|
|
sal_uLong nFilePos; // Position in der Datei ( MTF )
|
|
sal_uInt32 nPMId; // eindeutiger Id fuer PM-Rseourcefile
|
|
// muss groesser als RSC_VERSIONCONTROL_ID sein
|
|
RscTop * pRoot; // Zeiger auf die Wurzel vom Typenbaum
|
|
RSCINST aVersion; // Versionskontrollinstanz
|
|
|
|
RscBaseList aBaseLst; // Liste der einfachen Resourceklasse
|
|
RscSysList aSysLst; // Liste der Systemresourcen
|
|
|
|
Atom nWinBitVarId; // Name der Winbitvariablen
|
|
Atom nBorderId;
|
|
Atom nHideId;
|
|
Atom nClipChildrenId;
|
|
Atom nSizeableId;
|
|
Atom nMoveableId;
|
|
Atom nMinimizeId;
|
|
Atom nMaximizeId;
|
|
Atom nCloseableId;
|
|
Atom nStdPopupId;
|
|
Atom nAppId;
|
|
Atom nTabstopId;
|
|
Atom nGroupId;
|
|
Atom nSysmodalId;
|
|
Atom nLeftId;
|
|
Atom nCenterId;
|
|
Atom nRightId;
|
|
Atom nTopId;
|
|
Atom nVCenterId;
|
|
Atom nBottomId;
|
|
Atom nHScrollId;
|
|
Atom nVScrollId;
|
|
Atom nSortId;
|
|
Atom nDefaultId;
|
|
Atom nSVLookId;
|
|
Atom nRepeatId;
|
|
Atom nDropDownId;
|
|
Atom nPassWordId;
|
|
Atom nReadOnlyId;
|
|
Atom nAutoSizeId;
|
|
Atom nSpinId;
|
|
Atom nTabControlId;
|
|
Atom nSimpleModeId;
|
|
Atom nDragId;
|
|
Atom nScrollId;
|
|
Atom nZoomableId;
|
|
Atom nHideWhenDeactivateId;
|
|
Atom nAutoHScrollId;
|
|
Atom nAutoVScrollId;
|
|
Atom nDDExtraWidthId;
|
|
Atom nWordBreakId;
|
|
Atom nLeftLabelId;
|
|
Atom nHasLinesId;
|
|
Atom nHasButtonsId;
|
|
Atom nRectStyleId;
|
|
Atom nLineSpacingId;
|
|
Atom nSmallStyleId;
|
|
Atom nEnableResizingId;
|
|
Atom nDockableId;
|
|
Atom nScaleId;
|
|
Atom nIgnoreTabId;
|
|
Atom nNoSplitDrawId;
|
|
Atom nTopImageId;
|
|
Atom nNoLabelId;
|
|
Atom nVertId;
|
|
Atom nSysWinId;
|
|
|
|
void Init(); // Initialisiert Klassen und Tabelle
|
|
void SETCONST( RscConst *, const char *, sal_uInt32 );
|
|
void SETCONST( RscConst *, Atom, sal_uInt32 );
|
|
RscEnum * InitLangType();
|
|
RscEnum * InitFieldUnitsType();
|
|
RscEnum * InitTimeFieldFormat();
|
|
RscEnum * InitColor();
|
|
RscEnum * InitMapUnit();
|
|
RscEnum * InitKey();
|
|
RscEnum * InitTriState();
|
|
RscEnum * InitMessButtons();
|
|
RscEnum * InitMessDefButton();
|
|
RscTupel * InitGeometry();
|
|
RscArray * InitLangGeometry( RscTupel * pGeo );
|
|
RscArray * InitSystemGeometry( RscTupel * pGeo );
|
|
RscCont * InitStringList();
|
|
RscArray * InitLangStringList( RscCont * pStrLst );
|
|
RscTupel * InitStringTupel();
|
|
RscTupel * InitStringLongTupel();
|
|
RscCont * InitStringTupelList( RscTupel * pStringTupel );
|
|
RscCont * InitStringLongTupelList( RscTupel * pStringLongTupel );
|
|
RscArray * InitLangStringTupelList( RscCont * pStrTupelLst );
|
|
RscArray * InitLangStringLongTupelList( RscCont * pStrLongTupelLst );
|
|
|
|
RscTop * InitClassMgr();
|
|
RscTop * InitClassString( RscTop * pSuper );
|
|
RscTop * InitClassBitmap( RscTop * pSuper );
|
|
RscTop * InitClassColor( RscTop * pSuper, RscEnum * pColor );
|
|
RscTop * InitClassImage( RscTop * pSuper, RscTop *pClassBitmap,
|
|
RscTop * pClassColor );
|
|
RscTop * InitClassImageList( RscTop * pSuper, RscTop *pClassBitmap,
|
|
RscTop * pClassColor, RscCont * pStrLst );
|
|
RscTop * InitClassWindow( RscTop * pSuper, RscEnum * pMapUnit,
|
|
RscArray * pLangGeo );
|
|
RscTop * InitClassSystemWindow( RscTop * pSuper );
|
|
RscTop * InitClassWorkWindow( RscTop * pSuper );
|
|
RscTop * InitClassModalDialog( RscTop * pSuper );
|
|
RscTop * InitClassModelessDialog( RscTop * pSuper );
|
|
RscTop * InitClassControl( RscTop * pSuper );
|
|
RscTop * InitClassCheckBox( RscTop * pSuper );
|
|
RscTop * InitClassPushButton( RscTop * pSuper );
|
|
RscTop * InitClassTriStateBox( RscTop * pSuper, RscEnum * pTriState );
|
|
RscTop * InitClassMenuButton( RscTop * pSuper, RscTop * pClasMenu );
|
|
RscTop * InitClassImageButton( RscTop * pSuper, RscTop * pClassImage,
|
|
RscEnum * pTriState );
|
|
RscTop * InitClassEdit( RscTop * pSuper );
|
|
RscTop * InitClassMultiLineEdit( RscTop * pSuper );
|
|
RscTop * InitClassScrollBar( RscTop * pSuper );
|
|
RscTop * InitClassListBox( RscTop * pSuper, RscArray * pStrLst );
|
|
RscTop * InitClassMultiListBox( RscTop * pSuper );
|
|
RscTop * InitClassComboBox( RscTop * pSuper, RscArray * pStrLst );
|
|
RscTop * InitClassFixedText( RscTop * pSuper );
|
|
RscTop * InitClassFixedBitmap( RscTop * pSuper, RscTop * pClassBitmap );
|
|
RscTop * InitClassFixedImage( RscTop * pSuper, RscTop * pClassImage );
|
|
RscTop * InitClassRadioButton( RscTop * pSuper );
|
|
RscTop * InitClassImageRadioButton( RscTop * pSuper, RscTop * pClassImage );
|
|
RscTop * InitClassKeyCode( RscTop * pSuper, RscEnum * pKey );
|
|
RscTop * InitClassAccelItem( RscTop * pSuper, RscTop * pKeyCode );
|
|
RscTop * InitClassAccel( RscTop * pSuper, RscTop * pClassAccelItem );
|
|
RscTop * InitClassMenuItem( RscTop * pSuper, RscTop * pClassBitmap,
|
|
RscTop * pClassKeyCode );
|
|
RscTop * InitClassMenu( RscTop * pSuper, RscTop * pMenuItem );
|
|
RscTop * InitClassMessBox( RscTop * pSuper,
|
|
RscEnum * pMessButtons,
|
|
RscEnum * pMessDefButton );
|
|
RscTop * InitClassSplitter( RscTop * pSuper );
|
|
RscTop * InitClassSplitWindow( RscTop * pSuper );
|
|
RscTop * InitClassTime( RscTop * pSuper );
|
|
RscTop * InitClassDate( RscTop * pSuper );
|
|
|
|
RscTop * InitClassPatternFormatter( RscTop * pSuper );
|
|
RscTop * InitClassNumericFormatter( RscTop * pSuper );
|
|
RscTop * InitClassMetricFormatter( RscTop * pSuper,
|
|
RscEnum * pFieldUnits );
|
|
RscTop * InitClassCurrencyFormatter( RscTop * pSuper,
|
|
RscEnum * pFieldUnits );
|
|
RscTop * InitClassDateFormatter( RscTop * pSuper, RscTop * pClassDate );
|
|
RscTop * InitClassTimeFormatter( RscTop * pSuper, RscTop * pClassTime,
|
|
RscEnum * pTimeFieldFormat );
|
|
|
|
RscTop * InitClassSpinField( RscTop * pSuper );
|
|
RscTop * InitClassPatternField( RscTop * pSuper );
|
|
RscTop * InitClassNumericField( RscTop * pSuper );
|
|
RscTop * InitClassMetricField( RscTop * pSuper );
|
|
RscTop * InitClassCurrencyField( const char * pClassName, sal_uInt32 nRT,
|
|
RscTop * pSuper );
|
|
RscTop * InitClassDateField( RscTop * pSuper, RscTop * pClassDate );
|
|
RscTop * InitClassTimeField( RscTop * pSuper, RscTop * pClassTime );
|
|
RscTop * InitClassPatternBox( RscTop * pSuper );
|
|
RscTop * InitClassNumericBox( RscTop * pSuper );
|
|
RscTop * InitClassMetricBox( RscTop * pSuper );
|
|
RscTop * InitClassCurrencyBox( const char * pClassName, sal_uInt32 nRT,
|
|
RscTop * pSuper );
|
|
RscTop * InitClassDateBox( RscTop * pSuper, RscTop * pClassDate );
|
|
RscTop * InitClassTimeBox( RscTop * pSuper, RscTop * pClassTime );
|
|
|
|
RscTop * InitClassDockingWindow( RscTop * pSuper,
|
|
RscEnum * pMapUnit );
|
|
RscTop * InitClassToolBoxItem( RscTop * pSuper, RscTop * pClassBitmap,
|
|
RscTop * pClassImage,
|
|
RscEnum * pTriState );
|
|
RscTop * InitClassToolBox( RscTop * pSuper, RscTop * pClassToolBoxItem,
|
|
RscTop * pClassImageList );
|
|
RscTop * InitClassStatusBar( RscTop * pSuper );
|
|
RscTop * InitClassMoreButton( RscTop * pSuper, RscEnum * pMapUnit );
|
|
RscTop * InitClassFloatingWindow( RscTop * pSuper,
|
|
RscEnum * pMapUnit );
|
|
RscTop * InitClassTabControlItem( RscTop * pSuper,
|
|
RscTop * pClassTabPage );
|
|
RscTop * InitClassTabControl( RscTop * pSuper,
|
|
RscTop * pClassTabControlItem );
|
|
RscTop * InitClassSfxStyleFamilyItem( RscTop * pSuper,
|
|
RscTop * pClassBitmap,
|
|
RscTop * pClassImage,
|
|
RscArray * pStrLst );
|
|
RscTop * InitClassSfxTemplateDialog( RscTop * pSuper,
|
|
RscTop * pStyleFamily );
|
|
RscTop * InitClassSfxSlotInfo( RscTop * pSuper );
|
|
|
|
void InsWinBit( RscTop * pClass, const rtl::OString& rName,
|
|
Atom nVal );
|
|
void WriteInc( FILE * fOutput, sal_uLong lKey );
|
|
|
|
public:
|
|
RscBool aBool;
|
|
RscRange aShort;
|
|
RscRange aUShort;
|
|
RscLongRange aLong;
|
|
RscLongEnumRange aEnumLong;
|
|
RscIdRange aIdUShort;
|
|
RscIdRange aIdNoZeroUShort;
|
|
RscBreakRange aNoZeroShort;
|
|
RscRange a1to12Short;
|
|
RscRange a0to23Short;
|
|
RscRange a1to31Short;
|
|
RscRange a0to59Short;
|
|
RscRange a0to99Short;
|
|
RscRange a0to9999Short;
|
|
RscIdRange aIdLong;
|
|
RscString aString;
|
|
RscString aStringLiteral;
|
|
RscFlag aWinBits;
|
|
RscLangEnum aLangType;
|
|
RscLangArray aLangString;
|
|
RscLangArray aLangShort;
|
|
|
|
Atom nAcceleratorType;
|
|
|
|
RscError* pEH; // Fehlerhandler
|
|
RscNameTable aNmTb; // Tabelle fuer Namen
|
|
RscFileTab aFileTab; // Tabelle der Dateinamen
|
|
sal_uInt32 nFlags;
|
|
std::map<sal_uInt64, sal_uLong> aIdTranslator; //Ordnet Resourcetypen und Id's einen Id zu
|
|
//(unter PM), oder eine Dateiposition (MTF)
|
|
|
|
RscTypCont( RscError *, RSCBYTEORDER_TYPE, const ByteString & rSearchPath, sal_uInt32 nFlags );
|
|
~RscTypCont();
|
|
|
|
Atom AddLanguage( const char* );
|
|
|
|
sal_Bool IsPreload() const
|
|
{ return (nFlags & PRELOAD_FLAG) ? sal_True : sal_False; }
|
|
sal_Bool IsSmart() const
|
|
{ return (nFlags & SMART_FLAG) ? sal_True : sal_False; }
|
|
sal_Bool IsSysResTest() const
|
|
{ return (nFlags & NOSYSRESTEST_FLAG) ? sal_False : sal_True; }
|
|
sal_Bool IsSrsDefault() const
|
|
{ return (nFlags & SRSDEFAULT_FLAG) ? sal_True : sal_False; }
|
|
rtl::OString ChangeLanguage(const rtl::OString & rNewLang);
|
|
const std::vector< sal_uInt32 >& GetFallbacks() const
|
|
{ return aLangFallbacks; }
|
|
|
|
RSCBYTEORDER_TYPE GetByteOrder() const { return nByteOrder; }
|
|
CharSet GetSourceCharSet() const { return nSourceCharSet; }
|
|
CharSet SetSourceCharSet( CharSet aCharSet )
|
|
{
|
|
CharSet aOld = nSourceCharSet;
|
|
nSourceCharSet = aCharSet;
|
|
return aOld;
|
|
}
|
|
void SetSearchPath( const ByteString & rStr) { aSearchPath = rStr; }
|
|
ByteString GetSearchPath() const { return aSearchPath; }
|
|
void SetSysSearchPath( const ByteString& rStr ) { aSysSearchPath = rStr; }
|
|
void InsertType( RscTop * pType )
|
|
{
|
|
aBaseLst.push_back( pType );
|
|
}
|
|
RscTop * SearchType( Atom nTypId );
|
|
// loescht alle Resourceobjekte diese Datei
|
|
void Delete( sal_uLong lFileKey );
|
|
RscTop * GetRoot() { return( pRoot ); };
|
|
sal_uInt32 PutSysName( sal_uInt32 nRscTyp, char * pName, sal_uInt32 nConst,
|
|
sal_uInt32 nId, sal_Bool bFirst );
|
|
void ClearSysNames();
|
|
ERRTYPE WriteRc( WriteRcContext& rContext );
|
|
void WriteSrc( FILE * fOutput, sal_uLong nFileIndex,
|
|
CharSet nCharSet, sal_Bool bName = sal_True );
|
|
ERRTYPE WriteHxx( FILE * fOutput, sal_uLong nFileKey);
|
|
ERRTYPE WriteCxx( FILE * fOutput, sal_uLong nFileKey,
|
|
const ByteString & rHxxName );
|
|
void WriteSyntax( FILE * fOutput );
|
|
void WriteRcCtor( FILE * fOutput );
|
|
sal_uInt32 PutTranslatorKey( sal_uInt64 nKey );
|
|
void IncFilePos( sal_uLong nOffset ){ nFilePos += nOffset; }
|
|
};
|
|
|
|
#endif
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|