Skip to content

Commit

Permalink
finished #4
Browse files Browse the repository at this point in the history
  • Loading branch information
jurplel committed Mar 11, 2018
1 parent 3062d78 commit 444ed35
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 19 deletions.
26 changes: 14 additions & 12 deletions mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,26 @@
#include <QDebug>
#include <QPixmap>
#include <QGraphicsScene>
#include <QClipboard>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

//enable drag&dropping
setAcceptDrops(true);

//hide menubar for non-global applications
ui->menuBar->hide();

//default variable values
isPixmapLoaded = false;
//Keyboard Shortcuts
ui->actionPaste->setShortcut(Qt::Key_V | Qt::CTRL);

//context menu items
ui->graphicsView->addAction(ui->actionOpen);
ui->graphicsView->addAction(ui->actionPaste);
ui->graphicsView->addAction(ui->actionAbout);
ui->graphicsView->addAction(ui->actionAbout_Qt);

Expand All @@ -35,15 +40,6 @@ MainWindow::~MainWindow()
delete ui;
}

void MainWindow::resizeEvent(QResizeEvent *event)
{
QMainWindow::resizeEvent(event);
if(isPixmapLoaded)
{
ui->graphicsView->resetScale();
}
}

void MainWindow::pickFile()
{
QString fileName = QFileDialog::getOpenFileName(this,
Expand All @@ -55,9 +51,10 @@ void MainWindow::pickFile()
void MainWindow::openFile(QString fileName)
{
ui->graphicsView->loadFile(fileName);
isPixmapLoaded = true;
}

// Actions

void MainWindow::on_actionOpen_triggered()
{
pickFile();
Expand All @@ -72,3 +69,8 @@ void MainWindow::on_actionAbout_triggered()
{
QMessageBox::about(ui->centralWidget, QString("About qView"), QString("qView pre-release %1 by jurplel").arg(VERSION));
}

void MainWindow::on_actionPaste_triggered()
{
ui->graphicsView->loadMimeData(QApplication::clipboard()->mimeData());
}
9 changes: 4 additions & 5 deletions mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ class MainWindow : public QMainWindow

void openFile(QString fileName);

protected:
void resizeEvent(QResizeEvent *event) override;
bool getIsPixmapLoaded() const;
void setIsPixmapLoaded(bool value);

private slots:
void on_actionOpen_triggered();
Expand All @@ -29,16 +29,15 @@ private slots:

void on_actionAbout_triggered();

void on_actionPaste_triggered();

private:
Ui::MainWindow *ui;

void pickFile();

QGraphicsScene *scene;
QPixmap loadedPixmap;

bool isPixmapLoaded;

};

#endif // MAINWINDOW_H
12 changes: 12 additions & 0 deletions mainwindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,14 @@
<addaction name="actionAbout"/>
<addaction name="actionAbout_Qt"/>
</widget>
<widget class="QMenu" name="menuEdit">
<property name="title">
<string>Edit</string>
</property>
<addaction name="actionPaste"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuEdit"/>
<addaction name="menuHelp"/>
</widget>
<action name="actionOpen">
Expand All @@ -136,6 +143,11 @@
<string>About &amp;Qt</string>
</property>
</action>
<action name="actionPaste">
<property name="text">
<string>&amp;Paste</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
Expand Down
56 changes: 54 additions & 2 deletions qvgraphicsview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,47 @@
QVGraphicsView::QVGraphicsView(QWidget *parent) : QGraphicsView(parent)
{
scaleFactor = 0.25;
isPixmapLoaded = false;
}

void QVGraphicsView::resizeEvent(QResizeEvent *event)
{
QGraphicsView::resizeEvent(event);
if(isPixmapLoaded)
{
resetScale();
}
}

void QVGraphicsView::dropEvent(QDropEvent *event)
{
loadMimeData(event->mimeData());
}

void QVGraphicsView::dragEnterEvent(QDragEnterEvent *event)
{
if(event->mimeData()->hasUrls())
{
event->acceptProposedAction();
}
}

void QVGraphicsView::dragMoveEvent(QDragMoveEvent *event)
{
event->acceptProposedAction();
}

void QVGraphicsView::dragLeaveEvent(QDragLeaveEvent *event)
{
event->accept();
}

void QVGraphicsView::wheelEvent(QWheelEvent *event)
{
qDebug()<< QString("before scroll scale: ") << getCurrentScale();
qDebug()<< QString("before matrix: ") << matrix();

int DeltaY = event->angleDelta().y();
const int DeltaY = event->angleDelta().y();

if (getCurrentScale() <= 1.0)
{
Expand Down Expand Up @@ -46,6 +79,24 @@ void QVGraphicsView::wheelEvent(QWheelEvent *event)
qDebug() << QString("after scroll scale: ") << getCurrentScale();
}

void QVGraphicsView::loadMimeData(const QMimeData *mimeData)
{
if (mimeData->hasUrls())
{
QStringList pathList;
QList<QUrl> urlList = mimeData->urls();

for (int i = 0; i < urlList.size() && i < 32; ++i)
{
pathList.append(urlList.at(i).toLocalFile());
}
if (!pathList.isEmpty())
{
loadFile(pathList.first());
}
}
}

void QVGraphicsView::loadFile(QString fileName)
{
if (fileName.isEmpty())
Expand All @@ -62,6 +113,7 @@ void QVGraphicsView::loadFile(QString fileName)
loadedPixmapItem->setOffset((50000.0 - loadedPixmap.width()/2), (50000.0 - loadedPixmap.height()/2));
resetScale();
loadedPixmapItem->setTransformationMode(Qt::SmoothTransformation);
isPixmapLoaded = true;
}

void QVGraphicsView::resetScale()
Expand All @@ -72,7 +124,7 @@ void QVGraphicsView::resetScale()
}


// getters & setters
// Getters & Setters

QGraphicsPixmapItem *QVGraphicsView::getLoadedPixmapItem() const
{
Expand Down
15 changes: 15 additions & 0 deletions qvgraphicsview.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define QVGRAPHICSVIEW_H

#include <QGraphicsView>
#include <QMimeData>

class QVGraphicsView : public QGraphicsView
{
Expand All @@ -13,6 +14,8 @@ class QVGraphicsView : public QGraphicsView

void resetScale();

void loadMimeData(const QMimeData *mimeData);

qreal getCurrentScale() const;
void setCurrentScale(const qreal &value);

Expand All @@ -25,6 +28,16 @@ class QVGraphicsView : public QGraphicsView
protected:
virtual void wheelEvent(QWheelEvent *event);

void resizeEvent(QResizeEvent *event);

void dropEvent(QDropEvent *event) override;

void dragEnterEvent(QDragEnterEvent *event) override;

void dragMoveEvent(QDragMoveEvent *event) override;

void dragLeaveEvent(QDragLeaveEvent *event) override;

private:
qreal currentScale;
qreal scaleFactor;
Expand All @@ -33,5 +46,7 @@ class QVGraphicsView : public QGraphicsView
QGraphicsPixmapItem *loadedPixmapItem;
QTransform fittedMatrix;
QTransform scaledMatrix;

bool isPixmapLoaded;
};
#endif // QVGRAPHICSVIEW_H

0 comments on commit 444ed35

Please sign in to comment.