| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_cui.hxx" |
| |
| // include --------------------------------------------------------------- |
| #include <tools/shl.hxx> |
| #include <tools/urlobj.hxx> |
| #include <unotools/pathoptions.hxx> |
| #include <sfx2/app.hxx> |
| #include <sfx2/module.hxx> |
| #include <svtools/colrdlg.hxx> |
| #include <vcl/msgbox.hxx> |
| #include <sfx2/filedlghelper.hxx> |
| #include "com/sun/star/ui/dialogs/TemplateDescription.hpp" |
| |
| #define _SVX_TPCOLOR_CXX |
| |
| #include <cuires.hrc> |
| #include "helpid.hrc" |
| #include "svx/xattr.hxx" |
| #include <svx/xpool.hxx> |
| #include <svx/xtable.hxx> |
| #include "svx/drawitem.hxx" |
| #include "cuitabarea.hxx" |
| #include "tabarea.hrc" |
| #include "defdlgname.hxx" //CHINA001 #include "dlgname.hxx" |
| //#include "dlgname.hrc" |
| #include <svx/svxdlg.hxx> //CHINA001 |
| #include <dialmgr.hxx> |
| #include <cuitabline.hxx> |
| #include <svx/dialmgr.hxx> |
| #include <svx/dialogs.hrc> |
| |
| #define DLGWIN GetParentDialog( this ) |
| |
| /************************************************************************* |
| |* |
| |* Dialog zum Aendern und Definieren der Farben |
| |* |
| \************************************************************************/ |
| |
| static Window* GetParentDialog( Window* pWindow ) |
| { |
| while( pWindow ) |
| { |
| if( pWindow->IsDialog() ) |
| break; |
| |
| pWindow = pWindow->GetParent(); |
| } |
| |
| return pWindow; |
| } |
| |
| SvxColorTabPage::SvxColorTabPage |
| ( |
| Window* pParent, |
| const SfxItemSet& rInAttrs |
| ) : |
| |
| SfxTabPage ( pParent, CUI_RES( RID_SVXPAGE_COLOR ), rInAttrs ), |
| |
| aFlProp ( this, CUI_RES( FL_PROP ) ), |
| aFtName ( this, CUI_RES( FT_NAME ) ), |
| aEdtName ( this, CUI_RES( EDT_NAME ) ), |
| aFtColor ( this, CUI_RES( FT_COLOR ) ), |
| aLbColor ( this, CUI_RES( LB_COLOR ) ), |
| |
| aTableNameFT ( this, CUI_RES( FT_TABLE_NAME ) ), |
| aValSetColorTable ( this, CUI_RES( CTL_COLORTABLE ) ), |
| |
| aCtlPreviewOld ( this, CUI_RES( CTL_PREVIEW_OLD ) ), |
| aCtlPreviewNew ( this, CUI_RES( CTL_PREVIEW_NEW ) ), |
| |
| aLbColorModel ( this, CUI_RES( LB_COLORMODEL ) ), |
| aFtColorModel1 ( this, CUI_RES( FT_1 ) ), |
| aMtrFldColorModel1 ( this, CUI_RES( MTR_FLD_1 ) ), |
| aFtColorModel2 ( this, CUI_RES( FT_2 ) ), |
| aMtrFldColorModel2 ( this, CUI_RES( MTR_FLD_2 ) ), |
| aFtColorModel3 ( this, CUI_RES( FT_3 ) ), |
| aMtrFldColorModel3 ( this, CUI_RES( MTR_FLD_3 ) ), |
| aFtColorModel4 ( this, CUI_RES( FT_4 ) ), |
| aMtrFldColorModel4 ( this, CUI_RES( MTR_FLD_4 ) ), |
| aBtnAdd ( this, CUI_RES( BTN_ADD ) ), |
| aBtnModify ( this, CUI_RES( BTN_MODIFY ) ), |
| aBtnWorkOn ( this, CUI_RES( BTN_WORK_ON ) ), |
| aBtnDelete ( this, CUI_RES( BTN_DELETE ) ), |
| aBtnLoad ( this, CUI_RES( BTN_LOAD ) ), |
| aBtnSave ( this, CUI_RES( BTN_SAVE ) ), |
| |
| rOutAttrs ( rInAttrs ), |
| maColorTab(), |
| |
| pXPool ( (XOutdevItemPool*) rInAttrs.GetPool() ), |
| aXFStyleItem ( XFILL_SOLID ), |
| aXFillColorItem ( String(), Color( COL_BLACK ) ), |
| aXFillAttr ( pXPool ), |
| rXFSet ( aXFillAttr.GetItemSet() ), |
| |
| eCM ( CM_RGB ) |
| |
| { |
| aBtnLoad.SetModeImage( Image( CUI_RES( RID_SVXIMG_LOAD_H ) ), BMP_COLOR_HIGHCONTRAST ); |
| aBtnSave.SetModeImage( Image( CUI_RES( RID_SVXIMG_SAVE_H ) ), BMP_COLOR_HIGHCONTRAST ); |
| |
| FreeResource(); |
| |
| // diese Page braucht ExchangeSupport |
| SetExchangeSupport(); |
| |
| // Setzen des Output-Devices |
| rXFSet.Put( aXFStyleItem ); |
| rXFSet.Put( aXFillColorItem ); |
| aCtlPreviewOld.SetAttributes( aXFillAttr.GetItemSet() ); |
| aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); |
| |
| // Handler ueberladen |
| aLbColor.SetSelectHdl( |
| LINK( this, SvxColorTabPage, SelectColorLBHdl_Impl ) ); |
| aValSetColorTable.SetSelectHdl( |
| LINK( this, SvxColorTabPage, SelectValSetHdl_Impl ) ); |
| aLbColorModel.SetSelectHdl( |
| LINK( this, SvxColorTabPage, SelectColorModelHdl_Impl ) ); |
| |
| Link aLink = LINK( this, SvxColorTabPage, ModifiedHdl_Impl ); |
| aMtrFldColorModel1.SetModifyHdl( aLink ); |
| aMtrFldColorModel2.SetModifyHdl( aLink ); |
| aMtrFldColorModel3.SetModifyHdl( aLink ); |
| aMtrFldColorModel4.SetModifyHdl( aLink ); |
| |
| aBtnAdd.SetClickHdl( LINK( this, SvxColorTabPage, ClickAddHdl_Impl ) ); |
| aBtnModify.SetClickHdl( |
| LINK( this, SvxColorTabPage, ClickModifyHdl_Impl ) ); |
| aBtnWorkOn.SetClickHdl( |
| LINK( this, SvxColorTabPage, ClickWorkOnHdl_Impl ) ); |
| aBtnDelete.SetClickHdl( |
| LINK( this, SvxColorTabPage, ClickDeleteHdl_Impl ) ); |
| aBtnLoad.SetClickHdl( LINK( this, SvxColorTabPage, ClickLoadHdl_Impl ) ); |
| aBtnSave.SetClickHdl( LINK( this, SvxColorTabPage, ClickSaveHdl_Impl ) ); |
| |
| // ValueSet |
| aValSetColorTable.SetStyle( aValSetColorTable.GetStyle() | WB_ITEMBORDER ); |
| aValSetColorTable.Show(); |
| |
| aLbColorModel.SetAccessibleName( String( CUI_RES(STR_CUI_COLORMODEL) ) ); |
| aBtnAdd.SetAccessibleRelationMemberOf( &aFlProp ); |
| aBtnModify.SetAccessibleRelationMemberOf( &aFlProp ); |
| aBtnWorkOn.SetAccessibleRelationMemberOf( &aFlProp ); |
| aBtnDelete.SetAccessibleRelationMemberOf( &aFlProp ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| void SvxColorTabPage::ImpColorCountChanged() |
| { |
| if(maColorTab.get()) |
| { |
| aValSetColorTable.SetColCount(aValSetColorTable.getColumnCount()); |
| |
| // here we have enough space to the left, so layout with fixed column size |
| // and fixed height, adapt width. Apply the adapted width by moving the left |
| // edge of the control to the left, keeping the right edge aligned |
| // with the original position |
| const Point aCurrentPos(aValSetColorTable.GetPosPixel()); |
| const Size aCurrentSize(aValSetColorTable.GetOutputSizePixel()); |
| const long nColorCount(maColorTab->Count()); |
| const Size aNewSize(aValSetColorTable.layoutToGivenHeight(aCurrentSize.Height(), nColorCount)); |
| const Point aNewPos((aCurrentPos.X() + aCurrentSize.Width()) - aNewSize.Width(), aCurrentPos.Y()); |
| |
| aValSetColorTable.SetOutputSizePixel(aNewSize); |
| aValSetColorTable.SetPosSizePixel(aNewPos, aNewSize); |
| } |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| void SvxColorTabPage::Construct() |
| { |
| if(maColorTab.get()) |
| { |
| aLbColor.Fill(maColorTab); |
| aValSetColorTable.addEntriesForXColorList(maColorTab); |
| ImpColorCountChanged(); |
| } |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| void SvxColorTabPage::ActivatePage( const SfxItemSet& ) |
| { |
| if( *pDlgType == 0 ) // Flaechen-Dialog |
| { |
| *pbAreaTP = sal_False; |
| |
| if( maColorTab.get() ) |
| { |
| if( *pPageType == PT_COLOR && *pPos != LISTBOX_ENTRY_NOTFOUND ) |
| { |
| aLbColor.SelectEntryPos( *pPos ); |
| aValSetColorTable.SelectItem( aLbColor.GetSelectEntryPos() + 1 ); |
| aEdtName.SetText( aLbColor.GetSelectEntry() ); |
| |
| ChangeColorHdl_Impl( this ); |
| } |
| else if( *pPageType == PT_COLOR && *pPos == LISTBOX_ENTRY_NOTFOUND ) |
| { |
| const SfxPoolItem* pPoolItem = NULL; |
| if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), sal_True, &pPoolItem ) ) |
| { |
| aLbColorModel.SelectEntryPos( CM_RGB ); |
| |
| aAktuellColor.SetColor ( ( ( const XFillColorItem* ) pPoolItem )->GetColorValue().GetColor() ); |
| |
| aEdtName.SetText( ( ( const XFillColorItem* ) pPoolItem )->GetName() ); |
| |
| aMtrFldColorModel1.SetValue( ColorToPercent_Impl( aAktuellColor.GetRed() ) ); |
| aMtrFldColorModel2.SetValue( ColorToPercent_Impl( aAktuellColor.GetGreen() ) ); |
| aMtrFldColorModel3.SetValue( ColorToPercent_Impl( aAktuellColor.GetBlue() ) ); |
| |
| // ItemSet fuellen und an XOut weiterleiten |
| rXFSet.Put( XFillColorItem( String(), aAktuellColor ) ); |
| aCtlPreviewOld.SetAttributes( aXFillAttr.GetItemSet() ); |
| aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); |
| |
| aCtlPreviewNew.Invalidate(); |
| aCtlPreviewOld.Invalidate(); |
| } |
| } |
| |
| // Ermitteln (evtl. abschneiden) des Namens und in |
| // der GroupBox darstellen |
| String aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); |
| INetURLObject aURL( maColorTab->GetPath() ); |
| |
| aURL.Append( maColorTab->GetName() ); |
| DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); |
| |
| if ( aURL.getBase().getLength() > 18 ) |
| { |
| aString += String(aURL.getBase()).Copy( 0, 15 ); |
| aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); |
| } |
| else |
| aString += String(aURL.getBase()); |
| |
| aTableNameFT.SetText( aString ); |
| |
| // Damit evtl. geaenderte Farbe verworfen wird |
| SelectColorLBHdl_Impl( this ); |
| |
| *pPageType = PT_COLOR; |
| *pPos = LISTBOX_ENTRY_NOTFOUND; |
| } |
| } |
| else |
| { |
| // Buttons werden gehided, weil Paletten z.Z. nur |
| // ueber den AreaDlg funktionieren!!! |
| // ActivatePage() muss von anderen Dialogen explizit |
| // gerufen werden, da ActivatePage() nicht gerufen wird, |
| // wenn Seite als Erste im Dialog angezeigt wird |
| aBtnLoad.Hide(); |
| aBtnSave.Hide(); |
| } |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| int SvxColorTabPage::DeactivatePage( SfxItemSet* _pSet ) |
| { |
| if ( CheckChanges_Impl() == -1L ) |
| return( KEEP_PAGE ); |
| |
| if( _pSet ) |
| FillItemSet( *_pSet ); |
| |
| return( LEAVE_PAGE ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| long SvxColorTabPage::CheckChanges_Impl() |
| { |
| // wird hier benutzt, um Aenderungen NICHT zu verlieren |
| |
| Color aTmpColor (aAktuellColor); |
| if (eCM != CM_RGB) |
| ConvertColorValues (aTmpColor, CM_RGB); |
| |
| sal_uInt16 nPos = aLbColor.GetSelectEntryPos(); |
| if( nPos != LISTBOX_ENTRY_NOTFOUND ) |
| { |
| Color aColor = maColorTab->GetColor( nPos )->GetColor(); |
| String aString = aLbColor.GetSelectEntry(); |
| |
| // aNewColor, da COL_USER != COL_irgendwas, auch wenn RGB-Werte gleich |
| // Color aNewColor( aColor.GetRed(), aColor.GetGreen(), aColor.GetBlue() ); |
| |
| if( ColorToPercent_Impl( aTmpColor.GetRed() ) != ColorToPercent_Impl( aColor.GetRed() ) || |
| ColorToPercent_Impl( aTmpColor.GetGreen() ) != ColorToPercent_Impl( aColor.GetGreen() ) || |
| ColorToPercent_Impl( aTmpColor.GetBlue() ) != ColorToPercent_Impl( aColor.GetBlue() ) || |
| aString != aEdtName.GetText() ) |
| { |
| ResMgr& rMgr = CUI_MGR(); |
| Image aWarningBoxImage = WarningBox::GetStandardImage(); |
| SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); |
| DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001 |
| AbstractSvxMessDialog* aMessDlg = pFact->CreateSvxMessDialog( DLGWIN, RID_SVXDLG_MESSBOX, |
| SVX_RESSTR( RID_SVXSTR_COLOR ), |
| String( ResId( RID_SVXSTR_ASK_CHANGE_COLOR, rMgr ) ), |
| &aWarningBoxImage ); |
| DBG_ASSERT(aMessDlg, "Dialogdiet fail!");//CHINA001 |
| aMessDlg->SetButtonText( MESS_BTN_1, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_1, |
| String( ResId( RID_SVXSTR_CHANGE, rMgr ) ) ); |
| aMessDlg->SetButtonText( MESS_BTN_2, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_2, |
| String( ResId( RID_SVXSTR_ADD, rMgr ) ) ); |
| |
| short nRet = aMessDlg->Execute(); //CHINA001 short nRet = aMessDlg.Execute(); |
| |
| switch( nRet ) |
| { |
| case RET_BTN_1: // Aendern |
| { |
| ClickModifyHdl_Impl( this ); |
| aColor = maColorTab->GetColor( nPos )->GetColor(); |
| } |
| break; |
| |
| case RET_BTN_2: // Hinzufuegen |
| { |
| ClickAddHdl_Impl( this ); |
| nPos = aLbColor.GetSelectEntryPos(); |
| aColor = maColorTab->GetColor( nPos )->GetColor(); |
| } |
| break; |
| |
| case RET_CANCEL: |
| // return( -1L ); <-- wuerde die Seite nicht verlassen |
| break; |
| // return( sal_True ); // Abbruch |
| } |
| delete aMessDlg; //add by CHINA001 |
| } |
| } |
| if( *pDlgType == 0 ) // Flaechen-Dialog |
| { |
| nPos = aLbColor.GetSelectEntryPos(); |
| if( nPos != LISTBOX_ENTRY_NOTFOUND ) |
| { |
| *pPos = nPos; |
| } |
| } |
| return( 0L ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| sal_Bool SvxColorTabPage::FillItemSet( SfxItemSet& rSet ) |
| { |
| if( ( *pDlgType != 0 ) || |
| ( *pPageType == PT_COLOR && *pbAreaTP == sal_False ) ) |
| { |
| String aString; |
| Color aColor; |
| |
| // CheckChanges_Impl(); <-- doppelte Abfrage ? |
| |
| sal_uInt16 nPos = aLbColor.GetSelectEntryPos(); |
| if( nPos != LISTBOX_ENTRY_NOTFOUND ) |
| { |
| aColor = maColorTab->GetColor( nPos )->GetColor(); |
| aString = aLbColor.GetSelectEntry(); |
| } |
| else |
| { |
| aColor.SetColor (aAktuellColor.GetColor()); |
| if (eCM != CM_RGB) |
| ConvertColorValues (aColor, CM_RGB); |
| } |
| rSet.Put( XFillColorItem( aString, aColor ) ); |
| rSet.Put( XFillStyleItem( XFILL_SOLID ) ); |
| } |
| |
| return( sal_True ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| void SvxColorTabPage::Reset( const SfxItemSet& rSet ) |
| { |
| sal_uInt16 nState = rSet.GetItemState( XATTR_FILLCOLOR ); |
| |
| if ( nState >= SFX_ITEM_DEFAULT ) |
| { |
| XFillColorItem aColorItem( (const XFillColorItem&)rSet.Get( XATTR_FILLCOLOR ) ); |
| aLbColor.SelectEntry( aColorItem.GetColorValue() ); |
| aValSetColorTable.SelectItem( aLbColor.GetSelectEntryPos() + 1 ); |
| aEdtName.SetText( aLbColor.GetSelectEntry() ); |
| } |
| |
| // Farbmodell setzen |
| String aStr = GetUserData(); |
| aLbColorModel.SelectEntryPos( (sal_uInt16) aStr.ToInt32() ); |
| |
| ChangeColorHdl_Impl( this ); |
| SelectColorModelHdl_Impl( this ); |
| |
| aCtlPreviewOld.Invalidate(); |
| |
| // Status der Buttons ermitteln |
| if( maColorTab->Count() ) |
| { |
| aBtnModify.Enable(); |
| aBtnWorkOn.Enable(); |
| aBtnDelete.Enable(); |
| aBtnSave.Enable(); |
| } |
| else |
| { |
| aBtnModify.Disable(); |
| aBtnWorkOn.Disable(); |
| aBtnDelete.Disable(); |
| aBtnSave.Disable(); |
| } |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| SfxTabPage* SvxColorTabPage::Create( Window* pWindow, |
| const SfxItemSet& rOutAttrs ) |
| { |
| return( new SvxColorTabPage( pWindow, rOutAttrs ) ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| // |
| // Wird aufgerufen, wenn Inhalt der MtrFileds f�r Farbwerte ver�ndert wird |
| // |
| IMPL_LINK( SvxColorTabPage, ModifiedHdl_Impl, void *, EMPTYARG ) |
| { |
| // lese aktuelle MtrFields aus, wenn cmyk, dann k-Wert als Trans.-Farbe |
| aAktuellColor.SetColor ( Color( (sal_uInt8)PercentToColor_Impl( (sal_uInt16) aMtrFldColorModel4.GetValue() ), |
| (sal_uInt8)PercentToColor_Impl( (sal_uInt16) aMtrFldColorModel1.GetValue() ), |
| (sal_uInt8)PercentToColor_Impl( (sal_uInt16) aMtrFldColorModel2.GetValue() ), |
| (sal_uInt8)PercentToColor_Impl( (sal_uInt16) aMtrFldColorModel3.GetValue() ) ).GetColor() ); |
| |
| Color aTmpColor(aAktuellColor); |
| if (eCM != CM_RGB) |
| ConvertColorValues (aTmpColor, CM_RGB); |
| |
| rXFSet.Put( XFillColorItem( String(), aTmpColor ) ); |
| aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); |
| |
| aCtlPreviewNew.Invalidate(); |
| |
| return( 0L ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| // |
| // Button 'Hinzuf�gen' |
| // |
| IMPL_LINK( SvxColorTabPage, ClickAddHdl_Impl, void *, EMPTYARG ) |
| { |
| Window *pWindow = this; |
| bool bEnabled; |
| while( pWindow ) |
| { |
| bEnabled = pWindow->IsEnabled(); |
| pWindow = pWindow->GetParent(); |
| } |
| |
| ResMgr& rMgr = CUI_MGR(); |
| String aDesc( ResId( RID_SVXSTR_DESC_COLOR, rMgr ) ); |
| String aName( aEdtName.GetText() ); |
| XColorEntry* pEntry; |
| long nCount = maColorTab->Count(); |
| sal_Bool bDifferent = sal_True; |
| |
| // Pruefen, ob Name schon vorhanden ist |
| for ( long i = 0; i < nCount && bDifferent; i++ ) |
| if ( aName == maColorTab->GetColor( i )->GetName() ) |
| bDifferent = sal_False; |
| |
| // Wenn ja, wird wiederholt ein neuer Name angefordert |
| if ( !bDifferent ) |
| { |
| WarningBox aWarningBox( DLGWIN, WinBits( WB_OK ), |
| String( ResId( RID_SVXSTR_WARN_NAME_DUPLICATE, rMgr ) ) ); |
| aWarningBox.SetHelpId( HID_WARN_NAME_DUPLICATE ); |
| aWarningBox.Execute(); |
| |
| SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); |
| DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001 |
| AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc ); |
| DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 |
| sal_Bool bLoop = sal_True; |
| |
| while ( !bDifferent && bLoop && pDlg->Execute() == RET_OK ) |
| { |
| pDlg->GetName( aName ); |
| bDifferent = sal_True; |
| |
| for( long i = 0; i < nCount && bDifferent; i++ ) |
| { |
| if( aName == maColorTab->GetColor( i )->GetName() ) |
| bDifferent = sal_False; |
| } |
| |
| if( bDifferent ) |
| bLoop = sal_False; |
| else |
| aWarningBox.Execute(); |
| } |
| delete( pDlg ); |
| } |
| |
| // Wenn nicht vorhanden, wird Eintrag aufgenommen |
| if( bDifferent ) |
| { |
| if (eCM != CM_RGB) |
| ConvertColorValues (aAktuellColor, CM_RGB); |
| pEntry = new XColorEntry( aAktuellColor, aName ); |
| |
| maColorTab->Insert( pEntry, maColorTab->Count() ); |
| |
| aLbColor.Append( *pEntry ); |
| aValSetColorTable.InsertItem( aValSetColorTable.GetItemCount() + 1, pEntry->GetColor(), pEntry->GetName() ); |
| ImpColorCountChanged(); |
| |
| aLbColor.SelectEntryPos( aLbColor.GetEntryCount() - 1 ); |
| |
| // Flag fuer modifiziert setzen |
| *pnColorTableState |= CT_MODIFIED; |
| |
| SelectColorLBHdl_Impl( this ); |
| } |
| // Status der Buttons ermitteln |
| if( maColorTab->Count() ) |
| { |
| aBtnModify.Enable(); |
| aBtnWorkOn.Enable(); |
| aBtnDelete.Enable(); |
| aBtnSave.Enable(); |
| } |
| return( 0L ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| // |
| // Button '�ndern' |
| // |
| IMPL_LINK( SvxColorTabPage, ClickModifyHdl_Impl, void *, EMPTYARG ) |
| { |
| sal_uInt16 nPos = aLbColor.GetSelectEntryPos(); |
| |
| if( nPos != LISTBOX_ENTRY_NOTFOUND ) |
| { |
| ResMgr& rMgr = CUI_MGR(); |
| String aDesc( ResId( RID_SVXSTR_DESC_COLOR, rMgr ) ); |
| String aName( aEdtName.GetText() ); |
| long nCount = maColorTab->Count(); |
| sal_Bool bDifferent = sal_True; |
| |
| // Pruefen, ob Name schon vorhanden ist |
| for ( long i = 0; i < nCount && bDifferent; i++ ) |
| if ( aName == maColorTab->GetColor( i )->GetName() && nPos != i ) |
| bDifferent = sal_False; |
| |
| // Wenn ja, wird wiederholt ein neuer Name angefordert |
| if ( !bDifferent ) |
| { |
| WarningBox aWarningBox( DLGWIN, WinBits( WB_OK ), |
| String( ResId( RID_SVXSTR_WARN_NAME_DUPLICATE, rMgr ) ) ); |
| aWarningBox.SetHelpId( HID_WARN_NAME_DUPLICATE ); |
| aWarningBox.Execute(); |
| |
| SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); |
| DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001 |
| AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc ); |
| DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 |
| sal_Bool bLoop = sal_True; |
| |
| while ( !bDifferent && bLoop && pDlg->Execute() == RET_OK ) |
| { |
| pDlg->GetName( aName ); |
| bDifferent = sal_True; |
| |
| for ( long i = 0; i < nCount && bDifferent; i++ ) |
| if( aName == maColorTab->GetColor( i )->GetName() && nPos != i ) |
| bDifferent = sal_False; |
| |
| if( bDifferent ) |
| bLoop = sal_False; |
| else |
| aWarningBox.Execute(); |
| } |
| delete( pDlg ); |
| } |
| |
| // Wenn nicht vorhanden, wird Eintrag aufgenommen |
| if( bDifferent ) |
| { |
| Color aTmpColor (aAktuellColor); |
| |
| if (eCM != CM_RGB) |
| ConvertColorValues (aTmpColor, CM_RGB); |
| |
| // #123497# Need to replace the existing entry with a new one (old returned needs to be deleted) |
| XColorEntry* pEntry = new XColorEntry(aTmpColor, aName); |
| delete maColorTab->Replace(pEntry, nPos); |
| |
| aLbColor.Modify( *pEntry, nPos ); |
| aLbColor.SelectEntryPos( nPos ); |
| |
| aValSetColorTable.SetItemColor( nPos + 1, pEntry->GetColor() ); |
| aValSetColorTable.SetItemText( nPos + 1, pEntry->GetName() ); |
| aEdtName.SetText( aName ); |
| |
| aCtlPreviewOld.Invalidate(); |
| |
| // Flag fuer modifiziert setzen |
| *pnColorTableState |= CT_MODIFIED; |
| } |
| } |
| return( 0L ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| // |
| // Button 'Bearbeiten' |
| // |
| IMPL_LINK( SvxColorTabPage, ClickWorkOnHdl_Impl, void *, EMPTYARG ) |
| { |
| SvColorDialog* pColorDlg = new SvColorDialog( DLGWIN ); |
| |
| Color aTmpColor (aAktuellColor); |
| if (eCM != CM_RGB) |
| ConvertColorValues (aTmpColor, CM_RGB); |
| |
| pColorDlg->SetColor (aTmpColor); |
| pColorDlg->SetMode( svtools::ColorPickerMode_MODIFY ); |
| |
| if( pColorDlg->Execute() == RET_OK ) |
| { |
| sal_uInt16 nK = 0; |
| Color aPreviewColor = pColorDlg->GetColor(); |
| aAktuellColor = aPreviewColor; |
| if (eCM != CM_RGB) |
| ConvertColorValues (aAktuellColor, eCM); |
| |
| aMtrFldColorModel1.SetValue( ColorToPercent_Impl( aAktuellColor.GetRed() ) ); |
| aMtrFldColorModel2.SetValue( ColorToPercent_Impl( aAktuellColor.GetGreen() ) ); |
| aMtrFldColorModel3.SetValue( ColorToPercent_Impl( aAktuellColor.GetBlue() ) ); |
| aMtrFldColorModel4.SetValue( ColorToPercent_Impl( nK ) ); |
| |
| // ItemSet fuellen und an XOut weiterleiten |
| rXFSet.Put( XFillColorItem( String(), aPreviewColor ) ); |
| //aCtlPreviewOld.SetAttributes( aXFillAttr ); |
| aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); |
| |
| aCtlPreviewNew.Invalidate(); |
| } |
| delete( pColorDlg ); |
| |
| return( 0L ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| // |
| // Button 'Loeschen' |
| // |
| IMPL_LINK( SvxColorTabPage, ClickDeleteHdl_Impl, void *, EMPTYARG ) |
| { |
| sal_uInt16 nPos = aLbColor.GetSelectEntryPos(); |
| |
| if( nPos != LISTBOX_ENTRY_NOTFOUND ) |
| { |
| QueryBox aQueryBox( DLGWIN, WinBits( WB_YES_NO | WB_DEF_NO ), |
| String( CUI_RES( RID_SVXSTR_ASK_DEL_COLOR ) ) ); |
| |
| if( aQueryBox.Execute() == RET_YES ) |
| { |
| // Jetzt wird richtig geloescht |
| sal_uLong nCount = maColorTab->Count() - 1; |
| XColorEntry* pEntry; |
| |
| pEntry = maColorTab->Remove( nPos ); |
| DBG_ASSERT( pEntry, "ColorEntry nicht vorhanden (1) !" ); |
| delete pEntry; |
| |
| for( sal_uLong i = nPos; i < nCount; i++ ) |
| { |
| pEntry = maColorTab->Remove( i + 1 ); |
| DBG_ASSERT( pEntry, "ColorEntry nicht vorhanden (2) !" ); |
| maColorTab->Insert( pEntry, i ); |
| } |
| |
| // Listbox und ValueSet aktualisieren |
| aLbColor.RemoveEntry( nPos ); |
| aValSetColorTable.Clear(); |
| aValSetColorTable.addEntriesForXColorList(maColorTab); |
| ImpColorCountChanged(); |
| //FillValueSet_Impl( aValSetColorTable ); |
| |
| // Positionieren |
| aLbColor.SelectEntryPos( nPos ); |
| SelectColorLBHdl_Impl( this ); |
| |
| aCtlPreviewOld.Invalidate(); |
| |
| // Flag fuer modifiziert setzen |
| *pnColorTableState |= CT_MODIFIED; |
| } |
| } |
| // Status der Buttons ermitteln |
| if( !maColorTab->Count() ) |
| { |
| aBtnModify.Disable(); |
| aBtnWorkOn.Disable(); |
| aBtnDelete.Disable(); |
| aBtnSave.Disable(); |
| } |
| return( 0L ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| // |
| // Button 'Farbtabelle laden' |
| // |
| IMPL_LINK( SvxColorTabPage, ClickLoadHdl_Impl, void *, EMPTYARG ) |
| { |
| ResMgr& rMgr = CUI_MGR(); |
| sal_uInt16 nReturn = RET_YES; |
| |
| if( *pnColorTableState & CT_MODIFIED ) |
| { |
| nReturn = WarningBox( DLGWIN, WinBits( WB_YES_NO_CANCEL ), |
| String( ResId( RID_SVXSTR_WARN_TABLE_OVERWRITE, rMgr ) ) ).Execute(); |
| |
| if ( nReturn == RET_YES ) |
| maColorTab->Save(); |
| } |
| |
| if ( nReturn != RET_CANCEL ) |
| { |
| ::sfx2::FileDialogHelper aDlg( |
| com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, |
| 0 ); |
| String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.soc" ) ); |
| aDlg.AddFilter( aStrFilterType, aStrFilterType ); |
| INetURLObject aFile( SvtPathOptions().GetPalettePath() ); |
| aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) ); |
| |
| if ( aDlg.Execute() == ERRCODE_NONE ) |
| { |
| INetURLObject aURL( aDlg.GetPath() ); |
| INetURLObject aPathURL( aURL ); |
| |
| aPathURL.removeSegment(); |
| aPathURL.removeFinalSlash(); |
| |
| // Tabelle speichern |
| XColorListSharedPtr aColTab(XPropertyListFactory::CreateSharedXColorList(aPathURL.GetMainURL(INetURLObject::NO_DECODE))); |
| aColTab->SetName( aURL.getName() ); // XXX |
| if( aColTab->Load() ) |
| { |
| if( aColTab.get() ) |
| { |
| // Pruefen, ob Tabelle geloescht werden darf: |
| XColorListSharedPtr aTempTable; |
| SvxAreaTabDialog* pArea = dynamic_cast< SvxAreaTabDialog* >( DLGWIN ); |
| SvxLineTabDialog* pLine = dynamic_cast< SvxLineTabDialog* >( DLGWIN ); |
| |
| if( pArea ) |
| { |
| aTempTable = pArea->GetColorTable(); |
| } |
| else if( pLine ) |
| { |
| aTempTable = pLine->GetColorTable(); |
| } |
| |
| maColorTab = aColTab; |
| |
| if( pArea ) |
| { |
| pArea->SetNewColorTable( maColorTab ); |
| } |
| else if( pLine ) |
| { |
| pLine->SetNewColorTable( maColorTab ); |
| } |
| |
| aLbColor.Clear(); |
| aValSetColorTable.Clear(); |
| Construct(); |
| Reset( rOutAttrs ); |
| |
| maColorTab->SetName( aURL.getName() ); |
| |
| // Ermitteln (evtl. abschneiden) des Namens und in |
| // der GroupBox darstellen |
| String aString( ResId( RID_SVXSTR_TABLE, rMgr ) ); |
| aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); |
| |
| if ( aURL.getBase().getLength() > 18 ) |
| { |
| aString += String(aURL.getBase()).Copy( 0, 15 ); |
| aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); |
| } |
| else |
| aString += String(aURL.getBase()); |
| |
| aTableNameFT.SetText( aString ); |
| |
| // Flag fuer gewechselt setzen |
| *pnColorTableState |= CT_CHANGED; |
| // Flag fuer modifiziert entfernen |
| *pnColorTableState &= ~CT_MODIFIED; |
| |
| if( aLbColor.GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND ) |
| aLbColor.SelectEntryPos( 0 ); |
| else |
| aLbColor.SelectEntryPos( aLbColor.GetSelectEntryPos() ); |
| |
| ChangeColorHdl_Impl( this ); |
| SelectColorLBHdl_Impl( this ); |
| } |
| } |
| else |
| { |
| //aIStream.Close(); |
| ErrorBox aErrorBox( DLGWIN, WinBits( WB_OK ), |
| String( ResId( RID_SVXSTR_READ_DATA_ERROR, rMgr ) ) ); |
| aErrorBox.Execute(); |
| } |
| } |
| } |
| |
| // Status der Buttons ermitteln |
| if ( maColorTab->Count() ) |
| { |
| aBtnModify.Enable(); |
| aBtnWorkOn.Enable(); |
| aBtnDelete.Enable(); |
| aBtnSave.Enable(); |
| } |
| else |
| { |
| aBtnModify.Disable(); |
| aBtnWorkOn.Disable(); |
| aBtnDelete.Disable(); |
| aBtnSave.Disable(); |
| } |
| return( 0L ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| // |
| // Button 'Farbtabelle speichern' |
| // |
| IMPL_LINK( SvxColorTabPage, ClickSaveHdl_Impl, void *, EMPTYARG ) |
| { |
| ::sfx2::FileDialogHelper aDlg( |
| com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 ); |
| String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.soc" ) ); |
| aDlg.AddFilter( aStrFilterType, aStrFilterType ); |
| |
| INetURLObject aFile( SvtPathOptions().GetPalettePath() ); |
| DBG_ASSERT( aFile.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); |
| |
| if( maColorTab->GetName().Len() ) |
| { |
| aFile.Append( maColorTab->GetName() ); |
| |
| if( !aFile.getExtension().getLength() ) |
| aFile.SetExtension( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "soc" ) ) ); |
| } |
| |
| aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) ); |
| if ( aDlg.Execute() == ERRCODE_NONE ) |
| { |
| INetURLObject aURL( aDlg.GetPath() ); |
| INetURLObject aPathURL( aURL ); |
| |
| aPathURL.removeSegment(); |
| aPathURL.removeFinalSlash(); |
| |
| maColorTab->SetName( aURL.getName() ); |
| maColorTab->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) ); |
| |
| if( maColorTab->Save() ) |
| { |
| // Ermitteln (evtl. abschneiden) des Namens und in |
| // der GroupBox darstellen |
| String aString( CUI_RES( RID_SVXSTR_TABLE ) ); |
| aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); |
| |
| if ( aURL.getBase().getLength() > 18 ) |
| { |
| aString += String(aURL.getBase()).Copy( 0, 15 ); |
| aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); |
| } |
| else |
| aString += String(aURL.getBase()); |
| aTableNameFT.SetText( aString ); |
| |
| // Flag fuer gespeichert setzen |
| *pnColorTableState |= CT_SAVED; |
| // Flag fuer modifiziert entfernen |
| *pnColorTableState &= ~CT_MODIFIED; |
| } |
| else |
| { |
| ErrorBox aErrorBox( DLGWIN, WinBits( WB_OK ), |
| String( CUI_RES( RID_SVXSTR_WRITE_DATA_ERROR ) ) ); |
| aErrorBox.Execute(); |
| } |
| } |
| return( 0L ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| IMPL_LINK( SvxColorTabPage, SelectColorLBHdl_Impl, void *, EMPTYARG ) |
| { |
| sal_uInt16 nPos = aLbColor.GetSelectEntryPos(); |
| if( nPos != LISTBOX_ENTRY_NOTFOUND ) |
| { |
| aValSetColorTable.SelectItem( nPos + 1 ); |
| aEdtName.SetText( aLbColor.GetSelectEntry() ); |
| |
| rXFSet.Put( XFillColorItem( String(), |
| aLbColor.GetSelectEntryColor() ) ); |
| aCtlPreviewOld.SetAttributes( aXFillAttr.GetItemSet() ); |
| aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); |
| |
| aCtlPreviewOld.Invalidate(); |
| aCtlPreviewNew.Invalidate(); |
| |
| ChangeColorHdl_Impl( this ); |
| } |
| return( 0L ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| IMPL_LINK( SvxColorTabPage, SelectValSetHdl_Impl, void *, EMPTYARG ) |
| { |
| sal_uInt16 nPos = aValSetColorTable.GetSelectItemId(); |
| if( nPos != LISTBOX_ENTRY_NOTFOUND ) |
| { |
| aLbColor.SelectEntryPos( nPos - 1 ); |
| aEdtName.SetText( aLbColor.GetSelectEntry() ); |
| |
| rXFSet.Put( XFillColorItem( String(), |
| aLbColor.GetSelectEntryColor() ) ); |
| aCtlPreviewOld.SetAttributes( aXFillAttr.GetItemSet() ); |
| aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); |
| |
| aCtlPreviewOld.Invalidate(); |
| aCtlPreviewNew.Invalidate(); |
| |
| ChangeColorHdl_Impl( this ); |
| } |
| return( 0L ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| // |
| // Farbwerte je nach �bergebenes Farbmodell umrechnen |
| // |
| void SvxColorTabPage::ConvertColorValues (Color& rColor, ColorModel eModell) |
| { |
| switch (eModell) |
| { |
| case CM_RGB: |
| { |
| CmykToRgb_Impl (rColor, (sal_uInt16)rColor.GetTransparency() ); |
| rColor.SetTransparency ((sal_uInt8) 0); |
| } |
| break; |
| |
| case CM_CMYK: |
| { |
| sal_uInt16 nK; |
| RgbToCmyk_Impl (rColor, nK ); |
| rColor.SetTransparency ((sal_uInt8) nK); |
| } |
| break; |
| } |
| } |
| |
| // |
| // Auswahl Listbox 'Farbmodell' (RGB/CMY) |
| // |
| IMPL_LINK( SvxColorTabPage, SelectColorModelHdl_Impl, void *, EMPTYARG ) |
| { |
| int nPos = aLbColorModel.GetSelectEntryPos(); |
| if( nPos != LISTBOX_ENTRY_NOTFOUND ) |
| { |
| if (eCM != (ColorModel) nPos) |
| { |
| // wenn Farbmodell geaendert wurde, dann Werte umrechnen |
| ConvertColorValues (aAktuellColor, (ColorModel) nPos); |
| } |
| |
| eCM = (ColorModel) nPos; |
| |
| switch( eCM ) |
| { |
| case CM_RGB: |
| { |
| String aStr( aLbColorModel.GetSelectEntry() ); |
| String aColorStr( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "~X" ) ) ); |
| xub_StrLen nIdx = 1; |
| aColorStr.SetChar( nIdx, aStr.GetChar( 0 ) ); |
| aFtColorModel1.SetText( aColorStr ); |
| aColorStr.SetChar( nIdx, aStr.GetChar( 1 ) ); |
| aFtColorModel2.SetText( aColorStr ); |
| aColorStr.SetChar( nIdx, aStr.GetChar( 2 ) ); |
| aFtColorModel3.SetText( aColorStr ); |
| |
| aFtColorModel4.Hide(); |
| aMtrFldColorModel4.Hide(); |
| aMtrFldColorModel4.SetValue( 0L ); |
| |
| aMtrFldColorModel1.SetHelpId( HID_TPCOLOR_RGB_1 ); |
| aMtrFldColorModel2.SetHelpId( HID_TPCOLOR_RGB_2 ); |
| aMtrFldColorModel3.SetHelpId( HID_TPCOLOR_RGB_3 ); |
| |
| // Da der alte HelpText noch am Control steht wuerde |
| // ein Umsetzen der HelpID alleine nichts bewirken |
| aMtrFldColorModel1.SetHelpText( String() ); |
| aMtrFldColorModel2.SetHelpText( String() ); |
| aMtrFldColorModel3.SetHelpText( String() ); |
| |
| // RGB-Werte im Bereich 0..255 verarbeiten (nicht in %), |
| // dazu MetricField's entsprechend einstellen |
| aMtrFldColorModel1.SetUnit(FUNIT_NONE); |
| aMtrFldColorModel1.SetMin(0); |
| aMtrFldColorModel1.SetMax(255); |
| aMtrFldColorModel1.SetLast(255); |
| |
| aMtrFldColorModel2.SetUnit(FUNIT_NONE); |
| aMtrFldColorModel2.SetMin(0); |
| aMtrFldColorModel2.SetMax(255); |
| aMtrFldColorModel2.SetLast(255); |
| |
| aMtrFldColorModel3.SetUnit(FUNIT_NONE); |
| aMtrFldColorModel3.SetMin(0); |
| aMtrFldColorModel3.SetMax(255); |
| aMtrFldColorModel3.SetLast(255); |
| } |
| break; |
| |
| case CM_CMYK: |
| { |
| String aStr( aLbColorModel.GetSelectEntry() ); |
| String aColorStr( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "~X" ) ) ); |
| xub_StrLen nIdx = 1; |
| aColorStr.SetChar( nIdx, aStr.GetChar( 0 ) ); |
| aFtColorModel1.SetText( aColorStr ); |
| aColorStr.SetChar( nIdx, aStr.GetChar( 1 ) ); |
| aFtColorModel2.SetText( aColorStr ); |
| aColorStr.SetChar( nIdx,aStr.GetChar( 2 ) ); |
| aFtColorModel3.SetText( aColorStr ); |
| aColorStr.SetChar( nIdx,aStr.GetChar( 3 ) ); |
| aFtColorModel4.SetText( aColorStr ); |
| |
| aFtColorModel4.Show(); |
| aMtrFldColorModel4.Show(); |
| |
| aMtrFldColorModel1.SetHelpId( HID_TPCOLOR_CMYK_1 ); |
| aMtrFldColorModel2.SetHelpId( HID_TPCOLOR_CMYK_2 ); |
| aMtrFldColorModel3.SetHelpId( HID_TPCOLOR_CMYK_3 ); |
| |
| // s.o. |
| aMtrFldColorModel1.SetHelpText( String() ); |
| aMtrFldColorModel2.SetHelpText( String() ); |
| aMtrFldColorModel3.SetHelpText( String() ); |
| |
| // CMYK-Werte im Bereich 0..100% verarbeiten, |
| // dazu MetricField's entsprechend einstellen |
| String aStrUnit( RTL_CONSTASCII_USTRINGPARAM( " %" ) ); |
| |
| aMtrFldColorModel1.SetUnit(FUNIT_CUSTOM); |
| aMtrFldColorModel1.SetCustomUnitText( aStrUnit ); |
| aMtrFldColorModel1.SetMin(0); |
| aMtrFldColorModel1.SetMax(100); |
| aMtrFldColorModel1.SetLast(100); |
| |
| aMtrFldColorModel2.SetUnit(FUNIT_CUSTOM); |
| aMtrFldColorModel2.SetCustomUnitText( aStrUnit ); |
| aMtrFldColorModel2.SetMin(0); |
| aMtrFldColorModel2.SetMax(100); |
| aMtrFldColorModel2.SetLast(100); |
| |
| aMtrFldColorModel3.SetUnit(FUNIT_CUSTOM); |
| aMtrFldColorModel3.SetCustomUnitText( aStrUnit ); |
| aMtrFldColorModel3.SetMin(0); |
| aMtrFldColorModel3.SetMax(100); |
| aMtrFldColorModel3.SetLast(100); |
| } |
| break; |
| } |
| |
| aMtrFldColorModel1.SetValue( ColorToPercent_Impl( aAktuellColor.GetRed() ) ); |
| aMtrFldColorModel2.SetValue( ColorToPercent_Impl( aAktuellColor.GetGreen() ) ); |
| aMtrFldColorModel3.SetValue( ColorToPercent_Impl( aAktuellColor.GetBlue() ) ); |
| aMtrFldColorModel4.SetValue( ColorToPercent_Impl( aAktuellColor.GetTransparency() ) ); |
| } |
| |
| aMtrFldColorModel1.SetAccessibleName( GetNonMnemonicString(aFtColorModel1.GetText()) ); |
| aMtrFldColorModel2.SetAccessibleName( GetNonMnemonicString(aFtColorModel2.GetText()) ); |
| aMtrFldColorModel3.SetAccessibleName( GetNonMnemonicString(aFtColorModel3.GetText()) ); |
| aMtrFldColorModel4.SetAccessibleName( GetNonMnemonicString(aFtColorModel4.GetText()) ); |
| |
| return( 0L ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| long SvxColorTabPage::ChangeColorHdl_Impl( void* ) |
| { |
| int nPos = aLbColor.GetSelectEntryPos(); |
| if( nPos != LISTBOX_ENTRY_NOTFOUND ) |
| { |
| XColorEntry* pEntry = maColorTab->GetColor( nPos ); |
| |
| aAktuellColor.SetColor ( pEntry->GetColor().GetColor() ); |
| if (eCM != CM_RGB) |
| ConvertColorValues (aAktuellColor, eCM); |
| |
| aMtrFldColorModel1.SetValue( ColorToPercent_Impl( aAktuellColor.GetRed() ) ); |
| aMtrFldColorModel2.SetValue( ColorToPercent_Impl( aAktuellColor.GetGreen() ) ); |
| aMtrFldColorModel3.SetValue( ColorToPercent_Impl( aAktuellColor.GetBlue() ) ); |
| aMtrFldColorModel4.SetValue( ColorToPercent_Impl( aAktuellColor.GetTransparency() ) ); |
| |
| // ItemSet fuellen und an XOut weiterleiten |
| rXFSet.Put( XFillColorItem( String(), pEntry->GetColor() ) ); |
| aCtlPreviewOld.SetAttributes( aXFillAttr.GetItemSet() ); |
| aCtlPreviewNew.SetAttributes( aXFillAttr.GetItemSet() ); |
| |
| aCtlPreviewNew.Invalidate(); |
| } |
| return( 0L ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| //void SvxColorTabPage::FillValueSet_Impl( ValueSet& rVs ) |
| //{ |
| // long nCount = maColorTab->Count(); |
| // XColorEntry* pColorEntry; |
| // |
| // for( long i = 0; i < nCount; i++ ) |
| // { |
| // pColorEntry = maColorTab->GetColor( i ); |
| // rVs.InsertItem( (sal_uInt16) i + 1, pColorEntry->GetColor(), pColorEntry->GetName() ); |
| // } |
| //} |
| |
| //------------------------------------------------------------------------ |
| |
| // Ein RGB-Wert wird in einen CMYK-Wert konvertiert, wobei die Color- |
| // Klasse vergewaltigt wird, da R in C, G in M und B in Y umgewandelt |
| // wird. Der Wert K wird in einer Extra-Variablen gehalten. |
| // Bei weiteren Farbmodellen sollte man hierfuer eigene Klassen entwickeln, |
| // die dann auch entsprechende Casts enthalten. |
| |
| void SvxColorTabPage::RgbToCmyk_Impl( Color& rColor, sal_uInt16& rK ) |
| { |
| sal_uInt16 nColor1, nColor2, nColor3; |
| sal_uInt16 nProzent; // nur temporaer !!! |
| |
| nColor1 = 255 - rColor.GetRed(); |
| nProzent = ColorToPercent_Impl( nColor1 ); |
| |
| nColor2 = 255 - rColor.GetGreen(); |
| nProzent = ColorToPercent_Impl( nColor2 ); |
| |
| nColor3 = 255 - rColor.GetBlue(); |
| nProzent = ColorToPercent_Impl( nColor3 ); |
| |
| rK = Min( Min( nColor1, nColor2 ), nColor3 ); |
| |
| rColor.SetRed( sal::static_int_cast< sal_uInt8 >( nColor1 - rK ) ); |
| rColor.SetGreen( sal::static_int_cast< sal_uInt8 >( nColor2 - rK ) ); |
| rColor.SetBlue( sal::static_int_cast< sal_uInt8 >( nColor3 - rK ) ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| // Umgekehrter Fall zu RgbToCmyk_Impl (s.o.) |
| |
| void SvxColorTabPage::CmykToRgb_Impl( Color& rColor, const sal_uInt16 nK ) |
| { |
| long lTemp; |
| |
| lTemp = 255 - ( rColor.GetRed() + nK ); |
| |
| if( lTemp < 0L ) |
| lTemp = 0L; |
| rColor.SetRed( (sal_uInt8)lTemp ); |
| |
| lTemp = 255 - ( rColor.GetGreen() + nK ); |
| |
| if( lTemp < 0L ) |
| lTemp = 0L; |
| rColor.SetGreen( (sal_uInt8)lTemp ); |
| |
| lTemp = 255 - ( rColor.GetBlue() + nK ); |
| |
| if( lTemp < 0L ) |
| lTemp = 0L; |
| rColor.SetBlue( (sal_uInt8)lTemp ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| sal_uInt16 SvxColorTabPage::ColorToPercent_Impl( sal_uInt16 nColor ) |
| { |
| sal_uInt16 nWert = 0; |
| |
| switch (eCM) |
| { |
| case CM_RGB : |
| nWert = nColor; |
| break; |
| |
| case CM_CMYK: |
| nWert = (sal_uInt16) ( (double) nColor * 100.0 / 255.0 + 0.5 ); |
| break; |
| } |
| |
| return ( nWert ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| sal_uInt16 SvxColorTabPage::PercentToColor_Impl( sal_uInt16 nPercent ) |
| { |
| sal_uInt16 nWert = 0; |
| |
| switch (eCM) |
| { |
| case CM_RGB : |
| nWert = nPercent; |
| break; |
| |
| case CM_CMYK: |
| nWert = (sal_uInt16) ( (double) nPercent * 255.0 / 100.0 + 0.5 ); |
| break; |
| } |
| |
| return ( nWert ); |
| } |
| |
| //------------------------------------------------------------------------ |
| |
| void SvxColorTabPage::FillUserData() |
| { |
| // Das Farbmodell wird in der Ini-Datei festgehalten |
| SetUserData( UniString::CreateFromInt32( eCM ) ); |
| } |
| |
| |