1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
//
// file QT4SelectItems.H
// Dave Cosgrove
// AstraZeneca
// 27th June 2006
//
// Puts up a QListWidget in a box allowing selections from a list of strings.
// Similar to QTSelectItems.H but in Qt4 speak.
// This must always be used as a modal dialog, since the address of the vector
// holding the selections is kept, and this must be in scope when it is filled.
// It is filled when either the ok or cancel buttons are pressed.
#include <QLabel>
#include <QLayout>
#include <QListWidget>
#include <QListWidgetItem>
#include <QPushButton>
#include "QT4SelectItems.H"
#include <iostream>
using namespace std;
namespace DACLIB {
// ***************************************************************************
QT4SelectItems::QT4SelectItems( const string &label ,
vector<QString> &item_labels ,
vector<char> &selected_items , bool radio_box ,
QWidget *parent ) : QDialog( parent ) {
setWindowTitle( "Select Items" );
QWidget *vbox = new QWidget( this );
list_widget_ = new QListWidget();
if( radio_box )
list_widget_->setSelectionMode( QAbstractItemView::SingleSelection );
else
list_widget_->setSelectionMode( QAbstractItemView::ExtendedSelection );
vector<QString>::iterator p , ps;
int i = 0;
for( p = item_labels.begin() , ps = item_labels.end() ; p != ps ; ++p , ++i ) {
QListWidgetItem *item = new QListWidgetItem( *p , list_widget_ );
list_widget_->setItemSelected( item , selected_items[i] );
}
connect( list_widget_ , SIGNAL( itemDoubleClicked( QListWidgetItem * ) ) ,
this , SLOT( slot_list_double_clicked( QListWidgetItem * ) ) );
build_action_box();
vlayout_ = new QVBoxLayout();
vlayout_->setDirection( QBoxLayout::BottomToTop );
vlayout_->addWidget( action_box_ );
vlayout_->addWidget( list_widget_ );
vlayout_->addWidget( new QLabel( label.c_str() ) );
vbox->setLayout( vlayout_ );
vbox->show();
}
// *****************************************************************************
void QT4SelectItems::get_results( vector<char> &selected_items ) const {
selected_items = vector<char>( list_widget_->count() , 0 );
for( int i = 0 , is = list_widget_->count() ; i < is ; ++i ) {
selected_items[i] = list_widget_->isItemSelected( list_widget_->item( i ) );
}
}
// *****************************************************************************
void QT4SelectItems::build_action_box() {
action_box_ = new QWidget( this );
QHBoxLayout *hlayout = new QHBoxLayout();
QPushButton *button = new QPushButton( "Ok" );
button->setDefault( true );
hlayout->addWidget( button );
connect( button , SIGNAL( clicked() ) , this , SLOT( accept() ) );
button = new QPushButton( "Cancel" );
hlayout->addWidget( button );
connect( button , SIGNAL( clicked() ) , this , SLOT( reject() ) );
action_box_->setLayout( hlayout );
}
// *****************************************************************************
// select item and out
void QT4SelectItems::slot_list_double_clicked( QListWidgetItem *item ) {
item->setSelected( true );
accept();
}
} // EO namespace DACLIB
|