fdo#39881 change Find All behaviour in Calc
Allow to search in all sheets. Find all now creates new dialog describing all matching cells. Change-Id: I36a9bee314b620384937fff074680022397c8c5f Reviewed-on: https://gerrit.libreoffice.org/5886 Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com> Tested-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
This commit is contained in:
committed by
Markus Mohrhard
parent
38dd740479
commit
09a546ed1f
@@ -378,6 +378,7 @@ $(eval $(call gb_Library_add_exception_objects,sc,\
|
|||||||
$(if $(filter TRUE,$(MPL_SUBSET)),, \
|
$(if $(filter TRUE,$(MPL_SUBSET)),, \
|
||||||
sc/source/ui/dbgui/pvlaydlg) \
|
sc/source/ui/dbgui/pvlaydlg) \
|
||||||
sc/source/ui/dbgui/sfiltdlg \
|
sc/source/ui/dbgui/sfiltdlg \
|
||||||
|
sc/source/ui/dialogs/searchresults \
|
||||||
sc/source/ui/docshell/arealink \
|
sc/source/ui/docshell/arealink \
|
||||||
sc/source/ui/docshell/autostyl \
|
sc/source/ui/docshell/autostyl \
|
||||||
sc/source/ui/docshell/dbdocfun \
|
sc/source/ui/docshell/dbdocfun \
|
||||||
|
@@ -107,6 +107,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\
|
|||||||
sc/uiconfig/scalc/ui/samplingdialog \
|
sc/uiconfig/scalc/ui/samplingdialog \
|
||||||
sc/uiconfig/scalc/ui/standardfilterdialog \
|
sc/uiconfig/scalc/ui/standardfilterdialog \
|
||||||
sc/uiconfig/scalc/ui/scgeneralpage \
|
sc/uiconfig/scalc/ui/scgeneralpage \
|
||||||
|
sc/uiconfig/scalc/ui/searchresults \
|
||||||
sc/uiconfig/scalc/ui/selectrange \
|
sc/uiconfig/scalc/ui/selectrange \
|
||||||
sc/uiconfig/scalc/ui/selectsource \
|
sc/uiconfig/scalc/ui/selectsource \
|
||||||
sc/uiconfig/scalc/ui/sheetprintpage \
|
sc/uiconfig/scalc/ui/sheetprintpage \
|
||||||
|
73
sc/source/ui/dialogs/searchresults.cxx
Normal file
73
sc/source/ui/dialogs/searchresults.cxx
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
/* -*- 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/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "searchresults.hxx"
|
||||||
|
|
||||||
|
#include <svtools/simptabl.hxx>
|
||||||
|
#include <svtools/treelistentry.hxx>
|
||||||
|
#include "dociter.hxx"
|
||||||
|
#include "document.hxx"
|
||||||
|
#include "rangeutl.hxx"
|
||||||
|
#include "tabvwsh.hxx"
|
||||||
|
|
||||||
|
SearchResults::SearchResults(ScDocument *pDoc) :
|
||||||
|
ModelessDialog(NULL, "SearchResultsDialog", "modules/scalc/ui/searchresults.ui")
|
||||||
|
, mpDoc(pDoc)
|
||||||
|
{
|
||||||
|
SvSimpleTableContainer *pContainer = get<SvSimpleTableContainer>("results");
|
||||||
|
Size aControlSize(150, 120);
|
||||||
|
aControlSize = pContainer->LogicToPixel(aControlSize, MAP_APPFONT);
|
||||||
|
pContainer->set_width_request(aControlSize.Width());
|
||||||
|
pContainer->set_height_request(aControlSize.Height());
|
||||||
|
|
||||||
|
mpList = new SvSimpleTable(*pContainer);
|
||||||
|
long nTabs[] = {3, 0, 40, 60};
|
||||||
|
mpList->SetTabs(&nTabs[0]);
|
||||||
|
mpList->InsertHeaderEntry("Sheet\tCell\tContent");
|
||||||
|
mpList->SetSelectHdl( LINK(this, SearchResults, ListSelectHdl) );
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchResults::~SearchResults()
|
||||||
|
{
|
||||||
|
delete mpList;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchResults::Show(const ScRangeList &rMatchedRanges)
|
||||||
|
{
|
||||||
|
mpList->Clear();
|
||||||
|
for (size_t i = 0, n = rMatchedRanges.size(); i < n; ++i)
|
||||||
|
{
|
||||||
|
ScCellIterator aIter(mpDoc, *rMatchedRanges[i]);
|
||||||
|
for (bool bHas = aIter.first(); bHas; bHas = aIter.next())
|
||||||
|
{
|
||||||
|
ScAddress aAddress = aIter.GetPos();
|
||||||
|
OUString sAddress;
|
||||||
|
ScRangeStringConverter::GetStringFromAddress(sAddress, aAddress,
|
||||||
|
mpDoc, formula::FormulaGrammar::CONV_OOO);
|
||||||
|
mpList->InsertEntry(sAddress.replace('.', '\t') + "\t" + mpDoc->GetString(aAddress));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ModelessDialog::Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
IMPL_LINK_NOARG( SearchResults, ListSelectHdl )
|
||||||
|
{
|
||||||
|
SvTreeListEntry *pEntry = mpList->FirstSelected();
|
||||||
|
ScAddress aAddress;
|
||||||
|
sal_Int32 nOffset = 0;
|
||||||
|
OUString sAddress = mpList->GetEntryText(pEntry).replaceFirst("\t", ".");
|
||||||
|
ScRangeStringConverter::GetAddressFromString(aAddress, sAddress,
|
||||||
|
mpDoc, formula::FormulaGrammar::CONV_OOO, nOffset, '\t');
|
||||||
|
ScTabViewShell* pScViewShell = ScTabViewShell::GetActiveViewShell();
|
||||||
|
pScViewShell->SetTabNo(aAddress.Tab());
|
||||||
|
pScViewShell->SetCursor(aAddress.Col(), aAddress.Row());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
31
sc/source/ui/inc/searchresults.hxx
Normal file
31
sc/source/ui/inc/searchresults.hxx
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/* -*- 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/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SC_UI_SEARCHRESULTS_HXX
|
||||||
|
#define SC_UI_SEARCHRESULTS_HXX
|
||||||
|
|
||||||
|
#include <vcl/dialog.hxx>
|
||||||
|
class ScDocument;
|
||||||
|
class ScRangeList;
|
||||||
|
class SvSimpleTable;
|
||||||
|
|
||||||
|
class SearchResults : public ModelessDialog
|
||||||
|
{
|
||||||
|
ScDocument *mpDoc;
|
||||||
|
SvSimpleTable *mpList;
|
||||||
|
DECL_LINK( ListSelectHdl, void * );
|
||||||
|
public:
|
||||||
|
SearchResults(ScDocument *);
|
||||||
|
virtual ~SearchResults();
|
||||||
|
void Show(const ScRangeList &);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
@@ -79,6 +79,7 @@
|
|||||||
#include "tabbgcolor.hxx"
|
#include "tabbgcolor.hxx"
|
||||||
#include "clipparam.hxx"
|
#include "clipparam.hxx"
|
||||||
#include "prnsave.hxx"
|
#include "prnsave.hxx"
|
||||||
|
#include "searchresults.hxx"
|
||||||
#include "tokenarray.hxx"
|
#include "tokenarray.hxx"
|
||||||
|
|
||||||
#include <boost/scoped_ptr.hpp>
|
#include <boost/scoped_ptr.hpp>
|
||||||
@@ -1657,6 +1658,9 @@ void ScViewFunc::SearchAndReplace( const SvxSearchItem* pSearchItem,
|
|||||||
|
|
||||||
if (nCommand == SVX_SEARCHCMD_FIND_ALL || nCommand == SVX_SEARCHCMD_REPLACE_ALL)
|
if (nCommand == SVX_SEARCHCMD_FIND_ALL || nCommand == SVX_SEARCHCMD_REPLACE_ALL)
|
||||||
{
|
{
|
||||||
|
static SearchResults *aSearchResults = new SearchResults(pDoc);
|
||||||
|
aSearchResults->Show(aMatchedRanges);
|
||||||
|
|
||||||
rMark.ResetMark();
|
rMark.ResetMark();
|
||||||
for (size_t i = 0, n = aMatchedRanges.size(); i < n; ++i)
|
for (size_t i = 0, n = aMatchedRanges.size(); i < n; ++i)
|
||||||
{
|
{
|
||||||
|
62
sc/uiconfig/scalc/ui/searchresults.ui
Normal file
62
sc/uiconfig/scalc/ui/searchresults.ui
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<!-- interface-requires LibreOffice 1.0 -->
|
||||||
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
|
<object class="GtkDialog" id="SearchResultsDialog">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="border_width">6</property>
|
||||||
|
<property name="title" translatable="yes">Search Results</property>
|
||||||
|
<property name="type_hint">dialog</property>
|
||||||
|
<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="close">
|
||||||
|
<property name="label">gtk-close</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_stock">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</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="svtlo-SvSimpleTableContainer" id="results">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
<property name="vexpand">True</property>
|
||||||
|
</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="0">close</action-widget>
|
||||||
|
</action-widgets>
|
||||||
|
</object>
|
||||||
|
</interface>
|
@@ -1189,13 +1189,8 @@ IMPL_LINK( SvxSearchDialog, FlagHdl_Impl, Control *, pCtrl )
|
|||||||
|
|
||||||
if (m_pAllSheetsCB == pCtrl)
|
if (m_pAllSheetsCB == pCtrl)
|
||||||
{
|
{
|
||||||
if ( m_pAllSheetsCB->IsChecked() )
|
bSet = sal_True;
|
||||||
m_pSearchAllBtn->Disable();
|
ModifyHdl_Impl(m_pSearchLB);
|
||||||
else
|
|
||||||
{
|
|
||||||
bSet = sal_True;
|
|
||||||
ModifyHdl_Impl(m_pSearchLB);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_pJapOptionsCB == pCtrl)
|
if (m_pJapOptionsCB == pCtrl)
|
||||||
@@ -1725,7 +1720,7 @@ void SvxSearchDialog::EnableControl_Impl( Control* pCtrl )
|
|||||||
if ( m_pSearchAllBtn == pCtrl &&
|
if ( m_pSearchAllBtn == pCtrl &&
|
||||||
( SEARCH_OPTIONS_SEARCH_ALL & nOptions ) != 0 )
|
( SEARCH_OPTIONS_SEARCH_ALL & nOptions ) != 0 )
|
||||||
{
|
{
|
||||||
m_pSearchAllBtn->Enable( ( bWriter || !m_pAllSheetsCB->IsChecked() ) );
|
m_pSearchAllBtn->Enable( true );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( m_pReplaceBtn == pCtrl && ( SEARCH_OPTIONS_REPLACE & nOptions ) != 0 )
|
if ( m_pReplaceBtn == pCtrl && ( SEARCH_OPTIONS_REPLACE & nOptions ) != 0 )
|
||||||
|
Reference in New Issue
Block a user