Author: af Date: Wed Jun 5 15:40:56 2013 New Revision: 1489925 URL: http://svn.apache.org/r1489925 Log: 122470: Fixed programmatic triggered switching of sidebar decks.
Added: openoffice/trunk/main/sfx2/inc/sfx2/sidebar/Sidebar.hxx Removed: openoffice/trunk/main/sfx2/source/sidebar/Sidebar.hxx Modified: openoffice/trunk/main/sd/inc/app.hrc openoffice/trunk/main/sd/sdi/ViewShellBase.sdi openoffice/trunk/main/sd/sdi/sdraw.sdi openoffice/trunk/main/sd/source/ui/app/sdmod1.cxx openoffice/trunk/main/sd/source/ui/framework/tools/FrameworkHelper.cxx openoffice/trunk/main/sd/source/ui/inc/framework/FrameworkHelper.hxx openoffice/trunk/main/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx openoffice/trunk/main/sd/source/ui/table/tablefunction.cxx openoffice/trunk/main/sd/source/ui/view/GraphicViewShellBase.cxx openoffice/trunk/main/sd/source/ui/view/ViewShellBase.cxx openoffice/trunk/main/sd/source/ui/view/ViewShellImplementation.cxx openoffice/trunk/main/sd/source/ui/view/drviews6.cxx openoffice/trunk/main/sfx2/Library_sfx.mk openoffice/trunk/main/sfx2/Package_inc.mk openoffice/trunk/main/sfx2/source/sidebar/AsynchronousCall.cxx openoffice/trunk/main/sfx2/source/sidebar/AsynchronousCall.hxx openoffice/trunk/main/sfx2/source/sidebar/Sidebar.cxx openoffice/trunk/main/sfx2/source/sidebar/SidebarController.cxx openoffice/trunk/main/sfx2/source/sidebar/SidebarController.hxx openoffice/trunk/main/sfx2/source/sidebar/SidebarDockingWindow.hxx openoffice/trunk/main/sfx2/source/sidebar/TabBar.cxx Modified: openoffice/trunk/main/sd/inc/app.hrc URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/inc/app.hrc?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/inc/app.hrc (original) +++ openoffice/trunk/main/sd/inc/app.hrc Wed Jun 5 15:40:56 2013 @@ -487,7 +487,7 @@ #define SID_TP_USE_FOR_NEW_PRESENTATIONS (SID_SD_START+427) #define SID_TP_SHOW_LARGE_PREVIEW (SID_SD_START+428) #define SID_TP_SHOW_SMALL_PREVIEW (SID_SD_START+429) -#define SID_SHOW_TOOL_PANEL (SID_SD_START+430) +// SID_SD_START+430 is unused #define SID_INSERT_MASTER_PAGE (SID_SD_START+431) #define SID_DELETE_MASTER_PAGE (SID_SD_START+432) #define SID_RENAME_MASTER_PAGE (SID_SD_START+433) Modified: openoffice/trunk/main/sd/sdi/ViewShellBase.sdi URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/sdi/ViewShellBase.sdi?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/sdi/ViewShellBase.sdi (original) +++ openoffice/trunk/main/sd/sdi/ViewShellBase.sdi Wed Jun 5 15:40:56 2013 @@ -82,11 +82,6 @@ interface ViewShellBaseView ExecMethod = Execute; StateMethod = GetState; ] - SID_SHOW_TOOL_PANEL - [ - ExecMethod = Execute; - StateMethod = GetState; - ] SID_WIN_FULLSCREEN [ ExecMethod = Execute; Modified: openoffice/trunk/main/sd/sdi/sdraw.sdi URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/sdi/sdraw.sdi?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/sdi/sdraw.sdi (original) +++ openoffice/trunk/main/sd/sdi/sdraw.sdi Wed Jun 5 15:40:56 2013 @@ -7366,30 +7366,3 @@ SfxBoolItem SlideSorterMultiPaneGUI SID_ ToolBoxConfig = TRUE, GroupId = GID_MODIFY; ] - -SfxVoidItem TaskPaneShowPanel SID_SHOW_TOOL_PANEL ( - SfxBoolItem IsPanelVisible ID_VAL_ISVISIBLE, - SfxUInt32Item PanelId ID_VAL_PANEL_INDEX) -[ - /* flags: */ - AutoUpdate = TRUE, - Cachable = Cachable, - FastCall = FALSE, - HasCoreId = FALSE, - HasDialog = FALSE, - ReadOnlyDoc = FALSE, - Toggle = FALSE, - Container = TRUE, - RecordAbsolute = FALSE, - RecordPerSet; - Synchron; - - /* config: */ - AccelConfig = FALSE, - MenuConfig = FALSE, - StatusBarConfig = FALSE, - ToolBoxConfig = FALSE, - GroupId = GID_VIEW; -] - - Modified: openoffice/trunk/main/sd/source/ui/app/sdmod1.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/source/ui/app/sdmod1.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/source/ui/app/sdmod1.cxx (original) +++ openoffice/trunk/main/sd/source/ui/app/sdmod1.cxx Wed Jun 5 15:40:56 2013 @@ -746,17 +746,6 @@ SfxFrame* SdModule::ExecuteNewDocument( } } } - - if (bMakeLayoutVisible && pViewFrame!=NULL) - { - // Make the layout menu visible in the tool pane. - ::sd::ViewShellBase* pBase = ::sd::ViewShellBase::GetViewShellBase(pViewFrame); - if (pBase != NULL) - { - FrameworkHelper::Instance(*pBase)->RequestSidebarPanel( - FrameworkHelper::msLayoutTaskPanelURL); - } - } } return pFrame; Modified: openoffice/trunk/main/sd/source/ui/framework/tools/FrameworkHelper.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/source/ui/framework/tools/FrameworkHelper.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/source/ui/framework/tools/FrameworkHelper.cxx (original) +++ openoffice/trunk/main/sd/source/ui/framework/tools/FrameworkHelper.cxx Wed Jun 5 15:40:56 2013 @@ -637,57 +637,6 @@ Reference<XResourceId> FrameworkHelper:: -Reference<XResourceId> FrameworkHelper::RequestSidebarPanel ( - const OUString& rsTaskPanelURL, - const bool bEnsureTaskPaneIsVisible) -{ - try - { - if (mxConfigurationController.is()) - { - // Check the existence of the task pane. - if ( ! bEnsureTaskPaneIsVisible) - { - Reference<XConfiguration> xConfiguration ( - mxConfigurationController->getCurrentConfiguration()); - if (xConfiguration.is()) - if ( ! xConfiguration->hasResource( - CreateResourceId(msSidebarViewURL, msSidebarPaneURL))) - { - // Task pane is not active. Do not force it. - return NULL; - } - } - - // Create the resource id from URLs for the sidebar pane - // and view and the requested panel. - mxConfigurationController->requestResourceActivation( - CreateResourceId(msSidebarPaneURL), - ResourceActivationMode_ADD); - mxConfigurationController->requestResourceActivation( - CreateResourceId(msSidebarViewURL, msSidebarPaneURL), - ResourceActivationMode_REPLACE); - Reference<XResourceId> xPanelId (CreateResourceId(rsTaskPanelURL, msSidebarViewURL, msSidebarPaneURL)); - mxConfigurationController->requestResourceActivation( - xPanelId, - ResourceActivationMode_REPLACE); - - return xPanelId; - } - } - catch (lang::DisposedException&) - { - Dispose(); - } - catch (RuntimeException&) - {} - - return NULL; -} - - - - void FrameworkHelper::RequestResourceDeactivation (const cssu::Reference<cssdf::XResourceId>& rxResourceId) { try Modified: openoffice/trunk/main/sd/source/ui/inc/framework/FrameworkHelper.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/source/ui/inc/framework/FrameworkHelper.hxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/source/ui/inc/framework/FrameworkHelper.hxx (original) +++ openoffice/trunk/main/sd/source/ui/inc/framework/FrameworkHelper.hxx Wed Jun 5 15:40:56 2013 @@ -229,25 +229,6 @@ public: const ::rtl::OUString& rsResourceURL, const ::rtl::OUString& rsAnchorURL); - /** Request the activation of the specified panel in the - sidebar. - @param rsSidebarPanelURL - The panel that is to be activated. - @param bEnsurePaneIsVisible - When this is <TRUE/> then the sidebar pane is activated when not - yet active. - When this flag is <FALSE/> then the requested panel - is activated only when the task pane is already active. When it - is not active then this call is silently ignored. - @return - The resource id of the requested sidebar panel is returned. With that - the caller can, for example, call RunOnResourceActivation() to - do some initialization after the requested view becomes active. - */ - cssu::Reference<cssdf::XResourceId> RequestSidebarPanel ( - const ::rtl::OUString& rsSidebarPanelURL, - const bool bEnsureTaskPaneIsVisible = true); - /** Request the deactivation of the specified resource. */ void RequestResourceDeactivation ( Modified: openoffice/trunk/main/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx (original) +++ openoffice/trunk/main/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx Wed Jun 5 15:40:56 2013 @@ -76,6 +76,7 @@ #include <sfx2/viewfrm.hxx> #include <sfx2/bindings.hxx> #include <sfx2/dispatch.hxx> +#include <sfx2/sidebar/Sidebar.hxx> #include <svx/svxids.hrc> #include <svx/zoomitem.hxx> #include <svx/svxdlg.hxx> @@ -187,12 +188,10 @@ void SlotManager::FuTemporary (SfxReques case SID_SLIDE_TRANSITIONS_PANEL: { - // Make the slide transition panel visible (expand it) - // in the tool pane. - if (mrSlideSorter.GetViewShellBase() != NULL) - framework::FrameworkHelper::Instance(*mrSlideSorter.GetViewShellBase()) - ->RequestSidebarPanel( - sd::framework::FrameworkHelper::msSlideTransitionTaskPanelURL); + // Make the slide transition panel visible in the sidebar. + ::sfx2::sidebar::Sidebar::ShowPanel( + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SlideTransitionPanel")), + pShell->GetViewFrame()->GetFrame().GetFrameInterface()); rRequest.Ignore (); break; } Modified: openoffice/trunk/main/sd/source/ui/table/tablefunction.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/source/ui/table/tablefunction.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/source/ui/table/tablefunction.cxx (original) +++ openoffice/trunk/main/sd/source/ui/table/tablefunction.cxx Wed Jun 5 15:40:56 2013 @@ -55,6 +55,7 @@ #include <sfx2/dispatch.hxx> #include <sfx2/bindings.hxx> #include <sfx2/request.hxx> +#include <sfx2/sidebar/Sidebar.hxx> #include <svl/style.hxx> #include "framework/FrameworkHelper.hxx" @@ -204,10 +205,11 @@ SfxViewShell* pViewShell = GetViewShell( } else { - // Make the slide transition panel visible (expand it) in the - // tool pane. - framework::FrameworkHelper::Instance(GetViewShellBase())->RequestSidebarPanel( - framework::FrameworkHelper::msTableDesignPanelURL); + // Make the table design panel visible (expand it) in the + // sidebar. + ::sfx2::sidebar::Sidebar::ShowPanel( + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImpressTableDesignPanel")), + GetViewFrame()->GetFrame().GetFrameInterface()); } Cancel(); Modified: openoffice/trunk/main/sd/source/ui/view/GraphicViewShellBase.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/source/ui/view/GraphicViewShellBase.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/source/ui/view/GraphicViewShellBase.cxx (original) +++ openoffice/trunk/main/sd/source/ui/view/GraphicViewShellBase.cxx Wed Jun 5 15:40:56 2013 @@ -96,7 +96,6 @@ void GraphicViewShellBase::Execute (SfxR case SID_OUTLINEMODE: case SID_NOTESMODE: case SID_HANDOUTMODE: - case SID_SHOW_TOOL_PANEL: // Prevent some Impress-only slots from being executed. rRequest.Cancel(); break; Modified: openoffice/trunk/main/sd/source/ui/view/ViewShellBase.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/source/ui/view/ViewShellBase.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/source/ui/view/ViewShellBase.cxx (original) +++ openoffice/trunk/main/sd/source/ui/view/ViewShellBase.cxx Wed Jun 5 15:40:56 2013 @@ -198,7 +198,6 @@ public: void GetSlotState (SfxItemSet& rSet); void ProcessRestoreEditingViewSlot (void); - void ProcessTaskPaneSlot (SfxRequest& rRequest); private: ViewShellBase& mrBase; @@ -743,10 +742,6 @@ void ViewShellBase::Execute (SfxRequest& // The full screen mode is not supported. Ignore the request. break; - case SID_SHOW_TOOL_PANEL: - mpImpl->ProcessTaskPaneSlot(rRequest); - break; - case SID_RESTORE_EDITING_VIEW: mpImpl->ProcessRestoreEditingViewSlot(); break; @@ -1535,51 +1530,6 @@ void ViewShellBase::Implementation::GetS - -void ViewShellBase::Implementation::ProcessTaskPaneSlot (SfxRequest& rRequest) -{ - // Set the visibility state of the toolpanel and one of its top - // level panels. - sal_Bool bShowToolPanel = sal_True; - sidebar::PanelId nPanelId (sidebar::PID_UNKNOWN); - bool bPanelIdGiven = false; - - // Extract the given arguments. - const SfxItemSet* pArgs = rRequest.GetArgs(); - if (pArgs) - { - if ((pArgs->Count() == 1) || (pArgs->Count() == 2)) - { - SFX_REQUEST_ARG (rRequest, pIsPanelVisible, - SfxBoolItem, ID_VAL_ISVISIBLE, sal_False); - if (pIsPanelVisible != NULL) - bShowToolPanel = pIsPanelVisible->GetValue(); - } - if (pArgs->Count() == 2) - { - SFX_REQUEST_ARG (rRequest, pPanelId, SfxUInt32Item, - ID_VAL_PANEL_INDEX, sal_False); - if (pPanelId != NULL) - { - nPanelId = static_cast<sidebar::PanelId>(pPanelId->GetValue()); - bPanelIdGiven = true; - } - } - } - - // Ignore the request for some combinations of panels and view - // shell types. - if (bPanelIdGiven - && ! (nPanelId==sidebar::PID_LAYOUT - && mrBase.GetMainViewShell()!=NULL - && mrBase.GetMainViewShell()->GetShellType()==ViewShell::ST_OUTLINE)) - { - framework::FrameworkHelper::Instance(mrBase)->RequestSidebarPanel( - framework::FrameworkHelper::msLayoutTaskPanelURL); - } -} - - } // end of namespace sd Modified: openoffice/trunk/main/sd/source/ui/view/ViewShellImplementation.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/source/ui/view/ViewShellImplementation.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/source/ui/view/ViewShellImplementation.cxx (original) +++ openoffice/trunk/main/sd/source/ui/view/ViewShellImplementation.cxx Wed Jun 5 15:40:56 2013 @@ -53,6 +53,7 @@ #include <sfx2/bindings.hxx> #include <sfx2/dispatch.hxx> #include <sfx2/request.hxx> +#include <sfx2/sidebar/Sidebar.hxx> #include <svl/aeitem.hxx> #include <svx/imapdlg.hxx> #include <vcl/msgbox.hxx> @@ -147,27 +148,9 @@ void ViewShell::Implementation::ProcessM } // Make the layout menu visible in the tool pane. - SfxBoolItem aMakeToolPaneVisible (ID_VAL_ISVISIBLE, sal_True); - SfxUInt32Item aPanelId (ID_VAL_PANEL_INDEX, sidebar::PID_LAYOUT); - SfxViewFrame* pFrame = mrViewShell.GetViewFrame(); - if (pFrame!=NULL && pFrame->GetDispatcher()!=NULL) - { - pFrame->GetDispatcher()->Execute ( - SID_SHOW_TOOL_PANEL, - SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, - &aMakeToolPaneVisible, - &aPanelId, - NULL); - } - else - { - DBG_ASSERT(pFrame!=NULL && pFrame->GetDispatcher()!=NULL, - "ViewShell::Implementation::ProcessModifyPageSlot(): can not get dispatcher"); - } - - // We have activated a non-modal control in the task pane. - // Because it does not return anything we can not do anything - // more right now and have to exit here. + sfx2::sidebar::Sidebar::ShowPanel( + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImpressLayoutsPanel")), + mrViewShell.GetViewFrame()->GetFrame().GetFrameInterface()); break; } else if (pArgs->Count() == 4) Modified: openoffice/trunk/main/sd/source/ui/view/drviews6.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/source/ui/view/drviews6.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sd/source/ui/view/drviews6.cxx (original) +++ openoffice/trunk/main/sd/source/ui/view/drviews6.cxx Wed Jun 5 15:40:56 2013 @@ -78,6 +78,12 @@ #include "DrawDocShell.hxx" #include "framework/FrameworkHelper.hxx" #include <svx/svdoashp.hxx> +#include <sfx2/sidebar/Sidebar.hxx> + +namespace { + static const ::rtl::OUString CustomAnimationPanelId (RTL_CONSTASCII_USTRINGPARAM("CustomAnimationPanel")); + static const ::rtl::OUString SlideTransitionPanelId (RTL_CONSTASCII_USTRINGPARAM("SlideTransitionPanel")); +} namespace sd { @@ -574,10 +580,10 @@ void DrawViewShell::FuTemp04(SfxRequest& case SID_CUSTOM_ANIMATION_PANEL: { - // Make the slide transition panel visible (expand it) in the - // tool pane. - framework::FrameworkHelper::Instance(GetViewShellBase())->RequestSidebarPanel( - framework::FrameworkHelper::msCustomAnimationTaskPanelURL); + // Make the slide transition panel visible in the sidebar. + ::sfx2::sidebar::Sidebar::ShowPanel( + CustomAnimationPanelId, + GetViewFrame()->GetFrame().GetFrameInterface()); Cancel(); rReq.Done (); @@ -586,10 +592,10 @@ void DrawViewShell::FuTemp04(SfxRequest& case SID_SLIDE_TRANSITIONS_PANEL: { - // Make the slide transition panel visible (expand it) in the - // tool pane. - framework::FrameworkHelper::Instance(GetViewShellBase())->RequestSidebarPanel( - framework::FrameworkHelper::msSlideTransitionTaskPanelURL); + // Make the slide transition panel visible in the sidebar. + ::sfx2::sidebar::Sidebar::ShowPanel( + SlideTransitionPanelId, + GetViewFrame()->GetFrame().GetFrameInterface()); Cancel(); rReq.Done (); Modified: openoffice/trunk/main/sfx2/Library_sfx.mk URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/Library_sfx.mk?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sfx2/Library_sfx.mk (original) +++ openoffice/trunk/main/sfx2/Library_sfx.mk Wed Jun 5 15:40:56 2013 @@ -213,6 +213,7 @@ $(eval $(call gb_Library_add_exception_o sfx2/source/menu/virtmenu \ sfx2/source/notify/eventsupplier \ sfx2/source/notify/hintpost \ + sfx2/source/sidebar/Sidebar \ sfx2/source/sidebar/SidebarChildWindow \ sfx2/source/sidebar/SidebarDockingWindow \ sfx2/source/sidebar/SidebarController \ Modified: openoffice/trunk/main/sfx2/Package_inc.mk URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/Package_inc.mk?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sfx2/Package_inc.mk (original) +++ openoffice/trunk/main/sfx2/Package_inc.mk Wed Jun 5 15:40:56 2013 @@ -139,6 +139,7 @@ $(eval $(call gb_Package_add_file,sfx2_i $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/IContextChangeReceiver.hxx,sfx2/sidebar/IContextChangeReceiver.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/ILayoutableWindow.hxx,sfx2/sidebar/ILayoutableWindow.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/ResourceDefinitions.hrc,sfx2/sidebar/ResourceDefinitions.hrc)) +$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/Sidebar.hxx,sfx2/sidebar/Sidebar.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/SidebarChildWindow.hxx,sfx2/sidebar/SidebarChildWindow.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/SidebarPanelBase.hxx,sfx2/sidebar/SidebarPanelBase.hxx)) $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/sidebar/SidebarToolBox.hxx,sfx2/sidebar/SidebarToolBox.hxx)) Added: openoffice/trunk/main/sfx2/inc/sfx2/sidebar/Sidebar.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/inc/sfx2/sidebar/Sidebar.hxx?rev=1489925&view=auto ============================================================================== --- openoffice/trunk/main/sfx2/inc/sfx2/sidebar/Sidebar.hxx (added) +++ openoffice/trunk/main/sfx2/inc/sfx2/sidebar/Sidebar.hxx Wed Jun 5 15:40:56 2013 @@ -0,0 +1,60 @@ +/************************************************************** + * + * 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. + * + *************************************************************/ + +#ifndef SFX_SIDEBAR_SIDEBAR_HXX +#define SFX_SIDEBAR_SIDEBAR_HXX + +#include "sfx2/dllapi.h" +#include <com/sun/star/frame/XFrame.hpp> + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; + + +namespace sfx2 { namespace sidebar { + +/** Accept requests for switching to certain panels or decks. +*/ +class SFX2_DLLPUBLIC Sidebar +{ +public: + /** Switch to the deck that contains the specified panel and make + sure that the panel is visible (expanded and scrolled into the + visible area.) + Note that most of the work is done asynchronously and that + this function probably returns before the requested panel is visible. + */ + static void ShowPanel ( + const ::rtl::OUString& rsPanelId, + const cssu::Reference<css::frame::XFrame>& rxFrame); + + /** Switch to the specified deck. + Note that most of the work is done asynchronously and that + this function probably returns before the requested deck is visible. + */ + static void ShowDeck ( + const ::rtl::OUString& rsDeckId, + const cssu::Reference<css::frame::XFrame>& rxFrame); +}; + +} } // end of namespace sfx2::sidebar + +#endif Modified: openoffice/trunk/main/sfx2/source/sidebar/AsynchronousCall.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/AsynchronousCall.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sfx2/source/sidebar/AsynchronousCall.cxx (original) +++ openoffice/trunk/main/sfx2/source/sidebar/AsynchronousCall.cxx Wed Jun 5 15:40:56 2013 @@ -28,6 +28,15 @@ namespace sfx2 { namespace sidebar { +AsynchronousCall::AsynchronousCall (void) + : maAction(), + mnCallId(0) +{ +} + + + + AsynchronousCall::AsynchronousCall (const Action& rAction) : maAction(rAction), mnCallId(0) Modified: openoffice/trunk/main/sfx2/source/sidebar/AsynchronousCall.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/AsynchronousCall.hxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sfx2/source/sidebar/AsynchronousCall.hxx (original) +++ openoffice/trunk/main/sfx2/source/sidebar/AsynchronousCall.hxx Wed Jun 5 15:40:56 2013 @@ -35,6 +35,7 @@ class AsynchronousCall public: typedef ::boost::function<void(void)> Action; + AsynchronousCall (void); AsynchronousCall (const Action& rAction); ~AsynchronousCall (void); Modified: openoffice/trunk/main/sfx2/source/sidebar/Sidebar.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/Sidebar.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sfx2/source/sidebar/Sidebar.cxx (original) +++ openoffice/trunk/main/sfx2/source/sidebar/Sidebar.cxx Wed Jun 5 15:40:56 2013 @@ -21,7 +21,8 @@ #include "precompiled_sfx2.hxx" -#include "Sidebar.hxx" +#include "sfx2/sidebar/Sidebar.hxx" +#include "SidebarController.hxx" #include "ResourceManager.hxx" using namespace css; @@ -29,53 +30,37 @@ using namespace cssu; namespace sfx2 { namespace sidebar { -Sidebar::Sidebar( - Window& rParentWindow, - const Reference<frame::XFrame>& rxDocumentFrame) - : Window(&rParentWindow, WB_DIALOGCONTROL) -{ - ContentPanelManager::Instance(); -} - - - - -Sidebar::~Sidebar (void) -{ -} - - - -void Sidebar::Resize (void) +void Sidebar::ShowPanel ( + const ::rtl::OUString& rsPanelId, + const Reference<frame::XFrame>& rxFrame) { - Window::Resize(); - // m_pImpl->OnResize(); -} - - - - -void Sidebar::GetFocus (void) -{ - Window::GetFocus(); - // m_pImpl->OnGetFocus(); + SidebarController* pController = SidebarController::GetSidebarControllerForFrame(rxFrame); + const PanelDescriptor* pPanelDescriptor = ResourceManager::Instance().GetPanelDescriptor(rsPanelId); + if (pController!=NULL && pPanelDescriptor != NULL) + { + // This should be a lot more sophisticated: + // - Make the deck switching asynchronous + // - Make sure that the panel is visible and expanded after + // the switch. + // - Make sure to use a context that really shows the panel + // + // All that is not necessary for the current use cases so lets + // keep it simple for the time being. + pController->RequestSwitchToDeck(pPanelDescriptor->msDeckId); + } } -void Sidebar::DataChanged (const DataChangedEvent& rDataChangedEvent) +void Sidebar::ShowDeck ( + const ::rtl::OUString& rsDeckId, + const Reference<frame::XFrame>& rxFrame) { - if (rDataChangedEvent.GetType() == DATACHANGED_SETTINGS - && (rDataChangedEvent.GetFlags() & SETTINGS_STYLE)!= 0) - { - Invalidate(); - } - else - Window::DataChanged(rDataChangedEvent); + SidebarController* pController = SidebarController::GetSidebarControllerForFrame(rxFrame); + if (pController != NULL) + pController->RequestSwitchToDeck(rsDeckId); } - - } } // end of namespace sfx2::sidebar Modified: openoffice/trunk/main/sfx2/source/sidebar/SidebarController.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/SidebarController.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sfx2/source/sidebar/SidebarController.cxx (original) +++ openoffice/trunk/main/sfx2/source/sidebar/SidebarController.cxx Wed Jun 5 15:40:56 2013 @@ -83,6 +83,8 @@ namespace namespace sfx2 { namespace sidebar { +SidebarController::SidebarControllerContainer SidebarController::maSidebarControllerContainer; + namespace { enum MenuId { @@ -119,6 +121,7 @@ SidebarController::SidebarController ( msCurrentDeckTitle(), maPropertyChangeForwarder(::boost::bind(&SidebarController::BroadcastPropertyChange, this)), maContextChangeUpdate(::boost::bind(&SidebarController::UpdateConfigurations, this)), + maAsynchronousDeckSwitch(), mbIsDeckRequestedOpen(), mbIsDeckOpen(), mbCanDeckBeOpened(true), @@ -161,6 +164,12 @@ SidebarController::SidebarController ( mxReadOnlyModeDispatch->addStatusListener(this, aURL); SwitchToDeck(A2S("default")); + + WeakReference<SidebarController> xWeakController (this); + maSidebarControllerContainer.insert( + SidebarControllerContainer::value_type( + rxFrame, + xWeakController)); } @@ -173,8 +182,29 @@ SidebarController::~SidebarController (v +SidebarController* SidebarController::GetSidebarControllerForFrame ( + const cssu::Reference<css::frame::XFrame>& rxFrame) +{ + SidebarControllerContainer::iterator iEntry (maSidebarControllerContainer.find(rxFrame)); + if (iEntry == maSidebarControllerContainer.end()) + return NULL; + + cssu::Reference<XInterface> xController (iEntry->second.get()); + if ( ! xController.is()) + return NULL; + + return dynamic_cast<SidebarController*>(xController.get()); +} + + + + void SAL_CALL SidebarController::disposing (void) { + SidebarControllerContainer::iterator iEntry (maSidebarControllerContainer.find(mxFrame)); + if (iEntry != maSidebarControllerContainer.end()) + maSidebarControllerContainer.erase(iEntry); + maFocusManager.Clear(); cssu::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer ( @@ -212,6 +242,7 @@ void SAL_CALL SidebarController::disposi static_cast<css::beans::XPropertyChangeListener*>(this)); maContextChangeUpdate.CancelRequest(); + maAsynchronousDeckSwitch.CancelRequest(); } @@ -227,7 +258,10 @@ void SAL_CALL SidebarController::notifyC rEvent.ApplicationName, rEvent.ContextName); if (maRequestedContext != maCurrentContext) + { + maAsynchronousDeckSwitch.CancelRequest(); maContextChangeUpdate.RequestCall(); + } } @@ -270,6 +304,7 @@ void SAL_CALL SidebarController::statusC if ( ! mbIsDocumentReadOnly) msCurrentDeckId = gsDefaultDeckId; mnRequestedForceFlags |= SwitchFlag_ForceSwitch; + maAsynchronousDeckSwitch.CancelRequest(); maContextChangeUpdate.RequestCall(); } } @@ -442,16 +477,6 @@ void SidebarController::UpdateConfigurat SwitchToDeck( *ResourceManager::Instance().GetDeckDescriptor(sNewDeckId), maCurrentContext); - -#ifdef DEBUG - // Show the context name in the deck title bar. - if (mpCurrentDeck) - { - DeckTitleBar* pTitleBar = mpCurrentDeck->GetTitleBar(); - if (pTitleBar != NULL) - pTitleBar->SetTitle(msCurrentDeckTitle+A2S(" (")+maCurrentContext.msContext+A2S(")")); - } -#endif } } @@ -463,6 +488,18 @@ void SidebarController::OpenThenSwitchTo { RequestOpenDeck(); SwitchToDeck(rsDeckId); + mpTabBar->Invalidate(); +} + + + + +void SidebarController::RequestSwitchToDeck ( + const ::rtl::OUString& rsDeckId) +{ + maContextChangeUpdate.CancelRequest(); + maAsynchronousDeckSwitch.RequestCall( + ::boost::bind(&SidebarController::OpenThenSwitchToDeck, this, rsDeckId)); } @@ -546,10 +583,18 @@ void SidebarController::SwitchToDeck ( mpParentWindow, ::boost::bind(&SidebarController::RequestCloseDeck, this))); msCurrentDeckTitle = rDeckDescriptor.msTitle; + } if ( ! mpCurrentDeck) return; - + +#ifdef DEBUG + // Show the context name in the deck title bar. + DeckTitleBar* pTitleBar = mpCurrentDeck->GetTitleBar(); + if (pTitleBar != NULL) + pTitleBar->SetTitle(rDeckDescriptor.msTitle+A2S(" (")+maCurrentContext.msContext+A2S(")")); +#endif + // Update the panel list. const sal_Int32 nNewPanelCount (aPanelContextDescriptors.size()); SharedPanelContainer aNewPanels; @@ -758,6 +803,7 @@ IMPL_LINK(SidebarController, WindowEvent UpdateTitleBarIcons(); mpParentWindow->Invalidate(); mnRequestedForceFlags |= SwitchFlag_ForceNewDeck | SwitchFlag_ForceNewPanels; + maAsynchronousDeckSwitch.CancelRequest(); maContextChangeUpdate.RequestCall(); break; Modified: openoffice/trunk/main/sfx2/source/sidebar/SidebarController.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/SidebarController.hxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sfx2/source/sidebar/SidebarController.hxx (original) +++ openoffice/trunk/main/sfx2/source/sidebar/SidebarController.hxx Wed Jun 5 15:40:56 2013 @@ -42,6 +42,9 @@ #include <boost/optional.hpp> #include <cppuhelper/compbase4.hxx> #include <cppuhelper/basemutex.hxx> +#include <cppuhelper/weakref.hxx> +#include <comphelper/stl_types.hxx> + namespace css = ::com::sun::star; namespace cssu = ::com::sun::star::uno; @@ -80,6 +83,15 @@ public: const cssu::Reference<css::frame::XFrame>& rxFrame); virtual ~SidebarController (void); + /** Return the SidebarController object that is associated with + the given XFrame. + @return + When there is no SidebarController object for the given + XFrame then <NULL/> is returned. + */ + static SidebarController* GetSidebarControllerForFrame ( + const cssu::Reference<css::frame::XFrame>& rxFrame); + // ui::XContextChangeEventListener virtual void SAL_CALL notifyContextChangeEvent (const css::ui::ContextChangeEventObject& rEvent) throw(cssu::RuntimeException); @@ -113,7 +125,7 @@ public: const static sal_Int32 SwitchFlag_ForceNewDeck = 0x02; const static sal_Int32 SwitchFlag_ForceNewPanels = 0x02; - void SwitchToDeck ( + void RequestSwitchToDeck ( const ::rtl::OUString& rsDeckId); void OpenThenSwitchToDeck ( const ::rtl::OUString& rsDeckId); @@ -129,6 +141,12 @@ public: FocusManager& GetFocusManager (void); private: + typedef ::std::map< + const cssu::Reference<css::frame::XFrame>, + cssu::WeakReference<SidebarController> + > SidebarControllerContainer; + static SidebarControllerContainer maSidebarControllerContainer; + ::boost::scoped_ptr<Deck> mpCurrentDeck; SidebarDockingWindow* mpParentWindow; ::boost::scoped_ptr<TabBar> mpTabBar; @@ -141,6 +159,7 @@ private: ::rtl::OUString msCurrentDeckTitle; AsynchronousCall maPropertyChangeForwarder; AsynchronousCall maContextChangeUpdate; + AsynchronousCall maAsynchronousDeckSwitch; /** Two flags control whether the deck is displayed or if only the tab bar remains visible. @@ -188,6 +207,8 @@ private: const bool bIsInitiallyExpanded, const Context& rContext); void SwitchToDeck ( + const ::rtl::OUString& rsDeckId); + void SwitchToDeck ( const DeckDescriptor& rDeckDescriptor, const Context& rContext); void ShowPopupMenu ( Modified: openoffice/trunk/main/sfx2/source/sidebar/SidebarDockingWindow.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/SidebarDockingWindow.hxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sfx2/source/sidebar/SidebarDockingWindow.hxx (original) +++ openoffice/trunk/main/sfx2/source/sidebar/SidebarDockingWindow.hxx Wed Jun 5 15:40:56 2013 @@ -24,7 +24,6 @@ #include "sfx2/dockwin.hxx" #include "sfx2/dockwin.hxx" -#include "Sidebar.hxx" #include <rtl/ref.hxx> Modified: openoffice/trunk/main/sfx2/source/sidebar/TabBar.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/TabBar.cxx?rev=1489925&r1=1489924&r2=1489925&view=diff ============================================================================== --- openoffice/trunk/main/sfx2/source/sidebar/TabBar.cxx (original) +++ openoffice/trunk/main/sfx2/source/sidebar/TabBar.cxx Wed Jun 5 15:40:56 2013 @@ -236,9 +236,15 @@ void TabBar::Layout (void) void TabBar::HighlightDeck (const ::rtl::OUString& rsDeckId) { - Item* pItem = GetItemForId(rsDeckId); - if (pItem != NULL) - pItem->mpButton->Check(); + for (ItemContainer::iterator iItem(maItems.begin()),iEnd(maItems.end()); + iItem!=iEnd; + ++iItem) + { + if (iItem->msDeckId.equals(rsDeckId)) + iItem->mpButton->Check(sal_True); + else + iItem->mpButton->Check(sal_False); + } }