xref: /aoo42x/main/svx/workben/msview/xmlconfig.hxx (revision cdf0e10c)
1 #ifndef _XMLCONFIG_HXX_
2 #define _XMLCONFIG_HXX_
3 
4 #include <map>
5 #include <list>
6 #include <boost/shared_ptr.hpp>
7 
8 ///////////////////////////////////////////////////////////////////////
9 
10 enum ElementConfigType { ECT_HEXDUMP, ECT_BYTE, ECT_UINT, ECT_UNISTRING, ETC_FLOAT, ETC_CONTAINER };
11 
12 class ElementConfig
13 {
14 public:
15 	ElementConfig() : mnType( ECT_HEXDUMP ) {}
16 	ElementConfig( const rtl::OUString& rName, ElementConfigType rType ) : maName( rName ), mnType( rType ) {}
17 	ElementConfig( const rtl::OUString& rName ) : maName( rName ) {}
18 	ElementConfig( ElementConfigType rType ) : mnType( rType ) {}
19 
20 	virtual rtl::OUString format( SvStream& rStream, sal_Size& nLength ) const;
21 
22 	const rtl::OUString& getName() const { return maName; }
23 	ElementConfigType getType() const { return mnType; }
24 
25 	static rtl::OUString dump_hex( SvStream& rStream, sal_Size& nLength );
26 	static rtl::OUString dump_byte( SvStream& rStream, sal_Size& nLength );
27 	static rtl::OUString dump_uint( SvStream& rStream, sal_Size& nLength );
28 	static rtl::OUString dump_unistring( SvStream& rStream, sal_Size& nLength );
29 	static rtl::OUString dump_float( SvStream& rStream, sal_Size& nLength );
30 private:
31 	rtl::OUString maName;
32 	ElementConfigType mnType;
33 };
34 typedef boost::shared_ptr< ElementConfig > ElementConfigPtr;
35 typedef std::list< ElementConfigPtr > ElementConfigList;
36 
37 ///////////////////////////////////////////////////////////////////////
38 
39 class ElementValueConfig : public ElementConfig
40 {
41 public:
42 	ElementValueConfig( const rtl::OUString& rName, const rtl::OUString& rValue ) : ElementConfig( rName ), maValue( rValue ) {}
43 
44 	const rtl::OUString& getValue() const { return maValue; }
45 
46 private:
47 	rtl::OUString maValue;
48 };
49 
50 ///////////////////////////////////////////////////////////////////////
51 
52 class ElementConfigContainer : public ElementConfig
53 {
54 public:
55 	ElementConfigContainer() : ElementConfig( ETC_CONTAINER ) {}
56 	ElementConfigContainer( const ::rtl::OUString& rName, ElementConfigType rType ) : ElementConfig( rName, rType ) {}
57 	ElementConfigContainer( const ::rtl::OUString& rName ) : ElementConfig( rName, ETC_CONTAINER ) {}
58 	ElementConfigContainer( ElementConfigType rType ) : ElementConfig( rType ) {}
59 
60 	virtual rtl::OUString format( SvStream& rStream, sal_Size& nLength ) const;
61 
62 	void addElementConfig( ElementConfigPtr p ) { maElementConfigList.push_back( p ); }
63 
64 protected:
65 	ElementConfigList maElementConfigList;
66 };
67 
68 ///////////////////////////////////////////////////////////////////////
69 
70 class CaseElementConfig : public ElementConfigContainer
71 {
72 public:
73 	CaseElementConfig( const rtl::OUString& rValue ) : maValue( rValue ) {}
74 
75 	const rtl::OUString& getValue() const { return maValue; }
76 
77 private:
78 	rtl::OUString maValue;
79 };
80 
81 ///////////////////////////////////////////////////////////////////////
82 
83 class SwitchElementConfig : public ElementConfigContainer
84 {
85 public:
86 	SwitchElementConfig( ElementConfigType rType ) : ElementConfigContainer( rType ) {}
87 
88 	virtual rtl::OUString format( SvStream& rStream, sal_Size& nLength ) const;
89 };
90 
91 ///////////////////////////////////////////////////////////////////////
92 
93 class AtomConfig : public ElementConfigContainer
94 {
95 public:
96 	AtomConfig( const ::rtl::OUString& rName, bool bIsContainer ) : ElementConfigContainer( rName ), mbIsContainer( bIsContainer ) {}
97 
98 	bool isContainer() const { return mbIsContainer; }
99 
100 protected:
101 	bool mbIsContainer;
102 };
103 
104 typedef std::map< UINT16, ElementConfigPtr > AtomConfigMap;
105 
106 extern AtomConfigMap gAtomConfigMap;
107 
108 #endif
109