kresources
selectdialog.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "selectdialog.h"
00025
00026 #include <klocale.h>
00027 #include <kmessagebox.h>
00028
00029 #include <QtGui/QGroupBox>
00030 #include <QtGui/QLayout>
00031 #include <QtGui/QListWidget>
00032
00033 #include "resource.h"
00034
00035 using namespace KRES;
00036
00037 class SelectDialog::SelectDialogPrivate
00038 {
00039 public:
00040 QListWidget *mResourceId;
00041 QMap<int, Resource*> mResourceMap;
00042 };
00043
00044 SelectDialog::SelectDialog( QList<Resource *> list, QWidget *parent )
00045 : KDialog( parent ), d( new SelectDialogPrivate )
00046 {
00047 setModal(true);
00048 setCaption( i18n( "Resource Selection" ) );
00049 resize( 300, 200 );
00050 setButtons( Ok|Cancel );
00051 setDefaultButton( Ok );
00052
00053 QWidget *widget = new QWidget( this );
00054 setMainWidget( widget );
00055
00056 QVBoxLayout *mainLayout = new QVBoxLayout( widget );
00057 mainLayout->setMargin( 0 );
00058 mainLayout->setSpacing( spacingHint() );
00059
00060 QGroupBox *groupBox = new QGroupBox( widget );
00061 QGridLayout *grid = new QGridLayout;
00062 grid->setMargin( marginHint() );
00063 grid->setSpacing( spacingHint() );
00064 groupBox->setLayout( grid );
00065 groupBox->setTitle( i18n( "Resources" ) );
00066
00067 d->mResourceId = new QListWidget( groupBox );
00068 grid->addWidget( d->mResourceId, 0, 0 );
00069
00070 mainLayout->addWidget( groupBox );
00071
00072
00073 uint counter = 0;
00074 for ( int i = 0; i < list.count(); ++i ) {
00075 Resource *resource = list.at( i );
00076 if ( resource && !resource->readOnly() ) {
00077 d->mResourceMap.insert( counter, resource );
00078 d->mResourceId->addItem( resource->resourceName() );
00079 counter++;
00080 }
00081 }
00082
00083 d->mResourceId->setCurrentRow( 0 );
00084 connect( d->mResourceId, SIGNAL( itemActivated(QListWidgetItem*)),
00085 SLOT(accept()) );
00086 }
00087
00088 SelectDialog::~SelectDialog()
00089 {
00090 delete d;
00091 }
00092
00093 Resource *SelectDialog::resource()
00094 {
00095 if ( d->mResourceId->currentRow() != -1 ) {
00096 return d->mResourceMap[ d->mResourceId->currentRow() ];
00097 } else {
00098 return 0;
00099 }
00100 }
00101
00102 Resource *SelectDialog::getResource( QList<Resource *> list, QWidget *parent )
00103 {
00104 if ( list.count() == 0 ) {
00105 KMessageBox::error( parent, i18n( "There is no resource available." ) );
00106 return 0;
00107 }
00108
00109 if ( list.count() == 1 ) {
00110 return list.first();
00111 }
00112
00113
00114
00115 Resource *found = 0;
00116
00117 for ( int i=0; i< list.size(); ++i ) {
00118 if ( !list.at(i)->readOnly() ) {
00119 if ( found ) {
00120 found = 0;
00121 break;
00122 }
00123 } else {
00124 found = list.at(i);
00125 }
00126 }
00127
00128 if ( found ) {
00129 return found;
00130 }
00131
00132 SelectDialog dlg( list, parent );
00133 if ( dlg.exec() == KDialog::Accepted ) {
00134 return dlg.resource();
00135 } else {
00136 return 0;
00137 }
00138 }