Files
loongoffice/sd/source/ui/framework/module/ViewTabBarModule.cxx
Philippe Jung 229fc164dc Impress: Rework the way the display modes are presented.
TODO: take into account remarks from Gerrit

New combo to select display mode among:
 - Slide edition (Normal)
 - Outline
 - Notes
 - Slide sorter
 - Slide master
 - Notes master
 - Handout (master, as we are designing the template used to generate
   the handout)

The combo is based on uno command .uno:DisplayMode

Center pane tabs are hidden by default. A new uno dispatch
command (.uno:ToggleTabBarVisibility) is available to show/hide
this tab bar.

Modified uno dispatch commands:

No uno name has been modified.

.uno:DiaMode :
SID_DIAMODE renamed SID_SLIDER_SORTER_MODE

.uno:OutlineMode
SID_OUTLINEMODE renamed SID_OUTLINE_MODE

.uno:NotesMode
No change

.uno:HandoutMode
SID_HANDOUT_MODE renamed SID_HANDOUT_MASTER_MODE
All internal code also considers the edit mode as master

.uno:SlideMasterPage
SID_SLIDE_MASTERPAGE renamed SID_SLIDE_MASTER_MODE
If the input parameter SfxBoolItem Isactive is true or not provided,
activates Slide Master mode. If parameter is false, activates the
"Normal" (slide editing) mode.

.uno:NotesMasterPage
SID_NOTES_MASTERPAGE renamed SID_NOTES_MASTER_MODE
If the input parameter SfxBoolItem Isactive is true or not provided,
activates Notes Master mode. If parameter is false, activates the
"Notes" mode.

Modified behaviours: Now only one mode can be chosen. It is possible to
navigate from a mode to any other mode.
Previous behaviour: the following navigation
     Normal -> Slide Master -> Notes -> Normal
was displaying slide master. It was required to activate Normal once more
to get back to normal.
Now the same commands will display the requested mode.

Still to come (at least):
- Fix reopen the last display mode.
- Center pane tabs are now presenting all buttons for all modes (TODO).

Change-Id: I11ab59d2f3caa9149260c5e55d44d598d0ce3390
Reviewed-on: https://gerrit.libreoffice.org/16723
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Jan Holesovsky <kendy@collabora.com>
Tested-by: Jan Holesovsky <kendy@collabora.com>
2015-11-18 14:09:27 +00:00

192 lines
6.8 KiB
C++

/* -*- 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 "ViewTabBarModule.hxx"
#include "framework/FrameworkHelper.hxx"
#include "framework/ConfigurationController.hxx"
#include <com/sun/star/drawing/framework/XControllerManager.hpp>
#include <com/sun/star/drawing/framework/XTabBar.hpp>
#include "strings.hrc"
#include "sdresid.hxx"
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::drawing::framework;
using ::sd::framework::FrameworkHelper;
namespace {
static const sal_Int32 ResourceActivationRequestEvent = 0;
static const sal_Int32 ResourceDeactivationRequestEvent = 1;
static const sal_Int32 ResourceActivationEvent = 2;
}
namespace sd { namespace framework {
//===== ViewTabBarModule ==================================================
ViewTabBarModule::ViewTabBarModule (
const Reference<frame::XController>& rxController,
const Reference<XResourceId>& rxViewTabBarId)
: ViewTabBarModuleInterfaceBase(MutexOwner::maMutex),
mxConfigurationController(),
mxViewTabBarId(rxViewTabBarId)
{
Reference<XControllerManager> xControllerManager (rxController, UNO_QUERY);
if (xControllerManager.is())
{
mxConfigurationController = xControllerManager->getConfigurationController();
if (mxConfigurationController.is())
{
mxConfigurationController->addConfigurationChangeListener(
this,
FrameworkHelper::msResourceActivationRequestEvent,
makeAny(ResourceActivationRequestEvent));
mxConfigurationController->addConfigurationChangeListener(
this,
FrameworkHelper::msResourceDeactivationRequestEvent,
makeAny(ResourceDeactivationRequestEvent));
UpdateViewTabBar(nullptr);
mxConfigurationController->addConfigurationChangeListener(
this,
FrameworkHelper::msResourceActivationEvent,
makeAny(ResourceActivationEvent));
}
}
}
ViewTabBarModule::~ViewTabBarModule()
{
}
void SAL_CALL ViewTabBarModule::disposing()
{
if (mxConfigurationController.is())
mxConfigurationController->removeConfigurationChangeListener(this);
mxConfigurationController = nullptr;
}
void SAL_CALL ViewTabBarModule::notifyConfigurationChange (
const ConfigurationChangeEvent& rEvent)
throw (RuntimeException, std::exception)
{
if (mxConfigurationController.is())
{
sal_Int32 nEventType = 0;
rEvent.UserData >>= nEventType;
switch (nEventType)
{
case ResourceActivationRequestEvent:
if (mxViewTabBarId->isBoundTo(rEvent.ResourceId, AnchorBindingMode_DIRECT))
{
mxConfigurationController->requestResourceActivation(
mxViewTabBarId,
ResourceActivationMode_ADD);
}
break;
case ResourceDeactivationRequestEvent:
if (mxViewTabBarId->isBoundTo(rEvent.ResourceId, AnchorBindingMode_DIRECT))
{
mxConfigurationController->requestResourceDeactivation(mxViewTabBarId);
}
break;
case ResourceActivationEvent:
if (rEvent.ResourceId->compareTo(mxViewTabBarId) == 0)
{
UpdateViewTabBar(Reference<XTabBar>(rEvent.ResourceObject,UNO_QUERY));
}
}
}
}
void SAL_CALL ViewTabBarModule::disposing (
const lang::EventObject& rEvent)
throw (RuntimeException, std::exception)
{
if (mxConfigurationController.is()
&& rEvent.Source == mxConfigurationController)
{
// Without the configuration controller this class can do nothing.
mxConfigurationController = nullptr;
disposing();
}
}
void ViewTabBarModule::UpdateViewTabBar (const Reference<XTabBar>& rxTabBar)
{
if (mxConfigurationController.is())
{
Reference<XTabBar> xBar (rxTabBar);
if ( ! xBar.is())
xBar.set( mxConfigurationController->getResource(mxViewTabBarId), UNO_QUERY);
if (xBar.is())
{
TabBarButton aEmptyButton;
Reference<XResourceId> xAnchor (mxViewTabBarId->getAnchor());
TabBarButton aImpressViewButton;
aImpressViewButton.ResourceId = FrameworkHelper::CreateResourceId(
FrameworkHelper::msImpressViewURL,
xAnchor);
aImpressViewButton.ButtonLabel = SD_RESSTR(STR_NORMAL_MODE);
if ( ! xBar->hasTabBarButton(aImpressViewButton))
xBar->addTabBarButtonAfter(aImpressViewButton, aEmptyButton);
TabBarButton aOutlineViewButton;
aOutlineViewButton.ResourceId = FrameworkHelper::CreateResourceId(
FrameworkHelper::msOutlineViewURL,
xAnchor);
aOutlineViewButton.ButtonLabel = SD_RESSTR(STR_OUTLINE_MODE);
if ( ! xBar->hasTabBarButton(aOutlineViewButton))
xBar->addTabBarButtonAfter(aOutlineViewButton, aImpressViewButton);
TabBarButton aNotesViewButton;
aNotesViewButton.ResourceId = FrameworkHelper::CreateResourceId(
FrameworkHelper::msNotesViewURL,
xAnchor);
aNotesViewButton.ButtonLabel = SD_RESSTR(STR_NOTES_MODE);
if ( ! xBar->hasTabBarButton(aNotesViewButton))
xBar->addTabBarButtonAfter(aNotesViewButton, aOutlineViewButton);
TabBarButton aHandoutViewButton;
aHandoutViewButton.ResourceId = FrameworkHelper::CreateResourceId(
FrameworkHelper::msHandoutViewURL,
xAnchor);
aHandoutViewButton.ButtonLabel = SD_RESSTR(STR_HANDOUT_MASTER_MODE);
if ( ! xBar->hasTabBarButton(aHandoutViewButton))
xBar->addTabBarButtonAfter(aHandoutViewButton, aNotesViewButton);
}
}
}
} } // end of namespace sd::framework
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */