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 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_cui.hxx"
26*b1cdbd2cSJim Jagielski #include "commonlingui.hxx"
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include <cuires.hrc>
29*b1cdbd2cSJim Jagielski #include <dialmgr.hxx>
30*b1cdbd2cSJim Jagielski #include <vcl/decoview.hxx>
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski #include "hangulhanjadlg.hrc"
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski //=============================================================================
35*b1cdbd2cSJim Jagielski // SvxClickInfoCtr
36*b1cdbd2cSJim Jagielski //=============================================================================
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
SvxClickInfoCtr(Window * pParent,const ResId & rResId)39*b1cdbd2cSJim Jagielski SvxClickInfoCtr::SvxClickInfoCtr( Window* pParent, const ResId& rResId ) :
40*b1cdbd2cSJim Jagielski 		Control( pParent, rResId ),
41*b1cdbd2cSJim Jagielski 		aFixedInfo( this)
42*b1cdbd2cSJim Jagielski {
43*b1cdbd2cSJim Jagielski 	aFixedInfo.SetSizePixel(GetOutputSizePixel());
44*b1cdbd2cSJim Jagielski 	aFixedInfo.Show();
45*b1cdbd2cSJim Jagielski }
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
MouseButtonDown(const MouseEvent &)48*b1cdbd2cSJim Jagielski void SvxClickInfoCtr::MouseButtonDown( const MouseEvent& )
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski 	aActivateLink.Call(this);
51*b1cdbd2cSJim Jagielski }
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
PreNotify(NotifyEvent & rNEvt)54*b1cdbd2cSJim Jagielski long SvxClickInfoCtr::PreNotify( NotifyEvent& rNEvt )
55*b1cdbd2cSJim Jagielski {
56*b1cdbd2cSJim Jagielski 	if(rNEvt.GetType()==EVENT_GETFOCUS || rNEvt.GetType()==EVENT_MOUSEBUTTONDOWN)
57*b1cdbd2cSJim Jagielski 	{
58*b1cdbd2cSJim Jagielski 		aActivateLink.Call(this);
59*b1cdbd2cSJim Jagielski 	}
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski 	return Control::PreNotify(rNEvt);
62*b1cdbd2cSJim Jagielski }
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
SetText(const XubString & rStr)65*b1cdbd2cSJim Jagielski void SvxClickInfoCtr::SetText( const XubString& rStr )
66*b1cdbd2cSJim Jagielski {
67*b1cdbd2cSJim Jagielski 	aFixedInfo.SetText(rStr );
68*b1cdbd2cSJim Jagielski }
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
GetText() const71*b1cdbd2cSJim Jagielski XubString SvxClickInfoCtr::GetText() const
72*b1cdbd2cSJim Jagielski {
73*b1cdbd2cSJim Jagielski 	return aFixedInfo.GetText();
74*b1cdbd2cSJim Jagielski }
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
~SvxClickInfoCtr()77*b1cdbd2cSJim Jagielski __EXPORT SvxClickInfoCtr::~SvxClickInfoCtr()
78*b1cdbd2cSJim Jagielski {
79*b1cdbd2cSJim Jagielski }
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski //=============================================================================
82*b1cdbd2cSJim Jagielski // SvxCommonLinguisticControl
83*b1cdbd2cSJim Jagielski //=============================================================================
84*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
SvxCommonLinguisticControl(ModalDialog * _pParent)85*b1cdbd2cSJim Jagielski SvxCommonLinguisticControl::SvxCommonLinguisticControl( ModalDialog* _pParent )
86*b1cdbd2cSJim Jagielski 	:Window( _pParent, CUI_RES( RID_SVX_WND_COMMON_LINGU ) )
87*b1cdbd2cSJim Jagielski 	,aWordText		( this,	CUI_RES( FT_WORD ) )
88*b1cdbd2cSJim Jagielski 	,aAktWord		( this,	CUI_RES( FT_AKTWORD ) )
89*b1cdbd2cSJim Jagielski 	,aNewWord		( this,	CUI_RES( FT_NEWWORD ) )
90*b1cdbd2cSJim Jagielski 	,aNewWordED		( this,	CUI_RES( ED_NEWWORD ) )
91*b1cdbd2cSJim Jagielski 	,aSuggestionFT	( this, CUI_RES( FT_SUGGESTION ) )
92*b1cdbd2cSJim Jagielski     ,aIgnoreBtn     ( this, CUI_RES( BTN_IGNORE ) )
93*b1cdbd2cSJim Jagielski 	,aIgnoreAllBtn	( this,	CUI_RES( BTN_IGNOREALL ) )
94*b1cdbd2cSJim Jagielski 	,aChangeBtn		( this,	CUI_RES( BTN_CHANGE ) )
95*b1cdbd2cSJim Jagielski 	,aChangeAllBtn	( this,	CUI_RES( BTN_CHANGEALL ) )
96*b1cdbd2cSJim Jagielski 	,aOptionsBtn	( this, CUI_RES( BTN_OPTIONS ) )
97*b1cdbd2cSJim Jagielski 	,aStatusText	( this, CUI_RES( FT_STATUS ) )
98*b1cdbd2cSJim Jagielski     ,aHelpBtn       ( this, CUI_RES( BTN_SPL_HELP ) )
99*b1cdbd2cSJim Jagielski     ,aCancelBtn     ( this, CUI_RES( BTN_SPL_CANCEL ) )
100*b1cdbd2cSJim Jagielski     ,aAuditBox      ( this, CUI_RES( GB_AUDIT ) )
101*b1cdbd2cSJim Jagielski {
102*b1cdbd2cSJim Jagielski 	FreeResource();
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski #ifdef FS_PRIV_DEBUG
105*b1cdbd2cSJim Jagielski 	SetType( WINDOW_TABPAGE );
106*b1cdbd2cSJim Jagielski #endif
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski 	aAktWord.SetAccessibleName(aWordText.GetText());
109*b1cdbd2cSJim Jagielski 	SetPosSizePixel( Point( 0, 0 ), _pParent->GetOutputSizePixel() );
110*b1cdbd2cSJim Jagielski 	Show();
111*b1cdbd2cSJim Jagielski }
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
implGetButton(ButtonType _eType) const114*b1cdbd2cSJim Jagielski PushButton*	SvxCommonLinguisticControl::implGetButton( ButtonType _eType  ) const
115*b1cdbd2cSJim Jagielski {
116*b1cdbd2cSJim Jagielski 	const PushButton* pButton = NULL;
117*b1cdbd2cSJim Jagielski 	switch ( _eType )
118*b1cdbd2cSJim Jagielski 	{
119*b1cdbd2cSJim Jagielski 		case eClose: pButton = &aCancelBtn; break;
120*b1cdbd2cSJim Jagielski 		case eIgnore: pButton = &aIgnoreBtn; break;
121*b1cdbd2cSJim Jagielski 		case eIgnoreAll: pButton = &aIgnoreAllBtn; break;
122*b1cdbd2cSJim Jagielski 		case eChange: pButton = &aChangeBtn; break;
123*b1cdbd2cSJim Jagielski 		case eChangeAll: pButton = &aChangeAllBtn; break;
124*b1cdbd2cSJim Jagielski 		case eOptions: pButton = &aOptionsBtn; break;
125*b1cdbd2cSJim Jagielski 	}
126*b1cdbd2cSJim Jagielski 	return const_cast< PushButton* >( pButton );
127*b1cdbd2cSJim Jagielski }
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
SetButtonHandler(ButtonType _eType,const Link & _rHandler)130*b1cdbd2cSJim Jagielski void SvxCommonLinguisticControl::SetButtonHandler( ButtonType _eType, const Link& _rHandler )
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski 	Button* pButton = GetButton( _eType );
133*b1cdbd2cSJim Jagielski 	if ( pButton )
134*b1cdbd2cSJim Jagielski 		pButton->SetClickHdl( _rHandler );
135*b1cdbd2cSJim Jagielski }
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
EnableButton(ButtonType _eType,sal_Bool _bEnable)138*b1cdbd2cSJim Jagielski void SvxCommonLinguisticControl::EnableButton( ButtonType _eType, sal_Bool _bEnable )
139*b1cdbd2cSJim Jagielski {
140*b1cdbd2cSJim Jagielski 	Button* pButton = GetButton( _eType );
141*b1cdbd2cSJim Jagielski 	if ( pButton )
142*b1cdbd2cSJim Jagielski 		pButton->Enable( _bEnable );
143*b1cdbd2cSJim Jagielski }
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
InsertControlGroup(Window & _rFirstGroupWindow,Window & _rLastGroupWindow,ControlGroup _eInsertAfter)146*b1cdbd2cSJim Jagielski void SvxCommonLinguisticControl::InsertControlGroup( Window& _rFirstGroupWindow, Window& _rLastGroupWindow, ControlGroup _eInsertAfter )
147*b1cdbd2cSJim Jagielski {
148*b1cdbd2cSJim Jagielski 	Window* pInsertAfter = NULL;	// will be the last window of our own "undividable" group, after which we insert the foreign group
149*b1cdbd2cSJim Jagielski 	switch ( _eInsertAfter )
150*b1cdbd2cSJim Jagielski 	{
151*b1cdbd2cSJim Jagielski 		case eLeftRightWords	: pInsertAfter = &aNewWordED; break;
152*b1cdbd2cSJim Jagielski 		case eSuggestionLabel	: pInsertAfter = &aSuggestionFT; break;
153*b1cdbd2cSJim Jagielski 		case eActionButtons		: pInsertAfter = &aChangeAllBtn; break;
154*b1cdbd2cSJim Jagielski 		case eDialogButtons		: pInsertAfter = &aCancelBtn; break;
155*b1cdbd2cSJim Jagielski 	}
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 	// now loop through the remaining windows of the foreign group
158*b1cdbd2cSJim Jagielski 	Window* pInsertBehind = pInsertAfter;
159*b1cdbd2cSJim Jagielski 	Window* pInsert = &_rFirstGroupWindow;
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski 	// some strange thing below: asking a window for WINDOW_NEXT or WINDOW_PREV does not take into
162*b1cdbd2cSJim Jagielski 	// account the border window, _but_ SetZOrder _does_!. Thus, when advancing through a chain
163*b1cdbd2cSJim Jagielski 	// of windows, we need to work with the border windows (WINDOW_BORDER), instead of simply
164*b1cdbd2cSJim Jagielski 	// asking for WINDOW_NEXT.
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 	Window* pLoopEnd = _rLastGroupWindow.GetWindow( WINDOW_BORDER );
167*b1cdbd2cSJim Jagielski 	while ( pInsert && ( pInsertBehind != pLoopEnd ) )
168*b1cdbd2cSJim Jagielski 	{
169*b1cdbd2cSJim Jagielski 		// we'll destroy the NEXT relation immediately, so remember the next window
170*b1cdbd2cSJim Jagielski 		DBG_ASSERT( pInsert->GetWindow( WINDOW_BORDER ), "SvxCommonLinguisticControl::InsertControlGroup: border window is expected to be non NULL!" );
171*b1cdbd2cSJim Jagielski 		Window* pNextInsert = pInsert->GetWindow( WINDOW_BORDER )->GetWindow( WINDOW_NEXT );
172*b1cdbd2cSJim Jagielski 		// knit
173*b1cdbd2cSJim Jagielski 		pInsert->SetZOrder( pInsertBehind, WINDOW_ZORDER_BEHIND );
174*b1cdbd2cSJim Jagielski 		// advance
175*b1cdbd2cSJim Jagielski 		pInsertBehind = pInsert;
176*b1cdbd2cSJim Jagielski 		pInsert = pNextInsert;
177*b1cdbd2cSJim Jagielski 	}
178*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pInsertBehind == pLoopEnd, "SvxCommonLinguisticControl::InsertControlGroup: controls do not form a group!" );
179*b1cdbd2cSJim Jagielski 		// if we did not reach pLoopEnd, then we did not reach _rLastGroupWindow in the loop, then
180*b1cdbd2cSJim Jagielski 		// (FirstWindow, LastWindow) was no valid control group
181*b1cdbd2cSJim Jagielski }
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
Paint(const Rectangle & rRect)184*b1cdbd2cSJim Jagielski void SvxCommonLinguisticControl::Paint( const Rectangle& rRect )
185*b1cdbd2cSJim Jagielski {
186*b1cdbd2cSJim Jagielski 	Window::Paint(rRect );
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 	DecorationView aDecoView( this );
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski 	Rectangle aRect( aAuditBox.GetPosPixel(), aAuditBox.GetSizePixel() );
191*b1cdbd2cSJim Jagielski 	aDecoView.DrawButton( aRect, BUTTON_DRAW_NOFILL );
192*b1cdbd2cSJim Jagielski }
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
Enlarge(sal_Int32 _nX,sal_Int32 _nY)195*b1cdbd2cSJim Jagielski void SvxCommonLinguisticControl::Enlarge( sal_Int32 _nX, sal_Int32 _nY )
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski 	Size aSize;
198*b1cdbd2cSJim Jagielski 	Point aPos;
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski 	// the controls which need to be resized
201*b1cdbd2cSJim Jagielski 	{
202*b1cdbd2cSJim Jagielski 		Window* pResize[] =
203*b1cdbd2cSJim Jagielski 		{
204*b1cdbd2cSJim Jagielski 			this, &aAuditBox, &aStatusText
205*b1cdbd2cSJim Jagielski 		};
206*b1cdbd2cSJim Jagielski         for ( sal_uInt32 i = 0; i < sizeof( pResize ) / sizeof( pResize[0] ); ++i )
207*b1cdbd2cSJim Jagielski 		{
208*b1cdbd2cSJim Jagielski 			aSize = pResize[i]->GetSizePixel( );
209*b1cdbd2cSJim Jagielski 			pResize[i]->SetSizePixel( Size( aSize.Width() + _nX, aSize.Height() + _nY ) );
210*b1cdbd2cSJim Jagielski 		}
211*b1cdbd2cSJim Jagielski 	}
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 	// the controls which stick to the bottom of the window
214*b1cdbd2cSJim Jagielski 	{
215*b1cdbd2cSJim Jagielski 		Window* pMoveDown[] =
216*b1cdbd2cSJim Jagielski 		{
217*b1cdbd2cSJim Jagielski 			&aStatusText, &aHelpBtn, &aCancelBtn
218*b1cdbd2cSJim Jagielski 		};
219*b1cdbd2cSJim Jagielski         for ( sal_uInt32 i = 0; i < sizeof( pMoveDown ) / sizeof( pMoveDown[0] ); ++i )
220*b1cdbd2cSJim Jagielski 		{
221*b1cdbd2cSJim Jagielski 			aPos = pMoveDown[i]->GetPosPixel();
222*b1cdbd2cSJim Jagielski 			aPos.Y() += _nY;
223*b1cdbd2cSJim Jagielski 			pMoveDown[i]->SetPosPixel( aPos );
224*b1cdbd2cSJim Jagielski 		}
225*b1cdbd2cSJim Jagielski 	}
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 	// the controls which stick to the right
228*b1cdbd2cSJim Jagielski 	{
229*b1cdbd2cSJim Jagielski 		Window* pMoveRight[] =
230*b1cdbd2cSJim Jagielski 		{
231*b1cdbd2cSJim Jagielski 			&aIgnoreBtn, &aIgnoreAllBtn, &aChangeBtn, &aChangeAllBtn, &aOptionsBtn, &aHelpBtn, &aCancelBtn
232*b1cdbd2cSJim Jagielski 		};
233*b1cdbd2cSJim Jagielski         for ( sal_uInt32 i = 0; i < sizeof( pMoveRight ) / sizeof( pMoveRight[0] ); ++i )
234*b1cdbd2cSJim Jagielski 		{
235*b1cdbd2cSJim Jagielski 			aPos = pMoveRight[i]->GetPosPixel();
236*b1cdbd2cSJim Jagielski 			aPos.X() += _nX;
237*b1cdbd2cSJim Jagielski 			pMoveRight[i]->SetPosPixel( aPos );
238*b1cdbd2cSJim Jagielski 		}
239*b1cdbd2cSJim Jagielski 	}
240*b1cdbd2cSJim Jagielski }
241