/*
* This file is part of the GreasePad distribution (https://github.com/FraunhoferIOSB/GreasePad).
* Copyright (c) 2022 Jochen Meidow, Fraunhofer IOSB
*
* 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 .
*/
#include "global.h"
#include "mainscene.h"
#include "qconstraints.h"
#include "qformattool.h"
#include "qsegment.h"
#include "qstroke.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace GUI {
FormatTool::FormatTool( const QString &title,
QWidget *parent)
: QDialog(parent)
{
// qDebug() << Q_FUNC_INFO;
setWindowTitle( title );
setWindowFlags( Qt::Tool );
// setMinimumSize(500,500);
// resize(1000,1000);
createElements();
createLayout();
establishConnections();
}
FormatTool::~FormatTool()
{
qDebug() << Q_FUNC_INFO;
}
void FormatTool::createLayout()
{
m_layout = std::make_unique();
m_layout->addRow( "Color", m_colorPushButton.get() );
m_layout->addRow( "Line width", m_lineWidthSpinBox.get() );
m_layout->addRow( "Line style", m_styleCombo.get() );
m_layout->addRow( "Marker size", m_markerSizeSpinBox.get());
QFrame * line = new QFrame();
line->setFrameShape(QFrame::HLine);
line->setFrameShadow(QFrame::Sunken);
m_layout->addRow( line );
m_layout->addRow( "segments: constrained", m_checkBoxDefaultConstrained.get());
m_layout->addRow( "segments: unconstrained", m_checkBoxDefaultUnconstrained.get());
// m_layout->addRow( line);
m_layout->addRow( "constraints: required" , m_checkBoxDefaultRequired.get());
m_layout->addRow( "constraints: redundant", m_checkBoxDefaultRedundant.get());
// m_layout->addRow( line);
m_layout->addRow( "strokes/tracks", m_checkBoxDefaultStroke.get());
m_layout->addRow( "scribble pen", m_checkBoxScribblePen.get());
m_layout->addRow( m_buttonBox.get() );
setLayout( m_layout.get() );
}
void FormatTool::establishConnections()
{
connect( m_colorDialog.get(), &QColorDialog::currentColorChanged,
this, &FormatTool::slotUpdateColor);
connect( m_colorPushButton.get(), &QPushButton::clicked,
this, &FormatTool::showColorDialog);
connect( m_lineWidthSpinBox.get(), static_cast(&QSpinBox::valueChanged),
this, &FormatTool::updateLineWidth);
connect( m_markerSizeSpinBox.get(), static_cast(&QSpinBox::valueChanged),
this, &FormatTool::updateMarkerSize );
connect( m_styleCombo.get(), static_cast(&QComboBox::currentIndexChanged),
this, &FormatTool::updateLineStyle);
connect( m_buttonBox->button(QDialogButtonBox::Discard),
&QAbstractButton::pressed,
this, & FormatTool::slotDiscard);
connect( m_buttonBox->button(QDialogButtonBox::Apply),
&QAbstractButton::pressed,
this, & FormatTool::slotApply);
// connect( checkBoxDefaultConstrained.get(), &QCheckBox::stateChanged,
// this, &QFormatTool::updateDefault);
}
void FormatTool::slotUpdateColor( const QColor & col)
{
// qDebug() << Q_FUNC_INFO;
QPalette pal = palette();
pal.setColor( QPalette::Button, col );
m_colorPushButton->setPalette( QPalette(col) );
m_colorPushButton->setText( col.name() );
Q_EMIT signalColorChanged(col);
}
void FormatTool::showColorDialog()
{
m_colorDialog->show();
m_colorDialog->exec();
QColor color = m_colorDialog->selectedColor();
if ( color.isValid() ) {
QPalette pal = palette();
pal.setColor( QPalette::Button, color );
m_colorPushButton->setPalette( QPalette(color) );
m_colorPushButton->setText( color.name() );
}
}
void FormatTool::createElements()
{
m_colorDialog = std::make_unique( Qt::black );
QPalette pal = palette();
pal.setColor( QPalette::Button, m_colorDialog->currentColor() );
m_colorPushButton = std::make_unique();
m_colorPushButton->setAutoFillBackground( true );
m_colorPushButton->setFlat( true );
m_colorPushButton->setPalette( pal );
m_colorPushButton->setText( m_colorDialog->currentColor().name() ) ;
m_lineWidthSpinBox = std::make_unique();
m_lineWidthSpinBox->setSuffix( " Pt." );
m_lineWidthSpinBox->setValue( 3 );
m_styleCombo = std::make_unique();
m_styleCombo->addItem( "NoPen" );
m_styleCombo->addItem( "SolidLine" );
m_styleCombo->addItem( "DashLine" );
m_styleCombo->addItem( "DotLine" );
m_styleCombo->addItem( "DashDotLine" );
m_styleCombo->addItem( "DashDotDotLine" );
m_styleCombo->setCurrentIndex( Qt::SolidLine );
m_markerSizeSpinBox = std::make_unique();
m_markerSizeSpinBox->setSuffix( " Pt.");
m_markerSizeSpinBox->setValue( 10 );
m_checkBoxDefaultConstrained = std::make_unique("new default");
m_checkBoxDefaultUnconstrained = std::make_unique("new default");
m_checkBoxDefaultRequired = std::make_unique("new default");
m_checkBoxDefaultRedundant = std::make_unique("new default");
m_checkBoxDefaultStroke = std::make_unique("new default");
m_checkBoxScribblePen = std::make_unique("new default");
m_buttonBox = std::make_unique(
QDialogButtonBox::Apply
| QDialogButtonBox::Discard
);
}
void FormatTool::slotApply()
{
// qDebug() << Q_FUNC_INFO;
if ( m_checkBoxDefaultStroke->isChecked() ) {
QPen p = QEntity::QStroke::defaultPen();
p.setColor( m_colorDialog->selectedColor() );
p.setWidth( m_lineWidthSpinBox->value() );
QEntity::QStroke::setPenDefault( p);
}
if ( m_checkBoxDefaultRequired->isChecked() ) {
QPen p = QConstraint::QConstraintBase::defaultPenReq();
p.setColor( m_colorDialog->selectedColor() );
p.setWidth( m_lineWidthSpinBox->value() );
p.setStyle( Qt::PenStyle( m_styleCombo->currentIndex() ));
int s = m_markerSizeSpinBox->value();
QConstraint::QConstraintBase::setDefaultMarkerSize( s); // TODO(meijoc) req./red.
QConstraint::QConstraintBase::setDefaultPenReq( p);
}
if ( m_checkBoxDefaultRedundant->isChecked() ) {
QPen p = QConstraint::QConstraintBase::defaultPenRed();
p.setColor( m_colorDialog->selectedColor() );
p.setWidth( m_lineWidthSpinBox->value() );
p.setStyle( Qt::PenStyle( m_styleCombo->currentIndex() ));
int s = m_markerSizeSpinBox->value();
QConstraint::QConstraintBase::setDefaultMarkerSize( s); // TODO(meijoc) req./red.
QConstraint::QConstraintBase::setDefaultPenRed( p);
}
if ( m_checkBoxDefaultConstrained->isChecked() ) {
QPen p = QEntity::QConstrained::defaultPen();
p.setColor( m_colorDialog->selectedColor() );
p.setWidth( m_lineWidthSpinBox->value() );
p.setStyle( Qt::PenStyle( m_styleCombo->currentIndex() ));
QEntity::QConstrained::setPenDefault( p );
}
if ( m_checkBoxDefaultUnconstrained->isChecked() ) {
QPen p = QEntity::QUnconstrained::defaultPen();
p.setColor( m_colorDialog->selectedColor() );
p.setWidth( m_lineWidthSpinBox->value() );
p.setStyle( Qt::PenStyle( m_styleCombo->currentIndex() ));
QEntity::QUnconstrained::setPenDefault( p );
}
if ( m_checkBoxScribblePen->isChecked() ) {
QPen p = MainScene::scribblePen();
p.setColor( m_colorDialog->selectedColor() );
p.setWidth( m_lineWidthSpinBox->value() );
p.setStyle( Qt::PenStyle( m_styleCombo->currentIndex() ));
MainScene::setScribblePen( p);
}
}
} // namespace GUI