diff options
Diffstat (limited to 'svx/source/gallery2/GalleryControl.cxx')
-rw-r--r-- | svx/source/gallery2/GalleryControl.cxx | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/svx/source/gallery2/GalleryControl.cxx b/svx/source/gallery2/GalleryControl.cxx new file mode 100644 index 000000000000..ac84b50c0240 --- /dev/null +++ b/svx/source/gallery2/GalleryControl.cxx @@ -0,0 +1,302 @@ +/************************************************************** + * + * 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. + * + *************************************************************/ + +#include "sidebar/PanelFactory.hxx" + +#include "GalleryControl.hxx" + +#include "gallery.hrc" +#include "svx/galmisc.hxx" +#include "svx/gallery1.hxx" +#include "galbrws1.hxx" +#include "galbrws2.hxx" +#include "GallerySplitter.hxx" +#include <vcl/svapp.hxx> +#include <sfx2/sidebar/Theme.hxx> + +#include <boost/bind.hpp> + +namespace svx { namespace sidebar { + +static const sal_Int32 gnInitialVerticalSplitPosition (150); + + +GalleryControl::GalleryControl ( + SfxBindings* pBindings, + Window* pParentWindow) + : Window(pParentWindow, GAL_RESID(RID_SVXDLG_GALLERYBROWSER)), + mpGallery (Gallery::GetGalleryInstance()), + mpBrowser1(new GalleryBrowser1( + this, + GAL_RESID(GALLERY_BROWSER1), + mpGallery, + ::boost::bind(&GalleryControl::KeyInput,this,_1,_2), + ::boost::bind(&GalleryControl::ThemeSelectionHasChanged, this))), + mpSplitter(new GallerySplitter( + this, + GAL_RESID(GALLERY_SPLITTER), + ::boost::bind(&GalleryControl::InitSettings, this))), + mpBrowser2(new GalleryBrowser2(this, GAL_RESID(GALLERY_BROWSER2), mpGallery)), + maLastSize(GetOutputSizePixel()), + mbIsInitialResize(true) +{ + FreeResource(); + + mpBrowser1->SelectTheme(0); + mpBrowser1->Show(sal_True); + + mpBrowser2->Show(sal_True); + + mpSplitter->SetHorizontal(false); + mpSplitter->SetSplitHdl( LINK( this, GalleryControl, SplitHdl ) ); + mpSplitter->Show( sal_True ); + + InitSettings(); +} + + + + +GalleryControl::~GalleryControl (void) +{ +} + + + + +void GalleryControl::InitSettings (void) +{ + SetBackground( Wallpaper( GALLERY_DLG_COLOR ) ); + SetControlBackground( GALLERY_DLG_COLOR ); + SetControlForeground( GALLERY_DLG_COLOR ); + + mpSplitter->SetBackground( Wallpaper( GALLERY_DLG_COLOR ) ); + mpSplitter->SetControlBackground( GALLERY_DLG_COLOR ); + mpSplitter->SetControlForeground( GALLERY_DLG_COLOR ); + + mpBrowser1->SetBackground( Wallpaper( GALLERY_DLG_COLOR ) ); + mpBrowser1->SetControlBackground( GALLERY_DLG_COLOR ); + mpBrowser1->SetControlForeground( GALLERY_DLG_COLOR ); + + mpBrowser2->SetBackground( Wallpaper( GALLERY_DLG_COLOR ) ); + mpBrowser2->SetControlBackground( GALLERY_DLG_COLOR ); + mpBrowser2->SetControlForeground( GALLERY_DLG_COLOR ); + + const Wallpaper aBackground (sfx2::sidebar::Theme::GetWallpaper(sfx2::sidebar::Theme::Paint_PanelBackground)); + mpSplitter->SetBackground(aBackground); + SetBackground(aBackground); + mpBrowser2->SetBackground(aBackground); +} + + + + +void GalleryControl::Resize (void) +{ + // call parent + Window::Resize(); + + // update hor/ver + const Size aNewSize( GetOutputSizePixel() ); + if (aNewSize.Width()<=0 || aNewSize.Height()<=0) + return; + + const bool bNewLayoutHorizontal(aNewSize.Width() > aNewSize.Height()); + const bool bOldLayoutHorizontal(mpSplitter->IsHorizontal()); + long nSplitPos( bOldLayoutHorizontal ? mpSplitter->GetPosPixel().X() : mpSplitter->GetPosPixel().Y()); + const long nSplitSize( bOldLayoutHorizontal ? mpSplitter->GetOutputSizePixel().Width() : mpSplitter->GetOutputSizePixel().Height()); + + if(bNewLayoutHorizontal != bOldLayoutHorizontal) + { + mpSplitter->SetHorizontal(bNewLayoutHorizontal); + } + else + { + if (mbIsInitialResize) + { + nSplitPos = gnInitialVerticalSplitPosition; + if (nSplitPos > aNewSize.Height()/2) + nSplitPos = aNewSize.Height()/2; + } + } + mbIsInitialResize = false; + + const long nFrameLen = LogicToPixel( Size( 3, 0 ), MAP_APPFONT ).Width(); + const long nFrameLen2 = nFrameLen << 1; + + if(bNewLayoutHorizontal) + { + mpBrowser1->SetPosSizePixel( + Point( nFrameLen, nFrameLen ), + Size(nSplitPos - nFrameLen, aNewSize.Height() - nFrameLen2) ); + + mpSplitter->SetPosSizePixel( + Point( nSplitPos, 0), + Size( nSplitSize, aNewSize.Height() ) ); + + mpSplitter->SetDragRectPixel( + Rectangle( + Point( nFrameLen2, 0 ), + Size( aNewSize.Width() - ( nFrameLen2 << 1 ) - nSplitSize, aNewSize.Height() ) ) ); + + mpBrowser2->SetPosSizePixel( + Point( nSplitPos + nSplitSize, nFrameLen ), + Size( aNewSize.Width() - nSplitSize - nSplitPos - nFrameLen, aNewSize.Height() - nFrameLen2 ) ); + } + else + { + mpBrowser1->SetPosSizePixel( + Point( nFrameLen, nFrameLen ), + Size(aNewSize.Width() - nFrameLen2, nSplitPos - nFrameLen)); + + mpSplitter->SetPosSizePixel( + Point( 0, nSplitPos), + Size( aNewSize.Width(), nSplitSize ) ); + + mpSplitter->SetDragRectPixel( + Rectangle( + Point( 0, nFrameLen2 ), + Size( aNewSize.Width(), aNewSize.Height() - ( nFrameLen2 << 1 ) - nSplitSize ) )); + + mpBrowser2->SetPosSizePixel( + Point( nFrameLen, nSplitPos + nSplitSize ), + Size( aNewSize.Width() - nFrameLen2, aNewSize.Height() - nSplitSize - nSplitPos - nFrameLen )); + } + + maLastSize = aNewSize; +} + + + + +sal_Bool GalleryControl::KeyInput( const KeyEvent& rKEvt, Window* ) +{ + const sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode(); + sal_Bool bRet = ( !rKEvt.GetKeyCode().IsMod1() && + ( ( KEY_TAB == nCode ) || ( KEY_F6 == nCode && rKEvt.GetKeyCode().IsMod2() ) ) ); + + if( bRet ) + { + if( !rKEvt.GetKeyCode().IsShift() ) + { + if( mpBrowser1->mpThemes->HasChildPathFocus( sal_True ) ) + mpBrowser2->GetViewWindow()->GrabFocus(); + else if( mpBrowser2->GetViewWindow()->HasFocus() ) + mpBrowser2->maViewBox.GrabFocus(); + else if( mpBrowser2->maViewBox.HasFocus() ) + mpBrowser1->maNewTheme.GrabFocus(); + else + mpBrowser1->mpThemes->GrabFocus(); + } + else + { + if( mpBrowser1->mpThemes->HasChildPathFocus( sal_True ) ) + mpBrowser1->maNewTheme.GrabFocus(); + else if( mpBrowser1->maNewTheme.HasFocus() ) + mpBrowser2->maViewBox.GrabFocus(); + else if( mpBrowser2->maViewBox.HasFocus() ) + mpBrowser2->GetViewWindow()->GrabFocus(); + else + mpBrowser1->mpThemes->GrabFocus(); + } + } + + return bRet; +} + + + + +void GalleryControl::GetFocus (void) +{ + Window::GetFocus(); + mpBrowser1->GrabFocus(); +} + + + + +void GalleryControl::ThemeSelectionHasChanged (void) +{ + mpBrowser2->SelectTheme(mpBrowser1->GetSelectedTheme()); +} + + + + +INetURLObject GalleryControl::GetURL (void) const +{ + return mpBrowser2->GetURL(); +} + + + + +String GalleryControl::GetFilterName (void) const +{ + return mpBrowser2->GetFilterName(); +} + + + + +Graphic GalleryControl::GetGraphic(void) const +{ + return mpBrowser2->GetGraphic(); +} + + + + +sal_Bool GalleryControl::GetVCDrawModel( FmFormModel& rModel ) const +{ + return mpBrowser2->GetVCDrawModel( rModel ); +} + + + + +sal_Bool GalleryControl::IsLinkage (void) const +{ + return mpBrowser2->IsLinkage(); +} + + + + +IMPL_LINK( GalleryControl, SplitHdl, void*, EMPTYARG ) +{ + if(mpSplitter->IsHorizontal()) + { + mpSplitter->SetPosPixel( Point( mpSplitter->GetSplitPosPixel(), mpSplitter->GetPosPixel().Y() ) ); + } + else + { + mpSplitter->SetPosPixel( Point( mpSplitter->GetPosPixel().X(), mpSplitter->GetSplitPosPixel() ) ); + } + + Resize(); + + return 0L; +} + + +} } // end of namespace svx::sidebar |