1*f6e50924SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*f6e50924SAndrew Rist * distributed with this work for additional information 6*f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*f6e50924SAndrew Rist * "License"); you may not use this file except in compliance 9*f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*f6e50924SAndrew Rist * software distributed under the License is distributed on an 15*f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*f6e50924SAndrew Rist * KIND, either express or implied. See the License for the 17*f6e50924SAndrew Rist * specific language governing permissions and limitations 18*f6e50924SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*f6e50924SAndrew Rist *************************************************************/ 21*f6e50924SAndrew Rist 22*f6e50924SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_svx.hxx" 26cdf0e10cSrcweir #include <svx/rubydialog.hxx> 27cdf0e10cSrcweir #include <tools/shl.hxx> 28cdf0e10cSrcweir #include <svx/dialmgr.hxx> 29cdf0e10cSrcweir #include <svx/dialogs.hrc> 30cdf0e10cSrcweir #include <rubydialog.hrc> 31cdf0e10cSrcweir #include <sfx2/app.hxx> 32cdf0e10cSrcweir #include <sfx2/dispatch.hxx> 33cdf0e10cSrcweir #include <sfx2/viewfrm.hxx> 34cdf0e10cSrcweir #include <svl/eitem.hxx> 35cdf0e10cSrcweir #include <com/sun/star/frame/XController.hpp> 36cdf0e10cSrcweir #include <com/sun/star/style/XStyle.hpp> 37cdf0e10cSrcweir #include <com/sun/star/text/XRubySelection.hpp> 38cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValues.hpp> 39cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 40cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp> 41cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp> 42cdf0e10cSrcweir #include <com/sun/star/style/XStyleFamiliesSupplier.hpp> 43cdf0e10cSrcweir #include <com/sun/star/text/RubyAdjust.hpp> 44cdf0e10cSrcweir #include <com/sun/star/view/XSelectionChangeListener.hpp> 45cdf0e10cSrcweir #include <com/sun/star/view/XSelectionSupplier.hpp> 46cdf0e10cSrcweir #ifndef _CPPUHELPER_IMPLBASE3_HXX_ 47cdf0e10cSrcweir #include <cppuhelper/implbase1.hxx> 48cdf0e10cSrcweir #endif 49cdf0e10cSrcweir #include <svtools/colorcfg.hxx> 50cdf0e10cSrcweir 51cdf0e10cSrcweir using namespace com::sun::star::uno; 52cdf0e10cSrcweir using namespace com::sun::star::frame; 53cdf0e10cSrcweir using namespace com::sun::star::text; 54cdf0e10cSrcweir using namespace com::sun::star::beans; 55cdf0e10cSrcweir using namespace com::sun::star::style; 56cdf0e10cSrcweir using namespace com::sun::star::text; 57cdf0e10cSrcweir using namespace com::sun::star::view; 58cdf0e10cSrcweir using namespace com::sun::star::lang; 59cdf0e10cSrcweir using namespace com::sun::star::container; 60cdf0e10cSrcweir using rtl::OUString; 61cdf0e10cSrcweir 62cdf0e10cSrcweir #define C2U(cChar) rtl::OUString::createFromAscii(cChar) 63cdf0e10cSrcweir 64cdf0e10cSrcweir SFX_IMPL_CHILDWINDOW( SvxRubyChildWindow, SID_RUBY_DIALOG ); 65cdf0e10cSrcweir 66cdf0e10cSrcweir static const sal_Char cRubyBaseText[] = "RubyBaseText"; 67cdf0e10cSrcweir static const sal_Char cRubyText[] = "RubyText"; 68cdf0e10cSrcweir static const sal_Char cCharacterStyles[] = "CharacterStyles"; 69cdf0e10cSrcweir static const sal_Char cRubyAdjust[] = "RubyAdjust"; 70cdf0e10cSrcweir static const sal_Char cRubyIsAbove[] = "RubyIsAbove"; 71cdf0e10cSrcweir static const sal_Char cDisplayName[] = "DisplayName"; 72cdf0e10cSrcweir static const sal_Char cRubyCharStyleName[] = "RubyCharStyleName"; 73cdf0e10cSrcweir static const sal_Char cRubies[] = "Rubies"; 74cdf0e10cSrcweir /* -----------------------------09.01.01 17:24-------------------------------- 75cdf0e10cSrcweir 76cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 77cdf0e10cSrcweir SvxRubyChildWindow::SvxRubyChildWindow( Window* _pParent, sal_uInt16 nId, 78cdf0e10cSrcweir SfxBindings* pBindings, SfxChildWinInfo* pInfo) : 79cdf0e10cSrcweir SfxChildWindow(_pParent, nId) 80cdf0e10cSrcweir { 81cdf0e10cSrcweir pWindow = new SvxRubyDialog( pBindings, this, _pParent, SVX_RES( RID_SVXDLG_RUBY ) ); 82cdf0e10cSrcweir SvxRubyDialog* pDlg = (SvxRubyDialog*) pWindow; 83cdf0e10cSrcweir 84cdf0e10cSrcweir if ( pInfo->nFlags & SFX_CHILDWIN_ZOOMIN ) 85cdf0e10cSrcweir pDlg->RollUp(); 86cdf0e10cSrcweir 87cdf0e10cSrcweir eChildAlignment = SFX_ALIGN_NOALIGNMENT; 88cdf0e10cSrcweir 89cdf0e10cSrcweir pDlg->Initialize( pInfo ); 90cdf0e10cSrcweir } 91cdf0e10cSrcweir /* -----------------------------10.01.01 13:53-------------------------------- 92cdf0e10cSrcweir 93cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 94cdf0e10cSrcweir SfxChildWinInfo SvxRubyChildWindow::GetInfo() const 95cdf0e10cSrcweir { 96cdf0e10cSrcweir return SfxChildWindow::GetInfo(); 97cdf0e10cSrcweir } 98cdf0e10cSrcweir /* -----------------------------09.01.01 17:17-------------------------------- 99cdf0e10cSrcweir 100cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 101cdf0e10cSrcweir class SvxRubyData_Impl : public cppu::WeakImplHelper1 102cdf0e10cSrcweir < ::com::sun::star::view::XSelectionChangeListener > 103cdf0e10cSrcweir { 104cdf0e10cSrcweir Reference<XModel> xModel; 105cdf0e10cSrcweir Reference<XRubySelection> xSelection; 106cdf0e10cSrcweir Sequence<PropertyValues> aRubyValues; 107cdf0e10cSrcweir Reference<XController> xController; 108cdf0e10cSrcweir sal_Bool bHasSelectionChanged; 109cdf0e10cSrcweir public: 110cdf0e10cSrcweir SvxRubyData_Impl(); 111cdf0e10cSrcweir ~SvxRubyData_Impl(); 112cdf0e10cSrcweir 113cdf0e10cSrcweir void SetController(Reference<XController> xCtrl); 114cdf0e10cSrcweir Reference<XModel> GetModel() 115cdf0e10cSrcweir { 116cdf0e10cSrcweir if(!xController.is()) 117cdf0e10cSrcweir xModel = 0; 118cdf0e10cSrcweir else 119cdf0e10cSrcweir xModel = xController->getModel(); 120cdf0e10cSrcweir return xModel; 121cdf0e10cSrcweir } 122cdf0e10cSrcweir sal_Bool HasSelectionChanged() const{return bHasSelectionChanged;} 123cdf0e10cSrcweir Reference<XRubySelection> GetRubySelection() 124cdf0e10cSrcweir { 125cdf0e10cSrcweir xSelection = Reference<XRubySelection>(xController, UNO_QUERY); 126cdf0e10cSrcweir return xSelection; 127cdf0e10cSrcweir } 128cdf0e10cSrcweir void UpdateRubyValues(sal_Bool bAutoUpdate) 129cdf0e10cSrcweir { 130cdf0e10cSrcweir if(!xSelection.is()) 131cdf0e10cSrcweir aRubyValues.realloc(0); 132cdf0e10cSrcweir else 133cdf0e10cSrcweir aRubyValues = xSelection->getRubyList(bAutoUpdate); 134cdf0e10cSrcweir bHasSelectionChanged = sal_False; 135cdf0e10cSrcweir } 136cdf0e10cSrcweir Sequence<PropertyValues>& GetRubyValues() {return aRubyValues;} 137cdf0e10cSrcweir void AssertOneEntry(); 138cdf0e10cSrcweir 139cdf0e10cSrcweir virtual void SAL_CALL selectionChanged( const ::com::sun::star::lang::EventObject& aEvent ) throw (RuntimeException); 140cdf0e10cSrcweir virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (RuntimeException); 141cdf0e10cSrcweir 142cdf0e10cSrcweir }; 143cdf0e10cSrcweir //----------------------------------------------------------------------------- 144cdf0e10cSrcweir SvxRubyData_Impl::SvxRubyData_Impl() : 145cdf0e10cSrcweir bHasSelectionChanged(sal_False) 146cdf0e10cSrcweir { 147cdf0e10cSrcweir } 148cdf0e10cSrcweir //----------------------------------------------------------------------------- 149cdf0e10cSrcweir SvxRubyData_Impl::~SvxRubyData_Impl() 150cdf0e10cSrcweir { 151cdf0e10cSrcweir } 152cdf0e10cSrcweir //----------------------------------------------------------------------------- 153cdf0e10cSrcweir void SvxRubyData_Impl::SetController(Reference<XController> xCtrl) 154cdf0e10cSrcweir { 155cdf0e10cSrcweir if(xCtrl.get() != xController.get()) 156cdf0e10cSrcweir { 157cdf0e10cSrcweir try 158cdf0e10cSrcweir { 159cdf0e10cSrcweir Reference<XSelectionSupplier> xSelSupp(xController, UNO_QUERY); 160cdf0e10cSrcweir if(xSelSupp.is()) 161cdf0e10cSrcweir xSelSupp->removeSelectionChangeListener(this); 162cdf0e10cSrcweir 163cdf0e10cSrcweir bHasSelectionChanged = sal_True; 164cdf0e10cSrcweir xController = xCtrl; 165cdf0e10cSrcweir xSelSupp = Reference<XSelectionSupplier>(xController, UNO_QUERY); 166cdf0e10cSrcweir if(xSelSupp.is()) 167cdf0e10cSrcweir xSelSupp->addSelectionChangeListener(this); 168cdf0e10cSrcweir } 169cdf0e10cSrcweir catch(Exception&) 170cdf0e10cSrcweir {} 171cdf0e10cSrcweir } 172cdf0e10cSrcweir } 173cdf0e10cSrcweir //----------------------------------------------------------------------------- 174cdf0e10cSrcweir void SvxRubyData_Impl::selectionChanged( const EventObject& ) throw (RuntimeException) 175cdf0e10cSrcweir { 176cdf0e10cSrcweir bHasSelectionChanged = sal_True; 177cdf0e10cSrcweir } 178cdf0e10cSrcweir //----------------------------------------------------------------------------- 179cdf0e10cSrcweir void SvxRubyData_Impl::disposing( const EventObject&) throw (RuntimeException) 180cdf0e10cSrcweir { 181cdf0e10cSrcweir try 182cdf0e10cSrcweir { 183cdf0e10cSrcweir Reference<XSelectionSupplier> xSelSupp(xController, UNO_QUERY); 184cdf0e10cSrcweir if(xSelSupp.is()) 185cdf0e10cSrcweir xSelSupp->removeSelectionChangeListener(this); 186cdf0e10cSrcweir } 187cdf0e10cSrcweir catch(Exception&) 188cdf0e10cSrcweir {} 189cdf0e10cSrcweir xController = 0; 190cdf0e10cSrcweir } 191cdf0e10cSrcweir //----------------------------------------------------------------------------- 192cdf0e10cSrcweir void SvxRubyData_Impl::AssertOneEntry() 193cdf0e10cSrcweir { 194cdf0e10cSrcweir //create one entry 195cdf0e10cSrcweir if(!aRubyValues.getLength()) 196cdf0e10cSrcweir { 197cdf0e10cSrcweir aRubyValues.realloc(1); 198cdf0e10cSrcweir Sequence<PropertyValue>& rValues = aRubyValues.getArray()[0]; 199cdf0e10cSrcweir rValues.realloc(5); 200cdf0e10cSrcweir PropertyValue* pValues = rValues.getArray(); 201cdf0e10cSrcweir pValues[0].Name = C2U(cRubyBaseText); 202cdf0e10cSrcweir pValues[1].Name = C2U(cRubyText); 203cdf0e10cSrcweir pValues[2].Name = C2U(cRubyAdjust); 204cdf0e10cSrcweir pValues[3].Name = C2U(cRubyIsAbove); 205cdf0e10cSrcweir pValues[4].Name = C2U(cRubyCharStyleName); 206cdf0e10cSrcweir } 207cdf0e10cSrcweir } 208cdf0e10cSrcweir /* --------------------------------------------------------------------------- 209cdf0e10cSrcweir 210cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 211cdf0e10cSrcweir SvxRubyDialog::SvxRubyDialog( SfxBindings *pBind, SfxChildWindow *pCW, 212cdf0e10cSrcweir Window* _pParent, const ResId& rResId ) : 213cdf0e10cSrcweir SfxModelessDialog( pBind, pCW, _pParent, rResId ), 214cdf0e10cSrcweir aLeftFT(this, ResId(FT_LEFT,*rResId.GetResMgr() )), 215cdf0e10cSrcweir aLeft1ED(this, ResId(ED_LEFT_1,*rResId.GetResMgr() )), 216cdf0e10cSrcweir aRightFT(this, ResId(FT_RIGHT,*rResId.GetResMgr() )), 217cdf0e10cSrcweir aRight1ED(this, ResId(ED_RIGHT_1,*rResId.GetResMgr() )), 218cdf0e10cSrcweir aLeft2ED(this, ResId(ED_LEFT_2,*rResId.GetResMgr() )), 219cdf0e10cSrcweir aRight2ED(this, ResId(ED_RIGHT_2,*rResId.GetResMgr() )), 220cdf0e10cSrcweir aLeft3ED(this, ResId(ED_LEFT_3,*rResId.GetResMgr() )), 221cdf0e10cSrcweir aRight3ED(this, ResId(ED_RIGHT_3,*rResId.GetResMgr() )), 222cdf0e10cSrcweir aLeft4ED(this, ResId(ED_LEFT_4,*rResId.GetResMgr() )), 223cdf0e10cSrcweir aRight4ED(this, ResId(ED_RIGHT_4,*rResId.GetResMgr() )), 224cdf0e10cSrcweir aScrollSB(this, ResId(SB_SCROLL,*rResId.GetResMgr() )), 225cdf0e10cSrcweir aAutoDetectionCB(this, ResId(CB_AUTO_DETECT,*rResId.GetResMgr() )), 226cdf0e10cSrcweir aAdjustFT(this, ResId(FT_ADJUST,*rResId.GetResMgr() )), 227cdf0e10cSrcweir aAdjustLB(this, ResId(LB_ADJUST,*rResId.GetResMgr() )), 228cdf0e10cSrcweir aPositionFT(this, ResId(FT_POSITION,*rResId.GetResMgr() )), 229cdf0e10cSrcweir aPositionLB(this, ResId(LB_POSITION,*rResId.GetResMgr() )), 230cdf0e10cSrcweir aCharStyleFT(this, ResId(FT_CHAR_STYLE,*rResId.GetResMgr() )), 231cdf0e10cSrcweir aCharStyleLB(this, ResId(LB_CHAR_STYLE,*rResId.GetResMgr() )), 232cdf0e10cSrcweir aStylistPB(this, ResId(PB_STYLIST,*rResId.GetResMgr() )), 233cdf0e10cSrcweir aPreviewFT(this, ResId(FT_PREVIEW,*rResId.GetResMgr() )), 234cdf0e10cSrcweir aPreviewWin(*this, ResId(WIN_PREVIEW,*rResId.GetResMgr() )), 235cdf0e10cSrcweir aApplyPB(this, ResId(PB_APPLY,*rResId.GetResMgr() )), 236cdf0e10cSrcweir aClosePB(this, ResId(PB_CLOSE,*rResId.GetResMgr() )), 237cdf0e10cSrcweir aHelpPB(this, ResId(PB_HELP,*rResId.GetResMgr() )), 238cdf0e10cSrcweir nLastPos(0), 239cdf0e10cSrcweir nCurrentEdit(0), 240cdf0e10cSrcweir bModified(sal_False), 241cdf0e10cSrcweir pBindings(pBind) 242cdf0e10cSrcweir { 243cdf0e10cSrcweir xImpl = pImpl = new SvxRubyData_Impl; 244cdf0e10cSrcweir FreeResource(); 245cdf0e10cSrcweir //#85638# automatic detection not yet available 246cdf0e10cSrcweir aAutoDetectionCB.Hide(); 247cdf0e10cSrcweir aEditArr[0] = &aLeft1ED; aEditArr[1] = &aRight1ED; 248cdf0e10cSrcweir aEditArr[2] = &aLeft2ED; aEditArr[3] = &aRight2ED; 249cdf0e10cSrcweir aEditArr[4] = &aLeft3ED; aEditArr[5] = &aRight3ED; 250cdf0e10cSrcweir aEditArr[6] = &aLeft4ED; aEditArr[7] = &aRight4ED; 251cdf0e10cSrcweir 252cdf0e10cSrcweir aApplyPB.SetClickHdl(LINK(this, SvxRubyDialog, ApplyHdl_Impl)); 253cdf0e10cSrcweir aClosePB.SetClickHdl(LINK(this, SvxRubyDialog, CloseHdl_Impl)); 254cdf0e10cSrcweir aStylistPB.SetClickHdl(LINK(this, SvxRubyDialog, StylistHdl_Impl)); 255cdf0e10cSrcweir aAutoDetectionCB.SetClickHdl(LINK(this, SvxRubyDialog, AutomaticHdl_Impl)); 256cdf0e10cSrcweir aAdjustLB.SetSelectHdl(LINK(this, SvxRubyDialog, AdjustHdl_Impl)); 257cdf0e10cSrcweir aPositionLB.SetSelectHdl(LINK(this, SvxRubyDialog, PositionHdl_Impl)); 258cdf0e10cSrcweir aCharStyleLB.SetSelectHdl(LINK(this, SvxRubyDialog, CharStyleHdl_Impl)); 259cdf0e10cSrcweir 260cdf0e10cSrcweir Link aScrLk(LINK(this, SvxRubyDialog, ScrollHdl_Impl)); 261cdf0e10cSrcweir aScrollSB.SetScrollHdl( aScrLk ); 262cdf0e10cSrcweir aScrollSB.SetEndScrollHdl( aScrLk ); 263cdf0e10cSrcweir 264cdf0e10cSrcweir Link aEditLk(LINK(this, SvxRubyDialog, EditModifyHdl_Impl)); 265cdf0e10cSrcweir Link aScrollLk(LINK(this, SvxRubyDialog, EditScrollHdl_Impl)); 266cdf0e10cSrcweir Link aJumpLk(LINK(this, SvxRubyDialog, EditJumpHdl_Impl)); 267cdf0e10cSrcweir for(sal_uInt16 i = 0; i < 8; i++) 268cdf0e10cSrcweir { 269cdf0e10cSrcweir aEditArr[i]->SetModifyHdl(aEditLk); 270cdf0e10cSrcweir aEditArr[i]->SetJumpHdl(aJumpLk); 271cdf0e10cSrcweir if(!i || 7 == i) 272cdf0e10cSrcweir aEditArr[i]->SetScrollHdl(aScrollLk); 273cdf0e10cSrcweir } 274cdf0e10cSrcweir 275cdf0e10cSrcweir UpdateColors(); 276cdf0e10cSrcweir 277cdf0e10cSrcweir String leftLabelName = aLeftFT.GetText(), rightLabelName = aRightFT.GetText(); 278cdf0e10cSrcweir aLeft2ED.SetAccessibleName(leftLabelName); 279cdf0e10cSrcweir aLeft3ED.SetAccessibleName(leftLabelName); 280cdf0e10cSrcweir aLeft4ED.SetAccessibleName(leftLabelName); 281cdf0e10cSrcweir aRight2ED.SetAccessibleName(rightLabelName); 282cdf0e10cSrcweir aRight3ED.SetAccessibleName(rightLabelName); 283cdf0e10cSrcweir aRight4ED.SetAccessibleName(rightLabelName); 284cdf0e10cSrcweir } 285cdf0e10cSrcweir /* -----------------------------09.01.01 17:17-------------------------------- 286cdf0e10cSrcweir 287cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 288cdf0e10cSrcweir SvxRubyDialog::~SvxRubyDialog() 289cdf0e10cSrcweir { 290cdf0e10cSrcweir ClearCharStyleList(); 291cdf0e10cSrcweir EventObject aEvent; 292cdf0e10cSrcweir xImpl->disposing(aEvent); 293cdf0e10cSrcweir } 294cdf0e10cSrcweir /* -----------------------------01.02.01 10:29-------------------------------- 295cdf0e10cSrcweir 296cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 297cdf0e10cSrcweir void SvxRubyDialog::ClearCharStyleList() 298cdf0e10cSrcweir { 299cdf0e10cSrcweir for(sal_uInt16 i = 0; i < aCharStyleLB.GetEntryCount(); i++) 300cdf0e10cSrcweir { 301cdf0e10cSrcweir void* pData = aCharStyleLB.GetEntryData(i); 302cdf0e10cSrcweir delete (OUString*)pData; 303cdf0e10cSrcweir } 304cdf0e10cSrcweir aCharStyleLB.Clear(); 305cdf0e10cSrcweir } 306cdf0e10cSrcweir /* -----------------------------09.01.01 17:17-------------------------------- 307cdf0e10cSrcweir 308cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 309cdf0e10cSrcweir sal_Bool SvxRubyDialog::Close() 310cdf0e10cSrcweir { 311cdf0e10cSrcweir pBindings->GetDispatcher()->Execute( SID_RUBY_DIALOG, 312cdf0e10cSrcweir SFX_CALLMODE_ASYNCHRON | 313cdf0e10cSrcweir SFX_CALLMODE_RECORD); 314cdf0e10cSrcweir return sal_True; 315cdf0e10cSrcweir } 316cdf0e10cSrcweir /* -----------------------------29.01.01 15:26-------------------------------- 317cdf0e10cSrcweir 318cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 319cdf0e10cSrcweir void SvxRubyDialog::Activate() 320cdf0e10cSrcweir { 321cdf0e10cSrcweir SfxModelessDialog::Activate(); 322cdf0e10cSrcweir SfxPoolItem* pState = 0; 323cdf0e10cSrcweir SfxItemState eState = pBindings->QueryState( SID_STYLE_DESIGNER, pState ); 324cdf0e10cSrcweir sal_Bool bEnable = (eState < SFX_ITEM_AVAILABLE) || !pState || !((SfxBoolItem*)pState)->GetValue(); 325cdf0e10cSrcweir aStylistPB.Enable(bEnable); 326cdf0e10cSrcweir //get selection from current view frame 327cdf0e10cSrcweir SfxViewFrame* pCurFrm = SfxViewFrame::Current(); 328cdf0e10cSrcweir Reference< XController > xCtrl = pCurFrm->GetFrame().GetController(); 329cdf0e10cSrcweir pImpl->SetController(xCtrl); 330cdf0e10cSrcweir if(pImpl->HasSelectionChanged()) 331cdf0e10cSrcweir { 332cdf0e10cSrcweir 333cdf0e10cSrcweir Reference< XRubySelection > xRubySel = pImpl->GetRubySelection(); 334cdf0e10cSrcweir pImpl->UpdateRubyValues(aAutoDetectionCB.IsChecked()); 335cdf0e10cSrcweir EnableControls(xRubySel.is()); 336cdf0e10cSrcweir if(xRubySel.is()) 337cdf0e10cSrcweir { 338cdf0e10cSrcweir Reference< XModel > xModel = pImpl->GetModel(); 339cdf0e10cSrcweir const String sCharStyleSelect = aCharStyleLB.GetSelectEntry(); 340cdf0e10cSrcweir ClearCharStyleList(); 341cdf0e10cSrcweir Reference<XStyleFamiliesSupplier> xSupplier(xModel, UNO_QUERY); 342cdf0e10cSrcweir if(xSupplier.is()) 343cdf0e10cSrcweir { 344cdf0e10cSrcweir try 345cdf0e10cSrcweir { 346cdf0e10cSrcweir Reference<XNameAccess> xFam = xSupplier->getStyleFamilies(); 347cdf0e10cSrcweir Any aChar = xFam->getByName(C2U(cCharacterStyles)); 348cdf0e10cSrcweir Reference<XNameContainer> xChar; 349cdf0e10cSrcweir aChar >>= xChar; 350cdf0e10cSrcweir Reference<XIndexAccess> xCharIdx(xChar, UNO_QUERY); 351cdf0e10cSrcweir if(xCharIdx.is()) 352cdf0e10cSrcweir { 353cdf0e10cSrcweir OUString sUIName(C2U(cDisplayName)); 354cdf0e10cSrcweir for(sal_Int32 nStyle = 0; nStyle < xCharIdx->getCount(); nStyle++) 355cdf0e10cSrcweir { 356cdf0e10cSrcweir Any aStyle = xCharIdx->getByIndex(nStyle); 357cdf0e10cSrcweir Reference<XStyle> xStyle; 358cdf0e10cSrcweir aStyle >>= xStyle; 359cdf0e10cSrcweir Reference<XPropertySet> xPrSet(xStyle, UNO_QUERY); 360cdf0e10cSrcweir OUString sName, sCoreName; 361cdf0e10cSrcweir if(xPrSet.is()) 362cdf0e10cSrcweir { 363cdf0e10cSrcweir Reference<XPropertySetInfo> xInfo = xPrSet->getPropertySetInfo(); 364cdf0e10cSrcweir if(xInfo->hasPropertyByName(sUIName)) 365cdf0e10cSrcweir { 366cdf0e10cSrcweir Any aName = xPrSet->getPropertyValue(sUIName); 367cdf0e10cSrcweir aName >>= sName; 368cdf0e10cSrcweir } 369cdf0e10cSrcweir } 370cdf0e10cSrcweir Reference<XNamed> xNamed(xStyle, UNO_QUERY); 371cdf0e10cSrcweir if(xNamed.is()) 372cdf0e10cSrcweir { 373cdf0e10cSrcweir sCoreName = xNamed->getName(); 374cdf0e10cSrcweir if(!sName.getLength()) 375cdf0e10cSrcweir sName = sCoreName; 376cdf0e10cSrcweir } 377cdf0e10cSrcweir if(sName.getLength()) 378cdf0e10cSrcweir { 379cdf0e10cSrcweir sal_uInt16 nPos = aCharStyleLB.InsertEntry(sName); 380cdf0e10cSrcweir aCharStyleLB.SetEntryData( nPos, new OUString(sCoreName) ); 381cdf0e10cSrcweir 382cdf0e10cSrcweir } 383cdf0e10cSrcweir } 384cdf0e10cSrcweir } 385cdf0e10cSrcweir } 386cdf0e10cSrcweir catch(Exception&) 387cdf0e10cSrcweir { 388cdf0e10cSrcweir DBG_ERROR("exception in style access"); 389cdf0e10cSrcweir } 390cdf0e10cSrcweir if(sCharStyleSelect.Len()) 391cdf0e10cSrcweir aCharStyleLB.SelectEntry(sCharStyleSelect); 392cdf0e10cSrcweir } 393cdf0e10cSrcweir aCharStyleLB.Enable(xSupplier.is()); 394cdf0e10cSrcweir aCharStyleFT.Enable(xSupplier.is()); 395cdf0e10cSrcweir } 396cdf0e10cSrcweir Update(); 397cdf0e10cSrcweir aPreviewWin.Invalidate(); 398cdf0e10cSrcweir } 399cdf0e10cSrcweir } 400cdf0e10cSrcweir /* -----------------------------29.01.01 15:26-------------------------------- 401cdf0e10cSrcweir 402cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 403cdf0e10cSrcweir void SvxRubyDialog::Deactivate() 404cdf0e10cSrcweir { 405cdf0e10cSrcweir SfxModelessDialog::Deactivate(); 406cdf0e10cSrcweir } 407cdf0e10cSrcweir /* -----------------------------30.01.01 15:35-------------------------------- 408cdf0e10cSrcweir 409cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 410cdf0e10cSrcweir void SvxRubyDialog::SetText(sal_Int32 nPos, Edit& rLeft, Edit& rRight) 411cdf0e10cSrcweir { 412cdf0e10cSrcweir OUString sLeft, sRight; 413cdf0e10cSrcweir const Sequence<PropertyValues>& aRubyValues = pImpl->GetRubyValues(); 414cdf0e10cSrcweir sal_Bool bEnable = aRubyValues.getLength() > nPos; 415cdf0e10cSrcweir if(bEnable) 416cdf0e10cSrcweir { 417cdf0e10cSrcweir const Sequence<PropertyValue> aProps = aRubyValues.getConstArray()[nPos]; 418cdf0e10cSrcweir const PropertyValue* pProps = aProps.getConstArray(); 419cdf0e10cSrcweir for(sal_Int32 nProp = 0; nProp < aProps.getLength(); nProp++) 420cdf0e10cSrcweir { 421cdf0e10cSrcweir if(pProps[nProp].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cRubyBaseText))) 422cdf0e10cSrcweir pProps[nProp].Value >>= sLeft; 423cdf0e10cSrcweir else if(pProps[nProp].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cRubyText))) 424cdf0e10cSrcweir pProps[nProp].Value >>= sRight; 425cdf0e10cSrcweir } 426cdf0e10cSrcweir } 427cdf0e10cSrcweir else if(!nPos) 428cdf0e10cSrcweir bEnable = sal_True; 429cdf0e10cSrcweir rLeft.Enable(bEnable); 430cdf0e10cSrcweir rRight.Enable(bEnable); 431cdf0e10cSrcweir rLeft.SetText(sLeft); 432cdf0e10cSrcweir rRight.SetText(sRight); 433cdf0e10cSrcweir rLeft.SaveValue(); 434cdf0e10cSrcweir rRight.SaveValue(); 435cdf0e10cSrcweir } 436cdf0e10cSrcweir //----------------------------------------------------------------------------- 437cdf0e10cSrcweir void SvxRubyDialog::GetText() 438cdf0e10cSrcweir { 439cdf0e10cSrcweir long nTempLastPos = GetLastPos(); 440cdf0e10cSrcweir for(int i = 0; i < 8; i+=2) 441cdf0e10cSrcweir { 442cdf0e10cSrcweir if(aEditArr[i]->IsEnabled() && 443cdf0e10cSrcweir (aEditArr[i]->GetText() != aEditArr[i]->GetSavedValue() || 444cdf0e10cSrcweir aEditArr[i + 1]->GetText() != aEditArr[i + 1]->GetSavedValue())) 445cdf0e10cSrcweir { 446cdf0e10cSrcweir Sequence<PropertyValues>& aRubyValues = pImpl->GetRubyValues(); 447cdf0e10cSrcweir DBG_ASSERT(aRubyValues.getLength() > (i / 2 + nTempLastPos), "wrong index" ); 448cdf0e10cSrcweir SetModified(sal_True); 449cdf0e10cSrcweir Sequence<PropertyValue> &rProps = aRubyValues.getArray()[i / 2 + nTempLastPos]; 450cdf0e10cSrcweir PropertyValue* pProps = rProps.getArray(); 451cdf0e10cSrcweir for(sal_Int32 nProp = 0; nProp < rProps.getLength(); nProp++) 452cdf0e10cSrcweir { 453cdf0e10cSrcweir if(pProps[nProp].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cRubyBaseText))) 454cdf0e10cSrcweir pProps[nProp].Value <<= OUString(aEditArr[i]->GetText()); 455cdf0e10cSrcweir else if(pProps[nProp].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cRubyText))) 456cdf0e10cSrcweir pProps[nProp].Value <<= OUString(aEditArr[i + 1]->GetText()); 457cdf0e10cSrcweir } 458cdf0e10cSrcweir } 459cdf0e10cSrcweir } 460cdf0e10cSrcweir } 461cdf0e10cSrcweir //----------------------------------------------------------------------------- 462cdf0e10cSrcweir void SvxRubyDialog::Update() 463cdf0e10cSrcweir { 464cdf0e10cSrcweir const Sequence<PropertyValues>& aRubyValues = pImpl->GetRubyValues(); 465cdf0e10cSrcweir sal_Int32 nLen = aRubyValues.getLength(); 466cdf0e10cSrcweir aScrollSB.Enable(nLen > 4); 467cdf0e10cSrcweir aScrollSB.SetRange( Range(0, nLen > 4 ? nLen - 4 : 0)); 468cdf0e10cSrcweir aScrollSB.SetThumbPos(0); 469cdf0e10cSrcweir SetLastPos(0); 470cdf0e10cSrcweir SetModified(sal_False); 471cdf0e10cSrcweir 472cdf0e10cSrcweir sal_Int16 nAdjust = -1; 473cdf0e10cSrcweir sal_Int16 nPosition = -1; 474cdf0e10cSrcweir OUString sCharStyleName, sTmp; 475cdf0e10cSrcweir sal_Bool bCharStyleEqual = sal_True; 476cdf0e10cSrcweir for(sal_Int32 nRuby = 0; nRuby < nLen; nRuby++) 477cdf0e10cSrcweir { 478cdf0e10cSrcweir const Sequence<PropertyValue> &rProps = aRubyValues.getConstArray()[nRuby]; 479cdf0e10cSrcweir const PropertyValue* pProps = rProps.getConstArray(); 480cdf0e10cSrcweir for(sal_Int32 nProp = 0; nProp < rProps.getLength(); nProp++) 481cdf0e10cSrcweir { 482cdf0e10cSrcweir if(nAdjust > -2 && 483cdf0e10cSrcweir pProps[nProp].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cRubyAdjust))) 484cdf0e10cSrcweir { 485cdf0e10cSrcweir sal_Int16 nTmp = sal_Int16(); 486cdf0e10cSrcweir pProps[nProp].Value >>= nTmp; 487cdf0e10cSrcweir if(!nRuby) 488cdf0e10cSrcweir nAdjust = nTmp; 489cdf0e10cSrcweir else if(nAdjust != nTmp) 490cdf0e10cSrcweir nAdjust = -2; 491cdf0e10cSrcweir } 492cdf0e10cSrcweir if(nPosition > -2 && 493cdf0e10cSrcweir pProps[nProp].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cRubyIsAbove))) 494cdf0e10cSrcweir { 495cdf0e10cSrcweir sal_Bool bTmp = *(sal_Bool*)pProps[nProp].Value.getValue(); 496cdf0e10cSrcweir if(!nRuby) 497cdf0e10cSrcweir nPosition = bTmp ? 0 : 1; 498cdf0e10cSrcweir else if( (!nPosition && !bTmp) || (nPosition == 1 && bTmp) ) 499cdf0e10cSrcweir nPosition = -2; 500cdf0e10cSrcweir } 501cdf0e10cSrcweir if(bCharStyleEqual && 502cdf0e10cSrcweir pProps[nProp].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cRubyCharStyleName))) 503cdf0e10cSrcweir { 504cdf0e10cSrcweir pProps[nProp].Value >>= sTmp; 505cdf0e10cSrcweir if(!nRuby) 506cdf0e10cSrcweir sCharStyleName = sTmp; 507cdf0e10cSrcweir else if(sCharStyleName != sTmp) 508cdf0e10cSrcweir bCharStyleEqual = sal_False; 509cdf0e10cSrcweir } 510cdf0e10cSrcweir } 511cdf0e10cSrcweir } 512cdf0e10cSrcweir if(!nLen) 513cdf0e10cSrcweir { 514cdf0e10cSrcweir //enable selection if the ruby list is empty 515cdf0e10cSrcweir nAdjust = 0; 516cdf0e10cSrcweir nPosition = 0; 517cdf0e10cSrcweir } 518cdf0e10cSrcweir if(nAdjust > -1) 519cdf0e10cSrcweir aAdjustLB.SelectEntryPos(nAdjust); 520cdf0e10cSrcweir else 521cdf0e10cSrcweir aAdjustLB.SetNoSelection(); 522cdf0e10cSrcweir if(nPosition > -1) 523cdf0e10cSrcweir aPositionLB.SelectEntryPos(nPosition ? 1 : 0); 524cdf0e10cSrcweir if(!nLen || (bCharStyleEqual && !sCharStyleName.getLength())) 525cdf0e10cSrcweir sCharStyleName = C2U(cRubies); 526cdf0e10cSrcweir if(sCharStyleName.getLength()) 527cdf0e10cSrcweir { 528cdf0e10cSrcweir for(sal_uInt16 i = 0; i < aCharStyleLB.GetEntryCount(); i++) 529cdf0e10cSrcweir { 530cdf0e10cSrcweir const OUString* pCoreName = (const OUString*)aCharStyleLB.GetEntryData(i); 531cdf0e10cSrcweir if(pCoreName && sCharStyleName == *pCoreName) 532cdf0e10cSrcweir { 533cdf0e10cSrcweir aCharStyleLB.SelectEntryPos(i); 534cdf0e10cSrcweir break; 535cdf0e10cSrcweir } 536cdf0e10cSrcweir } 537cdf0e10cSrcweir } 538cdf0e10cSrcweir else 539cdf0e10cSrcweir aCharStyleLB.SetNoSelection(); 540cdf0e10cSrcweir 541cdf0e10cSrcweir ScrollHdl_Impl(&aScrollSB); 542cdf0e10cSrcweir } 543cdf0e10cSrcweir /* -----------------------------16.02.01 14:01-------------------------------- 544cdf0e10cSrcweir 545cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 546cdf0e10cSrcweir void SvxRubyDialog::GetCurrentText(String& rBase, String& rRuby) 547cdf0e10cSrcweir { 548cdf0e10cSrcweir rBase = aEditArr[nCurrentEdit * 2]->GetText(); 549cdf0e10cSrcweir rRuby = aEditArr[nCurrentEdit * 2 + 1]->GetText(); 550cdf0e10cSrcweir } 551cdf0e10cSrcweir /* -----------------------------31.01.01 14:09-------------------------------- 552cdf0e10cSrcweir 553cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 554cdf0e10cSrcweir IMPL_LINK(SvxRubyDialog, ScrollHdl_Impl, ScrollBar*, pScroll) 555cdf0e10cSrcweir { 556cdf0e10cSrcweir long nPos = pScroll->GetThumbPos(); 557cdf0e10cSrcweir if(GetLastPos() != nPos) 558cdf0e10cSrcweir { 559cdf0e10cSrcweir GetText(); 560cdf0e10cSrcweir } 561cdf0e10cSrcweir SetText(nPos++, aLeft1ED, aRight1ED); 562cdf0e10cSrcweir SetText(nPos++, aLeft2ED, aRight2ED); 563cdf0e10cSrcweir SetText(nPos++, aLeft3ED, aRight3ED); 564cdf0e10cSrcweir SetText(nPos, aLeft4ED, aRight4ED); 565cdf0e10cSrcweir SetLastPos(nPos - 3); 566cdf0e10cSrcweir aPreviewWin.Invalidate(); 567cdf0e10cSrcweir return 0; 568cdf0e10cSrcweir } 569cdf0e10cSrcweir /* -----------------------------30.01.01 14:48-------------------------------- 570cdf0e10cSrcweir 571cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 572cdf0e10cSrcweir IMPL_LINK(SvxRubyDialog, ApplyHdl_Impl, PushButton*, EMPTYARG) 573cdf0e10cSrcweir { 574cdf0e10cSrcweir const Sequence<PropertyValues>& aRubyValues = pImpl->GetRubyValues(); 575cdf0e10cSrcweir if(!aRubyValues.getLength()) 576cdf0e10cSrcweir { 577cdf0e10cSrcweir AssertOneEntry(); 578cdf0e10cSrcweir PositionHdl_Impl(&aPositionLB); 579cdf0e10cSrcweir AdjustHdl_Impl(&aAdjustLB); 580cdf0e10cSrcweir CharStyleHdl_Impl(&aCharStyleLB); 581cdf0e10cSrcweir } 582cdf0e10cSrcweir GetText(); 583cdf0e10cSrcweir //reset all edit fields - SaveValue is called 584cdf0e10cSrcweir ScrollHdl_Impl(&aScrollSB); 585cdf0e10cSrcweir 586cdf0e10cSrcweir Reference<XRubySelection> xSelection = pImpl->GetRubySelection(); 587cdf0e10cSrcweir if(IsModified() && xSelection.is()) 588cdf0e10cSrcweir { 589cdf0e10cSrcweir try 590cdf0e10cSrcweir { 591cdf0e10cSrcweir xSelection->setRubyList(aRubyValues, aAutoDetectionCB.IsChecked()); 592cdf0e10cSrcweir } 593cdf0e10cSrcweir catch(Exception& ) 594cdf0e10cSrcweir { 595cdf0e10cSrcweir DBG_ERROR("Exception caught"); 596cdf0e10cSrcweir } 597cdf0e10cSrcweir } 598cdf0e10cSrcweir return 0; 599cdf0e10cSrcweir } 600cdf0e10cSrcweir /* -----------------------------29.01.01 09:38-------------------------------- 601cdf0e10cSrcweir 602cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 603cdf0e10cSrcweir IMPL_LINK(SvxRubyDialog, CloseHdl_Impl, PushButton*, EMPTYARG) 604cdf0e10cSrcweir { 605cdf0e10cSrcweir Close(); 606cdf0e10cSrcweir return 0; 607cdf0e10cSrcweir } 608cdf0e10cSrcweir /* -----------------------------29.01.01 15:10-------------------------------- 609cdf0e10cSrcweir 610cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 611cdf0e10cSrcweir IMPL_LINK(SvxRubyDialog, StylistHdl_Impl, PushButton*, EMPTYARG) 612cdf0e10cSrcweir { 613cdf0e10cSrcweir SfxPoolItem* pState = 0; 614cdf0e10cSrcweir SfxItemState eState = pBindings->QueryState( SID_STYLE_DESIGNER, pState ); 615cdf0e10cSrcweir if(eState <= SFX_ITEM_SET || !pState || !((SfxBoolItem*)pState)->GetValue()) 616cdf0e10cSrcweir { 617cdf0e10cSrcweir pBindings->GetDispatcher()->Execute( SID_STYLE_DESIGNER, 618cdf0e10cSrcweir SFX_CALLMODE_ASYNCHRON | 619cdf0e10cSrcweir SFX_CALLMODE_RECORD); 620cdf0e10cSrcweir } 621cdf0e10cSrcweir return 0; 622cdf0e10cSrcweir } 623cdf0e10cSrcweir /* -----------------------------30.01.01 15:32-------------------------------- 624cdf0e10cSrcweir 625cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 626cdf0e10cSrcweir IMPL_LINK(SvxRubyDialog, AutomaticHdl_Impl, CheckBox*, pBox) 627cdf0e10cSrcweir { 628cdf0e10cSrcweir pImpl->UpdateRubyValues(pBox->IsChecked()); 629cdf0e10cSrcweir Update(); 630cdf0e10cSrcweir return 0; 631cdf0e10cSrcweir } 632cdf0e10cSrcweir /* -----------------------------31.01.01 16:37-------------------------------- 633cdf0e10cSrcweir 634cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 635cdf0e10cSrcweir IMPL_LINK(SvxRubyDialog, AdjustHdl_Impl, ListBox*, pBox) 636cdf0e10cSrcweir { 637cdf0e10cSrcweir AssertOneEntry(); 638cdf0e10cSrcweir sal_Int16 nAdjust = pBox->GetSelectEntryPos(); 639cdf0e10cSrcweir Sequence<PropertyValues>& aRubyValues = pImpl->GetRubyValues(); 640cdf0e10cSrcweir for(sal_Int32 nRuby = 0; nRuby < aRubyValues.getLength(); nRuby++) 641cdf0e10cSrcweir { 642cdf0e10cSrcweir Sequence<PropertyValue> &rProps = aRubyValues.getArray()[nRuby]; 643cdf0e10cSrcweir PropertyValue* pProps = rProps.getArray(); 644cdf0e10cSrcweir for(sal_Int32 nProp = 0; nProp < rProps.getLength(); nProp++) 645cdf0e10cSrcweir { 646cdf0e10cSrcweir if(pProps[nProp].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cRubyAdjust))) 647cdf0e10cSrcweir pProps[nProp].Value <<= nAdjust; 648cdf0e10cSrcweir } 649cdf0e10cSrcweir SetModified(sal_True); 650cdf0e10cSrcweir } 651cdf0e10cSrcweir aPreviewWin.Invalidate(); 652cdf0e10cSrcweir return 0; 653cdf0e10cSrcweir } 654cdf0e10cSrcweir /* -----------------------------01.06.01 10:24-------------------------------- 655cdf0e10cSrcweir 656cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 657cdf0e10cSrcweir IMPL_LINK(SvxRubyDialog, PositionHdl_Impl, ListBox*, pBox) 658cdf0e10cSrcweir { 659cdf0e10cSrcweir AssertOneEntry(); 660cdf0e10cSrcweir sal_Bool bAbove = !pBox->GetSelectEntryPos(); 661cdf0e10cSrcweir const Type& rType = ::getBooleanCppuType(); 662cdf0e10cSrcweir Sequence<PropertyValues>& aRubyValues = pImpl->GetRubyValues(); 663cdf0e10cSrcweir for(sal_Int32 nRuby = 0; nRuby < aRubyValues.getLength(); nRuby++) 664cdf0e10cSrcweir { 665cdf0e10cSrcweir Sequence<PropertyValue> &rProps = aRubyValues.getArray()[nRuby]; 666cdf0e10cSrcweir PropertyValue* pProps = rProps.getArray(); 667cdf0e10cSrcweir for(sal_Int32 nProp = 0; nProp < rProps.getLength(); nProp++) 668cdf0e10cSrcweir { 669cdf0e10cSrcweir if(pProps[nProp].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cRubyIsAbove))) 670cdf0e10cSrcweir pProps[nProp].Value.setValue(&bAbove, rType); 671cdf0e10cSrcweir } 672cdf0e10cSrcweir SetModified(sal_True); 673cdf0e10cSrcweir } 674cdf0e10cSrcweir aPreviewWin.Invalidate(); 675cdf0e10cSrcweir return 0; 676cdf0e10cSrcweir } 677cdf0e10cSrcweir /* -----------------------------01.02.01 10:06-------------------------------- 678cdf0e10cSrcweir 679cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 680cdf0e10cSrcweir IMPL_LINK(SvxRubyDialog, CharStyleHdl_Impl, ListBox*, EMPTYARG ) 681cdf0e10cSrcweir { 682cdf0e10cSrcweir AssertOneEntry(); 683cdf0e10cSrcweir OUString sStyleName; 684cdf0e10cSrcweir if(LISTBOX_ENTRY_NOTFOUND != aCharStyleLB.GetSelectEntryPos()) 685cdf0e10cSrcweir sStyleName = *(OUString*) aCharStyleLB.GetEntryData(aCharStyleLB.GetSelectEntryPos()); 686cdf0e10cSrcweir Sequence<PropertyValues>& aRubyValues = pImpl->GetRubyValues(); 687cdf0e10cSrcweir for(sal_Int32 nRuby = 0; nRuby < aRubyValues.getLength(); nRuby++) 688cdf0e10cSrcweir { 689cdf0e10cSrcweir Sequence<PropertyValue> &rProps = aRubyValues.getArray()[nRuby]; 690cdf0e10cSrcweir PropertyValue* pProps = rProps.getArray(); 691cdf0e10cSrcweir for(sal_Int32 nProp = 0; nProp < rProps.getLength(); nProp++) 692cdf0e10cSrcweir { 693cdf0e10cSrcweir if(pProps[nProp].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cRubyCharStyleName))) 694cdf0e10cSrcweir { 695cdf0e10cSrcweir pProps[nProp].Value <<= sStyleName; 696cdf0e10cSrcweir } 697cdf0e10cSrcweir } 698cdf0e10cSrcweir SetModified(sal_True); 699cdf0e10cSrcweir } 700cdf0e10cSrcweir return 0; 701cdf0e10cSrcweir } 702cdf0e10cSrcweir /* -----------------------------16.02.01 08:35-------------------------------- 703cdf0e10cSrcweir 704cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 705cdf0e10cSrcweir IMPL_LINK(SvxRubyDialog, EditModifyHdl_Impl, Edit*, pEdit) 706cdf0e10cSrcweir { 707cdf0e10cSrcweir for(sal_uInt16 i = 0; i < 8; i++) 708cdf0e10cSrcweir { 709cdf0e10cSrcweir if(pEdit == aEditArr[i]) 710cdf0e10cSrcweir { 711cdf0e10cSrcweir nCurrentEdit = i / 2; 712cdf0e10cSrcweir break; 713cdf0e10cSrcweir } 714cdf0e10cSrcweir } 715cdf0e10cSrcweir aPreviewWin.Invalidate(); 716cdf0e10cSrcweir return 0; 717cdf0e10cSrcweir } 718cdf0e10cSrcweir /* -----------------------------17.07.01 09:11-------------------------------- 719cdf0e10cSrcweir 720cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 721cdf0e10cSrcweir IMPL_LINK(SvxRubyDialog, EditScrollHdl_Impl, sal_Int32*, pParam) 722cdf0e10cSrcweir { 723cdf0e10cSrcweir long nRet = 0; 724cdf0e10cSrcweir if(aScrollSB.IsEnabled()) 725cdf0e10cSrcweir { 726cdf0e10cSrcweir //scroll forward 727cdf0e10cSrcweir if(*pParam > 0 && (aEditArr[7]->HasFocus() || aEditArr[6]->HasFocus() )) 728cdf0e10cSrcweir { 729cdf0e10cSrcweir if(aScrollSB.GetRangeMax() > aScrollSB.GetThumbPos()) 730cdf0e10cSrcweir { 731cdf0e10cSrcweir aScrollSB.SetThumbPos(aScrollSB.GetThumbPos() + 1); 732cdf0e10cSrcweir aEditArr[6]->GrabFocus(); 733cdf0e10cSrcweir nRet = 1; 734cdf0e10cSrcweir } 735cdf0e10cSrcweir } 736cdf0e10cSrcweir //scroll backward 737cdf0e10cSrcweir else if(aScrollSB.GetThumbPos() && (aEditArr[0]->HasFocus()||aEditArr[1]->HasFocus()) ) 738cdf0e10cSrcweir { 739cdf0e10cSrcweir aScrollSB.SetThumbPos(aScrollSB.GetThumbPos() - 1); 740cdf0e10cSrcweir aEditArr[1]->GrabFocus(); 741cdf0e10cSrcweir nRet = 1; 742cdf0e10cSrcweir } 743cdf0e10cSrcweir if(nRet) 744cdf0e10cSrcweir ScrollHdl_Impl(&aScrollSB); 745cdf0e10cSrcweir } 746cdf0e10cSrcweir return nRet; 747cdf0e10cSrcweir } 748cdf0e10cSrcweir /* -----------------------------20.07.2001 15:18------------------------------ 749cdf0e10cSrcweir 750cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 751cdf0e10cSrcweir IMPL_LINK(SvxRubyDialog, EditJumpHdl_Impl, sal_Int32*, pParam) 752cdf0e10cSrcweir { 753cdf0e10cSrcweir sal_uInt16 nIndex = USHRT_MAX; 754cdf0e10cSrcweir for(sal_uInt16 i = 0; i < 8; i++) 755cdf0e10cSrcweir { 756cdf0e10cSrcweir if(aEditArr[i]->HasFocus()) 757cdf0e10cSrcweir nIndex = i; 758cdf0e10cSrcweir } 759cdf0e10cSrcweir if(nIndex < 8) 760cdf0e10cSrcweir { 761cdf0e10cSrcweir if(*pParam > 0) 762cdf0e10cSrcweir { 763cdf0e10cSrcweir if(nIndex < 6) 764cdf0e10cSrcweir aEditArr[nIndex + 2]->GrabFocus(); 765cdf0e10cSrcweir else if( EditScrollHdl_Impl(pParam)) 766cdf0e10cSrcweir aEditArr[nIndex]->GrabFocus(); 767cdf0e10cSrcweir } 768cdf0e10cSrcweir else 769cdf0e10cSrcweir { 770cdf0e10cSrcweir if(nIndex > 1) 771cdf0e10cSrcweir aEditArr[nIndex - 2]->GrabFocus(); 772cdf0e10cSrcweir else if( EditScrollHdl_Impl(pParam)) 773cdf0e10cSrcweir aEditArr[nIndex]->GrabFocus(); 774cdf0e10cSrcweir } 775cdf0e10cSrcweir } 776cdf0e10cSrcweir return 0; 777cdf0e10cSrcweir }; 778cdf0e10cSrcweir /* -----------------------------19.06.01 11:33-------------------------------- 779cdf0e10cSrcweir 780cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 781cdf0e10cSrcweir void SvxRubyDialog::AssertOneEntry() 782cdf0e10cSrcweir { 783cdf0e10cSrcweir pImpl->AssertOneEntry(); 784cdf0e10cSrcweir } 785cdf0e10cSrcweir 786cdf0e10cSrcweir // ---------------------------------------------------------------------------- 787cdf0e10cSrcweir 788cdf0e10cSrcweir void SvxRubyDialog::UpdateColors( void ) 789cdf0e10cSrcweir { 790cdf0e10cSrcweir const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 791cdf0e10cSrcweir svtools::ColorConfig aColorConfig; 792cdf0e10cSrcweir 793cdf0e10cSrcweir Font aFnt( aPreviewWin.GetFont() ); 794cdf0e10cSrcweir 795cdf0e10cSrcweir Color aNewTextCol( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor ); 796cdf0e10cSrcweir Color aNewFillCol( rStyleSettings.GetWindowColor() ); 797cdf0e10cSrcweir 798cdf0e10cSrcweir if( aNewFillCol != aFnt.GetFillColor() || aNewTextCol != aFnt.GetColor() ) 799cdf0e10cSrcweir { 800cdf0e10cSrcweir aFnt.SetFillColor( aNewFillCol ); 801cdf0e10cSrcweir aFnt.SetColor( aNewTextCol ); 802cdf0e10cSrcweir aPreviewWin.SetFont( aFnt ); 803cdf0e10cSrcweir 804cdf0e10cSrcweir aPreviewWin.Invalidate(); 805cdf0e10cSrcweir } 806cdf0e10cSrcweir } 807cdf0e10cSrcweir 808cdf0e10cSrcweir // ---------------------------------------------------------------------------- 809cdf0e10cSrcweir 810cdf0e10cSrcweir void SvxRubyDialog::DataChanged( const DataChangedEvent& rDCEvt ) 811cdf0e10cSrcweir { 812cdf0e10cSrcweir SfxModelessDialog::DataChanged( rDCEvt ); 813cdf0e10cSrcweir 814cdf0e10cSrcweir if( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) ) 815cdf0e10cSrcweir UpdateColors(); 816cdf0e10cSrcweir } 817cdf0e10cSrcweir 818cdf0e10cSrcweir /* -----------------------------29.01.01 15:44-------------------------------- 819cdf0e10cSrcweir 820cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 821cdf0e10cSrcweir void lcl_MoveBox(long nOffset, Edit& rLeft, Edit& rRight) 822cdf0e10cSrcweir { 823cdf0e10cSrcweir Size aLeftSz(rLeft.GetSizePixel()); 824cdf0e10cSrcweir Point aRightPos(rRight.GetPosPixel()); 825cdf0e10cSrcweir Size aRightSz(rRight.GetSizePixel()); 826cdf0e10cSrcweir aLeftSz.Width() += nOffset; 827cdf0e10cSrcweir aRightSz.Width() -= nOffset; 828cdf0e10cSrcweir aRightPos.X() += nOffset; 829cdf0e10cSrcweir rLeft.SetSizePixel(aLeftSz); 830cdf0e10cSrcweir rRight.SetPosSizePixel(aRightPos, aRightSz); 831cdf0e10cSrcweir 832cdf0e10cSrcweir } 833cdf0e10cSrcweir /* -----------------------------16.02.01 08:09-------------------------------- 834cdf0e10cSrcweir 835cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 836cdf0e10cSrcweir RubyPreview::RubyPreview(SvxRubyDialog& rParent, const ResId& rResId) : 837cdf0e10cSrcweir Window(&rParent, rResId), 838cdf0e10cSrcweir rParentDlg(rParent) 839cdf0e10cSrcweir { 840cdf0e10cSrcweir SetMapMode(MAP_TWIP); 841cdf0e10cSrcweir Size aWinSize = GetOutputSize(); 842cdf0e10cSrcweir 843cdf0e10cSrcweir Font aFont = GetFont(); 844cdf0e10cSrcweir aFont.SetHeight(aWinSize.Height() / 4); 845cdf0e10cSrcweir SetFont(aFont); 846cdf0e10cSrcweir 847cdf0e10cSrcweir SetBorderStyle( WINDOW_BORDER_MONO ); 848cdf0e10cSrcweir } 849cdf0e10cSrcweir /* -----------------------------29.01.01 14:05-------------------------------- 850cdf0e10cSrcweir 851cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 852cdf0e10cSrcweir void RubyPreview::Paint( const Rectangle& /* rRect */ ) 853cdf0e10cSrcweir { 854cdf0e10cSrcweir Font aRubyFont = GetFont(); 855cdf0e10cSrcweir Font aSaveFont(aRubyFont); 856cdf0e10cSrcweir aRubyFont.SetHeight(aRubyFont.GetHeight() * 70 / 100); 857cdf0e10cSrcweir 858cdf0e10cSrcweir Size aWinSize = GetOutputSize(); 859cdf0e10cSrcweir Rectangle aRect(Point(0, 0), aWinSize); 860cdf0e10cSrcweir SetLineColor(); 861cdf0e10cSrcweir SetFillColor( aSaveFont.GetFillColor() ); 862cdf0e10cSrcweir DrawRect(aRect); 863cdf0e10cSrcweir 864cdf0e10cSrcweir String sBaseText, sRubyText; 865cdf0e10cSrcweir rParentDlg.GetCurrentText(sBaseText, sRubyText); 866cdf0e10cSrcweir 867cdf0e10cSrcweir long nTextHeight = GetTextHeight(); 868cdf0e10cSrcweir long nBaseWidth = GetTextWidth(sBaseText); 869cdf0e10cSrcweir SetFont(aRubyFont); 870cdf0e10cSrcweir long nRubyWidth = GetTextWidth(sRubyText); 871cdf0e10cSrcweir SetFont(aSaveFont); 872cdf0e10cSrcweir 873cdf0e10cSrcweir sal_uInt16 nAdjust = rParentDlg.aAdjustLB.GetSelectEntryPos(); 874cdf0e10cSrcweir //use center if no adjustment is available 875cdf0e10cSrcweir if(nAdjust > 4) 876cdf0e10cSrcweir nAdjust = 1; 877cdf0e10cSrcweir 878cdf0e10cSrcweir //which part is stretched ? 879cdf0e10cSrcweir sal_Bool bRubyStretch = nBaseWidth >= nRubyWidth; 880cdf0e10cSrcweir 881cdf0e10cSrcweir long nCenter = aWinSize.Width() / 2; 882cdf0e10cSrcweir long nLeftStart = nCenter - (bRubyStretch ? (nBaseWidth / 2) : (nRubyWidth / 2)); 883cdf0e10cSrcweir long nRightEnd = nCenter + (bRubyStretch ? (nBaseWidth / 2) : (nRubyWidth / 2)); 884cdf0e10cSrcweir 885cdf0e10cSrcweir long nYRuby = aWinSize.Height() / 4 - nTextHeight / 2; 886cdf0e10cSrcweir long nYBase = aWinSize.Height() * 3 / 4 - nTextHeight / 2; 887cdf0e10cSrcweir 888cdf0e10cSrcweir //use above also if no selection is set 889cdf0e10cSrcweir sal_Bool bAbove = rParentDlg.aPositionLB.GetSelectEntryPos() != 1; 890cdf0e10cSrcweir if(!bAbove) 891cdf0e10cSrcweir { 892cdf0e10cSrcweir long nTmp = nYRuby; 893cdf0e10cSrcweir nYRuby = nYBase; 894cdf0e10cSrcweir nYBase = nTmp; 895cdf0e10cSrcweir } 896cdf0e10cSrcweir long nYOutput, nOutTextWidth; 897cdf0e10cSrcweir String sOutputText; 898cdf0e10cSrcweir 899cdf0e10cSrcweir 900cdf0e10cSrcweir if(bRubyStretch) 901cdf0e10cSrcweir { 902cdf0e10cSrcweir DrawText( Point( nLeftStart , nYBase), sBaseText ); 903cdf0e10cSrcweir nYOutput = nYRuby; 904cdf0e10cSrcweir sOutputText = sRubyText; 905cdf0e10cSrcweir nOutTextWidth = nRubyWidth; 906cdf0e10cSrcweir SetFont(aRubyFont); 907cdf0e10cSrcweir } 908cdf0e10cSrcweir else 909cdf0e10cSrcweir { 910cdf0e10cSrcweir SetFont(aRubyFont); 911cdf0e10cSrcweir DrawText( Point( nLeftStart , nYRuby), sRubyText ); 912cdf0e10cSrcweir nYOutput = nYBase; 913cdf0e10cSrcweir sOutputText = sBaseText; 914cdf0e10cSrcweir nOutTextWidth = nBaseWidth; 915cdf0e10cSrcweir SetFont(aSaveFont); 916cdf0e10cSrcweir } 917cdf0e10cSrcweir 918cdf0e10cSrcweir switch(nAdjust) 919cdf0e10cSrcweir { 920cdf0e10cSrcweir case RubyAdjust_LEFT: 921cdf0e10cSrcweir DrawText( Point( nLeftStart , nYOutput), sOutputText ); 922cdf0e10cSrcweir break; 923cdf0e10cSrcweir case RubyAdjust_RIGHT: 924cdf0e10cSrcweir DrawText( Point( nRightEnd - nOutTextWidth, nYOutput), sOutputText ); 925cdf0e10cSrcweir break; 926cdf0e10cSrcweir case RubyAdjust_INDENT_BLOCK: 927cdf0e10cSrcweir { 928cdf0e10cSrcweir long nCharWidth = GetTextWidth(String::CreateFromAscii("X")); 929cdf0e10cSrcweir if(nOutTextWidth < (nRightEnd - nLeftStart - nCharWidth)) 930cdf0e10cSrcweir { 931cdf0e10cSrcweir nCharWidth /= 2; 932cdf0e10cSrcweir nLeftStart += nCharWidth; 933cdf0e10cSrcweir nRightEnd -= nCharWidth; 934cdf0e10cSrcweir } 935cdf0e10cSrcweir } 936cdf0e10cSrcweir // no break! 937cdf0e10cSrcweir case RubyAdjust_BLOCK: 938cdf0e10cSrcweir if(sOutputText.Len() > 1) 939cdf0e10cSrcweir { 940cdf0e10cSrcweir xub_StrLen nCount = sOutputText.Len(); 941cdf0e10cSrcweir long nSpace = ((nRightEnd - nLeftStart) - GetTextWidth(sOutputText)) / (nCount - 1); 942cdf0e10cSrcweir for(xub_StrLen i = 0; i < nCount; i++) 943cdf0e10cSrcweir { 944cdf0e10cSrcweir sal_Unicode cChar = sOutputText.GetChar(i); 945cdf0e10cSrcweir DrawText( Point( nLeftStart , nYOutput), cChar); 946cdf0e10cSrcweir long nCharWidth = GetTextWidth(cChar); 947cdf0e10cSrcweir nLeftStart += nCharWidth + nSpace; 948cdf0e10cSrcweir } 949cdf0e10cSrcweir break; 950cdf0e10cSrcweir } 951cdf0e10cSrcweir //no break; 952cdf0e10cSrcweir case RubyAdjust_CENTER: 953cdf0e10cSrcweir DrawText( Point( nCenter - nOutTextWidth / 2 , nYOutput), sOutputText ); 954cdf0e10cSrcweir break; 955cdf0e10cSrcweir } 956cdf0e10cSrcweir SetFont(aSaveFont); 957cdf0e10cSrcweir } 958cdf0e10cSrcweir /* -----------------------------16.02.01 15:12-------------------------------- 959cdf0e10cSrcweir 960cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 961cdf0e10cSrcweir void RubyEdit::GetFocus() 962cdf0e10cSrcweir { 963cdf0e10cSrcweir GetModifyHdl().Call(this); 964cdf0e10cSrcweir Edit::GetFocus(); 965cdf0e10cSrcweir } 966cdf0e10cSrcweir /* -----------------------------17.07.01 09:00-------------------------------- 967cdf0e10cSrcweir 968cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 969cdf0e10cSrcweir long RubyEdit::PreNotify( NotifyEvent& rNEvt ) 970cdf0e10cSrcweir { 971cdf0e10cSrcweir long nHandled = 0; 972cdf0e10cSrcweir if ( rNEvt.GetType() == EVENT_KEYINPUT ) 973cdf0e10cSrcweir { 974cdf0e10cSrcweir const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); 975cdf0e10cSrcweir const KeyCode& rKeyCode = pKEvt->GetKeyCode(); 976cdf0e10cSrcweir sal_uInt16 nMod = rKeyCode.GetModifier(); 977cdf0e10cSrcweir sal_uInt16 nCode = rKeyCode.GetCode(); 978cdf0e10cSrcweir if( nCode == KEY_TAB && (!nMod || KEY_SHIFT == nMod)) 979cdf0e10cSrcweir { 980cdf0e10cSrcweir sal_Int32 nParam = KEY_SHIFT == nMod ? -1 : 1; 981cdf0e10cSrcweir if(aScrollHdl.IsSet() && aScrollHdl.Call(&nParam)) 982cdf0e10cSrcweir nHandled = 1; 983cdf0e10cSrcweir } 984cdf0e10cSrcweir else if(KEY_UP == nCode || KEY_DOWN == nCode) 985cdf0e10cSrcweir { 986cdf0e10cSrcweir sal_Int32 nParam = KEY_UP == nCode ? -1 : 1; 987cdf0e10cSrcweir aJumpHdl.Call(&nParam); 988cdf0e10cSrcweir } 989cdf0e10cSrcweir } 990cdf0e10cSrcweir if(!nHandled) 991cdf0e10cSrcweir nHandled = Edit::PreNotify(rNEvt); 992cdf0e10cSrcweir return nHandled; 993cdf0e10cSrcweir } 994cdf0e10cSrcweir 995