src/dialogs.cpp

Thu, 01 Aug 2013 02:49:42 +0300

author
Santeri Piippo <crimsondusk64@gmail.com>
date
Thu, 01 Aug 2013 02:49:42 +0300
changeset 410
a5aebcf4a1c8
parent 370
843b3dbbd849
child 421
7d26db0be944
permissions
-rw-r--r--

Include the moc files in the source cpp files to reduce compile time

/*
 *  LDForge: LDraw parts authoring CAD
 *  Copyright (C) 2013 Santeri 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.h>
#include <QCheckBox>

#include "dialogs.h"
#include "widgets.h"
#include "gui.h"
#include "gldraw.h"
#include "docs.h"
#include "file.h"
#include "dialogs.h"
#include "ui_overlay.h"
#include "ui_ldrawpath.h"
#include "ui_openprogress.h"

extern_cfg (str, io_ldpath);

// =============================================================================
OverlayDialog::OverlayDialog( QWidget* parent, Qt::WindowFlags f ) : QDialog( parent, f )
{
	ui = new Ui_OverlayUI;
	ui->setupUi( this );
	
	m_cameraArgs = {
		{ ui->top,    GL::Top },
		{ ui->bottom, GL::Bottom },
		{ ui->front,  GL::Front },
		{ ui->back,   GL::Back },
		{ ui->left,   GL::Left },
		{ ui->right,  GL::Right }
	};
	
	GL::Camera cam = g_win->R()->camera();
	
	if( cam == GL::Free )
		cam = GL::Top;
	
	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 )
{
	overlayMeta& info = g_win->R()->getOverlay( newcam );
	
	radioDefault<int>( newcam, m_cameraArgs );
	
	if( info.img != null )
	{
		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 );
	}
}

str OverlayDialog::fpath() const
{
	return ui->filename->text();
}

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

ushort 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>( GL::Top, m_cameraArgs );
}

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

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

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

// =================================================================================================
LDrawPathDialog::LDrawPathDialog( const bool validDefault, QWidget* parent, Qt::WindowFlags f )
	: QDialog( parent, f ), m_validDefault( validDefault )
{
	ui = new Ui_LDPathUI;
	ui->setupUi( this );
	ui->status->setText( "---" );
	
	if( validDefault )
		ui->heading->hide();
	else
	{
		cancelButton()->setText( "Exit" );
		cancelButton()->setIcon( getIcon( "exit" ));
	}
	
	okButton()->setEnabled( false );
	
	connect( ui->path, SIGNAL( textEdited( QString ) ), this, SLOT( slot_tryConfigure() ) );
	connect( ui->searchButton, SIGNAL( clicked() ), this, SLOT( slot_findPath() ) );
	connect( ui->buttonBox, SIGNAL( rejected() ), this, validDefault ? SLOT( reject() ) : SLOT( slot_exit() ));
	
	setPath( io_ldpath );
	
	if( validDefault )
		slot_tryConfigure();
}

LDrawPathDialog::~LDrawPathDialog()
{
	delete ui;
}

QPushButton* LDrawPathDialog::okButton()
{
	return ui->buttonBox->button( QDialogButtonBox::Ok );
}

QPushButton* LDrawPathDialog::cancelButton()
{
	return ui->buttonBox->button( QDialogButtonBox::Cancel );
}

void LDrawPathDialog::setPath( str path )
{
	ui->path->setText( path );
}

str LDrawPathDialog::filename() const
{
	return ui->path->text();
}

void LDrawPathDialog::slot_findPath()
{
	str newpath = QFileDialog::getExistingDirectory( this, "Find LDraw Path" );

	if( newpath.length() > 0 && newpath != filename() )
	{
		setPath( newpath );
		slot_tryConfigure();
	}
}

void LDrawPathDialog::slot_exit()
{
	exit( 1 );
}

void LDrawPathDialog::slot_tryConfigure()
{
	if( LDPaths::tryConfigure( filename() ) == false )
	{
		ui->status->setText( fmt( "<span style=\"color:#700; \">%1</span>", LDPaths::getError() ) );
		okButton()->setEnabled( false );
		return;
	}
	
	ui->status->setText( "<span style=\"color: #270; \">OK!</span>" );
	okButton()->setEnabled( true );
}

// =============================================================================
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// =============================================================================
OpenProgressDialog::OpenProgressDialog( QWidget* parent, Qt::WindowFlags f ) : QDialog( parent, f )
{
	ui = new Ui_OpenProgressUI;
	ui->setupUi( this );
	ui->progressText->setText( "Parsing..." );
	
	setNumLines( 0 );
	m_progress = 0;
}

OpenProgressDialog::~OpenProgressDialog()
{
	delete ui;
}

READ_ACCESSOR( ulong, OpenProgressDialog::numLines )
{
	return m_numLines;
}

SET_ACCESSOR( ulong, OpenProgressDialog::setNumLines )
{
	m_numLines = val;
	ui->progressBar->setRange (0, numLines ());
	updateValues();
}

void OpenProgressDialog::updateValues()
{
	ui->progressText->setText( fmt( "Parsing... %1 / %2", progress(), numLines() ));
	ui->progressBar->setValue( progress() );
}

void OpenProgressDialog::updateProgress( int progress )
{
	m_progress = progress;
	updateValues ();
}

#include "build/moc_dialogs.cpp"

mercurial