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