1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #ifndef DBAUI_JOINTABLEVIEW_HXX
24*b1cdbd2cSJim Jagielski #define DBAUI_JOINTABLEVIEW_HXX
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #ifndef _SV_WINDOW_HXX
27*b1cdbd2cSJim Jagielski #include <vcl/window.hxx>
28*b1cdbd2cSJim Jagielski #endif
29*b1cdbd2cSJim Jagielski #ifndef _SV_TIMER_HXX
30*b1cdbd2cSJim Jagielski #include <vcl/timer.hxx>
31*b1cdbd2cSJim Jagielski #endif
32*b1cdbd2cSJim Jagielski #ifndef _SV_SCRBAR_HXX
33*b1cdbd2cSJim Jagielski #include <vcl/scrbar.hxx>
34*b1cdbd2cSJim Jagielski #endif
35*b1cdbd2cSJim Jagielski #ifndef _RTTI_HXX
36*b1cdbd2cSJim Jagielski #include <tools/rtti.hxx>
37*b1cdbd2cSJim Jagielski #endif
38*b1cdbd2cSJim Jagielski #ifndef _TRANSFER_HXX
39*b1cdbd2cSJim Jagielski #include <svtools/transfer.hxx>
40*b1cdbd2cSJim Jagielski #endif
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski #ifndef _COMPHELPER_STLTYPES_HXX_
43*b1cdbd2cSJim Jagielski #include <comphelper/stl_types.hxx>
44*b1cdbd2cSJim Jagielski #endif
45*b1cdbd2cSJim Jagielski #ifndef _DBACCESS_UI_CALLBACKS_HXX_
46*b1cdbd2cSJim Jagielski #include "callbacks.hxx"
47*b1cdbd2cSJim Jagielski #endif
48*b1cdbd2cSJim Jagielski #include "TableConnectionData.hxx"
49*b1cdbd2cSJim Jagielski #include "TableWindowData.hxx"
50*b1cdbd2cSJim Jagielski #include <memory>
51*b1cdbd2cSJim Jagielski #include <vector>
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski struct AcceptDropEvent;
54*b1cdbd2cSJim Jagielski struct ExecuteDropEvent;
55*b1cdbd2cSJim Jagielski class SfxUndoAction;
56*b1cdbd2cSJim Jagielski namespace dbaui
57*b1cdbd2cSJim Jagielski {
58*b1cdbd2cSJim Jagielski 	class OTableConnection;
59*b1cdbd2cSJim Jagielski 	class OTableWindow;
60*b1cdbd2cSJim Jagielski 	struct OJoinExchangeData;
61*b1cdbd2cSJim Jagielski 	class OJoinDesignView;
62*b1cdbd2cSJim Jagielski 	class OTableWindowData;
63*b1cdbd2cSJim Jagielski 	class OJoinDesignViewAccess;
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski 	// this class conatins only the scrollbars to avoid that the tablewindows clip the scrollbars
66*b1cdbd2cSJim Jagielski 	class OJoinTableView;
67*b1cdbd2cSJim Jagielski 	class OScrollWindowHelper : public Window
68*b1cdbd2cSJim Jagielski 	{
69*b1cdbd2cSJim Jagielski 		ScrollBar			m_aHScrollBar;
70*b1cdbd2cSJim Jagielski 		ScrollBar			m_aVScrollBar;
71*b1cdbd2cSJim Jagielski 		Window*				m_pCornerWindow;
72*b1cdbd2cSJim Jagielski 		OJoinTableView*		m_pTableView;
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski 	protected:
75*b1cdbd2cSJim Jagielski 		virtual void Resize();
76*b1cdbd2cSJim Jagielski 	public:
77*b1cdbd2cSJim Jagielski 		OScrollWindowHelper( Window* pParent);
78*b1cdbd2cSJim Jagielski 		~OScrollWindowHelper();
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski 		void setTableView(OJoinTableView* _pTableView);
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski         void resetRange(const Point& _aSize);
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 		// own methods
GetHScrollBar()85*b1cdbd2cSJim Jagielski 		ScrollBar* GetHScrollBar() { return &m_aHScrollBar; }
GetVScrollBar()86*b1cdbd2cSJim Jagielski 		ScrollBar* GetVScrollBar() { return &m_aVScrollBar; }
87*b1cdbd2cSJim Jagielski 	};
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski 	class OJoinTableView :	public Window
91*b1cdbd2cSJim Jagielski 							,public IDragTransferableListener
92*b1cdbd2cSJim Jagielski 							,public DropTargetHelper
93*b1cdbd2cSJim Jagielski 	{
94*b1cdbd2cSJim Jagielski 		friend class OJoinMoveTabWinUndoAct;
95*b1cdbd2cSJim Jagielski 	public:
96*b1cdbd2cSJim Jagielski 		DECLARE_STL_USTRINGACCESS_MAP(OTableWindow*,OTableWindowMap);
97*b1cdbd2cSJim Jagielski 	private:
98*b1cdbd2cSJim Jagielski 		OTableWindowMap		m_aTableMap;
99*b1cdbd2cSJim Jagielski 		::std::vector<OTableConnection*>	m_vTableConnection;
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski 		Timer				m_aDragScrollTimer;
102*b1cdbd2cSJim Jagielski 		Rectangle			m_aDragRect;
103*b1cdbd2cSJim Jagielski 		Rectangle			m_aSizingRect;
104*b1cdbd2cSJim Jagielski 		Point				m_aDragOffset;
105*b1cdbd2cSJim Jagielski 		Point				m_aScrollOffset;
106*b1cdbd2cSJim Jagielski 		Point				m_ptPrevDraggingPos;
107*b1cdbd2cSJim Jagielski 		Size				m_aOutputSize;
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski 		OTableWindow*			m_pDragWin;
111*b1cdbd2cSJim Jagielski 		OTableWindow*			m_pSizingWin;
112*b1cdbd2cSJim Jagielski 		OTableConnection*		m_pSelectedConn;
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 		sal_Bool					m_bTrackingInitiallyMoved;
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski 		DECL_LINK(OnDragScrollTimer, void*);
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 	protected:
120*b1cdbd2cSJim Jagielski 		OTableWindow*				m_pLastFocusTabWin;
121*b1cdbd2cSJim Jagielski 		OJoinDesignView*			m_pView;
122*b1cdbd2cSJim Jagielski 		OJoinDesignViewAccess*		m_pAccessible;
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 	public:
125*b1cdbd2cSJim Jagielski 		OJoinTableView( Window* pParent, OJoinDesignView* pView );
126*b1cdbd2cSJim Jagielski 		virtual ~OJoinTableView();
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 		// window override
129*b1cdbd2cSJim Jagielski 		virtual void StateChanged( StateChangedType nStateChange );
130*b1cdbd2cSJim Jagielski 		virtual void GetFocus();
131*b1cdbd2cSJim Jagielski 		virtual void LoseFocus();
132*b1cdbd2cSJim Jagielski 		virtual void KeyInput( const KeyEvent& rEvt );
133*b1cdbd2cSJim Jagielski 		// Accessibility
134*b1cdbd2cSJim Jagielski 		virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski 		// own methods
GetHScrollBar()137*b1cdbd2cSJim Jagielski 		ScrollBar* GetHScrollBar() { return static_cast<OScrollWindowHelper*>(GetParent())->GetHScrollBar(); }
GetVScrollBar()138*b1cdbd2cSJim Jagielski 		ScrollBar* GetVScrollBar() { return static_cast<OScrollWindowHelper*>(GetParent())->GetVScrollBar(); }
139*b1cdbd2cSJim Jagielski 		DECL_LINK( ScrollHdl, ScrollBar* );
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 		void DrawConnections( const Rectangle& rRect );
142*b1cdbd2cSJim Jagielski 		void InvalidateConnections();
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski 		void BeginChildMove( OTableWindow* pTabWin, const Point& rMousePos );
145*b1cdbd2cSJim Jagielski 		void BeginChildSizing( OTableWindow* pTabWin, const Pointer& rPointer );
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 		void NotifyTitleClicked( OTableWindow* pTabWin, const Point rMousePos );
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 		virtual void AddTabWin(const ::rtl::OUString& _rComposedName, const ::rtl::OUString& rWinName, sal_Bool bNewTable = sal_False);
150*b1cdbd2cSJim Jagielski 		virtual void RemoveTabWin( OTableWindow* pTabWin );
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski 		// alle TabWins verstecken (NICHT loeschen, sie werden in eine Undo-Action gepackt)
153*b1cdbd2cSJim Jagielski 		virtual void	HideTabWins();
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski 		virtual void AddConnection(const OJoinExchangeData& jxdSource, const OJoinExchangeData& jxdDest) = 0;
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 		/** RemoveConnection allows to remove connections from join table view, it implies that the same as addConnection
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski 			@param	_pConnection
160*b1cdbd2cSJim Jagielski 					the connection which should be removed
161*b1cdbd2cSJim Jagielski 			@param	_bDelete
162*b1cdbd2cSJim Jagielski 					when truie then the connection will be deleted
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 			@return an iterator to next valid connection, so it can be used in any loop
165*b1cdbd2cSJim Jagielski 		*/
166*b1cdbd2cSJim Jagielski 		virtual bool RemoveConnection(OTableConnection* _pConnection,sal_Bool _bDelete);
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 		/** allows to add new connections to join table view, it implies an invalidation of the features
169*b1cdbd2cSJim Jagielski 			ID_BROWSER_ADDTABLE and SID_RELATION_ADD_RELATION also the modified flag will be set to true
170*b1cdbd2cSJim Jagielski 			@param	_pConnection
171*b1cdbd2cSJim Jagielski 					the connection which should be added
172*b1cdbd2cSJim Jagielski 			@param	_bAddData
173*b1cdbd2cSJim Jagielski 					<TRUE/> when the data should also be appended
174*b1cdbd2cSJim Jagielski 		*/
175*b1cdbd2cSJim Jagielski 		void addConnection(OTableConnection* _pConnection,sal_Bool _bAddData = sal_True);
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski 		sal_Bool			ScrollPane( long nDelta, sal_Bool bHoriz, sal_Bool bPaintScrollBars );
178*b1cdbd2cSJim Jagielski 		sal_uLong			GetTabWinCount();
GetScrollOffset() const179*b1cdbd2cSJim Jagielski 		Point			GetScrollOffset() const { return m_aScrollOffset; }
180*b1cdbd2cSJim Jagielski 
getDesignView() const181*b1cdbd2cSJim Jagielski 		OJoinDesignView*			getDesignView() const { return m_pView; }
182*b1cdbd2cSJim Jagielski 		OTableWindow*				GetTabWindow( const String& rName );
183*b1cdbd2cSJim Jagielski 
GetSelectedConn()184*b1cdbd2cSJim Jagielski 		OTableConnection*			GetSelectedConn() { return m_pSelectedConn; }
185*b1cdbd2cSJim Jagielski 		void						DeselectConn(OTableConnection* pConn);	// NULL ist ausdruecklich zugelassen, dann passiert nichts
186*b1cdbd2cSJim Jagielski 		void						SelectConn(OTableConnection* pConn);
187*b1cdbd2cSJim Jagielski 
GetTabWinMap()188*b1cdbd2cSJim Jagielski 		OTableWindowMap*			GetTabWinMap() { return &m_aTableMap; }
GetTabWinMap() const189*b1cdbd2cSJim Jagielski 		const OTableWindowMap*		GetTabWinMap() const { return &m_aTableMap; }
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 		/** gives a read only access to the connection vector
192*b1cdbd2cSJim Jagielski 		*/
getTableConnections() const193*b1cdbd2cSJim Jagielski 		const ::std::vector<OTableConnection*>*	getTableConnections() const { return &m_vTableConnection; }
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski 		sal_Bool						ExistsAConn(const OTableWindow* pFromWin) const;
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 		/** getTableConnections searchs for all connections of a table
199*b1cdbd2cSJim Jagielski 			@param	_pFromWin	the table for which connections should be found
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski 			@return an iterator which can be used to travel all connections of the table
202*b1cdbd2cSJim Jagielski 		*/
203*b1cdbd2cSJim Jagielski 		::std::vector<OTableConnection*>::const_iterator getTableConnections(const OTableWindow* _pFromWin) const;
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski 		/** getConnectionCount returns how many connection belongs to single table
206*b1cdbd2cSJim Jagielski 			@param	_pFromWin	the table for which connections should be found
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski 			@return	the count of connections wich belongs to this table
209*b1cdbd2cSJim Jagielski 		*/
210*b1cdbd2cSJim Jagielski 		sal_Int32 getConnectionCount(const OTableWindow* _pFromWin) const;
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 		OTableConnection* GetTabConn(const OTableWindow* pLhs,const OTableWindow* pRhs,bool _bSupressCrossOrNaturalJoin = false,const OTableConnection* _rpFirstAfter = NULL) const;
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski 		// clears the window map and connection vector without destroying it
215*b1cdbd2cSJim Jagielski 		// that means teh data of the windows and connection will be untouched
216*b1cdbd2cSJim Jagielski 		void clearLayoutInformation();
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski 		// set the focus to that tab win which most recently had it (or to the first available one)
219*b1cdbd2cSJim Jagielski 		void GrabTabWinFocus();
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski 		// ReSync ist dazu gedacht, aus dem Dokument alle WinData und ConnData zu holen und entsprechend Wins und Conns anzulegen
ReSync()222*b1cdbd2cSJim Jagielski 		virtual void ReSync() { }
223*b1cdbd2cSJim Jagielski 		// ClearAll implementiert ein hartes Loeschen, es werden alle Conns und alle Wins aus ihren jeweiligen Listen geloescht
224*b1cdbd2cSJim Jagielski 		// sowie die entsprechenden Datas aus dem Dokument ausgetragen
225*b1cdbd2cSJim Jagielski 		virtual void ClearAll();
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 		// wird vom AddTabDlg benutzt, um festzustellen, ob noch Tabellen hinzugefuegt werden duerfen
228*b1cdbd2cSJim Jagielski 		virtual sal_Bool IsAddAllowed();
229*b1cdbd2cSJim Jagielski 		virtual long PreNotify(NotifyEvent& rNEvt);
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski 		// DnD stuff
232*b1cdbd2cSJim Jagielski 		virtual void		StartDrag( sal_Int8 nAction, const Point& rPosPixel );
233*b1cdbd2cSJim Jagielski 		virtual sal_Int8	AcceptDrop( const AcceptDropEvent& rEvt );
234*b1cdbd2cSJim Jagielski 		virtual sal_Int8	ExecuteDrop( const ExecuteDropEvent& rEvt );
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski 		/**
237*b1cdbd2cSJim Jagielski 			can be used in derevied classes to make some special ui handling
238*b1cdbd2cSJim Jagielski 			after d&d
239*b1cdbd2cSJim Jagielski 		*/
240*b1cdbd2cSJim Jagielski 		virtual void lookForUiActivities();
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski 		// wird nach Verschieben/Groessenaenderung der TabWins aufgerufen (die Standardimplementation reicht die neuen Daten einfach
243*b1cdbd2cSJim Jagielski 		// an die Daten des Wins weiter)
244*b1cdbd2cSJim Jagielski 		virtual void TabWinMoved(OTableWindow* ptWhich, const Point& ptOldPosition);
245*b1cdbd2cSJim Jagielski 			// die Position ist "virtuell" : der Container hat sozusagen eine virtuelle Flaeche, von der immer nur ein bestimmter Bereich
246*b1cdbd2cSJim Jagielski 			// - der mittels der Scrollbar veraendert werden kann - zu sehen ist. Insbesondere hat ptOldPosition immer positive Koordinaten,
247*b1cdbd2cSJim Jagielski 			// auch wenn er einen Punkt oberhalb des aktuell sichtbaren Bereichs bezeichnet, dessen physische Ordinate eigentlich
248*b1cdbd2cSJim Jagielski 			// negativ ist.
249*b1cdbd2cSJim Jagielski 		virtual void TabWinSized(OTableWindow* ptWhich, const Point& ptOldPosition, const Size& szOldSize);
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski 		void modified();
252*b1cdbd2cSJim Jagielski 
253*b1cdbd2cSJim Jagielski 		/** returns if teh given window is visible.
254*b1cdbd2cSJim Jagielski 			@param	_rPoint
255*b1cdbd2cSJim Jagielski 				The Point to check
256*b1cdbd2cSJim Jagielski 			@param	_rSize
257*b1cdbd2cSJim Jagielski 				The Size to be check as well
258*b1cdbd2cSJim Jagielski 			@return
259*b1cdbd2cSJim Jagielski 				<TRUE/> if the area is visible otherwise <FALSE/>
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski 		*/
262*b1cdbd2cSJim Jagielski 		sal_Bool isMovementAllowed(const Point& _rPoint,const Size& _rSize);
263*b1cdbd2cSJim Jagielski 
getRealOutputSize() const264*b1cdbd2cSJim Jagielski 		Size getRealOutputSize() const { return m_aOutputSize; }
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski 
268*b1cdbd2cSJim Jagielski 		virtual void EnsureVisible(const OTableWindow* _pWin);
269*b1cdbd2cSJim Jagielski 		virtual void EnsureVisible(const Point& _rPoint,const Size& _rSize);
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski         TTableWindowData::value_type createTableWindowData(const ::rtl::OUString& _rComposedName
272*b1cdbd2cSJim Jagielski                                             ,const ::rtl::OUString& _sTableName
273*b1cdbd2cSJim Jagielski 											,const ::rtl::OUString& _rWinName);
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski 	protected:
276*b1cdbd2cSJim Jagielski 		virtual void MouseButtonUp( const MouseEvent& rEvt );
277*b1cdbd2cSJim Jagielski 		virtual void MouseButtonDown( const MouseEvent& rEvt );
278*b1cdbd2cSJim Jagielski 		virtual void Tracking( const TrackingEvent& rTEvt );
279*b1cdbd2cSJim Jagielski 		virtual void Paint( const Rectangle& rRect );
280*b1cdbd2cSJim Jagielski 		virtual void ConnDoubleClicked( OTableConnection* pConnection );
281*b1cdbd2cSJim Jagielski 		virtual void SetDefaultTabWinPosSize( OTableWindow* pTabWin );
282*b1cdbd2cSJim Jagielski 		virtual void DataChanged( const DataChangedEvent& rDCEvt );
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski 		virtual void Resize();
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski 		virtual void dragFinished( );
287*b1cdbd2cSJim Jagielski 		// hier ist die Position (die sich waehrend des Sizings aendern kann) physisch, da waehrend des Sizens nicht gescrollt wird
288*b1cdbd2cSJim Jagielski 		virtual void Command(const CommandEvent& rEvt);
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski 		virtual OTableWindowData* CreateImpl(const ::rtl::OUString& _rComposedName
291*b1cdbd2cSJim Jagielski                                             ,const ::rtl::OUString& _sTableName
292*b1cdbd2cSJim Jagielski 											,const ::rtl::OUString& _rWinName);
293*b1cdbd2cSJim Jagielski 
294*b1cdbd2cSJim Jagielski 		/** factory method to create table windows
295*b1cdbd2cSJim Jagielski 			@param	_pData
296*b1cdbd2cSJim Jagielski 				The data corresponding to the window.
297*b1cdbd2cSJim Jagielski 			@return
298*b1cdbd2cSJim Jagielski 				The new TableWindow
299*b1cdbd2cSJim Jagielski 		*/
300*b1cdbd2cSJim Jagielski 		virtual OTableWindow* createWindow(const TTableWindowData::value_type& _pData) = 0;
301*b1cdbd2cSJim Jagielski 
302*b1cdbd2cSJim Jagielski         /** determines whether the classes Init method should accept a query name, or only table names
303*b1cdbd2cSJim Jagielski         */
304*b1cdbd2cSJim Jagielski         virtual bool    allowQueries() const;
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski         /** called when init fails at the tablewindowdata because the m_xTable object could not provide columns, but no
307*b1cdbd2cSJim Jagielski             exception was thrown. Expected to throw.
308*b1cdbd2cSJim Jagielski         */
309*b1cdbd2cSJim Jagielski         virtual void    onNoColumns_throw();
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski         virtual bool supressCrossNaturalJoin(const TTableConnectionData::value_type& _pData) const;
312*b1cdbd2cSJim Jagielski 
313*b1cdbd2cSJim Jagielski 	private:
314*b1cdbd2cSJim Jagielski 		void	InitColors();
315*b1cdbd2cSJim Jagielski 		sal_Bool	ScrollWhileDragging();
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski 		/** executePopup opens the context menu to delate a connection
318*b1cdbd2cSJim Jagielski 			@param	_aPos				the position where the popup menu should appear
319*b1cdbd2cSJim Jagielski 			@param	_pSelConnection		the connection which should be deleted
320*b1cdbd2cSJim Jagielski 		*/
321*b1cdbd2cSJim Jagielski 		void executePopup(const Point& _aPos,OTableConnection* _pSelConnection);
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski 		/** invalidateAndModify invalidates this window without children and
324*b1cdbd2cSJim Jagielski 			set the controller modified
325*b1cdbd2cSJim Jagielski 			@param	_pAction a possible undo action to add at the controller
326*b1cdbd2cSJim Jagielski 		*/
327*b1cdbd2cSJim Jagielski 		void invalidateAndModify(SfxUndoAction *_pAction=NULL);
328*b1cdbd2cSJim Jagielski 
329*b1cdbd2cSJim Jagielski     private:
330*b1cdbd2cSJim Jagielski         using Window::Scroll;
331*b1cdbd2cSJim Jagielski 	};
332*b1cdbd2cSJim Jagielski }
333*b1cdbd2cSJim Jagielski #endif // DBAUI_JOINTABLEVIEW_HXX
334