/*******************************************************************
Part of the Fritzing project - http://fritzing.org
Copyright (c) 2007-2014 Fachhochschule Potsdam - http://fh-potsdam.de
Fritzing is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Fritzing is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Fritzing. If not, see .
********************************************************************
$Revision: 6904 $:
$Author: irascibl@gmail.com $:
$Date: 2013-02-26 16:26:03 +0100 (Di, 26. Feb 2013) $
********************************************************************/
#include "autorouteprogressdialog.h"
#include "../debugdialog.h"
#include "zoomcontrols.h"
#include
#include
#include
#include
#include
#include
static const int ScrollAmount = 40;
ArrowButton::ArrowButton(int scrollX, int scrollY, ZoomableGraphicsView * view, const QString & path) : QLabel() {
m_scrollX = scrollX;
m_scrollY = scrollY;
m_view = view;
setPixmap(QPixmap(path));
}
void ArrowButton::mousePressEvent(QMouseEvent *event) {
Q_UNUSED(event);
if (m_scrollX != 0) {
QScrollBar * scrollBar = m_view->horizontalScrollBar();
scrollBar->setValue(scrollBar->value() - m_scrollX);
}
else if (m_scrollY != 0) {
QScrollBar * scrollBar = m_view->verticalScrollBar();
scrollBar->setValue(scrollBar->value() - m_scrollY);
}
}
/////////////////////////////////////
AutorouteProgressDialog::AutorouteProgressDialog(const QString & title, bool zoomAndPan, bool stopButton, bool bestButton, bool spin, ZoomableGraphicsView * view, QWidget *parent) : QDialog(parent)
{
Qt::WindowFlags flags = windowFlags();
flags ^= Qt::WindowCloseButtonHint;
flags ^= Qt::WindowContextHelpButtonHint;
setWindowFlags(flags);
this->setWindowTitle(title);
QVBoxLayout * vLayout = new QVBoxLayout(this);
m_progressBar = new QProgressBar(this);
vLayout->addWidget(m_progressBar);
m_spinLabel = NULL;
m_spinBox = NULL;
if (spin) {
QFrame * frame = new QFrame(this);
m_spinLabel = new QLabel(this);
m_spinBox = new QSpinBox(this);
m_spinBox->setMinimum(1);
m_spinBox->setMaximum(99999);
connect(m_spinBox, SIGNAL(valueChanged(int)), this, SLOT(internalSpinChange(int)));
QHBoxLayout * hBoxLayout = new QHBoxLayout(frame);
hBoxLayout->addStretch();
hBoxLayout->addWidget(m_spinLabel);
hBoxLayout->addWidget(m_spinBox);
vLayout->addWidget(frame);
}
m_message = new QLabel(this);
vLayout->addWidget(m_message);
m_message2 = new QLabel(this);
vLayout->addWidget(m_message2);
if (zoomAndPan) {
QGroupBox * groupBox = new QGroupBox(tr("zoom and pan controls"));
QHBoxLayout *lo2 = new QHBoxLayout(groupBox);
lo2->setSpacing(1);
lo2->setMargin(0);
//TODO: use the zoom slider instead
lo2->addWidget(new ZoomControls(view, groupBox));
lo2->addSpacerItem(new QSpacerItem ( 10, 0, QSizePolicy::Expanding));
QFrame * frame = new QFrame();
QGridLayout *gridLayout = new QGridLayout(frame);
QString imgPath = ":/resources/images/icons/arrowButton%1.png";
ArrowButton * label = new ArrowButton(0, -ScrollAmount, view, imgPath.arg("Up"));
gridLayout->addWidget(label, 0, 1);
label = new ArrowButton(0, ScrollAmount, view, imgPath.arg("Down"));
gridLayout->addWidget(label, 2, 1);
label = new ArrowButton(-ScrollAmount, 0, view, imgPath.arg("Left"));
gridLayout->addWidget(label, 0, 0, 3, 1);
label = new ArrowButton(ScrollAmount, 0, view, imgPath.arg("Right"));
gridLayout->addWidget(label, 0, 2, 3, 1);
lo2->addWidget(frame);
vLayout->addSpacing(7);
vLayout->addWidget(groupBox);
vLayout->addSpacing(7);
}
//QPushButton * button = new QPushButton(tr("Skip current trace"), this);
//connect(button, SIGNAL(clicked()), this, SLOT(sendSkip()));
//vLayout->addWidget(button);
m_buttonBox = new QDialogButtonBox(stopButton ? QDialogButtonBox::Ok | QDialogButtonBox::Cancel : QDialogButtonBox::Cancel);
if (stopButton) {
m_buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Stop Now"));
connect(m_buttonBox, SIGNAL(accepted()), this, SLOT(sendStop()));
}
if (bestButton) {
QPushButton * best = new QPushButton(tr("Best So Far"));
m_buttonBox->addButton(best, QDialogButtonBox::ActionRole);
connect(best, SIGNAL(clicked()), this, SLOT(sendBest()));
}
m_buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
connect(m_buttonBox, SIGNAL(rejected()), this, SLOT(sendCancel()));
vLayout->addWidget(m_buttonBox);
this->setLayout(vLayout);
}
AutorouteProgressDialog::~AutorouteProgressDialog() {
}
void AutorouteProgressDialog::setMinimum(int minimum) {
m_progressBar->setMinimum(minimum);
}
void AutorouteProgressDialog::setMaximum(int maximum) {
m_progressBar->setMaximum(maximum);
}
void AutorouteProgressDialog::setValue(int value) {
m_progressBar->setValue(value);
}
void AutorouteProgressDialog::sendSkip() {
emit skip();
}
void AutorouteProgressDialog::sendCancel() {
emit cancel();
}
void AutorouteProgressDialog::sendStop() {
emit stop();
}
void AutorouteProgressDialog::sendBest() {
emit best();
}
void AutorouteProgressDialog::closeEvent(QCloseEvent *event)
{
sendCancel();
QDialog::closeEvent(event);
}
void AutorouteProgressDialog::setMessage(const QString & text)
{
m_message->setText(text);
}
void AutorouteProgressDialog::setMessage2(const QString & text)
{
m_message2->setText(text);
}
void AutorouteProgressDialog::setSpinLabel(const QString & text)
{
m_spinLabel->setText(text);
}
void AutorouteProgressDialog::setSpinValue(int value)
{
m_spinBox->setValue(value);
}
void AutorouteProgressDialog::internalSpinChange(int value) {
emit spinChange(value);
}
void AutorouteProgressDialog::disableButtons() {
m_buttonBox->setEnabled(false);
}