diff options
Diffstat (limited to 'languages/cpp/creategettersetterdialog.cpp')
-rw-r--r-- | languages/cpp/creategettersetterdialog.cpp | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/languages/cpp/creategettersetterdialog.cpp b/languages/cpp/creategettersetterdialog.cpp new file mode 100644 index 00000000..41a2f27e --- /dev/null +++ b/languages/cpp/creategettersetterdialog.cpp @@ -0,0 +1,122 @@ +// +// C++ Implementation: %{MODULE} +// +// Description: +// +// +// Author: %{AUTHOR} <%{EMAIL}>, (C) %{YEAR} +// +// Copyright: See COPYING file that comes with this distribution +// +// +#include "creategettersetterdialog.h" + +#include "cppsupportpart.h" +#include <klineedit.h> +#include <qcheckbox.h> +#include <qregexp.h> + +#include "creategettersetterconfiguration.h" + +CreateGetterSetterDialog::CreateGetterSetterDialog( CppSupportPart* part, ClassDom aClass, + VariableDom aVar, QWidget *parent, const char *pName ) +: CreateGetterSetterDialogBase( parent, pName ), m_part( part ), m_class( aClass ), m_var( aVar ) +{ + QString name = aVar->name(); + setCaption( "Create methods for " + name ); + + if ( aVar->type().startsWith( "const" ) && !aVar->type().endsWith( "*" ) ) + { + m_chkSet->setChecked( false ); + m_chkSet->setEnabled( false ); + } + + CreateGetterSetterConfiguration* config = m_part->createGetterSetterConfiguration(); + if ( config == 0 ) + return ; + + QStringList prefixes = config->prefixVariable(); + unsigned int len = 0; + + QStringList::ConstIterator theend = prefixes.end(); //find longest fitting prefix and remove it + for ( QStringList::ConstIterator ci = prefixes.begin(); ci != theend; ++ci ) + { + if ( name.startsWith( *ci ) && ( *ci ).length() > len ) + len = ( *ci ).length(); + } + + if ( len > 0 ) + name.remove( 0, len ); + + m_edtGet->setText( name ); + + QString getName = name; + if ( ! config->prefixGet().isEmpty() ) + getName[ 0 ] = getName[ 0 ].upper(); + + QString setName = name; + if ( ! config->prefixSet().isEmpty() ) + setName[ 0 ] = setName[ 0 ].upper(); + + bool getIsChecked = config->isInlineGet(); + bool setIsChecked = config->isInlineSet(); + m_chkInlineGet->setChecked( getIsChecked ); + m_chkInlineSet->setChecked( setIsChecked ); + + m_edtGet->setText( config->prefixGet() + getName ); + m_edtSet->setText( config->prefixSet() + setName ); +} + +void CreateGetterSetterDialog::accept( ) +{ + CreateGetterSetterConfiguration * config = m_part->createGetterSetterConfiguration(); + + if ( config == 0 ) + return ; + + if ( m_chkGet->isChecked() && !m_edtGet->text().isEmpty() ) + m_part->addMethod( m_class, m_edtGet->text(), m_var->type(), "", + CodeModelItem::Public, true, m_chkInlineGet->isChecked(), + false, false, "\treturn " + m_var->name() + ";" ); + + if ( m_chkSet->isChecked() && !m_edtSet->text().isEmpty() ) + { + QString parameterStr; + + if ( m_var->type().endsWith( "*" ) ) + { + parameterStr = m_var->type() + " " + config->parameterName(); + } + else + { + QRegExp basicTypes( "((unsigned)?\\s*(char|byte|short|int|long))|double|float|bool" ); + if ( basicTypes.exactMatch( m_var->type() ) ) + parameterStr = m_var->type() + " " + config->parameterName(); + else + parameterStr = "const " + m_var->type() + "& " + config->parameterName(); + } + m_part->addMethod( m_class, m_edtSet->text(), "void", parameterStr, CodeModelItem::Public, + false, m_chkInlineSet->isChecked(), false, false, + "\t" + m_var->name() + " = " + config->parameterName() + ";" ); + } + //@todo illegale eingaben nicht akzeptieren wie z.b. int& ... + QDialog::accept(); +} + +/** + * store current settings wether get/set methods should be created inline. + * this is done everytime one changes this behaviour in the dialog. + */ +void CreateGetterSetterDialog::slotInlineChanged( ) +{ + CreateGetterSetterConfiguration * config = m_part->createGetterSetterConfiguration(); + if ( config == 0 ) + return ; + + config->setInlineGet( m_chkInlineGet->isChecked() ); + config->setInlineSet( m_chkInlineSet->isChecked() ); + config->store(); +} + +#include "creategettersetterdialog.moc" +//kate: indent-mode csands; tab-width 4; space-indent off; |