blob: 37186b087e0c281e8a8cb92392a528b73195da6c [file] [log] [blame]
/**************************************************************
*
* 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_sc.hxx"
#undef SC_DLLIMPLEMENTATION
//------------------------------------------------------------------
#include "tabbgcolordlg.hxx"
#include "scresid.hxx"
#include "miscdlgs.hrc"
#include <tools/debug.hxx>
#include <tools/color.hxx>
#include <sfx2/objsh.hxx>
#include <svx/xtable.hxx>
#include <svx/drawitem.hxx>
#include <unotools/pathoptions.hxx>
#include <tools/resid.hxx>
#include <editeng/editrids.hrc>
#include <editeng/eerdll.hxx>
#include <boost/scoped_ptr.hpp>
//==================================================================
#define HDL(hdl) LINK(this,ScTabBgColorDlg,hdl)
ScTabBgColorDlg::ScTabBgColorDlg( Window* pParent,
const String& rTitle,
const String& rTabBgColorNoColorText,
const Color& rDefaultColor,
const rtl::OString& sHelpId ) :
ModalDialog ( pParent, ScResId( RID_SCDLG_TAB_BG_COLOR ) ),
aBorderWin ( this, ScResId( TAB_BG_COLOR_CT_BORDER ) ),
aTabBgColorSet ( &aBorderWin, ScResId( TAB_BG_COLOR_SET_BGDCOLOR ), this ),
aBtnOk ( this, ScResId( BTN_OK ) ),
aBtnCancel ( this, ScResId( BTN_CANCEL ) ),
aBtnHelp ( this, ScResId( BTN_HELP ) ),
aTabBgColor ( rDefaultColor ),
aTabBgColorNoColorText ( rTabBgColorNoColorText ),
msHelpId ( sHelpId )
{
SetHelpId( sHelpId );
this->SetText( rTitle );
this->SetStyle(GetStyle() | WB_BORDER | WB_STDFLOATWIN | WB_3DLOOK | WB_DIALOGCONTROL | WB_SYSTEMWINDOW | WB_STANDALONE | WB_HIDE);
FillColorValueSets_Impl();
aTabBgColorSet.SetDoubleClickHdl( HDL(TabBgColorDblClickHdl_Impl) );
aBtnOk.SetClickHdl( HDL(TabBgColorOKHdl_Impl) );
FreeResource();
}
//------------------------------------------------------------------------
void ScTabBgColorDlg::GetSelectedColor( Color& rColor ) const
{
rColor = this->aTabBgColor;
}
ScTabBgColorDlg::~ScTabBgColorDlg()
{
}
void ScTabBgColorDlg::FillColorValueSets_Impl()
{
SfxObjectShell* pDocSh = SfxObjectShell::Current();
const SfxPoolItem* pItem = NULL;
XColorTable* pColorTable = NULL;
::boost::scoped_ptr<XColorTable> pOwnColorTable; // locally instantiated in case the doc shell doesn't have one.
const Size aSize15x15 = Size( 15, 15 );
const Size aSize10x10 = Size( 10, 10 );
const Size aSize5x5 = Size( 5, 5 );
sal_uInt16 nSelectedItem = 0;
DBG_ASSERT( pDocSh, "DocShell not found!" );
if ( pDocSh && ( 0 != ( pItem = pDocSh->GetItem(SID_COLOR_TABLE) ) ) )
pColorTable = ( (SvxColorTableItem*)pItem )->GetColorTable();
if ( !pColorTable )
{
pOwnColorTable.reset(new XColorTable(SvtPathOptions().GetPalettePath()));
pColorTable = pOwnColorTable.get();
}
if ( pColorTable )
{
sal_uInt16 i = 0;
long nCount = pColorTable->Count();
XColorEntry* pEntry = NULL;
Color aColWhite( COL_WHITE );
String aStrWhite( EditResId( RID_SVXITEMS_COLOR_WHITE ) );
WinBits nBits = ( aTabBgColorSet.GetStyle() | WB_NAMEFIELD | WB_ITEMBORDER | WB_NONEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT | WB_NOPOINTERFOCUS);
aTabBgColorSet.SetText( aTabBgColorNoColorText );
aTabBgColorSet.SetStyle( nBits );
for ( i = 0; i < nCount; i++ )
{
pEntry = pColorTable->GetColor(i);
aTabBgColorSet.InsertItem( i + 1, pEntry->GetColor(), pEntry->GetName() );
if (pEntry->GetColor() == aTabBgColor)
nSelectedItem = (i + 1);
}
while ( i < 80 )
{
aTabBgColorSet.InsertItem( i + 1, aColWhite, aStrWhite );
i++;
}
if ( nCount > 80 )
{
aTabBgColorSet.SetStyle( nBits | WB_VSCROLL );
}
}
aTabBgColorSet.SetColCount( 10 );
aTabBgColorSet.SetLineCount( 10 );
aTabBgColorSet.CalcWindowSizePixel( aSize15x15 );
aTabBgColorSet.Format();
aTabBgColorSet.SelectItem(nSelectedItem);
aTabBgColorSet.Resize();
}
IMPL_LINK( ScTabBgColorDlg, TabBgColorDblClickHdl_Impl, ValueSet*, EMPTYARG )
/*
Handler, called when color selection is changed
*/
{
sal_uInt16 nItemId = aTabBgColorSet.GetSelectItemId();
Color aColor = nItemId ? ( aTabBgColorSet.GetItemColor( nItemId ) ) : Color( COL_AUTO );
aTabBgColor = aColor;
EndDialog( sal_True );
return 0;
}
IMPL_LINK( ScTabBgColorDlg, TabBgColorOKHdl_Impl, OKButton*, EMPTYARG )
{
// Handler, called when the OK button is pushed
sal_uInt16 nItemId = aTabBgColorSet.GetSelectItemId();
Color aColor = nItemId ? ( aTabBgColorSet.GetItemColor( nItemId ) ) : Color( COL_AUTO );
aTabBgColor = aColor;
EndDialog( sal_True );
return 0;
}
ScTabBgColorDlg::ScTabBgColorValueSet::ScTabBgColorValueSet( Control* pParent, const ResId& rResId, ScTabBgColorDlg* pTabBgColorDlg ) :
ValueSet(pParent, rResId)
{
aTabBgColorDlg = pTabBgColorDlg;
}
void ScTabBgColorDlg::ScTabBgColorValueSet::KeyInput( const KeyEvent& rKEvt )
{
switch ( rKEvt.GetKeyCode().GetCode() )
{
case KEY_SPACE:
case KEY_RETURN:
{
sal_uInt16 nItemId = GetSelectItemId();
const Color& aColor = nItemId ? ( GetItemColor( nItemId ) ) : Color( COL_AUTO );
aTabBgColorDlg->aTabBgColor = aColor;
aTabBgColorDlg->EndDialog(sal_True);
}
break;
}
ValueSet::KeyInput(rKEvt);
}