From 3dfcf983ad5d32205e48c36467952b3c25c1c758 Mon Sep 17 00:00:00 2001
From: Rtch90 <ritchie.cunningham@protonmail.com>
Date: Mon, 15 Dec 2014 17:25:30 +0000
Subject: [PATCH] [Add] GUI Layout. [Add] Integrated tableview and files.

---
 img/about.png           | Bin 0 -> 3223 bytes
 img/export.png          | Bin 0 -> 2203 bytes
 img/exportall.png       | Bin 0 -> 1094 bytes
 img/hpdf.png            | Bin 0 -> 3981 bytes
 src/pdf_file.cpp        |  29 +++++++++++++++++++++++++++++
 src/pdf_file.h          |  18 ++++++++++++++++++
 src/pdf_page_widget.cpp |  20 ++++++++++++++++++++
 src/pdf_page_widget.h   |  21 +++++++++++++++++++++
 8 files changed, 88 insertions(+)
 create mode 100644 img/about.png
 create mode 100644 img/export.png
 create mode 100644 img/exportall.png
 create mode 100644 img/hpdf.png
 create mode 100644 src/pdf_file.cpp
 create mode 100644 src/pdf_file.h
 create mode 100644 src/pdf_page_widget.cpp
 create mode 100644 src/pdf_page_widget.h

diff --git a/img/about.png b/img/about.png
new file mode 100644
index 0000000000000000000000000000000000000000..766b8daee1483c93cb18d698d0aaa5958ad8f3bb
GIT binary patch
literal 3223
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
JPDHLkV1j2?(TD&5

literal 0
HcmV?d00001

diff --git a/img/export.png b/img/export.png
new file mode 100644
index 0000000000000000000000000000000000000000..4bf2cba36cd2399269fe4185724400ba1fa74513
GIT binary patch
literal 2203
zcmV;M2xRw(P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00004b3#c}2nYxW
zd<bNS00009a7bBm0002U0002U0Tlh$I{*Lx8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H12pCC3K~!ko)tYN?Rn-;8e|w*E?khJWBoQzq5hH|9LU>eEgh0wz
zK7dpm&;*3~nla4S2Re56K>L9@#c4mZWppUjR>o?JQ0YvE&d{N))H1g68XSuXI1b3e
z3=|@S<UY=0?|wMvUT$9G9dOO8>@)l1?z8`E?f=?quXBXfny<1*zT#qD@8*gX4^1$`
zc{>du3cK7C*Y6O3?^_KTROUJmt#BMW?I6U5+EZIET)6bly?gh%{RJSdw}e(c+W6|s
znKPf9UpHTNo}Ca9DFg_C6cQmoNQpooq{!Y^TH|^Sp6lYeF0SX`x*n-ilHI%i>bAGH
znXc<OsbuPN<#GRx9XpN>nFkEhFv`lxWK~sF_vnR0W+p2oLWrR4+V8q9j%(vMHjd-q
zxHej29zJ}S%F5fVBS(%*JbmWO;f58<pWnXi?JXn10j(9Dr%=kn^E{MNLF;wtHw=SF
zIO=P}Z}aoxn3lmEm3J`b-g~K?HZ9LItzR@WKK#=WB(X**f3m*zd<~jVC`=?AArgra
zi^Wl%MxlsBBUD#cGktn(#4wHTJ+fliQzIIMwAMXZzjMEozBf#1B7{I7kcPwxS(H~)
zFtuiCL<-~OhKA+$jd&Q%SiLt8N-31qn5KzkS;XV{6crUwTr`@BiV7xAu8LrYolQ+m
z)__So7;k9pp|wOxjn*0|WzgzuznxBV_Uu{q?c0Z)wn?SaxSoq)7#M~mFP4{o>B~!v
zz#Ah9AeZDy353vqMhF?S8jzHZFJ;N%C0J$%D-^=A3^Z`%@)bTg_7QDuZNf5*CvF&k
zYu?aZtgp4Eq_~6y^S_Z3a{bozT<YrTP)h4V2M<oaDN>29B=0Wd`mGU=yl&onVVYL!
zh;yJfk_*w57a)UviIgCOz%(tSX(Vqd0J$X3<wXWiE?=}#gG(hw&KuoFD|NF2=q=<b
ztvY0|g96aj*2aNDhbSC1ih_cIAq7!TP)JEhaW>>;Kn$q|lv3<^XD3%%6ErSeN!j@E
zL%5W@4k0(g1FckV4(L08Xf#SV5@FSI3wdkvpIJ2L0p`rUdq@CSmeqa8)kEk3%d!vx
zFl`#w-oxMCdWZ8Dn_2bns^Q~@(nALznM{&Qrm$6#3+ZDlY^>(UyQlc!#`QeCstGCO
z0M~y3`T6<7b0*Fe{}kn-@vv2jGwmNTWnLx4WApgQrj4vw)kHKJ?e_!*@|!LIX3d&c
zYTlA~T?k<WXB3S<ht2SmKka#&e;s}otu^P*T|#LO*L4s=(%gQ6!U^Me=$Tr!y!<P^
z`_x*-jv3Rh3B+Qt!2{5SS2cHW)tt(?W}ea>LiiPikP&56Xbh$dA%tL&QBJ$}C61Ry
z2>$?oF?pI;UMr9MU>2KSdWkhFpP{y<X5`B%;fTq}^m`=SD;={vVNet<BR^Dv#0VxX
zvj9NQsxFd}?JR$G8o%HA3ZI>-=bQD5uKVCfB!X$0LkB<yvA#3&JzV~mIECY-C<u*1
z2m|TYReT^pJ;))&=gtA{d!m*DyZ+5bTRvvll4V(Mc9!z;@*x2rua!tZDcz&CB%5hT
zHRE_`Y%lGXNHW)+jpNy*+ytLqd7o*E^C_B|V#^y_vLU#$_5^I;9?+nbuRY0?<asQj
zSVkC`#V$HbMr+N<%ZC{=bpo?XO4#(<O>A8MBBKinhq*SYHOf<dnWG2wJVi_53mnJB
zcGK9djpN$bj(=@CzGrMV&DqxDv=^LU!Q-W@d*OLLJ9%>WYol7}UUxrRC26x;h#2u4
z%Zo0xBCRzo-Z_d#S1@jt$8X+zg{IYOx*anfk5f`oJoqJ~l&`(X)%0aV$V3PuOJadQ
z=VV@{2r;Sn9uDsQ0`J@{JlVLKRI2;KRX7|PyaxoLPag2?>(QRRLfDLD0bKKfCT0~-
zIche0e|Lu3vUxN-+i>0S!r|~xgi$}*^dSKZmQo6#B{JB&Gg25CM`@^*J-<H7V-G&f
zg1HMuW+PJ?kqMc7m6T3m3M(6jZ;ekPZr{c~wq9WU_ct(k(!`P5i6xL{6k_P>R`T$)
zL(;jLT}n0{0>Q+h**ND5IJ7&(&o}&%lHy`ULQDWpc>3fgmqe+k@}mBpmiZ%c7CB~E
zQ+&I@2hDq~y+aTtUmH_L^M9fJSOJ@Vwvk9AGP1dlN+kaC>3$wR@qWjo{?@U@O?TaS
zXZ`f)GXQw)53ezI%{8Kjj3_l@>-qTa3C4$Ju;Itg4ftFzC;&%~9<_lToo}vw?9oM2
zs;lZ3*3SoE$6vOgbsD8Kd7(n8i|RPE{VI#@evswgT7E;S8vV|ul-3kQ##0`h#e1)}
z@||z5<*u*KzF}pVUIBD2ZRCea7^7<0|7II6tb38$Dk_GxX4IQ>cuN_i237#fSo*-y
z#&|roIUbMO0LM-rkIuNiP#)RUq9&D2N|}~9d~eAGBoj%~ahzATZ~Nmqzy(~bJML7%
zufqrdgaeHL(F~B9nkluRP$&wZ^5l;MDyb7<lhoSj&45x$HQ=RTnrW@2w}1cs4*&<S
zfpkW-UtG-suz);ZRG@_cm{5S+k2=w4%uXf~eVl_AJWS<Gpud@N2uKCvq;fQ=wYGCP
zAcB960r8+UgF&(Y`Z0NOikcZ9381~7{ImiCxH%w_8SCc)Far>7&Vxh%z#AwB14Fa}
zR|CD=PY-0iSWvnLMrQz|03-N8GI04&9G1d?QQCm3x__U>^vQ6YqmTe(u8Rg7M1rvZ
dZ#X~c`9A}kQJ6*Z*9rgt002ovPDHLkV1f@{6bk?V

literal 0
HcmV?d00001

diff --git a/img/exportall.png b/img/exportall.png
new file mode 100644
index 0000000000000000000000000000000000000000..50011ddacd55fd7a63650dfc91cdddcd0544131b
GIT binary patch
literal 1094
zcmV-M1iAZ(P)<h;3K|Lk000e1NJLTq001xm001xu1ONa4{R=S+00002b3#c}2nbc|
zMg#x=010qNS#tmY1u*~s1u+4)?I=<J000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*
zE^l&Yo9;Xs000BUNkl<ZSi{wqyN(=16o$WZs=H?wV{sE80-_bh7Qzxj$jCA;fJ8t_
z#50f?;{YKLyZ`~@kXfXb5Xm}#0MNi91QB>e0LYTXnnj+SK8Ijxx~uv!p7EN1Y4vn>
zUC!nI&tF|F&VTz;{_hTov5x1beij}&xOrOuI3e#m0yPC&R0JHsahw_dPy=6IyYgjt
zUEqXl+q=7O-NAvK1%Z>CbU-iwDk@3}won34bD1OHInHzYLbyP5te0L2yBAkN<j_R9
zcml&wCQK;VW{U|EuCvcRe<4^h){!^vkbyT>i6<C=l7c`%iNyFEK?ry<R+{<6I6aOe
zE&wK!C{R)+6|#UZBss4|a>TNk;y@rUp+Zpt0h&HVn+(XDtjwVOZw*030VtAWNOZ6q
zE4Zw|K^LL|iPHlG8l8HC%R7v%1yMV^1_X`xTV$Z-5=YE<7@=N8a$i;-G9;^-KccLD
z;#a;wIAYE@UgQ_PPin76^5(L-!L^7ue8q0ekT(9DgETQ|WThw*N=hmer{+3yU?<9|
zHCHmv;ORkhFJ#pxI3xMEvP#VkRMBx|Rq#<<TW|3R(?%m%2FH<=@c@Qn+|PNYLm3=b
zRu&z22d?7Y$jbN@CvduPJV>(gAoDosb51d#Vw->ys4!*(1mR{+R?4$6e!~_$GEk=b
z+=s@9uW~ivr3Fr!|5R2jK+D&T3`2C-OihiDv?l9icD4@k^40tmNh~(cT1cqtw|Yae
z#Y`B}!FYW1qR(4AgUJz021tI5SE;f%Eh)}r`kqAI%4&*HaB4gQfLGXwPhHw9sgd+)
zDJ$ohB>qv7%Xq)aWVe+jyVSwJu3{+;V~<-6s`)j&>&nWqB6Va)2a5q`)&eJ&m94i_
ztOrW>Y<GR_m=TCJLqC^Q+NuQRL$6HR02uE;vWHW!g8^@IhWCbFnVX@X$cob$6N~k@
z2hpPY2mX$H5Dm1|L~@_YDs_B$Ob3gJPmhpkBNQ)Wb=U+mTNLh}BV}qE)>4GX-~6Ec
z)Tj{m&qk_fQ;L^T+q<~(8?DvB-PO<<AAw7f@1~Aqg_9<O33X48>nS;v)u@AWyw7*h
z$d4S3mS);AB&$&emQ?doE91@UtShVjPZsDs=>mMpV{3tu_WaDpfUqa4IryE&;gEx5
z5zEc_pvac8@*DC5b#}~snSlg~M_;I3_5yWPbtSl}iWVg*>WaFeqA2R3j){wjVPcq?
z*ufXSO__I&BWBE{-Aka&5#okAJ(L2C`!d5~oJP$&UhAgEFpq}+1?`U()bDg+Jpcdz
M07*qoM6N<$g5{I!qW}N^

literal 0
HcmV?d00001

diff --git a/img/hpdf.png b/img/hpdf.png
new file mode 100644
index 0000000000000000000000000000000000000000..bdf001aa3ead2ba2b1ccf9eac694de3b8b07723c
GIT binary patch
literal 3981
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

literal 0
HcmV?d00001

diff --git a/src/pdf_file.cpp b/src/pdf_file.cpp
new file mode 100644
index 0000000..56affc5
--- /dev/null
+++ b/src/pdf_file.cpp
@@ -0,0 +1,29 @@
+#include <QtGlobal>
+#include <QtWidgets>
+#include "pdf_file.h"
+
+PDFFile::PDFFile(const QString& fileName) {
+  /* Load PDF file. */
+  document = Poppler::Document::load(fileName);
+  if(!document || document->isLocked()) {
+    delete document;
+  }
+}
+
+QImage* PDFFile::getPageImage(int pageNumber) {
+  if(document == 0)
+    return NULL;
+
+  Poppler::Page* pdfPage = document->page(pageNumber);
+
+  if(pdfPage == 0)
+    return NULL;
+
+  QImage* image = new QImage();
+  *image = pdfPage->renderToImage();
+
+  delete pdfPage;
+
+  return image;
+}
+
diff --git a/src/pdf_file.h b/src/pdf_file.h
new file mode 100644
index 0000000..2cd240b
--- /dev/null
+++ b/src/pdf_file.h
@@ -0,0 +1,18 @@
+#pragma once
+#include <QObject>
+#include <poppler-qt5.h>
+
+class QString;
+class QImage;
+
+class PDFFile : public QObject {
+  Q_OBJECT
+public:
+  PDFFile(const QString& fileName);
+  QImage* getPageImage(int pageNumber);
+
+private:
+  Poppler::Document* document;
+  QString fileName;
+};
+
diff --git a/src/pdf_page_widget.cpp b/src/pdf_page_widget.cpp
new file mode 100644
index 0000000..4a09511
--- /dev/null
+++ b/src/pdf_page_widget.cpp
@@ -0,0 +1,20 @@
+#include <QtWidgets>
+#include "pdf_page_widget.h"
+
+PDFPageWidget::PDFPageWidget(QWidget* parent) :
+    QWidget(parent) {
+
+  this->resize(500, 600);
+}
+
+void PDFPageWidget::setPageImage(QImage* pageImage) {
+  image = pageImage;
+  pixmap = QPixmap::fromImage(*image);
+  update();
+}
+
+void PDFPageWidget::paintEvent(QPaintEvent* event) {
+  QPainter painter(this);
+  painter.drawPixmap(QRect(0, 0, pixmap.width(), pixmap.height()), pixmap);
+}
+
diff --git a/src/pdf_page_widget.h b/src/pdf_page_widget.h
new file mode 100644
index 0000000..bb3e35d
--- /dev/null
+++ b/src/pdf_page_widget.h
@@ -0,0 +1,21 @@
+#pragma once
+#include <QWidget>
+
+class QImage;
+class QPixmap;
+class QPaintEvent;
+
+class PDFPageWidget : public QWidget {
+  Q_OBJECT
+public:
+  PDFPageWidget(QWidget* parent = 0);
+  void setPageImage(QImage* pageImage);
+
+protected:
+  void paintEvent(QPaintEvent* event);
+
+private:
+  QImage* image;
+  QPixmap pixmap;
+};
+