summaryrefslogtreecommitdiff
path: root/extensions/source/propctrlr/standardcontrol.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/source/propctrlr/standardcontrol.cxx')
-rw-r--r--extensions/source/propctrlr/standardcontrol.cxx109
1 files changed, 100 insertions, 9 deletions
diff --git a/extensions/source/propctrlr/standardcontrol.cxx b/extensions/source/propctrlr/standardcontrol.cxx
index 7d422966aff4..ca2412f9dbad 100644
--- a/extensions/source/propctrlr/standardcontrol.cxx
+++ b/extensions/source/propctrlr/standardcontrol.cxx
@@ -657,50 +657,141 @@ namespace pcr
return aStr.makeStringAndClear();
}
+
OColorControl::OColorControl(vcl::Window* pParent, WinBits nWinStyle)
- : OColorControl_Base(PropertyControlType::ColorListBox, pParent, nWinStyle)
+ :OColorControl_Base( PropertyControlType::ColorListBox, pParent, nWinStyle )
{
+ // initialize the color listbox
+ XColorListRef pColorList;
+ SfxObjectShell* pDocSh = SfxObjectShell::Current();
+ const SfxPoolItem* pItem = pDocSh ? pDocSh->GetItem( SID_COLOR_TABLE ) : nullptr;
+ if ( pItem )
+ {
+ DBG_ASSERT(dynamic_cast< const SvxColorListItem* >(pItem) != nullptr, "OColorControl::OColorControl: invalid color item!");
+ pColorList = static_cast<const SvxColorListItem*>( pItem )->GetColorList();
+ }
+
+ if ( !pColorList.is() )
+ pColorList = XColorList::GetStdColorList();
+
+
+ DBG_ASSERT(pColorList.is(), "OColorControl::OColorControl: no color table!");
+
+ if ( pColorList.is() )
+ {
+ for (long i = 0; i < pColorList->Count(); ++i)
+ {
+ const XColorEntry* pEntry = pColorList->GetColor(i);
+ getTypedControlWindow()->InsertEntry( pEntry->GetColor(), pEntry->GetName() );
+ }
+ }
+
+ getTypedControlWindow()->SetDropDownLineCount( LB_DEFAULT_COUNT );
+ if ( ( nWinStyle & WB_READONLY ) != 0 )
+ {
+ getTypedControlWindow()->SetReadOnly();
+ getTypedControlWindow()->Enable();
+ }
}
+
void SAL_CALL OColorControl::setValue( const Any& _rValue ) throw (IllegalTypeException, RuntimeException, std::exception)
{
if ( _rValue.hasValue() )
{
css::util::Color nColor = COL_TRANSPARENT;
- _rValue >>= nColor;
- ::Color aRgbCol((ColorData)nColor);
- getTypedControlWindow()->SelectEntry(std::make_pair(aRgbCol, MakeHexStr(nColor, 8)));
+ if ( _rValue >>= nColor )
+ {
+ ::Color aRgbCol((ColorData)nColor);
+
+ getTypedControlWindow()->SelectEntry( aRgbCol );
+ if ( !getTypedControlWindow()->IsEntrySelected( aRgbCol ) )
+ { // the given color is not part of the list -> insert a new entry with the hex code of the color
+ OUString aStr("0x");
+ aStr += MakeHexStr(nColor,8);
+ getTypedControlWindow()->InsertEntry( aRgbCol, aStr );
+ getTypedControlWindow()->SelectEntry( aRgbCol );
+ }
+ }
+ else
+ {
+ OUString sNonColorValue;
+ if ( !( _rValue >>= sNonColorValue ) )
+ throw IllegalTypeException();
+ getTypedControlWindow()->SelectEntry( sNonColorValue );
+ if ( !getTypedControlWindow()->IsEntrySelected( sNonColorValue ) )
+ getTypedControlWindow()->SetNoSelection();
+ }
}
else
getTypedControlWindow()->SetNoSelection();
}
+
Any SAL_CALL OColorControl::getValue() throw (RuntimeException, std::exception)
{
Any aPropValue;
- if (!getTypedControlWindow()->IsNoSelection())
+ if ( getTypedControlWindow()->GetSelectEntryCount() > 0 )
{
- ::Color aRgbCol = getTypedControlWindow()->GetSelectEntryColor();
- aPropValue <<= (css::util::Color)aRgbCol.GetColor();
+ OUString sSelectedEntry = getTypedControlWindow()->GetSelectEntry();
+ if ( m_aNonColorEntries.find( sSelectedEntry ) != m_aNonColorEntries.end() )
+ aPropValue <<= sSelectedEntry;
+ else
+ {
+ ::Color aRgbCol = getTypedControlWindow()->GetSelectEntryColor();
+ aPropValue <<= (css::util::Color)aRgbCol.GetColor();
+ }
}
return aPropValue;
}
+
Type SAL_CALL OColorControl::getValueType() throw (RuntimeException, std::exception)
{
return ::cppu::UnoType<sal_Int32>::get();
}
+
+ void SAL_CALL OColorControl::clearList() throw (RuntimeException, std::exception)
+ {
+ getTypedControlWindow()->Clear();
+ }
+
+
+ void SAL_CALL OColorControl::prependListEntry( const OUString& NewEntry ) throw (RuntimeException, std::exception)
+ {
+ getTypedControlWindow()->InsertEntry( NewEntry, 0 );
+ m_aNonColorEntries.insert( NewEntry );
+ }
+
+
+ void SAL_CALL OColorControl::appendListEntry( const OUString& NewEntry ) throw (RuntimeException, std::exception)
+ {
+ getTypedControlWindow()->InsertEntry( NewEntry );
+ m_aNonColorEntries.insert( NewEntry );
+ }
+
+ Sequence< OUString > SAL_CALL OColorControl::getListEntries( ) throw (RuntimeException, std::exception)
+ {
+ if ( !m_aNonColorEntries.empty() )
+ return Sequence< OUString >(&(*m_aNonColorEntries.begin()),m_aNonColorEntries.size());
+ return Sequence< OUString >();
+ }
+
+
void OColorControl::setModified()
{
OColorControl_Base::setModified();
- // fire a commit
- notifyModifiedValue();
+ if ( !getTypedControlWindow()->IsTravelSelect() )
+ // fire a commit
+ notifyModifiedValue();
}
+
//= OListboxControl
+
OListboxControl::OListboxControl( vcl::Window* pParent, WinBits nWinStyle)
:OListboxControl_Base( PropertyControlType::ListBox, pParent, nWinStyle )
{