summaryrefslogtreecommitdiffstats
path: root/vbahelper/source/msforms/vbacombobox.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vbahelper/source/msforms/vbacombobox.cxx')
-rw-r--r--vbahelper/source/msforms/vbacombobox.cxx306
1 files changed, 306 insertions, 0 deletions
diff --git a/vbahelper/source/msforms/vbacombobox.cxx b/vbahelper/source/msforms/vbacombobox.cxx
new file mode 100644
index 000000000..07c937ccb
--- /dev/null
+++ b/vbahelper/source/msforms/vbacombobox.cxx
@@ -0,0 +1,306 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * 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 .
+ */
+
+#include "vbacombobox.hxx"
+#include <comphelper/sequence.hxx>
+#include "vbanewfont.hxx"
+#include <ooo/vba/msforms/fmStyle.hpp>
+#include <ooo/vba/msforms/fmDropButtonStyle.hpp>
+#include <ooo/vba/msforms/fmDragBehavior.hpp>
+#include <ooo/vba/msforms/fmEnterFieldBehavior.hpp>
+#include <ooo/vba/msforms/fmListStyle.hpp>
+#include <ooo/vba/msforms/fmTextAlign.hpp>
+#include <sal/log.hxx>
+
+using namespace com::sun::star;
+using namespace ooo::vba;
+
+
+//SelectedItems list of integer indexes
+//StringItemList list of items
+
+ScVbaComboBox::ScVbaComboBox( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< uno::XInterface >& xControl, const uno::Reference< frame::XModel >& xModel, std::unique_ptr<ov::AbstractGeometryAttributes> pGeomHelper )
+ : ComboBoxImpl_BASE( xParent, xContext, xControl, xModel, std::move(pGeomHelper) )
+{
+ mpListHelper.reset( new ListControlHelper( m_xProps ) );
+ try
+ {
+ // grab the default value property name
+ m_xProps->getPropertyValue( "DataFieldProperty" ) >>= sSourceName;
+ }
+ catch( uno::Exception& )
+ {
+ }
+ if( sSourceName.isEmpty() )
+ sSourceName = "Text";
+}
+
+// Attributes
+
+
+// Value, [read] e.g. getValue returns the value of ooo Text property e.g. the value in
+// the drop down
+uno::Any SAL_CALL
+ScVbaComboBox::getValue()
+{
+ return m_xProps->getPropertyValue( sSourceName );
+}
+
+void SAL_CALL
+ScVbaComboBox::setListIndex( const uno::Any& _value )
+{
+ sal_Int16 nIndex = 0;
+ if( _value >>= nIndex )
+ {
+ sal_Int32 nOldIndex = -1;
+ getListIndex() >>= nOldIndex;
+ uno::Sequence< OUString > sItems;
+ m_xProps->getPropertyValue( "StringItemList" ) >>= sItems;
+ if( ( nIndex >= 0 ) && ( sItems.getLength() > nIndex ) )
+ {
+ OUString sText = sItems[ nIndex ];
+ m_xProps->setPropertyValue( "Text", uno::makeAny( sText ) );
+
+ // fire the _Change event
+ if( nOldIndex != nIndex )
+ fireClickEvent();
+ }
+ }
+}
+
+uno::Any SAL_CALL
+ScVbaComboBox::getListIndex()
+{
+ uno::Sequence< OUString > sItems;
+ m_xProps->getPropertyValue( "StringItemList" ) >>= sItems;
+ // should really return the item that has focus regardless of
+ // it been selected
+ if ( sItems.hasElements() )
+ {
+ OUString sText = getText();
+ if (!sText.isEmpty())
+ {
+ sal_Int32 index = comphelper::findValue(sItems, sText);
+ if (index != -1)
+ {
+ SAL_INFO("vbahelper", "getListIndex returning " << index );
+ return uno::makeAny( index );
+ }
+ }
+ }
+ SAL_INFO("vbahelper", "getListIndex returning -1" );
+ return uno::makeAny( sal_Int32( -1 ) );
+}
+
+// Value, [write]e.g. setValue sets the value in the drop down, and if the value is one
+// of the values in the list then the selection is also set
+void SAL_CALL
+ScVbaComboBox::setValue( const uno::Any& _value )
+{
+ // booleans are converted to uppercase strings
+ OUString oldValue = extractStringFromAny( getValue(), OUString(), true );
+ m_xProps->setPropertyValue( sSourceName, uno::Any( extractStringFromAny( _value, OUString(), true ) ) );
+ OUString newValue = extractStringFromAny( getValue(), OUString(), true );
+ if ( oldValue != newValue )
+ {
+ sal_Int32 index = 0;
+ uno::Any aIndex = getListIndex();
+ aIndex >>= index;
+ if ( index < 0 )
+ fireChangeEvent();
+ else
+ fireClickEvent();
+ }
+}
+
+// see Value
+
+OUString SAL_CALL
+ScVbaComboBox::getText()
+{
+ OUString result;
+ getValue() >>= result;
+ return result;
+}
+
+void SAL_CALL
+ScVbaComboBox::setText( const OUString& _text )
+{
+ setValue( uno::makeAny( _text ) ); // seems the same
+}
+
+// Methods
+void SAL_CALL
+ScVbaComboBox::AddItem( const uno::Any& pvargItem, const uno::Any& pvargIndex )
+{
+ mpListHelper->AddItem( pvargItem, pvargIndex );
+}
+
+void SAL_CALL
+ScVbaComboBox::removeItem( const uno::Any& index )
+{
+ mpListHelper->removeItem( index );
+}
+
+void SAL_CALL
+ScVbaComboBox::Clear( )
+{
+ mpListHelper->Clear();
+}
+
+void SAL_CALL
+ScVbaComboBox::setRowSource( const OUString& _rowsource )
+{
+ ScVbaControl::setRowSource( _rowsource );
+ mpListHelper->setRowSource( _rowsource );
+}
+
+sal_Int32 SAL_CALL
+ScVbaComboBox::getListCount()
+{
+ return mpListHelper->getListCount();
+}
+
+uno::Any SAL_CALL
+ScVbaComboBox::List( const ::uno::Any& pvargIndex, const uno::Any& pvarColumn )
+{
+ return mpListHelper->List( pvargIndex, pvarColumn );
+}
+
+sal_Int32 SAL_CALL ScVbaComboBox::getStyle()
+{
+ return msforms::fmStyle::fmStyleDropDownCombo;
+}
+
+void SAL_CALL ScVbaComboBox::setStyle( sal_Int32 /*nStyle*/ )
+{
+}
+
+sal_Int32 SAL_CALL ScVbaComboBox::getDropButtonStyle()
+{
+ return msforms::fmDropButtonStyle::fmDropButtonStyleArrow;
+}
+
+void SAL_CALL ScVbaComboBox::setDropButtonStyle( sal_Int32 /*nDropButtonStyle*/ )
+{
+}
+
+sal_Int32 SAL_CALL ScVbaComboBox::getDragBehavior()
+{
+ return msforms::fmDragBehavior::fmDragBehaviorDisabled;
+}
+
+void SAL_CALL ScVbaComboBox::setDragBehavior( sal_Int32 /*nDragBehavior*/ )
+{
+}
+
+sal_Int32 SAL_CALL ScVbaComboBox::getEnterFieldBehavior()
+{
+ return msforms::fmEnterFieldBehavior::fmEnterFieldBehaviorSelectAll;
+}
+
+void SAL_CALL ScVbaComboBox::setEnterFieldBehavior( sal_Int32 /*nEnterFieldBehavior*/ )
+{
+}
+
+sal_Int32 SAL_CALL ScVbaComboBox::getListStyle()
+{
+ return msforms::fmListStyle::fmListStylePlain;
+}
+
+void SAL_CALL ScVbaComboBox::setListStyle( sal_Int32 /*nListStyle*/ )
+{
+}
+
+sal_Int32 SAL_CALL ScVbaComboBox::getTextAlign()
+{
+ return msforms::fmTextAlign::fmTextAlignLeft;
+}
+
+void SAL_CALL ScVbaComboBox::setTextAlign( sal_Int32 /*nTextAlign*/ )
+{
+}
+
+sal_Int32 SAL_CALL ScVbaComboBox::getTextLength()
+{
+ return getText().getLength();
+}
+
+uno::Reference< msforms::XNewFont > SAL_CALL ScVbaComboBox::getFont()
+{
+ return new VbaNewFont( m_xProps );
+}
+
+OUString
+ScVbaComboBox::getServiceImplName()
+{
+ return "ScVbaComboBox";
+}
+
+sal_Int32 SAL_CALL ScVbaComboBox::getBackColor()
+{
+ return ScVbaControl::getBackColor();
+}
+
+void SAL_CALL ScVbaComboBox::setBackColor( sal_Int32 nBackColor )
+{
+ ScVbaControl::setBackColor( nBackColor );
+}
+
+sal_Bool SAL_CALL ScVbaComboBox::getAutoSize()
+{
+ return ScVbaControl::getAutoSize();
+}
+
+void SAL_CALL ScVbaComboBox::setAutoSize( sal_Bool bAutoSize )
+{
+ ScVbaControl::setAutoSize( bAutoSize );
+}
+
+sal_Bool SAL_CALL ScVbaComboBox::getLocked()
+{
+ return ScVbaControl::getLocked();
+}
+
+void SAL_CALL ScVbaComboBox::setLocked( sal_Bool bLocked )
+{
+ ScVbaControl::setLocked( bLocked );
+}
+
+OUString SAL_CALL ScVbaComboBox::getLinkedCell()
+{
+ return ScVbaControl::getControlSource();
+}
+
+void SAL_CALL ScVbaComboBox::setLinkedCell( const OUString& _linkedcell )
+{
+ ScVbaControl::setControlSource( _linkedcell );
+}
+
+uno::Sequence< OUString >
+ScVbaComboBox::getServiceNames()
+{
+ static uno::Sequence< OUString > const aServiceNames
+ {
+ "ooo.vba.msforms.ComboBox"
+ };
+ return aServiceNames;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */