// Returns on of the widget's options. SelectOption* WidgetDropDown::GetOption(int index) { if (index < 0 || index >= GetNumOptions()) return NULL; return &options[index]; }
//gets an option name given its index into the list of options const char* CCommandLineParser::GetOptionName(uint32 nIndex) const { //make sure it is in range if(nIndex < GetNumOptions()) { //get the option's name return &m_pszCommandLine[m_Options[nIndex].m_nPos]; } //out of bounds return NULL; }
//finds an option given the name, and will return a pointer to it. Will //return NULL if no options match const CCommandLineParser::COption* CCommandLineParser::GetOption(const char* pszName) const { for(uint32 nCurrOpt = 0; nCurrOpt < GetNumOptions(); nCurrOpt++) { if(stricmp(&m_pszCommandLine[m_Options[nCurrOpt].m_nPos], pszName) == 0) { //match found return &(m_Options[nCurrOpt]); } } //no match found return NULL; }
// Builds the option list from the data source. void ElementFormControlDataSelect::BuildOptions() { widget->ClearOptions(); if (data_source == NULL) return; // Store the old selection value and index. These will be used to restore the selection to the // most appropriate option after the options have been rebuilt. Rocket::Core::String old_value = GetValue(); int old_selection = GetSelection(); Rocket::Core::String fields_attribute = GetAttribute<Rocket::Core::String>("fields", ""); Rocket::Core::String valuefield_attribute = GetAttribute<Rocket::Core::String>("valuefield", ""); Rocket::Core::String data_formatter_attribute = GetAttribute<Rocket::Core::String>("formatter", ""); DataFormatter* data_formatter = NULL; // Process the attributes. if (fields_attribute.Empty()) { Core::Log::Message(Rocket::Core::Log::LT_ERROR, "DataQuery failed, no fields specified for %s.", GetTagName().CString()); return; } if (valuefield_attribute.Empty()) { valuefield_attribute = fields_attribute.Substring(0, fields_attribute.Find(",")); } if (!data_formatter_attribute.Empty()) { data_formatter = DataFormatter::GetDataFormatter(data_formatter_attribute); if (!data_formatter) Core::Log::Message(Rocket::Core::Log::LT_WARNING, "Unable to find data formatter named '%s', formatting skipped.", data_formatter_attribute.CString()); } // Build a list of attributes Rocket::Core::String fields(valuefield_attribute); fields += ","; fields += fields_attribute; DataQuery query(data_source, data_table, fields); while (query.NextRow()) { Rocket::Core::StringList fields; Rocket::Core::String value = query.Get<Rocket::Core::String>(0, ""); for (size_t i = 1; i < query.GetNumFields(); ++i) fields.push_back(query.Get< Rocket::Core::String>(i, "")); Rocket::Core::String formatted(""); if (fields.size() > 0) formatted = fields[0]; if (data_formatter) data_formatter->FormatData(formatted, fields); // Add the data as an option. widget->AddOption(formatted, value, -1, false); } // If an option was selected before, attempt to restore the selection to it. if (old_selection > -1) { // Try to find a selection with the same value as the previous one. for (int i = 0; i < GetNumOptions(); ++i) { SelectOption* option = GetOption(i); if (option->GetValue() == old_value) { widget->SetSelection(i, true); return; } } // Failed to find an option with the same value. Attempt to at least set the same index. int new_selection = Rocket::Core::Math::Clamp(old_selection, 0, GetNumOptions() - 1); if (GetNumOptions() == 0) new_selection = -1; widget->SetSelection(new_selection, true); } }