summaryrefslogtreecommitdiff
path: root/cui/source/options/optchart.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cui/source/options/optchart.cxx')
-rw-r--r--cui/source/options/optchart.cxx301
1 files changed, 301 insertions, 0 deletions
diff --git a/cui/source/options/optchart.cxx b/cui/source/options/optchart.cxx
new file mode 100644
index 000000000000..13b861f07187
--- /dev/null
+++ b/cui/source/options/optchart.cxx
@@ -0,0 +1,301 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <unotools/pathoptions.hxx>
+#include <cuires.hrc>
+#include "optchart.hxx"
+#include "optchart.hrc"
+#include <dialmgr.hxx>
+#include <vcl/msgbox.hxx>
+#include <svx/svxids.hrc> // for SID_SCH_EDITOPTIONS
+
+// ====================
+// class ChartColorLB
+// ====================
+void ChartColorLB::FillBox( const SvxChartColorTable & rTab )
+{
+ long nCount = rTab.size();
+ SetUpdateMode( sal_False );
+
+ for( long i = 0; i < nCount; i++ )
+ {
+ Append( const_cast< XColorEntry * >( & rTab[ i ] ));
+ }
+ SetUpdateMode( sal_True );
+}
+
+
+// ====================
+// class SvxDefaultColorOptPage
+// ====================
+SvxDefaultColorOptPage::SvxDefaultColorOptPage( Window* pParent, const SfxItemSet& rInAttrs ) :
+
+ SfxTabPage( pParent, CUI_RES( RID_OPTPAGE_CHART_DEFCOLORS ), rInAttrs ),
+
+ aGbChartColors ( this, CUI_RES( FL_CHART_COLOR_LIST ) ),
+ aLbChartColors ( this, CUI_RES( LB_CHART_COLOR_LIST ) ),
+ aGbColorBox ( this, CUI_RES( FL_COLOR_BOX ) ),
+ aValSetColorBox ( this, CUI_RES( CT_COLOR_BOX ) ),
+ aPBDefault ( this, CUI_RES( PB_RESET_TO_DEFAULT ) ),
+ aPBAdd ( this, CUI_RES( PB_ADD_CHART_COLOR ) ),
+ aPBRemove ( this, CUI_RES( PB_REMOVE_CHART_COLOR ) )
+{
+ FreeResource();
+
+ aPBDefault.SetClickHdl( LINK( this, SvxDefaultColorOptPage, ResetToDefaults ) );
+ aPBAdd.SetClickHdl( LINK( this, SvxDefaultColorOptPage, AddChartColor ) );
+ aPBRemove.SetClickHdl( LINK( this, SvxDefaultColorOptPage, RemoveChartColor ) );
+ aLbChartColors.SetSelectHdl( LINK( this, SvxDefaultColorOptPage, ListClickedHdl ) );
+ aValSetColorBox.SetSelectHdl( LINK( this, SvxDefaultColorOptPage, BoxClickedHdl ) );
+
+ aValSetColorBox.SetStyle( aValSetColorBox.GetStyle()
+ | WB_ITEMBORDER | WB_NAMEFIELD );
+ aValSetColorBox.SetColCount( 8 );
+ aValSetColorBox.SetLineCount( 13 );
+ aValSetColorBox.SetExtraSpacing( 0 );
+ aValSetColorBox.Show();
+
+ pChartOptions = new SvxChartOptions;
+ pColorTab = new XColorTable( SvtPathOptions().GetPalettePath() );
+
+ const SfxPoolItem* pItem = NULL;
+ if ( rInAttrs.GetItemState( SID_SCH_EDITOPTIONS, sal_False, &pItem ) == SFX_ITEM_SET )
+ {
+ pColorConfig = SAL_STATIC_CAST( SvxChartColorTableItem*, pItem->Clone() );
+ }
+ else
+ {
+ SvxChartColorTable aTable;
+ aTable.useDefault();
+ pColorConfig = new SvxChartColorTableItem( SID_SCH_EDITOPTIONS, aTable );
+ pColorConfig->SetOptions( pChartOptions );
+ }
+
+ Construct();
+}
+
+SvxDefaultColorOptPage::~SvxDefaultColorOptPage()
+{
+ // save changes
+ pChartOptions->SetDefaultColors( pColorConfig->GetColorTable() );
+ pChartOptions->Commit();
+
+ delete pColorConfig;
+ delete pColorTab;
+ delete pChartOptions;
+}
+
+void SvxDefaultColorOptPage::Construct()
+{
+ if( pColorConfig )
+ aLbChartColors.FillBox( pColorConfig->GetColorTable() );
+
+ FillColorBox();
+
+ aLbChartColors.SelectEntryPos( 0 );
+ ListClickedHdl( &aLbChartColors );
+}
+
+
+SfxTabPage* SvxDefaultColorOptPage::Create( Window* pParent, const SfxItemSet& rAttrs )
+{
+ return new SvxDefaultColorOptPage( pParent, rAttrs );
+}
+
+sal_Bool SvxDefaultColorOptPage::FillItemSet( SfxItemSet& rOutAttrs )
+{
+ if( pColorConfig )
+ rOutAttrs.Put( *SAL_STATIC_CAST( SfxPoolItem*, pColorConfig ));
+
+ return sal_True;
+}
+
+void SvxDefaultColorOptPage::Reset( const SfxItemSet& )
+{
+ aLbChartColors.SelectEntryPos( 0 );
+ ListClickedHdl( &aLbChartColors );
+}
+
+void SvxDefaultColorOptPage::FillColorBox()
+{
+ if( !pColorTab ) return;
+
+ long nCount = pColorTab->Count();
+ XColorEntry* pColorEntry;
+
+ if( nCount > 104 )
+ aValSetColorBox.SetStyle( aValSetColorBox.GetStyle() | WB_VSCROLL );
+
+ for( long i = 0; i < nCount; i++ )
+ {
+ pColorEntry = pColorTab->GetColor( i );
+ aValSetColorBox.InsertItem( (sal_uInt16) i + 1, pColorEntry->GetColor(), pColorEntry->GetName() );
+ }
+}
+
+
+long SvxDefaultColorOptPage::GetColorIndex( const Color& rCol )
+{
+ if( pColorTab )
+ {
+ long nCount = pColorTab->Count();
+ XColorEntry* pColorEntry;
+
+ for( long i = nCount - 1; i >= 0; i-- ) // default chart colors are at the end of the table
+ {
+ pColorEntry = pColorTab->GetColor( i );
+ if( pColorEntry && pColorEntry->GetColor() == rCol )
+ return SAL_STATIC_CAST( XPropertyTable*, pColorTab )->Get( pColorEntry->GetName() );
+ }
+ }
+ return -1L;
+}
+
+
+
+// --------------------
+// event handlers
+// --------------------
+
+// ResetToDefaults
+// ---------------
+
+IMPL_LINK( SvxDefaultColorOptPage, ResetToDefaults, void *, EMPTYARG )
+{
+ if( pColorConfig )
+ {
+ pColorConfig->GetColorTable().useDefault();
+
+ aLbChartColors.Clear();
+ aLbChartColors.FillBox( pColorConfig->GetColorTable() );
+
+ aLbChartColors.GetFocus();
+ aLbChartColors.SelectEntryPos( 0 );
+ }
+
+ return 0L;
+}
+
+// AddChartColor
+// ------------
+
+IMPL_LINK( SvxDefaultColorOptPage, AddChartColor, void *, EMPTYARG )
+{
+ if( pColorConfig )
+ {
+ ColorData black = RGB_COLORDATA( 0x00, 0x00, 0x00 );
+
+ pColorConfig->GetColorTable().append (XColorEntry ( black, pColorConfig->GetColorTable().getDefaultName(pColorConfig->GetColorTable().size())));
+
+ aLbChartColors.Clear();
+ aLbChartColors.FillBox( pColorConfig->GetColorTable() );
+
+ aLbChartColors.GetFocus();
+ aLbChartColors.SelectEntryPos( pColorConfig->GetColorTable().size() - 1 );
+ }
+
+ return 0L;
+}
+
+// RemoveChartColor
+// ----------------
+
+IMPL_LINK( SvxDefaultColorOptPage, RemoveChartColor, PushButton*, pButton )
+{
+ size_t nIndex = aLbChartColors.GetSelectEntryPos();
+
+ if (aLbChartColors.GetSelectEntryCount() == 0)
+ return 0L;
+
+ if( pColorConfig )
+ {
+ OSL_ENSURE(pColorConfig->GetColorTable().size() > 1, "don't delete the last chart color");
+ QueryBox aQuery(pButton, CUI_RES(RID_OPTQB_COLOR_CHART_DELETE));
+ aQuery.SetText(String(CUI_RES(RID_OPTSTR_COLOR_CHART_DELETE)));
+ if(RET_YES == aQuery.Execute())
+ {
+
+ pColorConfig->GetColorTable().remove( nIndex );
+
+ aLbChartColors.Clear();
+ aLbChartColors.FillBox( pColorConfig->GetColorTable() );
+
+ aLbChartColors.GetFocus();
+
+ if (nIndex == aLbChartColors.GetEntryCount() && aLbChartColors.GetEntryCount() > 0)
+ aLbChartColors.SelectEntryPos( pColorConfig->GetColorTable().size() - 1 );
+ else if (aLbChartColors.GetEntryCount() > 0)
+ aLbChartColors.SelectEntryPos( nIndex );
+ }
+ }
+
+ return 0L;
+}
+
+// ListClickedHdl
+// --------------
+
+IMPL_LINK( SvxDefaultColorOptPage, ListClickedHdl, ChartColorLB*, pColorList )
+{
+ Color aCol = pColorList->GetSelectEntryColor();
+
+ long nIndex = GetColorIndex( aCol );
+
+ if( nIndex == -1 ) // not found
+ {
+ aValSetColorBox.SetNoSelection();
+ }
+ else
+ {
+ aValSetColorBox.SelectItem( (sal_uInt16)nIndex + 1 ); // ValueSet is 1-based
+ }
+
+ return 0L;
+}
+
+// BoxClickedHdl
+// -------------
+
+IMPL_LINK( SvxDefaultColorOptPage, BoxClickedHdl, ValueSet*, EMPTYARG )
+{
+ sal_uInt16 nIdx = aLbChartColors.GetSelectEntryPos();
+ if( nIdx != LISTBOX_ENTRY_NOTFOUND )
+ {
+ XColorEntry aEntry( aValSetColorBox.GetItemColor( aValSetColorBox.GetSelectItemId() ),
+ aLbChartColors.GetSelectEntry() );
+
+ aLbChartColors.Modify( & aEntry, nIdx );
+ pColorConfig->ReplaceColorByIndex( nIdx, aEntry );
+
+ aLbChartColors.SelectEntryPos( nIdx ); // reselect entry
+ }
+
+ return 0L;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */