Skip to content

Commit 2a14657

Browse files
fix some cities not visible.
1 parent f466a09 commit 2a14657

File tree

1 file changed

+131
-28
lines changed

1 file changed

+131
-28
lines changed

mainwindow.cpp

Lines changed: 131 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <QDateTime>
1313
#include <QDebug>
1414
#include <QBuffer>
15+
#include <QCompleter>
1516
#include <QFile>
1617
#include <QAudioOutput>
1718
#include <QSystemTrayIcon>
@@ -112,8 +113,12 @@ MainWindow::MainWindow(QWidget *parent)
112113
}
113114
ui->sFAc->setCurrentIndex(saved_settings.value("fajr_azan").toInt());
114115
ui->sNAc->setCurrentIndex(saved_settings.value("normal_azan").toInt());
115-
ui->sMadhabc->setCurrentIndex(saved_settings.value("madhab").toInt());
116116
ui->sCMc->setCurrentIndex(saved_settings.value("calc_method").toInt());
117+
ui->sMadhabc->setCurrentIndex(saved_settings.value("madhab").toInt());
118+
ui->sCc->setEditable(true);
119+
ui->sCc->setInsertPolicy(QComboBox::NoInsert);
120+
ui->sCc->completer()->setFilterMode(Qt::MatchContains);
121+
ui->sCc->completer()->setCompletionMode(QCompleter::PopupCompletion);
117122
if (saved_settings.contains("time_zone")) {
118123
ui->sTZd->setValue(saved_settings.value("time_zone").toDouble());
119124
} else {
@@ -305,10 +310,23 @@ void MainWindow::get_prayer() {
305310
longitude = 0.000000;
306311

307312
QString selected_country = "";
308-
selected_country = ui->sCc->currentText().split("/")[0];
309-
310313
QString selected_city = "";
311-
selected_city = ui->sCc->currentText().split("/")[1];
314+
QString selected_location = "";
315+
QString selected_state = "";
316+
QString selected_state_location = "";
317+
QString selected_state_city = "";
318+
319+
if (ui->sCc->currentText().split("|").size() == 2)
320+
{
321+
selected_country = ui->sCc->currentText().split("|")[0];
322+
selected_city = ui->sCc->currentText().split("|")[1];
323+
selected_location = ui->sCc->currentText().split("|")[1];
324+
} else if (ui->sCc->currentText().split("|").size() == 3) {
325+
selected_country = ui->sCc->currentText().split("|")[0];
326+
selected_state = ui->sCc->currentText().split("|")[1];
327+
selected_state_location = ui->sCc->currentText().split("|")[2];
328+
selected_state_city = ui->sCc->currentText().split("|")[2];
329+
}
312330

313331
QFile inFile(":/data/Locations");
314332
if (!inFile.open(QIODevice::ReadOnly | QIODevice::Text))
@@ -334,17 +352,72 @@ void MainWindow::get_prayer() {
334352
for (int i2 = 0; i2 < elements2.size(); i2++)
335353
{
336354
QDomElement country_name = elements2.at(i2).toElement().firstChildElement("name");
337-
QDomNodeList elements3 = elements2.at(i2).toElement().elementsByTagName("city");
338-
for (int i3 = 0; i3 < elements3.size(); i3++)
355+
if (ui->sCc->currentText().split("|").size() == 2)
339356
{
340-
QDomElement city_name = elements3.at(i3).toElement().firstChildElement("name");
341-
if (country_name.text() == selected_country) {
342-
if (city_name.text() == selected_city) {
343-
QDomElement coordinates_val = elements3.at(i3).toElement().firstChildElement("coordinates");
344-
latitude = stod(coordinates_val.text().split(" ")[0].toStdString());
345-
longitude = stod(coordinates_val.text().split(" ")[1].toStdString());
346-
ui->sLatituded->setValue(latitude);
347-
ui->sLongituded->setValue(longitude);
357+
QDomNodeList elements3 = elements2.at(i2).toElement().elementsByTagName("city");
358+
for (int i3 = 0; i3 < elements3.size(); i3++)
359+
{
360+
QDomElement city_name = elements3.at(i3).toElement().firstChildElement("name");
361+
if (country_name.text() == selected_country) {
362+
if (city_name.text() == selected_city) {
363+
QDomElement coordinates_val = elements3.at(i3).toElement().firstChildElement("coordinates");
364+
latitude = stod(coordinates_val.text().split(" ")[0].toStdString());
365+
longitude = stod(coordinates_val.text().split(" ")[1].toStdString());
366+
ui->sLatituded->setValue(latitude);
367+
ui->sLongituded->setValue(longitude);
368+
}
369+
}
370+
}
371+
QDomNodeList elements4 = elements2.at(i2).toElement().elementsByTagName("location");
372+
for (int i4 = 0; i4 < elements4.size(); i4++)
373+
{
374+
QDomElement location_name = elements4.at(i4).toElement().firstChildElement("name");
375+
if (country_name.text() == selected_country) {
376+
if (location_name.text() == selected_location) {
377+
QDomElement coordinates_val = elements4.at(i4).toElement().firstChildElement("coordinates");
378+
latitude = stod(coordinates_val.text().split(" ")[0].toStdString());
379+
longitude = stod(coordinates_val.text().split(" ")[1].toStdString());
380+
ui->sLatituded->setValue(latitude);
381+
ui->sLongituded->setValue(longitude);
382+
}
383+
}
384+
}
385+
} else if (ui->sCc->currentText().split("|").size() == 3) {
386+
QDomNodeList elements5 = elements2.at(i2).toElement().elementsByTagName("state");
387+
for (int i5 = 0; i5 < elements5.size(); i5++)
388+
{
389+
QDomElement state_name = elements5.at(i5).toElement().firstChildElement("name");
390+
QDomNodeList elements6 = elements5.at(i5).toElement().elementsByTagName("location");
391+
for (int i6 = 0; i6 < elements6.size(); i6++)
392+
{
393+
QDomElement state_location_name = elements6.at(i6).toElement().firstChildElement("name");
394+
if (country_name.text() == selected_country) {
395+
if (state_name.text() == selected_state) {
396+
if (state_location_name.text() == selected_state_location) {
397+
QDomElement coordinates_val = elements6.at(i6).toElement().firstChildElement("coordinates");
398+
latitude = stod(coordinates_val.text().split(" ")[0].toStdString());
399+
longitude = stod(coordinates_val.text().split(" ")[1].toStdString());
400+
ui->sLatituded->setValue(latitude);
401+
ui->sLongituded->setValue(longitude);
402+
}
403+
}
404+
}
405+
}
406+
QDomNodeList elements7 = elements5.at(i5).toElement().elementsByTagName("city");
407+
for (int i7 = 0; i7 < elements7.size(); i7++)
408+
{
409+
QDomElement state_city_name = elements7.at(i7).toElement().firstChildElement("name");
410+
if (country_name.text() == selected_country) {
411+
if (state_name.text() == selected_state) {
412+
if (state_city_name.text() == selected_state_city) {
413+
QDomElement coordinates_val = elements7.at(i7).toElement().firstChildElement("coordinates");
414+
latitude = stod(coordinates_val.text().split(" ")[0].toStdString());
415+
longitude = stod(coordinates_val.text().split(" ")[1].toStdString());
416+
ui->sLatituded->setValue(latitude);
417+
ui->sLongituded->setValue(longitude);
418+
}
419+
}
420+
}
348421
}
349422
}
350423
}
@@ -478,7 +551,11 @@ void MainWindow::get_hours_and_minutes() {
478551
asr_tr->setText(ui->hAsrL->text() + ":- " + ui->hAsrT->text());
479552
maghrib_tr->setText(" "+ui->hMaghribL->text() + ":- " + ui->hMaghribT->text());
480553
isha_tr->setText(ui->hIshaL->text() + ":- " + ui->hIshaT->text());
481-
location_tr->setText(JsonDoc.object().value("sLocation").toString()+": "+ ui->sCc->currentText().split("/")[1]);
554+
if (ui->sCc->currentText().split("|").size() == 2) {
555+
location_tr->setText(JsonDoc.object().value("sLocation").toString()+": "+ ui->sCc->currentText().split("|")[1]);
556+
} else if (ui->sCc->currentText().split("|").size() == 3) {
557+
location_tr->setText(JsonDoc.object().value("sLocation").toString()+": "+ ui->sCc->currentText().split("|")[2]);
558+
}
482559
home_tr->setText(ui->cDate->text());
483560
tray->setToolTip(time_left_tray->text());
484561
// highlight next prayer
@@ -555,24 +632,50 @@ void MainWindow::get_locations() {
555632
qDebug( "Failed to parse the file into a DOM tree." );
556633
inFile.close();
557634
}
558-
559635
inFile.close();
560-
QDomElement documentElement = document.documentElement();
561-
QDomNodeList elements = documentElement.elementsByTagName("region");
562636

563-
for (int i = 0; i < elements.size()+1; i++)
637+
QDomElement documentElement = document.documentElement();
638+
QDomNodeList region_elements = documentElement.elementsByTagName("region");
639+
for (int i = 0; i < region_elements.size()+1; i++)
564640
{
565-
if (i < elements.size()) {
566-
QDomElement region_name = elements.at(i).toElement().firstChildElement("name");
567-
QDomNodeList elements2 = elements.at(i).toElement().elementsByTagName("country");
568-
for (int i2 = 0; i2 < elements2.size(); i2++)
641+
if (i < region_elements.size()) {
642+
QDomElement region_name = region_elements.at(i).toElement().firstChildElement("name");
643+
QDomNodeList country_elements = region_elements.at(i).toElement().elementsByTagName("country");
644+
for (int i2 = 0; i2 < country_elements.size()+1; i2++)
569645
{
570-
QDomElement country_name = elements2.at(i2).toElement().firstChildElement("name");
571-
QDomNodeList elements3 = elements2.at(i2).toElement().elementsByTagName("city");
572-
for (int i3 = 0; i3 < elements3.size(); i3++)
646+
QDomElement country_name = country_elements.at(i2).toElement().firstChildElement("name");
647+
QDomNodeList location_elements = country_elements.at(i2).toElement().elementsByTagName("location");
648+
for (int i3 = 0; i3 < location_elements.size(); i3++)
573649
{
574-
QDomElement city_name = elements3.at(i3).toElement().firstChildElement("name");
575-
ui->sCc->addItem(country_name.text()+"/"+city_name.text());
650+
QDomElement location_name = location_elements.at(i3).toElement().firstChildElement("name");
651+
if (location_elements.at(i3).parentNode().toElement().tagName() == "country") {
652+
ui->sCc->addItem(country_name.text()+"|"+location_name.text());
653+
}
654+
}
655+
QDomNodeList city_elements = country_elements.at(i2).toElement().elementsByTagName("city");
656+
for (int i4 = 0; i4 < city_elements.size(); i4++)
657+
{
658+
QDomElement city_name = city_elements.at(i4).toElement().firstChildElement("name");
659+
if (city_elements.at(i4).parentNode().toElement().tagName() == "country") {
660+
ui->sCc->addItem(country_name.text()+"|"+city_name.text());
661+
}
662+
}
663+
QDomNodeList state_elements = country_elements.at(i2).toElement().elementsByTagName("state");
664+
for (int i5 = 0; i5 < state_elements.size(); i5++)
665+
{
666+
QDomElement state_name = state_elements.at(i5).toElement().firstChildElement("name");
667+
QDomNodeList state_location_elements = state_elements.at(i5).toElement().elementsByTagName("location");
668+
for (int i6 = 0; i6 < state_location_elements.size(); i6++)
669+
{
670+
QDomElement state_location_name = state_location_elements.at(i6).toElement().firstChildElement("name");
671+
ui->sCc->addItem(country_name.text()+"|"+state_name.text()+"|"+state_location_name.text());
672+
}
673+
QDomNodeList state_city_elements = state_elements.at(i5).toElement().elementsByTagName("city");
674+
for (int i7 = 0; i7 < state_city_elements.size(); i7++)
675+
{
676+
QDomElement state_city_name = state_city_elements.at(i7).toElement().firstChildElement("name");
677+
ui->sCc->addItem(country_name.text()+"|"+state_name.text()+"|"+state_city_name.text());
678+
}
576679
}
577680
}
578681
} else {

0 commit comments

Comments
 (0)