harbour-allradio/qml/models/CountryListModel.qml
2025-05-28 20:47:14 +02:00

70 lines
2.5 KiB
QML

import QtQuick 2.0
import QtQuick.XmlListModel 2.0
Item {
property bool running: true
property string filter: ""
property alias countryModel: countryModel
property alias source: xmlModel.source
function addtomodel(){
countryModel.clear()
var cname
var filt
for(var i = 0; i < xmlModel.count; i++) {
cname = getCountryName(xmlModel.get(i).name)
//if (cname) filt = cname.toLowerCase()
if (cname) {filt = cname.toLowerCase(); if (filt.indexOf(filter) !== -1) countryModel.append({"name" : cname, "alpha_2" : xmlModel.get(i).name,"stationcount" : xmlModel.get(i).stationcount})}
//console.log(cname)
}
countryModel.listModelSort(countryModel, compareElements)
//numberOfCountries = i
countryCount = countryModel.count
// console.log("COUNTRIESMODEL DONE: "+countryModel.count)
running = false
}
function compareElements(elem1, elem2) {
return elem1.name.localeCompare(elem2.name)
}
ListModel {
id: countryModel
function listModelSort(listModel, compareFunc) {
var indexes = new Array(listModel.count);
for (var i = 0; i < listModel.count; i++) indexes[i] = i;
indexes.sort(function (indexA, indexB) { return compareFunc(get(indexA), get(indexB)) } );
var sorted = 0;
while (sorted < indexes.length && sorted === indexes[sorted]) sorted++;
if (sorted === indexes.length) return;
for (i = sorted; i < indexes.length; i++) {
var idx = indexes[i];
listModel.move(idx, listModel.count - 1, 1);
listModel.insert(idx, { } );
}
listModel.remove(sorted, indexes.length - sorted);
}
}
XmlListModel {
id: xmlModel
query: "/result/countrycode"
//source: radioServers.serverUrl + type + "/countrycodes?hidebroken=true"
XmlRole { name: "name"; query: "@name/string()" }
XmlRole { name: "stationcount"; query: "@stationcount/string()" }
onStatusChanged: {
//if (status === XmlListModel.Loading) loadingInfo = "Preloading countries"
if (status === XmlListModel.Ready) {
addtomodel()
running = false
}
//if (status === XmlListModel.Loading) running = true;
}
}
onFilterChanged: addtomodel()
}