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