From f5510bd3aad40b3e0f7b699ca2bbc60dc9a67fc3 Mon Sep 17 00:00:00 2001 From: "Ocke Janssen [oj]" Date: Mon, 22 Mar 2010 10:20:40 +0100 Subject: [PATCH 1/5] os141: allow tabstop also for treecontrols --- xmlscript/source/xmldlg_imexp/xmldlg_expmodels.cxx | 2 ++ xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx | 3 +++ 2 files changed, 5 insertions(+) diff --git a/xmlscript/source/xmldlg_imexp/xmldlg_expmodels.cxx b/xmlscript/source/xmldlg_imexp/xmldlg_expmodels.cxx index 55b46edc1392..f01040bb8510 100644 --- a/xmlscript/source/xmldlg_imexp/xmldlg_expmodels.cxx +++ b/xmlscript/source/xmldlg_imexp/xmldlg_expmodels.cxx @@ -653,6 +653,8 @@ void ElementDescriptor::readTreeControlModel( StyleBag * all_styles ) // collect elements readDefaults(); + readBoolAttr( OUString( RTL_CONSTASCII_USTRINGPARAM("Tabstop") ), + OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":tabstop") ) ); readSelectionTypeAttr( OUString( RTL_CONSTASCII_USTRINGPARAM("SelectionType") ), OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_DIALOGS_PREFIX ":selectiontype") ) ); diff --git a/xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx b/xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx index e3bce073b0b1..a0968eb007d5 100644 --- a/xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx +++ b/xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx @@ -930,6 +930,9 @@ void TreeControlElement::endElement() } ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes ); + ctx.importBooleanProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("Tabstop") ), + OUString( RTL_CONSTASCII_USTRINGPARAM("tabstop") ), + _xAttributes ); ctx.importSelectionTypeProperty( OUString( RTL_CONSTASCII_USTRINGPARAM("SelectionType") ), OUString( RTL_CONSTASCII_USTRINGPARAM("selectiontype") ), _xAttributes ); From 97d660c190e87d2c8e1b0ccdfd106b30486219c3 Mon Sep 17 00:00:00 2001 From: "Frank Schoenheit [fs]" Date: Tue, 25 May 2010 10:17:24 +0200 Subject: [PATCH 2/5] unoawt: completely separated the controller functionality of a wizard page from the wizard page itself, by moving the canAdvance method from OWizardPage to the IWizardPage interface, which in this course has been renamed to IWizardPageController. This will later on allow to have implementations where the TabPage is provided by an external component (e.g. as UNO Service), but the controlling of those pages is still intercepted and handled internally. --- desktop/source/migration/pages.cxx | 16 ++++++++-------- desktop/source/migration/pages.hxx | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/desktop/source/migration/pages.cxx b/desktop/source/migration/pages.cxx index 11cc61ed84ff..53ec488c2082 100644 --- a/desktop/source/migration/pages.cxx +++ b/desktop/source/migration/pages.cxx @@ -357,9 +357,9 @@ MigrationPage::MigrationPage( m_ftBody.SetText( aText ); } -sal_Bool MigrationPage::commitPage( CommitPageReason _eReason ) +sal_Bool MigrationPage::commitPage( svt::WizardTypes::CommitPageReason _eReason ) { - if (_eReason == eTravelForward && m_cbMigration.IsChecked() && !m_bMigrationDone) + if (_eReason == svt::WizardTypes::eTravelForward && m_cbMigration.IsChecked() && !m_bMigrationDone) { GetParent()->EnterWait(); FirstStartWizard* pWizard = dynamic_cast< FirstStartWizard* >( GetParent() ); @@ -433,7 +433,7 @@ UserPage::UserPage( svt::OWizardMachine* parent, const ResId& resid) } } -sal_Bool UserPage::commitPage( CommitPageReason ) +sal_Bool UserPage::commitPage( svt::WizardTypes::CommitPageReason ) { SvtUserOptions aUserOpt; aUserOpt.SetFirstName(m_edFirst.GetText()); @@ -463,9 +463,9 @@ UpdateCheckPage::UpdateCheckPage( svt::OWizardMachine* parent, const ResId& resi _setBold(m_ftHead); } -sal_Bool UpdateCheckPage::commitPage( CommitPageReason _eReason ) +sal_Bool UpdateCheckPage::commitPage( svt::WizardTypes::CommitPageReason _eReason ) { - if ( _eReason == eTravelForward ) + if ( _eReason == svt::WizardTypes::eTravelForward ) { try { Reference < XNameReplace > xUpdateAccess; @@ -589,9 +589,9 @@ void RegistrationPage::updateButtonStates() m_rbNever.Show( m_bNeverVisible ); } -sal_Bool RegistrationPage::commitPage( CommitPageReason _eReason ) +sal_Bool RegistrationPage::commitPage( svt::WizardTypes::CommitPageReason _eReason ) { - if ( _eReason == eFinish ) + if ( _eReason == svt::WizardTypes::eFinish ) { ::utl::RegOptions aOptions; rtl::OUString aEvent; @@ -665,7 +665,7 @@ void RegistrationPage::executeSingleMode() // the registration modes "Now" and "Later" are handled by the page RegistrationPage::RegistrationMode eMode = pPage->getRegistrationMode(); if ( eMode == RegistrationPage::rmNow || eMode == RegistrationPage::rmLater ) - pPage->commitPage( IWizardPage::eFinish ); + pPage->commitPage( WizardTypes::eFinish ); if ( eMode != RegistrationPage::rmLater ) ::utl::RegOptions().removeReminder(); } diff --git a/desktop/source/migration/pages.hxx b/desktop/source/migration/pages.hxx index 9740773fe602..776268eb475c 100644 --- a/desktop/source/migration/pages.hxx +++ b/desktop/source/migration/pages.hxx @@ -125,7 +125,7 @@ private: ::com::sun::star::uno::Reference< ::com::sun::star::awt::XThrobber > m_xThrobber; public: MigrationPage( svt::OWizardMachine* parent, const ResId& resid, ::com::sun::star::uno::Reference< ::com::sun::star::awt::XThrobber > xThrobber ); - virtual sal_Bool commitPage( CommitPageReason _eReason ); + virtual sal_Bool commitPage( svt::WizardTypes::CommitPageReason _eReason ); protected: virtual void ActivatePage(); @@ -148,7 +148,7 @@ private: public: UserPage( svt::OWizardMachine* parent, const ResId& resid); - virtual sal_Bool commitPage( CommitPageReason _eReason ); + virtual sal_Bool commitPage( svt::WizardTypes::CommitPageReason _eReason ); protected: virtual void ActivatePage(); }; @@ -161,7 +161,7 @@ private: CheckBox m_cbUpdateCheck; public: UpdateCheckPage( svt::OWizardMachine* parent, const ResId& resid); - virtual sal_Bool commitPage( CommitPageReason _eReason ); + virtual sal_Bool commitPage( svt::WizardTypes::CommitPageReason _eReason ); protected: virtual void ActivatePage(); @@ -188,7 +188,7 @@ protected: virtual bool canAdvance() const; virtual void ActivatePage(); - virtual sal_Bool commitPage( CommitPageReason _eReason ); + virtual sal_Bool commitPage( svt::WizardTypes::CommitPageReason _eReason ); public: RegistrationPage( Window* parent, const ResId& resid); From 3cba76a2125eaa40e5b9fce061713190ec0469d3 Mon Sep 17 00:00:00 2001 From: "Frank Schoenheit [fs]" Date: Tue, 25 May 2010 11:43:39 +0200 Subject: [PATCH 3/5] unoawt: onFinish does not need this parameter, it's always called with RET_OK --- desktop/source/migration/wizard.cxx | 4 ++-- desktop/source/migration/wizard.hxx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/desktop/source/migration/wizard.cxx b/desktop/source/migration/wizard.cxx index 48ee2abc71ca..0bd60f0f1454 100644 --- a/desktop/source/migration/wizard.cxx +++ b/desktop/source/migration/wizard.cxx @@ -439,10 +439,10 @@ sal_Bool FirstStartWizard::leaveState(WizardState) return sal_True; } -sal_Bool FirstStartWizard::onFinish(sal_Int32 _nResult) +sal_Bool FirstStartWizard::onFinish() { // return sal_True; - if (svt::RoadmapWizard::onFinish(_nResult)) + if ( svt::RoadmapWizard::onFinish() ) { #ifndef OS2 // cannot enable quickstart on first startup, see shutdownicon.cxx comments. enableQuickstart(); diff --git a/desktop/source/migration/wizard.hxx b/desktop/source/migration/wizard.hxx index e41bfe373cde..7919cc1c58a0 100644 --- a/desktop/source/migration/wizard.hxx +++ b/desktop/source/migration/wizard.hxx @@ -97,7 +97,7 @@ protected: virtual TabPage* createPage(WizardState _nState); virtual sal_Bool prepareLeaveCurrentState( CommitPageReason _eReason ); virtual sal_Bool leaveState(WizardState _nState ); - virtual sal_Bool onFinish(sal_Int32 _nResult); + virtual sal_Bool onFinish(); virtual void enterState(WizardState _nState); // from svt::RoadmapWizard From f931a012e6d488689893a530a4187738f6db0323 Mon Sep 17 00:00:00 2001 From: "Frank Schoenheit [fs]" Date: Tue, 25 May 2010 15:06:56 +0200 Subject: [PATCH 4/5] unoawt: don't let undeclared exceptions escape from createDialogImpl (at least not from calling createDialogModelForBasic/createDialogModel) --- scripting/source/dlgprov/dlgprov.cxx | 31 ++++++++++++++++------------ 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/scripting/source/dlgprov/dlgprov.cxx b/scripting/source/dlgprov/dlgprov.cxx index c372e1f660af..aa6c6cfb966a 100644 --- a/scripting/source/dlgprov/dlgprov.cxx +++ b/scripting/source/dlgprov/dlgprov.cxx @@ -28,26 +28,22 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_scripting.hxx" -#ifndef SCRIPTING_DLGPROV_HXX #include "dlgprov.hxx" -#endif #include "dlgevtatt.hxx" #include #include -#ifndef _COM_SUN_STAR_IO_XINPUTSTREAMPROVIDER_HXX_ #include -#endif #include +#include #include -#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_HXX_ #include -#endif +#include #include #include #include #include #include -#include "com/sun/star/resource/XStringResourceWithLocation.hpp" +#include #include #include #include @@ -691,13 +687,22 @@ static ::rtl::OUString aResourceResolverPropName = ::rtl::OUString::createFromAs //Reference< XDialog > xDialog; Reference< XControl > xCtrl; Reference< XControlModel > xCtrlMod; - // add support for basic RTL_FUNCTION - if ( m_BasicInfo.get() ) - xCtrlMod = createDialogModelForBasic(); - else + try { - OSL_ENSURE( URL.getLength(), "DialogProviderImpl::getDialog: no URL!" ); - xCtrlMod = createDialogModel( URL ); + // add support for basic RTL_FUNCTION + if ( m_BasicInfo.get() ) + xCtrlMod = createDialogModelForBasic(); + else + { + OSL_ENSURE( URL.getLength(), "DialogProviderImpl::getDialog: no URL!" ); + xCtrlMod = createDialogModel( URL ); + } + } + catch ( const RuntimeException& ) { throw; } + catch ( const Exception& ) + { + const Any aError( ::cppu::getCaughtException() ); + throw WrappedTargetRuntimeException( ::rtl::OUString(), *this, aError ); } if ( xCtrlMod.is() ) { From ee4b7a5e46e5db850f77adfa42c0137accb65e98 Mon Sep 17 00:00:00 2001 From: sb Date: Wed, 24 Mar 2010 09:48:47 +0100 Subject: [PATCH 5/5] sb121: #i110258# when parsing .xcs, conservatively merge new templates/components into existing instances (to not let extension update fail) --- configmgr/source/xcsparser.cxx | 87 ++++++++++++++++++++++++++++++---- 1 file changed, 79 insertions(+), 8 deletions(-) diff --git a/configmgr/source/xcsparser.cxx b/configmgr/source/xcsparser.cxx index 15141844a276..4de9973594c1 100644 --- a/configmgr/source/xcsparser.cxx +++ b/configmgr/source/xcsparser.cxx @@ -60,6 +60,63 @@ namespace { namespace css = com::sun::star; +// Conservatively merge a template or component (and its recursive parts) into +// an existing instance: +void merge( + rtl::Reference< Node > const & original, + rtl::Reference< Node > const & update) +{ + OSL_ASSERT( + original.is() && update.is() && original->kind() == update->kind() && + update->getFinalized() == Data::NO_LAYER); + if (update->getLayer() >= original->getLayer() && + update->getLayer() <= original->getFinalized()) + { + switch (original->kind()) { + case Node::KIND_PROPERTY: + case Node::KIND_LOCALIZED_PROPERTY: + case Node::KIND_LOCALIZED_VALUE: + break; //TODO: merge certain parts? + case Node::KIND_GROUP: + if (dynamic_cast< GroupNode * >(original.get())->isExtensible()) { + for (NodeMap::iterator i2(update->getMembers().begin()); + i2 != update->getMembers().end(); ++i2) + { + NodeMap::iterator i1( + original->getMembers().find(i2->first)); + if (i1 == original->getMembers().end()) { + if (i2->second->kind() == Node::KIND_PROPERTY) { + original->getMembers().insert(*i2); + } + } else if (i2->second->kind() == i1->second->kind()) { + merge(i1->second, i2->second); + } + } + } + break; + case Node::KIND_SET: + for (NodeMap::iterator i2(update->getMembers().begin()); + i2 != update->getMembers().end(); ++i2) + { + NodeMap::iterator i1(original->getMembers().find(i2->first)); + if (i1 == original->getMembers().end()) { + if (dynamic_cast< SetNode * >(original.get())-> + isValidTemplate(i2->second->getTemplateName())) + { + original->getMembers().insert(*i2); + } + } else if (i2->second->kind() == i1->second->kind() && + (i2->second->getTemplateName() == + i1->second->getTemplateName())) + { + merge(i1->second, i2->second); + } + } + break; + } + } +} + } XcsParser::XcsParser(int layer, Data * data): @@ -218,15 +275,30 @@ void XcsParser::endElement(XmlReader const & reader) { Element top(elements_.top()); elements_.pop(); if (top.node.is()) { - NodeMap * map; if (elements_.empty()) { switch (state_) { case STATE_TEMPLATES: - map = &data_->templates; + { + NodeMap::iterator i(data_->templates.find(top.name)); + if (i == data_->templates.end()) { + data_->templates.insert( + NodeMap::value_type(top.name, top.node)); + } else { + merge(i->second, top.node); + } + } break; case STATE_COMPONENT: - map = &data_->components; - state_ = STATE_COMPONENT_DONE; + { + NodeMap::iterator i(data_->components.find(top.name)); + if (i == data_->components.end()) { + data_->components.insert( + NodeMap::value_type(top.name, top.node)); + } else { + merge(i->second, top.node); + } + state_ = STATE_COMPONENT_DONE; + } break; default: OSL_ASSERT(false); @@ -235,10 +307,9 @@ void XcsParser::endElement(XmlReader const & reader) { RTL_CONSTASCII_USTRINGPARAM("this cannot happen")), css::uno::Reference< css::uno::XInterface >()); } - } else { - map = &elements_.top().node->getMembers(); - } - if (!map->insert(NodeMap::value_type(top.name, top.node)).second) { + } else if (!elements_.top().node->getMembers().insert( + NodeMap::value_type(top.name, top.node)).second) + { throw css::uno::RuntimeException( (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("duplicate ")) + top.name +