src/dialogs.cpp

Thu, 11 Jan 2018 15:09:44 +0200

author
Santeri Piippo
date
Thu, 11 Jan 2018 15:09:44 +0200
changeset 1231
ce0c9f2e6b9c
parent 1222
34def2630300
permissions
-rw-r--r--

begin rendering rework

/*
 *  LDForge: LDraw parts authoring CAD
 *  Copyright (C) 2013 - 2018 Teemu Piippo
 *
 *  This program 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.
 *
 *  This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <QDialog>
#include <QLineEdit>
#include <QSpinBox>
#include <QDialogButtonBox>
#include <QFileDialog>
#include <QLabel>
#include <QPushButton>
#include <QBoxLayout>
#include <QGridLayout>
#include <QProgressBar>
#include <QCheckBox>
#include <QDesktopServices>
#include <QMessageBox>
#include <QUrl>
#include "dialogs.h"
#include "radioGroup.h"
#include "mainwindow.h"
#include "glRenderer.h"
#include "documentation.h"
#include "ldDocument.h"
#include "dialogs.h"
#include "ui_overlay.h"
#include "ui_extprogpath.h"
#include "ui_about.h"

extern const char* g_extProgPathFilter;

// =============================================================================
// =============================================================================
OverlayDialog::OverlayDialog(QWidget* parent, Qt::WindowFlags f) : QDialog(parent, f)
{
	ui = new Ui_OverlayUI;
	ui->setupUi(this);

	m_cameraArgs =
	{
		{ ui->top,    ETopCamera },
		{ ui->bottom, EBottomCamera },
		{ ui->front,  EFrontCamera },
		{ ui->back,   EBackCamera },
		{ ui->left,   ELeftCamera },
		{ ui->right,  ERightCamera }
	};

	ECamera cam = g_win->currentRenderer()->camera();

	if (cam == EFreeCamera)
		cam = ETopCamera;

	connect(ui->width, SIGNAL(valueChanged(double)), this, SLOT(slot_dimensionsChanged()));
	connect(ui->height, SIGNAL(valueChanged(double)), this, SLOT(slot_dimensionsChanged()));
	connect(ui->buttonBox, SIGNAL(helpRequested()), this, SLOT(slot_help()));
	connect(ui->fileSearchButton, SIGNAL(clicked(bool)), this, SLOT(slot_fpath()));

	slot_dimensionsChanged();
	fillDefaults(cam);
}

// =============================================================================
// =============================================================================
OverlayDialog::~OverlayDialog()
{
	delete ui;
}

// =============================================================================
// =============================================================================
void OverlayDialog::fillDefaults(int newcam)
{
	LDGLOverlay& info = g_win->currentRenderer()->getOverlay(newcam);
	RadioDefault<int>(newcam, m_cameraArgs);

	if (info.img)
	{
		ui->filename->setText(info.fname);
		ui->originX->setValue(info.ox);
		ui->originY->setValue(info.oy);
		ui->width->setValue(info.lw);
		ui->height->setValue(info.lh);
	}
	else
	{
		ui->filename->setText("");
		ui->originX->setValue(0);
		ui->originY->setValue(0);
		ui->width->setValue(0.0f);
		ui->height->setValue(0.0f);
	}
}

// =============================================================================
// =============================================================================
QString OverlayDialog::fpath() const
{
	return ui->filename->text();
}

int OverlayDialog::ofsx() const
{
	return ui->originX->value();
}

int OverlayDialog::ofsy() const
{
	return ui->originY->value();
}

double OverlayDialog::lwidth() const
{
	return ui->width->value();
}

double OverlayDialog::lheight() const
{
	return ui->height->value();
}

int OverlayDialog::camera() const
{
	return RadioSwitch<int>(ETopCamera, m_cameraArgs);
}

void OverlayDialog::slot_fpath()
{
	ui->filename->setText(QFileDialog::getOpenFileName(nullptr, "Overlay image"));
}

void OverlayDialog::slot_help()
{
	showDocumentation(g_docs_overlays);
}

void OverlayDialog::slot_dimensionsChanged()
{
	bool enable = (ui->width->value() != 0) or(ui->height->value() != 0);
	ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(enable);
}

// =============================================================================
// =============================================================================
ExtProgPathPrompt::ExtProgPathPrompt(QString progName, QWidget* parent, Qt::WindowFlags f) :
	QDialog(parent, f),
	ui(new Ui_ExtProgPath)
{
	ui->setupUi(this);
	QString labelText = ui->m_label->text();
	labelText.replace("<PROGRAM>", progName);
	ui->m_label->setText(labelText);
	connect(ui->m_findPath, SIGNAL(clicked(bool)), this, SLOT(findPath()));
}

// =============================================================================
// =============================================================================
ExtProgPathPrompt::~ExtProgPathPrompt()
{
	delete ui;
}

// =============================================================================
// =============================================================================
void ExtProgPathPrompt::findPath()
{
	QString path = QFileDialog::getOpenFileName(nullptr, "", "", g_extProgPathFilter);

	if (not path.isEmpty())
		ui->m_path->setText(path);
}

// =============================================================================
// =============================================================================
QString ExtProgPathPrompt::getPath() const
{
	return ui->m_path->text();
}

// =============================================================================
// =============================================================================
AboutDialog::AboutDialog(QWidget* parent, Qt::WindowFlags f) :
	QDialog(parent, f)
{
	Ui::AboutUI ui;
	ui.setupUi(this);
	ui.versionInfo->setText(APPNAME " " + QString(fullVersionString()));

	QPushButton* mailButton = new QPushButton;
	mailButton->setText(tr("Contact"));
	mailButton->setIcon(GetIcon("mail"));
	ui.buttonBox->addButton(static_cast<QAbstractButton*>(mailButton), QDialogButtonBox::HelpRole);
	connect(ui.buttonBox, SIGNAL(helpRequested()), this, SLOT(slot_mail()));

	setWindowTitle(format(tr("About %1"), APPNAME));
}

// =============================================================================
// =============================================================================
void AboutDialog::slot_mail()
{
	QDesktopServices::openUrl(QUrl("mailto:Teemu Piippo <arezey@gmail.com>?subject=LDForge"));
}

mercurial