lok: enable transition repeat after x property

Change-Id: I61bd2ebaebfb19350aa3b3634f5877c0bfa05880
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171773
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
This commit is contained in:
Javiya Vivekkumar Dineshbhai
2024-10-18 13:19:47 +02:00
committed by Miklos Vajna
parent f51bf81cfb
commit feb80bccc3
4 changed files with 184 additions and 2 deletions
@@ -368,6 +368,7 @@ SlideTransitionPane::SlideTransitionPane(
mpDrawDoc( rBase.GetDocShell() ? rBase.GetDocShell()->GetDoc() : nullptr ),
mxTransitionsIconView(m_xBuilder->weld_icon_view("transitions_icons")),
mxTransitionsScrollWindow(m_xBuilder->weld_scrolled_window("transitions_icons_scrolled_window")),
mxRepeatAutoFrame(m_xBuilder->weld_frame("repeat_after_frame")),
mbHasSelection( false ),
mbUpdatingControls( false ),
mbIsMainViewChangePending( false ),
@@ -392,6 +393,9 @@ void SlideTransitionPane::Initialize(SdDrawDocument* pDoc)
mxRB_ADVANCE_ON_MOUSE = m_xBuilder->weld_radio_button(u"rb_mouse_click"_ustr);
mxRB_ADVANCE_AUTO = m_xBuilder->weld_radio_button(u"rb_auto_after"_ustr);
mxMF_ADVANCE_AUTO_AFTER = m_xBuilder->weld_metric_spin_button(u"auto_after_value"_ustr, FieldUnit::SECOND);
mxRB_REPEAT_DISABLED = m_xBuilder->weld_radio_button(u"rb_disabled"_ustr);
mxRB_REPEAT_AUTO = m_xBuilder->weld_radio_button(u"rb_auto_repeat"_ustr);
mxMF_REPEAT_AUTO_AFTER = m_xBuilder->weld_metric_spin_button(u"rb_auto_repeat_value"_ustr, FieldUnit::SECOND);
mxPB_APPLY_TO_ALL = m_xBuilder->weld_button(u"apply_to_all"_ustr);
mxPB_PLAY = m_xBuilder->weld_button(u"play"_ustr);
mxCB_AUTO_PREVIEW = m_xBuilder->weld_check_button(u"auto_preview"_ustr);
@@ -401,6 +405,8 @@ void SlideTransitionPane::Initialize(SdDrawDocument* pDoc)
int nWidthChars = mxMF_ADVANCE_AUTO_AFTER->get_width_chars();
mxMF_ADVANCE_AUTO_AFTER->set_max(nMax, FieldUnit::SECOND);
mxMF_ADVANCE_AUTO_AFTER->set_width_chars(nWidthChars);
mxMF_REPEAT_AUTO_AFTER->set_max(nMax, FieldUnit::SECOND);
mxMF_REPEAT_AUTO_AFTER->set_width_chars(nWidthChars);
mxCBX_duration->set_width_chars(nWidthChars);
if( pDoc )
@@ -430,9 +436,14 @@ void SlideTransitionPane::Initialize(SdDrawDocument* pDoc)
mxRB_ADVANCE_ON_MOUSE->connect_toggled( LINK( this, SlideTransitionPane, AdvanceSlideRadioButtonToggled ));
mxRB_ADVANCE_AUTO->connect_toggled( LINK( this, SlideTransitionPane, AdvanceSlideRadioButtonToggled ));
mxMF_ADVANCE_AUTO_AFTER->connect_value_changed( LINK( this, SlideTransitionPane, AdvanceTimeModified ));
mxRB_REPEAT_DISABLED->connect_toggled( LINK( this, SlideTransitionPane, RepeatAfterRadioButtonToggled ));
mxRB_REPEAT_AUTO->connect_toggled( LINK( this, SlideTransitionPane, RepeatAfterRadioButtonToggled ));
mxMF_REPEAT_AUTO_AFTER->connect_value_changed( LINK( this, SlideTransitionPane, RepeatAfterTimeModified ));
mxCB_AUTO_PREVIEW->connect_toggled( LINK( this, SlideTransitionPane, AutoPreviewClicked ));
addListener();
mxRB_REPEAT_DISABLED->set_active( true );
maLateInitTimer.SetTimeout(200);
maLateInitTimer.SetInvokeHandler(LINK(this, SlideTransitionPane, LateInitCallback));
maLateInitTimer.Start();
@@ -444,6 +455,7 @@ SlideTransitionPane::~SlideTransitionPane()
removeListener();
mxTransitionsScrollWindow.reset();
mxTransitionsIconView.reset();
mxRepeatAutoFrame.reset();
mxLB_VARIANT.reset();
mxCBX_duration.reset();
mxFT_SOUND.reset();
@@ -452,6 +464,9 @@ SlideTransitionPane::~SlideTransitionPane()
mxRB_ADVANCE_ON_MOUSE.reset();
mxRB_ADVANCE_AUTO.reset();
mxMF_ADVANCE_AUTO_AFTER.reset();
mxRB_REPEAT_DISABLED.reset();
mxRB_REPEAT_AUTO.reset();
mxMF_REPEAT_AUTO_AFTER.reset();
mxPB_APPLY_TO_ALL.reset();
mxPB_PLAY.reset();
mxCB_AUTO_PREVIEW.reset();
@@ -593,6 +608,20 @@ void SlideTransitionPane::updateControls()
mxMF_ADVANCE_AUTO_AFTER->set_value(aEffect.mfTime * 100.0, FieldUnit::SECOND);
}
sd::PresentationSettings& rSettings = mpDrawDoc->getPresentationSettings();
if ( !rSettings.mbEndless )
{
mxRB_REPEAT_DISABLED->set_active( true );
mxRB_REPEAT_AUTO->set_active( false );
}
else
{
mxRB_REPEAT_DISABLED->set_active( false );
mxRB_REPEAT_AUTO->set_active( true );
mxMF_REPEAT_AUTO_AFTER->set_value(rSettings.mnPauseTimeout, FieldUnit::SECOND);
}
if (comphelper::LibreOfficeKit::isActive())
{
mxPB_PLAY->hide();
@@ -604,6 +633,7 @@ void SlideTransitionPane::updateControls()
}
else
{
mxRepeatAutoFrame->hide();
SdOptions* pOptions = SD_MOD()->GetSdOptions(DocumentType::Impress);
mxCB_AUTO_PREVIEW->set_active( pOptions->IsPreviewTransitions() );
}
@@ -624,6 +654,9 @@ void SlideTransitionPane::updateControlState()
mxRB_ADVANCE_ON_MOUSE->set_sensitive( mbHasSelection );
mxRB_ADVANCE_AUTO->set_sensitive( mbHasSelection );
mxMF_ADVANCE_AUTO_AFTER->set_sensitive( mbHasSelection && mxRB_ADVANCE_AUTO->get_active());
mxRB_REPEAT_DISABLED->set_sensitive( mbHasSelection );
mxRB_REPEAT_AUTO->set_sensitive( mbHasSelection );
mxMF_REPEAT_AUTO_AFTER->set_sensitive( mbHasSelection && mxRB_REPEAT_AUTO->get_active());
mxPB_APPLY_TO_ALL->set_sensitive( mbHasSelection );
mxPB_PLAY->set_sensitive( mbHasSelection );
@@ -793,6 +826,27 @@ impl::TransitionEffect SlideTransitionPane::getTransitionEffectFromControls() co
aResult.mbPresChangeAmbiguous = false;
}
// transition repeat after
if (mxRB_REPEAT_DISABLED->get_sensitive() && mxRB_REPEAT_AUTO->get_sensitive()
&& (mxRB_REPEAT_DISABLED->get_active() || mxRB_REPEAT_AUTO->get_active()))
{
sd::PresentationSettings& rSettings = mpDrawDoc->getPresentationSettings();
if ( mxRB_REPEAT_DISABLED->get_active() )
{
rSettings.mbEndless = false;
rSettings.mnPauseTimeout = 0;
}
else
{
if ( mxMF_REPEAT_AUTO_AFTER->get_sensitive() )
{
rSettings.mbEndless = true;
rSettings.mnPauseTimeout = static_cast<sal_uInt32>(mxMF_REPEAT_AUTO_AFTER->get_value(FieldUnit::SECOND));
}
}
}
// sound
if( mxLB_SOUND->get_sensitive())
{
@@ -1005,11 +1059,22 @@ IMPL_LINK_NOARG(SlideTransitionPane, AdvanceSlideRadioButtonToggled, weld::Toggl
applyToSelectedPages(false);
}
IMPL_LINK_NOARG(SlideTransitionPane, RepeatAfterRadioButtonToggled, weld::Toggleable&, void)
{
updateControlState();
applyToSelectedPages(false);
}
IMPL_LINK_NOARG(SlideTransitionPane, AdvanceTimeModified, weld::MetricSpinButton&, void)
{
applyToSelectedPages(false);
}
IMPL_LINK_NOARG(SlideTransitionPane, RepeatAfterTimeModified, weld::MetricSpinButton&, void)
{
applyToSelectedPages(false);
}
IMPL_LINK_NOARG(SlideTransitionPane, VariantListBoxSelected, weld::ComboBox&, void)
{
applyToSelectedPages();
+6
View File
@@ -94,7 +94,9 @@ private:
DECL_LINK( TransitionSelected, weld::IconView&, bool );
DECL_LINK( AdvanceSlideRadioButtonToggled, weld::Toggleable&, void );
DECL_LINK( RepeatAfterRadioButtonToggled, weld::Toggleable&, void );
DECL_LINK( AdvanceTimeModified, weld::MetricSpinButton&, void );
DECL_LINK( RepeatAfterTimeModified, weld::MetricSpinButton&, void );
DECL_LINK( VariantListBoxSelected, weld::ComboBox&, void );
DECL_LINK( DurationModifiedHdl, weld::MetricSpinButton&, void );
DECL_LINK( DurationLoseFocusHdl, weld::Widget&, void );
@@ -108,6 +110,7 @@ private:
std::unique_ptr<weld::IconView> mxTransitionsIconView;
std::unique_ptr<weld::ScrolledWindow> mxTransitionsScrollWindow;
std::unique_ptr<weld::Frame> mxRepeatAutoFrame;
std::unique_ptr<weld::ComboBox> mxLB_VARIANT;
std::unique_ptr<weld::MetricSpinButton> mxCBX_duration;
std::unique_ptr<weld::Label> mxFT_SOUND;
@@ -116,6 +119,9 @@ private:
std::unique_ptr<weld::RadioButton> mxRB_ADVANCE_ON_MOUSE;
std::unique_ptr<weld::RadioButton> mxRB_ADVANCE_AUTO;
std::unique_ptr<weld::MetricSpinButton> mxMF_ADVANCE_AUTO_AFTER;
std::unique_ptr<weld::RadioButton> mxRB_REPEAT_DISABLED;
std::unique_ptr<weld::RadioButton> mxRB_REPEAT_AUTO;
std::unique_ptr<weld::MetricSpinButton> mxMF_REPEAT_AUTO_AFTER;
std::unique_ptr<weld::Button> mxPB_APPLY_TO_ALL;
std::unique_ptr<weld::Button> mxPB_PLAY;
std::unique_ptr<weld::CheckButton> mxCB_AUTO_PREVIEW;
+10
View File
@@ -4378,6 +4378,16 @@ OString SdXImpressDocument::getPresentationInfo() const
aJsonWriter.put("nextSlideDuration", fSlideDuration * 1000);
}
}
sd::PresentationSettings const& rSettings = mpDoc->getPresentationSettings();
const bool bIsEndless = rSettings.mbEndless;
aJsonWriter.put("isEndless", bIsEndless);
if (bIsEndless) {
const sal_Int32 nPauseTimeout = rSettings.mnPauseTimeout;
aJsonWriter.put("loopAndRepeatDuration", nPauseTimeout);
}
}
AnimationsExporter aAnimationExporter(aJsonWriter, pSlide);
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<!-- Generated with glade 3.38.2 -->
<interface domain="sd">
<requires lib="gtk+" version="3.20"/>
<object class="GtkAdjustment" id="adjustment1">
@@ -332,6 +332,106 @@
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="repeat_after_frame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">none</property>
<child>
<!-- n-columns=2 n-rows=2 -->
<object class="GtkGrid" id="grid3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">12</property>
<property name="margin-top">3</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkRadioButton" id="rb_disabled">
<property name="label" translatable="yes" context="slidetransitionspanel|rb_disabled">Disabled</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="active">True</property>
<property name="draw-indicator">True</property>
<child internal-child="accessible">
<object class="AtkObject" id="rb_disabled-atkobject">
<property name="AtkObject::accessible-description" translatable="yes" context="slidetransitionspanel|extended_tip|rb_disabled">Select to advance to the next slide on a mouse click.</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="rb_auto_repeat">
<property name="label" translatable="yes" context="slidetransitionspanel|rb_auto_repeat">After Slideshow:</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
<property name="group">rb_disabled</property>
<accessibility>
<relation type="label-for" target="rb_auto_repeat_value"/>
</accessibility>
<child internal-child="accessible">
<object class="AtkObject" id="rb_auto_repeat-atkobject">
<property name="AtkObject::accessible-description" translatable="yes" context="slidetransitionspanel|extended_tip|rb_auto_repeat">Select to advance to the next slide after a number of seconds. Enter the seconds in the numerical field next to the spin button, or click the spin button.</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="rb_auto_repeat_value">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hexpand">True</property>
<property name="truncate-multiline">True</property>
<property name="adjustment">adjustment1</property>
<property name="digits">2</property>
<accessibility>
<relation type="labelled-by" target="rb_auto_repeat"/>
</accessibility>
<child internal-child="accessible">
<object class="AtkObject" id="rb_auto_repeat_value-atkobject">
<property name="AtkObject::accessible-description" translatable="yes" context="slidetransitionspanel|extended_tip|rb_auto_repeat_value">Select to advance to the next slide after a number of seconds. Enter the seconds in the numerical field next to the spin button, or click the spin button.</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">1</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="lable3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes" context="slidetransitionspanel|rb_auto_repeat">Repeat After</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box2">
<property name="visible">True</property>
@@ -439,7 +539,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
<property name="position">4</property>
</packing>
</child>
</object>
@@ -461,6 +561,7 @@
<widget name="sound_label"/>
<widget name="variant_label"/>
<widget name="rb_auto_after"/>
<widget name="rb_auto_repeat"/>
</widgets>
</object>
</interface>