196de5490SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
396de5490SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
496de5490SAndrew Rist * or more contributor license agreements. See the NOTICE file
596de5490SAndrew Rist * distributed with this work for additional information
696de5490SAndrew Rist * regarding copyright ownership. The ASF licenses this file
796de5490SAndrew Rist * to you under the Apache License, Version 2.0 (the
896de5490SAndrew Rist * "License"); you may not use this file except in compliance
996de5490SAndrew Rist * with the License. You may obtain a copy of the License at
1096de5490SAndrew Rist *
1196de5490SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
1296de5490SAndrew Rist *
1396de5490SAndrew Rist * Unless required by applicable law or agreed to in writing,
1496de5490SAndrew Rist * software distributed under the License is distributed on an
1596de5490SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1696de5490SAndrew Rist * KIND, either express or implied. See the License for the
1796de5490SAndrew Rist * specific language governing permissions and limitations
1896de5490SAndrew Rist * under the License.
1996de5490SAndrew Rist *
2096de5490SAndrew Rist *************************************************************/
2196de5490SAndrew Rist
2296de5490SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25*b63233d8Sdamjan #include "precompiled_dbui.hxx"
26cdf0e10cSrcweir #ifndef DBAUI_APPSWAPWINDOW_HXX
27cdf0e10cSrcweir #include "AppSwapWindow.hxx"
28cdf0e10cSrcweir #endif
29cdf0e10cSrcweir #ifndef _TOOLS_DEBUG_HXX
30cdf0e10cSrcweir #include <tools/debug.hxx>
31cdf0e10cSrcweir #endif
32cdf0e10cSrcweir #ifndef _DBA_DBACCESS_HELPID_HRC_
33cdf0e10cSrcweir #include "dbaccess_helpid.hrc"
34cdf0e10cSrcweir #endif
35cdf0e10cSrcweir #ifndef _DBU_APP_HRC_
36cdf0e10cSrcweir #include "dbu_app.hrc"
37cdf0e10cSrcweir #endif
38cdf0e10cSrcweir #ifndef DBAUI_APPVIEW_HXX
39cdf0e10cSrcweir #include "AppView.hxx"
40cdf0e10cSrcweir #endif
41cdf0e10cSrcweir #ifndef _SV_SVAPP_HXX
42cdf0e10cSrcweir #include <vcl/svapp.hxx>
43cdf0e10cSrcweir #endif
44cdf0e10cSrcweir #ifndef _SV_SYSWIN_HXX
45cdf0e10cSrcweir #include <vcl/syswin.hxx>
46cdf0e10cSrcweir #endif
47cdf0e10cSrcweir #ifndef _SV_MENU_HXX
48cdf0e10cSrcweir #include <vcl/menu.hxx>
49cdf0e10cSrcweir #endif
50cdf0e10cSrcweir #ifndef _SV_MNEMONIC_HXX
51cdf0e10cSrcweir #include <vcl/mnemonic.hxx>
52cdf0e10cSrcweir #endif
53cdf0e10cSrcweir #include "IApplicationController.hxx"
54cdf0e10cSrcweir
55cdf0e10cSrcweir #include <memory>
56cdf0e10cSrcweir
57cdf0e10cSrcweir using namespace ::dbaui;
58cdf0e10cSrcweir using namespace ::com::sun::star::uno;
59cdf0e10cSrcweir using namespace ::com::sun::star::sdbc;
60cdf0e10cSrcweir using namespace ::com::sun::star::lang;
61cdf0e10cSrcweir using namespace ::com::sun::star::container;
62cdf0e10cSrcweir
63cdf0e10cSrcweir //==================================================================
64cdf0e10cSrcweir // class OApplicationSwapWindow
DBG_NAME(OApplicationSwapWindow)65cdf0e10cSrcweir DBG_NAME(OApplicationSwapWindow)
66cdf0e10cSrcweir //==================================================================
67cdf0e10cSrcweir OApplicationSwapWindow::OApplicationSwapWindow( Window* _pParent, OAppBorderWindow& _rBorderWindow )
68cdf0e10cSrcweir :Window(_pParent,WB_DIALOGCONTROL )
69cdf0e10cSrcweir ,m_aIconControl(this)
70cdf0e10cSrcweir ,m_eLastType(E_NONE)
71cdf0e10cSrcweir ,m_rBorderWin( _rBorderWindow )
72cdf0e10cSrcweir {
73cdf0e10cSrcweir DBG_CTOR(OApplicationSwapWindow,NULL);
74cdf0e10cSrcweir // SetCompoundControl( sal_True );
75cdf0e10cSrcweir
76cdf0e10cSrcweir ImplInitSettings( sal_True, sal_True, sal_True );
77cdf0e10cSrcweir
78cdf0e10cSrcweir m_aIconControl.SetClickHdl(LINK(this, OApplicationSwapWindow, OnContainerSelectHdl));
79cdf0e10cSrcweir m_aIconControl.setControlActionListener( &m_rBorderWin.getView()->getAppController() );
80cdf0e10cSrcweir m_aIconControl.SetHelpId(HID_APP_SWAP_ICONCONTROL);
81cdf0e10cSrcweir m_aIconControl.Show();
82cdf0e10cSrcweir //m_aIconControl.Enable(sal_True);
83cdf0e10cSrcweir }
84cdf0e10cSrcweir // -----------------------------------------------------------------------------
~OApplicationSwapWindow()85cdf0e10cSrcweir OApplicationSwapWindow::~OApplicationSwapWindow()
86cdf0e10cSrcweir {
87cdf0e10cSrcweir
88cdf0e10cSrcweir DBG_DTOR(OApplicationSwapWindow,NULL);
89cdf0e10cSrcweir }
90cdf0e10cSrcweir // -----------------------------------------------------------------------------
Resize()91cdf0e10cSrcweir void OApplicationSwapWindow::Resize()
92cdf0e10cSrcweir {
93cdf0e10cSrcweir Size aFLSize = LogicToPixel( Size( 8, 0 ), MAP_APPFONT );
94cdf0e10cSrcweir long nX = 0;
95cdf0e10cSrcweir if ( m_aIconControl.GetEntryCount() != 0 )
96cdf0e10cSrcweir nX = m_aIconControl.GetBoundingBox( m_aIconControl.GetEntry(0) ).GetWidth() + aFLSize.Width();
97cdf0e10cSrcweir
98cdf0e10cSrcweir Size aOutputSize = GetOutputSize();
99cdf0e10cSrcweir
100cdf0e10cSrcweir m_aIconControl.SetPosSizePixel( Point(static_cast<long>((aOutputSize.Width() - nX)*0.5), 0) ,Size(nX,aOutputSize.Height()));
101cdf0e10cSrcweir m_aIconControl.ArrangeIcons();
102cdf0e10cSrcweir }
103cdf0e10cSrcweir // -----------------------------------------------------------------------------
ImplInitSettings(sal_Bool bFont,sal_Bool bForeground,sal_Bool bBackground)104cdf0e10cSrcweir void OApplicationSwapWindow::ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground )
105cdf0e10cSrcweir {
106cdf0e10cSrcweir const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
107cdf0e10cSrcweir if( bFont )
108cdf0e10cSrcweir {
109cdf0e10cSrcweir Font aFont;
110cdf0e10cSrcweir aFont = rStyleSettings.GetFieldFont();
111cdf0e10cSrcweir aFont.SetColor( rStyleSettings.GetWindowTextColor() );
112cdf0e10cSrcweir SetPointFont( aFont );
113cdf0e10cSrcweir }
114cdf0e10cSrcweir
115cdf0e10cSrcweir if( bForeground || bFont )
116cdf0e10cSrcweir {
117cdf0e10cSrcweir SetTextColor( rStyleSettings.GetFieldTextColor() );
118cdf0e10cSrcweir SetTextFillColor();
119cdf0e10cSrcweir }
120cdf0e10cSrcweir
121cdf0e10cSrcweir if( bBackground )
122cdf0e10cSrcweir SetBackground( rStyleSettings.GetFieldColor() );
123cdf0e10cSrcweir }
124cdf0e10cSrcweir // -----------------------------------------------------------------------
DataChanged(const DataChangedEvent & rDCEvt)125cdf0e10cSrcweir void OApplicationSwapWindow::DataChanged( const DataChangedEvent& rDCEvt )
126cdf0e10cSrcweir {
127cdf0e10cSrcweir Window::DataChanged( rDCEvt );
128cdf0e10cSrcweir if ( (rDCEvt.GetType() == DATACHANGED_FONTS) ||
129cdf0e10cSrcweir (rDCEvt.GetType() == DATACHANGED_DISPLAY) ||
130cdf0e10cSrcweir (rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) ||
131cdf0e10cSrcweir ((rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
132cdf0e10cSrcweir (rDCEvt.GetFlags() & SETTINGS_STYLE)) )
133cdf0e10cSrcweir {
134cdf0e10cSrcweir ImplInitSettings( sal_True, sal_True, sal_True );
135cdf0e10cSrcweir Invalidate();
136cdf0e10cSrcweir }
137cdf0e10cSrcweir }
138cdf0e10cSrcweir // -----------------------------------------------------------------------------
clearSelection()139cdf0e10cSrcweir void OApplicationSwapWindow::clearSelection()
140cdf0e10cSrcweir {
141cdf0e10cSrcweir m_aIconControl.SetNoSelection();
142cdf0e10cSrcweir sal_uLong nPos = 0;
143cdf0e10cSrcweir SvxIconChoiceCtrlEntry* pEntry = m_aIconControl.GetSelectedEntry(nPos);
144cdf0e10cSrcweir if ( pEntry )
145cdf0e10cSrcweir m_aIconControl.InvalidateEntry(pEntry);
146cdf0e10cSrcweir m_aIconControl.GetClickHdl().Call(&m_aIconControl);
147cdf0e10cSrcweir }
148cdf0e10cSrcweir
149cdf0e10cSrcweir // -----------------------------------------------------------------------------
createIconAutoMnemonics(MnemonicGenerator & _rMnemonics)150cdf0e10cSrcweir void OApplicationSwapWindow::createIconAutoMnemonics( MnemonicGenerator& _rMnemonics )
151cdf0e10cSrcweir {
152cdf0e10cSrcweir m_aIconControl.CreateAutoMnemonics( _rMnemonics );
153cdf0e10cSrcweir }
154cdf0e10cSrcweir
155cdf0e10cSrcweir // -----------------------------------------------------------------------------
interceptKeyInput(const KeyEvent & _rEvent)156cdf0e10cSrcweir bool OApplicationSwapWindow::interceptKeyInput( const KeyEvent& _rEvent )
157cdf0e10cSrcweir {
158cdf0e10cSrcweir const KeyCode& rKeyCode = _rEvent.GetKeyCode();
159cdf0e10cSrcweir if ( rKeyCode.GetModifier() == KEY_MOD2 )
160cdf0e10cSrcweir return m_aIconControl.DoKeyInput( _rEvent );
161cdf0e10cSrcweir
162cdf0e10cSrcweir // not handled
163cdf0e10cSrcweir return false;
164cdf0e10cSrcweir }
165cdf0e10cSrcweir
166cdf0e10cSrcweir // -----------------------------------------------------------------------------
getElementType() const167cdf0e10cSrcweir ElementType OApplicationSwapWindow::getElementType() const
168cdf0e10cSrcweir {
169cdf0e10cSrcweir sal_uLong nPos = 0;
170cdf0e10cSrcweir SvxIconChoiceCtrlEntry* pEntry = m_aIconControl.GetSelectedEntry(nPos);
171cdf0e10cSrcweir return ( pEntry ) ? *static_cast<ElementType*>(pEntry->GetUserData()) : E_NONE;
172cdf0e10cSrcweir }
173cdf0e10cSrcweir
174cdf0e10cSrcweir // -----------------------------------------------------------------------------
onContainerSelected(ElementType _eType)175cdf0e10cSrcweir bool OApplicationSwapWindow::onContainerSelected( ElementType _eType )
176cdf0e10cSrcweir {
177cdf0e10cSrcweir if ( m_eLastType == _eType )
178cdf0e10cSrcweir return true;
179cdf0e10cSrcweir
180cdf0e10cSrcweir if ( m_rBorderWin.getView()->getAppController().onContainerSelect( _eType ) )
181cdf0e10cSrcweir {
182cdf0e10cSrcweir if ( _eType != E_NONE )
183cdf0e10cSrcweir m_eLastType = _eType;
184cdf0e10cSrcweir return true;
185cdf0e10cSrcweir } // if ( m_rBorderWin.getView()->getAppController().onContainerSelect( _eType ) )
186cdf0e10cSrcweir
187cdf0e10cSrcweir PostUserEvent( LINK( this, OApplicationSwapWindow, ChangeToLastSelected ) );
188cdf0e10cSrcweir return false;
189cdf0e10cSrcweir }
190cdf0e10cSrcweir
191cdf0e10cSrcweir // -----------------------------------------------------------------------------
IMPL_LINK(OApplicationSwapWindow,OnContainerSelectHdl,SvtIconChoiceCtrl *,_pControl)192cdf0e10cSrcweir IMPL_LINK(OApplicationSwapWindow, OnContainerSelectHdl, SvtIconChoiceCtrl*, _pControl)
193cdf0e10cSrcweir {
194cdf0e10cSrcweir sal_uLong nPos = 0;
195cdf0e10cSrcweir SvxIconChoiceCtrlEntry* pEntry = _pControl->GetSelectedEntry( nPos );
196cdf0e10cSrcweir ElementType eType = E_NONE;
197cdf0e10cSrcweir if ( pEntry )
198cdf0e10cSrcweir {
199cdf0e10cSrcweir eType = *static_cast<ElementType*>(pEntry->GetUserData());
200cdf0e10cSrcweir onContainerSelected( eType ); // i87582
201cdf0e10cSrcweir }
202cdf0e10cSrcweir
203cdf0e10cSrcweir return 1L;
204cdf0e10cSrcweir }
205cdf0e10cSrcweir //------------------------------------------------------------------------------
IMPL_LINK(OApplicationSwapWindow,ChangeToLastSelected,void *,EMPTYARG)206cdf0e10cSrcweir IMPL_LINK(OApplicationSwapWindow, ChangeToLastSelected, void*, EMPTYARG)
207cdf0e10cSrcweir {
208cdf0e10cSrcweir selectContainer(m_eLastType);
209cdf0e10cSrcweir return 0L;
210cdf0e10cSrcweir }
211cdf0e10cSrcweir // -----------------------------------------------------------------------------
selectContainer(ElementType _eType)212cdf0e10cSrcweir void OApplicationSwapWindow::selectContainer(ElementType _eType)
213cdf0e10cSrcweir {
214cdf0e10cSrcweir sal_uLong nCount = m_aIconControl.GetEntryCount();
215cdf0e10cSrcweir SvxIconChoiceCtrlEntry* pEntry = NULL;
216cdf0e10cSrcweir for (sal_uLong i=0; i < nCount; ++i)
217cdf0e10cSrcweir {
218cdf0e10cSrcweir pEntry = m_aIconControl.GetEntry(i);
219cdf0e10cSrcweir if ( pEntry && *static_cast<ElementType*>(pEntry->GetUserData()) == _eType )
220cdf0e10cSrcweir break;
221cdf0e10cSrcweir pEntry = NULL;
222cdf0e10cSrcweir }
223cdf0e10cSrcweir
224cdf0e10cSrcweir if ( pEntry )
225cdf0e10cSrcweir m_aIconControl.SetCursor(pEntry); // this call also initiates a onContainerSelected call
226cdf0e10cSrcweir else
227cdf0e10cSrcweir onContainerSelected( _eType );
228cdf0e10cSrcweir }
229