xref: /trunk/main/cui/source/dialogs/commonlingui.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_cui.hxx"
30 #include "commonlingui.hxx"
31 
32 #include <cuires.hrc>
33 #include <dialmgr.hxx>
34 #include <vcl/decoview.hxx>
35 
36 #include "hangulhanjadlg.hrc"
37 
38 //=============================================================================
39 // SvxClickInfoCtr
40 //=============================================================================
41 
42 //-----------------------------------------------------------------------------
43 SvxClickInfoCtr::SvxClickInfoCtr( Window* pParent, const ResId& rResId ) :
44         Control( pParent, rResId ),
45         aFixedInfo( this)
46 {
47     aFixedInfo.SetSizePixel(GetOutputSizePixel());
48     aFixedInfo.Show();
49 }
50 
51 //-----------------------------------------------------------------------------
52 void SvxClickInfoCtr::MouseButtonDown( const MouseEvent& )
53 {
54     aActivateLink.Call(this);
55 }
56 
57 //-----------------------------------------------------------------------------
58 long SvxClickInfoCtr::PreNotify( NotifyEvent& rNEvt )
59 {
60     if(rNEvt.GetType()==EVENT_GETFOCUS || rNEvt.GetType()==EVENT_MOUSEBUTTONDOWN)
61     {
62         aActivateLink.Call(this);
63     }
64 
65     return Control::PreNotify(rNEvt);
66 }
67 
68 //-----------------------------------------------------------------------------
69 void SvxClickInfoCtr::SetText( const XubString& rStr )
70 {
71     aFixedInfo.SetText(rStr );
72 }
73 
74 //-----------------------------------------------------------------------------
75 XubString SvxClickInfoCtr::GetText() const
76 {
77     return aFixedInfo.GetText();
78 }
79 
80 //-----------------------------------------------------------------------------
81 __EXPORT SvxClickInfoCtr::~SvxClickInfoCtr()
82 {
83 }
84 
85 //=============================================================================
86 // SvxCommonLinguisticControl
87 //=============================================================================
88 //-----------------------------------------------------------------------------
89 SvxCommonLinguisticControl::SvxCommonLinguisticControl( ModalDialog* _pParent )
90     :Window( _pParent, CUI_RES( RID_SVX_WND_COMMON_LINGU ) )
91     ,aWordText      ( this, CUI_RES( FT_WORD ) )
92     ,aAktWord       ( this, CUI_RES( FT_AKTWORD ) )
93     ,aNewWord       ( this, CUI_RES( FT_NEWWORD ) )
94     ,aNewWordED     ( this, CUI_RES( ED_NEWWORD ) )
95     ,aSuggestionFT  ( this, CUI_RES( FT_SUGGESTION ) )
96     ,aIgnoreBtn     ( this, CUI_RES( BTN_IGNORE ) )
97     ,aIgnoreAllBtn  ( this, CUI_RES( BTN_IGNOREALL ) )
98     ,aChangeBtn     ( this, CUI_RES( BTN_CHANGE ) )
99     ,aChangeAllBtn  ( this, CUI_RES( BTN_CHANGEALL ) )
100     ,aOptionsBtn    ( this, CUI_RES( BTN_OPTIONS ) )
101     ,aStatusText    ( this, CUI_RES( FT_STATUS ) )
102     ,aHelpBtn       ( this, CUI_RES( BTN_SPL_HELP ) )
103     ,aCancelBtn     ( this, CUI_RES( BTN_SPL_CANCEL ) )
104     ,aAuditBox      ( this, CUI_RES( GB_AUDIT ) )
105 {
106     FreeResource();
107 
108 #ifdef FS_PRIV_DEBUG
109     SetType( WINDOW_TABPAGE );
110 #endif
111 
112     aAktWord.SetAccessibleName(aWordText.GetText());
113     SetPosSizePixel( Point( 0, 0 ), _pParent->GetOutputSizePixel() );
114     Show();
115 }
116 
117 // -----------------------------------------------------------------------
118 PushButton* SvxCommonLinguisticControl::implGetButton( ButtonType _eType  ) const
119 {
120     const PushButton* pButton = NULL;
121     switch ( _eType )
122     {
123         case eClose: pButton = &aCancelBtn; break;
124         case eIgnore: pButton = &aIgnoreBtn; break;
125         case eIgnoreAll: pButton = &aIgnoreAllBtn; break;
126         case eChange: pButton = &aChangeBtn; break;
127         case eChangeAll: pButton = &aChangeAllBtn; break;
128         case eOptions: pButton = &aOptionsBtn; break;
129     }
130     return const_cast< PushButton* >( pButton );
131 }
132 
133 // -----------------------------------------------------------------------
134 void SvxCommonLinguisticControl::SetButtonHandler( ButtonType _eType, const Link& _rHandler )
135 {
136     Button* pButton = GetButton( _eType );
137     if ( pButton )
138         pButton->SetClickHdl( _rHandler );
139 }
140 
141 // -----------------------------------------------------------------------
142 void SvxCommonLinguisticControl::EnableButton( ButtonType _eType, sal_Bool _bEnable )
143 {
144     Button* pButton = GetButton( _eType );
145     if ( pButton )
146         pButton->Enable( _bEnable );
147 }
148 
149 // -----------------------------------------------------------------------
150 void SvxCommonLinguisticControl::InsertControlGroup( Window& _rFirstGroupWindow, Window& _rLastGroupWindow, ControlGroup _eInsertAfter )
151 {
152     Window* pInsertAfter = NULL;    // will be the last window of our own "undividable" group, after which we insert the foreign group
153     switch ( _eInsertAfter )
154     {
155         case eLeftRightWords    : pInsertAfter = &aNewWordED; break;
156         case eSuggestionLabel   : pInsertAfter = &aSuggestionFT; break;
157         case eActionButtons     : pInsertAfter = &aChangeAllBtn; break;
158         case eDialogButtons     : pInsertAfter = &aCancelBtn; break;
159     }
160 
161     // now loop through the remaining windows of the foreign group
162     Window* pInsertBehind = pInsertAfter;
163     Window* pInsert = &_rFirstGroupWindow;
164 
165     // some strange thing below: asking a window for WINDOW_NEXT or WINDOW_PREV does not take into
166     // account the border window, _but_ SetZOrder _does_!. Thus, when advancing through a chain
167     // of windows, we need to work with the border windows (WINDOW_BORDER), instead of simply
168     // asking for WINDOW_NEXT.
169 
170     Window* pLoopEnd = _rLastGroupWindow.GetWindow( WINDOW_BORDER );
171     while ( pInsert && ( pInsertBehind != pLoopEnd ) )
172     {
173         // we'll destroy the NEXT relation immediately, so remember the next window
174         DBG_ASSERT( pInsert->GetWindow( WINDOW_BORDER ), "SvxCommonLinguisticControl::InsertControlGroup: border window is expected to be non NULL!" );
175         Window* pNextInsert = pInsert->GetWindow( WINDOW_BORDER )->GetWindow( WINDOW_NEXT );
176         // knit
177         pInsert->SetZOrder( pInsertBehind, WINDOW_ZORDER_BEHIND );
178         // advance
179         pInsertBehind = pInsert;
180         pInsert = pNextInsert;
181     }
182     DBG_ASSERT( pInsertBehind == pLoopEnd, "SvxCommonLinguisticControl::InsertControlGroup: controls do not form a group!" );
183         // if we did not reach pLoopEnd, then we did not reach _rLastGroupWindow in the loop, then
184         // (FirstWindow, LastWindow) was no valid control group
185 }
186 
187 //-----------------------------------------------------------------------------
188 void SvxCommonLinguisticControl::Paint( const Rectangle& rRect )
189 {
190     Window::Paint(rRect );
191 
192     DecorationView aDecoView( this );
193 
194     Rectangle aRect( aAuditBox.GetPosPixel(), aAuditBox.GetSizePixel() );
195     aDecoView.DrawButton( aRect, BUTTON_DRAW_NOFILL );
196 }
197 
198 //-----------------------------------------------------------------------------
199 void SvxCommonLinguisticControl::Enlarge( sal_Int32 _nX, sal_Int32 _nY )
200 {
201     Size aSize;
202     Point aPos;
203 
204     // the controls which need to be resized
205     {
206         Window* pResize[] =
207         {
208             this, &aAuditBox, &aStatusText
209         };
210         for ( sal_uInt32 i = 0; i < sizeof( pResize ) / sizeof( pResize[0] ); ++i )
211         {
212             aSize = pResize[i]->GetSizePixel( );
213             pResize[i]->SetSizePixel( Size( aSize.Width() + _nX, aSize.Height() + _nY ) );
214         }
215     }
216 
217     // the controls which stick to the bottom of the window
218     {
219         Window* pMoveDown[] =
220         {
221             &aStatusText, &aHelpBtn, &aCancelBtn
222         };
223         for ( sal_uInt32 i = 0; i < sizeof( pMoveDown ) / sizeof( pMoveDown[0] ); ++i )
224         {
225             aPos = pMoveDown[i]->GetPosPixel();
226             aPos.Y() += _nY;
227             pMoveDown[i]->SetPosPixel( aPos );
228         }
229     }
230 
231     // the controls which stick to the right
232     {
233         Window* pMoveRight[] =
234         {
235             &aIgnoreBtn, &aIgnoreAllBtn, &aChangeBtn, &aChangeAllBtn, &aOptionsBtn, &aHelpBtn, &aCancelBtn
236         };
237         for ( sal_uInt32 i = 0; i < sizeof( pMoveRight ) / sizeof( pMoveRight[0] ); ++i )
238         {
239             aPos = pMoveRight[i]->GetPosPixel();
240             aPos.X() += _nX;
241             pMoveRight[i]->SetPosPixel( aPos );
242         }
243     }
244 }
245