/* This file is part of the KDE project Copyright (C) 1998, 1999 Reginald Stadlbauer This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "KoCustomVariablesDia.h" #include "KoCustomVariablesDia.moc" #include #include #include #include #include #include #include #include #include /****************************************************************** * * Class: KoVariableNameDia * ******************************************************************/ KoVariableNameDia::KoVariableNameDia( TQWidget *tqparent ) : KDialogBase( tqparent, "", TRUE,i18n( "Entry Name" ),Ok|Cancel ) { init(); } KoVariableNameDia::KoVariableNameDia( TQWidget *tqparent, const TQPtrList& vars ) : KDialogBase( tqparent, "", TRUE, i18n( "Variable Name" ), Ok|Cancel ) { init(); enableButtonOK(false); TQPtrListIterator it( vars ); for ( ; it.current() ; ++it ) { KoVariable *var = it.current(); if ( var->type() == VT_CUSTOM ) names->insertItem( ( (KoCustomVariable*) var )->name(), -1 ); } } void KoVariableNameDia::init() { back = makeVBoxMainWidget(); TQHBox *row1 = new TQHBox( back ); row1->setSpacing( KDialog::spacingHint() ); TQLabel *l = new TQLabel( i18n( "Name:" ), row1 ); l->setFixedSize( l->tqsizeHint() ); names = new TQComboBox( TRUE, row1 ); names->setFocus(); connect( names, TQT_SIGNAL( textChanged ( const TQString & )), this, TQT_SLOT( textChanged ( const TQString & ))); connect( this, TQT_SIGNAL( okClicked() ), this, TQT_SLOT( accept() ) ); connect( this, TQT_SIGNAL( cancelClicked() ), this, TQT_SLOT( reject() ) ); enableButtonOK( !names->currentText().isEmpty() ); resize( 350, 100 ); } TQString KoVariableNameDia::getName() const { return names->currentText(); } void KoVariableNameDia::textChanged ( const TQString &_text ) { enableButtonOK(!_text.isEmpty()); } /****************************************************************** * * Class: KoCustomVariablesListItem * ******************************************************************/ KoCustomVariablesListItem::KoCustomVariablesListItem( TQListView *tqparent ) : TQListViewItem( tqparent ) { editWidget = new KLineEdit( listView()->viewport() ); listView()->addChild( editWidget ); } void KoCustomVariablesListItem::setup() { TQListViewItem::setup(); setHeight( TQMAX( listView()->fontMetrics().height(), editWidget->tqsizeHint().height() ) ); //if ( listView()->columnWidth( 1 ) < editWidget->tqsizeHint().width() ) // listView()->setColumnWidth( 1, editWidget->tqsizeHint().width() ); } void KoCustomVariablesListItem::update() { editWidget->resize( listView()->header()->cellSize( 1 ), height() ); listView()->moveChild( editWidget, listView()->header()->cellPos( 1 ), listView()->itemPos( this ) + listView()->contentsY() ); editWidget->show(); } void KoCustomVariablesListItem::setVariable( KoCustomVariable *v ) { var = v; editWidget->setText( var->value() ); setText( 0, v->name() ); } KoCustomVariable *KoCustomVariablesListItem::getVariable() const { return var; } void KoCustomVariablesListItem::applyValue() { TQString newVal=editWidget->text(); if(var->value()!=newVal) var->setValue( newVal ); } int KoCustomVariablesListItem::width( const TQFontMetrics & fm, const TQListView *lv, int c ) const { // The text of the 2nd column isn't known to TQListViewItem, only we know it // (it's in our lineedit) if ( c == 1 ) { TQString val = editWidget->text(); int w = fm.width( val ); return w; } else return TQListViewItem::width( fm, lv, c ); } /****************************************************************** * * Class: KoCustomVariablesList * ******************************************************************/ KoCustomVariablesList::KoCustomVariablesList( TQWidget *tqparent ) : KListView( tqparent ) { header()->setMovingEnabled( FALSE ); addColumn( i18n( "Variable" ) ); addColumn( i18n( "Value" ) ); connect( header(), TQT_SIGNAL( sizeChange( int, int, int ) ), this, TQT_SLOT( columnSizeChange( int, int, int ) ) ); connect( header(), TQT_SIGNAL( sectionClicked( int ) ), this, TQT_SLOT( sectionClicked( int ) ) ); setResizeMode(TQListView::LastColumn); setSorting( -1 ); } void KoCustomVariablesList::setValues() { TQListViewItemIterator it( this ); for ( ; it.current(); ++it ) ( (KoCustomVariablesListItem *)it.current() )->applyValue(); } void KoCustomVariablesList::columnSizeChange( int c, int, int ) { if ( c == 0 || c == 1 ) updateItems(); } void KoCustomVariablesList::sectionClicked( int ) { updateItems(); } void KoCustomVariablesList::updateItems() { TQListViewItemIterator it( this ); for ( ; it.current(); ++it ) ( (KoCustomVariablesListItem*)it.current() )->update(); } /****************************************************************** * * Class: KoCustomVariablesDia * ******************************************************************/ KoCustomVariablesDia::KoCustomVariablesDia( TQWidget *tqparent, const TQPtrList &variables ) : KDialogBase( tqparent, "", TRUE,i18n( "Variable Value Editor" ), Ok|Cancel ) { back = makeVBoxMainWidget(); list = new KoCustomVariablesList( back ); TQStringList lst; TQPtrListIterator it( variables ); for ( ; it.current() ; ++it ) { KoVariable *var = it.current(); if ( var->type() == VT_CUSTOM ) { KoCustomVariable *v = (KoCustomVariable*)var; if ( !lst.tqcontains( v->name() ) ) { lst.append( v->name() ); KoCustomVariablesListItem *item = new KoCustomVariablesListItem( list ); item->setVariable( v ); } } } connect( this, TQT_SIGNAL( okClicked() ), this, TQT_SLOT( slotOk() ) ); connect( this, TQT_SIGNAL( cancelClicked() ), this, TQT_SLOT( reject() ) ); showButtonOK(lst.count()>0); resize( 600, 400 ); } void KoCustomVariablesDia::slotOk() { list->setValues(); accept(); } /****************************************************************** * * Class: KoCustomVarDialog * ******************************************************************/ KoCustomVarDialog::KoCustomVarDialog( TQWidget *tqparent ) : KDialogBase( tqparent, "", TRUE,i18n( "Add Variable" ), Ok|Cancel ) { init(); m_name->setFocus(); connect( this, TQT_SIGNAL( okClicked() ), this, TQT_SLOT( slotAddOk() ) ); connect( this, TQT_SIGNAL( cancelClicked() ), this, TQT_SLOT( reject() ) ); connect( m_name, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( slotTextChanged(const TQString&) ) ); enableButtonOK( false ); resize( 350, 100 ); } // edit existing variable KoCustomVarDialog::KoCustomVarDialog( TQWidget *tqparent, KoCustomVariable *var ) : KDialogBase( tqparent, "", TRUE,i18n( "Edit Variable" ), Ok|Cancel ) { m_var = var; init(); m_name->setText( m_var->name() ); m_value->setText( m_var->value() ); m_name->setReadOnly(true); m_value->setFocus(); connect( this, TQT_SIGNAL( okClicked() ), this, TQT_SLOT( slotEditOk() ) ); connect( this, TQT_SIGNAL( cancelClicked() ), this, TQT_SLOT( reject() ) ); connect( m_value, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( slotTextChanged(const TQString&) ) ); enableButtonOK( true ); resize( 350, 100 ); } void KoCustomVarDialog::init() { back = makeVBoxMainWidget(); TQHBox *row1 = new TQHBox( back ); row1->setSpacing( KDialog::spacingHint() ); TQLabel *ln = new TQLabel( i18n( "Name:" ), row1 ); ln->setFixedSize( ln->tqsizeHint() ); m_name = new KLineEdit( row1 ); TQHBox *row2 = new TQHBox( back ); row2->setSpacing( KDialog::spacingHint() ); TQLabel *lv = new TQLabel( i18n( "Value:" ), row2 ); lv->setFixedSize( lv->tqsizeHint() ); m_value = new KLineEdit( row2 ); } void KoCustomVarDialog::slotAddOk() { accept(); } void KoCustomVarDialog::slotEditOk() { m_var->setValue( m_value->text() ); accept(); } void KoCustomVarDialog::slotTextChanged(const TQString&text) { enableButtonOK( !text.isEmpty() ); } TQString KoCustomVarDialog::name() { if ( m_name->text().isEmpty() ) return TQString( "No name" ); return m_name->text(); } TQString KoCustomVarDialog::value() { if ( m_value->text().isEmpty() ) return TQString( "No value" ); return m_value->text(); }