summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorLaurent BP <laurent.balland-poirier@laposte.net>2022-05-16 22:47:25 +0200
committerLaurent Balland-Poirier <laurent.balland@mailo.fr>2022-06-07 13:43:20 +0200
commitd93e9430bfbf6fa8a679ea2d4d98f955774026f6 (patch)
tree6d6e6a4f48cd9fb1134989fbf9f3b879e67e8d77 /sc
parent19a6adddec0f5a6ee771939a17f85bdde4a44ce3 (diff)
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>
Diffstat (limited to 'sc')
-rw-r--r--sc/Library_scui.mk1
-rw-r--r--sc/UIConfig_scalc.mk1
-rw-r--r--sc/inc/helpids.h2
-rw-r--r--sc/inc/pch/precompiled_scui.hxx1
-rw-r--r--sc/inc/scabstdlg.hxx13
-rw-r--r--sc/inc/strings.hrc3
-rw-r--r--sc/sdi/scalc.sdi4
-rw-r--r--sc/source/ui/attrdlg/scdlgfact.cxx32
-rw-r--r--sc/source/ui/attrdlg/scdlgfact.hxx18
-rw-r--r--sc/source/ui/inc/gototabdlg.hxx43
-rw-r--r--sc/source/ui/miscdlgs/gototabdlg.cxx81
-rw-r--r--sc/source/ui/view/tabvwsh3.cxx48
-rw-r--r--sc/uiconfig/scalc/menubar/menubar.xml1
-rw-r--r--sc/uiconfig/scalc/ui/gotosheetdialog.ui201
14 files changed, 442 insertions, 7 deletions
diff --git a/sc/Library_scui.mk b/sc/Library_scui.mk
index 4d4cffa12bd4..02c2bc8244d1 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 cf5f7e0951bf..13a4b98a6c7c 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 bb9ff1c2faed..c320a0f94bd0 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 bfe19b1ba147..daedbcbd231e 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 5d9285b5017a..9901d48bd610 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 5fad14fbc4c1..5e9c82592e68 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 edf0ebb7134d..7295dd3ef978 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 909d9fd85a43..8b59e672ca12 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 8eb9dc7a5976..b1703930c584 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 000000000000..827f56b17760
--- /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 000000000000..e38e671009ee
--- /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 8a65b1c7b917..766f6c7621d4 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 5388d021e96b..49a978aa4f29 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 000000000000..93c2e72a0e10
--- /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>