blob: e975fbb5f21a4a7b5f940725e06a62fc1e618bbe [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_NAVIPI_HXX
#define SC_NAVIPI_HXX
#include <vector>
#include <vcl/toolbox.hxx>
#include <vcl/field.hxx>
#include <vcl/lstbox.hxx>
#include <svtools/stdctrl.hxx>
#include <svl/poolitem.hxx>
#include <svl/lstner.hxx>
#include <sfx2/childwin.hxx>
#include "content.hxx"
#include <svtools/svmedit.hxx>
class ScTabViewShell;
class ScViewData;
class ScArea;
class ScScenarioWindow;
class ScNavigatorControllerItem;
class ScNavigatorDialogWrapper;
class ScNavigatorDlg;
class ScNavigatorSettings;
class ScRange;
//========================================================================
#define SC_DROPMODE_URL 0
#define SC_DROPMODE_LINK 1
#define SC_DROPMODE_COPY 2
enum NavListMode { NAV_LMODE_NONE = 0x4000,
NAV_LMODE_AREAS = 0x2000,
NAV_LMODE_DBAREAS = 0x1000,
NAV_LMODE_DOCS = 0x800,
NAV_LMODE_SCENARIOS = 0x400 };
//========================================================================
// class ScScenarioListBox -----------------------------------------------
//========================================================================
class ScScenarioListBox : public ListBox
{
public:
explicit ScScenarioListBox( ScScenarioWindow& rParent );
virtual ~ScScenarioListBox();
void UpdateEntries( List* pNewEntryList );
protected:
virtual void Select();
virtual void DoubleClick();
virtual long Notify( NotifyEvent& rNEvt );
private:
struct ScenarioEntry
{
String maName;
String maComment;
bool mbProtected;
inline explicit ScenarioEntry() : mbProtected( false ) {}
};
typedef ::std::vector< ScenarioEntry > ScenarioList;
private:
const ScenarioEntry* GetSelectedEntry() const;
void ExecuteScenarioSlot( sal_uInt16 nSlotId );
void SelectScenario();
void EditScenario();
void DeleteScenario( bool bQueryBox );
private:
ScScenarioWindow& mrParent;
ScenarioList maEntries;
};
//========================================================================
// class ScScenarioWindow ------------------------------------------------
//========================================================================
class ScScenarioWindow : public Window
{
public:
ScScenarioWindow( Window* pParent,const String& aQH_List,const String& aQH_Comment);
~ScScenarioWindow();
void NotifyState( const SfxPoolItem* pState );
void SetComment( const String& rComment )
{ aEdComment.SetText( rComment ); }
void SetSizePixel( const Size& rNewSize );
protected:
virtual void Paint( const Rectangle& rRec );
private:
ScScenarioListBox aLbScenario;
MultiLineEdit aEdComment;
};
//==================================================================
// class ColumnEdit
//==================================================================
class ColumnEdit : public SpinField
{
public:
ColumnEdit( ScNavigatorDlg* pParent, const ResId& rResId );
~ColumnEdit();
SCCOL GetCol() { return nCol; }
void SetCol( SCCOL nColNo );
protected:
virtual long Notify( NotifyEvent& rNEvt );
virtual void LoseFocus();
virtual void Up();
virtual void Down();
virtual void First();
virtual void Last();
private:
ScNavigatorDlg& rDlg;
SCCOL nCol;
sal_uInt16 nKeyGroup;
void EvalText ();
void ExecuteCol ();
SCCOL AlphaToNum ( String& rStr );
SCCOL NumStrToAlpha ( String& rStr );
SCCOL NumToAlpha ( SCCOL nColNo, String& rStr );
};
//==================================================================
// class RowEdit
//==================================================================
class RowEdit : public NumericField
{
public:
RowEdit( ScNavigatorDlg* pParent, const ResId& rResId );
~RowEdit();
SCROW GetRow() { return (SCROW)GetValue(); }
void SetRow( SCROW nRow ){ SetValue( nRow ); }
protected:
virtual long Notify( NotifyEvent& rNEvt );
virtual void LoseFocus();
private:
ScNavigatorDlg& rDlg;
void ExecuteRow();
};
//==================================================================
// class ScDocListBox
//==================================================================
class ScDocListBox : public ListBox
{
public:
ScDocListBox( ScNavigatorDlg* pParent, const ResId& rResId );
~ScDocListBox();
protected:
virtual void Select();
private:
ScNavigatorDlg& rDlg;
};
//==================================================================
// class CommandToolBox
//==================================================================
class CommandToolBox : public ToolBox
{
public:
CommandToolBox( ScNavigatorDlg* pParent, const ResId& rResId );
~CommandToolBox();
void Select( sal_uInt16 nId );
void UpdateButtons();
void InitImageList();
virtual void DataChanged( const DataChangedEvent& rDCEvt );
DECL_LINK( ToolBoxDropdownClickHdl, ToolBox* );
protected:
virtual void Select();
virtual void Click();
private:
ScNavigatorDlg& rDlg;
};
//==================================================================
// class ScNavigatorDlg
//==================================================================
class ScNavigatorDlg : public Window, public SfxListener
{
friend class ScNavigatorControllerItem;
friend class ScNavigatorDialogWrapper;
friend class ColumnEdit;
friend class RowEdit;
friend class ScDocListBox;
friend class CommandToolBox;
friend class ScContentTree;
private:
SfxBindings& rBindings; // must be first member
ImageList aCmdImageList; // must be before aTbxCmd
ImageList aCmdImageListH;
FixedInfo aFtCol;
ColumnEdit aEdCol;
FixedInfo aFtRow;
RowEdit aEdRow;
CommandToolBox aTbxCmd;
ScContentTree aLbEntries;
ScScenarioWindow aWndScenarios;
ScDocListBox aLbDocuments;
Timer aContentTimer;
String aTitleBase;
String aStrDragMode;
String aStrDisplay;
String aStrActive;
String aStrNotActive;
String aStrHidden;
String aStrActiveWin;
SfxChildWindowContext* pContextWin;
Size aInitSize;
ScArea* pMarkArea;
ScViewData* pViewData;
long nBorderOffset;
long nListModeHeight;
long nInitListHeight;
NavListMode eListMode;
sal_uInt16 nDropMode;
SCCOL nCurCol;
SCROW nCurRow;
SCTAB nCurTab;
sal_Bool bFirstBig;
bool mbUseStyleSettingsBackground;
ScNavigatorControllerItem** ppBoundItems;
DECL_LINK( TimeHdl, Timer* );
void DoResize();
SfxBindings& GetBindings()
{ return rBindings; }
void SetCurrentCell( SCCOL nCol, SCROW Row );
void SetCurrentCellStr( const String rName );
void SetCurrentTable( SCTAB nTab );
void SetCurrentTableStr( const String rName );
void SetCurrentObject( const String rName );
void SetCurrentDoc( const String& rDocName );
ScTabViewShell* GetTabViewShell() const;
ScNavigatorSettings* GetNavigatorSettings();
sal_Bool GetViewData();
void UpdateColumn ( const SCCOL* pCol = NULL );
void UpdateRow ( const SCROW* pRow = NULL );
void UpdateTable ( const SCTAB* pTab = NULL );
void UpdateAll ();
void GetDocNames(const String* pSelEntry = NULL);
void SetListMode ( NavListMode eMode, sal_Bool bSetSize = sal_True );
void ShowList ( sal_Bool bShow, sal_Bool bSetSize );
void ShowScenarios ( sal_Bool bShow, sal_Bool bSetSize );
void SetDropMode(sal_uInt16 nNew);
sal_uInt16 GetDropMode() const { return nDropMode; }
const String& GetStrDragMode() const { return aStrDragMode; }
const String& GetStrDisplay() const { return aStrDisplay; }
void CheckDataArea ();
void MarkDataArea ();
void UnmarkDataArea ();
void StartOfDataArea ();
void EndOfDataArea ();
static void ReleaseFocus();
protected:
virtual void Resize();
virtual void Paint( const Rectangle& rRec );
virtual void Resizing( Size& rSize );
public:
ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, Window* pParent,
const bool bUseStyleSettingsBackground);
~ScNavigatorDlg();
using Window::Notify;
virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
void CursorPosChanged();
virtual SfxChildAlignment
CheckAlignment(SfxChildAlignment,SfxChildAlignment);
virtual void DataChanged( const DataChangedEvent& rDCEvt );
};
//==================================================================
class ScNavigatorDialogWrapper: public SfxChildWindowContext
{
public:
ScNavigatorDialogWrapper( Window* pParent,
sal_uInt16 nId,
SfxBindings* pBindings,
SfxChildWinInfo* pInfo );
SFX_DECL_CHILDWINDOWCONTEXT(ScNavigatorDialogWrapper)
virtual void Resizing( Size& rSize );
private:
ScNavigatorDlg* pNavigator;
};
#endif // SC_NAVIPI_HXX