Kaydet (Commit) fe195f2c authored tarafından Julien Nabet's avatar Julien Nabet Kaydeden (comit) Noel Grandin

Related tdf#111892: revamp TemplateScanner

Remove EnableSorting since it was only used with false as argument
and unwind to remove too mpEntryCompare, mbSortingEnabled,
InsertEntry which become useless
Finally remove TemplateDir which becomes just a wrapper class for a vector

Change-Id: I1e4ead009711f67fe75f3231761cc8966a39f57b
Reviewed-on: https://gerrit.libreoffice.org/41333Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst 9723634f
......@@ -107,40 +107,6 @@ int Classify (const OUString&, const OUString& rsURL)
namespace sd
{
TemplateEntryCompare::TemplateEntryCompare():
mpStringSorter(new comphelper::string::NaturalStringSorter(
::comphelper::getProcessComponentContext(),
Application::GetSettings().GetLanguageTag().getLocale())) {}
bool TemplateEntryCompare::operator()(TemplateEntry const * pA, TemplateEntry const * pB) const
{
return 0 > mpStringSorter->compare(pA->msTitle, pB->msTitle);
}
void TemplateDir::EnableSorting(bool bSortingEnabled)
{
mbSortingEnabled = bSortingEnabled;
if (mbSortingEnabled)
{
if (mpEntryCompare.get() == nullptr)
mpEntryCompare.reset(new TemplateEntryCompare);
::std::sort(maEntries.begin(), maEntries.end(), *mpEntryCompare);
}
}
void TemplateDir::InsertEntry(TemplateEntry* pNewEntry)
{
if (mbSortingEnabled)
{
::std::vector<TemplateEntry*>::iterator aPlaceToInsert =
::std::upper_bound(maEntries.begin(), maEntries.end(), pNewEntry, *mpEntryCompare);
maEntries.insert(aPlaceToInsert, pNewEntry);
}
else
maEntries.push_back(pNewEntry);
}
class TemplateScanner::FolderDescriptorList
: public ::std::multiset<FolderDescriptor,FolderDescriptor::Comparator>
{
......@@ -149,9 +115,7 @@ class TemplateScanner::FolderDescriptorList
TemplateScanner::TemplateScanner()
: meState(INITIALIZE_SCANNING),
maFolderContent(),
mpTemplateDirectory(nullptr),
maFolderList(),
mpLastAddedEntry(nullptr),
mpFolderDescriptors(new FolderDescriptorList),
mxTemplateRoot(),
mxFolderEnvironment(),
......@@ -164,14 +128,6 @@ TemplateScanner::TemplateScanner()
TemplateScanner::~TemplateScanner()
{
mpFolderDescriptors.reset();
// Delete all entries of the template list that have not been
// transferred to another object.
std::vector<TemplateDir*>::iterator I;
for (I=maFolderList.begin(); I!=maFolderList.end(); ++I)
if (*I != nullptr)
delete *I;
}
TemplateScanner::State TemplateScanner::GetTemplateRoot()
......@@ -239,8 +195,7 @@ TemplateScanner::State TemplateScanner::ScanEntry()
|| (sContentType == "Impress 2.0"))
{
OUString sLocalisedTitle = SfxDocumentTemplates::ConvertResourceString(sTitle);
mpLastAddedEntry = new TemplateEntry(sLocalisedTitle, sTargetURL);
mpTemplateDirectory->InsertEntry(mpLastAddedEntry);
mpTemplateEntries.push_back(new TemplateEntry(sLocalisedTitle, sTargetURL));
}
}
......@@ -249,15 +204,10 @@ TemplateScanner::State TemplateScanner::ScanEntry()
}
else
{
if (mpTemplateDirectory->maEntries.empty())
{
delete mpTemplateDirectory;
mpTemplateDirectory = nullptr;
}
else
if (!mpTemplateEntries.empty())
{
SolarMutexGuard aGuard;
maFolderList.push_back(mpTemplateDirectory);
maFolderList.push_back(mpTemplateEntries);
}
// Continue with scanning the next folder.
......@@ -344,9 +294,8 @@ TemplateScanner::State TemplateScanner::ScanFolder()
{
// Scan the folder and insert it into the list of template
// folders.
mpTemplateDirectory = new TemplateDir;
mpTemplateDirectory->EnableSorting(false);
// Continue with scanning all entries in the folder.
mpTemplateEntries.clear();
eNextState = INITIALIZE_ENTRY_SCAN;
}
}
......@@ -393,13 +342,11 @@ void TemplateScanner::RunNextStep()
{
case DONE:
case ERROR:
mxTemplateRoot.clear();
mxTemplateRoot.clear();
mxFolderEnvironment.clear();
mxEntryEnvironment.clear();
mxFolderResultSet.clear();
mxEntryResultSet.clear();
mpLastAddedEntry = nullptr;
break;
default:
break;
......
......@@ -55,37 +55,6 @@ public:
OUString msPath;
};
/** Functor that compares two TemplateEntries based on their titles
*/
class TemplateEntryCompare
{
public:
TemplateEntryCompare();
bool operator()(TemplateEntry const * pA, TemplateEntry const * pB) const;
private:
std::shared_ptr<comphelper::string::NaturalStringSorter> mpStringSorter;
};
/** Representation of a template or layout folder.
*/
class TemplateDir
{
public:
TemplateDir()
: maEntries(),
mbSortingEnabled(false), mpEntryCompare(nullptr) {}
::std::vector<TemplateEntry*> maEntries;
void EnableSorting(bool bSortingEnabled);
void InsertEntry(TemplateEntry* pNewEntry);
private:
bool mbSortingEnabled;
std::unique_ptr<TemplateEntryCompare> mpEntryCompare;
};
/** This class scans the template folders for impress templates. There are
two ways to use this class.
1. The old and deprecated way is to call Scan() to scan all templates
......@@ -119,12 +88,12 @@ public:
virtual bool HasNextStep() override;
/** Return the TemplateDir object that was last added to
mpTemplateDirectory.
mpTemplateEntries.
@return
<nullptr/> is returned either before the template scanning is
started or after it has ended.
*/
const TemplateEntry* GetLastAddedEntry() const { return mpLastAddedEntry;}
const TemplateEntry* GetLastAddedEntry() const { return mpTemplateEntries.empty()?nullptr:mpTemplateEntries.back();}
private:
/** The current state determines which step will be executed next by
......@@ -143,17 +112,12 @@ private:
State meState;
::ucbhelper::Content maFolderContent;
TemplateDir* mpTemplateDirectory;
::std::vector<TemplateEntry*> mpTemplateEntries;
/** The data structure that is to be filled with information about the
template files.
*/
std::vector<TemplateDir*> maFolderList;
/** This member points into the maFolderList to the member that was most
recently added.
*/
TemplateEntry* mpLastAddedEntry;
std::vector< ::std::vector<TemplateEntry*> > maFolderList;
/** The folders that are collected by GatherFolderList().
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment