blob: f10fc96fbb1be3eefa1ef729a8ae4c970e406779 [file] [log] [blame]
/**************************************************************
*
* 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.
*
*************************************************************/
#ifndef SC_TABVWSH_HXX
#define SC_TABVWSH_HXX
#include <svtools/htmlcfg.hxx>
#include <sfx2/viewsh.hxx>
#include <sfx2/viewfac.hxx>
#include <editeng/svxenum.hxx>
#include "scdllapi.h"
#include "dbfunc.hxx" // -> tabview
#include "target.hxx"
#include "rangelst.hxx" // ScRangeListRef
#include "shellids.hxx"
#include "tabprotection.hxx" // for ScPasswordHash
class FmFormShell;
class SbxObject;
class SdrOle2Obj;
class SfxBindings;
class SfxChildWindow;
class SfxModelessDialog;
class SvxBorderLine;
class SvxBoxObjectRef;
class SvxNumberInfoItem;
struct SfxChildWinInfo;
class ScArea;
class ScAuditingShell;
class ScDrawShell;
class ScDrawTextObjectBar;
class ScEditShell;
class ScInputHandler;
class ScPivotShell;
class ScDrawFormShell;
class ScCellShell;
class ScOleObjectShell;
class ScGraphicShell;
class ScMediaShell;
class ScChartShell;
class ScPageBreakShell;
class ScDPObject;
class ScNavigatorSettings;
struct ScHeaderFieldData;
namespace com { namespace sun { namespace star { namespace frame {
class XDispatchProviderInterceptor;
} } } }
namespace svx {
class ExtrusionBar;
class FontworkBar;
}
enum ObjectSelectionType
{
OST_NONE,
OST_Cell,
OST_Editing,
OST_DrawText,
OST_Drawing,
OST_DrawForm,
OST_Pivot,
OST_Auditing,
OST_OleObject,
OST_Chart,
OST_Graphic,
OST_Media
};
//==================================================================
class ScTabViewShell: public SfxViewShell, public ScDBFunc
{
private:
static sal_uInt16 nInsertCtrlState;
static sal_uInt16 nInsCellsCtrlState;
static sal_uInt16 nInsObjCtrlState;
SvxHtmlOptions aHTMLOpt;
ObjectSelectionType eCurOST;
sal_uInt16 nDrawSfxId;
sal_uInt16 nCtrlSfxId;
sal_uInt16 nFormSfxId;
String sDrawCustom; // current custom shape type
ScDrawShell* pDrawShell;
ScDrawTextObjectBar* pDrawTextShell;
ScEditShell* pEditShell;
ScPivotShell* pPivotShell;
ScAuditingShell* pAuditingShell;
ScDrawFormShell* pDrawFormShell;
ScCellShell* pCellShell;
ScOleObjectShell* pOleObjectShell;
ScChartShell* pChartShell;
ScGraphicShell* pGraphicShell;
ScMediaShell* pMediaShell;
ScPageBreakShell* pPageBreakShell;
svx::ExtrusionBar* pExtrusionBarShell;
svx::FontworkBar* pFontworkBarShell;
FmFormShell* pFormShell;
ScInputHandler* pInputHandler; // fuer OLE-Eingabezeile
SvxBorderLine* pCurFrameLine;
::com::sun::star::uno::Reference<
::com::sun::star::frame::XDispatchProviderInterceptor >
xDisProvInterceptor;
Point aWinPos;
ScTabViewTarget aTarget;
ScArea* pPivotSource;
ScDPObject* pDialogDPObject;
ScNavigatorSettings* pNavSettings;
// used in first Activate
sal_Bool bFirstActivate;
sal_Bool bActiveDrawSh;
sal_Bool bActiveDrawTextSh;
sal_Bool bActivePivotSh;
sal_Bool bActiveAuditingSh;
sal_Bool bActiveDrawFormSh;
sal_Bool bActiveOleObjectSh;
sal_Bool bActiveChartSh;
sal_Bool bActiveGraphicSh;
sal_Bool bActiveMediaSh;
sal_Bool bActiveEditSh;
sal_Bool bFormShellAtTop; // does the FormShell need to be on top?
sal_Bool bDontSwitch; // EditShell nicht abschalten
sal_Bool bInFormatDialog; // fuer GetSelectionText
sal_Bool bPrintSelected; // for result of SvxPrtQryBox
sal_Bool bReadOnly; // um Status-Aenderungen zu erkennen
sal_Bool bIsActive;
SbxObject* pScSbxObject;
//UNUSED2008-05 sal_Bool bChartDlgIsEdit; // Datenbereich aendern
sal_Bool bChartAreaValid; // wenn Chart aufgezogen wird
String aEditChartName;
ScRangeListRef aChartSource;
Rectangle aChartPos;
SCTAB nChartDestTab;
sal_uInt16 nCurRefDlgId;
SfxBroadcaster* pAccessibilityBroadcaster;
static const int MASTERENUMCOMMANDS = 6;
String aCurrShapeEnumCommand[ MASTERENUMCOMMANDS ];
sal_Bool bForceFocusOnCurCell; // i123629
private:
void Construct( sal_uInt8 nForceDesignMode = SC_FORCEMODE_NONE );
//UNUSED2008-05 void SetMySubShell( SfxShell* pShell );
SfxShell* GetMySubShell() const;
void DoReadUserData( const String& rData );
void DoReadUserDataSequence( const ::com::sun::star::uno::Sequence<
::com::sun::star::beans::PropertyValue >& rSettings );
DECL_LINK( SimpleRefClose, String* );
DECL_LINK( SimpleRefDone, String* );
DECL_LINK( SimpleRefAborted, String* );
DECL_LINK( SimpleRefChange, String* );
DECL_LINK( FormControlActivated, FmFormShell* );
DECL_LINK( HtmlOptionsHdl, void * );
protected:
virtual void Activate(sal_Bool bMDI);
virtual void Deactivate(sal_Bool bMDI);
virtual sal_uInt16 PrepareClose( sal_Bool bUI = sal_True, sal_Bool bForBrowsing = sal_False );
virtual void ShowCursor(FASTBOOL bOn);
virtual void Move(); // Benachrichtigung
virtual void AdjustPosSizePixel( const Point &rPos, const Size &rSize ); // alt
virtual void InnerResizePixel( const Point &rOfs, const Size &rSize ); // neu
virtual void OuterResizePixel( const Point &rOfs, const Size &rSize );
virtual void SetZoomFactor( const Fraction &rZoomX, const Fraction &rZoomY );
virtual void QueryObjAreaPixel( Rectangle& rRect ) const;
virtual Size GetOptimalSizePixel() const;
virtual String GetSelectionText( sal_Bool bWholeWord );
virtual sal_Bool HasSelection( sal_Bool bText ) const;
virtual String GetDescription() const;
virtual void WriteUserData(String &, sal_Bool bBrowse = sal_False);
virtual void ReadUserData(const String &, sal_Bool bBrowse = sal_False);
virtual void WriteUserDataSequence (::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >&, sal_Bool bBrowse = sal_False );
virtual void ReadUserDataSequence (const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >&, sal_Bool bBrowse = sal_False );
virtual void UIDeactivated( SfxInPlaceClient* pClient );
virtual FASTBOOL KeyInput( const KeyEvent &rKeyEvent );
virtual SdrView* GetDrawView() const;
public:
TYPEINFO_VISIBILITY(SC_DLLPUBLIC);
SFX_DECL_INTERFACE(SCID_TABVIEW_SHELL)
SFX_DECL_VIEWFACTORY(ScTabViewShell);
// -> Clone-Methode fuer Factory
//UNUSED2008-05 ScTabViewShell( SfxViewFrame* pViewFrame,
//UNUSED2008-05 const ScTabViewShell& rWin );
// aus einer allgemeinen Shell konstruieren und
// soviel wie moeglich uebernehmen (SliderPos etc.):
ScTabViewShell( SfxViewFrame* pViewFrame,
SfxViewShell* pOldSh );
virtual ~ScTabViewShell();
Window* GetDialogParent();
bool IsRefInputMode() const;
void ExecuteInputDirect();
ScInputHandler* GetInputHandler() const;
void UpdateInputHandler( sal_Bool bForce = sal_False, sal_Bool bStopEditing = sal_True );
void UpdateInputHandlerCellAdjust( SvxCellHorJustify eJust );
sal_Bool TabKeyInput(const KeyEvent& rKEvt);
sal_Bool SfxKeyInput(const KeyEvent& rKEvt);
void SetActive();
SvxBorderLine* GetDefaultFrameLine() const { return pCurFrameLine; }
void SetDefaultFrameLine(const SvxBorderLine* pLine );
//UNUSED2008-05 void ExecuteShowNIY( SfxRequest& rReq );
//UNUSED2008-05 void StateDisabled( SfxItemSet& rSet );
SC_DLLPUBLIC void Execute( SfxRequest& rReq );
SC_DLLPUBLIC void GetState( SfxItemSet& rSet );
void ExecuteTable( SfxRequest& rReq );
void GetStateTable( SfxItemSet& rSet );
void WindowChanged();
void ExecDraw(SfxRequest&);
void ExecDrawIns(SfxRequest& rReq);
void GetDrawState(SfxItemSet &rSet);
void GetDrawInsState(SfxItemSet &rSet);
void ExecGallery(SfxRequest& rReq); // StarGallery
void GetGalleryState(SfxItemSet& rSet);
void ExecChildWin(SfxRequest& rReq);
void GetChildWinState( SfxItemSet& rSet );
void ExecImageMap( SfxRequest& rReq );
void GetImageMapState( SfxItemSet& rSet );
void ExecTbx( SfxRequest& rReq );
void GetTbxState( SfxItemSet& rSet );
void ExecuteSave( SfxRequest& rReq );
void GetSaveState( SfxItemSet& rSet );
void ExecSearch( SfxRequest& rReq );
void ExecuteUndo(SfxRequest& rReq);
void GetUndoState(SfxItemSet &rSet);
void ExecuteSbx( SfxRequest& rReq );
void GetSbxState( SfxItemSet& rSet );
void ExecuteObject(SfxRequest& rReq);
void GetObjectState(SfxItemSet &rSet);
void ExecDrawOpt(SfxRequest& rReq);
void GetDrawOptState(SfxItemSet &rSet);
void UpdateDrawShell();
void SetDrawShell( sal_Bool bActive );
void SetDrawTextShell( sal_Bool bActive );
void SetPivotShell( sal_Bool bActive );
ScArea* GetPivotSource(){return pPivotSource;}
void SetPivotSource(ScArea* pSrc){pPivotSource=pSrc;}
void SetDialogDPObject( const ScDPObject* pObj );
const ScDPObject* GetDialogDPObject() const { return pDialogDPObject; }
sal_Bool GetDontSwitch(){return bDontSwitch;}
void SetDontSwitch(sal_Bool bFlag){bDontSwitch=bFlag;}
void SetAuditShell( sal_Bool bActive );
void SetDrawFormShell( sal_Bool bActive );
void SetEditShell(EditView* pView, sal_Bool bActive );
void SetOleObjectShell( sal_Bool bActive );
void SetChartShell( sal_Bool bActive );
void SetGraphicShell( sal_Bool bActive );
void SetMediaShell( sal_Bool bActive );
void SetDrawShellOrSub();
void SetCurSubShell( ObjectSelectionType eOST, sal_Bool bForce = sal_False );
void SetFormShellAtTop( sal_Bool bSet );
ObjectSelectionType GetCurObjectSelectionType();
virtual ErrCode DoVerb(long nVerb);
void StopEditShell();
sal_Bool IsDrawTextShell() const;
sal_Bool IsAuditShell() const;
void SetDrawTextUndo( ::svl::IUndoManager* pUndoMgr );
void FillFieldData( ScHeaderFieldData& rData );
//UNUSED2008-05 void ResetChartArea();
void SetChartArea( const ScRangeListRef& rSource, const Rectangle& rDest );
sal_Bool GetChartArea( ScRangeListRef& rSource, Rectangle& rDest, SCTAB& rTab ) const;
//UNUSED2008-05 sal_Bool IsChartDlgEdit() const;
//UNUSED2008-05 void SetChartDlgEdit(sal_Bool bFlag){bChartDlgIsEdit=bFlag;}
void SetEditChartName(const String& aStr){aEditChartName=aStr;}
//UNUSED2008-05 const String& GetEditChartName() const;
virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
ScNavigatorSettings* GetNavigatorSettings();
// Drucken:
virtual SfxPrinter* GetPrinter( sal_Bool bCreate = sal_False );
virtual sal_uInt16 SetPrinter( SfxPrinter* pNewPrinter,
sal_uInt16 nDiffFlags = SFX_PRINTER_ALL, bool bIsApi=false );
virtual SfxTabPage* CreatePrintOptionsPage( Window *pParent, const SfxItemSet &rOptions );
void ConnectObject( SdrOle2Obj* pObj );
sal_Bool ActivateObject( SdrOle2Obj* pObj, long nVerb );
void DeactivateOle();
SC_DLLPUBLIC static ScTabViewShell* GetActiveViewShell();
SfxModelessDialog* CreateRefDialog( SfxBindings* pB, SfxChildWindow* pCW,
SfxChildWinInfo* pInfo,
Window* pParent, sal_uInt16 nSlotId );
void UpdateOleZoom();
inline SbxObject* GetScSbxObject() const
{ return pScSbxObject; }
inline void SetScSbxObject( SbxObject* pOb )
{ pScSbxObject = pOb; }
FmFormShell* GetFormShell() const { return pFormShell; }
void InsertURL( const String& rName, const String& rURL, const String& rTarget,
sal_uInt16 nMode );
void InsertURLButton( const String& rName, const String& rURL, const String& rTarget,
const Point* pInsPos = NULL );
void InsertURLField( const String& rName, const String& rURL, const String& rTarget );
sal_Bool SelectObject( const String& rName );
void SetInFormatDialog(sal_Bool bFlag) {bInFormatDialog=bFlag;}
sal_Bool IsInFormatDialog() {return bInFormatDialog;}
void ForceMove() { Move(); }
void MakeNumberInfoItem ( ScDocument* pDoc,
ScViewData* pViewData,
SvxNumberInfoItem** ppItem );
void UpdateNumberFormatter ( ScDocument* pDoc,
const SvxNumberInfoItem& rInfoItem );
void ExecuteCellFormatDlg ( SfxRequest& rReq, sal_uInt16 nTabPage = 0xffff );
sal_Bool GetFunction( String& rFuncStr, sal_uInt16 nErrCode = 0 );
void StartSimpleRefDialog( const String& rTitle, const String& rInitVal,
sal_Bool bCloseOnButtonUp, sal_Bool bSingleCell, sal_Bool bMultiSelection );
void StopSimpleRefDialog();
void SetCurRefDlgId( sal_uInt16 nNew );
void AddAccessibilityObject( SfxListener& rObject );
void RemoveAccessibilityObject( SfxListener& rObject );
void BroadcastAccessibility( const SfxHint &rHint );
sal_Bool HasAccessibilityObjects();
bool ExecuteRetypePassDlg(ScPasswordHash eDesiredHash);
using ScTabView::ShowCursor;
sal_Bool IsActive(){ return bIsActive; }
rtl::OUString GetFormula(ScAddress& rAddress);
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & GetForms() const;
// i123629
sal_Bool GetForceFocusOnCurCell(){return bForceFocusOnCurCell;}
void SetForceFocusOnCurCell(sal_Bool bFlag){bForceFocusOnCurCell=bFlag;}
};
//==================================================================
#endif