summaryrefslogtreecommitdiff
path: root/client/Dialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'client/Dialog.cpp')
-rw-r--r--client/Dialog.cpp131
1 files changed, 111 insertions, 20 deletions
diff --git a/client/Dialog.cpp b/client/Dialog.cpp
index 3b477e1..7fe64c8 100644
--- a/client/Dialog.cpp
+++ b/client/Dialog.cpp
@@ -19,31 +19,27 @@ ProxyDialog::ProxyDialog(QWidget *parent): QDialog(parent)
Logger::Fatal("No valid configuration found! Can't proceed.");
return ;
}
- vector<string> countries = cfg->GetCountries();
- string country = "Ukraine";
- vector<string> states = cfg->GetStates(country);
- string state = "AR Krym";
- vector<string> cities = cfg->GetCities(country, state);
-
-
+
topLabel = new QLabel(tr("Top Panel"));
countryBox = new QComboBox;
+ stateBox = new QComboBox;
+ stateBox->setVisible(false);
+ cityBox = new QComboBox;
+ cityBox->setVisible(false);
+
+ vector<string> countries = cfg->GetCountries();
for (unsigned i = 0; i < countries.size(); i++)
{
countryBox->addItem(countries[i].c_str());
}
+ countryBox->setCurrentIndex(-1);
- stateBox = new QComboBox;
- for (unsigned i = 0; i < states.size(); i++)
- {
- stateBox->addItem(states[i].c_str());
- }
-
- cityBox = new QComboBox;
- for (unsigned i = 0; i < cities.size(); i++)
- {
- cityBox->addItem(cities[i].c_str());
- }
+ connect(countryBox, SIGNAL(activated(int)),
+ this, SLOT(CountryActivated(int)));
+ connect(stateBox, SIGNAL(activated(int)),
+ this, SLOT(StateActivated(int)));
+ connect(cityBox, SIGNAL(activated(int)),
+ this, SLOT(CityActivated(int)));
/* proxy buttons */
QPushButton *topProxy1 = new QPushButton("proxy 1");
@@ -55,7 +51,7 @@ ProxyDialog::ProxyDialog(QWidget *parent): QDialog(parent)
bottomLabel = new QLabel(tr("Bottom Panel"));
/* setup layouting */
- QVBoxLayout *comboBoxLayout = new QVBoxLayout;
+ comboBoxLayout = new QVBoxLayout;
comboBoxLayout->addWidget(countryBox);
comboBoxLayout->addWidget(stateBox);
comboBoxLayout->addWidget(cityBox);
@@ -79,4 +75,99 @@ ProxyDialog::ProxyDialog(QWidget *parent): QDialog(parent)
mainLayout->addLayout(bottomPanelLayout);
setLayout(mainLayout);
-} \ No newline at end of file
+}
+
+void ProxyDialog::CountryActivated(int index)
+{
+ Logger::Trace("Country activated. Activated index=%d\n", index);
+
+ stateBox->setVisible(false);
+ cityBox->setVisible(false);
+ if (index == -1)
+ {
+ return;
+ }
+
+ Config *cfg = Config::CurrentConfig();
+ vector<string> countries = cfg->GetCountries();
+ if (index > countries.size())
+ {
+ Logger::Error("Invalid country index: %d\n", index);
+ return;
+ }
+ Logger::Info("Country %s was selected\n", countries[index].c_str());
+
+ vector<string> states = cfg->GetStates(countries[index]);
+ if (states.empty())
+ {
+ Logger::Info("There are no states in %s\n", countries[index].c_str());
+ vector<string> cities = cfg->GetCities(countries[index]);
+ cityBox->clear();
+ for (unsigned i = 0; i < cities.size(); i++)
+ {
+ cityBox->addItem(cities[i].c_str());
+ }
+ cityBox->setCurrentIndex(-1);
+ cityBox->adjustSize();
+ cityBox->setVisible(true);
+ }
+ else
+ {
+ stateBox->clear();
+ for (unsigned i = 0; i < states.size(); i++)
+ {
+ stateBox->addItem(states[i].c_str());
+ }
+ stateBox->setCurrentIndex(-1);
+ stateBox->adjustSize();
+ stateBox->setVisible(true);
+ }
+}
+
+void ProxyDialog::StateActivated(int index)
+{
+ Logger::Trace("State activated. Activated index=%d\n", index);
+
+ cityBox->setVisible(false);
+ if (index == -1)
+ {
+ return;
+ }
+
+ int countryIndex = countryBox->currentIndex();
+ if (countryIndex == -1)
+ {
+ Logger::Error("Invalid country index selected: %d\n", countryIndex);
+ return;
+ }
+
+ Config *cfg = Config::CurrentConfig();
+ vector<string> countries = cfg->GetCountries();
+ if (countryIndex > countries.size())
+ {
+ Logger::Error("Invalid country index selected: %d\n", countryIndex);
+ return;
+ }
+
+ vector<string> states = cfg->GetStates(countries[countryIndex]);
+ if (index > states.size())
+ {
+ Logger::Error("Invalid state index: %d\n", index);
+ return;
+ }
+
+ vector<string> cities = cfg->GetCities(countries[countryIndex], states[index]);
+ cityBox->clear();
+ for (unsigned i = 0; i < cities.size(); i++)
+ {
+ cityBox->addItem(cities[i].c_str());
+ }
+ cityBox->setCurrentIndex(-1);
+ cityBox->adjustSize();
+ cityBox->setVisible(true);
+}
+
+void ProxyDialog::CityActivated(int index)
+{
+ Logger::Trace("City activated. Activated index=%d\n", index);
+}