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 31 // include --------------------------------------------------------------- 32 #include <tools/shl.hxx> 33 #include <tools/urlobj.hxx> 34 #include <unotools/pathoptions.hxx> 35 #include <sfx2/app.hxx> 36 #include <sfx2/module.hxx> 37 #include <svtools/colrdlg.hxx> 38 #include <vcl/msgbox.hxx> 39 #include <sfx2/filedlghelper.hxx> 40 #include "com/sun/star/ui/dialogs/TemplateDescription.hpp" 41 42 #define _SVX_TPCOLOR_CXX 43 44 #include <cuires.hrc> 45 #include "helpid.hrc" 46 #include "svx/xattr.hxx" 47 #include <svx/xpool.hxx> 48 #include <svx/xtable.hxx> 49 #include "svx/drawitem.hxx" 50 #include "cuitabarea.hxx" 51 #include "tabarea.hrc" 52 #include "defdlgname.hxx" //CHINA001 #include "dlgname.hxx" 53 //#include "dlgname.hrc" 54 #include <svx/svxdlg.hxx> //CHINA001 55 #include <dialmgr.hxx> 56 #include <cuitabline.hxx> 57 #include <svx/dialmgr.hxx> 58 #include <svx/dialogs.hrc> 59 60 #define DLGWIN GetParentDialog( this ) 61 62 /************************************************************************* 63 |* 64 |* Dialog zum Aendern und Definieren der Farben 65 |* 66 \************************************************************************/ 67 68 static Window* GetParentDialog( Window* pWindow ) 69 { 70 while( pWindow ) 71 { 72 if( pWindow->IsDialog() ) 73 break; 74 75 pWindow = pWindow->GetParent(); 76 } 77 78 return pWindow; 79 } 80 81 SvxColorTabPage::SvxColorTabPage 82 ( 83 Window* pParent, 84 const SfxItemSet& rInAttrs 85 ) : 86 87 SfxTabPage ( pParent, CUI_RES( RID_SVXPAGE_COLOR ), rInAttrs ), 88 89 aFlProp ( this, CUI_RES( FL_PROP ) ), 90 aFtName ( this, CUI_RES( FT_NAME ) ), 91 aEdtName ( this, CUI_RES( EDT_NAME ) ), 92 aFtColor ( this, CUI_RES( FT_COLOR ) ), 93 aLbColor ( this, CUI_RES( LB_COLOR ) ), 94 95 aTableNameFT ( this, CUI_RES( FT_TABLE_NAME ) ), 96 aValSetColorTable ( this, CUI_RES( CTL_COLORTABLE ) ), 97 98 aCtlPreviewOld ( this, CUI_RES( CTL_PREVIEW_OLD ) ), 99 aCtlPreviewNew ( this, CUI_RES( CTL_PREVIEW_NEW ) ), 100 101 aLbColorModel ( this, CUI_RES( LB_COLORMODEL ) ), 102 aFtColorModel1 ( this, CUI_RES( FT_1 ) ), 103 aMtrFldColorModel1 ( this, CUI_RES( MTR_FLD_1 ) ), 104 aFtColorModel2 ( this, CUI_RES( FT_2 ) ), 105 aMtrFldColorModel2 ( this, CUI_RES( MTR_FLD_2 ) ), 106 aFtColorModel3 ( this, CUI_RES( FT_3 ) ), 107 aMtrFldColorModel3 ( this, CUI_RES( MTR_FLD_3 ) ), 108 aFtColorModel4 ( this, CUI_RES( FT_4 ) ), 109 aMtrFldColorModel4 ( this, CUI_RES( MTR_FLD_4 ) ), 110 aBtnAdd ( this, CUI_RES( BTN_ADD ) ), 111 aBtnModify ( this, CUI_RES( BTN_MODIFY ) ), 112 aBtnWorkOn ( this, CUI_RES( BTN_WORK_ON ) ), 113 aBtnDelete ( this, CUI_RES( BTN_DELETE ) ), 114 aBtnLoad ( this, CUI_RES( BTN_LOAD ) ), 115 aBtnSave ( this, CUI_RES( BTN_SAVE ) ), 116 117 rOutAttrs ( rInAttrs ), 118 pColorTab( NULL ), 119 120 bDeleteColorTable ( sal_True ), 121 122 pXPool ( (XOutdevItemPool*) rInAttrs.GetPool() ), 123 aXFStyleItem ( XFILL_SOLID ), 124 aXFillColorItem ( String(), Color( COL_BLACK ) ), 125 aXFillAttr ( pXPool ), 126 rXFSet ( aXFillAttr.GetItemSet() ), 127 128 eCM ( CM_RGB ) 129 130 { 131 aBtnLoad.SetModeImage( Image( CUI_RES( RID_SVXIMG_LOAD_H ) ), BMP_COLOR_HIGHCONTRAST ); 132 aBtnSave.SetModeImage( Image( CUI_RES( RID_SVXIMG_SAVE_H ) ), BMP_COLOR_HIGHCONTRAST ); 133 134 FreeResource(); 135 136 // diese Page braucht ExchangeSupport 137 SetExchangeSupport(); 138 139 // Setzen des Output-Devices 140 rXFSet.Put( aXFStyleItem ); 141 rXFSet.Put( aXFillColorItem ); 142 aCtlPreviewOld.SetAttributes( aXFillAttr.GetItemSet() ); 143 aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); 144 145 // Handler ueberladen 146 aLbColor.SetSelectHdl( 147 LINK( this, SvxColorTabPage, SelectColorLBHdl_Impl ) ); 148 aValSetColorTable.SetSelectHdl( 149 LINK( this, SvxColorTabPage, SelectValSetHdl_Impl ) ); 150 aLbColorModel.SetSelectHdl( 151 LINK( this, SvxColorTabPage, SelectColorModelHdl_Impl ) ); 152 153 Link aLink = LINK( this, SvxColorTabPage, ModifiedHdl_Impl ); 154 aMtrFldColorModel1.SetModifyHdl( aLink ); 155 aMtrFldColorModel2.SetModifyHdl( aLink ); 156 aMtrFldColorModel3.SetModifyHdl( aLink ); 157 aMtrFldColorModel4.SetModifyHdl( aLink ); 158 159 aBtnAdd.SetClickHdl( LINK( this, SvxColorTabPage, ClickAddHdl_Impl ) ); 160 aBtnModify.SetClickHdl( 161 LINK( this, SvxColorTabPage, ClickModifyHdl_Impl ) ); 162 aBtnWorkOn.SetClickHdl( 163 LINK( this, SvxColorTabPage, ClickWorkOnHdl_Impl ) ); 164 aBtnDelete.SetClickHdl( 165 LINK( this, SvxColorTabPage, ClickDeleteHdl_Impl ) ); 166 aBtnLoad.SetClickHdl( LINK( this, SvxColorTabPage, ClickLoadHdl_Impl ) ); 167 aBtnSave.SetClickHdl( LINK( this, SvxColorTabPage, ClickSaveHdl_Impl ) ); 168 169 // ValueSet 170 aValSetColorTable.SetStyle( aValSetColorTable.GetStyle() | WB_VSCROLL | WB_ITEMBORDER ); 171 aValSetColorTable.SetColCount( 8 ); 172 aValSetColorTable.SetLineCount( 10 ); 173 aValSetColorTable.SetExtraSpacing( 0 ); 174 aValSetColorTable.Show(); 175 176 aLbColorModel.SetAccessibleName( String( CUI_RES(STR_CUI_COLORMODEL) ) ); 177 aBtnAdd.SetAccessibleRelationMemberOf( &aFlProp ); 178 aBtnModify.SetAccessibleRelationMemberOf( &aFlProp ); 179 aBtnWorkOn.SetAccessibleRelationMemberOf( &aFlProp ); 180 aBtnDelete.SetAccessibleRelationMemberOf( &aFlProp ); 181 } 182 183 // ----------------------------------------------------------------------- 184 185 void SvxColorTabPage::Construct() 186 { 187 aLbColor.Fill( pColorTab ); 188 FillValueSet_Impl( aValSetColorTable ); 189 } 190 191 // ----------------------------------------------------------------------- 192 193 void SvxColorTabPage::ActivatePage( const SfxItemSet& ) 194 { 195 if( *pDlgType == 0 ) // Flaechen-Dialog 196 { 197 *pbAreaTP = sal_False; 198 199 if( pColorTab ) 200 { 201 if( *pPageType == PT_COLOR && *pPos != LISTBOX_ENTRY_NOTFOUND ) 202 { 203 aLbColor.SelectEntryPos( *pPos ); 204 aValSetColorTable.SelectItem( aLbColor.GetSelectEntryPos() + 1 ); 205 aEdtName.SetText( aLbColor.GetSelectEntry() ); 206 207 ChangeColorHdl_Impl( this ); 208 } 209 else if( *pPageType == PT_COLOR && *pPos == LISTBOX_ENTRY_NOTFOUND ) 210 { 211 const SfxPoolItem* pPoolItem = NULL; 212 if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), sal_True, &pPoolItem ) ) 213 { 214 aLbColorModel.SelectEntryPos( CM_RGB ); 215 216 aAktuellColor.SetColor ( ( ( const XFillColorItem* ) pPoolItem )->GetColorValue().GetColor() ); 217 218 aEdtName.SetText( ( ( const XFillColorItem* ) pPoolItem )->GetName() ); 219 220 aMtrFldColorModel1.SetValue( ColorToPercent_Impl( aAktuellColor.GetRed() ) ); 221 aMtrFldColorModel2.SetValue( ColorToPercent_Impl( aAktuellColor.GetGreen() ) ); 222 aMtrFldColorModel3.SetValue( ColorToPercent_Impl( aAktuellColor.GetBlue() ) ); 223 224 // ItemSet fuellen und an XOut weiterleiten 225 rXFSet.Put( XFillColorItem( String(), aAktuellColor ) ); 226 aCtlPreviewOld.SetAttributes( aXFillAttr.GetItemSet() ); 227 aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); 228 229 aCtlPreviewNew.Invalidate(); 230 aCtlPreviewOld.Invalidate(); 231 } 232 } 233 234 // Ermitteln (evtl. abschneiden) des Namens und in 235 // der GroupBox darstellen 236 String aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); 237 INetURLObject aURL( pColorTab->GetPath() ); 238 239 aURL.Append( pColorTab->GetName() ); 240 DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); 241 242 if ( aURL.getBase().getLength() > 18 ) 243 { 244 aString += String(aURL.getBase()).Copy( 0, 15 ); 245 aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); 246 } 247 else 248 aString += String(aURL.getBase()); 249 250 aTableNameFT.SetText( aString ); 251 252 // Damit evtl. geaenderte Farbe verworfen wird 253 SelectColorLBHdl_Impl( this ); 254 255 *pPageType = PT_COLOR; 256 *pPos = LISTBOX_ENTRY_NOTFOUND; 257 } 258 } 259 else 260 { 261 // Buttons werden gehided, weil Paletten z.Z. nur 262 // ueber den AreaDlg funktionieren!!! 263 // ActivatePage() muss von anderen Dialogen explizit 264 // gerufen werden, da ActivatePage() nicht gerufen wird, 265 // wenn Seite als Erste im Dialog angezeigt wird 266 aBtnLoad.Hide(); 267 aBtnSave.Hide(); 268 } 269 } 270 271 // ----------------------------------------------------------------------- 272 273 int SvxColorTabPage::DeactivatePage( SfxItemSet* _pSet ) 274 { 275 if ( CheckChanges_Impl() == -1L ) 276 return( KEEP_PAGE ); 277 278 if( _pSet ) 279 FillItemSet( *_pSet ); 280 281 return( LEAVE_PAGE ); 282 } 283 284 // ----------------------------------------------------------------------- 285 286 long SvxColorTabPage::CheckChanges_Impl() 287 { 288 // wird hier benutzt, um Aenderungen NICHT zu verlieren 289 290 Color aTmpColor (aAktuellColor); 291 if (eCM != CM_RGB) 292 ConvertColorValues (aTmpColor, CM_RGB); 293 294 sal_uInt16 nPos = aLbColor.GetSelectEntryPos(); 295 if( nPos != LISTBOX_ENTRY_NOTFOUND ) 296 { 297 Color aColor = pColorTab->GetColor( nPos )->GetColor(); 298 String aString = aLbColor.GetSelectEntry(); 299 300 // aNewColor, da COL_USER != COL_irgendwas, auch wenn RGB-Werte gleich 301 // Color aNewColor( aColor.GetRed(), aColor.GetGreen(), aColor.GetBlue() ); 302 303 if( ColorToPercent_Impl( aTmpColor.GetRed() ) != ColorToPercent_Impl( aColor.GetRed() ) || 304 ColorToPercent_Impl( aTmpColor.GetGreen() ) != ColorToPercent_Impl( aColor.GetGreen() ) || 305 ColorToPercent_Impl( aTmpColor.GetBlue() ) != ColorToPercent_Impl( aColor.GetBlue() ) || 306 aString != aEdtName.GetText() ) 307 { 308 ResMgr& rMgr = CUI_MGR(); 309 Image aWarningBoxImage = WarningBox::GetStandardImage(); 310 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 311 DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001 312 AbstractSvxMessDialog* aMessDlg = pFact->CreateSvxMessDialog( DLGWIN, RID_SVXDLG_MESSBOX, 313 SVX_RESSTR( RID_SVXSTR_COLOR ), 314 String( ResId( RID_SVXSTR_ASK_CHANGE_COLOR, rMgr ) ), 315 &aWarningBoxImage ); 316 DBG_ASSERT(aMessDlg, "Dialogdiet fail!");//CHINA001 317 aMessDlg->SetButtonText( MESS_BTN_1, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_1, 318 String( ResId( RID_SVXSTR_CHANGE, rMgr ) ) ); 319 aMessDlg->SetButtonText( MESS_BTN_2, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_2, 320 String( ResId( RID_SVXSTR_ADD, rMgr ) ) ); 321 322 short nRet = aMessDlg->Execute(); //CHINA001 short nRet = aMessDlg.Execute(); 323 324 switch( nRet ) 325 { 326 case RET_BTN_1: // Aendern 327 { 328 ClickModifyHdl_Impl( this ); 329 aColor = pColorTab->GetColor( nPos )->GetColor(); 330 } 331 break; 332 333 case RET_BTN_2: // Hinzufuegen 334 { 335 ClickAddHdl_Impl( this ); 336 nPos = aLbColor.GetSelectEntryPos(); 337 aColor = pColorTab->GetColor( nPos )->GetColor(); 338 } 339 break; 340 341 case RET_CANCEL: 342 // return( -1L ); <-- wuerde die Seite nicht verlassen 343 break; 344 // return( sal_True ); // Abbruch 345 } 346 delete aMessDlg; //add by CHINA001 347 } 348 } 349 if( *pDlgType == 0 ) // Flaechen-Dialog 350 { 351 nPos = aLbColor.GetSelectEntryPos(); 352 if( nPos != LISTBOX_ENTRY_NOTFOUND ) 353 { 354 *pPos = nPos; 355 } 356 } 357 return( 0L ); 358 } 359 360 // ----------------------------------------------------------------------- 361 362 sal_Bool SvxColorTabPage::FillItemSet( SfxItemSet& rSet ) 363 { 364 if( ( *pDlgType != 0 ) || 365 ( *pPageType == PT_COLOR && *pbAreaTP == sal_False ) ) 366 { 367 String aString; 368 Color aColor; 369 370 // CheckChanges_Impl(); <-- doppelte Abfrage ? 371 372 sal_uInt16 nPos = aLbColor.GetSelectEntryPos(); 373 if( nPos != LISTBOX_ENTRY_NOTFOUND ) 374 { 375 aColor = pColorTab->GetColor( nPos )->GetColor(); 376 aString = aLbColor.GetSelectEntry(); 377 } 378 else 379 { 380 aColor.SetColor (aAktuellColor.GetColor()); 381 if (eCM != CM_RGB) 382 ConvertColorValues (aColor, CM_RGB); 383 } 384 rSet.Put( XFillColorItem( aString, aColor ) ); 385 rSet.Put( XFillStyleItem( XFILL_SOLID ) ); 386 } 387 388 return( sal_True ); 389 } 390 391 // ----------------------------------------------------------------------- 392 393 void SvxColorTabPage::Reset( const SfxItemSet& rSet ) 394 { 395 sal_uInt16 nState = rSet.GetItemState( XATTR_FILLCOLOR ); 396 397 if ( nState >= SFX_ITEM_DEFAULT ) 398 { 399 XFillColorItem aColorItem( (const XFillColorItem&)rSet.Get( XATTR_FILLCOLOR ) ); 400 aLbColor.SelectEntry( aColorItem.GetColorValue() ); 401 aValSetColorTable.SelectItem( aLbColor.GetSelectEntryPos() + 1 ); 402 aEdtName.SetText( aLbColor.GetSelectEntry() ); 403 } 404 405 // Farbmodell setzen 406 String aStr = GetUserData(); 407 aLbColorModel.SelectEntryPos( (sal_uInt16) aStr.ToInt32() ); 408 409 ChangeColorHdl_Impl( this ); 410 SelectColorModelHdl_Impl( this ); 411 412 aCtlPreviewOld.Invalidate(); 413 414 // Status der Buttons ermitteln 415 if( pColorTab->Count() ) 416 { 417 aBtnModify.Enable(); 418 aBtnWorkOn.Enable(); 419 aBtnDelete.Enable(); 420 aBtnSave.Enable(); 421 } 422 else 423 { 424 aBtnModify.Disable(); 425 aBtnWorkOn.Disable(); 426 aBtnDelete.Disable(); 427 aBtnSave.Disable(); 428 } 429 } 430 431 // ----------------------------------------------------------------------- 432 433 SfxTabPage* SvxColorTabPage::Create( Window* pWindow, 434 const SfxItemSet& rOutAttrs ) 435 { 436 return( new SvxColorTabPage( pWindow, rOutAttrs ) ); 437 } 438 439 //------------------------------------------------------------------------ 440 441 // 442 // Wird aufgerufen, wenn Inhalt der MtrFileds f�r Farbwerte ver�ndert wird 443 // 444 IMPL_LINK( SvxColorTabPage, ModifiedHdl_Impl, void *, EMPTYARG ) 445 { 446 // lese aktuelle MtrFields aus, wenn cmyk, dann k-Wert als Trans.-Farbe 447 aAktuellColor.SetColor ( Color( (sal_uInt8)PercentToColor_Impl( (sal_uInt16) aMtrFldColorModel4.GetValue() ), 448 (sal_uInt8)PercentToColor_Impl( (sal_uInt16) aMtrFldColorModel1.GetValue() ), 449 (sal_uInt8)PercentToColor_Impl( (sal_uInt16) aMtrFldColorModel2.GetValue() ), 450 (sal_uInt8)PercentToColor_Impl( (sal_uInt16) aMtrFldColorModel3.GetValue() ) ).GetColor() ); 451 452 Color aTmpColor(aAktuellColor); 453 if (eCM != CM_RGB) 454 ConvertColorValues (aTmpColor, CM_RGB); 455 456 rXFSet.Put( XFillColorItem( String(), aTmpColor ) ); 457 aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); 458 459 aCtlPreviewNew.Invalidate(); 460 461 return( 0L ); 462 } 463 464 //------------------------------------------------------------------------ 465 466 // 467 // Button 'Hinzuf�gen' 468 // 469 IMPL_LINK( SvxColorTabPage, ClickAddHdl_Impl, void *, EMPTYARG ) 470 { 471 Window *pWindow = this; 472 bool bEnabled; 473 while( pWindow ) 474 { 475 bEnabled = pWindow->IsEnabled(); 476 pWindow = pWindow->GetParent(); 477 } 478 479 ResMgr& rMgr = CUI_MGR(); 480 String aDesc( ResId( RID_SVXSTR_DESC_COLOR, rMgr ) ); 481 String aName( aEdtName.GetText() ); 482 XColorEntry* pEntry; 483 long nCount = pColorTab->Count(); 484 sal_Bool bDifferent = sal_True; 485 486 // Pruefen, ob Name schon vorhanden ist 487 for ( long i = 0; i < nCount && bDifferent; i++ ) 488 if ( aName == pColorTab->GetColor( i )->GetName() ) 489 bDifferent = sal_False; 490 491 // Wenn ja, wird wiederholt ein neuer Name angefordert 492 if ( !bDifferent ) 493 { 494 WarningBox aWarningBox( DLGWIN, WinBits( WB_OK ), 495 String( ResId( RID_SVXSTR_WARN_NAME_DUPLICATE, rMgr ) ) ); 496 aWarningBox.SetHelpId( HID_WARN_NAME_DUPLICATE ); 497 aWarningBox.Execute(); 498 499 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 500 DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001 501 AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc ); 502 DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 503 sal_Bool bLoop = sal_True; 504 505 while ( !bDifferent && bLoop && pDlg->Execute() == RET_OK ) 506 { 507 pDlg->GetName( aName ); 508 bDifferent = sal_True; 509 510 for( long i = 0; i < nCount && bDifferent; i++ ) 511 { 512 if( aName == pColorTab->GetColor( i )->GetName() ) 513 bDifferent = sal_False; 514 } 515 516 if( bDifferent ) 517 bLoop = sal_False; 518 else 519 aWarningBox.Execute(); 520 } 521 delete( pDlg ); 522 } 523 524 // Wenn nicht vorhanden, wird Eintrag aufgenommen 525 if( bDifferent ) 526 { 527 if (eCM != CM_RGB) 528 ConvertColorValues (aAktuellColor, CM_RGB); 529 pEntry = new XColorEntry( aAktuellColor, aName ); 530 531 pColorTab->Insert( pColorTab->Count(), pEntry ); 532 533 aLbColor.Append( pEntry ); 534 aValSetColorTable.InsertItem( aValSetColorTable.GetItemCount() + 1, 535 pEntry->GetColor(), pEntry->GetName() ); 536 537 aLbColor.SelectEntryPos( aLbColor.GetEntryCount() - 1 ); 538 539 // Flag fuer modifiziert setzen 540 *pnColorTableState |= CT_MODIFIED; 541 542 SelectColorLBHdl_Impl( this ); 543 } 544 // Status der Buttons ermitteln 545 if( pColorTab->Count() ) 546 { 547 aBtnModify.Enable(); 548 aBtnWorkOn.Enable(); 549 aBtnDelete.Enable(); 550 aBtnSave.Enable(); 551 } 552 return( 0L ); 553 } 554 555 //------------------------------------------------------------------------ 556 557 // 558 // Button '�ndern' 559 // 560 IMPL_LINK( SvxColorTabPage, ClickModifyHdl_Impl, void *, EMPTYARG ) 561 { 562 sal_uInt16 nPos = aLbColor.GetSelectEntryPos(); 563 564 if( nPos != LISTBOX_ENTRY_NOTFOUND ) 565 { 566 ResMgr& rMgr = CUI_MGR(); 567 String aDesc( ResId( RID_SVXSTR_DESC_COLOR, rMgr ) ); 568 String aName( aEdtName.GetText() ); 569 long nCount = pColorTab->Count(); 570 sal_Bool bDifferent = sal_True; 571 572 // Pruefen, ob Name schon vorhanden ist 573 for ( long i = 0; i < nCount && bDifferent; i++ ) 574 if ( aName == pColorTab->GetColor( i )->GetName() && nPos != i ) 575 bDifferent = sal_False; 576 577 // Wenn ja, wird wiederholt ein neuer Name angefordert 578 if ( !bDifferent ) 579 { 580 WarningBox aWarningBox( DLGWIN, WinBits( WB_OK ), 581 String( ResId( RID_SVXSTR_WARN_NAME_DUPLICATE, rMgr ) ) ); 582 aWarningBox.SetHelpId( HID_WARN_NAME_DUPLICATE ); 583 aWarningBox.Execute(); 584 585 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 586 DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001 587 AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc ); 588 DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 589 sal_Bool bLoop = sal_True; 590 591 while ( !bDifferent && bLoop && pDlg->Execute() == RET_OK ) 592 { 593 pDlg->GetName( aName ); 594 bDifferent = sal_True; 595 596 for ( long i = 0; i < nCount && bDifferent; i++ ) 597 if( aName == pColorTab->GetColor( i )->GetName() && nPos != i ) 598 bDifferent = sal_False; 599 600 if( bDifferent ) 601 bLoop = sal_False; 602 else 603 aWarningBox.Execute(); 604 } 605 delete( pDlg ); 606 } 607 608 // Wenn nicht vorhanden, wird Eintrag aufgenommen 609 if( bDifferent ) 610 { 611 XColorEntry* pEntry = pColorTab->GetColor( nPos ); 612 613 Color aTmpColor (aAktuellColor); 614 if (eCM != CM_RGB) 615 ConvertColorValues (aTmpColor, CM_RGB); 616 617 pEntry->SetColor( aTmpColor ); 618 pEntry->SetName( aName ); 619 620 aLbColor.Modify( pEntry, nPos ); 621 aLbColor.SelectEntryPos( nPos ); 622 ///// 623 aValSetColorTable.SetItemColor( nPos + 1, pEntry->GetColor() ); 624 aValSetColorTable.SetItemText( nPos + 1, pEntry->GetName() ); 625 aEdtName.SetText( aName ); 626 627 aCtlPreviewOld.Invalidate(); 628 629 // Flag fuer modifiziert setzen 630 *pnColorTableState |= CT_MODIFIED; 631 } 632 } 633 return( 0L ); 634 } 635 636 //------------------------------------------------------------------------ 637 638 // 639 // Button 'Bearbeiten' 640 // 641 IMPL_LINK( SvxColorTabPage, ClickWorkOnHdl_Impl, void *, EMPTYARG ) 642 { 643 SvColorDialog* pColorDlg = new SvColorDialog( DLGWIN ); 644 645 Color aTmpColor (aAktuellColor); 646 if (eCM != CM_RGB) 647 ConvertColorValues (aTmpColor, CM_RGB); 648 649 pColorDlg->SetColor (aTmpColor); 650 651 if( pColorDlg->Execute() == RET_OK ) 652 { 653 sal_uInt16 nK = 0; 654 Color aPreviewColor = pColorDlg->GetColor(); 655 aAktuellColor = aPreviewColor; 656 if (eCM != CM_RGB) 657 ConvertColorValues (aAktuellColor, eCM); 658 659 aMtrFldColorModel1.SetValue( ColorToPercent_Impl( aAktuellColor.GetRed() ) ); 660 aMtrFldColorModel2.SetValue( ColorToPercent_Impl( aAktuellColor.GetGreen() ) ); 661 aMtrFldColorModel3.SetValue( ColorToPercent_Impl( aAktuellColor.GetBlue() ) ); 662 aMtrFldColorModel4.SetValue( ColorToPercent_Impl( nK ) ); 663 664 // ItemSet fuellen und an XOut weiterleiten 665 rXFSet.Put( XFillColorItem( String(), aPreviewColor ) ); 666 //aCtlPreviewOld.SetAttributes( aXFillAttr ); 667 aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); 668 669 aCtlPreviewNew.Invalidate(); 670 } 671 delete( pColorDlg ); 672 673 return( 0L ); 674 } 675 676 //------------------------------------------------------------------------ 677 678 // 679 // Button 'Loeschen' 680 // 681 IMPL_LINK( SvxColorTabPage, ClickDeleteHdl_Impl, void *, EMPTYARG ) 682 { 683 sal_uInt16 nPos = aLbColor.GetSelectEntryPos(); 684 685 if( nPos != LISTBOX_ENTRY_NOTFOUND ) 686 { 687 QueryBox aQueryBox( DLGWIN, WinBits( WB_YES_NO | WB_DEF_NO ), 688 String( CUI_RES( RID_SVXSTR_ASK_DEL_COLOR ) ) ); 689 690 if( aQueryBox.Execute() == RET_YES ) 691 { 692 // Jetzt wird richtig geloescht 693 sal_uLong nCount = pColorTab->Count() - 1; 694 XColorEntry* pEntry; 695 696 pEntry = pColorTab->Remove( nPos ); 697 DBG_ASSERT( pEntry, "ColorEntry nicht vorhanden (1) !" ); 698 delete pEntry; 699 700 for( sal_uLong i = nPos; i < nCount; i++ ) 701 { 702 pEntry = pColorTab->Remove( i + 1 ); 703 DBG_ASSERT( pEntry, "ColorEntry nicht vorhanden (2) !" ); 704 pColorTab->Insert( i, pEntry ); 705 } 706 707 // Listbox und ValueSet aktualisieren 708 aLbColor.RemoveEntry( nPos ); 709 aValSetColorTable.Clear(); 710 FillValueSet_Impl( aValSetColorTable ); 711 712 // Positionieren 713 aLbColor.SelectEntryPos( nPos ); 714 SelectColorLBHdl_Impl( this ); 715 716 aCtlPreviewOld.Invalidate(); 717 718 // Flag fuer modifiziert setzen 719 *pnColorTableState |= CT_MODIFIED; 720 } 721 } 722 // Status der Buttons ermitteln 723 if( !pColorTab->Count() ) 724 { 725 aBtnModify.Disable(); 726 aBtnWorkOn.Disable(); 727 aBtnDelete.Disable(); 728 aBtnSave.Disable(); 729 } 730 return( 0L ); 731 } 732 733 // ----------------------------------------------------------------------- 734 735 // 736 // Button 'Farbtabelle laden' 737 // 738 IMPL_LINK( SvxColorTabPage, ClickLoadHdl_Impl, void *, EMPTYARG ) 739 { 740 ResMgr& rMgr = CUI_MGR(); 741 sal_uInt16 nReturn = RET_YES; 742 743 if( *pnColorTableState & CT_MODIFIED ) 744 { 745 nReturn = WarningBox( DLGWIN, WinBits( WB_YES_NO_CANCEL ), 746 String( ResId( RID_SVXSTR_WARN_TABLE_OVERWRITE, rMgr ) ) ).Execute(); 747 748 if ( nReturn == RET_YES ) 749 pColorTab->Save(); 750 } 751 752 if ( nReturn != RET_CANCEL ) 753 { 754 ::sfx2::FileDialogHelper aDlg( 755 com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 756 0 ); 757 String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.soc" ) ); 758 aDlg.AddFilter( aStrFilterType, aStrFilterType ); 759 INetURLObject aFile( SvtPathOptions().GetPalettePath() ); 760 aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) ); 761 762 if ( aDlg.Execute() == ERRCODE_NONE ) 763 { 764 INetURLObject aURL( aDlg.GetPath() ); 765 INetURLObject aPathURL( aURL ); 766 767 aPathURL.removeSegment(); 768 aPathURL.removeFinalSlash(); 769 770 // Tabelle speichern 771 XColorTable* pColTab = new XColorTable( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), pXPool ); 772 pColTab->SetName( aURL.getName() ); // XXX 773 if( pColTab->Load() ) 774 { 775 if( pColTab ) 776 { 777 // Pruefen, ob Tabelle geloescht werden darf: 778 const XColorTable *pTempTable = 0; 779 SvxAreaTabDialog* pArea = dynamic_cast< SvxAreaTabDialog* >( DLGWIN ); 780 SvxLineTabDialog* pLine = dynamic_cast< SvxLineTabDialog* >( DLGWIN ); 781 if( pArea ) 782 { 783 pTempTable = pArea->GetColorTable(); 784 } 785 else if( pLine ) 786 { 787 pTempTable = pLine->GetColorTable(); 788 } 789 790 if( pColorTab != pTempTable ) 791 { 792 if( bDeleteColorTable ) 793 delete pColorTab; 794 else 795 bDeleteColorTable = sal_True; 796 } 797 798 pColorTab = pColTab; 799 if( pArea ) 800 { 801 pArea->SetNewColorTable( pColorTab ); 802 } 803 else if( pLine ) 804 { 805 pLine->SetNewColorTable( pColorTab ); 806 } 807 808 aLbColor.Clear(); 809 aValSetColorTable.Clear(); 810 Construct(); 811 Reset( rOutAttrs ); 812 813 pColorTab->SetName( aURL.getName() ); 814 815 // Ermitteln (evtl. abschneiden) des Namens und in 816 // der GroupBox darstellen 817 String aString( ResId( RID_SVXSTR_TABLE, rMgr ) ); 818 aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); 819 820 if ( aURL.getBase().getLength() > 18 ) 821 { 822 aString += String(aURL.getBase()).Copy( 0, 15 ); 823 aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); 824 } 825 else 826 aString += String(aURL.getBase()); 827 828 aTableNameFT.SetText( aString ); 829 830 // Flag fuer gewechselt setzen 831 *pnColorTableState |= CT_CHANGED; 832 // Flag fuer modifiziert entfernen 833 *pnColorTableState &= ~CT_MODIFIED; 834 835 if( aLbColor.GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND ) 836 aLbColor.SelectEntryPos( 0 ); 837 else 838 aLbColor.SelectEntryPos( aLbColor.GetSelectEntryPos() ); 839 840 ChangeColorHdl_Impl( this ); 841 SelectColorLBHdl_Impl( this ); 842 } 843 } 844 else 845 { 846 //aIStream.Close(); 847 ErrorBox aErrorBox( DLGWIN, WinBits( WB_OK ), 848 String( ResId( RID_SVXSTR_READ_DATA_ERROR, rMgr ) ) ); 849 aErrorBox.Execute(); 850 } 851 } 852 } 853 854 // Status der Buttons ermitteln 855 if ( pColorTab->Count() ) 856 { 857 aBtnModify.Enable(); 858 aBtnWorkOn.Enable(); 859 aBtnDelete.Enable(); 860 aBtnSave.Enable(); 861 } 862 else 863 { 864 aBtnModify.Disable(); 865 aBtnWorkOn.Disable(); 866 aBtnDelete.Disable(); 867 aBtnSave.Disable(); 868 } 869 return( 0L ); 870 } 871 872 // ----------------------------------------------------------------------- 873 874 // 875 // Button 'Farbtabelle speichern' 876 // 877 IMPL_LINK( SvxColorTabPage, ClickSaveHdl_Impl, void *, EMPTYARG ) 878 { 879 ::sfx2::FileDialogHelper aDlg( 880 com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 ); 881 String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.soc" ) ); 882 aDlg.AddFilter( aStrFilterType, aStrFilterType ); 883 884 INetURLObject aFile( SvtPathOptions().GetPalettePath() ); 885 DBG_ASSERT( aFile.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); 886 887 if( pColorTab->GetName().Len() ) 888 { 889 aFile.Append( pColorTab->GetName() ); 890 891 if( !aFile.getExtension().getLength() ) 892 aFile.SetExtension( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "soc" ) ) ); 893 } 894 895 aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) ); 896 if ( aDlg.Execute() == ERRCODE_NONE ) 897 { 898 INetURLObject aURL( aDlg.GetPath() ); 899 INetURLObject aPathURL( aURL ); 900 901 aPathURL.removeSegment(); 902 aPathURL.removeFinalSlash(); 903 904 pColorTab->SetName( aURL.getName() ); 905 pColorTab->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) ); 906 907 if( pColorTab->Save() ) 908 { 909 // Ermitteln (evtl. abschneiden) des Namens und in 910 // der GroupBox darstellen 911 String aString( CUI_RES( RID_SVXSTR_TABLE ) ); 912 aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); 913 914 if ( aURL.getBase().getLength() > 18 ) 915 { 916 aString += String(aURL.getBase()).Copy( 0, 15 ); 917 aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); 918 } 919 else 920 aString += String(aURL.getBase()); 921 aTableNameFT.SetText( aString ); 922 923 // Flag fuer gespeichert setzen 924 *pnColorTableState |= CT_SAVED; 925 // Flag fuer modifiziert entfernen 926 *pnColorTableState &= ~CT_MODIFIED; 927 } 928 else 929 { 930 ErrorBox aErrorBox( DLGWIN, WinBits( WB_OK ), 931 String( CUI_RES( RID_SVXSTR_WRITE_DATA_ERROR ) ) ); 932 aErrorBox.Execute(); 933 } 934 } 935 return( 0L ); 936 } 937 938 //------------------------------------------------------------------------ 939 940 IMPL_LINK( SvxColorTabPage, SelectColorLBHdl_Impl, void *, EMPTYARG ) 941 { 942 sal_uInt16 nPos = aLbColor.GetSelectEntryPos(); 943 if( nPos != LISTBOX_ENTRY_NOTFOUND ) 944 { 945 aValSetColorTable.SelectItem( nPos + 1 ); 946 aEdtName.SetText( aLbColor.GetSelectEntry() ); 947 948 rXFSet.Put( XFillColorItem( String(), 949 aLbColor.GetSelectEntryColor() ) ); 950 aCtlPreviewOld.SetAttributes( aXFillAttr.GetItemSet() ); 951 aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); 952 953 aCtlPreviewOld.Invalidate(); 954 aCtlPreviewNew.Invalidate(); 955 956 ChangeColorHdl_Impl( this ); 957 } 958 return( 0L ); 959 } 960 961 //------------------------------------------------------------------------ 962 963 IMPL_LINK( SvxColorTabPage, SelectValSetHdl_Impl, void *, EMPTYARG ) 964 { 965 sal_uInt16 nPos = aValSetColorTable.GetSelectItemId(); 966 if( nPos != LISTBOX_ENTRY_NOTFOUND ) 967 { 968 aLbColor.SelectEntryPos( nPos - 1 ); 969 aEdtName.SetText( aLbColor.GetSelectEntry() ); 970 971 rXFSet.Put( XFillColorItem( String(), 972 aLbColor.GetSelectEntryColor() ) ); 973 aCtlPreviewOld.SetAttributes( aXFillAttr.GetItemSet() ); 974 aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); 975 976 aCtlPreviewOld.Invalidate(); 977 aCtlPreviewNew.Invalidate(); 978 979 ChangeColorHdl_Impl( this ); 980 } 981 return( 0L ); 982 } 983 984 //------------------------------------------------------------------------ 985 986 // 987 // Farbwerte je nach �bergebenes Farbmodell umrechnen 988 // 989 void SvxColorTabPage::ConvertColorValues (Color& rColor, ColorModel eModell) 990 { 991 switch (eModell) 992 { 993 case CM_RGB: 994 { 995 CmykToRgb_Impl (rColor, (sal_uInt16)rColor.GetTransparency() ); 996 rColor.SetTransparency ((sal_uInt8) 0); 997 } 998 break; 999 1000 case CM_CMYK: 1001 { 1002 sal_uInt16 nK; 1003 RgbToCmyk_Impl (rColor, nK ); 1004 rColor.SetTransparency ((sal_uInt8) nK); 1005 } 1006 break; 1007 } 1008 } 1009 1010 // 1011 // Auswahl Listbox 'Farbmodell' (RGB/CMY) 1012 // 1013 IMPL_LINK( SvxColorTabPage, SelectColorModelHdl_Impl, void *, EMPTYARG ) 1014 { 1015 int nPos = aLbColorModel.GetSelectEntryPos(); 1016 if( nPos != LISTBOX_ENTRY_NOTFOUND ) 1017 { 1018 if (eCM != (ColorModel) nPos) 1019 { 1020 // wenn Farbmodell geaendert wurde, dann Werte umrechnen 1021 ConvertColorValues (aAktuellColor, (ColorModel) nPos); 1022 } 1023 1024 eCM = (ColorModel) nPos; 1025 1026 switch( eCM ) 1027 { 1028 case CM_RGB: 1029 { 1030 String aStr( aLbColorModel.GetSelectEntry() ); 1031 String aColorStr( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "~X" ) ) ); 1032 xub_StrLen nIdx = 1; 1033 aColorStr.SetChar( nIdx, aStr.GetChar( 0 ) ); 1034 aFtColorModel1.SetText( aColorStr ); 1035 aColorStr.SetChar( nIdx, aStr.GetChar( 1 ) ); 1036 aFtColorModel2.SetText( aColorStr ); 1037 aColorStr.SetChar( nIdx, aStr.GetChar( 2 ) ); 1038 aFtColorModel3.SetText( aColorStr ); 1039 1040 aFtColorModel4.Hide(); 1041 aMtrFldColorModel4.Hide(); 1042 aMtrFldColorModel4.SetValue( 0L ); 1043 1044 aMtrFldColorModel1.SetHelpId( HID_TPCOLOR_RGB_1 ); 1045 aMtrFldColorModel2.SetHelpId( HID_TPCOLOR_RGB_2 ); 1046 aMtrFldColorModel3.SetHelpId( HID_TPCOLOR_RGB_3 ); 1047 1048 // Da der alte HelpText noch am Control steht wuerde 1049 // ein Umsetzen der HelpID alleine nichts bewirken 1050 aMtrFldColorModel1.SetHelpText( String() ); 1051 aMtrFldColorModel2.SetHelpText( String() ); 1052 aMtrFldColorModel3.SetHelpText( String() ); 1053 1054 // RGB-Werte im Bereich 0..255 verarbeiten (nicht in %), 1055 // dazu MetricField's entsprechend einstellen 1056 aMtrFldColorModel1.SetUnit(FUNIT_NONE); 1057 aMtrFldColorModel1.SetMin(0); 1058 aMtrFldColorModel1.SetMax(255); 1059 aMtrFldColorModel1.SetLast(255); 1060 1061 aMtrFldColorModel2.SetUnit(FUNIT_NONE); 1062 aMtrFldColorModel2.SetMin(0); 1063 aMtrFldColorModel2.SetMax(255); 1064 aMtrFldColorModel2.SetLast(255); 1065 1066 aMtrFldColorModel3.SetUnit(FUNIT_NONE); 1067 aMtrFldColorModel3.SetMin(0); 1068 aMtrFldColorModel3.SetMax(255); 1069 aMtrFldColorModel3.SetLast(255); 1070 } 1071 break; 1072 1073 case CM_CMYK: 1074 { 1075 String aStr( aLbColorModel.GetSelectEntry() ); 1076 String aColorStr( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "~X" ) ) ); 1077 xub_StrLen nIdx = 1; 1078 aColorStr.SetChar( nIdx, aStr.GetChar( 0 ) ); 1079 aFtColorModel1.SetText( aColorStr ); 1080 aColorStr.SetChar( nIdx, aStr.GetChar( 1 ) ); 1081 aFtColorModel2.SetText( aColorStr ); 1082 aColorStr.SetChar( nIdx,aStr.GetChar( 2 ) ); 1083 aFtColorModel3.SetText( aColorStr ); 1084 aColorStr.SetChar( nIdx,aStr.GetChar( 3 ) ); 1085 aFtColorModel4.SetText( aColorStr ); 1086 1087 aFtColorModel4.Show(); 1088 aMtrFldColorModel4.Show(); 1089 1090 aMtrFldColorModel1.SetHelpId( HID_TPCOLOR_CMYK_1 ); 1091 aMtrFldColorModel2.SetHelpId( HID_TPCOLOR_CMYK_2 ); 1092 aMtrFldColorModel3.SetHelpId( HID_TPCOLOR_CMYK_3 ); 1093 1094 // s.o. 1095 aMtrFldColorModel1.SetHelpText( String() ); 1096 aMtrFldColorModel2.SetHelpText( String() ); 1097 aMtrFldColorModel3.SetHelpText( String() ); 1098 1099 // CMYK-Werte im Bereich 0..100% verarbeiten, 1100 // dazu MetricField's entsprechend einstellen 1101 String aStrUnit( RTL_CONSTASCII_USTRINGPARAM( " %" ) ); 1102 1103 aMtrFldColorModel1.SetUnit(FUNIT_CUSTOM); 1104 aMtrFldColorModel1.SetCustomUnitText( aStrUnit ); 1105 aMtrFldColorModel1.SetMin(0); 1106 aMtrFldColorModel1.SetMax(100); 1107 aMtrFldColorModel1.SetLast(100); 1108 1109 aMtrFldColorModel2.SetUnit(FUNIT_CUSTOM); 1110 aMtrFldColorModel2.SetCustomUnitText( aStrUnit ); 1111 aMtrFldColorModel2.SetMin(0); 1112 aMtrFldColorModel2.SetMax(100); 1113 aMtrFldColorModel2.SetLast(100); 1114 1115 aMtrFldColorModel3.SetUnit(FUNIT_CUSTOM); 1116 aMtrFldColorModel3.SetCustomUnitText( aStrUnit ); 1117 aMtrFldColorModel3.SetMin(0); 1118 aMtrFldColorModel3.SetMax(100); 1119 aMtrFldColorModel3.SetLast(100); 1120 } 1121 break; 1122 } 1123 1124 aMtrFldColorModel1.SetValue( ColorToPercent_Impl( aAktuellColor.GetRed() ) ); 1125 aMtrFldColorModel2.SetValue( ColorToPercent_Impl( aAktuellColor.GetGreen() ) ); 1126 aMtrFldColorModel3.SetValue( ColorToPercent_Impl( aAktuellColor.GetBlue() ) ); 1127 aMtrFldColorModel4.SetValue( ColorToPercent_Impl( aAktuellColor.GetTransparency() ) ); 1128 } 1129 1130 aMtrFldColorModel1.SetAccessibleName( GetNonMnemonicString(aFtColorModel1.GetText()) ); 1131 aMtrFldColorModel2.SetAccessibleName( GetNonMnemonicString(aFtColorModel2.GetText()) ); 1132 aMtrFldColorModel3.SetAccessibleName( GetNonMnemonicString(aFtColorModel3.GetText()) ); 1133 aMtrFldColorModel4.SetAccessibleName( GetNonMnemonicString(aFtColorModel4.GetText()) ); 1134 1135 return( 0L ); 1136 } 1137 1138 //------------------------------------------------------------------------ 1139 1140 long SvxColorTabPage::ChangeColorHdl_Impl( void* ) 1141 { 1142 int nPos = aLbColor.GetSelectEntryPos(); 1143 if( nPos != LISTBOX_ENTRY_NOTFOUND ) 1144 { 1145 XColorEntry* pEntry = pColorTab->GetColor( nPos ); 1146 1147 aAktuellColor.SetColor ( pEntry->GetColor().GetColor() ); 1148 if (eCM != CM_RGB) 1149 ConvertColorValues (aAktuellColor, eCM); 1150 1151 aMtrFldColorModel1.SetValue( ColorToPercent_Impl( aAktuellColor.GetRed() ) ); 1152 aMtrFldColorModel2.SetValue( ColorToPercent_Impl( aAktuellColor.GetGreen() ) ); 1153 aMtrFldColorModel3.SetValue( ColorToPercent_Impl( aAktuellColor.GetBlue() ) ); 1154 aMtrFldColorModel4.SetValue( ColorToPercent_Impl( aAktuellColor.GetTransparency() ) ); 1155 1156 // ItemSet fuellen und an XOut weiterleiten 1157 rXFSet.Put( XFillColorItem( String(), pEntry->GetColor() ) ); 1158 aCtlPreviewOld.SetAttributes( aXFillAttr.GetItemSet() ); 1159 aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); 1160 1161 aCtlPreviewNew.Invalidate(); 1162 } 1163 return( 0L ); 1164 } 1165 1166 //------------------------------------------------------------------------ 1167 1168 void SvxColorTabPage::FillValueSet_Impl( ValueSet& rVs ) 1169 { 1170 long nCount = pColorTab->Count(); 1171 XColorEntry* pColorEntry; 1172 1173 for( long i = 0; i < nCount; i++ ) 1174 { 1175 pColorEntry = pColorTab->GetColor( i ); 1176 rVs.InsertItem( (sal_uInt16) i + 1, pColorEntry->GetColor(), pColorEntry->GetName() ); 1177 } 1178 } 1179 1180 //------------------------------------------------------------------------ 1181 1182 // Ein RGB-Wert wird in einen CMYK-Wert konvertiert, wobei die Color- 1183 // Klasse vergewaltigt wird, da R in C, G in M und B in Y umgewandelt 1184 // wird. Der Wert K wird in einer Extra-Variablen gehalten. 1185 // Bei weiteren Farbmodellen sollte man hierfuer eigene Klassen entwickeln, 1186 // die dann auch entsprechende Casts enthalten. 1187 1188 void SvxColorTabPage::RgbToCmyk_Impl( Color& rColor, sal_uInt16& rK ) 1189 { 1190 sal_uInt16 nColor1, nColor2, nColor3; 1191 sal_uInt16 nProzent; // nur temporaer !!! 1192 1193 nColor1 = 255 - rColor.GetRed(); 1194 nProzent = ColorToPercent_Impl( nColor1 ); 1195 1196 nColor2 = 255 - rColor.GetGreen(); 1197 nProzent = ColorToPercent_Impl( nColor2 ); 1198 1199 nColor3 = 255 - rColor.GetBlue(); 1200 nProzent = ColorToPercent_Impl( nColor3 ); 1201 1202 rK = Min( Min( nColor1, nColor2 ), nColor3 ); 1203 1204 rColor.SetRed( sal::static_int_cast< sal_uInt8 >( nColor1 - rK ) ); 1205 rColor.SetGreen( sal::static_int_cast< sal_uInt8 >( nColor2 - rK ) ); 1206 rColor.SetBlue( sal::static_int_cast< sal_uInt8 >( nColor3 - rK ) ); 1207 } 1208 1209 //------------------------------------------------------------------------ 1210 1211 // Umgekehrter Fall zu RgbToCmyk_Impl (s.o.) 1212 1213 void SvxColorTabPage::CmykToRgb_Impl( Color& rColor, const sal_uInt16 nK ) 1214 { 1215 long lTemp; 1216 1217 lTemp = 255 - ( rColor.GetRed() + nK ); 1218 1219 if( lTemp < 0L ) 1220 lTemp = 0L; 1221 rColor.SetRed( (sal_uInt8)lTemp ); 1222 1223 lTemp = 255 - ( rColor.GetGreen() + nK ); 1224 1225 if( lTemp < 0L ) 1226 lTemp = 0L; 1227 rColor.SetGreen( (sal_uInt8)lTemp ); 1228 1229 lTemp = 255 - ( rColor.GetBlue() + nK ); 1230 1231 if( lTemp < 0L ) 1232 lTemp = 0L; 1233 rColor.SetBlue( (sal_uInt8)lTemp ); 1234 } 1235 1236 //------------------------------------------------------------------------ 1237 1238 sal_uInt16 SvxColorTabPage::ColorToPercent_Impl( sal_uInt16 nColor ) 1239 { 1240 sal_uInt16 nWert = 0; 1241 1242 switch (eCM) 1243 { 1244 case CM_RGB : 1245 nWert = nColor; 1246 break; 1247 1248 case CM_CMYK: 1249 nWert = (sal_uInt16) ( (double) nColor * 100.0 / 255.0 + 0.5 ); 1250 break; 1251 } 1252 1253 return ( nWert ); 1254 } 1255 1256 //------------------------------------------------------------------------ 1257 1258 sal_uInt16 SvxColorTabPage::PercentToColor_Impl( sal_uInt16 nPercent ) 1259 { 1260 sal_uInt16 nWert = 0; 1261 1262 switch (eCM) 1263 { 1264 case CM_RGB : 1265 nWert = nPercent; 1266 break; 1267 1268 case CM_CMYK: 1269 nWert = (sal_uInt16) ( (double) nPercent * 255.0 / 100.0 + 0.5 ); 1270 break; 1271 } 1272 1273 return ( nWert ); 1274 } 1275 1276 //------------------------------------------------------------------------ 1277 1278 void SvxColorTabPage::FillUserData() 1279 { 1280 // Das Farbmodell wird in der Ini-Datei festgehalten 1281 SetUserData( UniString::CreateFromInt32( eCM ) ); 1282 } 1283 1284 1285