summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--icon-themes/galaxy/sd/cmd/transition-none.pngbin1086 -> 443 bytes
-rw-r--r--icon-themes/galaxy/sd/cmd/transition-random-bars.pngbin1248 -> 658 bytes
-rw-r--r--icon-themes/galaxy/sd/cmd/transition-uncover.pngbin1411 -> 1026 bytes
-rw-r--r--icon-themes/galaxy/sd/cmd/transition-wheel.pngbin1521 -> 1324 bytes
-rw-r--r--icon-themes/galaxy/sd/cmd/transition-wipe.pngbin1449 -> 1256 bytes
-rw-r--r--include/svtools/valueset.hxx2
-rw-r--r--sd/source/ui/animations/SlideTransitionPane.cxx204
-rw-r--r--sd/source/ui/animations/SlideTransitionPane.hxx15
-rw-r--r--sd/uiconfig/simpress/ui/slidetransitionspanel.ui13
9 files changed, 123 insertions, 111 deletions
diff --git a/icon-themes/galaxy/sd/cmd/transition-none.png b/icon-themes/galaxy/sd/cmd/transition-none.png
index 71b14a1d42bf..91575c629f25 100644
--- a/icon-themes/galaxy/sd/cmd/transition-none.png
+++ b/icon-themes/galaxy/sd/cmd/transition-none.png
Binary files differ
diff --git a/icon-themes/galaxy/sd/cmd/transition-random-bars.png b/icon-themes/galaxy/sd/cmd/transition-random-bars.png
index e27b13c3a114..88a03d90259b 100644
--- a/icon-themes/galaxy/sd/cmd/transition-random-bars.png
+++ b/icon-themes/galaxy/sd/cmd/transition-random-bars.png
Binary files differ
diff --git a/icon-themes/galaxy/sd/cmd/transition-uncover.png b/icon-themes/galaxy/sd/cmd/transition-uncover.png
index f799ef8cd3b3..9c216335597c 100644
--- a/icon-themes/galaxy/sd/cmd/transition-uncover.png
+++ b/icon-themes/galaxy/sd/cmd/transition-uncover.png
Binary files differ
diff --git a/icon-themes/galaxy/sd/cmd/transition-wheel.png b/icon-themes/galaxy/sd/cmd/transition-wheel.png
index b674a007cfad..d76fe6acbff7 100644
--- a/icon-themes/galaxy/sd/cmd/transition-wheel.png
+++ b/icon-themes/galaxy/sd/cmd/transition-wheel.png
Binary files differ
diff --git a/icon-themes/galaxy/sd/cmd/transition-wipe.png b/icon-themes/galaxy/sd/cmd/transition-wipe.png
index 6f5cbfbe2b8b..c527277b1bb3 100644
--- a/icon-themes/galaxy/sd/cmd/transition-wipe.png
+++ b/icon-themes/galaxy/sd/cmd/transition-wipe.png
Binary files differ
diff --git a/include/svtools/valueset.hxx b/include/svtools/valueset.hxx
index c3a6f7612797..b51587b442a1 100644
--- a/include/svtools/valueset.hxx
+++ b/include/svtools/valueset.hxx
@@ -89,7 +89,7 @@ WB_NONEFIELD There is a NoSelection field which can be selected if
is selected. This field shows the text which is specified
by SetText() respectively no one, if no text was set. With
SetNoSelection() the selection can be disabled.
-WB_VSCROLL A scroolbar will be always shown. The visible number of
+WB_VSCROLL A scrollbar will be always shown. The visible number of
lines have to be specified with SetLineCount() if this
flag is set.
WB_BORDER A border will be drawn around the window.
diff --git a/sd/source/ui/animations/SlideTransitionPane.cxx b/sd/source/ui/animations/SlideTransitionPane.cxx
index ac54d9ca128d..aa0e1a247be5 100644
--- a/sd/source/ui/animations/SlideTransitionPane.cxx
+++ b/sd/source/ui/animations/SlideTransitionPane.cxx
@@ -52,6 +52,9 @@
#include <algorithm>
+#define TRANSITION_THUMB_WIDTH 64
+#define TRANSITION_THUMB_HEIGHT 40
+
using namespace ::com::sun::star;
using ::com::sun::star::uno::Reference;
@@ -358,6 +361,28 @@ void lcl_FillSoundListBox(
namespace sd
{
+class TransitionPane : public ValueSet
+{
+public:
+ TransitionPane( vcl::Window *pParent ) :
+ ValueSet( pParent, WB_TABSTOP | WB_3DLOOK | WB_BORDER |
+ WB_ITEMBORDER | WB_FLATVALUESET | WB_VSCROLL )
+ {
+ EnableFullItemMode( false );
+ set_hexpand( true );
+ set_vexpand( true );
+ SetExtraSpacing( 2 );
+ SetItemWidth( TRANSITION_THUMB_WIDTH );
+ SetItemHeight( TRANSITION_THUMB_HEIGHT );
+ }
+ virtual ~TransitionPane() { disposeOnce(); }
+
+ virtual Size GetOptimalSize() const
+ {
+ return LogicToPixel(Size(70, 88), MAP_APPFONT);
+ }
+};
+
// SlideTransitionPane
SlideTransitionPane::SlideTransitionPane(
Window * pParent,
@@ -373,7 +398,6 @@ SlideTransitionPane::SlideTransitionPane(
mbIsMainViewChangePending( false ),
maLateInitTimer()
{
- get(mpLB_SLIDE_TRANSITIONS, "transitions_list");
get(mpFT_VARIANT, "variant_label");
get(mpLB_VARIANT, "variant_list");
get(mpFT_SPEED, "speed_label");
@@ -388,8 +412,11 @@ SlideTransitionPane::SlideTransitionPane(
get(mpPB_PLAY, "play");
get(mpCB_AUTO_PREVIEW, "auto_preview");
- mpLB_SLIDE_TRANSITIONS->set_width_request(mpLB_SLIDE_TRANSITIONS->approximate_char_width() * 16);
- mpLB_SLIDE_TRANSITIONS->SetDropDownLineCount(4);
+ VclPtr<VclAlignment> xAlign;
+ get(xAlign, "transitions_icons");
+
+ mpVS_TRANSITION_ICONS = VclPtr<TransitionPane>::Create(xAlign);
+ mpVS_TRANSITION_ICONS->Show();
mpLB_VARIANT->SetDropDownLineCount(4);
@@ -399,9 +426,9 @@ SlideTransitionPane::SlideTransitionPane(
if( mxModel.is())
mxView.set( mxModel->getCurrentController(), uno::UNO_QUERY );
- // fill list box of slide transitions
- mpLB_SLIDE_TRANSITIONS->InsertEntry( SD_RESSTR( STR_SLIDETRANSITION_NONE ), Image( BitmapEx( "sd/cmd/transition-none.png" ) ) );
- m_aTransitionLBToSet.push_back( "" );
+ // dummy list box of slide transitions for startup.
+ mpVS_TRANSITION_ICONS->InsertItem( 0, Image( BitmapEx( "sd/cmd/transition-none.png" ) ),
+ SD_RESSTR( STR_SLIDETRANSITION_NONE ) );
// set defaults
mpCB_AUTO_PREVIEW->Check(); // automatic preview on
@@ -413,7 +440,7 @@ SlideTransitionPane::SlideTransitionPane(
mpPB_APPLY_TO_ALL->SetClickHdl( LINK( this, SlideTransitionPane, ApplyToAllButtonClicked ));
mpPB_PLAY->SetClickHdl( LINK( this, SlideTransitionPane, PlayButtonClicked ));
- mpLB_SLIDE_TRANSITIONS->SetSelectHdl( LINK( this, SlideTransitionPane, TransitionSelected ));
+ mpVS_TRANSITION_ICONS->SetSelectHdl( LINK( this, SlideTransitionPane, TransitionSelected ));
mpLB_VARIANT->SetSelectHdl( LINK( this, SlideTransitionPane, VariantListBoxSelected ));
mpLB_SPEED->SetSelectHdl( LINK( this, SlideTransitionPane, SpeedListBoxSelected ));
@@ -442,7 +469,7 @@ void SlideTransitionPane::dispose()
{
maLateInitTimer.Stop();
removeListener();
- mpLB_SLIDE_TRANSITIONS.clear();
+ mpVS_TRANSITION_ICONS.disposeAndClear();
mpFT_VARIANT.clear();
mpLB_VARIANT.clear();
mpFT_SPEED.clear();
@@ -540,61 +567,18 @@ void SlideTransitionPane::updateControls()
// detect current slide effect
if( aEffect.mbEffectAmbiguous )
- mpLB_SLIDE_TRANSITIONS->SetNoSelection();
+ {
+ SAL_WARN( "sd.transitions", "Unusual, ambiguous transition effect" );
+ mpVS_TRANSITION_ICONS->SetNoSelection();
+ }
else
{
// ToDo: That 0 is "no transition" is documented nowhere except in the
// CTOR of sdpage
if( aEffect.mnType == 0 )
- mpLB_SLIDE_TRANSITIONS->SelectEntryPos( 0 );
+ mpVS_TRANSITION_ICONS->SetNoSelection();
else
- {
- int nEntry = LISTBOX_ENTRY_NOTFOUND;
- const sd::TransitionPresetList& rPresetList = sd::TransitionPreset::getTransitionPresetList();
- sd::TransitionPresetPtr pFound;
-
- for( auto aIt: rPresetList )
- {
- if( aEffect.operator==( *aIt ))
- {
- pFound = aIt;
- // This function can be called before LateInit, with m_aSetToTransitionLBIndex
- // not set up properly. In that case nEntry will stay as
- // LISTBOX_ENTRY_NOTFOUND. But in that case we will be called soon again, I think.
- if( m_aSetToTransitionLBIndex.find( aIt->getSetId() ) != m_aSetToTransitionLBIndex.end() )
- nEntry = m_aSetToTransitionLBIndex[aIt->getSetId()];
- break;
- }
- }
-
- mpLB_VARIANT->Clear();
- if( nEntry == LISTBOX_ENTRY_NOTFOUND )
- {
- mpLB_SLIDE_TRANSITIONS->SetNoSelection();
- mpLB_VARIANT->Enable( false );
- }
- else
- {
- // Fill in the variant listbox
- for( auto aIt: rPresetList )
- {
- if( aIt->getSetId().equals( pFound->getSetId() ) )
- {
- if( !aIt->getVariantLabel().isEmpty() )
- {
- mpLB_VARIANT->InsertEntry( aIt->getVariantLabel() );
- if( aEffect.operator==( *aIt ))
- mpLB_VARIANT->SelectEntryPos( mpLB_VARIANT->GetEntryCount()-1 );
- }
- }
- }
- if( mpLB_VARIANT->GetEntryCount() == 0 )
- mpLB_VARIANT->Enable( false );
- else
- mpLB_VARIANT->Enable();
- mpLB_SLIDE_TRANSITIONS->SelectEntryPos( nEntry );
- }
- }
+ updateVariants( getPresetOffset( aEffect ) );
}
if( aEffect.mbDurationAmbiguous )
@@ -664,7 +648,7 @@ void SlideTransitionPane::updateControls()
void SlideTransitionPane::updateControlState()
{
- mpLB_SLIDE_TRANSITIONS->Enable( mbHasSelection );
+ mpVS_TRANSITION_ICONS->Enable( mbHasSelection );
mpLB_VARIANT->Enable( mbHasSelection && mpLB_VARIANT->GetEntryCount() > 0 );
mpLB_SPEED->Enable( mbHasSelection );
mpLB_SOUND->Enable( mbHasSelection );
@@ -765,16 +749,19 @@ impl::TransitionEffect SlideTransitionPane::getTransitionEffectFromControls() co
aResult.setAllAmbiguous();
// check first (aResult might be overwritten)
- if( mpLB_SLIDE_TRANSITIONS->IsEnabled() &&
- mpLB_SLIDE_TRANSITIONS->GetSelectEntryCount() > 0 )
+ if( mpVS_TRANSITION_ICONS->IsEnabled() &&
+ !mpVS_TRANSITION_ICONS->IsNoSelection() &&
+ mpVS_TRANSITION_ICONS->GetSelectItemId() > 0 )
{
const sd::TransitionPresetList& rPresetList = sd::TransitionPreset::getTransitionPresetList();
+ auto aSelected = rPresetList.begin();
+ std::advance( aSelected, mpVS_TRANSITION_ICONS->GetSelectItemId() - 1);
int nVariant = 0;
bool bFound = false;
for( auto aIter: rPresetList )
{
- if( aIter->getSetId().equals(m_aTransitionLBToSet[mpLB_SLIDE_TRANSITIONS->GetSelectEntryPos()]) )
+ if( aIter->getSetId() == (*aSelected)->getSetId() )
{
if( mpLB_VARIANT->GetSelectEntryPos() == nVariant)
{
@@ -1004,35 +991,71 @@ IMPL_LINK_NOARG_TYPED(SlideTransitionPane, PlayButtonClicked, Button*, void)
playCurrentEffect();
}
-IMPL_LINK_NOARG_TYPED(SlideTransitionPane, TransitionSelected, ListBox&, void)
+IMPL_LINK_NOARG_TYPED(SlideTransitionPane, TransitionSelected, ValueSet *, void)
{
- mpLB_VARIANT->Clear();
+ updateVariants( mpVS_TRANSITION_ICONS->GetSelectItemId() - 1 );
+ applyToSelectedPages();
+}
- if( mpLB_SLIDE_TRANSITIONS->GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND)
- return;
+/// Returns an offset into the list of transition presets
+size_t SlideTransitionPane::getPresetOffset( const impl::TransitionEffect &rEffect )
+{
+ const sd::TransitionPresetList& rPresetList =
+ sd::TransitionPreset::getTransitionPresetList();
+ sd::TransitionPresetPtr pFound;
- if( mpLB_SLIDE_TRANSITIONS->GetSelectEntryPos() > 0)
+ size_t nIdx = 0;
+ for( auto aIt: rPresetList )
{
- const sd::TransitionPresetList& rPresetList = sd::TransitionPreset::getTransitionPresetList();
-
- for( auto aIt: rPresetList )
- {
- if( m_aSetToTransitionLBIndex[aIt->getSetId()] == mpLB_SLIDE_TRANSITIONS->GetSelectEntryPos() )
- mpLB_VARIANT->InsertEntry( aIt->getVariantLabel() );
- }
+ if( rEffect.operator==( *aIt ))
+ break;
+ nIdx++;
}
+ return nIdx;
+}
- if( mpLB_VARIANT->GetEntryCount() == 0 )
+/// we use an integer offset into the list of transition presets
+void SlideTransitionPane::updateVariants( size_t nPresetOffset )
+{
+ const sd::TransitionPresetList& rPresetList = sd::TransitionPreset::getTransitionPresetList();
+ mpLB_VARIANT->Clear();
+ mpVS_TRANSITION_ICONS->SetNoSelection();
+
+ if( nPresetOffset >= rPresetList.size() )
{
mpLB_VARIANT->Enable( false );
}
else
{
- mpLB_VARIANT->Enable();
- mpLB_VARIANT->SelectEntryPos( 0 );
- }
+ auto pFound = rPresetList.begin();
+ std::advance( pFound, nPresetOffset );
- applyToSelectedPages();
+ // Fill in the variant listbox
+ size_t nFirstItem = 0, nItem = 1;
+ for( auto aIt: rPresetList )
+ {
+ if( aIt->getSetId().equals( (*pFound)->getSetId() ) )
+ {
+ if (!nFirstItem)
+ nFirstItem = nItem;
+ if( !aIt->getVariantLabel().isEmpty() )
+ {
+ mpLB_VARIANT->InsertEntry( aIt->getVariantLabel() );
+ if( *pFound == aIt )
+ mpLB_VARIANT->SelectEntryPos( mpLB_VARIANT->GetEntryCount()-1 );
+ }
+ }
+ nItem++;
+ }
+
+ if( mpLB_VARIANT->GetEntryCount() == 0 )
+ mpLB_VARIANT->Enable( false );
+ else
+ mpLB_VARIANT->Enable();
+
+ // item has the id of the first transition from this set.
+ mpVS_TRANSITION_ICONS->SelectItem( nFirstItem );
+ }
}
IMPL_LINK_NOARG_TYPED(SlideTransitionPane, AdvanceSlideRadioButtonToggled, RadioButton&, void)
@@ -1086,6 +1109,7 @@ IMPL_LINK_NOARG_TYPED(SlideTransitionPane, LateInitCallback, Timer *, void)
{
const TransitionPresetList& rPresetList = TransitionPreset::getTransitionPresetList();
+ size_t nPresetOffset = 0;
for( auto aIter: rPresetList )
{
TransitionPresetPtr pPreset = aIter;
@@ -1095,32 +1119,32 @@ IMPL_LINK_NOARG_TYPED(SlideTransitionPane, LateInitCallback, Timer *, void)
if( m_aNumVariants.find( pPreset->getSetId() ) == m_aNumVariants.end() )
{
OUString sImageName("sd/cmd/transition-" + pPreset->getSetId() + ".png");
+ BitmapEx aIcon( sImageName );
+ if ( aIcon.IsEmpty() ) // need a fallback
+ aIcon = BitmapEx( "sd/cmd/transition-none.png" );
- mpLB_SLIDE_TRANSITIONS->InsertEntry( sLabel, Image( BitmapEx( sImageName) ) );
-
- m_aTransitionLBToSet.push_back( pPreset->getSetId() );
-
- assert( m_aTransitionLBToSet.size() == static_cast<size_t>( mpLB_SLIDE_TRANSITIONS->GetEntryCount() ) );
+ mpVS_TRANSITION_ICONS->InsertItem( nPresetOffset + 1, Image( aIcon ), sLabel );
m_aNumVariants[ pPreset->getSetId() ] = 1;
- m_aSetToTransitionLBIndex[ aIter->getSetId() ] = mpLB_SLIDE_TRANSITIONS->GetEntryCount() - 1;
}
else
{
m_aNumVariants[ pPreset->getSetId() ]++;
}
}
+ nPresetOffset++;
}
- for( int i = 0; i < mpLB_SLIDE_TRANSITIONS->GetEntryCount(); ++i )
- SAL_INFO("sd.transitions", i << ":" << mpLB_SLIDE_TRANSITIONS->GetEntry( i ) << " (" << m_aTransitionLBToSet[i] << ")");
+ SAL_INFO( "sd.transitions", "Item transition offsets in ValueSet:");
+ for( size_t i = 0; i < mpVS_TRANSITION_ICONS->GetItemCount(); ++i )
+ SAL_INFO( "sd.transitions", i << ":" << mpVS_TRANSITION_ICONS->GetItemId( i ) );
+ nPresetOffset = 0;
+ SAL_INFO( "sd.transitions", "Transition presets by offsets:");
for( auto aIter: rPresetList )
{
- SAL_INFO("sd.transitions",
- aIter->getPresetId() << ": " <<
- m_aSetToTransitionLBIndex[ aIter->getSetId() ] <<
- " (" << mpLB_SLIDE_TRANSITIONS->GetEntry( m_aSetToTransitionLBIndex[ aIter->getSetId() ] ) << ")" );
+ SAL_INFO( "sd.transitions ", nPresetOffset++ << " " <<
+ aIter->getPresetId() << ": " << aIter->getSetId() );
}
updateSoundList();
diff --git a/sd/source/ui/animations/SlideTransitionPane.hxx b/sd/source/ui/animations/SlideTransitionPane.hxx
index 814995ec9c2e..c52344716f24 100644
--- a/sd/source/ui/animations/SlideTransitionPane.hxx
+++ b/sd/source/ui/animations/SlideTransitionPane.hxx
@@ -29,6 +29,7 @@
#include <vcl/fixed.hxx>
#include <vcl/button.hxx>
#include <vcl/field.hxx>
+#include <svtools/valueset.hxx>
#include <svx/sidebar/PanelLayout.hxx>
#include <sfx2/sidebar/ControlFactory.hxx>
#include <com/sun/star/drawing/XDrawView.hpp>
@@ -69,6 +70,8 @@ public:
private:
void updateControls();
void updateControlState();
+ void updateVariants(size_t nPresetOffset);
+ size_t getPresetOffset(const impl::TransitionEffect &rEffect);
void updateSoundList();
void openSoundFileDialog();
@@ -90,20 +93,20 @@ private:
DECL_LINK_TYPED( PlayButtonClicked, Button*, void );
DECL_LINK_TYPED( AutoPreviewClicked, Button*, void );
- DECL_LINK_TYPED( TransitionSelected, ListBox&, void );
+ DECL_LINK_TYPED( TransitionSelected, ValueSet *, void );
DECL_LINK_TYPED( AdvanceSlideRadioButtonToggled, RadioButton&, void );
DECL_LINK_TYPED( AdvanceTimeModified, Edit&, void );
DECL_LINK_TYPED( VariantListBoxSelected, ListBox&, void );
DECL_LINK_TYPED( SpeedListBoxSelected, ListBox&, void );
DECL_LINK_TYPED( SoundListBoxSelected, ListBox&, void );
DECL_LINK_TYPED( LoopSoundBoxChecked, Button*, void );
- DECL_LINK_TYPED(EventMultiplexerListener, tools::EventMultiplexerEvent&, void);
+ DECL_LINK_TYPED( EventMultiplexerListener, tools::EventMultiplexerEvent&, void );
DECL_LINK_TYPED(LateInitCallback, Timer *, void);
ViewShellBase & mrBase;
SdDrawDocument * mpDrawDoc;
- VclPtr<ListBox> mpLB_SLIDE_TRANSITIONS;
+ VclPtr<ValueSet> mpVS_TRANSITION_ICONS;
VclPtr<FixedText> mpFT_VARIANT;
VclPtr<ListBox> mpLB_VARIANT;
VclPtr<FixedText> mpFT_SPEED;
@@ -129,12 +132,6 @@ private:
tSoundListType maSoundList;
mutable OUString maCurrentSoundFile;
- // Map from TransitionSets (as in Effects.xcu) to mpLB_SLIDE_TRANSITIONS entry index.
- std::map< OUString, int > m_aSetToTransitionLBIndex;
-
- // The reverse mapping: TransitionSets id of each entry in mpLB_SLIDE_TRANSITIONS.
- std::vector< OUString > m_aTransitionLBToSet;
-
// How many variants each transition set has
std::map< OUString, int > m_aNumVariants;
diff --git a/sd/uiconfig/simpress/ui/slidetransitionspanel.ui b/sd/uiconfig/simpress/ui/slidetransitionspanel.ui
index aed73b8fe587..34d6f5d71a4d 100644
--- a/sd/uiconfig/simpress/ui/slidetransitionspanel.ui
+++ b/sd/uiconfig/simpress/ui/slidetransitionspanel.ui
@@ -25,21 +25,12 @@
<property name="can_focus">False</property>
<property name="vexpand">True</property>
<child>
- <object class="GtkAlignment" id="alignment3">
+ <object class="GtkAlignment" id="transitions_icons">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
- <child>
- <object class="GtkTreeView" id="transitions_list:border">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="vexpand">True</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection"/>
- </child>
- </object>
- </child>
+ <child/>
</object>
<packing>
<property name="expand">False</property>