00001 #ifndef SELECT_FROM_LIST_DIALOG_H 00002 #define SELECT_FROM_LIST_DIALOG_H 00003 00004 #include <QDialog> 00005 #include <deque> 00006 #include "ui_selectlistdialog.h" 00007 00008 namespace Ui { 00009 class SelectFromListDialog; 00010 } 00011 00012 class SelectFromListDialog : public QDialog 00013 { 00014 Q_OBJECT 00015 00016 public: 00017 explicit SelectFromListDialog(const std::deque<std::string> &fields, bool single_selection = true, QWidget *parent = 0); 00018 ~SelectFromListDialog(); 00019 00020 std::vector<int> getSelectedRowNumber() const; 00021 00022 private slots: 00023 void on_buttonBox_accepted(); 00024 00025 void on_listFieldsWidget_currentRowChanged(int currentRow); 00026 00027 void on_listFieldsWidget_doubleClicked(const QModelIndex &index); 00028 00029 void on_pushButtonSelectAll_pressed(); 00030 00031 void on_listFieldsWidget_clicked(const QModelIndex &index); 00032 00033 private: 00034 Ui::SelectXAxisDialog *ui; 00035 std::vector<int> _selected_row_number; 00036 bool _single_selection; 00037 }; 00038 00039 00040 //----------------------------------------------- 00041 inline SelectFromListDialog::SelectFromListDialog(const std::deque<std::string>& fields, bool single_selection, QWidget *parent) : 00042 QDialog(parent), 00043 ui(new Ui::SelectXAxisDialog), 00044 _single_selection( single_selection ) 00045 { 00046 auto flags = this->windowFlags(); 00047 this->setWindowFlags( flags | Qt::WindowStaysOnTopHint); 00048 00049 ui->setupUi(this); 00050 00051 if( ! _single_selection) { 00052 ui->listFieldsWidget->setSelectionMode( QAbstractItemView::ExtendedSelection ); 00053 } 00054 else{ 00055 ui->pushButtonSelectAll->hide(); 00056 } 00057 00058 // if there is only one item in the list, select it by default 00059 for (int i=0; i< fields.size(); i++) 00060 { 00061 auto item = new QListWidgetItem( QString::fromStdString(fields[i]) ); 00062 ui->listFieldsWidget->addItem( item ); 00063 00064 if( fields.size() == 1){ 00065 item->setSelected(true); 00066 } 00067 } 00068 } 00069 00070 inline SelectFromListDialog::~SelectFromListDialog() 00071 { 00072 delete ui; 00073 } 00074 00075 inline std::vector<int> SelectFromListDialog::getSelectedRowNumber() const 00076 { 00077 return _selected_row_number; 00078 } 00079 00080 inline void SelectFromListDialog::on_listFieldsWidget_clicked(const QModelIndex &index) 00081 { 00082 QModelIndexList indexes = ui->listFieldsWidget->selectionModel()->selectedIndexes(); 00083 ui->buttonBox->setEnabled( indexes.empty() == false ); 00084 } 00085 00086 inline void SelectFromListDialog::on_buttonBox_accepted() 00087 { 00088 QModelIndexList indexes = ui->listFieldsWidget->selectionModel()->selectedIndexes(); 00089 00090 foreach(QModelIndex index, indexes) 00091 { 00092 _selected_row_number.push_back(index.row()); 00093 } 00094 } 00095 00096 inline void SelectFromListDialog::on_listFieldsWidget_currentRowChanged(int ) 00097 { 00098 QModelIndexList indexes = ui->listFieldsWidget->selectionModel()->selectedIndexes(); 00099 ui->buttonBox->setEnabled( indexes.empty() == false ); 00100 } 00101 00102 inline void SelectFromListDialog::on_listFieldsWidget_doubleClicked(const QModelIndex &) 00103 { 00104 if( _single_selection ) { 00105 _selected_row_number.push_back( ui->listFieldsWidget->currentRow() ); 00106 this->accept(); 00107 } 00108 } 00109 00110 inline void SelectFromListDialog::on_pushButtonSelectAll_pressed() 00111 { 00112 for (int i=0; i< ui->listFieldsWidget->count(); i++) 00113 { 00114 _selected_row_number.push_back(i); 00115 } 00116 this->accept(); 00117 } 00118 00119 #endif // SELECTXAXISDIALOG_H