/** * Add data from database into list view. */ void CountriesListScreen::addDataToListView() { // Clear data from map. mCountryMap.clear(); // Create first section. NativeUI::ListViewSection* section = NULL; MAUtil::String sectionTitle("A"); // For each country read create and add an ListViewItem widget. int countCountries = mDatabase.countCountries(); for (int index = 0; index < countCountries; index++) { // If index is invalid skip this country. Country* country = mDatabase.getCountryByIndex(index); if (!country) { continue; } // If country's name is an empty string skip this country. MAUtil::String countryName = country->getName(); if (countryName.length() == 0) { continue; } // Check if current country can go into current section. if (!section || countryName[0] != sectionTitle[0]) { // Create new section. sectionTitle[0] = countryName[0]; section = new NativeUI::ListViewSection( NativeUI::LIST_VIEW_SECTION_TYPE_ALPHABETICAL); section->setTitle(sectionTitle); section->setHeaderText(sectionTitle); mListView->addChild(section); } // Create and add list item for this country. NativeUI::ListViewItem* item = new NativeUI::ListViewItem(); item->setText(countryName); item->setFontColor(COLOR_WHITE); item->setSelectionStyle(NativeUI::LIST_VIEW_ITEM_SELECTION_STYLE_GRAY); item->setIcon(country->getFlagID()); section->addItem(item); mCountryMap.insert(item->getWidgetHandle(), country->getID()); } }
/** * Read a given country file. * Data will be added into mCountries. * @param countryFileName File name to read. */ void DatabaseManager::readCountryFile(MAUtil::String& countryFileName) { // Open and read file content. MAUtil::String filePath = mFileUtil->getLocalPath() + countryFileName; MAUtil::String fileContent; if (!mFileUtil->readTextFromFile(filePath, fileContent)) { printf("Cannot read text from %s", filePath.c_str()); return; } // Extract JSON values. MAUtil::YAJLDom::Value* root = MAUtil::YAJLDom::parse( (const unsigned char*)fileContent.c_str(), fileContent.size()); MAUtil::String name = root->getValueForKey(sCountryNameKey)->toString(); int flagID = root->getValueForKey(sCountryFlagIDKey)->toInt(); MAUtil::String population = root->getValueForKey(sCountryPopulationKey)->toString(); MAUtil::String area = root->getValueForKey(sCountryAreaKey)->toString(); MAUtil::String languages = root->getValueForKey(sCountryLanguagesKey)->toString(); MAUtil::String government = root->getValueForKey(sCountryGovernmentKey)->toString(); MAUtil::String capital = root->getValueForKey(sCountryCapitalKey)->toString(); // Create and fill Country object with read data. Country* country = new Country(); country->setName(name); country->setFlagID(flagID); country->setPopulation(population); country->setArea(area); country->setLanguages(languages); country->setGovernment(government); country->setCapital(capital); // Add object to map and array. mCountriesMap.insert(country->getID(), country); mCountriesArray.add(country); // Delete JSON root object. delete root; }