summaryrefslogtreecommitdiff
path: root/svx/source/gallery2/GalleryControl.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/gallery2/GalleryControl.cxx')
-rw-r--r--svx/source/gallery2/GalleryControl.cxx302
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