Skip to content

Commit

Permalink
Added list of read file and possibility to switch between them.
Browse files Browse the repository at this point in the history
  • Loading branch information
danfis committed Oct 19, 2007
1 parent 1bc93fc commit a4389bf
Show file tree
Hide file tree
Showing 9 changed files with 95 additions and 12 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -4,4 +4,5 @@ tests/test
qshowdiff
doc/*.png
*~
src/qt/*.moc

8 changes: 5 additions & 3 deletions src/Makefile
@@ -1,4 +1,6 @@
CC = g++
MOC = /opt/qt4/bin/moc

CXXFLAGS = -Wall -Wno-long-long -pedantic -O2
DEBUGFLAGS = -g
QT_INCLUDE = -DQT_SHARED -I/opt/qt4/include -I/opt/qt4/include/QtCore \
Expand Down Expand Up @@ -35,9 +37,9 @@ objs/%.o: %.cpp %.h
objs/%.o: %.cpp
$(CC) $(ALL_FLAGS) -c -o $@ $<

#qt/diff_view.cpp: qt/diff_view.moc
#qt/diff_view.moc: qt/diff_view.h
# moc -p'.' $< > $@
qt/diff_view.cpp: qt/diff_view.moc
qt/diff_view.moc: qt/diff_view.h
$(MOC) -p'.' $< > $@

clean:
rm -f objs/*.o
Expand Down
11 changes: 11 additions & 0 deletions src/diff/diff.cpp
Expand Up @@ -29,6 +29,17 @@ int Diff::paintModified(QPainter &painter) const
return offset;
}


int Diff::paintOriginal(int pos, QPainter &painter) const
{
return VectorOfPointers<File>::_get(pos)->paintOriginal(painter, 0);
}

int Diff::paintModified(int pos, QPainter &painter) const
{
return VectorOfPointers<File>::_get(pos)->paintModified(painter, 0);
}

// static member
Diff Diff::diff;

5 changes: 5 additions & 0 deletions src/diff/diff.h
Expand Up @@ -25,8 +25,13 @@ class Diff : public VectorOfPointers<File>{

void addFile(File *f){ VectorOfPointers<File>::_add(f); }
int numFiles() const { return VectorOfPointers<File>::_size(); }
QString getFile(int pos) const
{ return VectorOfPointers<File>::_get(pos)->getFilename(); }

int paintOriginal(QPainter &) const;
int paintModified(QPainter &) const;
int paintOriginal(int pos, QPainter &) const;
int paintModified(int pos, QPainter &) const;
};

#endif
5 changes: 5 additions & 0 deletions src/diff/file.h
Expand Up @@ -23,6 +23,11 @@ class File : public VectorOfPointers<Hunk>{
void addHunk(Hunk *h){ VectorOfPointers<Hunk>::_add(h);}
int numHunks() const { return VectorOfPointers<Hunk>::_size();}

/**
* Return filename.
*/
QString getFilename() const { return _filename; }

int paintOriginal(QPainter &original, int offset) const;
int paintModified(QPainter &original, int offset) const;
};
Expand Down
5 changes: 5 additions & 0 deletions src/diff/utils.h
Expand Up @@ -86,6 +86,11 @@ class VectorOfPointers{
*/
int _size() const { return _list.size(); }

/**
* Returns Type* at position pos in _list.
*/
Type *_get(int pos) const { return _list[pos]; }

list_iterator_t _begin() const { return _list.begin();}
list_iterator_t _end() const { return _list.end();}

Expand Down
33 changes: 27 additions & 6 deletions src/qt/diff_view.cpp
Expand Up @@ -5,21 +5,22 @@

#include "../debug.h"
#include "diff_view.h"
#include "diff_view.moc"

DiffViewFrame::DiffViewFrame(QWidget *parent) : QWidget(parent)
{
QVBoxLayout *layout = new QVBoxLayout();
QSplitter *splitter = new QSplitter(Qt::Horizontal);
DiffView *original = new DiffView(true);
DiffView *modified = new DiffView(false);
_original = new DiffView(true);
_modified = new DiffView(false);
QScrollArea *orig = new QScrollArea();
QScrollArea *modif = new QScrollArea();


orig->setWidget(original);
orig->setWidget(_original);
orig->setWidgetResizable(true);
orig->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
modif->setWidget(modified);
modif->setWidget(_modified);
modif->setWidgetResizable(true);

splitter->addWidget(orig);
Expand All @@ -45,18 +46,38 @@ DiffViewFrame::DiffViewFrame(QWidget *parent) : QWidget(parent)
SLOT(setValue(int)));
}

void DiffViewFrame::changeFile(int num) const
{
if (num != -1){
// num - 1 is there because num==0 is for 'All files'
_original->setCurrentFile(num - 1);
_modified->setCurrentFile(num - 1);
}
}

/* DiffView */
void DiffView::paintEvent(QPaintEvent *e)
{
int height;
QPainter painter(this);
if (_original){
height = Diff::instance()->paintOriginal(painter);
if (_current_file == -1)
height = Diff::instance()->paintOriginal(painter);
else
height = Diff::instance()->paintOriginal(_current_file, painter);
}else{
height = Diff::instance()->paintModified(painter);
if (_current_file == -1)
height = Diff::instance()->paintModified(painter);
else
height = Diff::instance()->paintModified(_current_file, painter);
}

setFixedHeight(height);
setMinimumWidth(Settings::max_line_width);
}

void DiffView::setCurrentFile(int num)
{
_current_file = num;
repaint();
}
23 changes: 22 additions & 1 deletion src/qt/diff_view.h
Expand Up @@ -6,18 +6,39 @@
#include <QScrollArea>
#include "../diff/diff.h"

class DiffView;

class DiffViewFrame : public QWidget{
Q_OBJECT
private:
DiffView *_original;
DiffView *_modified;


public:
DiffViewFrame(QWidget *parent = 0);

public slots:
/**
* Change which file will be displayed.
*/
void changeFile(int) const;
};

class DiffView : public QWidget{
private:
bool _original;

/**
* Number of current file. -1 if all files.
*/
int _current_file;

public:
DiffView(bool original, QWidget *parent = 0) : QWidget(parent),
_original(original) {}
_original(original), _current_file(-1) {}
void paintEvent(QPaintEvent *e);

void setCurrentFile(int);
};
#endif
16 changes: 14 additions & 2 deletions src/qt/main_window.cpp
Expand Up @@ -2,18 +2,30 @@
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QListWidget> //TODO: change to QListWidget
#include "main_window.h"
#include "diff_view.h"

MainWindow::MainWindow()
{
QSplitter *splitter = new QSplitter(Qt::Vertical);
QWidget *top = new QWidget();
QListWidget *top = new QListWidget();
DiffViewFrame *bottom = new DiffViewFrame();

top->setMaximumHeight(100);
DBG("getFile(0) - " << Diff::instance()->getFile(0).toStdString());
top->insertItem(0, new QListWidgetItem("All files"));
int len = Diff::instance()->numFiles();
for (int i=0; i < len; i++){
top->insertItem(i+1, new QListWidgetItem(Diff::instance()->getFile(i)));
}

splitter->addWidget(top);
splitter->addWidget(bottom);
splitter->setStretchFactor(0,1);
splitter->setStretchFactor(1,10);

setCentralWidget(splitter);

connect(top, SIGNAL(currentRowChanged(int)), bottom,
SLOT(changeFile(int)));
}

0 comments on commit a4389bf

Please sign in to comment.