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