KDevelop API Documentation

replaceview.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2003 by Jens Dagerbo                                    *
00003  *   jens.dagerbo@swipnet.se                                               *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  ***************************************************************************/
00011 
00012 #include <qheader.h>
00013 #include <qtextstream.h>
00014 #include <qdir.h>
00015 #include <qstringlist.h>
00016 #include <qregexp.h>
00017 #include <qpalette.h>
00018 
00019 #include "replaceitem.h"
00020 #include "replaceview.h"
00021 
00022 
00023 
00024 ReplaceItem * ReplaceView::firstChild() const
00025 {
00026     return static_cast<ReplaceItem*>( QListView::firstChild() );
00027 }
00028 
00029 
00030 ReplaceView::ReplaceView( QWidget * parent ) : KListView( parent ), _latestfile( 0 )
00031 {
00032     setSorting( -1 );
00033     addColumn( "" );
00034     header()->hide();
00035     setFullWidth(true);
00036 
00037     QPalette pal = palette();
00038     QColorGroup cg = pal.active();
00039     cg.setColor( QColorGroup::Highlight, Qt::lightGray );
00040     pal.setActive( cg );
00041     setPalette( pal );
00042 
00043     connect( this, SIGNAL( clicked( QListViewItem * ) ), SLOT( slotClicked( QListViewItem * ) ) );
00044     connect( this, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint &, int) ),
00045              SLOT( slotMousePressed(int, QListViewItem *, const QPoint &, int) ) );
00046 }
00047 
00048 void ReplaceView::makeReplacementsForFile( QTextStream & istream, QTextStream & ostream, ReplaceItem const * fileitem )
00049 {
00050     int line = 0;
00051 
00052     ReplaceItem const * lineitem = fileitem->firstChild();
00053     while ( lineitem )
00054     {
00055         if ( lineitem->isOn() )
00056         {
00057             while ( line < lineitem->line() )
00058             {
00059                 ostream << istream.readLine() << "\n";
00060                 line++;
00061             }
00062             // this is the hit
00063             ostream << istream.readLine().replace( _regexp, _replacement ) << "\n";
00064             line++;
00065         }
00066 
00067         lineitem = lineitem->nextSibling();
00068     }
00069 
00070     while ( !istream.atEnd() )
00071     {
00072         ostream << istream.readLine() << "\n";
00073     }
00074 }
00075 
00076 void ReplaceView::showReplacementsForFile( QTextStream & stream, QString const & file )
00077 {
00078     ReplaceItem * latestitem = 0;
00079 
00080     int line = 0;
00081     bool firstline = true;
00082 
00083     while ( !stream.atEnd() )
00084     {
00085         QString s = stream.readLine();
00086 
00087         if ( s.contains( _regexp ) > 0 )
00088         {
00089             s.replace( _regexp, _replacement );
00090 
00091             if ( firstline )
00092             {
00093                 _latestfile = new ReplaceItem( this, _latestfile, file );
00094                 firstline = false;
00095             }
00096             latestitem = new ReplaceItem( _latestfile, latestitem, file, s.stripWhiteSpace(), line );
00097             _latestfile->insertItem( latestitem );
00098         }
00099         line++;
00100     }
00101 }
00102 
00103 void ReplaceView::setReplacementData( QRegExp const & re, QString const & replacement )
00104 {
00105     _regexp = re;
00106     _replacement = replacement;
00107 }
00108 
00109 void ReplaceView::slotMousePressed(int btn, QListViewItem* i, const QPoint& pos, int col)
00110 {
00111     kdDebug(0) << "ReplaceView::slotMousePressed()" << endl;
00112 
00113     if ( ReplaceItem * item = dynamic_cast<ReplaceItem*>( i ) )
00114     {
00115         if ( btn == Qt::RightButton )
00116         {
00117             //        popup menu?
00118         }
00119         else if ( btn == Qt::LeftButton )
00120         {
00121             // map pos to item/column and call ReplacetItem::activate(pos)
00122             item->activate( col, viewport()->mapFromGlobal( pos ) - QPoint( 0, itemRect(item).top() ) );
00123         }
00124     }
00125 }
00126 
00127 void ReplaceView::slotClicked( QListViewItem * item )
00128 {
00129     kdDebug(0) << "ReplaceView::slotClicked()" << endl;
00130 
00131     if ( ReplaceItem * ri = dynamic_cast<ReplaceItem*>( item ) )
00132     {
00133         if ( ri->lineClicked() )
00134         {
00135             kdDebug(0) << "emitting editDocument" << endl;
00136             emit editDocument( ri->file(), ri->line() );
00137         }
00138     }
00139 }
00140 
00141 #include "replaceview.moc"
KDE Logo
This file is part of the documentation for KDevelop Version 3.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Mar 23 00:03:58 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003