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 DBAUI_JOINCONTROLLER_HXX
24 #define DBAUI_JOINCONTROLLER_HXX
25 
26 #include "singledoccontroller.hxx"
27 #include <com/sun/star/beans/XPropertySet.hpp>
28 #include "moduledbu.hxx"
29 #include "JoinTableView.hxx"
30 #include "JoinDesignView.hxx"
31 #include "TableConnectionData.hxx"
32 #include "TableWindowData.hxx"
33 #include <memory>
34 #include <boost/shared_ptr.hpp>
35 
36 namespace comphelper
37 {
38     class NamedValueCollection;
39 }
40 
41 class VCLXWindow;
42 namespace dbaui
43 {
44 	class OAddTableDlg;
45     class AddTableDialogContext;
46 	class OTableConnectionData;
47 	class OTableWindowData;
48 	class OTableWindow;
49 	typedef OSingleDocumentController OJoinController_BASE;
50 
51     class OJoinController : public OJoinController_BASE
52 	{
53         OModuleClient                    m_aModuleClient;
54 	protected:
55         TTableConnectionData m_vTableConnectionData;
56 		TTableWindowData     m_vTableData;
57 
58 		Fraction								m_aZoom;
59 		::dbtools::SQLExceptionInfo				m_aExceptionInfo;
60 
61 		OAddTableDlg*	                            m_pAddTableDialog;
62         ::std::auto_ptr< AddTableDialogContext >    m_pDialogContext;
63         Point                                   m_aMinimumTableViewSize;
64 
65 		// state of a feature. 'feature' may be the handle of a ::com::sun::star::util::URL somebody requested a dispatch interface for OR a toolbar slot.
66 		virtual FeatureState	GetState(sal_uInt16 nId) const;
67 		// execute a feature
68 		virtual void			Execute(sal_uInt16 nId, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& aArgs);
69 
70 		/** loads the information for the windows.
71 			@param	i_rViewSettings
72 				The properties which comes from the layout information.
73 		*/
74         void loadTableWindows( const ::comphelper::NamedValueCollection& i_rViewSettings );
75 
76 		/** loads the information for one window.
77 			@param	_rTable
78 				The properties which comes from the layout information.
79 		*/
80 		void loadTableWindow( const ::comphelper::NamedValueCollection& i_rTableWindowSettings );
81 
82 		/** saves the TableWindows structure in a sequence of property values
83 			@param	_rViewProps
84 				Contains the new sequence.
85 		*/
86         void saveTableWindows( ::comphelper::NamedValueCollection& o_rViewSettings ) const;
87 
88 		virtual ~OJoinController();
89 	public:
90 		OJoinController(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM);
91 
92         // ---------------------------------------------------------------
93         // attribute access
getTableWindowData()94 		inline TTableWindowData*		getTableWindowData()     { return &m_vTableData; }
getTableConnectionData()95 		inline TTableConnectionData*	getTableConnectionData() { return &m_vTableConnectionData;}
getAddTableDialog() const96         inline OAddTableDlg*            getAddTableDialog()const { return m_pAddTableDialog; }
97 
98         // ---------------------------------------------------------------
99         // OSingleDocumentController overridables
100 		virtual void        reconnect( sal_Bool _bUI );
101 		virtual void        impl_onModifyChanged();
102 
103         // ---------------------------------------------------------------
104         // own overridables
105         /** determines whether or not it's allowed for database views to participate in the game
106         */
107         virtual bool allowViews() const = 0;
108 
109         /** determines whether or not it's allowed for queries to participate in the game
110         */
111         virtual bool allowQueries() const = 0;
112 
113         /** provides access to the OJoinDesignView belonging to the controller, which might
114             or might not be the direct view (getView)
115         */
116 		virtual OJoinDesignView*	getJoinView();
117 
118 
119         // ---------------------------------------------------------------
120         /** erase the data in the data vector
121 			@param	_pData
122 					the data which should be erased
123 		*/
124 		void    removeConnectionData(const TTableConnectionData::value_type& _pData);
125 
126 		void    SaveTabWinsPosSize( OJoinTableView::OTableWindowMap* pTabWinList, long nOffsetX, long nOffsetY );
127 
128         void	SaveTabWinPosSize(OTableWindow* pTabWin, long nOffsetX, long nOffsetY);
129 
130         // ---------------------------------------------------------------
131         // UNO interface overridables
132 		// XEventListener
133 		virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException);
134 
135 		// ::com::sun::star::lang::XComponent
136 		virtual void	SAL_CALL disposing();
137 		// ::com::sun::star::frame::XController
138 		virtual sal_Bool SAL_CALL suspend(sal_Bool bSuspend) throw( ::com::sun::star::uno::RuntimeException );
139 
140 
141         // ---------------------------------------------------------------
142         // misc
143 		/** only defines a method to save a SQLException in d&d methods to show the error at a later state
144 			set the internal member m_aExceptionInfo to _rInfo
145 		*/
setErrorOccured(const::dbtools::SQLExceptionInfo & _rInfo)146 		void setErrorOccured(const ::dbtools::SQLExceptionInfo& _rInfo)
147 		{
148 			m_aExceptionInfo = _rInfo;
149 		}
150 		/**
151 			just returns the internal member and clears it
152 		*/
clearOccuredError()153 		::dbtools::SQLExceptionInfo clearOccuredError()
154 		{
155 			::dbtools::SQLExceptionInfo aInfo = m_aExceptionInfo;
156 			m_aExceptionInfo = ::dbtools::SQLExceptionInfo();
157 			return aInfo;
158 		}
159 
160     protected:
161 		TTableWindowData::value_type createTableWindowData(const ::rtl::OUString& _sComposedName,const ::rtl::OUString& _sTableName,const ::rtl::OUString& _sWindowName);
162 		// ask the user if the design should be saved when it is modified
163 		virtual short saveModified() = 0;
164 		// called when the original state should be reseted (first time load)
165 		virtual void reset()		 = 0;
166 		virtual void describeSupportedFeatures();
167 
168         AddTableDialogContext&  impl_getDialogContext() const;
169 	};
170 }
171 #endif // DBAUI_JOINCONTROLLER_HXX
172 
173