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:
hikerstk
2010-12-29 05:43:10 +00:00
parent 976f2f463a
commit d78310c9e3
5 changed files with 82 additions and 82 deletions

View File

@@ -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
// ----------------------------------------------------------------------------

View File

@@ -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. */

View File

@@ -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;

View File

@@ -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

View File

@@ -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*/);
}
}