1 
2 /*
3  * CodeQuery
4  * Copyright (C) 2013-2017 ruben2020 https://github.com/ruben2020/
5  *
6  * This Source Code Form is subject to the terms of the Mozilla Public
7  * License, v. 2.0. If a copy of the MPL was not distributed with this
8  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9  *
10  */
11 
12 
13 #include "ui_graphDialog.h"
14 #include "graphdialog.h"
15 #include "showgraph.h"
16 
17 
cqDialogGraph(QWidget * parent)18 cqDialogGraph::cqDialogGraph(QWidget *parent)
19 :QDialog(parent)
20 ,dialog_ui(new Ui::DialogGraph)
21 ,m_scaleFactor(5.0)
22  {
23 	dialog_ui->setupUi(this);
24 	connect(dialog_ui->pushButtonClose, SIGNAL(clicked()),
25 		this, SLOT(accept()));
26 	connect(dialog_ui->pushButtonZoomOut, SIGNAL(clicked()),
27 		this, SLOT(zoomout()));
28 	connect(dialog_ui->pushButtonZoomIn, SIGNAL(clicked()),
29 		this, SLOT(zoomin()));
30 	connect(dialog_ui->pushButtonSave, SIGNAL(clicked()),
31 		this, SLOT(savetoimagefile()));
32 	connect(dialog_ui->pushButtonSaveDot, SIGNAL(clicked()),
33 		this, SLOT(savetodotfile()));
34 	connect(dialog_ui->comboBoxNbrOfLevels, SIGNAL(currentIndexChanged(int)),
35 		this, SLOT(numberOfLevelsChanged(int)));
36 
37 }
38 
~cqDialogGraph()39 cqDialogGraph::~cqDialogGraph()
40  {
41 	disconnect();
42 	delete dialog_ui;
43  }
44 
setupGraphFromXML(QStringList & grpxml,QStringList & grpdot,QString & desc)45 void cqDialogGraph::setupGraphFromXML(QStringList& grpxml, QStringList& grpdot, QString& desc)
46 {
47 	m_grpxml = grpxml;
48 	m_grpdot = grpdot;
49 	m_img = showgraph::convertToImage(grpxml[0]);
50 	dialog_ui->labelGraph->setPixmap(QPixmap::fromImage(m_img));
51 	dialog_ui->labelGraph->setMask(dialog_ui->labelGraph->pixmap()->mask());
52 	if (desc.length() > 0) dialog_ui->labelDesc->setText(desc);
53 	for (unsigned int i=0; i < grpxml.size(); i++) dialog_ui->comboBoxNbrOfLevels->addItem(QString::number(i+1));
54 	dialog_ui->comboBoxNbrOfLevels->setCurrentIndex(0);
55 	show();
56 	adjustScrollBar(dialog_ui->scrollArea->horizontalScrollBar(), m_scaleFactor/5);
57 	adjustScrollBar(dialog_ui->scrollArea->verticalScrollBar(), m_scaleFactor/5);
58 }
59 
numberOfLevelsChanged(int num)60 void cqDialogGraph::numberOfLevelsChanged(int num)
61 {
62 	m_img = showgraph::convertToImage(m_grpxml[dialog_ui->comboBoxNbrOfLevels->currentIndex()]);
63 	dialog_ui->labelGraph->setPixmap(QPixmap::fromImage(m_img));
64 	dialog_ui->labelGraph->setMask(dialog_ui->labelGraph->pixmap()->mask());
65 	adjustScrollBar(dialog_ui->scrollArea->horizontalScrollBar(), m_scaleFactor/5);
66 	adjustScrollBar(dialog_ui->scrollArea->verticalScrollBar(), m_scaleFactor/5);
67 }
68 
zoomout()69 void cqDialogGraph::zoomout()
70 {
71      scaleImage(-1);
72 }
73 
zoomin()74 void cqDialogGraph::zoomin()
75 {
76      scaleImage(1);
77 }
78 
savetoimagefile()79 void cqDialogGraph::savetoimagefile()
80 {
81 	QString filetype = tr("Images");
82 	filetype += " (*.png *.jpg *.bmp *.tiff)";
83 	QString fileName =
84 	QFileDialog::getSaveFileName( this, tr("Export Image"),
85 					QDir::currentPath(),
86 					filetype);
87 	if (fileName.isEmpty()) return;
88 
89 	QMessageBox msgBox(this);
90 	msgBox.setIcon(QMessageBox::Warning);
91 	msgBox.setStandardButtons(QMessageBox::Ok);
92 	QImageWriter writer( fileName);
93 	if ((writer.canWrite() && writer.write(m_img)) == false)
94 	{
95 		msgBox.setText(tr("File could not be saved!"));
96 		msgBox.exec();
97 	}
98 }
99 
savetodotfile()100 void cqDialogGraph::savetodotfile()
101 {
102 	QString fileName =
103 	QFileDialog::getSaveFileName( this, tr("Export DOT file"),
104 					QDir::currentPath(),
105 					"Graphviz DOT (*.dot)");
106 	if (fileName.isEmpty()) return;
107 
108 	QFile outfile(fileName);
109 	QMessageBox msgBox(this);
110 	msgBox.setIcon(QMessageBox::Warning);
111 	msgBox.setStandardButtons(QMessageBox::Ok);
112 	if (outfile.open(QIODevice::WriteOnly | QIODevice::Text) == false)
113 	{
114 		msgBox.setText(tr("File could not be saved!"));
115 		msgBox.exec();
116 		return;
117 	}
118 	QTextStream out(&outfile);
119 	out << m_grpdot[dialog_ui->comboBoxNbrOfLevels->currentIndex()];
120 	outfile.close();
121 }
122 
scaleImage(double factor)123 void cqDialogGraph::scaleImage(double factor)
124 {
125      QPixmap p = QPixmap::fromImage(m_img);
126      m_scaleFactor += factor;
127      m_scaleFactor = (m_scaleFactor < 1.0) ? 1.0 : m_scaleFactor;
128      dialog_ui->labelGraph->setPixmap(p.scaled((m_scaleFactor/5) * p.size(), Qt::KeepAspectRatio));
129      adjustScrollBar(dialog_ui->scrollArea->horizontalScrollBar(), m_scaleFactor/5);
130      adjustScrollBar(dialog_ui->scrollArea->verticalScrollBar(), m_scaleFactor/5);
131 }
132 
adjustScrollBar(QScrollBar * scrollBar,double factor)133 void cqDialogGraph::adjustScrollBar(QScrollBar *scrollBar, double factor)
134 {
135 	int minim = scrollBar->minimum();
136 	scrollBar->setValue((scrollBar->maximum() - minim)/2 + minim);
137 }
138 
139