00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "koVariableDlgs.h"
00021 #include "koVariableDlgs.moc"
00022
00023 #include <klocale.h>
00024 #include <kbuttonbox.h>
00025
00026 #include <qcombobox.h>
00027 #include <qvbox.h>
00028 #include <qlabel.h>
00029 #include <qpushbutton.h>
00030 #include <qheader.h>
00031 #include <klineedit.h>
00032 #include <kdebug.h>
00033
00034
00035
00036
00037
00038
00039
00040 KoVariableNameDia::KoVariableNameDia( QWidget *parent )
00041 : KDialogBase( parent, "", TRUE,i18n( "Entry Name" ),Ok|Cancel )
00042 {
00043 init();
00044 }
00045
00046
00047 KoVariableNameDia::KoVariableNameDia( QWidget *parent, const QPtrList<KoVariable>& vars )
00048 : KDialogBase( parent, "", TRUE, i18n( "Variable Name" ), Ok|Cancel )
00049 {
00050
00051 init();
00052 enableButtonOK(false);
00053 QPtrListIterator<KoVariable> it( vars );
00054 for ( ; it.current() ; ++it ) {
00055 KoVariable *var = it.current();
00056 if ( var->type() == VT_CUSTOM )
00057 names->insertItem( ( (KoCustomVariable*) var )->name(), -1 );
00058 }
00059
00060 }
00061
00062 void KoVariableNameDia::init()
00063 {
00064 back = makeVBoxMainWidget();
00065
00066 QHBox *row1 = new QHBox( back );
00067 row1->setSpacing( KDialog::spacingHint() );
00068
00069 QLabel *l = new QLabel( i18n( "Name:" ), row1 );
00070 l->setFixedSize( l->sizeHint() );
00071 names = new QComboBox( TRUE, row1 );
00072 names->setFocus();
00073
00074 connect( names, SIGNAL( textChanged ( const QString & )),
00075 this, SLOT( textChanged ( const QString & )));
00076 connect( this, SIGNAL( okClicked() ),
00077 this, SLOT( accept() ) );
00078 connect( this, SIGNAL( cancelClicked() ),
00079 this, SLOT( reject() ) );
00080 enableButtonOK( !names->currentText().isEmpty() );
00081 resize( 350, 100 );
00082 }
00083
00084 QString KoVariableNameDia::getName() const
00085 {
00086 return names->currentText();
00087 }
00088
00089 void KoVariableNameDia::textChanged ( const QString &_text )
00090 {
00091 enableButtonOK(!_text.isEmpty());
00092 }
00093
00094
00095
00096
00097
00098
00099
00100 KoCustomVariablesListItem::KoCustomVariablesListItem( QListView *parent )
00101 : QListViewItem( parent )
00102 {
00103 editWidget = new KLineEdit( listView()->viewport() );
00104 listView()->addChild( editWidget );
00105 }
00106
00107 void KoCustomVariablesListItem::setup()
00108 {
00109 QListViewItem::setup();
00110 setHeight( QMAX( listView()->fontMetrics().height(),
00111 editWidget->sizeHint().height() ) );
00112
00113
00114 }
00115
00116 void KoCustomVariablesListItem::update()
00117 {
00118 editWidget->resize( listView()->header()->cellSize( 1 ), height() );
00119 listView()->moveChild( editWidget, listView()->header()->cellPos( 1 ),
00120 listView()->itemPos( this ) + listView()->contentsY() );
00121 editWidget->show();
00122 }
00123
00124 void KoCustomVariablesListItem::setVariable( KoCustomVariable *v )
00125 {
00126 var = v;
00127 editWidget->setText( var->value() );
00128 setText( 0, v->name() );
00129 }
00130
00131 KoCustomVariable *KoCustomVariablesListItem::getVariable() const
00132 {
00133 return var;
00134 }
00135
00136 void KoCustomVariablesListItem::applyValue()
00137 {
00138 QString newVal=editWidget->text();
00139 if(var->value()!=newVal)
00140 var->setValue( newVal );
00141 }
00142
00143 int KoCustomVariablesListItem::width( const QFontMetrics & fm, const QListView *lv, int c ) const
00144 {
00145
00146
00147 if ( c == 1 ) {
00148 QString val = editWidget->text();
00149 int w = fm.width( val );
00150 return w;
00151 } else
00152 return QListViewItem::width( fm, lv, c );
00153 }
00154
00155
00156
00157
00158
00159
00160
00161 KoCustomVariablesList::KoCustomVariablesList( QWidget *parent )
00162 : KListView( parent )
00163 {
00164 header()->setMovingEnabled( FALSE );
00165 addColumn( i18n( "Variable" ) );
00166 addColumn( i18n( "Value" ) );
00167 connect( header(), SIGNAL( sizeChange( int, int, int ) ),
00168 this, SLOT( columnSizeChange( int, int, int ) ) );
00169 connect( header(), SIGNAL( sectionClicked( int ) ),
00170 this, SLOT( sectionClicked( int ) ) );
00171
00172 setResizeMode(QListView::LastColumn);
00173 setSorting( -1 );
00174 }
00175
00176 void KoCustomVariablesList::setValues()
00177 {
00178 QListViewItemIterator it( this );
00179 for ( ; it.current(); ++it )
00180 ( (KoCustomVariablesListItem *)it.current() )->applyValue();
00181 }
00182
00183 void KoCustomVariablesList::columnSizeChange( int c, int, int )
00184 {
00185 if ( c == 0 || c == 1 )
00186 updateItems();
00187 }
00188
00189 void KoCustomVariablesList::sectionClicked( int )
00190 {
00191 updateItems();
00192 }
00193
00194 void KoCustomVariablesList::updateItems()
00195 {
00196 QListViewItemIterator it( this );
00197 for ( ; it.current(); ++it )
00198 ( (KoCustomVariablesListItem*)it.current() )->update();
00199 }
00200
00201
00202
00203
00204
00205
00206
00207 KoCustomVariablesDia::KoCustomVariablesDia( QWidget *parent, const QPtrList<KoVariable> &variables )
00208 : KDialogBase( parent, "", TRUE,i18n( "Variable Value Editor" ), Ok|Cancel )
00209 {
00210
00211 back = makeVBoxMainWidget();
00212
00213 list = new KoCustomVariablesList( back );
00214
00215 QStringList lst;
00216 QPtrListIterator<KoVariable> it( variables );
00217 for ( ; it.current() ; ++it ) {
00218 KoVariable *var = it.current();
00219 if ( var->type() == VT_CUSTOM ) {
00220 KoCustomVariable *v = (KoCustomVariable*)var;
00221 if ( !lst.contains( v->name() ) ) {
00222 lst.append( v->name() );
00223 KoCustomVariablesListItem *item = new KoCustomVariablesListItem( list );
00224 item->setVariable( v );
00225 }
00226 }
00227 }
00228
00229
00230 connect( this, SIGNAL( okClicked() ),
00231 this, SLOT( slotOk() ) );
00232 connect( this, SIGNAL( cancelClicked() ),
00233 this, SLOT( reject() ) );
00234 showButtonOK(lst.count()>0);
00235
00236 resize( 600, 400 );
00237 }
00238
00239 void KoCustomVariablesDia::slotOk()
00240 {
00241 list->setValues();
00242 accept();
00243 }
00244
00245
00246
00247
00248
00249
00250
00251 KoCustomVarDialog::KoCustomVarDialog( QWidget *parent )
00252 : KDialogBase( parent, "", TRUE,i18n( "Add Variable" ), Ok|Cancel )
00253 {
00254 init();
00255 m_name->setFocus();
00256
00257
00258 connect( this, SIGNAL( okClicked() ),
00259 this, SLOT( slotAddOk() ) );
00260 connect( this, SIGNAL( cancelClicked() ),
00261 this, SLOT( reject() ) );
00262
00263 connect( m_name, SIGNAL( textChanged(const QString&) ),
00264 this, SLOT( slotTextChanged(const QString&) ) );
00265
00266 enableButtonOK( false );
00267 resize( 350, 100 );
00268
00269 }
00270
00271 KoCustomVarDialog::KoCustomVarDialog( QWidget *parent, KoCustomVariable *var )
00272 : KDialogBase( parent, "", TRUE,i18n( "Edit Variable" ), Ok|Cancel )
00273 {
00274 m_var = var;
00275 init();
00276 m_name->setText( m_var->name() );
00277 m_value->setText( m_var->value() );
00278 m_name->setReadOnly(true);
00279 m_value->setFocus();
00280
00281
00282 connect( this, SIGNAL( okClicked() ),
00283 this, SLOT( slotEditOk() ) );
00284 connect( this, SIGNAL( cancelClicked() ),
00285 this, SLOT( reject() ) );
00286
00287 connect( m_value, SIGNAL( textChanged(const QString&) ),
00288 this, SLOT( slotTextChanged(const QString&) ) );
00289
00290 enableButtonOK( true );
00291 resize( 350, 100 );
00292 }
00293
00294 void KoCustomVarDialog::init()
00295 {
00296 back = makeVBoxMainWidget();
00297 QHBox *row1 = new QHBox( back );
00298 row1->setSpacing( KDialog::spacingHint() );
00299 QLabel *ln = new QLabel( i18n( "Name:" ), row1 );
00300 ln->setFixedSize( ln->sizeHint() );
00301 m_name = new KLineEdit( row1 );
00302
00303 QHBox *row2 = new QHBox( back );
00304 row2->setSpacing( KDialog::spacingHint() );
00305 QLabel *lv = new QLabel( i18n( "Value:" ), row2 );
00306 lv->setFixedSize( lv->sizeHint() );
00307 m_value = new KLineEdit( row2 );
00308 }
00309
00310 void KoCustomVarDialog::slotAddOk()
00311 {
00312 accept();
00313 }
00314 void KoCustomVarDialog::slotEditOk()
00315 {
00316 m_var->setValue( m_value->text() );
00317 accept();
00318 }
00319
00320 void KoCustomVarDialog::slotTextChanged(const QString&text)
00321 {
00322 enableButtonOK( !text.isEmpty() );
00323 }
00324 QString KoCustomVarDialog::name()
00325 {
00326 if ( m_name->text().isEmpty() )
00327 return QString( "No name" );
00328 return m_name->text();
00329 }
00330
00331 QString KoCustomVarDialog::value()
00332 {
00333 if ( m_value->text().isEmpty() )
00334 return QString( "No value" );
00335 return m_value->text();
00336 }