Files
sethLabels/glabels/PreferencesDialog.cpp
T
2026-01-13 19:19:42 -05:00

174 lines
5.5 KiB
C++

// PreferencesDialog.cpp
//
// Copyright (C) 2016-2026 Jaye Evins <evins@snaught.com>
//
// This file is part of gLabels-qt.
//
// gLabels-qt 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.
//
// gLabels-qt 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 gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
//
#include "PreferencesDialog.hpp"
#include "model/Settings.hpp"
namespace glabels
{
///
/// Constructor
///
PreferencesDialog::PreferencesDialog( QWidget *parent )
: QDialog(parent)
{
setupUi( this );
auto units = model::Settings::units();
switch ( units.toEnum() )
{
case model::Units::IN:
unitsInchesRadio->setChecked( true );
break;
case model::Units::MM:
unitsMillimetersRadio->setChecked( true );
break;
case model::Units::CM:
unitsCentimetersRadio->setChecked( true );
break;
case model::Units::PC:
unitsPicasRadio->setChecked( true );
break;
default:
unitsPointsRadio->setChecked( true );
break;
}
switch ( model::Settings::gridOrigin() )
{
case model::Settings::ORIGIN_CENTER:
gridOriginCenterRadio->setChecked( true );
break;
case model::Settings::ORIGIN_TL:
gridOriginTlRadio->setChecked( true );
break;
default:
gridOriginTlRadio->setChecked( true );
break;
}
auto gridSpacing = model::Settings::gridSpacing();
gridSpacingSpin->setDecimals( units.resolutionDigits() );
gridSpacingSpin->setSingleStep( units.resolution() );
gridSpacingSpin->setMinimum( units.resolution() );
gridSpacingSpin->setSuffix( " " + units.toIdString() );
gridSpacingSpin->setValue( gridSpacing.inUnits( units ) );
connect( model::Settings::instance(), SIGNAL(changed()),
this, SLOT(onSettingsChanged()) );
}
///
/// Units Radios Changed
///
void PreferencesDialog::onUnitsRadiosChanged()
{
if ( unitsInchesRadio->isChecked() )
{
model::Settings::setUnits( model::Units::in() );
}
else if ( unitsMillimetersRadio->isChecked() )
{
model::Settings::setUnits( model::Units::mm() );
}
else if ( unitsCentimetersRadio->isChecked() )
{
model::Settings::setUnits( model::Units::cm() );
}
else if ( unitsPicasRadio->isChecked() )
{
model::Settings::setUnits( model::Units::pc() );
}
else
{
model::Settings::setUnits( model::Units::pt() );
}
}
///
/// Grid Origin Radios Changed
///
void PreferencesDialog::onGridOriginRadiosChanged()
{
if ( gridOriginTlRadio->isChecked() )
{
model::Settings::setGridOrigin( model::Settings::ORIGIN_TL );
}
else if ( gridOriginCenterRadio->isChecked() )
{
model::Settings::setGridOrigin( model::Settings::ORIGIN_CENTER );
}
}
///
/// Grid Spacing Spin Changed
///
void PreferencesDialog::onGridSpacingSpinChanged()
{
auto units = model::Settings::units();
auto spacing = model::Distance( gridSpacingSpin->value(), units );
model::Settings::setGridSpacing( spacing );
}
///
/// Grid Spacing Reset Button Clicked
///
void PreferencesDialog::onGridSpacingResetButtonClicked()
{
model::Settings::resetGridSpacing();
}
///
/// Settings Changed
///
void PreferencesDialog::onSettingsChanged()
{
auto units = model::Settings::units();
auto gridSpacing = model::Settings::gridSpacing();
gridSpacingSpin->blockSignals( true );
gridSpacingSpin->setDecimals( units.resolutionDigits() );
gridSpacingSpin->setSingleStep( units.resolution() );
gridSpacingSpin->setMinimum( units.resolution() );
gridSpacingSpin->setSuffix( " " + units.toIdString() );
gridSpacingSpin->setValue( gridSpacing.inUnits( units ) );
gridSpacingSpin->blockSignals( false );
}
} // namespace glabels