From 894b5d02a04d01ce486786d272c0328377b6ea38 Mon Sep 17 00:00:00 2001 From: Alex Borisov Date: Wed, 26 Oct 2011 19:11:40 +0300 Subject: Checkboxes are working now --- client/Dialog.cpp | 131 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 111 insertions(+), 20 deletions(-) (limited to 'client/Dialog.cpp') 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 countries = cfg->GetCountries(); - string country = "Ukraine"; - vector states = cfg->GetStates(country); - string state = "AR Krym"; - vector 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 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 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 states = cfg->GetStates(countries[index]); + if (states.empty()) + { + Logger::Info("There are no states in %s\n", countries[index].c_str()); + vector 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 countries = cfg->GetCountries(); + if (countryIndex > countries.size()) + { + Logger::Error("Invalid country index selected: %d\n", countryIndex); + return; + } + + vector states = cfg->GetStates(countries[countryIndex]); + if (index > states.size()) + { + Logger::Error("Invalid state index: %d\n", index); + return; + } + + vector 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); +} -- cgit v1.2.3