Kaydet (Commit) b1a6a99b authored tarafından Miklos Vajna's avatar Miklos Vajna

presenter console: add 'Restart Timer' button

Use case is that the presentation is started a few minutes in advance,
so the audience can check if they are at the correct room, seeing the
title side. Then previously the presentation had to be stopped and
started again, so the presenter had an idea how much time the talk took
so far. The side effect of this workaround was that the audience saw a
short flash while the presentation was not running.

Fix this by adding a button to just restart the timer, then it's not
needed to stop/start the presentation manually.

The two icons are just placeholders for now, real design is still
needed.

Change-Id: Id67e7e53a339ea5672dfb1c261f63d43466e9eff
üst cd590635
...@@ -345,6 +345,53 @@ ...@@ -345,6 +345,53 @@
</prop> </prop>
</node> </node>
<node oor:name="k" oor:op="replace"> <node oor:name="k" oor:op="replace">
<prop oor:name="Name">
<value>RestartTimer</value>
</prop>
<prop oor:name="Type">
<value>Button</value>
</prop>
<node oor:name="Normal">
<prop oor:name="Text">
<value xml:lang="en-US">Restart</value>
</prop>
<node oor:name="Icon">
<prop oor:name="NormalFileName">
<value>bitmaps/ButtonRestartTimerNormal.png</value>
</prop>
</node>
<prop oor:name="Action">
<value>vnd.org.libreoffice.presenterscreen:RestartTimer</value>
</prop>
<node oor:name="Font">
<prop oor:name="Size">
<value>12</value>
</prop>
<prop oor:name="Style">
<value>Bold</value>
</prop>
<prop oor:name="Color">
<value>B3B7BC</value>
</prop>
<prop oor:name="Anchor">
<value>Center</value>
</prop>
</node>
</node>
<node oor:name="MouseOver">
<node oor:name="Icon">
<prop oor:name="NormalFileName">
<value>bitmaps/ButtonRestartTimerMouseOver.png</value>
</prop>
</node>
<node oor:name="Font">
<prop oor:name="Color">
<value>FFFFFF</value>
</prop>
</node>
</node>
</node>
<node oor:name="l" oor:op="replace">
<prop oor:name="Type"> <prop oor:name="Type">
<value>VerticalSeparator</value> <value>VerticalSeparator</value>
</prop> </prop>
...@@ -356,7 +403,7 @@ ...@@ -356,7 +403,7 @@
</node> </node>
</node> </node>
</node> </node>
<node oor:name="l" oor:op="replace"> <node oor:name="m" oor:op="replace">
<prop oor:name="Name"> <prop oor:name="Name">
<value>SwitchMonitor</value> <value>SwitchMonitor</value>
</prop> </prop>
...@@ -410,7 +457,7 @@ ...@@ -410,7 +457,7 @@
</node> </node>
</node> </node>
</node> </node>
<node oor:name="m" oor:op="replace"> <node oor:name="n" oor:op="replace">
<prop oor:name="Type"> <prop oor:name="Type">
<value>VerticalSeparator</value> <value>VerticalSeparator</value>
</prop> </prop>
...@@ -422,7 +469,7 @@ ...@@ -422,7 +469,7 @@
</node> </node>
</node> </node>
</node> </node>
<node oor:name="n" oor:op="replace"> <node oor:name="o" oor:op="replace">
<prop oor:name="Name"> <prop oor:name="Name">
<value>Help</value> <value>Help</value>
</prop> </prop>
......
...@@ -553,6 +553,11 @@ Bitmap BMP_PRESENTERSCREEN_BUTTON_SWITCH_MONITOR_NORMAL ...@@ -553,6 +553,11 @@ Bitmap BMP_PRESENTERSCREEN_BUTTON_SWITCH_MONITOR_NORMAL
File = "presenterscreen-ButtonSwitchMonitorNormal.png"; File = "presenterscreen-ButtonSwitchMonitorNormal.png";
}; };
Bitmap BMP_PRESENTERSCREEN_BUTTON_RESTART_TIMER_NORMAL
{
File = "presenterscreen-ButtonRestartTimerNormal.png";
};
Bitmap BMP_PRESENTERSCREEN_BORDER_TOOLBAR_RIGHT Bitmap BMP_PRESENTERSCREEN_BORDER_TOOLBAR_RIGHT
{ {
File = "presenterscreen-BorderToolbarRight.png"; File = "presenterscreen-BorderToolbarRight.png";
...@@ -608,6 +613,11 @@ Bitmap BMP_PRESENTERSCREEN_BUTTON_SWITCH_MONITOR_MOUSE_OVER ...@@ -608,6 +613,11 @@ Bitmap BMP_PRESENTERSCREEN_BUTTON_SWITCH_MONITOR_MOUSE_OVER
File = "presenterscreen-ButtonSwitchMonitorMouseOver.png"; File = "presenterscreen-ButtonSwitchMonitorMouseOver.png";
}; };
Bitmap BMP_PRESENTERSCREEN_BUTTON_RESTART_TIMER_MOUSE_OVER
{
File = "presenterscreen-ButtonRestartTimerMouseOver.png";
};
Bitmap BMP_PRESENTERSCREEN_BUTTON_SLIDE_PREVIOUS_DISABLED Bitmap BMP_PRESENTERSCREEN_BUTTON_SLIDE_PREVIOUS_DISABLED
{ {
File = "presenterscreen-ButtonSlidePreviousDisabled.png"; File = "presenterscreen-ButtonSlidePreviousDisabled.png";
......
...@@ -189,6 +189,8 @@ ...@@ -189,6 +189,8 @@
#define BMP_PRESENTERSCREEN_ANIMATION (RID_SD_START+591) #define BMP_PRESENTERSCREEN_ANIMATION (RID_SD_START+591)
#define BMP_PRESENTERSCREEN_TRANSITION (RID_SD_START+592) #define BMP_PRESENTERSCREEN_TRANSITION (RID_SD_START+592)
#define BMP_PRESENTATION_MINIMIZER (RID_SD_START+593) #define BMP_PRESENTATION_MINIMIZER (RID_SD_START+593)
#define BMP_PRESENTERSCREEN_BUTTON_RESTART_TIMER_MOUSE_OVER (RID_SD_START+594)
#define BMP_PRESENTERSCREEN_BUTTON_RESTART_TIMER_NORMAL (RID_SD_START+595)
// ResourceIDs for Popup-Menus do not need a dummy string!!! // ResourceIDs for Popup-Menus do not need a dummy string!!!
......
...@@ -344,6 +344,10 @@ Reference<rendering::XBitmap> SAL_CALL PresenterHelper::loadBitmap ( ...@@ -344,6 +344,10 @@ Reference<rendering::XBitmap> SAL_CALL PresenterHelper::loadBitmap (
BMP_PRESENTERSCREEN_BUTTON_SWITCH_MONITOR_MOUSE_OVER }, BMP_PRESENTERSCREEN_BUTTON_SWITCH_MONITOR_MOUSE_OVER },
{ "bitmaps/ButtonSwitchMonitorNormal.png", { "bitmaps/ButtonSwitchMonitorNormal.png",
BMP_PRESENTERSCREEN_BUTTON_SWITCH_MONITOR_NORMAL }, BMP_PRESENTERSCREEN_BUTTON_SWITCH_MONITOR_NORMAL },
{ "bitmaps/ButtonRestartTimerMouseOver.png",
BMP_PRESENTERSCREEN_BUTTON_SWITCH_MONITOR_MOUSE_OVER },
{ "bitmaps/ButtonRestartTimerNormal.png",
BMP_PRESENTERSCREEN_BUTTON_SWITCH_MONITOR_NORMAL },
{ "bitmaps/LabelMouseOverCenter.png", { "bitmaps/LabelMouseOverCenter.png",
BMP_PRESENTERSCREEN_LABEL_MOUSE_OVER_CENTER }, BMP_PRESENTERSCREEN_LABEL_MOUSE_OVER_CENTER },
{ "bitmaps/LabelMouseOverLeft.png", { "bitmaps/LabelMouseOverLeft.png",
......
...@@ -70,6 +70,10 @@ namespace { ...@@ -70,6 +70,10 @@ namespace {
namespace sdext { namespace presenter { namespace sdext { namespace presenter {
IPresentationTime::~IPresentationTime()
{
}
PresenterController::InstanceContainer PresenterController::maInstances; PresenterController::InstanceContainer PresenterController::maInstances;
::rtl::Reference<PresenterController> PresenterController::Instance ( ::rtl::Reference<PresenterController> PresenterController::Instance (
...@@ -704,6 +708,16 @@ void PresenterController::RequestViews ( ...@@ -704,6 +708,16 @@ void PresenterController::RequestViews (
} }
} }
void PresenterController::SetPresentationTime(IPresentationTime* pPresentationTime)
{
mpPresentationTime = pPresentationTime;
}
IPresentationTime* PresenterController::GetPresentationTime()
{
return mpPresentationTime;
}
//----- XConfigurationChangeListener ------------------------------------------ //----- XConfigurationChangeListener ------------------------------------------
void SAL_CALL PresenterController::notifyConfigurationChange ( void SAL_CALL PresenterController::notifyConfigurationChange (
......
...@@ -68,6 +68,14 @@ namespace { ...@@ -68,6 +68,14 @@ namespace {
> PresenterControllerInterfaceBase; > PresenterControllerInterfaceBase;
} }
/// Represents an element in the toolbar that shows the time elapsed since the presentation started.
class IPresentationTime
{
public:
virtual void restart() = 0;
virtual ~IPresentationTime();
};
/** The controller of the presenter screen is responsible for telling the /** The controller of the presenter screen is responsible for telling the
individual views which slides to show. Additionally it provides access individual views which slides to show. Additionally it provides access
to frequently used values of the current theme. to frequently used values of the current theme.
...@@ -133,6 +141,9 @@ public: ...@@ -133,6 +141,9 @@ public:
const bool bIsNotesViewActive, const bool bIsNotesViewActive,
const bool bIsHelpViewActive); const bool bIsHelpViewActive);
void SetPresentationTime(IPresentationTime* pPresentationTime);
IPresentationTime* GetPresentationTime();
// XConfigurationChangeListener // XConfigurationChangeListener
virtual void SAL_CALL notifyConfigurationChange ( virtual void SAL_CALL notifyConfigurationChange (
...@@ -215,6 +226,7 @@ private: ...@@ -215,6 +226,7 @@ private:
css::uno::Reference<css::util::XURLTransformer> mxUrlTransformer; css::uno::Reference<css::util::XURLTransformer> mxUrlTransformer;
::rtl::Reference<PresenterAccessible> mpAccessibleObject; ::rtl::Reference<PresenterAccessible> mpAccessibleObject;
bool mbIsAccessibilityActive; bool mbIsAccessibilityActive;
IPresentationTime* mpPresentationTime;
void GetSlides (const sal_Int32 nOffset); void GetSlides (const sal_Int32 nOffset);
void UpdateViews(); void UpdateViews();
......
...@@ -104,6 +104,17 @@ namespace { ...@@ -104,6 +104,17 @@ namespace {
rtl::Reference<PresenterController> mpPresenterController; rtl::Reference<PresenterController> mpPresenterController;
}; };
/// This command restarts the presentation timer.
class RestartTimerCommand : public Command
{
public:
explicit RestartTimerCommand(const rtl::Reference<PresenterController>& rpPresenterController);
virtual ~RestartTimerCommand();
virtual void Execute() SAL_OVERRIDE;
private:
rtl::Reference<PresenterController> mpPresenterController;
};
class SetNotesViewCommand : public Command class SetNotesViewCommand : public Command
{ {
public: public:
...@@ -408,6 +419,8 @@ Command* PresenterProtocolHandler::Dispatch::CreateCommand ( ...@@ -408,6 +419,8 @@ Command* PresenterProtocolHandler::Dispatch::CreateCommand (
return new GotoPreviousSlideCommand(rpPresenterController); return new GotoPreviousSlideCommand(rpPresenterController);
if (rsURLPath == "SwitchMonitor") if (rsURLPath == "SwitchMonitor")
return new SwitchMonitorCommand(rpPresenterController); return new SwitchMonitorCommand(rpPresenterController);
if (rsURLPath == "RestartTimer")
return new RestartTimerCommand(rpPresenterController);
if (rsURLPath == "ShowNotes") if (rsURLPath == "ShowNotes")
return new SetNotesViewCommand(true, rpPresenterController); return new SetNotesViewCommand(true, rpPresenterController);
if (rsURLPath == "ShowSlideSorter") if (rsURLPath == "ShowSlideSorter")
...@@ -612,6 +625,21 @@ void SwitchMonitorCommand::Execute() ...@@ -612,6 +625,21 @@ void SwitchMonitorCommand::Execute()
mpPresenterController->SwitchMonitors(); mpPresenterController->SwitchMonitors();
} }
RestartTimerCommand::RestartTimerCommand (const rtl::Reference<PresenterController>& rpPresenterController)
: mpPresenterController(rpPresenterController)
{
}
RestartTimerCommand::~RestartTimerCommand()
{
}
void RestartTimerCommand::Execute()
{
if (IPresentationTime* pPresentationTime = mpPresenterController->GetPresentationTime())
pPresentationTime->restart();
}
//===== SetNotesViewCommand =================================================== //===== SetNotesViewCommand ===================================================
SetNotesViewCommand::SetNotesViewCommand ( SetNotesViewCommand::SetNotesViewCommand (
......
...@@ -310,7 +310,7 @@ namespace { ...@@ -310,7 +310,7 @@ namespace {
virtual void TimeHasChanged (const oslDateTime& rCurrentTime) SAL_OVERRIDE; virtual void TimeHasChanged (const oslDateTime& rCurrentTime) SAL_OVERRIDE;
}; };
class PresentationTimeLabel : public TimeLabel class PresentationTimeLabel : public TimeLabel, public IPresentationTime
{ {
public: public:
static ::rtl::Reference<Element> Create ( static ::rtl::Reference<Element> Create (
...@@ -320,6 +320,7 @@ namespace { ...@@ -320,6 +320,7 @@ namespace {
const SharedElementMode& rpMouseOverMode, const SharedElementMode& rpMouseOverMode,
const SharedElementMode& rpSelectedMode, const SharedElementMode& rpSelectedMode,
const SharedElementMode& rpDisabledMode) SAL_OVERRIDE; const SharedElementMode& rpDisabledMode) SAL_OVERRIDE;
virtual void restart() SAL_OVERRIDE;
private: private:
TimeFormatter maTimeFormatter; TimeFormatter maTimeFormatter;
TimeValue maStartTimeValue; TimeValue maStartTimeValue;
...@@ -1909,6 +1910,7 @@ void CurrentTimeLabel::SetModes ( ...@@ -1909,6 +1910,7 @@ void CurrentTimeLabel::SetModes (
PresentationTimeLabel::~PresentationTimeLabel() PresentationTimeLabel::~PresentationTimeLabel()
{ {
mpToolBar->GetPresenterController()->SetPresentationTime(0);
} }
PresentationTimeLabel::PresentationTimeLabel ( PresentationTimeLabel::PresentationTimeLabel (
...@@ -1916,6 +1918,12 @@ PresentationTimeLabel::PresentationTimeLabel ( ...@@ -1916,6 +1918,12 @@ PresentationTimeLabel::PresentationTimeLabel (
: TimeLabel(rpToolBar), : TimeLabel(rpToolBar),
maTimeFormatter(), maTimeFormatter(),
maStartTimeValue() maStartTimeValue()
{
restart();
mpToolBar->GetPresenterController()->SetPresentationTime(this);
}
void PresentationTimeLabel::restart()
{ {
maStartTimeValue.Seconds = 0; maStartTimeValue.Seconds = 0;
maStartTimeValue.Nanosec = 0; maStartTimeValue.Nanosec = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment