1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef _XMLFILEVIEW_HXX
24 #define _XMLFILEVIEW_HXX
25 
26 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
27 #include <svl/lstner.hxx>
28 #include <vcl/timer.hxx>
29 
30 #ifndef _TABLE_HXX //autogen
31 #include <tools/table.hxx>
32 #endif
33 #include <svtools/xtextedt.hxx>
34 #include <vcl/timer.hxx>
35 #ifndef _TABLE_HXX //autogen
36 #include <tools/table.hxx>
37 #endif
38 #include <vcl/wrkwin.hxx>
39 #include <vcl/ctrl.hxx>
40 #ifndef _SV_BUTTON_HXX
41 #include <vcl/button.hxx>
42 #endif
43 #include <vcl/lstbox.hxx>
44 
45 class ScrollBar;
46 class XMLFileWindow;
47 class TextEngine;
48 class TextView;
49 class DataChangedEvent;
50 class filter_info_impl;
51 
52 class TextViewOutWin : public Window
53 {
54 	TextView*	pTextView;
55 
56 protected:
57 	virtual void	Paint( const Rectangle& );
58 	virtual void	KeyInput( const KeyEvent& rKeyEvt );
59 	virtual void	MouseMove( const MouseEvent& rMEvt );
60 	virtual void	MouseButtonDown( const MouseEvent& rMEvt );
61 	virtual void	MouseButtonUp( const MouseEvent& rMEvt );
62 	virtual void	Command( const CommandEvent& rCEvt );
63 	virtual void	DataChanged( const DataChangedEvent& );
64 
65 public:
TextViewOutWin(Window * pParent,WinBits nBits)66 		TextViewOutWin(Window* pParent, WinBits nBits) :
67 			Window(pParent, nBits), pTextView(0){}
68 
SetTextView(TextView * pView)69 	void	SetTextView( TextView* pView ) {pTextView = pView;}
70 
71 };
72 
73 //------------------------------------------------------------
74 
75 class XMLFileWindow : public Window, public SfxListener
76 {
77 	using Window::Notify;
78 
79 private:
80 	TextView*	pTextView;
81 	TextEngine*	pTextEngine;
82 
83 	TextViewOutWin*	pOutWin;
84 	ScrollBar	   	*pHScrollbar,
85 					*pVScrollbar;
86 
87 	long			nCurTextWidth;
88 	sal_uInt32			nStartLine;
89     rtl_TextEncoding eSourceEncoding;
90 
91 	Timer			aSyntaxIdleTimer;
92 	Table			aSyntaxLineTable;
93 
94 	bool			bHighlighting;
95 protected:
96 	DECL_LINK( SyntaxTimerHdl, Timer * );
97 	void			ImpDoHighlight( const String& rSource, sal_uInt32 nLineOff );
98 
99 	virtual void	Resize();
100 	virtual void	DataChanged( const DataChangedEvent& );
101 	virtual void 	GetFocus();
102 
103 	void 			CreateTextEngine();
104 
105 	virtual void	Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
106 
107 	DECL_LINK(ScrollHdl, ScrollBar*);
108 
109 	void			DoDelayedSyntaxHighlight( sal_uInt32 nPara );
110 
111 	void			DoSyntaxHighlight( sal_uInt32 nPara );
112 
113 public:
114 					XMLFileWindow( Window* pParent );
115 					~XMLFileWindow();
116 
117 	void			SetScrollBarRanges();
118 	void			InitScrollBars();
Read(SvStream & rInput)119 	sal_uLong			Read( SvStream& rInput)		{ return pTextEngine->Read(rInput); }
120 
121 	void			ShowWindow( const rtl::OUString& rFileName );
122 
GetTextView()123 	TextView*		GetTextView()				{ return pTextView; }
GetTextEngine()124 	TextEngine*		GetTextEngine()				{ return pTextEngine; }
125 
GetOutWin()126 	TextViewOutWin*	GetOutWin()					{ return pOutWin; }
127 	void			InvalidateWindow();
128 
129 	void			CreateScrollbars();
130 
SetStartLine(sal_uInt16 nLine)131 	void			SetStartLine(sal_uInt16 nLine)	{nStartLine = nLine;}
132 
133 	virtual void	Command( const CommandEvent& rCEvt );
134 	void 			HandleWheelCommand( const CommandEvent& rCEvt );
135 
getTextView()136 	TextView*		getTextView() { return pTextView; }
137 
138 	void			showLine( sal_Int32 nLine );
139 };
140 
141 class XMLSourceFileDialog : public WorkWindow
142 {
143 
144 public:
145 				XMLSourceFileDialog( Window* pParent, ResMgr& rResMgr, const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxMSF  );
146 	virtual		~XMLSourceFileDialog();
147 
148 	void		ShowWindow( const rtl::OUString& rFileName, const filter_info_impl* pFilterInfo );
149 
150 	virtual void	Resize();
151 
152 	DECL_LINK(ClickHdl_Impl, PushButton * );
153 	DECL_LINK(SelectHdl_Impl, ListBox * );
154 
155 	void		showLine( sal_Int32 nLine );
156 
157 	sal_Int32	mnOutputHeight;
158 private:
159 	void		onValidate();
160 
161 	const filter_info_impl* mpFilterInfo;
162 	rtl::OUString	maFileURL;
163 
164 	com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > mxMSF;
165 	ResMgr&			mrResMgr;
166 
167 	XMLFileWindow*	mpTextWindow;
168 	ListBox			maLBOutput;
169 //	Control			maCtrlSourceView;
170 	PushButton		maPBValidate;
171 };
172 
173 #endif
174