| /************************************************************** |
| * |
| * 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. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sc.hxx" |
| |
| // System - Includes ----------------------------------------------------- |
| |
| #include <string> // HACK: prevent conflict between STLPORT and Workshop headers |
| |
| |
| |
| // INCLUDE --------------------------------------------------------------- |
| |
| #include <tools/shl.hxx> |
| #include <svl/intitem.hxx> |
| #include <sfx2/dispatch.hxx> |
| #include <sfx2/dispatch.hxx> |
| #include <sfx2/viewsh.hxx> |
| #include <sfx2/viewfrm.hxx> |
| #include <sfx2/imagemgr.hxx> |
| #include <vcl/toolbox.hxx> |
| |
| #include "tbinsert.hxx" |
| #include "tbinsert.hrc" |
| #include "global.hxx" |
| #include "scmod.hxx" |
| #include "scresid.hxx" |
| #include "sc.hrc" |
| |
| // ----------------------------------------------------------------------- |
| |
| SFX_IMPL_TOOLBOX_CONTROL( ScTbxInsertCtrl, SfxUInt16Item); |
| |
| //------------------------------------------------------------------ |
| // |
| // ToolBox - Controller |
| // |
| //------------------------------------------------------------------ |
| |
| ScTbxInsertCtrl::ScTbxInsertCtrl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) : |
| SfxToolBoxControl( nSlotId, nId, rTbx ), |
| nLastSlotId(0) |
| { |
| rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) ); |
| } |
| |
| __EXPORT ScTbxInsertCtrl::~ScTbxInsertCtrl() |
| { |
| } |
| |
| void __EXPORT ScTbxInsertCtrl::StateChanged( sal_uInt16 /* nSID */, SfxItemState eState, |
| const SfxPoolItem* pState ) |
| { |
| GetToolBox().EnableItem( GetId(), (GetItemState(pState) != SFX_ITEM_DISABLED) ); |
| |
| if( eState == SFX_ITEM_AVAILABLE ) |
| { |
| |
| const SfxUInt16Item* pItem = PTR_CAST( SfxUInt16Item, pState ); |
| if(pItem) |
| { |
| nLastSlotId = pItem->GetValue(); |
| sal_uInt16 nImageId = nLastSlotId ? nLastSlotId : GetSlotId(); |
| rtl::OUString aSlotURL( RTL_CONSTASCII_USTRINGPARAM( "slot:" )); |
| aSlotURL += rtl::OUString::valueOf( sal_Int32( nImageId )); |
| Image aImage = GetImage( m_xFrame, |
| aSlotURL, |
| hasBigImages(), |
| GetToolBox().GetSettings().GetStyleSettings().GetHighContrastMode() ); |
| GetToolBox().SetItemImage(GetId(), aImage); |
| } |
| } |
| } |
| |
| SfxPopupWindow* __EXPORT ScTbxInsertCtrl::CreatePopupWindow() |
| { |
| // sal_uInt16 nWinResId, nTbxResId; |
| sal_uInt16 nSlotId = GetSlotId(); |
| if (nSlotId == SID_TBXCTL_INSERT) |
| { |
| rtl::OUString aInsertBarResStr( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/insertbar" )); |
| createAndPositionSubToolBar( aInsertBarResStr ); |
| // nWinResId = RID_TBXCTL_INSERT; |
| // nTbxResId = RID_TOOLBOX_INSERT; |
| } |
| else if (nSlotId == SID_TBXCTL_INSCELLS) |
| { |
| rtl::OUString aInsertCellsBarResStr( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/insertcellsbar" )); |
| createAndPositionSubToolBar( aInsertCellsBarResStr ); |
| // nWinResId = RID_TBXCTL_INSCELLS; |
| // nTbxResId = RID_TOOLBOX_INSCELLS; |
| } |
| else /* SID_TBXCTL_INSOBJ */ |
| { |
| rtl::OUString aInsertObjectBarResStr( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/insertobjectbar" )); |
| createAndPositionSubToolBar( aInsertObjectBarResStr ); |
| // nWinResId = RID_TBXCTL_INSOBJ; |
| // nTbxResId = RID_TOOLBOX_INSOBJ; |
| } |
| /* |
| WindowAlign eNewAlign = ( GetToolBox().IsHorizontal() ) ? WINDOWALIGN_LEFT : WINDOWALIGN_TOP; |
| ScTbxInsertPopup *pWin = new ScTbxInsertPopup( nSlotId, eNewAlign, |
| ScResId(nWinResId), ScResId(nTbxResId), GetBindings() ); |
| pWin->StartPopupMode(&GetToolBox(), sal_True); |
| pWin->StartSelection(); |
| pWin->Show(); |
| return pWin; |
| */ |
| return NULL; |
| } |
| |
| SfxPopupWindowType __EXPORT ScTbxInsertCtrl::GetPopupWindowType() const |
| { |
| return nLastSlotId ? SFX_POPUPWINDOW_ONTIMEOUT : SFX_POPUPWINDOW_ONCLICK; |
| } |
| |
| void __EXPORT ScTbxInsertCtrl::Select( sal_Bool /* bMod1 */ ) |
| { |
| SfxViewShell* pCurSh( SfxViewShell::Current() ); |
| SfxDispatcher* pDispatch( 0 ); |
| |
| if ( pCurSh ) |
| { |
| SfxViewFrame* pViewFrame = pCurSh->GetViewFrame(); |
| if ( pViewFrame ) |
| pDispatch = pViewFrame->GetDispatcher(); |
| } |
| |
| if ( pDispatch ) |
| pDispatch->Execute(nLastSlotId); |
| } |
| /* |
| //------------------------------------------------------------------ |
| // |
| // Popup - Window |
| // |
| //------------------------------------------------------------------ |
| |
| ScTbxInsertPopup::ScTbxInsertPopup( sal_uInt16 nId, WindowAlign eNewAlign, |
| const ResId& rRIdWin, const ResId& rRIdTbx, |
| SfxBindings& rBindings ) : |
| SfxPopupWindow ( nId, rRIdWin, rBindings), |
| aTbx ( this, GetBindings(), rRIdTbx ), |
| aRIdWinTemp(rRIdWin), |
| aRIdTbxTemp(rRIdTbx) |
| { |
| aTbx.UseDefault(); |
| FreeResource(); |
| |
| aTbx.GetToolBox().SetAlign( eNewAlign ); |
| if (eNewAlign == WINDOWALIGN_LEFT || eNewAlign == WINDOWALIGN_RIGHT) |
| SetText( EMPTY_STRING ); |
| |
| Size aSize = aTbx.CalcWindowSizePixel(); |
| aTbx.SetPosSizePixel( Point(), aSize ); |
| SetOutputSizePixel( aSize ); |
| aTbx.GetToolBox().SetSelectHdl( LINK(this, ScTbxInsertPopup, TbxSelectHdl)); |
| aTbxClickHdl = aTbx.GetToolBox().GetClickHdl(); |
| aTbx.GetToolBox().SetClickHdl( LINK(this, ScTbxInsertPopup, TbxClickHdl)); |
| } |
| |
| ScTbxInsertPopup::~ScTbxInsertPopup() |
| { |
| } |
| |
| SfxPopupWindow* __EXPORT ScTbxInsertPopup::Clone() const |
| { |
| return new ScTbxInsertPopup( GetId(), aTbx.GetToolBox().GetAlign(), |
| aRIdWinTemp, aRIdTbxTemp, |
| (SfxBindings&) GetBindings() ); |
| } |
| |
| void ScTbxInsertPopup::StartSelection() |
| { |
| aTbx.GetToolBox().StartSelection(); |
| } |
| |
| IMPL_LINK(ScTbxInsertPopup, TbxSelectHdl, ToolBox*, pBox) |
| { |
| EndPopupMode(); |
| |
| sal_uInt16 nLastSlotId = pBox->GetCurItemId(); |
| SfxUInt16Item aItem( GetId(), nLastSlotId ); |
| SfxDispatcher* pDisp = GetBindings().GetDispatcher(); |
| pDisp->Execute( GetId(), SFX_CALLMODE_SYNCHRON, &aItem, 0L ); |
| pDisp->Execute( nLastSlotId, SFX_CALLMODE_ASYNCHRON ); |
| return 0; |
| } |
| |
| IMPL_LINK(ScTbxInsertPopup, TbxClickHdl, ToolBox*, pBox) |
| { |
| sal_uInt16 nLastSlotId = pBox->GetCurItemId(); |
| SfxUInt16Item aItem( GetId(), nLastSlotId ); |
| GetBindings().GetDispatcher()->Execute( GetId(), SFX_CALLMODE_SYNCHRON, &aItem, 0L ); |
| if(aTbxClickHdl.IsSet()) |
| aTbxClickHdl.Call(pBox); |
| return 0; |
| } |
| |
| void __EXPORT ScTbxInsertPopup::PopupModeEnd() |
| { |
| aTbx.GetToolBox().EndSelection(); |
| SfxPopupWindow::PopupModeEnd(); |
| } |
| */ |
| |
| |