convert calc navigator to .ui format
Change-Id: I74d718b128ea1d795ab01da1234f58cfe1852aff
diff --git a/extras/source/glade/libreoffice-catalog.xml.in b/extras/source/glade/libreoffice-catalog.xml.in
index 3f78445..ecb5b94 100644
--- a/extras/source/glade/libreoffice-catalog.xml.in
+++ b/extras/source/glade/libreoffice-catalog.xml.in
@@ -605,6 +605,13 @@
generic-name="Relative Numeric Field" parent="GtkSpinButton"
icon-name="widget-gtk-spinbutton"/>
<glade-widget-class title="Calc Row SpinButton" name="sclo-RowEdit"
generic-name="Calc Row SpinButton" parent="GtkSpinButton"
icon-name="widget-gtk-spinbutton"/>
<glade-widget-class title="Calc Column SpinButton" name="sclo-ColumnEdit"
generic-name="Calc Column SpinButton" parent="GtkSpinButton"
icon-name="widget-gtk-spinbutton"/>
<glade-widget-class title="SvtURLBox" name="svtlo-SvtURLBox"
generic-name="URLBox" parent="VclComboBoxText"
icon-name="widget-gtk-comboboxtext"/>
diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk
index b8e8c9c5..9ec5dac 100644
--- a/sc/UIConfig_scalc.mk
+++ b/sc/UIConfig_scalc.mk
@@ -149,6 +149,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\
sc/uiconfig/scalc/ui/movecopysheet \
sc/uiconfig/scalc/ui/movingaveragedialog \
sc/uiconfig/scalc/ui/multipleoperationsdialog \
sc/uiconfig/scalc/ui/navigatorpanel \
sc/uiconfig/scalc/ui/nosolutiondialog \
sc/uiconfig/scalc/ui/optcalculatepage \
sc/uiconfig/scalc/ui/optchangespage \
diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h
index 6c62861..7dfa4a6 100644
--- a/sc/inc/helpids.h
+++ b/sc/inc/helpids.h
@@ -32,27 +32,6 @@
#define HID_SC_WIN_GRIDWIN "SC_HID_SC_WIN_GRIDWIN"
#define HID_SC_WIN_PREVIEW "SC_HID_SC_WIN_PREVIEW"
// Hilfe IDs fuer einzelne Controls (max.30) ---------------------------------
// Eintraege im Navigator
#define HID_SC_NAVIPI_ENTRIES "SC_HID_SC_NAVIPI_ENTRIES"
#define HID_SC_NAVIPI_ROW "SC_HID_SC_NAVIPI_ROW"
#define HID_SC_NAVIPI_COL "SC_HID_SC_NAVIPI_COL"
#define HID_SC_NAVIPI_DOC "SC_HID_SC_NAVIPI_DOC"
#define HID_SC_NAVIPI_DATA "SC_HID_SC_NAVIPI_DATA"
#define HID_SC_NAVIPI_UP "SC_HID_SC_NAVIPI_UP"
#define HID_SC_NAVIPI_DOWN "SC_HID_SC_NAVIPI_DOWN"
#define HID_SC_NAVIPI_ZOOM "SC_HID_SC_NAVIPI_ZOOM"
#define HID_SC_NAVIPI_ROOT "SC_HID_SC_NAVIPI_ROOT"
#define HID_SC_NAVIPI_SCEN "SC_HID_SC_NAVIPI_SCEN"
#define HID_SC_NAVIPI_DROP "SC_HID_SC_NAVIPI_DROP"
#define HID_SC_NAVIPI_TOOLBOX "SC_HID_SC_NAVIPI_TOOLBOX"
// Bereich ist voll!
// Hilfe IDs fuer Dialoge / Pages (max.70) -----------------------------------
#define HID_SC_NAVIGATOR "SC_HID_SC_NAVIGATOR"
#define HID_SC_HEADER_EDIT "SC_HID_SC_HEADER_EDIT"
#define HID_SC_FOOTER_EDIT "SC_HID_SC_FOOTER_EDIT"
diff --git a/sc/inc/sc.hrc b/sc/inc/sc.hrc
index 49f3dcf..31bd7d6 100644
--- a/sc/inc/sc.hrc
+++ b/sc/inc/sc.hrc
@@ -1051,7 +1051,6 @@
#define RID_SCDLG_HFED_FOOTER (SC_DIALOGS_START + 53)
#define RID_SCPAGE_CALC (SC_DIALOGS_START + 56)
#define RID_SCDLG_NAVIGATOR (SC_DIALOGS_START + 57)
#define RID_SCDLG_HFEDIT_SHDR (SC_DIALOGS_START + 62)
#define RID_SCDLG_HFEDIT_SFTR (SC_DIALOGS_START + 63)
diff --git a/sc/source/ui/inc/content.hxx b/sc/source/ui/inc/content.hxx
index 8e839c1..4c60d15 100644
--- a/sc/source/ui/inc/content.hxx
+++ b/sc/source/ui/inc/content.hxx
@@ -117,8 +117,8 @@ protected:
virtual void InitEntry(SvTreeListEntry*,const OUString&,const Image&,const Image&, SvLBoxButtonKind) override;
public:
ScContentTree( vcl::Window* pParent, const ResId& rResId );
virtual ~ScContentTree() override;
ScContentTree(vcl::Window* pParent, ScNavigatorDlg* pNavigatorDlg);
virtual ~ScContentTree() override;
virtual void dispose() override;
OUString getAltLongDescText(SvTreeListEntry* pEntry, bool isAltText) const;
diff --git a/sc/source/ui/inc/navipi.hxx b/sc/source/ui/inc/navipi.hxx
index a7d6833..1c84934 100644
--- a/sc/source/ui/inc/navipi.hxx
+++ b/sc/source/ui/inc/navipi.hxx
@@ -28,6 +28,7 @@
#include <svl/poolitem.hxx>
#include <svl/lstner.hxx>
#include <sfx2/childwin.hxx>
#include <svx/sidebar/PanelLayout.hxx>
#include "content.hxx"
#include <svtools/svmedit.hxx>
@@ -46,12 +47,8 @@ class ScNavigatorSettings;
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:
@@ -89,38 +86,35 @@ private:
ScenarioList maEntries;
};
// class ScScenarioWindow ------------------------------------------------
class ScScenarioWindow : public vcl::Window
{
public:
ScScenarioWindow( vcl::Window* pParent, const OUString& aQH_List, const OUString& aQH_Comment);
virtual ~ScScenarioWindow() override;
ScScenarioWindow(vcl::Window* pParent, const OUString& rQH_List, const OUString& rQH_Comment);
virtual ~ScScenarioWindow() override;
virtual void dispose() override;
void NotifyState( const SfxPoolItem* pState );
void SetComment( const OUString& rComment )
{ aEdComment->SetText( rComment ); }
void SetSizePixel( const Size& rNewSize ) override;
void NotifyState(const SfxPoolItem* pState);
void SetComment(const OUString& rComment)
{
aEdComment->SetText(rComment);
}
protected:
virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) override;
virtual void Resize() override;
private:
VclPtr<ScScenarioListBox> aLbScenario;
VclPtr<MultiLineEdit> aEdComment;
};
// class ColumnEdit
class ColumnEdit : public SpinField
{
public:
ColumnEdit( ScNavigatorDlg* pParent, const ResId& rResId );
virtual ~ColumnEdit() override;
ColumnEdit(Window* pParent, WinBits nWinBits);
void SetNavigatorDlg(ScNavigatorDlg *pNaviDlg)
{
xDlg = pNaviDlg;
}
SCCOL GetCol() { return nCol; }
void SetCol( SCCOL nColNo );
@@ -131,87 +125,63 @@ protected:
virtual void Down() override;
virtual void First() override;
virtual void Last() override;
virtual void dispose() override;
private:
ScNavigatorDlg& rDlg;
VclPtr<ScNavigatorDlg> xDlg;
SCCOL nCol;
void EvalText ();
void ExecuteCol ();
void EvalText();
void ExecuteCol();
static SCCOL AlphaToNum ( OUString& rStr );
static SCCOL NumStrToAlpha ( OUString& rStr );
static SCCOL NumToAlpha ( SCCOL nColNo, OUString& rStr );
};
// class RowEdit
class RowEdit : public NumericField
{
public:
RowEdit( ScNavigatorDlg* pParent, const ResId& rResId );
virtual ~RowEdit() override;
SCROW GetRow() { return (SCROW)GetValue(); }
void SetRow( SCROW nRow ){ SetValue( nRow ); }
RowEdit(Window* pParent, WinBits nWinBits);
void SetNavigatorDlg(ScNavigatorDlg *pNaviDlg)
{
xDlg = pNaviDlg;
}
SCROW GetRow() { return (SCROW)GetValue(); }
void SetRow(SCROW nRow) { SetValue(nRow); }
protected:
virtual bool Notify( NotifyEvent& rNEvt ) override;
virtual Size GetOptimalSize() const override;
virtual void LoseFocus() override;
virtual void dispose() override;
private:
ScNavigatorDlg& rDlg;
VclPtr<ScNavigatorDlg> xDlg;
void ExecuteRow();
};
// class CommandToolBox
class CommandToolBox : public ToolBox
{
public:
CommandToolBox( ScNavigatorDlg* pParent, const ResId& rResId );
virtual ~CommandToolBox() override;
void Select( sal_uInt16 nId );
void UpdateButtons();
void InitImageList();
virtual void DataChanged( const DataChangedEvent& rDCEvt ) override;
DECL_LINK( ToolBoxDropdownClickHdl, ToolBox*, void );
protected:
virtual void Select() override;
virtual void Click() override;
private:
ScNavigatorDlg& rDlg;
};
// class ScNavigatorDlg
class ScNavigatorDlg : public vcl::Window, public SfxListener
class ScNavigatorDlg : public PanelLayout, public SfxListener
{
friend class ScNavigatorControllerItem;
friend class ScNavigatorDialogWrapper;
friend class ColumnEdit;
friend class RowEdit;
friend class CommandToolBox;
friend class ScContentTree;
private:
SfxBindings& rBindings; // must be first member
ImageList aCmdImageList; // must be before aTbxCmd
VclPtr<FixedText> aFtCol;
VclPtr<ColumnEdit> aEdCol;
VclPtr<FixedText> aFtRow;
VclPtr<RowEdit> aEdRow;
VclPtr<CommandToolBox> aTbxCmd;
VclPtr<ScContentTree> aLbEntries;
VclPtr<ColumnEdit> aEdCol;
VclPtr<RowEdit> aEdRow;
VclPtr<ToolBox> aTbxCmd;
VclPtr<VclContainer> aContentBox;
VclPtr<ScContentTree> aLbEntries;
VclPtr<VclContainer> aScenarioBox;
VclPtr<ScScenarioWindow> aWndScenarios;
VclPtr<ListBox> aLbDocuments;
VclPtr<ListBox> aLbDocuments;
Size aExpandedSize;
Idle aContentIdle;
OUString aTitleBase;
@@ -222,29 +192,32 @@ private:
OUString aStrHidden;
OUString aStrActiveWin;
SfxChildWindowContext* pContextWin;
Size aInitSize;
ScArea* pMarkArea;
ScViewData* pViewData;
bool bInSidebar;
sal_uInt16 nZoomId;
sal_uInt16 nChangeRootId;
sal_uInt16 nDragModeId;
sal_uInt16 nScenarioId;
sal_uInt16 nDownId;
sal_uInt16 nUpId;
sal_uInt16 nDataId;
sal_uInt16 nAreaId;
ScArea* pMarkArea;
ScViewData* pViewData;
long nBorderOffset;
long nListModeHeight;
long nInitListHeight;
NavListMode eListMode;
sal_uInt16 nDropMode;
SCCOL nCurCol;
SCROW nCurRow;
SCTAB nCurTab;
bool bFirstBig;
bool mbUseStyleSettingsBackground;
ScNavigatorControllerItem** ppBoundItems;
DECL_LINK(TimeHdl, Idle*, void);
DECL_LINK(DocumentSelectHdl, ListBox&, void);
DECL_LINK(ToolBoxSelectHdl, ToolBox*, void);
DECL_LINK(ToolBoxDropdownClickHdl, ToolBox*, void);
void DoResize();
void UpdateButtons();
void SetCurrentCell( SCCOL nCol, SCROW Row );
void SetCurrentCellStr( const OUString& rName );
void SetCurrentTable( SCTAB nTab );
@@ -263,9 +236,9 @@ private:
void GetDocNames(const OUString* pSelEntry);
void SetListMode ( NavListMode eMode, bool bSetSize );
void ShowList ( bool bShow, bool bSetSize );
void ShowScenarios ( bool bSetSize );
void SetListMode(NavListMode eMode);
void ShowList(bool bShow);
void ShowScenarios();
void SetDropMode(sal_uInt16 nNew);
sal_uInt16 GetDropMode() const { return nDropMode; }
@@ -281,21 +254,13 @@ private:
static void ReleaseFocus();
protected:
virtual void Resize() override;
virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) override;
void Resizing( Size& rSize );
public:
ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, vcl::Window* pParent,
const bool bUseStyleSettingsBackground);
virtual ~ScNavigatorDlg() override;
ScNavigatorDlg(SfxBindings* pB, bool bSidebar, vcl::Window* pParent);
virtual ~ScNavigatorDlg() override;
virtual void dispose() override;
using Window::Notify;
virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
virtual void DataChanged( const DataChangedEvent& rDCEvt ) override;
};
class ScNavigatorDialogWrapper: public SfxChildWindowContext
@@ -308,8 +273,6 @@ public:
SFX_DECL_CHILDWINDOWCONTEXT(ScNavigatorDialogWrapper)
virtual void Resizing( Size& rSize ) override;
private:
VclPtr<ScNavigatorDlg> pNavigator;
};
diff --git a/sc/source/ui/navipi/content.cxx b/sc/source/ui/navipi/content.cxx
index dfc5e10..b309d59 100644
--- a/sc/source/ui/navipi/content.cxx
+++ b/sc/source/ui/navipi/content.cxx
@@ -49,9 +49,9 @@
#include "lnktrans.hxx"
#include "formulacell.hxx"
#include "dociter.hxx"
#include "sc.hrc"
#include "scresid.hxx"
#include "globstr.hrc"
#include "navipi.hrc"
#include "arealink.hxx"
#include "navicfg.hxx"
#include "navsett.hxx"
@@ -111,22 +111,20 @@ ScDocShell* ScContentTree::GetManualOrCurrent()
// ScContentTree
ScContentTree::ScContentTree( vcl::Window* pParent, const ResId& rResId ) :
SvTreeListBox ( pParent, rResId ),
aEntryImages ( ScResId( RID_IMAGELIST_NAVCONT ) ),
nRootType ( ScContentId::ROOT ),
bHiddenDoc ( false ),
pHiddenDocument ( nullptr ),
bisInNavigatoeDlg ( false )
ScContentTree::ScContentTree(vcl::Window* pParent, ScNavigatorDlg* pNavigatorDlg)
: SvTreeListBox(pParent, WB_BORDER | WB_QUICK_SEARCH)
, pParentWindow(pNavigatorDlg)
, aEntryImages(ScResId(RID_IMAGELIST_NAVCONT))
, nRootType(ScContentId::ROOT)
, bHiddenDoc(false)
, pHiddenDocument(nullptr)
, bisInNavigatoeDlg(false)
{
sal_uInt16 i;
for (i=0; i<=(int)ScContentId::LAST; i++)
for (sal_uInt16 i = 0; i <= (int)ScContentId::LAST; ++i)
pPosList[pTypeList[i]] = i; // invers zum suchen
pParentWindow = static_cast<ScNavigatorDlg*>(pParent);
pRootNodes[ScContentId::ROOT] = nullptr;
for (i=1; i<(int)ScContentId::LAST; i++)
for (sal_uInt16 i = 1; i < (int)ScContentId::LAST; ++i)
InitRoot((ScContentId)i);
SetNodeDefaultImages();
@@ -134,8 +132,6 @@ ScContentTree::ScContentTree( vcl::Window* pParent, const ResId& rResId ) :
SetDoubleClickHdl( LINK( this, ScContentTree, ContentDoubleClickHdl ) );
pTmpEntry= nullptr;
SetStyle( GetStyle() | WB_QUICK_SEARCH );
}
ScContentTree::~ScContentTree()
diff --git a/sc/source/ui/navipi/navipi.cxx b/sc/source/ui/navipi/navipi.cxx
index 828885f..e01d9e2 100644
--- a/sc/source/ui/navipi/navipi.cxx
+++ b/sc/source/ui/navipi/navipi.cxx
@@ -26,6 +26,7 @@
#include <sfx2/navigat.hxx>
#include <svl/stritem.hxx>
#include <svl/urlbmk.hxx>
#include <vcl/builderfactory.hxx>
#include <vcl/settings.hxx>
#include <unotools/charclass.hxx>
#include <stdlib.h>
@@ -38,20 +39,17 @@
#include "rangenam.hxx"
#include "rangeutl.hxx"
#include "popmenu.hxx"
#include "sc.hrc"
#include "scresid.hxx"
#include "scmod.hxx"
#include "navicfg.hxx"
#include "navcitem.hxx"
#include "navipi.hrc"
#include "navipi.hxx"
#include "navsett.hxx"
#include "markdata.hxx"
#include <algorithm>
// tolerance, how much spac above the folded size is still small
#define SCNAV_MINTOL 5
// maximum values for UI
#define SCNAV_MAXCOL (MAXCOLCOUNT)
// macro is sufficient since only used in ctor
@@ -73,18 +71,17 @@ void ScNavigatorDlg::ReleaseFocus()
}
}
// class ColumnEdit
ColumnEdit::ColumnEdit( ScNavigatorDlg* pParent, const ResId& rResId )
: SpinField ( pParent, rResId ),
rDlg ( *pParent ),
nCol ( 0 )
ColumnEdit::ColumnEdit(Window* pParent, WinBits nWinBits)
: SpinField(pParent, nWinBits)
, nCol(0)
{
SetMaxTextLen( SCNAV_COLDIGITS ); // 1...256...18278 or A...IV...ZZZ
SetMaxTextLen(SCNAV_COLDIGITS); // 1...256...18278 or A...IV...ZZZ
}
ColumnEdit::~ColumnEdit()
VCL_BUILDER_DECL_FACTORY(ColumnEdit)
{
(void)rMap;
rRet = VclPtr<ColumnEdit>::Create(pParent, WB_BORDER | WB_SPIN | WB_REPEAT | WB_RIGHT);
}
bool ColumnEdit::Notify( NotifyEvent& rNEvt )
@@ -122,6 +119,12 @@ void ColumnEdit::LoseFocus()
EvalText();
}
void ColumnEdit::dispose()
{
xDlg.clear();
SpinField::dispose();
}
void ColumnEdit::Up()
{
nCol++;
@@ -172,12 +175,12 @@ void ColumnEdit::EvalText()
void ColumnEdit::ExecuteCol()
{
SCROW nRow = rDlg.aEdRow->GetRow();
SCROW nRow = xDlg->aEdRow->GetRow();
EvalText(); // setzt nCol
if ( (nCol > 0) && (nRow > 0) )
rDlg.SetCurrentCell( nCol-1, nRow-1 );
xDlg->SetCurrentCell(nCol - 1, nRow - 1);
}
void ColumnEdit::SetCol( SCCOL nColNo )
@@ -244,18 +247,17 @@ SCCOL ColumnEdit::NumToAlpha( SCCOL nColNo, OUString& rStr )
return nColNo;
}
// class RowEdit
RowEdit::RowEdit( ScNavigatorDlg* pParent, const ResId& rResId )
: NumericField( pParent, rResId ),
rDlg ( *pParent )
RowEdit::RowEdit(Window* pParent, WinBits nWinBits)
: NumericField(pParent, nWinBits)
{
SetMax( SCNAV_MAXROW);
SetLast( SCNAV_MAXROW);
SetMax(SCNAV_MAXROW);
SetLast(SCNAV_MAXROW);
}
RowEdit::~RowEdit()
VCL_BUILDER_DECL_FACTORY(RowEdit)
{
(void)rMap;
rRet = VclPtr<RowEdit>::Create(pParent, WB_BORDER | WB_SPIN | WB_REPEAT | WB_RIGHT);
}
bool RowEdit::Notify( NotifyEvent& rNEvt )
@@ -281,13 +283,25 @@ void RowEdit::LoseFocus()
{
}
void RowEdit::dispose()
{
xDlg.clear();
NumericField::dispose();
}
Size RowEdit::GetOptimalSize() const
{
//max rows is 1,000,000, which is too long for typical use
return CalcMinimumSizeForText("1,000");
}
void RowEdit::ExecuteRow()
{
SCCOL nCol = rDlg.aEdCol->GetCol();
SCCOL nCol = xDlg->aEdCol->GetCol();
SCROW nRow = (SCROW)GetValue();
if ( (nCol > 0) && (nRow > 0) )
rDlg.SetCurrentCell( nCol-1, nRow-1 );
xDlg->SetCurrentCell(nCol - 1, nRow - 1);
}
IMPL_LINK(ScNavigatorDlg, DocumentSelectHdl, ListBox&, rListBox, void)
@@ -298,306 +312,180 @@ IMPL_LINK(ScNavigatorDlg, DocumentSelectHdl, ListBox&, rListBox, void)
aLbEntries->SelectDoc(aDocName);
}
// class CommandToolBox
CommandToolBox::CommandToolBox( ScNavigatorDlg* pParent, const ResId& rResId )
: ToolBox ( pParent, rResId ),
rDlg ( *pParent )
IMPL_LINK(ScNavigatorDlg, ToolBoxSelectHdl, ToolBox*, pToolBox, void)
{
InitImageList(); // ImageList members of ScNavigatorDlg must be initialized before!
SetSizePixel( CalcWindowSizePixel() );
SetDropdownClickHdl( LINK(this, CommandToolBox, ToolBoxDropdownClickHdl) );
SetItemBits( IID_DROPMODE, GetItemBits( IID_DROPMODE ) | ToolBoxItemBits::DROPDOWNONLY );
}
CommandToolBox::~CommandToolBox()
{
}
void CommandToolBox::Select( sal_uInt16 nSelId )
{
sal_uInt16 nSelId = pToolBox->GetCurItemId();
// Modus umschalten ?
if ( nSelId == IID_ZOOMOUT || nSelId == IID_SCENARIOS )
if (nSelId == nZoomId || nSelId == nScenarioId)
{
NavListMode eOldMode = rDlg.eListMode;
NavListMode eOldMode = eListMode;
NavListMode eNewMode;
if ( nSelId == IID_SCENARIOS )
if (nSelId == nScenarioId)
{
if ( eOldMode == NAV_LMODE_SCENARIOS )
if (eOldMode == NAV_LMODE_SCENARIOS)
eNewMode = NAV_LMODE_AREAS;
else
eNewMode = NAV_LMODE_SCENARIOS;
}
else // on/off
{
if ( eOldMode == NAV_LMODE_NONE )
if (eOldMode == NAV_LMODE_NONE)
eNewMode = NAV_LMODE_AREAS;
else
eNewMode = NAV_LMODE_NONE;
}
rDlg.SetListMode( eNewMode, true );
SetListMode(eNewMode);
UpdateButtons();
}
else
switch ( nSelId )
{
if (nSelId == nDataId)
MarkDataArea();
else if (nSelId == nUpId)
StartOfDataArea();
else if (nSelId == nDownId)
EndOfDataArea();
else if (nSelId == nChangeRootId)
{
case IID_DATA:
rDlg.MarkDataArea();
break;
case IID_UP:
rDlg.StartOfDataArea();
break;
case IID_DOWN:
rDlg.EndOfDataArea();
break;
case IID_CHANGEROOT:
rDlg.aLbEntries->ToggleRoot();
UpdateButtons();
break;
aLbEntries->ToggleRoot();
UpdateButtons();
}
}
}
void CommandToolBox::Select()
{
Select( GetCurItemId() );
}
void CommandToolBox::Click()
{
}
IMPL_LINK_NOARG(CommandToolBox, ToolBoxDropdownClickHdl, ToolBox *, void)
IMPL_LINK(ScNavigatorDlg, ToolBoxDropdownClickHdl, ToolBox *, pToolBox, void)
{
// the popup menue of the drop modus has to be called in the
// click (button down) and not in the select (button up)
if ( GetCurItemId() == IID_DROPMODE )
if (pToolBox->GetCurItemId() == nDragModeId)
{
ScopedVclPtrInstance<ScPopupMenu> aPop( ScResId( RID_POPUP_DROPMODE ) );
aPop->CheckItem( RID_DROPMODE_URL + rDlg.GetDropMode() );
aPop->Execute( this, GetItemRect(IID_DROPMODE), PopupMenuFlags::ExecuteDown );
ScopedVclPtrInstance<ScPopupMenu> aPop(ScResId(RID_POPUP_DROPMODE));
aPop->CheckItem(RID_DROPMODE_URL + GetDropMode());
aPop->Execute(pToolBox, pToolBox->GetItemRect(nDragModeId), PopupMenuFlags::ExecuteDown);
sal_uInt16 nId = aPop->GetSelected();
EndSelection(); // bevore SetDropMode (SetDropMode calls SetItemImage)
pToolBox->EndSelection(); // before SetDropMode (SetDropMode calls SetItemImage)
if ( nId >= RID_DROPMODE_URL && nId <= RID_DROPMODE_COPY )
rDlg.SetDropMode( nId - RID_DROPMODE_URL );
// reset the highlighted button
Point aPoint;
MouseEvent aLeave( aPoint, 0, MouseEventModifiers::LEAVEWINDOW | MouseEventModifiers::SYNTHETIC );
MouseMove( aLeave );
if (nId >= RID_DROPMODE_URL && nId <= RID_DROPMODE_COPY)
SetDropMode(nId - RID_DROPMODE_URL);
}
}
void CommandToolBox::UpdateButtons()
void ScNavigatorDlg::UpdateButtons()
{
NavListMode eMode = rDlg.eListMode;
CheckItem( IID_SCENARIOS, eMode == NAV_LMODE_SCENARIOS );
CheckItem( IID_ZOOMOUT, eMode != NAV_LMODE_NONE );
NavListMode eMode = eListMode;
aTbxCmd->CheckItem(nScenarioId, eMode == NAV_LMODE_SCENARIOS);
aTbxCmd->CheckItem(nZoomId, eMode != NAV_LMODE_NONE);
// Umschalten-Button:
if ( eMode == NAV_LMODE_SCENARIOS || eMode == NAV_LMODE_NONE )
if (eMode == NAV_LMODE_SCENARIOS || eMode == NAV_LMODE_NONE)
{
EnableItem( IID_CHANGEROOT, false );
CheckItem( IID_CHANGEROOT, false );
aTbxCmd->EnableItem(nChangeRootId, false);
aTbxCmd->CheckItem(nChangeRootId, false);
}
else
{
EnableItem( IID_CHANGEROOT );
bool bRootSet = rDlg.aLbEntries->GetRootType() != ScContentId::ROOT;
CheckItem( IID_CHANGEROOT, bRootSet );
aTbxCmd->EnableItem(nChangeRootId);
bool bRootSet = aLbEntries->GetRootType() != ScContentId::ROOT;
aTbxCmd->CheckItem(nChangeRootId, bRootSet);
}
sal_uInt16 nImageId = 0;
switch ( rDlg.nDropMode )
switch (nDropMode)
{
case SC_DROPMODE_URL: nImageId = RID_IMG_DROP_URL; break;
case SC_DROPMODE_LINK: nImageId = RID_IMG_DROP_LINK; break;
case SC_DROPMODE_COPY: nImageId = RID_IMG_DROP_COPY; break;
case SC_DROPMODE_URL:
nImageId = RID_IMG_DROP_URL;
break;
case SC_DROPMODE_LINK:
nImageId = RID_IMG_DROP_LINK;
break;
case SC_DROPMODE_COPY:
nImageId = RID_IMG_DROP_COPY;
break;
}
SetItemImage( IID_DROPMODE, Image(ScResId(nImageId)) );
aTbxCmd->SetItemImage(nDragModeId, Image(ScResId(nImageId)));
}
void CommandToolBox::InitImageList()
{
ImageList& rImgLst = rDlg.aCmdImageList;
sal_uInt16 nCount = GetItemCount();
for (sal_uInt16 i = 0; i < nCount; i++)
{
sal_uInt16 nId = GetItemId(i);
SetItemImage( nId, rImgLst.GetImage( nId ) );
}
}
void CommandToolBox::DataChanged( const DataChangedEvent& rDCEvt )
{
if ( rDCEvt.GetType() == DataChangedEventType::SETTINGS && (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
{
// update item images
InitImageList();
UpdateButtons(); // drop mode
}
ToolBox::DataChanged( rDCEvt );
}
// class ScNavigatorSettings
ScNavigatorSettings::ScNavigatorSettings() :
mnRootSelected( ScContentId::ROOT ),
mnChildSelected( SC_CONTENT_NOCHILD )
{
}
// class ScNavigatorDlgWrapper
SFX_IMPL_CHILDWINDOWCONTEXT( ScNavigatorDialogWrapper, SID_NAVIGATOR )
ScNavigatorDialogWrapper::ScNavigatorDialogWrapper(
vcl::Window* pParent,
sal_uInt16 nId,
SfxBindings* pBind,
SfxChildWinInfo* /* pInfo */ ) :
SfxChildWindowContext( nId )
ScNavigatorDialogWrapper::ScNavigatorDialogWrapper(vcl::Window* pParent,
sal_uInt16 nId,
SfxBindings* pBind,
SfxChildWinInfo* /* pInfo */)
: SfxChildWindowContext(nId)
{
pNavigator = VclPtr<ScNavigatorDlg>::Create( pBind, this, pParent, true );
SetWindow( pNavigator );
// handle configurations elsewhere,
// only size of pInfo matters now
Size aInfoSize = pParent->GetOutputSizePixel(); // outside defined size
Size aNavSize = pNavigator->GetOutputSizePixel(); // Default-Size
aNavSize.Width() = std::max( aInfoSize.Width(), aNavSize.Width() );
aNavSize.Height() = std::max( aInfoSize.Height(), aNavSize.Height() );
pNavigator->nListModeHeight = std::max( aNavSize.Height(), pNavigator->nListModeHeight );
// The size could be changed in another module,
// therefore we have to or have not to display the content
// in dependence of the current size
bool bSmall = ( aInfoSize.Height() <= pNavigator->aInitSize.Height() + SCNAV_MINTOL );
NavListMode eNavMode = NAV_LMODE_NONE;
if (!bSmall)
{
// if scenario was active, switch on
ScNavipiCfg& rCfg = SC_MOD()->GetNavipiCfg();
NavListMode eLastMode = (NavListMode) rCfg.GetListMode();
if ( eLastMode == NAV_LMODE_SCENARIOS )
eNavMode = NAV_LMODE_SCENARIOS;
else
eNavMode = NAV_LMODE_AREAS;
}
// Do not set the size of the float again (sal_False at SetListMode), so that the
// navigator is not expanded, if it was minimized (#38872#).
pNavigator->SetListMode( eNavMode, false ); // FALSE: do not set the Float size
sal_uInt16 nCmdId;
switch (eNavMode)
{
case NAV_LMODE_SCENARIOS: nCmdId = IID_SCENARIOS; break;
case NAV_LMODE_AREAS: nCmdId = IID_AREAS; break;
// The following case can never be reach due to how eNavMode is set-up
// case NAV_LMODE_DOCS: nCmdId = IID_DOCS; break;
// case NAV_LMODE_DBAREAS: nCmdId = IID_DBAREAS; break;
default: nCmdId = 0;
}
if (nCmdId)
{
pNavigator->aTbxCmd->CheckItem( nCmdId );
pNavigator->DoResize();
}
pNavigator->bFirstBig = ( nCmdId == 0 ); // later
pNavigator = VclPtr<ScNavigatorDlg>::Create(pBind, false, pParent);
if (SfxNavigator* pNav = dynamic_cast<SfxNavigator*>(pParent))
pNav->SetMinOutputSizePixel(pNavigator->GetOptimalSize());
SetWindow(pNavigator);
}
void ScNavigatorDialogWrapper::Resizing( Size& rSize )
{
static_cast<ScNavigatorDlg*>(GetWindow())->Resizing(rSize);
}
// class ScNavigatorPI
#define CTRL_ITEMS 4
#define REGISTER_SLOT(i,id) \
ppBoundItems[i]=new ScNavigatorControllerItem(id,*this,rBindings);
ScNavigatorDlg::ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, vcl::Window* pParent,
const bool bUseStyleSettingsBackground) :
Window( pParent, ScResId(RID_SCDLG_NAVIGATOR) ),
rBindings ( *pB ), // is used in CommandToolBox ctor
aCmdImageList( ScResId( IL_CMD ) ),
aFtCol ( VclPtr<FixedText>::Create( this, ScResId( FT_COL ) ) ),
aEdCol ( VclPtr<ColumnEdit>::Create( this, ScResId( ED_COL ) ) ),
aFtRow ( VclPtr<FixedText>::Create( this, ScResId( FT_ROW ) ) ),
aEdRow ( VclPtr<RowEdit>::Create( this, ScResId( ED_ROW ) ) ),
aTbxCmd ( VclPtr<CommandToolBox>::Create( this, ScResId( TBX_CMD ) ) ),
aLbEntries ( VclPtr<ScContentTree>::Create( this, ScResId( LB_ENTRIES ) ) ),
aWndScenarios( VclPtr<ScScenarioWindow>::Create( this,ScResId( SCSTR_QHLP_SCEN_LISTBOX), ScResId(SCSTR_QHLP_SCEN_COMMENT)) ),
aLbDocuments( VclPtr<ListBox>::Create( this, ScResId( LB_DOCUMENTS ) ) ),
aStrDragMode ( ScResId( SCSTR_DRAGMODE ) ),
aStrDisplay ( ScResId( SCSTR_DISPLAY ) ),
aStrActiveWin( ScResId( SCSTR_ACTIVEWIN ) ),
pContextWin ( pCW ),
pMarkArea ( nullptr ),
pViewData ( nullptr ),
nListModeHeight( 0 ),
nInitListHeight( 0 ),
eListMode ( NAV_LMODE_NONE ),
nDropMode ( SC_DROPMODE_URL ),
nCurCol ( 0 ),
nCurRow ( 0 ),
nCurTab ( 0 ),
bFirstBig ( false ),
mbUseStyleSettingsBackground(bUseStyleSettingsBackground)
ScNavigatorDlg::ScNavigatorDlg(SfxBindings* pB, bool bSidebar, vcl::Window* pParent)
: PanelLayout(pParent, "NavigatorPanel", "modules/scalc/ui/navigatorpanel.ui", nullptr)
, rBindings(*pB)
, aStrDragMode(ScResId(SCSTR_DRAGMODE))
, aStrDisplay(ScResId(SCSTR_DISPLAY))
, aStrActiveWin(ScResId(SCSTR_ACTIVEWIN))
, bInSidebar(bSidebar)
, pMarkArea(nullptr)
, pViewData(nullptr )
, eListMode(NAV_LMODE_NONE)
, nDropMode(SC_DROPMODE_URL)
, nCurCol(0)
, nCurRow(0)
, nCurTab(0)
{
get(aLbDocuments, "documents");
get(aEdCol, "column");
get(aEdRow, "row");
get(aTbxCmd, "toolbox");
aTbxCmd->SetSelectHdl(LINK(this, ScNavigatorDlg, ToolBoxSelectHdl));
aTbxCmd->SetDropdownClickHdl(LINK(this, ScNavigatorDlg, ToolBoxDropdownClickHdl));
nZoomId = aTbxCmd->GetItemId("contents");
nChangeRootId = aTbxCmd->GetItemId("toggle");
nDragModeId = aTbxCmd->GetItemId("dragmode");
aTbxCmd->SetItemBits(nDragModeId, aTbxCmd->GetItemBits(nDragModeId) | ToolBoxItemBits::DROPDOWNONLY);
nScenarioId = aTbxCmd->GetItemId("scenarios");
nDownId = aTbxCmd->GetItemId("end");
nUpId = aTbxCmd->GetItemId("start");
nAreaId = aTbxCmd->GetItemId("datarange");
get(aContentBox, "contentbox");
aLbEntries = VclPtr<ScContentTree>::Create(aContentBox, this);
aLbEntries->set_hexpand(true);
aLbEntries->set_vexpand(true);
aLbEntries->Show();
get(aScenarioBox, "scenariobox");
aWndScenarios = VclPtr<ScScenarioWindow>::Create(aScenarioBox,
ScResId(SCSTR_QHLP_SCEN_LISTBOX), ScResId(SCSTR_QHLP_SCEN_COMMENT));
aWndScenarios->set_hexpand(true);
aWndScenarios->set_vexpand(true);
aWndScenarios->Show();
ScNavipiCfg& rCfg = SC_MOD()->GetNavipiCfg();
nDropMode = rCfg.GetDragMode();
// eListMode is set from outside, Root further below
aTbxCmd->InsertBreak(3);
aTbxCmd->SetLineCount(2);
aLbDocuments->SetDropDownLineCount(9);
aLbDocuments->SetSelectHdl(LINK(this, ScNavigatorDlg, DocumentSelectHdl));
aStrActive = " ("
+ OUString( ScResId( SCSTR_ACTIVE ) )
+ ")"; // " (active)"
aStrNotActive = " ("
+ OUString( ScResId( SCSTR_NOTACTIVE ) )
+ ")"; // " (not active)"
aStrHidden = " ("
+ OUString( ScResId( SCSTR_HIDDEN ) )
+ ")"; // " (hidden)"
aStrActive = " (" + OUString(ScResId(SCSTR_ACTIVE)) + ")"; // " (active)"
aStrNotActive = " (" + OUString(ScResId(SCSTR_NOTACTIVE)) + ")"; // " (not active)"
aStrHidden = " (" + OUString(ScResId(SCSTR_HIDDEN)) + ")"; // " (hidden)"
aTitleBase = GetText();
const long nListboxYPos =
::std::max(
(aTbxCmd->GetPosPixel().Y() + aTbxCmd->GetSizePixel().Height()),
(aEdRow->GetPosPixel().Y() + aEdRow->GetSizePixel().Height()) )
+ 4;
aLbEntries->setPosSizePixel( 0, nListboxYPos, 0, 0, PosSizeFlags::Y);
nBorderOffset = aLbEntries->GetPosPixel().X();
aInitSize.Width() = aTbxCmd->GetPosPixel().X()
+ aTbxCmd->GetSizePixel().Width()
+ nBorderOffset;
aInitSize.Height() = aLbEntries->GetPosPixel().Y();
nInitListHeight = aLbEntries->GetSizePixel().Height();
nListModeHeight = aInitSize.Height()
+ nInitListHeight;
ppBoundItems = new ScNavigatorControllerItem* [CTRL_ITEMS];
rBindings.ENTERREGISTRATIONS();
@@ -612,8 +500,6 @@ ScNavigatorDlg::ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, vcl
StartListening( *(SfxGetpApp()) );
StartListening( rBindings );
aLbDocuments->Hide(); // does not exist at NAV_LMODE_NONE
aLbEntries->InitWindowBits(true);
aLbEntries->SetSpaceBetweenEntries(0);
@@ -630,34 +516,35 @@ ScNavigatorDlg::ScNavigatorDlg( SfxBindings* pB, SfxChildWindowContext* pCW, vcl
aLbEntries->Refresh();
GetDocNames(nullptr);
aTbxCmd->UpdateButtons();
UpdateButtons();
UpdateColumn();
UpdateRow();
UpdateTable(nullptr);
aLbEntries->Hide();
aWndScenarios->Hide();
aWndScenarios->SetPosPixel( aLbEntries->GetPosPixel() );
aContentBox->Hide();
aScenarioBox->Hide();
aContentIdle.SetIdleHdl( LINK( this, ScNavigatorDlg, TimeHdl ) );
aContentIdle.SetPriority( SchedulerPriority::LOWEST );
FreeResource();
aLbEntries->SetAccessibleRelationLabeledBy(aLbEntries.get());
aTbxCmd->SetAccessibleRelationLabeledBy(aTbxCmd.get());
aLbDocuments->SetAccessibleName(aStrActiveWin);
if (pContextWin == nullptr)
if (bInSidebar)
{
// When the context window is missing then the navigator is
// displayed in the sidebar and has the whole deck to fill.
// Therefore hide the button that hides all controls below the
// top two rows of buttons.
aTbxCmd->Select(IID_ZOOMOUT);
aTbxCmd->RemoveItem(aTbxCmd->GetItemPos(IID_ZOOMOUT));
// When the navigator is displayed in the sidebar it has the whole deck
// to fill. Therefore hide the button that hides all controls below
// the top two rows of buttons.
aTbxCmd->RemoveItem(aTbxCmd->GetItemPos(nZoomId));
}
aLbEntries->SetNavigatorDlgFlag(true);
// if scenario was active, switch on
NavListMode eNavMode = (NavListMode) rCfg.GetListMode();
if (eNavMode == NAV_LMODE_SCENARIOS)
aTbxCmd->CheckItem(nScenarioId);
else
eNavMode = NAV_LMODE_AREAS;
SetListMode(eNavMode);
aExpandedSize = GetOptimalSize();
}
ScNavigatorDlg::~ScNavigatorDlg()
@@ -669,8 +556,7 @@ void ScNavigatorDlg::dispose()
{
aContentIdle.Stop();
sal_uInt16 i;
for ( i=0; i<CTRL_ITEMS; i++ )
for (sal_uInt16 i = 0; i < CTRL_ITEMS; ++i)
delete ppBoundItems[i];
delete [] ppBoundItems;
@@ -679,137 +565,23 @@ void ScNavigatorDlg::dispose()
EndListening( *(SfxGetpApp()) );
EndListening( rBindings );
aFtCol.disposeAndClear();
aEdCol.disposeAndClear();
aFtRow.disposeAndClear();
aEdRow.disposeAndClear();
aTbxCmd.disposeAndClear();
aEdCol.clear();
aEdRow.clear();
aTbxCmd.clear();
aLbEntries.disposeAndClear();
aContentBox.clear();
aWndScenarios.disposeAndClear();
aLbDocuments.disposeAndClear();
vcl::Window::dispose();
}
void ScNavigatorDlg::Resizing( Size& rNewSize ) // Size = Outputsize?
{
FloatingWindow* pFloat = pContextWin!=nullptr ? pContextWin->GetFloatingWindow() : nullptr;
if ( pFloat )
{
Size aMinOut = pFloat->GetMinOutputSizePixel();
if ( rNewSize.Width() < aMinOut.Width() )
rNewSize.Width() = aMinOut.Width();
if ( eListMode == NAV_LMODE_NONE )
rNewSize.Height() = aInitSize.Height();
else
{
if ( rNewSize.Height() < aMinOut.Height() )
rNewSize.Height() = aMinOut.Height();
}
}
}
void ScNavigatorDlg::Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect )
{
if (mbUseStyleSettingsBackground)
{
const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
Color aBgColor = rStyleSettings.GetFaceColor();
Wallpaper aBack( aBgColor );
SetBackground( aBack );
aFtCol->SetBackground( aBack );
aFtRow->SetBackground( aBack );
}
else
{
aFtCol->SetBackground(Wallpaper());
aFtRow->SetBackground(Wallpaper());
}
Window::Paint(rRenderContext, rRect);
}
void ScNavigatorDlg::DataChanged( const DataChangedEvent& rDCEvt )
{
if ( rDCEvt.GetType() == DataChangedEventType::SETTINGS && (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
{
// toolbox images are exchanged in CommandToolBox::DataChanged
Invalidate();
}
Window::DataChanged( rDCEvt );
}
void ScNavigatorDlg::Resize()
{
DoResize();
}
void ScNavigatorDlg::DoResize()
{
Size aNewSize = GetOutputSizePixel();
long nTotalHeight = aNewSize.Height();
// if the navigator is docked, the window is probably at first small generated,
// then there is a resize to the actual size -> switch on content
bool bSmall = ( nTotalHeight <= aInitSize.Height() + SCNAV_MINTOL );
if ( !bSmall && bFirstBig )
{
// Switch on content again as described in the config
bFirstBig = false;
NavListMode eNavMode = NAV_LMODE_AREAS;
ScNavipiCfg& rCfg = SC_MOD()->GetNavipiCfg();
NavListMode eLastMode = (NavListMode) rCfg.GetListMode();
if ( eLastMode == NAV_LMODE_SCENARIOS )
eNavMode = NAV_LMODE_SCENARIOS;
SetListMode( eNavMode, false ); // FALSE: do not set the Float size
}
// even if the content is not visible, adapt the size,
// so the width fit
Point aEntryPos = aLbEntries->GetPosPixel();
Point aListPos = aLbDocuments->GetPosPixel();
aNewSize.Width() -= 2*nBorderOffset;
Size aDocSize = aLbDocuments->GetSizePixel();
aDocSize.Width() = aNewSize.Width();
if(!bSmall)
{
long nListHeight = aLbDocuments->GetSizePixel().Height();
aNewSize.Height() -= ( aEntryPos.Y() + nListHeight + 2*nBorderOffset );
if(aNewSize.Height()<0) aNewSize.Height()=0;
aListPos.Y() = aEntryPos.Y() + aNewSize.Height() + nBorderOffset;
if(aListPos.Y() > aLbEntries->GetPosPixel().Y())
aLbDocuments->SetPosPixel( aListPos );
}
aLbEntries->SetSizePixel( aNewSize );
aWndScenarios->SetSizePixel( aNewSize );
aLbDocuments->SetSizePixel( aDocSize );
bool bListMode = (eListMode != NAV_LMODE_NONE);
if (pContextWin != nullptr)
{
FloatingWindow* pFloat = pContextWin->GetFloatingWindow();
if ( pFloat && bListMode )
nListModeHeight = nTotalHeight;
}
aScenarioBox.clear();
aLbDocuments.clear();
PanelLayout::dispose();
}
void ScNavigatorDlg::Notify( SfxBroadcaster&, const SfxHint& rHint )
{
if ( dynamic_cast<const SfxEventHint*>(&rHint) )
if (const SfxEventHint* pHint = dynamic_cast<const SfxEventHint*>(&rHint))
{
sal_uLong nEventId = static_cast<const SfxEventHint&>(rHint).GetEventId();
if ( nEventId == SFX_EVENT_ACTIVATEDOC )
sal_uLong nEventId = pHint->GetEventId();
if (nEventId == SFX_EVENT_ACTIVATEDOC)
{
aLbEntries->ActiveDocChanged();
UpdateAll();
@@ -819,11 +591,11 @@ void ScNavigatorDlg::Notify( SfxBroadcaster&, const SfxHint& rHint )
{
const sal_uInt32 nHintId = rHint.GetId();
if ( nHintId == SC_HINT_DOCNAME_CHANGED )
if (nHintId == SC_HINT_DOCNAME_CHANGED)
{
aLbEntries->ActiveDocChanged();
}
else if ( NAV_LMODE_NONE == eListMode )
else if (NAV_LMODE_NONE == eListMode)
{
// Table not any more
}
@@ -886,8 +658,7 @@ IMPL_LINK( ScNavigatorDlg, TimeHdl, Idle*, pIdle, void )
void ScNavigatorDlg::SetDropMode(sal_uInt16 nNew)
{
nDropMode = nNew;
aTbxCmd->UpdateButtons();
UpdateButtons();
ScNavipiCfg& rCfg = SC_MOD()->GetNavipiCfg();
rCfg.SetDragMode(nDropMode);
}
@@ -1047,18 +818,14 @@ void ScNavigatorDlg::UpdateTable( const SCTAB* pTab )
void ScNavigatorDlg::UpdateAll()
{
switch ( eListMode )
switch (eListMode)
{
case NAV_LMODE_DOCS:
case NAV_LMODE_DBAREAS:
case NAV_LMODE_AREAS:
aLbEntries->Refresh();
break;
case NAV_LMODE_NONE:
//! ???
break;
default:
break;
}
@@ -1066,122 +833,76 @@ void ScNavigatorDlg::UpdateAll()
aContentIdle.Stop(); // not again
}
void ScNavigatorDlg::SetListMode( NavListMode eMode, bool bSetSize )
void ScNavigatorDlg::SetListMode(NavListMode eMode)
{
if ( eMode != eListMode )
if (eMode != eListMode)
{
if ( eMode != NAV_LMODE_NONE )
bFirstBig = false; // do not switch automatically any more
bool bForceParentResize = (eMode == NAV_LMODE_NONE || eListMode == NAV_LMODE_NONE);
SfxNavigator* pNav = bForceParentResize ? dynamic_cast<SfxNavigator*>(GetParent()) : nullptr;
if (pNav && eMode == NAV_LMODE_NONE) //save last normal size on minimizing
aExpandedSize = GetSizePixel();
eListMode = eMode;
switch ( eMode )
switch (eMode)
{
case NAV_LMODE_NONE:
ShowList( false, bSetSize );
ShowList(false);
break;
case NAV_LMODE_AREAS:
case NAV_LMODE_DBAREAS:
case NAV_LMODE_DOCS:
aLbEntries->Refresh();
ShowList( true, bSetSize );
ShowList(true);
break;
case NAV_LMODE_SCENARIOS:
ShowScenarios( bSetSize );
ShowScenarios();
break;
}
aTbxCmd->UpdateButtons();
UpdateButtons();
if ( eMode != NAV_LMODE_NONE )
if (eMode != NAV_LMODE_NONE)
{
ScNavipiCfg& rCfg = SC_MOD()->GetNavipiCfg();
rCfg.SetListMode( (sal_uInt16) eMode );
}
if (pNav)
{
Size aOptimalSize(GetOptimalSize());
Size aNewSize(pNav->GetOutputSizePixel());
aNewSize.Height() = eMode == NAV_LMODE_NONE ? aOptimalSize.Height() : aExpandedSize.Height();
pNav->SetMinOutputSizePixel(aOptimalSize);
pNav->SetOutputSizePixel(aNewSize);
}
}
if ( pMarkArea )
if (pMarkArea)
UnmarkDataArea();
}
void ScNavigatorDlg::ShowList( bool bShow, bool bSetSize )
void ScNavigatorDlg::ShowList(bool bShow)
{
FloatingWindow* pFloat = pContextWin!=nullptr ? pContextWin->GetFloatingWindow() : nullptr;
Size aSize = GetParent()->GetOutputSizePixel();
if ( bShow )
if (bShow)
{
Size aMinSize = aInitSize;
aMinSize.Height() += nInitListHeight;
if ( pFloat )
pFloat->SetMinOutputSizePixel( aMinSize );
aSize.Height() = nListModeHeight;
aLbEntries->Show();
aContentBox->Show();
aLbDocuments->Show();
}
else
{
if ( pFloat )
{
pFloat->SetMinOutputSizePixel( aInitSize );
nListModeHeight = aSize.Height();
}
aSize.Height() = aInitSize.Height();
aLbEntries->Hide();
aContentBox->Hide();
aLbDocuments->Hide();
}
aWndScenarios->Hide();
if ( pFloat )
{
if ( bSetSize )
pFloat->SetOutputSizePixel( aSize );
}
else
{
SfxNavigator* pNav = dynamic_cast<SfxNavigator*>(GetParent());
if (pNav != nullptr)
{
Size aFloating = pNav->GetFloatingSize();
aFloating.Height() = aSize.Height();
pNav->SetFloatingSize( aFloating );
}
}
aScenarioBox->Hide();
}
void ScNavigatorDlg::ShowScenarios( bool bSetSize )
void ScNavigatorDlg::ShowScenarios()
{
FloatingWindow* pFloat = pContextWin!=nullptr ? pContextWin->GetFloatingWindow() : nullptr;
Size aSize = GetParent()->GetOutputSizePixel();
Size aMinSize = aInitSize;
aMinSize.Height() += nInitListHeight;
if ( pFloat )
pFloat->SetMinOutputSizePixel( aMinSize );
aSize.Height() = nListModeHeight;
rBindings.Invalidate( SID_SELECT_SCENARIO );
rBindings.Update( SID_SELECT_SCENARIO );
aWndScenarios->Show();
aScenarioBox->Show();
aLbDocuments->Show();
aLbEntries->Hide();
if ( pFloat )
{
if ( bSetSize )
pFloat->SetOutputSizePixel( aSize );
}
else
{
SfxNavigator* pNav = static_cast<SfxNavigator*>(GetParent());
Size aFloating = pNav->GetFloatingSize();
aFloating.Height() = aSize.Height();
pNav->SetFloatingSize( aFloating );
}
aContentBox->Hide();
}
// documents for Dropdown-Listbox
@@ -1266,7 +987,7 @@ void ScNavigatorDlg::UnmarkDataArea()
void ScNavigatorDlg::CheckDataArea()
{
if ( aTbxCmd->IsItemChecked( IID_DATA ) && pMarkArea )
if (aTbxCmd->IsItemChecked(nDataId) && pMarkArea)
{
if ( nCurTab != pMarkArea->nTab
|| nCurCol < pMarkArea->nColStart+1
@@ -1274,8 +995,8 @@ void ScNavigatorDlg::CheckDataArea()
|| nCurRow < pMarkArea->nRowStart+1
|| nCurRow > pMarkArea->nRowEnd+1 )
{
aTbxCmd->SetItemState( IID_DATA, TriState(TRISTATE_TRUE) );
aTbxCmd->Select( IID_DATA );
aTbxCmd->SetItemState(nDataId, TriState(TRISTATE_TRUE));
aTbxCmd->TriggerItem(nDataId);
}
}
}
diff --git a/sc/source/ui/navipi/navipi.hrc b/sc/source/ui/navipi/navipi.hrc
deleted file mode 100644
index 76e1eb6..0000000
--- a/sc/source/ui/navipi/navipi.hrc
+++ /dev/null
@@ -1,41 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
*/
#include "sc.hrc"
#define FT_ROW 1
#define ED_ROW 2
#define FT_COL 3
#define ED_COL 4
#define LB_DOCUMENTS 5
#define LB_ENTRIES 6
#define TBX_CMD 7
#define IL_CMD 8
#define IID_AREAS 1
#define IID_DBAREAS 2
#define IID_DATA 3
#define IID_DOCS 4
#define IID_UP 5
#define IID_DOWN 6
#define IID_SCENARIOS 7
#define IID_DROPMODE 9
#define IID_CHANGEROOT 10
#define IID_ZOOMOUT 11
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/navipi/navipi.src b/sc/source/ui/navipi/navipi.src
index b7f1ddc..90e73f9 100644
--- a/sc/source/ui/navipi/navipi.src
+++ b/sc/source/ui/navipi/navipi.src
@@ -17,148 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "navipi.hrc"
Window RID_SCDLG_NAVIGATOR
{
SVLook = TRUE ;
HelpId = HID_SC_NAVIGATOR ;
Size = MAP_APPFONT ( 115 , 116 ) ;
OutputSize = TRUE ;
DialogControl = TRUE ;
Hide = TRUE ;
Text [ en-US ] = "Navigator" ;
FixedText FT_ROW
{
Pos = MAP_APPFONT ( 2 , 19 ) ;
// an kleinere Toolbox-Bitmaps angepasst
Size = MAP_APPFONT ( 19 , 10 ) ;
Text [ en-US ] = "Row" ;
};
NumericField ED_ROW
{
HelpId = HID_SC_NAVIPI_ROW ;
Border = TRUE ;
Pos = MAP_APPFONT ( 31 , 18 ) ;
// an kleinere Toolbox-Bitmaps angepasst
Size = MAP_APPFONT ( 30 , 12 ) ;
Right = TRUE ;
Repeat = TRUE ;
Spin = TRUE ;
SpinSize = 1 ;
Minimum = 1 ;
First = 1 ;
QuickHelpText [ en-US ] = "Row" ;
};
FixedText FT_COL
{
Pos = MAP_APPFONT ( 2 , 5 ) ;
Size = MAP_APPFONT ( 23 , 10 ) ;
Text [ en-US ] = "Column" ;
};
SpinField ED_COL
{
HelpId = HID_SC_NAVIPI_COL ;
Border = TRUE ;
Pos = MAP_APPFONT ( 31 , 4 ) ;
Size = MAP_APPFONT ( 30 , 12 ) ;
Right = TRUE ;
Repeat = TRUE ;
Spin = TRUE ;
QuickHelpText [ en-US ] = "Column" ;
};
Control LB_ENTRIES
{
// "Control" braucht immer eigene HelpId
HelpId = HID_SC_NAVIPI_ENTRIES ;
Border = TRUE ;
Pos = MAP_APPFONT ( 2 , 35 ) ;
Size = MAP_APPFONT ( 110 , 100 ) ;
TabStop = TRUE ;
};
ListBox LB_DOCUMENTS
{
HelpId = HID_SC_NAVIPI_DOC ;
Border = TRUE ;
Pos = MAP_APPFONT ( 2 , 89 ) ;
Size = MAP_APPFONT ( 82 , 50 ) ;
TabStop = TRUE ;
DropDown = TRUE ;
QuickHelpText [ en-US ] = "Document" ;
};
ImageList IL_CMD
{
Prefix = "na";
IdList =
{
IID_DATA ;
IID_UP ;
IID_DOWN ;
IID_SCENARIOS ;
IID_DROPMODE ;
IID_CHANGEROOT ;
IID_ZOOMOUT ;
};
IdCount = { 8 ; };
};
ToolBox TBX_CMD
{
Pos = MAP_APPFONT ( 66 , 3 ) ;
HelpId = HID_SC_NAVIPI_TOOLBOX ;
SVLook = TRUE ;
Border = FALSE ;
LineCount = 2 ;
ItemList =
{
ToolBoxItem
{
Identifier = IID_DATA ;
HelpId = HID_SC_NAVIPI_DATA ;
Text [ en-US ] = "Data Range" ;
};
ToolBoxItem
{
Identifier = IID_UP ;
HelpId = HID_SC_NAVIPI_UP ;
Text [ en-US ] = "Start" ;
};
ToolBoxItem
{
Identifier = IID_DOWN ;
HelpId = HID_SC_NAVIPI_DOWN ;
Text [ en-US ] = "End" ;
};
ToolBoxItem { Type = TOOLBOXITEM_BREAK ; };
ToolBoxItem
{
Identifier = IID_ZOOMOUT ;
HelpId = HID_SC_NAVIPI_ZOOM ;
Text [ en-US ] = "Contents" ;
};
ToolBoxItem
{
Identifier = IID_CHANGEROOT ;
HelpId = HID_SC_NAVIPI_ROOT ;
Text [ en-US ] = "Toggle" ;
};
ToolBoxItem
{
Identifier = IID_SCENARIOS ;
HelpId = HID_SC_NAVIPI_SCEN ;
Text [ en-US ] = "Scenarios" ;
};
ToolBoxItem
{
Identifier = IID_DROPMODE ;
HelpId = HID_SC_NAVIPI_DROP ;
DropDown = TRUE ;
Text [ en-US ] = "Drag Mode" ;
};
};
};
};
#include "sc.hrc"
ImageList RID_IMAGELIST_NAVCONT
{
diff --git a/sc/source/ui/navipi/scenwnd.cxx b/sc/source/ui/navipi/scenwnd.cxx
index c5976d9..9c6884b 100644
--- a/sc/source/ui/navipi/scenwnd.cxx
+++ b/sc/source/ui/navipi/scenwnd.cxx
@@ -274,18 +274,18 @@ void ScScenarioWindow::NotifyState( const SfxPoolItem* pState )
}
}
void ScScenarioWindow::SetSizePixel( const Size& rNewSize )
void ScScenarioWindow::Resize()
{
Size aSize( rNewSize );
Window::Resize();
Size aSize(GetSizePixel());
long nHeight = aSize.Height() / 2;
Window::SetSizePixel( aSize );
aSize.Height() = nHeight;
aLbScenario->SetSizePixel( aSize );
aLbScenario->SetSizePixel(aSize);
aSize.Height() -= 4;
aEdComment->SetPosSizePixel( Point( 0, nHeight+4 ), aSize );
aEdComment->SetPosSizePixel(Point(0, nHeight + 4), aSize);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/sidebar/ScPanelFactory.cxx b/sc/source/ui/sidebar/ScPanelFactory.cxx
index 9e584d8..b526c35 100644
--- a/sc/source/ui/sidebar/ScPanelFactory.cxx
+++ b/sc/source/ui/sidebar/ScPanelFactory.cxx
@@ -93,7 +93,7 @@ Reference<ui::XUIElement> SAL_CALL ScPanelFactory::createUIElement (
pPanel = NumberFormatPropertyPanel::Create( pParentWindow, xFrame, pBindings );
else if (rsResourceURL.endsWith("/NavigatorPanel"))
{
pPanel = VclPtr<ScNavigatorDlg>::Create(pBindings, nullptr, pParentWindow, false);
pPanel = VclPtr<ScNavigatorDlg>::Create(pBindings, true, pParentWindow);
nMinimumSize = 0;
}
else if (rsResourceURL.endsWith("/FunctionsPanel"))
diff --git a/sc/uiconfig/scalc/ui/navigatorpanel.ui b/sc/uiconfig/scalc/ui/navigatorpanel.ui
new file mode 100644
index 0000000..b56069a
--- /dev/null
+++ b/sc/uiconfig/scalc/ui/navigatorpanel.ui
@@ -0,0 +1,241 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
<requires lib="gtk+" version="3.0"/>
<object class="GtkGrid" id="NavigatorPanel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">6</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="border_width">6</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<property name="hexpand">True</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Column:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">column</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Row:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">row</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="sclo-ColumnEdit" id="column">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="tooltip_text" translatable="yes">Column</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="sclo-RowEdit" id="row">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="tooltip_text" translatable="yes">Row</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkToolbar" id="toolbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="toolbar_style">icons</property>
<child>
<object class="GtkToolButton" id="datarange">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Data Range</property>
<property name="action_name">datarange</property>
<property name="icon_name">sc/imglst/na03.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="start">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Start</property>
<property name="action_name">start</property>
<property name="icon_name">sc/imglst/na05.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="end">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">End</property>
<property name="action_name">end</property>
<property name="icon_name">sc/imglst/na06.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="contents">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Contents</property>
<property name="action_name">contents</property>
<property name="icon_name">sc/imglst/na011.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="toggle">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Toggle</property>
<property name="action_name">toggle</property>
<property name="icon_name">sc/imglst/na010.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="scenarios">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Scenarios</property>
<property name="action_name">scenarios</property>
<property name="icon_name">sc/imglst/na07.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkMenuToolButton" id="dragmode">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Drag Mode</property>
<property name="action_name">dragmode</property>
<property name="icon_name">sc/imglst/na09.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">0</property>
<property name="height">2</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="documents">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Document</property>
<child internal-child="accessible">
<object class="AtkObject" id="documents-atkobject">
<property name="AtkObject::accessible-name" translatable="yes">Active Window</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkBox" id="contentbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="scenariobox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
</interface>