• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • kdesdk
  • Sitemap
  • Contact Us
 

kompare

diffpage.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002                                 diffprefs.cpp
00003                                 -------------
00004         begin                   : Sun Mar 4 2001
00005         Copyright 2001-2004 Otto Bruggeman <otto.bruggeman@home.nl>
00006         Copyright 2007      Kevin Kofler   <kevin.kofler@chello.at>
00007 ****************************************************************************/
00008 
00009 /***************************************************************************
00010 **
00011 **   This program is free software; you can redistribute it and/or modify
00012 **   it under the terms of the GNU General Public License as published by
00013 **   the Free Software Foundation; either version 2 of the License, or
00014 **   (at your option) any later version.
00015 **
00016 ***************************************************************************/
00017 
00018 #include "diffpage.h"
00019 
00020 #include <QtGui/QCheckBox>
00021 #include <Q3HGroupBox>
00022 #include <QtGui/QLabel>
00023 #include <QtGui/QLayout>
00024 #include <QtGui/QRadioButton>
00025 #include <QtGui/QSpinBox>
00026 #include <QtGui/QVBoxLayout>
00027 #include <QtGui/QHBoxLayout>
00028 #include <QtGui/QToolTip>
00029 
00030 #include <kbuttongroup.h>
00031 #include <kapplication.h>
00032 #include <kcombobox.h>
00033 #include <kdialog.h>
00034 #include <keditlistbox.h>
00035 #include <klineedit.h>
00036 #include <klocale.h>
00037 #include <kurlcombobox.h>
00038 #include <kurlrequester.h>
00039 #include <kservicetypetrader.h>
00040 #include <ktabwidget.h>
00041 
00042 #include <kparts/componentfactory.h>
00043 #include <kregexpeditorinterface.h>
00044 #include <kglobal.h>
00045 
00046 #include "diffsettings.h"
00047 
00048 DiffPage::DiffPage() : PageBase(), m_ignoreRegExpDialog( 0 )
00049 {
00050     m_tabWidget = new KTabWidget( this );
00051 
00052     addDiffTab();
00053 
00054     addFormatTab();
00055 
00056     addOptionsTab();
00057 
00058     addExcludeTab();
00059 }
00060 
00061 DiffPage::~DiffPage()
00062 {
00063     m_settings = 0;
00064 }
00065 
00066 void DiffPage::setSettings( DiffSettings* setts )
00067 {
00068     m_settings = setts;
00069 
00070     m_diffURLRequester->setUrl( m_settings->m_diffProgram );
00071 
00072     m_smallerCheckBox->setChecked           ( m_settings->m_createSmallerDiff );
00073     m_largerCheckBox->setChecked            ( m_settings->m_largeFiles );
00074     m_tabsCheckBox->setChecked              ( m_settings->m_convertTabsToSpaces );
00075     m_caseCheckBox->setChecked              ( m_settings->m_ignoreChangesInCase );
00076     m_linesCheckBox->setChecked             ( m_settings->m_ignoreEmptyLines );
00077     m_whitespaceCheckBox->setChecked        ( m_settings->m_ignoreWhiteSpace );
00078     m_allWhitespaceCheckBox->setChecked     ( m_settings->m_ignoreAllWhiteSpace );
00079     m_ignoreTabExpansionCheckBox->setChecked( m_settings->m_ignoreChangesDueToTabExpansion );
00080 
00081     m_ignoreRegExpCheckBox->setChecked   ( m_settings->m_ignoreRegExp );
00082     m_ignoreRegExpEdit->setCompletedItems( m_settings->m_ignoreRegExpTextHistory );
00083     m_ignoreRegExpEdit->setText          ( m_settings->m_ignoreRegExpText );
00084 
00085     m_locSpinBox->setValue( m_settings->m_linesOfContext );
00086 
00087     m_modeButtonGroup->setSelected( m_settings->m_format );
00088 
00089     m_excludeFilePatternCheckBox->setChecked         ( m_settings->m_excludeFilePattern );
00090     slotExcludeFilePatternToggled                    ( m_settings->m_excludeFilePattern );
00091     m_excludeFilePatternEditListBox->insertStringList( m_settings->m_excludeFilePatternList );
00092 
00093     m_excludeFileCheckBox->setChecked( m_settings->m_excludeFilesFile );
00094     slotExcludeFileToggled           ( m_settings->m_excludeFilesFile );
00095     m_excludeFileURLComboBox->setUrls( m_settings->m_excludeFilesFileHistoryList );
00096     m_excludeFileURLComboBox->setUrl ( KUrl( m_settings->m_excludeFilesFileURL ) );
00097 }
00098 
00099 DiffSettings* DiffPage::settings( void )
00100 {
00101     return m_settings;
00102 }
00103 
00104 void DiffPage::restore()
00105 {
00106     // this shouldn't do a thing...
00107 }
00108 
00109 void DiffPage::apply()
00110 {
00111     m_settings->m_diffProgram                    = m_diffURLRequester->url().pathOrUrl();
00112 
00113     m_settings->m_largeFiles                     = m_largerCheckBox->isChecked();
00114     m_settings->m_createSmallerDiff              = m_smallerCheckBox->isChecked();
00115     m_settings->m_convertTabsToSpaces            = m_tabsCheckBox->isChecked();
00116     m_settings->m_ignoreChangesInCase            = m_caseCheckBox->isChecked();
00117     m_settings->m_ignoreEmptyLines               = m_linesCheckBox->isChecked();
00118     m_settings->m_ignoreWhiteSpace               = m_whitespaceCheckBox->isChecked();
00119     m_settings->m_ignoreAllWhiteSpace            = m_allWhitespaceCheckBox->isChecked();
00120     m_settings->m_ignoreChangesDueToTabExpansion = m_ignoreTabExpansionCheckBox->isChecked();
00121 
00122     m_settings->m_ignoreRegExp                   = m_ignoreRegExpCheckBox->isChecked();
00123     m_settings->m_ignoreRegExpText               = m_ignoreRegExpEdit->text();
00124     m_settings->m_ignoreRegExpTextHistory        = m_ignoreRegExpEdit->completionObject()->items();
00125 
00126     m_settings->m_linesOfContext                 = m_locSpinBox->value();
00127 
00128     m_settings->m_format = static_cast<Kompare::Format>( m_modeButtonGroup->selected() );
00129 
00130     m_settings->m_excludeFilePattern             = m_excludeFilePatternCheckBox->isChecked();
00131     m_settings->m_excludeFilePatternList         = m_excludeFilePatternEditListBox->items();
00132 
00133     m_settings->m_excludeFilesFile               = m_excludeFileCheckBox->isChecked();
00134     m_settings->m_excludeFilesFileURL            = m_excludeFileURLComboBox->currentText();
00135     m_settings->m_excludeFilesFileHistoryList    = m_excludeFileURLComboBox->urls();
00136 
00137     m_settings->saveSettings( KGlobal::config().data() );
00138 }
00139 
00140 void DiffPage::setDefaults()
00141 {
00142     m_diffURLRequester->setUrl( KUrl( "diff" ) );
00143     m_smallerCheckBox->setChecked( true );
00144     m_largerCheckBox->setChecked( true );
00145     m_tabsCheckBox->setChecked( false );
00146     m_caseCheckBox->setChecked( false );
00147     m_linesCheckBox->setChecked( false );
00148     m_whitespaceCheckBox->setChecked( false );
00149     m_allWhitespaceCheckBox->setChecked( false );
00150     m_ignoreTabExpansionCheckBox->setChecked( false );
00151     m_ignoreRegExpCheckBox->setChecked( false );
00152 
00153     m_ignoreRegExpEdit->setText( QString() );
00154 
00155     m_locSpinBox->setValue( 3 );
00156 
00157     m_modeButtonGroup->setSelected( Kompare::Unified );
00158 
00159     m_excludeFilePatternCheckBox->setChecked( false );
00160 
00161     m_excludeFileCheckBox->setChecked( false );
00162 }
00163 
00164 void DiffPage::slotShowRegExpEditor()
00165 {
00166     if ( ! m_ignoreRegExpDialog )
00167         m_ignoreRegExpDialog = KServiceTypeTrader::createInstanceFromQuery<QDialog>( "KRegExpEditor/KRegExpEditor", QString(), this );
00168 
00169     KRegExpEditorInterface *iface = qobject_cast<KRegExpEditorInterface *>( m_ignoreRegExpDialog );
00170 
00171     if ( !iface )
00172         return;
00173 
00174     iface->setRegExp( m_ignoreRegExpEdit->text() );
00175     bool ok = m_ignoreRegExpDialog->exec();
00176 
00177     if ( ok )
00178         m_ignoreRegExpEdit->setText( iface->regExp() );
00179 }
00180 
00181 void DiffPage::slotExcludeFilePatternToggled( bool on )
00182 {
00183     if ( !on )
00184     {
00185         m_excludeFilePatternEditListBox->setEnabled( false );
00186     }
00187     else
00188     {
00189         m_excludeFilePatternEditListBox->setEnabled( true );
00190     }
00191 }
00192 
00193 void DiffPage::slotExcludeFileToggled( bool on )
00194 {
00195     if ( !on )
00196     {
00197         m_excludeFileURLComboBox->setEnabled( false );
00198         m_excludeFileURLRequester->setEnabled( false );
00199     }
00200     else
00201     {
00202         m_excludeFileURLComboBox->setEnabled( true );
00203         m_excludeFileURLRequester->setEnabled( true );
00204     }
00205 }
00206 
00207 void DiffPage::addDiffTab()
00208 {
00209     QWidget* page   = new QWidget( this );
00210     QVBoxLayout* layout = new QVBoxLayout( page );
00211     layout->setSpacing( KDialog::spacingHint() );
00212     layout->setMargin( KDialog::marginHint() );
00213 
00214     // add diff program selector
00215     m_diffProgramGroup = new KButtonGroup( page );
00216     layout->addWidget( m_diffProgramGroup );
00217     QVBoxLayout* bgLayout = new QVBoxLayout( m_diffProgramGroup );
00218     m_diffProgramGroup->setTitle( i18n( "Diff Program" ) );
00219     //m_diffProgramGroup->setMargin( KDialog::marginHint() );
00220 
00221     m_diffURLRequester = new KUrlRequester( m_diffProgramGroup);
00222     m_diffURLRequester->setObjectName("diffURLRequester" );
00223     m_diffURLRequester->setWhatsThis( i18n( "You can select a different diff program here. On Solaris the standard diff program does not support all the options that the GNU version does. This way you can select that version." ) );
00224     bgLayout->addWidget( m_diffURLRequester );
00225 
00226     layout->addStretch( 1 );
00227     page->setMinimumSize( sizeHintForWidget( page ) );
00228 
00229     m_tabWidget->addTab( page, i18n( "Diff" ) );
00230 }
00231 
00232 void DiffPage::addFormatTab()
00233 {
00234     QWidget* page   = new QWidget( this );
00235     QVBoxLayout* layout = new QVBoxLayout( page );
00236     layout->setSpacing( KDialog::spacingHint() );
00237     layout->setMargin( KDialog::marginHint() );
00238 
00239     // add diff modes
00240     m_modeButtonGroup = new KButtonGroup( page );
00241     m_modeButtonGroup->setWhatsThis( i18n( "Select the format of the output generated by diff. Unified is the one that is used most frequently because it is very readable. The KDE developers like this format the best so use it for sending patches." ) );
00242     layout->addWidget( m_modeButtonGroup );
00243     QVBoxLayout* bgLayout = new QVBoxLayout( m_modeButtonGroup );
00244     m_modeButtonGroup->setTitle( i18n( "Output Format" ) );
00245     //m_modeButtonGroup->setMargin( KDialog::marginHint() );
00246 
00247     QRadioButton* radioButton;
00248     radioButton = new QRadioButton( i18n( "Context" ), m_modeButtonGroup );
00249     bgLayout->addWidget( radioButton );
00250     radioButton = new QRadioButton( i18n( "Ed" ),      m_modeButtonGroup );
00251     radioButton->setEnabled( false );
00252     bgLayout->addWidget( radioButton );
00253     radioButton = new QRadioButton( i18n( "Normal" ),  m_modeButtonGroup );
00254     bgLayout->addWidget( radioButton );
00255     radioButton = new QRadioButton( i18n( "RCS" ),     m_modeButtonGroup );
00256     radioButton->setEnabled( false );
00257     bgLayout->addWidget( radioButton );
00258     radioButton = new QRadioButton( i18n( "Unified" ), m_modeButtonGroup );
00259     bgLayout->addWidget( radioButton );
00260 
00261     // #lines of context (loc)
00262     Q3HGroupBox* groupBox = new Q3HGroupBox( page );
00263     layout->addWidget( groupBox );
00264     groupBox->setTitle( i18n( "Lines of Context" ) );
00265     //groupBox->setMargin( KDialog::marginHint() );
00266 
00267     QLabel* label = new QLabel( i18n( "Number of context lines:" ), groupBox );
00268     m_locSpinBox = new QSpinBox( 0, 100, 1, groupBox );
00269     m_locSpinBox->setWhatsThis( i18n( "The number of context lines is normally 2 or 3. This makes the diff readable and applicable in most cases. More than 3 lines will only bloat the diff unnecessarily." ) );
00270     label->setBuddy( m_locSpinBox );
00271 
00272     layout->addStretch( 1 );
00273     page->setMinimumSize( sizeHintForWidget( page ) );
00274 
00275     m_tabWidget->addTab( page, i18n( "Format" ) );
00276 }
00277 
00278 void DiffPage::addOptionsTab()
00279 {
00280     QWidget* page   = new QWidget( this );
00281     QVBoxLayout* layout = new QVBoxLayout( page );
00282     layout->setSpacing( KDialog::spacingHint() );
00283     layout->setMargin( KDialog::marginHint() );
00284 
00285     // add diff options
00286     KButtonGroup* optionButtonGroup = new KButtonGroup( page );
00287     layout->addWidget( optionButtonGroup );
00288     QVBoxLayout* bgLayout = new QVBoxLayout( optionButtonGroup );
00289     optionButtonGroup->setTitle( i18n( "General" ) );
00290     //optionButtonGroup->setMargin( KDialog::marginHint() );
00291 
00292     m_smallerCheckBox     = new QCheckBox( i18n( "&Look for smaller changes" ), optionButtonGroup );
00293     QToolTip::add( m_smallerCheckBox, i18n( "This corresponds to the -d diff option." ) );
00294     bgLayout->addWidget( m_smallerCheckBox );
00295     m_largerCheckBox      = new QCheckBox( i18n( "O&ptimize for large files" ), optionButtonGroup );
00296     QToolTip::add( m_largerCheckBox, i18n( "This corresponds to the -H diff option." ) );
00297     bgLayout->addWidget( m_largerCheckBox );
00298     m_caseCheckBox        = new QCheckBox( i18n( "&Ignore changes in case" ), optionButtonGroup );
00299     QToolTip::add( m_caseCheckBox, i18n( "This corresponds to the -i diff option." ) );
00300     bgLayout->addWidget( m_caseCheckBox );
00301 
00302     QHBoxLayout* groupLayout = new QHBoxLayout( layout );
00303     groupLayout->setObjectName( "regexp_horizontal_layout" );
00304     groupLayout->setSpacing( -1 );
00305     groupLayout->setMargin( KDialog::marginHint() );
00306 
00307     m_ignoreRegExpCheckBox = new QCheckBox( i18n( "Ignore regexp:" ), page );
00308     QToolTip::add( m_ignoreRegExpCheckBox, i18n( "This option corresponds to the -I diff option." ) );
00309     groupLayout->addWidget( m_ignoreRegExpCheckBox );
00310     m_ignoreRegExpEdit = new KLineEdit( QString::null, page);   //krazy:exclude=nullstrassign for old broken gcc
00311     m_ignoreRegExpEdit->setObjectName("regexplineedit" );
00312     QToolTip::add( m_ignoreRegExpEdit, i18n( "Add the regular expression here that you want to use\nto ignore lines that match it." ) );
00313     groupLayout->addWidget( m_ignoreRegExpEdit );
00314 
00315     if ( !KServiceTypeTrader::self()->query("KRegExpEditor/KRegExpEditor").isEmpty() )
00316     {
00317         // Ok editor is available, use it
00318         QPushButton* ignoreRegExpEditButton = new QPushButton( i18n( "&Edit..." ), page, "regexp_editor_button" );
00319         QToolTip::add( ignoreRegExpEditButton, i18n( "Clicking this will open a regular expression dialog where\nyou can graphically create regular expressions." ) );
00320         groupLayout->addWidget( ignoreRegExpEditButton );
00321         connect( ignoreRegExpEditButton, SIGNAL( clicked() ), this, SLOT( slotShowRegExpEditor() ) );
00322     }
00323 
00324     KButtonGroup* moreOptionButtonGroup = new KButtonGroup( page );
00325     layout->addWidget( moreOptionButtonGroup );
00326     bgLayout = new QVBoxLayout( moreOptionButtonGroup );
00327     moreOptionButtonGroup->setTitle( i18n( "Whitespace" ) );
00328     //moreOptionButtonGroup->setMargin( KDialog::marginHint() );
00329 
00330     m_tabsCheckBox        = new QCheckBox( i18n( "E&xpand tabs to spaces in output" ), moreOptionButtonGroup );
00331     QToolTip::add( m_tabsCheckBox, i18n( "This option corresponds to the -t diff option." ) );
00332     bgLayout->addWidget( m_tabsCheckBox );
00333     m_linesCheckBox       = new QCheckBox( i18n( "I&gnore added or removed empty lines" ), moreOptionButtonGroup );
00334     QToolTip::add( m_linesCheckBox, i18n( "This option corresponds to the -B diff option." ) );
00335     bgLayout->addWidget( m_linesCheckBox );
00336     m_whitespaceCheckBox  = new QCheckBox( i18n( "Ig&nore changes in the amount of whitespace" ), moreOptionButtonGroup );
00337     QToolTip::add( m_whitespaceCheckBox, i18n( "This option corresponds to the -b diff option." ) );
00338     bgLayout->addWidget( m_whitespaceCheckBox );
00339     m_allWhitespaceCheckBox = new QCheckBox( i18n( "Ign&ore all whitespace" ), moreOptionButtonGroup );
00340     QToolTip::add( m_allWhitespaceCheckBox, i18n( "This option corresponds to the -w diff option." ) );
00341     bgLayout->addWidget( m_allWhitespaceCheckBox );
00342     m_ignoreTabExpansionCheckBox = new QCheckBox( i18n( "Igno&re changes due to tab expansion" ), moreOptionButtonGroup );
00343     QToolTip::add( m_ignoreTabExpansionCheckBox, i18n( "This option corresponds to the -E diff option." ) );
00344     bgLayout->addWidget( m_ignoreTabExpansionCheckBox );
00345 
00346     layout->addStretch( 1 );
00347     page->setMinimumSize( sizeHintForWidget( page ) );
00348 
00349     m_tabWidget->addTab( page, i18n( "Options" ) );
00350 }
00351 
00352 void DiffPage::addExcludeTab()
00353 {
00354     QWidget* page = new QWidget( this );
00355     QVBoxLayout* layout = new QVBoxLayout( page );
00356     layout->setSpacing( KDialog::spacingHint() );
00357     layout->setMargin( KDialog::marginHint() );
00358 
00359     Q3HGroupBox* excludeFilePatternGroupBox = new Q3HGroupBox( page );
00360     excludeFilePatternGroupBox->setTitle( i18n( "File Pattern to Exclude" ) );
00361     m_excludeFilePatternCheckBox = new QCheckBox( "", excludeFilePatternGroupBox );
00362     QToolTip::add( m_excludeFilePatternCheckBox, i18n( "If this is checked you can enter a shell pattern in the text box on the right or select entries from the list." ) );
00363     m_excludeFilePatternEditListBox = new KEditListBox( excludeFilePatternGroupBox );
00364     m_excludeFilePatternEditListBox->setObjectName( "exclude_file_pattern_editlistbox" );
00365     m_excludeFilePatternEditListBox->setButtons( KEditListBox::Add|KEditListBox::Remove );
00366     m_excludeFilePatternEditListBox->setCheckAtEntering( false );
00367     QToolTip::add( m_excludeFilePatternEditListBox, i18n( "Here you can enter or remove a shell pattern or select one or more entries from the list." ) );
00368     layout->addWidget( excludeFilePatternGroupBox );
00369 
00370 
00371     connect( m_excludeFilePatternCheckBox, SIGNAL(toggled(bool)), this, SLOT(slotExcludeFilePatternToggled(bool)));
00372 
00373     Q3HGroupBox* excludeFileNameGroupBox = new Q3HGroupBox( page );
00374     excludeFileNameGroupBox->setTitle( i18n( "File with Filenames to Exclude" ) );
00375     m_excludeFileCheckBox     = new QCheckBox( "", excludeFileNameGroupBox );
00376     QToolTip::add( m_excludeFileCheckBox, i18n( "If this is checked you can enter a filename in the combo box on the right." ) );
00377     m_excludeFileURLComboBox  = new KUrlComboBox( KUrlComboBox::Files, true, excludeFileNameGroupBox );
00378     m_excludeFileURLComboBox->setObjectName( "exclude_file_urlcombo" );
00379     QToolTip::add( m_excludeFileURLComboBox, i18n( "Here you can enter the URL of a file with shell patterns to ignore during the comparison of the folders." ) );
00380     m_excludeFileURLRequester = new KUrlRequester( m_excludeFileURLComboBox, excludeFileNameGroupBox);
00381     m_excludeFileURLRequester->setObjectName("exclude_file_name_urlrequester" );
00382     QToolTip::add( m_excludeFileURLRequester, i18n( "Any file you select in the dialog that pops up when you click it will be put in the dialog to the left of this button." ) );
00383     layout->addWidget( excludeFileNameGroupBox );
00384 
00385     connect( m_excludeFileCheckBox, SIGNAL(toggled(bool)), this, SLOT(slotExcludeFileToggled(bool)));
00386 
00387     layout->addStretch( 1 );
00388     page->setMinimumSize( sizeHintForWidget( page ) );
00389 
00390     m_tabWidget->addTab( page, i18n( "Exclude" ) );
00391 }
00392 
00393 #include "diffpage.moc"

kompare

Skip menu "kompare"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members

kdesdk

Skip menu "kdesdk"
  • kapptemplate
  • kate
  •     kate
  • kbugbuster
  • kcachegrind
  • kompare
  • lokalize
  • umbrello
  •   umbrello
Generated for kdesdk by doxygen 1.5.7
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal