Made ListWidget::addItem to take const &; started to remove use of
m_index in addon_manager. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@7180 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
@@ -49,7 +49,7 @@ AddonsManager::AddonsManager() : m_state(STATE_INIT)
|
||||
|
||||
m_file_installed = file_manager->getConfigDir()
|
||||
+ "/" + "addons_installed.xml";
|
||||
getInstalledAddons();
|
||||
loadInstalledAddons();
|
||||
} // AddonsManager
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -124,76 +124,47 @@ void AddonsManager::resetIndex()
|
||||
m_index = -1;
|
||||
}
|
||||
// ----------------------------------------------------------------------------
|
||||
void AddonsManager::getInstalledAddons()
|
||||
void AddonsManager::loadInstalledAddons()
|
||||
{
|
||||
std::string attribute_name;
|
||||
int old_index = m_index;
|
||||
|
||||
/* checking for installed addons */
|
||||
|
||||
std::cout << "[Addons] Loading an xml file for installed addons: ";
|
||||
std::cout << m_file_installed << std::endl;
|
||||
io::IrrXMLReader* xml = io::createIrrXMLReader(m_file_installed.c_str());
|
||||
const XMLNode *xml = file_manager->createXMLTree(m_file_installed);
|
||||
if(!xml)
|
||||
return;
|
||||
|
||||
// parse the file until end reached
|
||||
int old_index = m_index;
|
||||
|
||||
while(xml && xml->read())
|
||||
for(unsigned int i=0; i<xml->getNumNodes(); i++)
|
||||
{
|
||||
std::string name;
|
||||
std::string id;
|
||||
int version = 0;
|
||||
switch(xml->getNodeType())
|
||||
const XMLNode *node=xml->getNode(i);
|
||||
if(node->getName()=="kart" ||
|
||||
node->getName()=="track" )
|
||||
{
|
||||
case io::EXN_ELEMENT:
|
||||
std::string name="";
|
||||
std::string id="";
|
||||
int version = 0;
|
||||
node->get("id", &id );
|
||||
node->get("name", &name );
|
||||
node->get("version", &version);
|
||||
if(selectId(id))
|
||||
{
|
||||
if (!strcmp("kart", xml->getNodeName()) ||
|
||||
!strcmp("track", xml->getNodeName()) )
|
||||
{
|
||||
std::cout << xml->getAttributeCount() << std::endl;
|
||||
//the unsigned is to remove the compiler warnings,
|
||||
// maybe it is a bad idea ?
|
||||
for(unsigned int i = 0; i < xml->getAttributeCount(); i++)
|
||||
{
|
||||
attribute_name = xml->getAttributeName(i);
|
||||
if(attribute_name == "id")
|
||||
{
|
||||
id = xml->getAttributeValue("id");
|
||||
}
|
||||
if(attribute_name == "name")
|
||||
{
|
||||
name = xml->getAttributeValue("name");
|
||||
}
|
||||
if(attribute_name == "version")
|
||||
{
|
||||
version = xml->getAttributeValueAsInt("version");
|
||||
}
|
||||
}
|
||||
if(selectId(id))
|
||||
{
|
||||
m_addons_list[m_index].m_installed = true;
|
||||
m_addons_list[m_index].m_installed_version = version;
|
||||
std::cout << "[Addons] An addon is already installed: "
|
||||
<< id << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
AddonsProp addons;
|
||||
addons.m_type = xml->getNodeName();
|
||||
addons.m_name = name;
|
||||
addons.m_installed_version = version;
|
||||
addons.m_version = version;
|
||||
addons.m_installed = true;
|
||||
m_addons_list.push_back(addons);
|
||||
}
|
||||
}
|
||||
m_addons_list[m_index].m_installed = true;
|
||||
m_addons_list[m_index].m_installed_version = version;
|
||||
std::cout << "[Addons] An addon is already installed: "
|
||||
<< id << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
AddonsProp addons(*xml, /* installed= */ true);
|
||||
m_addons_list.push_back(addons);
|
||||
}
|
||||
break;
|
||||
default : break;
|
||||
}
|
||||
}
|
||||
} // for i <= xml->getNumNodes()
|
||||
|
||||
delete xml;
|
||||
m_index = old_index;
|
||||
}
|
||||
} // loadInstalledAddons
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
class AddonsManager
|
||||
{
|
||||
public:
|
||||
class AddonsProp
|
||||
{
|
||||
public:
|
||||
@@ -42,18 +43,37 @@ class AddonsManager
|
||||
bool m_installed;
|
||||
std::string m_type;
|
||||
AddonsProp() {};
|
||||
AddonsProp(const XMLNode &xml)
|
||||
/** Initialises the object from an XML node. */
|
||||
AddonsProp(const XMLNode &xml, bool installed=false)
|
||||
{
|
||||
m_installed = false;
|
||||
m_installed = installed;
|
||||
m_installed_version = 0;
|
||||
m_type = xml.getName();
|
||||
m_name = ""; xml.get("name", &m_name );
|
||||
m_version = 0 ; xml.get("version", &m_version );
|
||||
m_file = ""; xml.get("file", &m_file );
|
||||
m_description = ""; xml.get("description", &m_description);
|
||||
m_icon = ""; xml.get("icon", &m_icon );
|
||||
m_id = ""; xml.get("id", &m_id );
|
||||
m_type = xml.getName();
|
||||
m_name = ""; xml.get("name", &m_name );
|
||||
m_version = 0 ; xml.get("version", &m_version );
|
||||
m_file = ""; xml.get("file", &m_file );
|
||||
m_description = ""; xml.get("description", &m_description);
|
||||
m_icon = ""; xml.get("icon", &m_icon );
|
||||
m_id = ""; xml.get("id", &m_id );
|
||||
}; // AddonsProp(const XML&)
|
||||
// --------------------------------------------------------------------
|
||||
/** Returns the name of the addon. */
|
||||
const std::string& getName() const {return m_name; }
|
||||
// --------------------------------------------------------------------
|
||||
/** Returns if the addon is installed. */
|
||||
bool isInstalled() const {return m_installed; }
|
||||
// --------------------------------------------------------------------
|
||||
/** Returns the installed version of an addon. */
|
||||
int getInstalledVersion() const {return m_installed_version; }
|
||||
// --------------------------------------------------------------------
|
||||
/** Returns the latest version of this addon.
|
||||
* m_version>m_installed_version if a newer version is available
|
||||
* online. */
|
||||
int getVersion() const {return m_version; }
|
||||
// --------------------------------------------------------------------
|
||||
/** Returns the ID of this addon. */
|
||||
const std::string& getId() const {return m_id; }
|
||||
// --------------------------------------------------------------------
|
||||
};
|
||||
|
||||
private:
|
||||
@@ -61,7 +81,7 @@ class AddonsManager
|
||||
int m_index;
|
||||
std::string m_file_installed;
|
||||
void saveInstalled();
|
||||
void getInstalledAddons();
|
||||
void loadInstalledAddons();
|
||||
std::string m_type;
|
||||
int m_download_state;
|
||||
std::string m_str_state;
|
||||
@@ -79,6 +99,13 @@ class AddonsManager
|
||||
|
||||
void initOnline();
|
||||
bool onlineReady();
|
||||
|
||||
/** Returns the list of addons (installed and uninstalled). */
|
||||
unsigned int getNumAddons() const { return m_addons_list.size(); }
|
||||
|
||||
/** Returns the i-th addons. */
|
||||
const AddonsProp& getAddons(unsigned int i) { return m_addons_list[i];}
|
||||
|
||||
/** Select the next addons in the addons list. */
|
||||
bool next();
|
||||
/** Select the next addons in the addons list. */
|
||||
|
||||
@@ -92,7 +92,8 @@ void ListWidget::clear()
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ListWidget::addItem(const std::string internalName, const irr::core::stringw name, const int icon)
|
||||
void ListWidget::addItem(const std::string& internalName,
|
||||
const irr::core::stringw& name, const int icon)
|
||||
{
|
||||
ListItem newItem;
|
||||
newItem.m_label = name;
|
||||
|
||||
@@ -79,7 +79,8 @@ namespace GUIEngine
|
||||
* \param icon ID of the icon within the icon bank. Only used if an icon bank was passed.
|
||||
* \precondition may only be called after the widget has been added to the screen with add()
|
||||
*/
|
||||
void addItem(const std::string internalName, const irr::core::stringw name, const int icon=-1);
|
||||
void addItem(const std::string& internal_name,
|
||||
const irr::core::stringw &name, const int icon=-1);
|
||||
|
||||
/**
|
||||
* \brief erases all items in the list
|
||||
|
||||
@@ -67,26 +67,26 @@ void AddonsScreen::loadList()
|
||||
GUIEngine::ListWidget* w_list =
|
||||
getWidget<GUIEngine::ListWidget>("list_addons");
|
||||
w_list->clear();
|
||||
addons_manager->resetIndex();
|
||||
//w_list->addItem("kart", _("Karts:"), -1 /* no icon */);
|
||||
while(addons_manager->nextType(m_type))
|
||||
for(unsigned int i=0; i<addons_manager->getNumAddons(); i++)
|
||||
{
|
||||
std::cout << addons_manager->getName() << std::endl;
|
||||
if(addons_manager->isInstalled() &&
|
||||
addons_manager->getInstalledVersion() < addons_manager->getVersion())
|
||||
const AddonsManager::AddonsProp &addons = addons_manager->getAddons(i);
|
||||
|
||||
std::cout << addons.getName()<< std::endl;
|
||||
if(addons.isInstalled() &&
|
||||
addons.getInstalledVersion() < addons.getVersion())
|
||||
{
|
||||
w_list->addItem(addons_manager->getIdAsStr().c_str(),
|
||||
addons_manager->getName().c_str(), 2 /* icon installed */);
|
||||
w_list->addItem(addons.getId(), addons.getName().c_str(),
|
||||
2 /* icon installed */);
|
||||
}
|
||||
else if(addons_manager->isInstalled())
|
||||
else if(addons.isInstalled())
|
||||
{
|
||||
w_list->addItem(addons_manager->getIdAsStr().c_str(),
|
||||
w_list->addItem(addons.getId(),
|
||||
addons_manager->getName().c_str(), 0 /* icon installed */);
|
||||
}
|
||||
else
|
||||
{
|
||||
w_list->addItem(addons_manager->getIdAsStr().c_str(),
|
||||
addons_manager->getName().c_str(), 1 /* icon unsinstalled*/);
|
||||
w_list->addItem(addons.getId(), addons.getName().c_str(),
|
||||
1 /* icon unsinstalled*/);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user