diff --git a/ddmApplication.cpp b/ddmApplication.cpp index 616ea55..eefe55d 100644 --- a/ddmApplication.cpp +++ b/ddmApplication.cpp @@ -6,12 +6,13 @@ #include "ddmApplication.h" #include "filters/ddmEmptyFilter.h" -#include "filters/ddmCountyFilter.h" +#include "filters/ddmCountyInfoFilter.h" #include "filters/ddmMinMaxFrictionFilter.h" #include "filters/ddmPosNegDeltaFilter.h" #include "filters/ddmFrictionDeltaFilter.h" #include "filters/ddmFrictionPopulationFilter.h" #include "filters/ddmDeltaPopulationFilter.h" +#include "filters/ddmNeighborCountyFilter.h" /** * @Конструктор класса @@ -51,13 +52,16 @@ ddmApplication::ddmApplication( int& argc, char** argv ) : QApplication( argc, a this->mainWindow()->setCentralWidget( centralWidget ); // Фильтры - centralWidget->appendFilter( "<выберите фильтр>", new ddmEmptyFilter( this ) ); - centralWidget->appendFilter( "Информация о графстве", new ddmCountyFilter( this ) ); - centralWidget->appendFilter( "Диапазон трений", new ddmMinMaxFrictionFilter( this ) ); - centralWidget->appendFilter( "Центры миграции", new ddmPosNegDeltaFilter( this ) ); + + centralWidget->appendFilter( "<выберите фильтр>", new ddmEmptyFilter( this ) ); + centralWidget->appendFilter( "Информация о графстве", new ddmCountyInfoFilter( this ) ); + centralWidget->appendFilter( "Диапазон трений", new ddmMinMaxFrictionFilter( this ) ); + centralWidget->appendFilter( "Центры миграции", new ddmPosNegDeltaFilter( this ) ); centralWidget->appendFilter( "Диапазон трений по центрам миграции", new ddmFrictionDeltaFilter( this ) ); - centralWidget->appendFilter( "Диапазон трений и населения", new ddmFrictionPopulationFilter( this ) ); - centralWidget->appendFilter( "Процент дельты от населения", new ddmDeltaPopulationFilter( this ) ); + centralWidget->appendFilter( "Диапазон трений и населения", new ddmFrictionPopulationFilter( this ) ); + centralWidget->appendFilter( "Процент дельты от населения", new ddmDeltaPopulationFilter( this ) ); + centralWidget->appendFilter( "Соседи 1-го порядка", new ddmNeighborCountyFilter( this ) ); + //centralWidget->setCurrentFilter( 0 ); ddmSettings* settings = ddmSettings::instance(); diff --git a/ddmSystem.pro b/ddmSystem.pro index d23dc32..5f9f4d4 100644 --- a/ddmSystem.pro +++ b/ddmSystem.pro @@ -23,11 +23,8 @@ SOURCES += main.cpp \ models/ddmModel.cpp \ models/ddmStateModel.cpp \ models/ddmFilterModel.cpp \ - models/ddmCountyFilterModel.cpp \ filters/ddmFilter.cpp \ - filters/ddmCountyFilter.cpp \ widgets/ddmFilterWidget.cpp \ - widgets/ddmCountyFilterWidget.cpp \ widgets/ddmCentralWidget.cpp \ ddmMapView.cpp \ ddmMapViewPage.cpp \ @@ -54,7 +51,17 @@ SOURCES += main.cpp \ ddmSettings.cpp \ widgets/ddmDeltaPopulationFilterWidget.cpp \ models/ddmDeltaPopulationFilterModel.cpp \ - filters/ddmDeltaPopulationFilter.cpp + filters/ddmDeltaPopulationFilter.cpp \ + models/ddmNeighborCountyFilterModel.cpp \ + widgets/ddmNeighborCountyFilterWidget.cpp \ + filters/ddmNeighborCountyFilter.cpp \ + widgets/ddmBaseCountyFilterWidget.cpp \ + filters/ddmBaseCountyFilter.cpp \ + models/ddmBaseCountyFilterModel.cpp \ + models/ddmCountyInfoFilterModel.cpp \ + widgets/ddmCountyInfoFilterWidget.cpp \ + widgets/panels/ddmCountyInfoFilterWidgetPanel.cpp \ + filters/ddmCountyInfoFilter.cpp HEADERS += \ ddmVersion.h \ @@ -66,11 +73,8 @@ HEADERS += \ models/ddmModel.h \ models/ddmStateModel.h \ models/ddmFilterModel.h \ - models/ddmCountyFilterModel.h \ filters/ddmFilter.h \ - filters/ddmCountyFilter.h \ widgets/ddmFilterWidget.h \ - widgets/ddmCountyFilterWidget.h \ widgets/ddmCentralWidget.h \ ddmMapView.h \ ddmMapViewPage.h \ @@ -98,17 +102,30 @@ HEADERS += \ ddmSettings.h \ widgets/ddmDeltaPopulationFilterWidget.h \ models/ddmDeltaPopulationFilterModel.h \ - filters/ddmDeltaPopulationFilter.h + filters/ddmDeltaPopulationFilter.h \ + models/ddmNeighborCountyFilterModel.h \ + widgets/ddmNeighborCountyFilterWidget.h \ + filters/ddmNeighborCountyFilter.h \ + widgets/ddmBaseCountyFilterWidget.h \ + filters/ddmBaseCountyFilter.h \ + models/ddmBaseCountyFilterModel.h \ + models/ddmCountyInfoFilterModel.h \ + widgets/ddmCountyInfoFilterWidget.h \ + widgets/panels/ddmCountyInfoFilterWidgetPanel.h \ + filters/ddmCountyInfoFilter.h FORMS += ddmMainWindow.ui \ - widgets/ddmCountyFilterWidget.ui \ widgets/ddmCentralWidget.ui \ widgets/ddmEmptyFilterWidget.ui \ widgets/ddmMinMaxFrictionFilterWidget.ui \ widgets/ddmPosNegDeltaFilterWidget.ui \ widgets/ddmFrictionDeltaFilterWidget.ui \ widgets/ddmFrictionPopulationFilterWidget.ui \ - widgets/ddmDeltaPopulationFilterWidget.ui + widgets/ddmDeltaPopulationFilterWidget.ui \ + widgets/ddmNeighborCountyFilterWidget.ui \ + widgets/ddmBaseCountyFilterWidget.ui \ + widgets/ddmCountyInfoFilterWidgetPanel.ui \ + widgets/panels/ddmCountyInfoFilterWidgetPanel.ui Debug:DESTDIR = debug Release:DESTDIR = release diff --git a/ddmVersion.h b/ddmVersion.h index bcd53bd..35726db 100644 --- a/ddmVersion.h +++ b/ddmVersion.h @@ -2,7 +2,7 @@ #define DDM_VERSION_H #define DDM_MAJOR_VERSION 2 -#define DDM_MINOR_VERSION 7 -#define DDM_BUILD_NUMBER 342 +#define DDM_MINOR_VERSION 8 +#define DDM_BUILD_NUMBER 375 #endif // DDM_VERSION_H diff --git a/filters/ddmBaseCountyFilter.cpp b/filters/ddmBaseCountyFilter.cpp new file mode 100644 index 0000000..79139fa --- /dev/null +++ b/filters/ddmBaseCountyFilter.cpp @@ -0,0 +1,194 @@ +#include "filters/ddmBaseCountyFilter.h" +#include "models/ddmBaseCountyFilterModel.h" +#include "ddmMapView.h" +#include "ddmSettings.h" +#include "widgets/ddmBaseCountyFilterWidget.h" + +/** + * Конструктор класса + * + * @param parent Родитель (владелец) + * @author Марунин А.В. + * @since 2.8 + */ +ddmBaseCountyFilter::ddmBaseCountyFilter( QObject* parent ) : ddmFilter( parent ) +{ +} + +/** + * Создает фильтр + * + * Создает модель фильтра и виджет, настраивает сигнал-слоты + * + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilter::setup() +{ + // Модель и виджет должны быть созданы в дочернем setup() + Q_ASSERT( this->model() != NULL ); + Q_ASSERT( this->widget() != NULL ); + + // Загружаем предыдущие значения + this->loadSettings(); + + ddmBaseCountyFilterModel* model = this->model_cast(); + ddmBaseCountyFilterWidget* widget = this->widget_cast(); + + widget->setStateNames( model->stateNames() ); + widget->setCurrentState( model->currentState()->geographicName() ); + widget->setCountyNames( model->currentState()->countyNames() ); + widget->setCurrentCounty( model->currentCounty()->geographicName() ); + + QObject::connect( widget, SIGNAL( changedState() ), this, SLOT( slotWidgetChangedState() ) ); + QObject::connect( widget, SIGNAL( changedCounty() ), this, SLOT( slotWidgetChangedCounty() ) ); + + ddmFilter::setup(); + +} + +/** + * Синхронизирует данные между моделью и виджетом + * + * @param fromWidget Флаг, указывающий направление синхронизации: + * true - обновить данные модели из значений элементов управления виджета + * false - обновить элементы управления на виджете по данным модели + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilter::updateData( bool fromWidget ) +{ + if ( this->valid() ) + { + ddmBaseCountyFilterModel* model = this->model_cast(); + ddmBaseCountyFilterWidget* widget = this->widget_cast(); + if ( fromWidget ) + { + if ( model->currentState() && model->currentState()->geographicName() != widget->currentState() ) + { + model->setCurrentState( widget->currentState() ); + } + else if ( model->currentCounty() && model->currentCounty()->geographicName() != widget->currentCounty() ) + { + model->setCurrentCounty( widget->currentCounty() ); + } + } + else + { + if ( model->currentState() ) + { + widget->setCurrentState( model->currentState()->geographicName() ); + } + if ( model->currentCounty() ) + { + widget->setCurrentCounty( model->currentCounty()->geographicName() ); + } + } + } +} + +/** + * Обработчик события изменения текущего элемента в выпадающем списке штатов + * + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilter::slotWidgetChangedState() +{ + ddmBaseCountyFilterWidget* widget = this->widget_cast(); + QString stateName = widget->currentState(); + if ( !stateName.isEmpty() ) + { + this->updateData(); + ddmBaseCountyFilterModel* model = qobject_cast( this->model() ); + QStringList countyNames = model->currentState()->countyNames(); + widget->setCountyNames( countyNames ); + } +} + +/** + * Обработчик события изменения текущего элемента в выпадающем списке графств + * + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilter::slotWidgetChangedCounty() +{ + ddmBaseCountyFilterWidget* widget = this->widget_cast(); + QString countyName = widget->currentCounty(); + if ( !countyName.isEmpty() ) + { + ddmBaseCountyFilterModel* model = this->model_cast(); + model->setCurrentCounty( countyName ); + this->apply(); + + this->fitSelection(); + + this->saveSettings(); + } +} + +/** + * Центрирует текущее выделение + * + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilter::fitSelection() +{ + this->mapView()->fitSelection(); +} + +/** + * Обработчик, вызываемый после обновления карты + * + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilter::slotMapLoaded() +{ + this->updateData(); + this->fitSelection(); +} + +/** + * Загружает настройки фильтра + * + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilter::loadSettings() +{ + ddmSettings* settings = ddmSettings::instance(); + + int lastCounty = settings->value( QString( this->metaObject()->className() ) + "/county", 0 ).toInt(); + if ( lastCounty > 0 ) + { + ddmBaseCountyFilterModel* model = this->model_cast(); + model->setCurrentCounty( lastCounty ); + } +} + +/** + * Сохраняет настройки фильтра + * + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilter::saveSettings() +{ + ddmSettings* settings = ddmSettings::instance(); + + ddmBaseCountyFilterModel* model = this->model_cast(); + settings->setValue( QString( this->metaObject()->className() ) + "/county", model->currentCounty()->id() ); +} + +/** + * Деструктор класса + * + * @author Марунин А.В. + * @since 2.8 + */ +ddmBaseCountyFilter::~ddmBaseCountyFilter() +{ +} diff --git a/filters/ddmBaseCountyFilter.h b/filters/ddmBaseCountyFilter.h new file mode 100644 index 0000000..241ec9d --- /dev/null +++ b/filters/ddmBaseCountyFilter.h @@ -0,0 +1,45 @@ +#ifndef DDM_BASE_COUNTY_FILTER_H +#define DDM_BASE_COUNTY_FILTER_H + +#include +#include "filters/ddmFilter.h" + +class ddmState; +class ddmCounty; + +/** + * Класс ddmBaseCountyFilter описывает базовый фильтр + * при работе с конкретным графством + * + * @author Марунин А.В. + * @since 2.8 + */ +class ddmBaseCountyFilter : public ddmFilter +{ + Q_OBJECT + +public: + + ddmBaseCountyFilter( QObject* parent = 0 ); + + virtual ~ddmBaseCountyFilter(); + +protected Q_SLOTS: + + virtual void slotWidgetChangedState(); + virtual void slotWidgetChangedCounty(); + virtual void slotMapLoaded(); + +protected: + + virtual void setup(); + virtual void updateData( bool fromWidget = true ); + + void fitSelection(); + + virtual void loadSettings(); + virtual void saveSettings(); + +}; + +#endif // DDM_BASE_COUNTY_FILTER_H diff --git a/filters/ddmCountyFilter.cpp b/filters/ddmCountyFilter.cpp deleted file mode 100644 index 96e1c0a..0000000 --- a/filters/ddmCountyFilter.cpp +++ /dev/null @@ -1,257 +0,0 @@ -#include "filters/ddmCountyFilter.h" -#include "models/ddmCountyFilterModel.h" -#include "ddmMapView.h" -#include "ddmSettings.h" -#include "widgets/ddmCountyFilterWidget.h" - -/** - * Конструктор класса - * - * @param parent Родитель (владелец) - * @author Марунин А.В. - * @since 2.1 - */ -ddmCountyFilter::ddmCountyFilter( QObject* parent ) : ddmFilter( parent ) -{ -} - -/** - * Создает фильтр - * - * Создает модель фильтра и виджет, настраивает сигнал-слоты - * - * @author Марунин А.В. - * @since 2.1 - */ -void ddmCountyFilter::setup() -{ - - ddmCountyFilterModel* model = new ddmCountyFilterModel( this ); - ddmCountyFilterWidget* widget = new ddmCountyFilterWidget( this ); - - this->m_model = model; - this->m_widget = widget; - - // Загружаем предыдущие значения - this->loadSettings(); - - widget->setStateNames( model->stateNames() ); - widget->setCurrentState( model->currentState()->geographicName() ); - widget->setCountyNames( model->currentState()->countyNames() ); - widget->setCurrentCounty( model->currentCounty()->geographicName() ); - - QObject::connect( widget, SIGNAL( changedState() ), this, SLOT( slotWidgetChangedState() ) ); - QObject::connect( widget, SIGNAL( changedCounty() ), this, SLOT( slotWidgetChangedCounty() ) ); - - // Обязательно вызываем метод из базового класса! - ddmFilter::setup(); - - this->updateInfo(); - -} - -/** - * Синхронизирует данные между моделью и виджетом - * - * @param fromWidget Флаг, указывающий направление синхронизации: - * true - обновить данные модели из значений элементов управления виджета - * false - обновить элементы управления на виджете по данным модели - * @author Марунин А.В. - * @since 2.1 - */ -void ddmCountyFilter::updateData( bool fromWidget ) -{ - if ( this->valid() ) - { - ddmCountyFilterModel* model = this->model_cast(); - ddmCountyFilterWidget* widget = this->widget_cast(); - if ( fromWidget ) - { - if ( model->currentState() && model->currentState()->geographicName() != widget->currentState() ) - { - model->setCurrentState( widget->currentState() ); - } - else if ( model->currentCounty() && model->currentCounty()->geographicName() != widget->currentCounty() ) - { - model->setCurrentCounty( widget->currentCounty() ); - } - } - else - { - if ( model->currentState() ) - { - widget->setCurrentState( model->currentState()->geographicName() ); - } - if ( model->currentCounty() ) - { - widget->setCurrentCounty( model->currentCounty()->geographicName() ); - } - } - } -} - -void ddmCountyFilter::updateSelection() -{ - ddmCountyFilterModel* model = this->model_cast(); - this->resetSelection(); - model->currentCounty()->show(); - Q_EMIT selectionUpdated(); -} - -void ddmCountyFilter::slotWidgetChangedState() -{ - ddmCountyFilterWidget* widget = this->widget_cast(); - QString stateName = widget->currentState(); - if ( !stateName.isEmpty() ) - { - this->updateData(); - ddmCountyFilterModel* model = qobject_cast( this->model() ); - QStringList countyNames = model->currentState()->countyNames(); - widget->setCountyNames( countyNames ); - } -} - -void ddmCountyFilter::slotWidgetChangedCounty() -{ - ddmCountyFilterWidget* widget = this->widget_cast(); - QString countyName = widget->currentCounty(); - if ( !countyName.isEmpty() ) - { - ddmCountyFilterModel* model = this->model_cast(); - model->setCurrentCounty( countyName ); - this->apply(); - - this->updateInfo(); - - this->fitCounty(); - - this->saveSettings(); - } -} - -/** - * Обновляет на виджете информацию о текущем графстве - * - * @author Марунин А.В. - * @since 2.6 - */ -void ddmCountyFilter::updateInfo() -{ - ddmCountyFilterModel* model = this->model_cast(); - ddmCounty* county = model->currentCounty(); - QString countyInfoHTML; - if ( county ) - { - countyInfoHTML = QString( - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "
Название: %1
Штат: %2
Население: %3 чел.
Приехавших: %4 чел.
Уехавших: %5 чел.
Дельта: %6 чел.
Трение приехав.: %7
Трение уехав.: %8
Трение средн.: %9
" - ) - .arg( county->geographicName() ) - .arg( county->state()->geographicName() ) - .arg( county->population() ) - .arg( county->in_sum() ) - .arg( county->out_sum() ) - .arg( county->delta() ) - .arg( county->f_in_mid() ) - .arg( county->f_out_mid() ) - .arg( county->f_mid() ); - } - - ddmCountyFilterWidget* widget = this->widget_cast(); - widget->setCountyInfo( countyInfoHTML ); -} - -void ddmCountyFilter::fitCounty() -{ - ddmCountyFilterModel* model = this->model_cast(); - if ( model->currentCounty() ) - { - QVariantMap center = model->currentCounty()->center(); - this->setMapCenter( center ); - - this->mapView()->setMarker( center ); - this->mapView()->fitCounty( model->currentCounty()->id() ); - } -} - -void ddmCountyFilter::slotMapLoaded() -{ - this->updateData(); - - this->fitCounty(); -} - -/** - * Загружает настройки фильтра - * - * @author Марунин А.В. - * @since 2.6 - */ -void ddmCountyFilter::loadSettings() -{ - ddmSettings* settings = ddmSettings::instance(); - - int lastCounty = settings->value( "ddmCountyFilter/county", 0 ).toInt(); - if ( lastCounty > 0 ) - { - ddmCountyFilterModel* model = this->model_cast(); - model->setCurrentCounty( lastCounty ); - } -} - -/** - * Сохраняет настройки фильтра - * - * @author Марунин А.В. - * @since 2.6 - */ -void ddmCountyFilter::saveSettings() -{ - ddmSettings* settings = ddmSettings::instance(); - - ddmCountyFilterModel* model = this->model_cast(); - settings->setValue( "ddmCountyFilter/county", model->currentCounty()->id() ); -} - -/** - * @brief ddmCountyFilter::~ddmCountyFilter - */ -ddmCountyFilter::~ddmCountyFilter() -{ -} diff --git a/filters/ddmCountyFilter.h b/filters/ddmCountyFilter.h deleted file mode 100644 index 53d8043..0000000 --- a/filters/ddmCountyFilter.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef DDM_COUNTY_FILTER_H -#define DDM_COUNTY_FILTER_H - -#include -#include "filters/ddmFilter.h" - -class ddmState; -class ddmCounty; - -/** - * Класс ddmCountyFilter описывает фильтр для отображения одного графства - * - * @author Марунин А.В. - * @since 2.1 - */ -class ddmCountyFilter : public ddmFilter -{ - Q_OBJECT - -public: - - ddmCountyFilter( QObject* parent = 0 ); - - virtual ~ddmCountyFilter(); - -protected Q_SLOTS: - - void slotWidgetChangedState(); - void slotWidgetChangedCounty(); - virtual void slotMapLoaded(); - -protected: - - virtual void setup(); - virtual void updateData( bool fromWidget = true ); - virtual void updateSelection(); - - void updateInfo(); - void fitCounty(); - - virtual void loadSettings(); - virtual void saveSettings(); - -}; - -#endif // DDM_COUNTY_FILTER_H diff --git a/filters/ddmCountyInfoFilter.cpp b/filters/ddmCountyInfoFilter.cpp new file mode 100644 index 0000000..d80cc13 --- /dev/null +++ b/filters/ddmCountyInfoFilter.cpp @@ -0,0 +1,146 @@ +#include "ddmMapView.h" +#include "ddmSettings.h" + +#include "models/ddmCountyInfoFilterModel.h" +#include "widgets/ddmCountyInfoFilterWidget.h" +#include "filters/ddmCountyInfoFilter.h" + +/** + * Конструктор класса + * + * @param parent Родитель (владелец) + * @author Марунин А.В. + * @since 2.8 + */ +ddmCountyInfoFilter::ddmCountyInfoFilter( QObject* parent ) : ddmBaseCountyFilter( parent ) +{ +} + +/** + * Создает фильтр + * + * Создает модель фильтра и виджет, настраивает сигнал-слоты + * + * @author Марунин А.В. + * @since 2.8 + */ +void ddmCountyInfoFilter::setup() +{ + + ddmCountyInfoFilterModel* model = new ddmCountyInfoFilterModel( this ); + ddmCountyInfoFilterWidget* widget = new ddmCountyInfoFilterWidget( this ); + + this->m_model = model; + this->m_widget = widget; + + // Обязательно вызываем метод из базового класса! + ddmBaseCountyFilter::setup(); + + this->updateInfo(); + +} + +/** + * Обновляет список выделенных (отображаемых) графств + * + * @author Марунин А.В. + * @since 2.8 + */ +void ddmCountyInfoFilter::updateSelection() +{ + ddmCountyInfoFilterModel* model = this->model_cast(); + this->resetSelection(); + model->currentCounty()->show(); + Q_EMIT selectionUpdated(); +} + +/** + * Обработчик события изменения текущего элемента в выпадающем списке графств + * + * @author Марунин А.В. + * @since 2.8 + */ +void ddmCountyInfoFilter::slotWidgetChangedCounty() +{ + ddmBaseCountyFilter::slotWidgetChangedCounty(); + + this->updateInfo(); +} + +/** + * Обновляет на виджете информацию о текущем графстве + * + * @author Марунин А.В. + * @since 2.8 + */ +void ddmCountyInfoFilter::updateInfo() +{ + ddmCountyInfoFilterModel* model = this->model_cast(); + ddmCounty* county = model->currentCounty(); + QString countyInfoHTML; + if ( county ) + { + countyInfoHTML = QString( + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "
Название: %1
Штат: %2
Население: %3 чел.
Приехавших: %4 чел.
Уехавших: %5 чел.
Дельта: %6 чел.
Трение приехав.: %7
Трение уехав.: %8
Трение средн.: %9
" + ) + .arg( county->geographicName() ) + .arg( county->state()->geographicName() ) + .arg( county->population() ) + .arg( county->in_sum() ) + .arg( county->out_sum() ) + .arg( county->delta() ) + .arg( county->f_in_mid() ) + .arg( county->f_out_mid() ) + .arg( county->f_mid() ); + } + + ddmCountyInfoFilterWidget* widget = this->widget_cast(); + widget->setInfo( countyInfoHTML ); +} + +/** + * Деструктор класса + * + * @author Марунин А.В. + * @since 2.8 + */ +ddmCountyInfoFilter::~ddmCountyInfoFilter() +{ +} diff --git a/filters/ddmCountyInfoFilter.h b/filters/ddmCountyInfoFilter.h new file mode 100644 index 0000000..8f422a9 --- /dev/null +++ b/filters/ddmCountyInfoFilter.h @@ -0,0 +1,40 @@ +#ifndef DDM_COUNTY_FILTER_H +#define DDM_COUNTY_FILTER_H + +#include +#include "filters/ddmBaseCountyFilter.h" + +class ddmState; +class ddmCounty; + +/** + * Класс ddmCountyInfoFilter описывает фильтр для отображения информации выбранного графства + * + * @author Марунин А.В. + * @since 2.1 + */ +class ddmCountyInfoFilter : public ddmBaseCountyFilter +{ + Q_OBJECT + +public: + + ddmCountyInfoFilter( QObject* parent = 0 ); + + virtual ~ddmCountyInfoFilter(); + +protected Q_SLOTS: + + virtual void slotWidgetChangedCounty(); + +protected: + + virtual void setup(); + virtual void updateSelection(); + + void updateInfo(); + + +}; + +#endif // DDM_COUNTY_FILTER_H diff --git a/filters/ddmFilter.cpp b/filters/ddmFilter.cpp index a3a0306..ef6cc2a 100644 --- a/filters/ddmFilter.cpp +++ b/filters/ddmFilter.cpp @@ -62,7 +62,7 @@ void ddmFilter::updateData( bool fromWidget ) } /** - * Обновляет выделенные графства + * Обновляет список выделенных (отображаемых) графств * * @author Марунин А.В. * @since 2.0 diff --git a/models/ddmCountyFilterModel.cpp b/models/ddmBaseCountyFilterModel.cpp similarity index 84% rename from models/ddmCountyFilterModel.cpp rename to models/ddmBaseCountyFilterModel.cpp index 6910b1b..f7afb26 100644 --- a/models/ddmCountyFilterModel.cpp +++ b/models/ddmBaseCountyFilterModel.cpp @@ -1,15 +1,15 @@ #include -#include "models/ddmCountyFilterModel.h" +#include "models/ddmBaseCountyFilterModel.h" /** * Конструктор класса * * @param parent Владелец модели * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -ddmCountyFilterModel::ddmCountyFilterModel( QObject* parent ) : ddmFilterModel( parent ), +ddmBaseCountyFilterModel::ddmBaseCountyFilterModel( QObject* parent ) : ddmFilterModel( parent ), m_currentState( NULL ), m_currentCounty( NULL ) { this->updateStateNames(); @@ -22,9 +22,9 @@ ddmCountyFilterModel::ddmCountyFilterModel( QObject* parent ) : ddmFilterModel( * Загружает данные из БД * * @author Марунин А.В. - * @since 2.3 + * @since 2.8 */ -void ddmCountyFilterModel::reloadData() +void ddmBaseCountyFilterModel::reloadData() { if ( this->currentState() ) { @@ -44,9 +44,9 @@ void ddmCountyFilterModel::reloadData() * * @return Указатель на объект типа ddmState или NULL * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -ddmState* ddmCountyFilterModel::currentState() const +ddmState* ddmBaseCountyFilterModel::currentState() const { return this->m_currentState; } @@ -58,9 +58,9 @@ ddmState* ddmCountyFilterModel::currentState() const * * @param id Идентификатор штата * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -void ddmCountyFilterModel::setCurrentState( int state_id ) +void ddmBaseCountyFilterModel::setCurrentState( int state_id ) { Q_ASSERT( state_id > 0 ); ddmState* state = this->findState( state_id ); @@ -78,9 +78,9 @@ void ddmCountyFilterModel::setCurrentState( int state_id ) * * @param geographicName Географическое название штат * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -void ddmCountyFilterModel::setCurrentState( const QString& geographicName ) +void ddmBaseCountyFilterModel::setCurrentState( const QString& geographicName ) { ddmState* state = this->findState( geographicName ); if ( !state ) @@ -100,9 +100,9 @@ void ddmCountyFilterModel::setCurrentState( const QString& geographicName ) * * @param state Указатель на объект типа ddmState * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -void ddmCountyFilterModel::setCurrentState( ddmState* state ) +void ddmBaseCountyFilterModel::setCurrentState( ddmState* state ) { if ( state ) { @@ -126,9 +126,9 @@ void ddmCountyFilterModel::setCurrentState( ddmState* state ) * * @return Объект типа QStringList * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -QStringList ddmCountyFilterModel::stateNames() const +QStringList ddmBaseCountyFilterModel::stateNames() const { return QStringList( this->m_stateMap.values() ); } @@ -138,9 +138,9 @@ QStringList ddmCountyFilterModel::stateNames() const * * @return Указатель на объект типа ddmCounty или NULL * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -ddmCounty* ddmCountyFilterModel::currentCounty() const +ddmCounty* ddmBaseCountyFilterModel::currentCounty() const { return this->m_currentCounty; } @@ -152,9 +152,9 @@ ddmCounty* ddmCountyFilterModel::currentCounty() const * * @param id Идентификатор графства * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -void ddmCountyFilterModel::setCurrentCounty( int id ) +void ddmBaseCountyFilterModel::setCurrentCounty( int id ) { bool found = false; @@ -195,9 +195,9 @@ void ddmCountyFilterModel::setCurrentCounty( int id ) * * @param geographicName Название графства * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -void ddmCountyFilterModel::setCurrentCounty( const QString& geographicName ) +void ddmBaseCountyFilterModel::setCurrentCounty( const QString& geographicName ) { bool found = false; @@ -236,9 +236,9 @@ void ddmCountyFilterModel::setCurrentCounty( const QString& geographicName ) * * @param county Указатель на объект типа ddmCounty * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -void ddmCountyFilterModel::setCurrentCounty( ddmCounty* county ) +void ddmBaseCountyFilterModel::setCurrentCounty( ddmCounty* county ) { if ( county ) { @@ -264,9 +264,9 @@ void ddmCountyFilterModel::setCurrentCounty( ddmCounty* county ) * * @return Объект типа QStringList * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -QStringList ddmCountyFilterModel::countyNames() const +QStringList ddmBaseCountyFilterModel::countyNames() const { return this->m_countyNames; } @@ -278,7 +278,7 @@ QStringList ddmCountyFilterModel::countyNames() const * @author Марунин А.В. * @since 2.3 */ -ddmState* ddmCountyFilterModel::loadState( int state_id ) +ddmState* ddmBaseCountyFilterModel::loadState( int state_id ) { ddmState* state = this->findState( state_id ); if ( !state ) @@ -308,9 +308,9 @@ ddmState* ddmCountyFilterModel::loadState( int state_id ) * Обновляет список штатов * * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -void ddmCountyFilterModel::updateStateNames() +void ddmBaseCountyFilterModel::updateStateNames() { this->m_stateMap.clear(); @@ -333,9 +333,9 @@ void ddmCountyFilterModel::updateStateNames() * Обновляет список имен графств текущего штата * * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -void ddmCountyFilterModel::updateCountyNames() +void ddmBaseCountyFilterModel::updateCountyNames() { if ( this->currentState() ) { @@ -353,8 +353,8 @@ void ddmCountyFilterModel::updateCountyNames() * Деструктор класса * * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -ddmCountyFilterModel::~ddmCountyFilterModel() +ddmBaseCountyFilterModel::~ddmBaseCountyFilterModel() { } diff --git a/models/ddmCountyFilterModel.h b/models/ddmBaseCountyFilterModel.h similarity index 80% rename from models/ddmCountyFilterModel.h rename to models/ddmBaseCountyFilterModel.h index 2da1c4e..46686ef 100644 --- a/models/ddmCountyFilterModel.h +++ b/models/ddmBaseCountyFilterModel.h @@ -1,5 +1,5 @@ -#ifndef DDM_COUNTY_FILTER_MODEL_H -#define DDM_COUNTY_FILTER_MODEL_H +#ifndef DDM_BASE_COUNTY_FILTER_MODEL_H +#define DDM_BASE_COUNTY_FILTER_MODEL_H #include @@ -8,7 +8,7 @@ #include "base/ddmCounty.h" /** - * Класс ddmCountyFilterModel определяет модель фильтра ddmCountyFilter + * Класс ddmBaseCountyFilterModel определяет модель фильтра ddmBaseCountyFilter * Предоставляет доступ к данным одного конкретного графства * * Основными элементами модели являются: @@ -23,13 +23,13 @@ * @author Марунин А.В. * @since 2.1 */ -class ddmCountyFilterModel : public ddmFilterModel +class ddmBaseCountyFilterModel : public ddmFilterModel { Q_OBJECT public: - ddmCountyFilterModel( QObject* parent = 0 ); + ddmBaseCountyFilterModel( QObject* parent = 0 ); virtual void reloadData(); @@ -44,7 +44,7 @@ class ddmCountyFilterModel : public ddmFilterModel QStringList stateNames() const; QStringList countyNames() const; - virtual ~ddmCountyFilterModel(); + virtual ~ddmBaseCountyFilterModel(); protected: @@ -64,4 +64,4 @@ class ddmCountyFilterModel : public ddmFilterModel }; -#endif // DDM_COUNTY_FILTER_MODEL_H +#endif // DDM_BASE_COUNTY_FILTER_MODEL_H diff --git a/models/ddmCountyInfoFilterModel.cpp b/models/ddmCountyInfoFilterModel.cpp new file mode 100644 index 0000000..df8bbdd --- /dev/null +++ b/models/ddmCountyInfoFilterModel.cpp @@ -0,0 +1,22 @@ +#include "models/ddmCountyInfoFilterModel.h" + +/** + * Конструктор класса + * + * @param parent Владелец модели + * @author Марунин А.В. + * @since 2.8 + */ +ddmCountyInfoFilterModel::ddmCountyInfoFilterModel( QObject* parent ) : ddmBaseCountyFilterModel( parent ) +{ +} + +/** + * Деструктор класса + * + * @author Марунин А.В. + * @since 2.8 + */ +ddmCountyInfoFilterModel::~ddmCountyInfoFilterModel() +{ +} diff --git a/models/ddmCountyInfoFilterModel.h b/models/ddmCountyInfoFilterModel.h new file mode 100644 index 0000000..359f3d1 --- /dev/null +++ b/models/ddmCountyInfoFilterModel.h @@ -0,0 +1,26 @@ +#ifndef DDM_COUNTY_INFO_FILTER_MODEL_H +#define DDM_COUNTY_INFO_FILTER_MODEL_H + +#include "models/ddmBaseCountyFilterModel.h" + +/** + * Класс ddmCountyInfoFilterModel определяет модель фильтра ddmCountyInfoFilter + * + * @author Марунин А.В. + * @since 2.8 + */ +class ddmCountyInfoFilterModel : public ddmBaseCountyFilterModel +{ + Q_OBJECT + +public: + + ddmCountyInfoFilterModel( QObject* parent = 0 ); + + virtual ~ddmCountyInfoFilterModel(); + +protected: + +}; + +#endif // DDM_COUNTY_INFO_FILTER_MODEL_H diff --git a/widgets/ddmBaseCountyFilterWidget.cpp b/widgets/ddmBaseCountyFilterWidget.cpp new file mode 100644 index 0000000..b4087f4 --- /dev/null +++ b/widgets/ddmBaseCountyFilterWidget.cpp @@ -0,0 +1,160 @@ +#include "widgets/ddmBaseCountyFilterWidget.h" +#include "filters/ddmBaseCountyFilter.h" +#include "ui_ddmBaseCountyFilterWidget.h" + +/** + * Конструктор класса + * + * @param filter Фильтр, к которому относится виджет + * @param parent Родитель (владелец) виджета + * @author Марунин А.В. + * @since 2.8 + */ +ddmBaseCountyFilterWidget::ddmBaseCountyFilterWidget( ddmBaseCountyFilter* filter, QWidget* parent ) : ddmFilterWidget( filter, parent ) +{ + this->ui = new Ui::ddmBaseCountyFilterWidget; + + this->ui->setupUi( this ); + this->ui->gridLayout->setContentsMargins( 0, 0, 0, 0 ); + this->setContentsMargins( 0, 0, 0, 0 ); + + QObject::connect( this->comboState(), SIGNAL( currentIndexChanged(const QString&) ), this, SIGNAL( changedState() ) ); + QObject::connect( this->comboCounty(), SIGNAL( currentIndexChanged(const QString&) ), this, SIGNAL( changedCounty() ) ); + + QObject::connect( this->comboState(), SIGNAL( currentIndexChanged(const QString&) ), this, SIGNAL( changed() ) ); + QObject::connect( this->comboCounty(), SIGNAL( currentIndexChanged(const QString&) ), this, SIGNAL( changed() ) ); +} + +/** + * Возвращает название текущего штата + * + * @return Объект типа QString + * @author Марунин А.В. + * @since 2.8 + */ +QString ddmBaseCountyFilterWidget::currentState() const +{ + return this->comboState()->currentIndex()>= 0 ? this->comboState()->currentText() : QString(); +} + +/** + * Задает текущий штат + * + * @param state Имя штата + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilterWidget::setCurrentState( const QString& state ) +{ + if ( this->comboState()->findText( state ) ) + { + this->comboState()->setCurrentText( state ); + } +} + +/** + * Возвращает название текущего графства + * + * @return Объект типа QString + * @author Марунин А.В. + * @since 2.8 + */ +QString ddmBaseCountyFilterWidget::currentCounty() const +{ + return this->comboCounty()->currentIndex()>= 0 ? this->comboCounty()->currentText() : QString(); +} + +/** + * @brief ddmBaseCountyFilterWidget::setCurrentCounty + * @param county + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilterWidget::setCurrentCounty( const QString& county ) +{ + if ( this->comboCounty()->findText( county ) ) + { + this->comboCounty()->setCurrentText( county ); + } +} + +/** + * Задает список имен штатов + * + * @param items Объект типа QStringList + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilterWidget::setStateNames( const QStringList& items ) +{ + if ( this->comboState()->count() == 0 ) + { + this->comboState()->addItems( items ); + } +} + +/** + * Задает список имен графств для текущего штата + * + * @param names Объект типа QStringList + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilterWidget::setCountyNames( const QStringList& names ) +{ + if ( !names.isEmpty() ) + { + QComboBox* combo = this->comboCounty(); + combo->clear(); + combo->addItems( names ); + } +} + +/** + * Встраивает доп.панель в виджет + * + * Позволяет задавать виджет с доп.настройками фильтра + * + * @param widget Встраиваемый виджет + * @author Марунин А.В. + * @since 2.8 + */ +void ddmBaseCountyFilterWidget::insertWidget( QWidget* widget ) +{ + this->ui->verticalLayout->insertWidget( 4, widget ); +} + +/** + * Доступ к выпадающему списку штатов + * + * @return Указатель на объект типа QComboBox + * @author Марунин А.В. + * @since 2.8 + */ +QComboBox* ddmBaseCountyFilterWidget::comboState() const +{ + return this->ui->comboState; +} + +/** + * Доступ к выпадающему списку графств + * + * @return Указатель на объект типа QComboBox + * @author Марунин А.В. + * @since 2.8 + */ +QComboBox* ddmBaseCountyFilterWidget::comboCounty() const +{ + return this->ui->comboCounty; +} + +/** + * Деструктор класса + * + * @author Марунин А.В. + * @since 2.8 + */ +ddmBaseCountyFilterWidget::~ddmBaseCountyFilterWidget() +{ + delete this->ui; +} diff --git a/widgets/ddmCountyFilterWidget.h b/widgets/ddmBaseCountyFilterWidget.h similarity index 51% rename from widgets/ddmCountyFilterWidget.h rename to widgets/ddmBaseCountyFilterWidget.h index 16327df..1306a8f 100644 --- a/widgets/ddmCountyFilterWidget.h +++ b/widgets/ddmBaseCountyFilterWidget.h @@ -1,33 +1,35 @@ -#ifndef DDM_COUNTY_FILTER_WIDGET_H -#define DDM_COUNTY_FILTER_WIDGET_H +#ifndef DDM_BASE_COUNTY_FILTER_WIDGET_H +#define DDM_BASE_COUNTY_FILTER_WIDGET_H #include #include "widgets/ddmFilterWidget.h" -class ddmCountyFilter; +class ddmBaseCountyFilter; namespace Ui { - class ddmCountyFilterWidget; + class ddmBaseCountyFilterWidget; } /** - * Класс ddmCountyFilterWidget описывает виджет для задания параметров фильтра ddmCountyFilter + * Класс ddmBaseCountyFilterWidget описывает базовый виджет для задания параметров фильтра ddmCountyFilter * * Содержит следующие элементы управления: * - список QComboBox для выбора штата * - список QComboBox для выбора графства * При изменении штата или графства происходит автоматическое применение фильтра + * Предполагается, что в наследуемых классах будет встраиваться панель панель с настройками - сделать это + * можно с помощью метода insertWidget() * * @author Марунин А.В. - * @since 2.1 + * @since 2.8 */ -class ddmCountyFilterWidget : public ddmFilterWidget +class ddmBaseCountyFilterWidget : public ddmFilterWidget { Q_OBJECT public: - ddmCountyFilterWidget( ddmCountyFilter* countyFilter, QWidget* parent = NULL ); + ddmBaseCountyFilterWidget( ddmBaseCountyFilter* filter, QWidget* parent = NULL ); QString currentState() const; void setCurrentState( const QString& state ); @@ -38,22 +40,23 @@ class ddmCountyFilterWidget : public ddmFilterWidget void setStateNames( const QStringList& names ); void setCountyNames( const QStringList& names ); - void setCountyInfo( const QString& html ); - QComboBox* comboState() const; QComboBox* comboCounty() const; - virtual ~ddmCountyFilterWidget(); + virtual ~ddmBaseCountyFilterWidget(); Q_SIGNALS: void changedState(); void changedCounty(); +protected: + void insertWidget( QWidget* widget ); + private: - Ui::ddmCountyFilterWidget* ui; + Ui::ddmBaseCountyFilterWidget* ui; }; -#endif // DDM_COUNTY_FILTER_WIDGET_H +#endif // DDM_BASE_COUNTY_FILTER_WIDGET_H diff --git a/widgets/ddmBaseCountyFilterWidget.ui b/widgets/ddmBaseCountyFilterWidget.ui new file mode 100644 index 0000000..6d6d28d --- /dev/null +++ b/widgets/ddmBaseCountyFilterWidget.ui @@ -0,0 +1,119 @@ + + + ddmBaseCountyFilterWidget + + + + 0 + 0 + 160 + 348 + + + + + 0 + 0 + + + + + 155 + 0 + + + + + 16777215 + 16777215 + + + + ddmCountyFilterWidget + + + + + + QLayout::SetMinimumSize + + + + + + 10 + 75 + true + + + + Выберите графство + + + + + + + Штат + + + + + + + + 0 + 0 + + + + + 140 + 20 + + + + + + + + Графство + + + + + + + + 0 + 0 + + + + + 140 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + diff --git a/widgets/ddmCentralWidget.ui b/widgets/ddmCentralWidget.ui index f6e2957..3fd9e62 100644 --- a/widgets/ddmCentralWidget.ui +++ b/widgets/ddmCentralWidget.ui @@ -36,22 +36,6 @@ QLayout::SetMinAndMaxSize - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -93,6 +77,38 @@ + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + diff --git a/widgets/ddmCountyFilterWidget.cpp b/widgets/ddmCountyFilterWidget.cpp deleted file mode 100644 index b11bcb1..0000000 --- a/widgets/ddmCountyFilterWidget.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "widgets/ddmCountyFilterWidget.h" -#include "filters/ddmCountyFilter.h" -#include "ui_ddmCountyFilterWidget.h" - - -ddmCountyFilterWidget::ddmCountyFilterWidget( ddmCountyFilter* countyFilter, QWidget* parent ) : ddmFilterWidget( countyFilter, parent ) -{ - this->ui = new Ui::ddmCountyFilterWidget; - - this->ui->setupUi( this ); - this->ui->gridLayout->setContentsMargins( 0, 0, 0, 0 ); - this->setContentsMargins( 0, 0, 0, 0 ); - - QObject::connect( this->comboState(), SIGNAL( currentIndexChanged(const QString&) ), this, SIGNAL( changedState() ) ); - QObject::connect( this->comboCounty(), SIGNAL( currentIndexChanged(const QString&) ), this, SIGNAL( changedCounty() ) ); - - QObject::connect( this->comboState(), SIGNAL( currentIndexChanged(const QString&) ), this, SIGNAL( changed() ) ); - QObject::connect( this->comboCounty(), SIGNAL( currentIndexChanged(const QString&) ), this, SIGNAL( changed() ) ); -} - -QString ddmCountyFilterWidget::currentState() const -{ - return this->comboState()->currentIndex()>= 0 ? this->comboState()->currentText() : QString(); -} - -void ddmCountyFilterWidget::setCurrentState( const QString& state ) -{ - if ( this->comboState()->findText( state ) ) - { - this->comboState()->setCurrentText( state ); - } -} - -QString ddmCountyFilterWidget::currentCounty() const -{ - return this->comboCounty()->currentIndex()>= 0 ? this->comboCounty()->currentText() : QString(); -} - -void ddmCountyFilterWidget::setCurrentCounty( const QString& county ) -{ - if ( this->comboCounty()->findText( county ) ) - { - this->comboCounty()->setCurrentText( county ); - } -} - -void ddmCountyFilterWidget::setStateNames( const QStringList& items ) -{ - if ( this->comboState()->count() == 0 ) - { - this->comboState()->addItems( items ); - } -} - -void ddmCountyFilterWidget::setCountyNames( const QStringList& names ) -{ - if ( !names.isEmpty() ) - { - QComboBox* combo = this->comboCounty(); - combo->clear(); - combo->addItems( names ); - } -} - -/** - * Задает текст с информацией о текущем графстве - * - * @param html Строка HTML - * @author Марунин А.В. - * @since 2.6 - * - */ -void ddmCountyFilterWidget::setCountyInfo( const QString& html ) -{ - this->ui->countyInfo->setHtml( html ); -} - -QComboBox* ddmCountyFilterWidget::comboState() const -{ - return this->ui->comboState; -} - -QComboBox* ddmCountyFilterWidget::comboCounty() const -{ - return this->ui->comboCounty; -} - -/** - * @brief ddmCountyFilterWidget::~ddmCountyFilterWidget - */ -ddmCountyFilterWidget::~ddmCountyFilterWidget() -{ - delete this->ui; -} diff --git a/widgets/ddmCountyInfoFilterWidget.cpp b/widgets/ddmCountyInfoFilterWidget.cpp new file mode 100644 index 0000000..a3536b4 --- /dev/null +++ b/widgets/ddmCountyInfoFilterWidget.cpp @@ -0,0 +1,52 @@ +#include "widgets/panels/ddmCountyInfoFilterWidgetPanel.h" +#include "widgets/ddmCountyInfoFilterWidget.h" +#include "filters/ddmCountyInfoFilter.h" + +/** + * Констуктор класса + * + * @param filter Фильтр, к которому относится виджет + * @param parent Родитель (владелец) виджета + * @author Марунин А.В. + * @since 2.8 + */ +ddmCountyInfoFilterWidget::ddmCountyInfoFilterWidget( ddmCountyInfoFilter* filter, QWidget* parent ) : ddmBaseCountyFilterWidget( filter, parent ) +{ + this->m_infoPanel = new ddmCountyInfoFilterWidgetPanel( this ); + + this->insertWidget( this->infoPanel() ); +} + +/** + * Доступ к информационной панели + * + * @return Указатель на объект типа ddmCountyInfoFilterWidgetPanel + * @author Марунин А.В. + * @since 2.8 + */ +ddmCountyInfoFilterWidgetPanel* ddmCountyInfoFilterWidget::infoPanel() const +{ + return const_cast( this )->m_infoPanel; +} + +/** + * Задает текст панели + * + * @param text Текст, отображаемый на панели + * @author Марунин А.В. + * @since 2.8 + */ +void ddmCountyInfoFilterWidget::setInfo( const QString& text ) +{ + this->infoPanel()->setInfo( text ); +} + +/** + * Деструктор класса + * + * @author Марунин А.В. + * @since 2.8 + */ +ddmCountyInfoFilterWidget::~ddmCountyInfoFilterWidget() +{ +} diff --git a/widgets/ddmCountyInfoFilterWidget.h b/widgets/ddmCountyInfoFilterWidget.h new file mode 100644 index 0000000..fcf78ab --- /dev/null +++ b/widgets/ddmCountyInfoFilterWidget.h @@ -0,0 +1,33 @@ +#ifndef DDM_COUNTY_INFO_FILTER_WIDGET_H +#define DDM_COUNTY_INFO_FILTER_WIDGET_H + +#include "widgets/ddmBaseCountyFilterWidget.h" + +class ddmCountyInfoFilter; +class ddmCountyInfoFilterWidgetPanel; + +/** + * Класс ddmCountyInfoFilterWidget описывает виджет для фильтра ddmCountyInfoFilter + * + * @author Марунин А.В. + * @since 2.8 + */ +class ddmCountyInfoFilterWidget : public ddmBaseCountyFilterWidget +{ + Q_OBJECT + +public: + + ddmCountyInfoFilterWidget( ddmCountyInfoFilter* filter, QWidget* parent = NULL ); + + ddmCountyInfoFilterWidgetPanel* infoPanel() const; + void setInfo( const QString& text ); + + virtual ~ddmCountyInfoFilterWidget(); + +protected: + + ddmCountyInfoFilterWidgetPanel* m_infoPanel; +}; + +#endif // DDM_COUNTY_INFO_FILTER_WIDGET_H diff --git a/widgets/panels/ddmCountyInfoFilterWidgetPanel.cpp b/widgets/panels/ddmCountyInfoFilterWidgetPanel.cpp new file mode 100644 index 0000000..27a65bd --- /dev/null +++ b/widgets/panels/ddmCountyInfoFilterWidgetPanel.cpp @@ -0,0 +1,38 @@ +#include "widgets/panels/ddmCountyInfoFilterWidgetPanel.h" +#include "ui_ddmCountyInfoFilterWidgetPanel.h" + +/** + * Конструктор класса + * + * @param parent Виджет, в который встраивается панель + * @author Марунин А.В. + * @since 2.8 + */ +ddmCountyInfoFilterWidgetPanel::ddmCountyInfoFilterWidgetPanel( QWidget* parent ) : QWidget( parent ) +{ + this->ui = new Ui::ddmCountyInfoFilterWidgetPanel; + this->ui->setupUi( this ); +} + +/** + * Задает текст панели + * + * @param text Текст, отображаемый на панели + * @author Марунин А.В. + * @since 2.8 + */ +void ddmCountyInfoFilterWidgetPanel::setInfo( const QString& text ) +{ + this->ui->countyInfo->setHtml( text ); +} + +/** + * Деструктор класса + * + * @author Марунин А.В. + * @since 2.8 + */ +ddmCountyInfoFilterWidgetPanel::~ddmCountyInfoFilterWidgetPanel() +{ + delete this->ui; +} diff --git a/widgets/panels/ddmCountyInfoFilterWidgetPanel.h b/widgets/panels/ddmCountyInfoFilterWidgetPanel.h new file mode 100644 index 0000000..3e236f6 --- /dev/null +++ b/widgets/panels/ddmCountyInfoFilterWidgetPanel.h @@ -0,0 +1,35 @@ +#ifndef DDM_COUNTY_INFO_FILTER_WIDGET_PANEL_H +#define DDM_COUNTY_INFO_FILTER_WIDGET_PANEL_H + +#include + +namespace Ui { + class ddmCountyInfoFilterWidgetPanel; +} + +/** + * Класс ddmCountyInfoFilterWidgetPanel описывает панель, отображающую информацию о выбранном графстве + * в виджете ddmCountyInfoFilterWidget (фильтр ddmCountyInfoFilter) + * + * @author Марунин А.В. + * @since 2.8 + */ +class ddmCountyInfoFilterWidgetPanel : public QWidget +{ + Q_OBJECT + +public: + + ddmCountyInfoFilterWidgetPanel( QWidget* parent = NULL ); + + void setInfo( const QString& text ); + + virtual ~ddmCountyInfoFilterWidgetPanel(); + +private: + + Ui::ddmCountyInfoFilterWidgetPanel* ui; + +}; + +#endif // DDM_COUNTY_INFO_FILTER_WIDGET_PANEL_H diff --git a/widgets/panels/ddmCountyInfoFilterWidgetPanel.ui b/widgets/panels/ddmCountyInfoFilterWidgetPanel.ui new file mode 100644 index 0000000..2de00f5 --- /dev/null +++ b/widgets/panels/ddmCountyInfoFilterWidgetPanel.ui @@ -0,0 +1,70 @@ + + + ddmCountyInfoFilterWidgetPanel + + + + 0 + 0 + 160 + 269 + + + + + 0 + 0 + + + + + 155 + 0 + + + + + 16777215 + 16777215 + + + + ddmCountyFilterWidget + + + + + + QLayout::SetMinimumSize + + + + + false + + + background-color: rgb(234, 234, 234); +border-color: rgb(234, 234, 234); + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + +