backend for tab completion: identifiers

pull/21/head
Marc Zinnschlag 14 years ago
parent 6848115c18
commit d865c3cfc6

@ -79,12 +79,23 @@ namespace MWGui
{ {
if (mNames.empty()) if (mNames.empty())
{ {
// keywords
std::istringstream input (""); std::istringstream input ("");
Compiler::Scanner scanner (*this, input, mCompilerContext.getExtensions()); Compiler::Scanner scanner (*this, input, mCompilerContext.getExtensions());
scanner.listKeywords (mNames); scanner.listKeywords (mNames);
// identifier
const ESMS::ESMStore& store = mEnvironment.mWorld->getStore();
for (ESMS::RecListList::const_iterator iter (store.recLists.begin());
iter!=store.recLists.end(); ++iter)
{
iter->second->listIdentifier (mNames);
}
// sort
std::sort (mNames.begin(), mNames.end()); std::sort (mNames.begin(), mNames.end());
} }
} }

@ -37,6 +37,8 @@ namespace MWGui
void listNames(); void listNames();
///< Write all valid identifiers and keywords into mNames and sort them. ///< Write all valid identifiers and keywords into mNames and sort them.
/// \note If mNames is not empty, this function is a no-op. /// \note If mNames is not empty, this function is a no-op.
/// \note The list may contain duplicates (if a name is a keyword and an identifier at the same
/// time).
public: public:
MyGUI::EditPtr command; MyGUI::EditPtr command;

@ -4,6 +4,7 @@
#include "components/esm/records.hpp" #include "components/esm/records.hpp"
#include <map> #include <map>
#include <string> #include <string>
#include <vector>
#include <algorithm> #include <algorithm>
#include <cctype> #include <cctype>
#include <assert.h> #include <assert.h>
@ -23,6 +24,7 @@ namespace ESMS
{ {
virtual void load(ESMReader &esm, const std::string &id) = 0; virtual void load(ESMReader &esm, const std::string &id) = 0;
virtual int getSize() = 0; virtual int getSize() = 0;
virtual void listIdentifier (std::vector<std::string>& identifier) const = 0;
static std::string toLower (const std::string& name) static std::string toLower (const std::string& name)
{ {
@ -76,6 +78,12 @@ namespace ESMS
} }
int getSize() { return list.size(); } int getSize() { return list.size(); }
virtual void listIdentifier (std::vector<std::string>& identifier) const
{
for (typename MapType::const_iterator iter (list.begin()); iter!=list.end(); ++iter)
identifier.push_back (iter->first);
}
}; };
/// Modified version of RecListT for records, that need to store their own ID /// Modified version of RecListT for records, that need to store their own ID
@ -117,6 +125,12 @@ namespace ESMS
} }
int getSize() { return list.size(); } int getSize() { return list.size(); }
virtual void listIdentifier (std::vector<std::string>& identifier) const
{
for (typename MapType::const_iterator iter (list.begin()); iter!=list.end(); ++iter)
identifier.push_back (iter->first);
}
}; };
// The only difference to the above is a slight change to the load() // The only difference to the above is a slight change to the load()
@ -163,6 +177,12 @@ namespace ESMS
} }
int getSize() { return list.size(); } int getSize() { return list.size(); }
virtual void listIdentifier (std::vector<std::string>& identifier) const
{
for (typename MapType::const_iterator iter (list.begin()); iter!=list.end(); ++iter)
identifier.push_back (iter->first);
}
}; };
/* Land textures are indexed by an integer number /* Land textures are indexed by an integer number
@ -181,6 +201,8 @@ namespace ESMS
int getSize() { return count; } int getSize() { return count; }
virtual void listIdentifier (std::vector<std::string>& identifier) const {}
void load(ESMReader &esm, const std::string &id) void load(ESMReader &esm, const std::string &id)
{ {
LandTexture lt; LandTexture lt;
@ -210,6 +232,8 @@ namespace ESMS
LandList() : count(0) {} LandList() : count(0) {}
int getSize() { return count; } int getSize() { return count; }
virtual void listIdentifier (std::vector<std::string>& identifier) const {}
// Find land for the given coordinates. Return null if no data. // Find land for the given coordinates. Return null if no data.
const Land *search(int x, int y) const const Land *search(int x, int y) const
{ {
@ -267,6 +291,12 @@ namespace ESMS
typedef std::map<int, ExtCellsCol> ExtCells; typedef std::map<int, ExtCellsCol> ExtCells;
ExtCells extCells; ExtCells extCells;
virtual void listIdentifier (std::vector<std::string>& identifier) const
{
for (IntCells::const_iterator iter (intCells.begin()); iter!=intCells.end(); ++iter)
identifier.push_back (iter->first);
}
~CellList() ~CellList()
{ {
for (IntCells::iterator it = intCells.begin(); it!=intCells.end(); ++it) for (IntCells::iterator it = intCells.begin(); it!=intCells.end(); ++it)
@ -407,6 +437,12 @@ namespace ESMS
} }
int getSize() { return list.size(); } int getSize() { return list.size(); }
virtual void listIdentifier (std::vector<std::string>& identifier) const
{
for (typename MapType::const_iterator iter (list.begin()); iter!=list.end(); ++iter)
identifier.push_back (iter->first);
}
}; };
template <typename X> template <typename X>
@ -429,6 +465,8 @@ namespace ESMS
return list.size(); return list.size();
} }
virtual void listIdentifier (std::vector<std::string>& identifier) const {}
// Find the given object ID, or return NULL if not found. // Find the given object ID, or return NULL if not found.
const X* search (int id) const const X* search (int id) const
{ {
@ -458,9 +496,7 @@ namespace ESMS
/* We need special lists for: /* We need special lists for:
Land
Path grids Path grids
Land textures
*/ */
} }
#endif #endif

Loading…
Cancel
Save