tdf#129674 Add GoTo Sheet command
Insert command in menu Sheet > Navigate
(alongs with To Previous/Next Sheet)
Use .uno:JumpToTable command from Navigator
Use its own Go To Sheet dialog
Add a Search entry to type partial name of sheet
Menu translation missing?
Change-Id: I16b8b56a688c8396159617f04a2a7e034721ce31
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134714
Tested-by: Jenkins
Reviewed-by: Laurent Balland-Poirier <laurent.balland@mailo.fr>
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
index 5c60896..d953e76 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
@@ -557,6 +557,14 @@
<value>1</value>
</prop>
</node>
<node oor:name=".uno:JumpToTable" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">~Go to Sheet...</value>
</prop>
<prop oor:name="Properties" oor:type="xs:int">
<value>1</value>
</prop>
</node>
<node oor:name=".uno:StarChartDialog" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">Ch~art...</value>
diff --git a/osx/soffice.xcodeproj/project.pbxproj b/osx/soffice.xcodeproj/project.pbxproj
index ec10b80..7c201c1 100644
--- a/osx/soffice.xcodeproj/project.pbxproj
+++ b/osx/soffice.xcodeproj/project.pbxproj
@@ -124,6 +124,7 @@
BE017BF925AF568900244ED8 /* mtrindlg.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtrindlg.cxx; path = ../sc/source/ui/miscdlgs/mtrindlg.cxx; sourceTree = "<group>"; };
BE017BFA25AF568900244ED8 /* linkarea.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = linkarea.cxx; path = ../sc/source/ui/miscdlgs/linkarea.cxx; sourceTree = "<group>"; };
BE017BFB25AF568900244ED8 /* shtabdlg.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = shtabdlg.cxx; path = ../sc/source/ui/miscdlgs/shtabdlg.cxx; sourceTree = "<group>"; };
BE017BFB25AF568900244ED8 /* gototabdlg.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = gototabdlg.cxx; path = ../sc/source/ui/miscdlgs/gototabdlg.cxx; sourceTree = "<group>"; };
BE017BFC25AF568900244ED8 /* inscodlg.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = inscodlg.cxx; path = ../sc/source/ui/miscdlgs/inscodlg.cxx; sourceTree = "<group>"; };
BE017BFD25AF568A00244ED8 /* crdlg.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = crdlg.cxx; path = ../sc/source/ui/miscdlgs/crdlg.cxx; sourceTree = "<group>"; };
BE017BFE25AF568A00244ED8 /* datafdlg.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = datafdlg.cxx; path = ../sc/source/ui/miscdlgs/datafdlg.cxx; sourceTree = "<group>"; };
diff --git a/sc/Library_scui.mk b/sc/Library_scui.mk
index 4d4cffa..02c2bc8 100644
--- a/sc/Library_scui.mk
+++ b/sc/Library_scui.mk
@@ -95,6 +95,7 @@ $(eval $(call gb_Library_add_exception_objects,scui,\
sc/source/ui/miscdlgs/delcldlg \
sc/source/ui/miscdlgs/delcodlg \
sc/source/ui/miscdlgs/filldlg \
sc/source/ui/miscdlgs/gototabdlg \
sc/source/ui/miscdlgs/groupdlg \
sc/source/ui/miscdlgs/inscldlg \
sc/source/ui/miscdlgs/inscodlg \
diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk
index cf5f7e0..13a4b98 100644
--- a/sc/UIConfig_scalc.mk
+++ b/sc/UIConfig_scalc.mk
@@ -139,6 +139,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\
sc/uiconfig/scalc/ui/floatinglinestyle \
sc/uiconfig/scalc/ui/functionpanel \
sc/uiconfig/scalc/ui/goalseekdlg \
sc/uiconfig/scalc/ui/gotosheetdialog \
sc/uiconfig/scalc/ui/groupdialog \
sc/uiconfig/scalc/ui/groupbydate \
sc/uiconfig/scalc/ui/groupbynumber \
diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h
index bb9ff1c..c320a0f 100644
--- a/sc/inc/helpids.h
+++ b/sc/inc/helpids.h
@@ -63,6 +63,8 @@ inline constexpr OStringLiteral HID_PASSWD_DOC_CONFIRM = "SC_HID_PASSWD_DOC_CONF
// Other help IDs (max.70) ---------------------------------------------------
inline constexpr OStringLiteral HID_SELECTTABLES = "SC_HID_SELECTTABLES";
inline constexpr OStringLiteral HID_GOTOTABLE = "SC_HID_GOTOTABLE";
inline constexpr OStringLiteral HID_GOTOTABLEMASK = "SC_HID_GOTOTABLEMASK";
// Analysis Addin Functions (max.120) ----------------------------------------
diff --git a/sc/inc/pch/precompiled_scui.hxx b/sc/inc/pch/precompiled_scui.hxx
index bfe19b1..daedbcb 100644
--- a/sc/inc/pch/precompiled_scui.hxx
+++ b/sc/inc/pch/precompiled_scui.hxx
@@ -141,6 +141,7 @@
#include <formulaopt.hxx>
#include <global.hxx>
#include <globalnames.hxx>
#include <gototabdlg.hxx>
#include <groupdlg.hxx>
#include <helpids.h>
#include <hfedtdlg.hxx>
diff --git a/sc/inc/scabstdlg.hxx b/sc/inc/scabstdlg.hxx
index 5d9285b..9901d48 100644
--- a/sc/inc/scabstdlg.hxx
+++ b/sc/inc/scabstdlg.hxx
@@ -396,6 +396,17 @@ public:
virtual bool IsKeepAskingSet() const = 0;
};
class AbstractScGoToTabDlg : public VclAbstractDialog
{
protected:
virtual ~AbstractScGoToTabDlg() override = default;
public:
virtual void Insert( const OUString& rString, bool bSelected ) = 0;
virtual void SetDescription(const OUString& rTitle, const OUString& rEntryLabel, const OUString& rListLabel,
const OString& rDlgHelpId, const OString& rEnHelpId, const OString& rLbHelpId) = 0;
virtual OUString GetSelectedEntry() const = 0;
};
class ScAbstractDialogFactory
{
public:
@@ -526,6 +537,8 @@ public:
bool bOnlyDbtoolsEncodings,
bool bImport = true ) = 0;
virtual VclPtr<AbstractScGoToTabDlg> CreateScGoToTabDlg(weld::Window* pParent) = 0;
virtual VclPtr<SfxAbstractTabDialog> CreateScAttrDlg(weld::Window* pParent,
const SfxItemSet* pCellAttrs) = 0;
diff --git a/sc/inc/strings.hrc b/sc/inc/strings.hrc
index 5fad14f..5e9c825 100644
--- a/sc/inc/strings.hrc
+++ b/sc/inc/strings.hrc
@@ -87,8 +87,11 @@
#define STR_CAPTION_DEFAULT_TEXT NC_("STR_CAPTION_DEFAULT_TEXT", "Text")
// Select tables dialog title
#define STR_DLG_SELECTTABLES_TITLE NC_("STR_DLG_SELECTTABLES_TITLE", "Select Sheets")
#define STR_DLG_SELECTTABLE_TITLE NC_("STR_DLG_SELECTTABLE_TITLE", "Go to Sheet")
#define STR_DLG_SELECTTABLE_MASK NC_("STR_DLG_SELECTTABLE_MASK", "~Type a Sheet Name")
// Select tables dialog listbox
#define STR_DLG_SELECTTABLES_LBNAME NC_("STR_DLG_SELECTTABLES_LBNAME", "~Selected sheets")
#define STR_DLG_SELECTTABLE_LBNAME NC_("STR_DLG_SELECTTABLE_LBNAME", "~Sheets")
#define STR_ACC_CSVRULER_NAME NC_("STR_ACC_CSVRULER_NAME", "Ruler")
#define STR_ACC_CSVRULER_DESCR NC_("STR_ACC_CSVRULER_DESCR", "This ruler manages objects at fixed positions.")
#define STR_ACC_CSVGRID_NAME NC_("STR_ACC_CSVGRID_NAME", "Preview")
diff --git a/sc/sdi/scalc.sdi b/sc/sdi/scalc.sdi
index edf0ebb..7295dd3 100644
--- a/sc/sdi/scalc.sdi
+++ b/sc/sdi/scalc.sdi
@@ -3487,8 +3487,8 @@ SfxVoidItem JumpToTable SID_CURRENTTAB
RecordAbsolute = FALSE,
RecordPerSet;
AccelConfig = FALSE,
MenuConfig = FALSE,
AccelConfig = TRUE,
MenuConfig = TRUE,
ToolBoxConfig = FALSE,
GroupId = SfxGroupId::Navigator;
]
diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx b/sc/source/ui/attrdlg/scdlgfact.cxx
index 909d9fd..8b59e67 100644
--- a/sc/source/ui/attrdlg/scdlgfact.cxx
+++ b/sc/source/ui/attrdlg/scdlgfact.cxx
@@ -275,6 +275,16 @@ bool AbstractScShowTabDlg_Impl::StartExecuteAsync(VclAbstractDialog::AsyncContex
return weld::DialogController::runAsync(m_xDlg, rCtx.maEndDialogFn);
}
short AbstractScGoToTabDlg_Impl::Execute()
{
return m_xDlg->run();
}
bool AbstractScGoToTabDlg_Impl::StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx)
{
return weld::DialogController::runAsync(m_xDlg, rCtx.maEndDialogFn);
}
short AbstractScSortWarningDlg_Impl::Execute()
{
return m_xDlg->run();
@@ -839,6 +849,23 @@ OUString AbstractScShowTabDlg_Impl::GetEntry(sal_Int32 nPos) const
return m_xDlg->GetEntry(nPos);
}
void AbstractScGoToTabDlg_Impl::Insert( const OUString& rString, bool bSelected )
{
m_xDlg->Insert(rString, bSelected);
}
void AbstractScGoToTabDlg_Impl::SetDescription(
const OUString& rTitle, const OUString& rEntryLabel, const OUString& rListLabel,
const OString& rDlgHelpId, const OString& rEnHelpId, const OString& rLbHelpId )
{
m_xDlg->SetDescription( rTitle, rEntryLabel, rListLabel, rDlgHelpId, rEnHelpId, rLbHelpId );
}
OUString AbstractScGoToTabDlg_Impl::GetSelectedEntry() const
{
return m_xDlg->GetSelectedEntry();
}
short AbstractScStringInputDlg_Impl::Execute()
{
return m_xDlg->run();
@@ -1183,6 +1210,11 @@ VclPtr<AbstractScShowTabDlg> ScAbstractDialogFactory_Impl::CreateScShowTabDlg(we
return VclPtr<AbstractScShowTabDlg_Impl>::Create(std::make_shared<ScShowTabDlg>(pParent));
}
VclPtr<AbstractScGoToTabDlg> ScAbstractDialogFactory_Impl::CreateScGoToTabDlg(weld::Window* pParent)
{
return VclPtr<AbstractScGoToTabDlg_Impl>::Create(std::make_shared<ScGoToTabDlg>(pParent));
}
VclPtr<AbstractScStringInputDlg> ScAbstractDialogFactory_Impl::CreateScStringInputDlg(weld::Window* pParent,
const OUString& rTitle, const OUString& rEditTitle, const OUString& rDefault, const OString& rHelpId,
const OString& rEditHelpId)
diff --git a/sc/source/ui/attrdlg/scdlgfact.hxx b/sc/source/ui/attrdlg/scdlgfact.hxx
index 8eb9dc7..b170393 100644
--- a/sc/source/ui/attrdlg/scdlgfact.hxx
+++ b/sc/source/ui/attrdlg/scdlgfact.hxx
@@ -30,6 +30,7 @@
#include <delcldlg.hxx>
#include <dpgroupdlg.hxx>
#include <filldlg.hxx>
#include <gototabdlg.hxx>
#include <groupdlg.hxx>
#include <linkarea.hxx>
#include <lbseldlg.hxx>
@@ -517,6 +518,22 @@ public:
virtual std::vector<sal_Int32> GetSelectedRows() const override;
};
class AbstractScGoToTabDlg_Impl : public AbstractScGoToTabDlg
{
std::shared_ptr<ScGoToTabDlg> m_xDlg;
public:
explicit AbstractScGoToTabDlg_Impl(std::shared_ptr<ScGoToTabDlg> p)
: m_xDlg(std::move(p))
{
}
virtual short Execute() override;
virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) override;
virtual void Insert( const OUString& rString, bool bSelected ) override;
virtual void SetDescription(const OUString& rTitle, const OUString& rEntryLabel, const OUString& rListLabel,
const OString& rDlgHelpId, const OString& rEnHelpId, const OString& rLbHelpId) override;
virtual OUString GetSelectedEntry() const override;
};
class AbstractScSortWarningDlg_Impl : public AbstractScSortWarningDlg
{
std::unique_ptr<ScSortWarningDlg> m_xDlg;
@@ -739,6 +756,7 @@ public:
virtual VclPtr<AbstractScNewScenarioDlg> CreateScNewScenarioDlg(weld::Window* pParent, const OUString& rName,
bool bEdit, bool bSheetProtected) override;
virtual VclPtr<AbstractScShowTabDlg> CreateScShowTabDlg(weld::Window* pParent) override;
virtual VclPtr<AbstractScGoToTabDlg> CreateScGoToTabDlg(weld::Window* pParent) override;
virtual VclPtr<AbstractScStringInputDlg> CreateScStringInputDlg(weld::Window* pParent,
const OUString& rTitle,
diff --git a/sc/source/ui/inc/gototabdlg.hxx b/sc/source/ui/inc/gototabdlg.hxx
new file mode 100644
index 0000000..827f56b
--- /dev/null
+++ b/sc/source/ui/inc/gototabdlg.hxx
@@ -0,0 +1,43 @@
/* -*- 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/.
*
*/
#pragma once
#include <vcl/weld.hxx>
class ScGoToTabDlg : public weld::GenericDialogController
{
private:
std::vector<OUString> maCacheSheetsNames;
std::unique_ptr<weld::Frame> m_xFrameMask;
std::unique_ptr<weld::Entry> m_xEnNameMask;
std::unique_ptr<weld::Frame> m_xFrameSheets;
std::unique_ptr<weld::TreeView> m_xLb;
DECL_LINK(DblClkHdl, weld::TreeView&, bool);
DECL_LINK(FindNameHdl, weld::Entry&, void);
public:
ScGoToTabDlg(weld::Window* pParent);
virtual ~ScGoToTabDlg() override;
/** Sets dialog title, label texts and help IDs. */
void SetDescription(const OUString& rTitle, const OUString& rEntryLabel,
const OUString& rListLabel, const OString& rDlgHelpId,
const OString& rEnHelpId, const OString& rLbHelpId);
/** Inserts a string into the weld::TreeView. */
void Insert(const OUString& rString, bool bSelected);
OUString GetSelectedEntry() const;
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/miscdlgs/gototabdlg.cxx b/sc/source/ui/miscdlgs/gototabdlg.cxx
new file mode 100644
index 0000000..e38e671
--- /dev/null
+++ b/sc/source/ui/miscdlgs/gototabdlg.cxx
@@ -0,0 +1,81 @@
/* -*- 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/.
*
*/
#undef SC_DLLIMPLEMENTATION
#include <gototabdlg.hxx>
ScGoToTabDlg::ScGoToTabDlg(weld::Window* pParent)
: GenericDialogController(pParent, "modules/scalc/ui/gotosheetdialog.ui", "GoToSheetDialog")
, m_xFrameMask(m_xBuilder->weld_frame("frame-mask"))
, m_xEnNameMask(m_xBuilder->weld_entry("entry-mask"))
, m_xFrameSheets(m_xBuilder->weld_frame("frame-sheets"))
, m_xLb(m_xBuilder->weld_tree_view("treeview"))
{
m_xLb->set_selection_mode(SelectionMode::Single);
m_xLb->set_size_request(-1, m_xLb->get_height_rows(10));
m_xLb->connect_row_activated(LINK(this, ScGoToTabDlg, DblClkHdl));
m_xEnNameMask->connect_changed(LINK(this, ScGoToTabDlg, FindNameHdl));
}
ScGoToTabDlg::~ScGoToTabDlg() {}
void ScGoToTabDlg::SetDescription(const OUString& rTitle, const OUString& rEntryLabel,
const OUString& rListLabel, const OString& rDlgHelpId,
const OString& rEnHelpId, const OString& rLbHelpId)
{
m_xDialog->set_title(rTitle);
m_xFrameMask->set_label(rEntryLabel);
m_xFrameSheets->set_label(rListLabel);
m_xDialog->set_help_id(rDlgHelpId);
m_xEnNameMask->set_help_id(rEnHelpId);
m_xLb->set_help_id(rLbHelpId);
}
void ScGoToTabDlg::Insert(const OUString& rString, bool bSelected)
{
maCacheSheetsNames.push_back(rString);
m_xLb->append_text(rString);
if (bSelected)
m_xLb->select(m_xLb->n_children() - 1);
}
OUString ScGoToTabDlg::GetSelectedEntry() const { return m_xLb->get_selected_text(); }
IMPL_LINK_NOARG(ScGoToTabDlg, DblClkHdl, weld::TreeView&, bool)
{
m_xDialog->response(RET_OK);
return true;
}
IMPL_LINK_NOARG(ScGoToTabDlg, FindNameHdl, weld::Entry&, void)
{
const OUString aMask = m_xEnNameMask->get_text();
m_xLb->clear();
if (aMask.isEmpty())
{
for (const OUString& s : maCacheSheetsNames)
{
m_xLb->append_text(s);
}
}
else
{
for (const OUString& s : maCacheSheetsNames)
{
if (s.indexOf(aMask) >= 0)
{
m_xLb->append_text(s);
}
}
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/view/tabvwsh3.cxx b/sc/source/ui/view/tabvwsh3.cxx
index 8a65b1c..766f6c7 100644
--- a/sc/source/ui/view/tabvwsh3.cxx
+++ b/sc/source/ui/view/tabvwsh3.cxx
@@ -516,12 +516,50 @@ void ScTabViewShell::Execute( SfxRequest& rReq )
break;
case SID_CURRENTTAB:
if ( pReqArgs )
{
// sheet for basic is one-based
SCTAB nTab = static_cast<const SfxUInt16Item&>(pReqArgs->Get(nSlot)).GetValue() - 1;
ScDocument& rDoc = GetViewData().GetDocument();
if ( nTab < rDoc.GetTableCount() )
SCTAB nTab;
ScViewData& rViewData = GetViewData();
ScDocument& rDoc = rViewData.GetDocument();
SCTAB nTabCount = rDoc.GetTableCount();
if ( pReqArgs ) // command from Navigator with nTab
{
// sheet for basic is one-based
nTab = static_cast<const SfxUInt16Item&>(pReqArgs->Get(nSlot)).GetValue() - 1;
}
else // command from Menu: ask for nTab
{
ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
ScopedVclPtr<AbstractScGoToTabDlg> pDlg(pFact->CreateScGoToTabDlg(GetFrameWeld()));
pDlg->SetDescription(
ScResId( STR_DLG_SELECTTABLE_TITLE ),
ScResId( STR_DLG_SELECTTABLE_MASK ),
ScResId( STR_DLG_SELECTTABLE_LBNAME ),
GetStaticInterface()->GetSlot(SID_CURRENTTAB)->GetCommand(), HID_GOTOTABLEMASK, HID_GOTOTABLE );
// fill all table names and select current tab
OUString aTabName;
for( nTab = 0; nTab < nTabCount; ++nTab )
{
if( rDoc.IsVisible( nTab ) )
{
rDoc.GetName( nTab, aTabName );
pDlg->Insert( aTabName, rViewData.GetTabNo() == nTab );
}
}
if( pDlg->Execute() == RET_OK )
{
if( !rDoc.GetTable( pDlg->GetSelectedEntry(), nTab ) )
nTab = nTabCount;
pDlg.disposeAndClear();
}
else
{
rReq.Ignore();
}
}
if ( nTab < nTabCount )
{
SetTabNo( nTab );
rBindings.Update( nSlot );
diff --git a/sc/uiconfig/scalc/menubar/menubar.xml b/sc/uiconfig/scalc/menubar/menubar.xml
index 5388d02..49a978a 100644
--- a/sc/uiconfig/scalc/menubar/menubar.xml
+++ b/sc/uiconfig/scalc/menubar/menubar.xml
@@ -591,6 +591,7 @@
<menu:menuitem menu:id=".uno:DuplicateSheet"/>
<menu:menu menu:id=".uno:NavigateMenu">
<menu:menupopup>
<menu:menuitem menu:id=".uno:JumpToTable"/>
<menu:menuitem menu:id=".uno:JumpToPrevTable"/>
<menu:menuitem menu:id=".uno:JumpToNextTable"/>
</menu:menupopup>
diff --git a/sc/uiconfig/scalc/ui/gotosheetdialog.ui b/sc/uiconfig/scalc/ui/gotosheetdialog.ui
new file mode 100644
index 0000000..93c2e72
--- /dev/null
+++ b/sc/uiconfig/scalc/ui/gotosheetdialog.ui
@@ -0,0 +1,201 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.2 -->
<interface domain="sc">
<requires lib="gtk+" version="3.20"/>
<object class="GtkTreeStore" id="liststore1">
<columns>
<!-- column-name text -->
<column type="gchararray"/>
<!-- column-name id -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkDialog" id="GoToSheetDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="gotosheetdialog|GoToSheetDialog">Go to Sheet</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="default_width">0</property>
<property name="default_height">0</property>
<property name="type_hint">dialog</property>
<child type="titlebar">
<placeholder/>
</child>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child internal-child="action_area">
<object class="GtkButtonBox" id="dialog-action_area1">
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="ok">
<property name="label" translatable="yes" context="stock">_OK</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="cancel">
<property name="label" translatable="yes" context="stock">_Cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="help">
<property name="label" translatable="yes" context="stock">_Help</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="secondary">True</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame-mask">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkEntry" id="entry-mask">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="truncate-multiline">True</property>
<property name="activates_default">True</property>
<child internal-child="accessible">
<object class="AtkObject" id="name-mask-atkobject">
<property name="AtkObject::accessible-description" translatable="yes" context="gotosheetdialog|extended_tip|entry-mask">Type some letters of sheet name to find it.</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label-mask">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="gotosheetdialog|label-mask">_Type a sheet name</property>
<property name="use_underline">True</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame-sheets">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="margin_start">12</property>
<property name="margin_top">6</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="vexpand">True</property>
<property name="model">liststore1</property>
<property name="headers_visible">False</property>
<property name="headers_clickable">False</property>
<property name="search_column">0</property>
<property name="show_expanders">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
<child>
<object class="GtkCellRendererText" id="cellrenderertext1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label-sheets">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="gotosheetdialog|label-sheets">_Sheets</property>
<property name="use_underline">True</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-5">ok</action-widget>
<action-widget response="-6">cancel</action-widget>
<action-widget response="-11">help</action-widget>
</action-widgets>
<child internal-child="accessible">
<object class="AtkObject" id="GoToSheetDialog-atkobject">
<property name="AtkObject::accessible-description" translatable="yes" context="gotosheetdialog|GoToSheetDialog">Displays a list of all visible sheets in your spreadsheet document.</property>
</object>
</child>
</object>
</interface>