replacedlgimpl.cpp
Go to the documentation of this file.00001 #include <qcheckbox.h>
00002 #include <qradiobutton.h>
00003 #include <qstring.h>
00004 #include <qregexp.h>
00005 #include <qlabel.h>
00006
00007 #include <ktrader.h>
00008 #include <kparts/componentfactory.h>
00009 #include <kregexpeditorinterface.h>
00010 #include <kurlrequester.h>
00011 #include <kurlcompletion.h>
00012 #include <klineedit.h>
00013 #include <kcombobox.h>
00014 #include <kdebug.h>
00015
00016 #include "replacedlgimpl.h"
00017
00018 namespace
00019 {
00023 QString escape(const QString &str)
00024 {
00025 QString escaped("[]{}()\\^$?.+-*");
00026 QString res;
00027
00028 for (uint i=0; i < str.length(); ++i)
00029 {
00030 if (escaped.find(str[i]) != -1)
00031 res += "\\";
00032 res += str[i];
00033 }
00034
00035 return res;
00036 }
00037 }
00038
00039
00040 ReplaceDlgImpl::ReplaceDlgImpl(QWidget* parent, const char* name, bool modal, WFlags fl)
00041 : ReplaceDlg(parent,name, modal,fl), _regexp_dialog( 0 )
00042
00043 {
00044 connect( find_button, SIGNAL( clicked() ), SLOT( saveComboHistories() ) );
00045 connect( regexp_button, SIGNAL( clicked() ), SLOT( showRegExpEditor() ) );
00046 connect( find_combo, SIGNAL( textChanged( const QString & ) ),
00047 SLOT( validateFind( const QString & ) ) );
00048 connect( regexp_combo, SIGNAL( textChanged ( const QString & ) ),
00049 SLOT( validateExpression( const QString & ) ) );
00050 connect( strings_regexp_radio, SIGNAL( toggled( bool ) ), SLOT( toggleExpression( bool ) ) );
00051
00052
00053 if ( KTrader::self()->query("KRegExpEditor/KRegExpEditor").isEmpty() )
00054 {
00055 strings_regexp_radio->disconnect( regexp_button );
00056 }
00057
00058 path_urlreq->completionObject()->setMode(KURLCompletion::DirCompletion);
00059 path_urlreq->setMode( KFile::Directory | KFile::LocalOnly );
00060
00061 expression_varning_label->hide();
00062 }
00063
00064 ReplaceDlgImpl::~ReplaceDlgImpl()
00065 {}
00066
00067 void ReplaceDlgImpl::show( QString const & path )
00068 {
00069 path_urlreq->lineEdit()->setText( path );
00070
00071 find_combo->setCurrentText( "" );
00072 replacement_combo->setCurrentText( "" );
00073 regexp_combo->setCurrentText( "" );
00074
00075 strings_all_radio->setChecked( true );
00076 find_combo->setFocus();
00077
00078 find_button->setEnabled( false );
00079
00080 QDialog::show();
00081 }
00082
00083
00084 void ReplaceDlgImpl::showRegExpEditor()
00085 {
00086 _regexp_dialog = KParts::ComponentFactory::createInstanceFromQuery<QDialog>( "KRegExpEditor/KRegExpEditor" );
00087
00088 if ( _regexp_dialog )
00089 {
00090 KRegExpEditorInterface *editor =
00091 static_cast<KRegExpEditorInterface *>( _regexp_dialog->qt_cast( "KRegExpEditorInterface" ) );
00092
00093 editor->setRegExp( regexp_combo->currentText() );
00094
00095 if ( _regexp_dialog->exec() == QDialog::Accepted )
00096 {
00097 regexp_combo->setCurrentText( editor->regExp() );
00098 }
00099 }
00100 }
00101
00102 void ReplaceDlgImpl::validateFind( const QString & )
00103 {
00104
00105
00106 bool x = find_combo->currentText().isEmpty() && ! strings_regexp_radio->isOn();
00107 find_button->setEnabled( !x );
00108 }
00109
00110 void ReplaceDlgImpl::validateExpression( const QString & )
00111 {
00112
00113
00114 QString pattern = regexp_combo->currentText();
00115 QRegExp re( pattern );
00116
00117 if ( pattern.isEmpty() || !re.isValid() )
00118 {
00119 expression_varning_label->show();
00120 find_button->setEnabled( false );
00121 }
00122 else
00123 {
00124 expression_varning_label->hide();
00125 find_button->setEnabled( true );
00126 }
00127 }
00128
00129 void ReplaceDlgImpl::toggleExpression( bool on )
00130 {
00131 if ( on )
00132 {
00133 validateExpression( QString() );
00134 }
00135 else
00136 {
00137 expression_varning_label->hide();
00138 find_button->setEnabled( true );
00139 }
00140 }
00141
00142 void ReplaceDlgImpl::saveComboHistories()
00143 {
00144 if ( find_combo->isEnabled() && ! find_combo->currentText().isEmpty() )
00145 {
00146 find_combo->addToHistory( find_combo->currentText() );
00147 }
00148
00149 if ( ! replacement_combo->currentText().isEmpty() )
00150 {
00151 replacement_combo->addToHistory( replacement_combo->currentText() );
00152 }
00153
00154 if ( regexp_combo->isEnabled() && ! regexp_combo->currentText().isEmpty() )
00155 {
00156 regexp_combo->addToHistory( regexp_combo->currentText() );
00157 }
00158 }
00159
00160 QRegExp ReplaceDlgImpl::expressionPattern()
00161 {
00162 QString pattern = escape( find_combo->currentText() );
00163
00164 QRegExp re;
00165 re.setCaseSensitive( case_box->isChecked() );
00166 re.setMinimal( true );
00167
00168 if ( strings_wholewords_radio->isChecked() )
00169 {
00170 pattern = "\\b" + pattern + "\\b";
00171 }
00172 else if ( strings_regexp_radio->isChecked() )
00173 {
00174 pattern = regexp_combo->currentText();
00175 }
00176
00177 re.setPattern( pattern );
00178
00179 return re;
00180 }
00181
00182 QString ReplaceDlgImpl::replacementString()
00183 {
00184 return replacement_combo->currentText();
00185 }
00186
00187 #include "replacedlgimpl.moc"
00188
This file is part of the documentation for KDevelop Version 3.1.2.