mirror of https://github.com/jhol/qtdmm.git
313 lines
6.6 KiB
C++
Executable File
313 lines
6.6 KiB
C++
Executable File
//======================================================================
|
|
// File: scaleprefs.cpp
|
|
// Author: Matthias Toussaint
|
|
// Created: Sat Oct 19 15:34:13 CEST 2002
|
|
//----------------------------------------------------------------------
|
|
// Permission to use, copy, modify, and distribute this software and its
|
|
// documentation for any purpose and without fee is hereby granted,
|
|
// provided that below copyright notice appear in all copies and that
|
|
// both that copyright notice and this permission notice appear in
|
|
// supporting documentation.
|
|
//
|
|
// This file is provided AS IS with no warranties of any kind. The
|
|
// author shall have no liability with respect to the infringement of
|
|
// copyrights, trade secrets or any patents by this file or any part
|
|
// thereof. In no event will the author be liable for any lost revenue
|
|
// or profits or other special, indirect and consequential damages.
|
|
//----------------------------------------------------------------------
|
|
// (c) 2000-2002 Matthias Toussaint
|
|
//======================================================================
|
|
|
|
#include <qcheckbox.h>
|
|
#include <qcombobox.h>
|
|
#include <qlineedit.h>
|
|
#include <qradiobutton.h>
|
|
#include <qspinbox.h>
|
|
|
|
#include <engnumbervalidator.h>
|
|
#include <scaleprefs.h>
|
|
#include <simplecfg.h>
|
|
|
|
#include <scale.xpm>
|
|
|
|
#include <iostream>
|
|
|
|
#define MINUTE_SECS 60
|
|
#define HOUR_SECS 60*60
|
|
#define DAY_SECS 60*60*24
|
|
|
|
ScalePrefs::ScalePrefs( QWidget *parent, const char *name ) :
|
|
PrefWidget( parent, name )
|
|
{
|
|
setupUi(this);
|
|
|
|
m_label = tr( "Scale settings" );
|
|
m_description = tr( "<b>Here you can configure the vertical scale"
|
|
" of the recorder and the length (in time)"
|
|
" of the window.</b>" );
|
|
m_pixmap = new QPixmap( (const char **)scale_xpm );
|
|
|
|
EngNumberValidator *validator = new EngNumberValidator( this );
|
|
|
|
ui_scaleMin->setValidator( validator );
|
|
ui_scaleMax->setValidator( validator );
|
|
}
|
|
|
|
ScalePrefs::~ScalePrefs()
|
|
{
|
|
}
|
|
|
|
void
|
|
ScalePrefs::defaultsSLOT()
|
|
{
|
|
bool autoScale = m_cfg->getBool( "Scale", "automatic", true );
|
|
if (autoScale)
|
|
{
|
|
autoScaleBut->setChecked( true );
|
|
}
|
|
else
|
|
{
|
|
manualScaleBut->setChecked( true );
|
|
}
|
|
|
|
bool includeZero = m_cfg->getBool( "Scale", "automatic-include-zero", true );
|
|
if (includeZero)
|
|
{
|
|
ui_includeZero->setChecked( true );
|
|
}
|
|
else
|
|
{
|
|
ui_includeZero->setChecked( false );
|
|
}
|
|
|
|
ui_scaleMin->setText( m_cfg->getString( "Scale", "minimum", "-3.999" ));
|
|
ui_scaleMax->setText( m_cfg->getString( "Scale", "maximum", "3.999" ));
|
|
|
|
ui_winSize->setValue( m_cfg->getInt( "Window", "size", 600 ));
|
|
sizeUnit->setCurrentItem( m_cfg->getInt( "Window", "size-unit", 0 ));
|
|
winLength->setValue( m_cfg->getInt( "Window", "length", 3600 ));
|
|
lengthUnit->setCurrentItem( m_cfg->getInt( "Window", "length-unit", 0 ));
|
|
}
|
|
|
|
void
|
|
ScalePrefs::factoryDefaultsSLOT()
|
|
{
|
|
autoScaleBut->setChecked( true );
|
|
ui_includeZero->setChecked( true );
|
|
|
|
ui_scaleMin->setText( "-3.999" );
|
|
ui_scaleMax->setText( "3.999" );
|
|
|
|
ui_winSize->setValue( 600 );
|
|
sizeUnit->setCurrentItem( 0 );
|
|
winLength->setValue( 3600 );
|
|
lengthUnit->setCurrentItem( 0 );
|
|
}
|
|
|
|
void
|
|
ScalePrefs::applySLOT()
|
|
{
|
|
m_cfg->setBool( "Scale", "automatic", automaticScale() );
|
|
m_cfg->setBool( "Scale", "automatic-include-zero", includeZero() );
|
|
m_cfg->setString( "Scale", "minimum", ui_scaleMin->text() );
|
|
m_cfg->setString( "Scale", "maximum", ui_scaleMax->text() );
|
|
m_cfg->setInt( "Window", "size", ui_winSize->value() );
|
|
m_cfg->setInt( "Window", "size-unit", sizeUnit->currentItem() );
|
|
m_cfg->setInt( "Window", "length", winLength->value() );
|
|
m_cfg->setInt( "Window", "length-unit", lengthUnit->currentItem() );
|
|
}
|
|
|
|
bool
|
|
ScalePrefs::includeZero() const
|
|
{
|
|
return ui_includeZero->isChecked();
|
|
}
|
|
|
|
bool
|
|
ScalePrefs::automaticScale() const
|
|
{
|
|
return autoScaleBut->isChecked();
|
|
}
|
|
|
|
double
|
|
ScalePrefs::scaleMin() const
|
|
{
|
|
return EngNumberValidator::value( ui_scaleMin->text() );
|
|
}
|
|
|
|
double
|
|
ScalePrefs::scaleMax() const
|
|
{
|
|
return EngNumberValidator::value( ui_scaleMax->text() );
|
|
}
|
|
|
|
void ScalePrefs::setAutoScaleSLOT( bool autoScale )
|
|
{
|
|
autoScaleBut->setChecked( autoScale );
|
|
}
|
|
|
|
void
|
|
ScalePrefs::zoomInSLOT( double fac )
|
|
{
|
|
double size = (double)ui_winSize->value() / fac;
|
|
|
|
switch (sizeUnit->currentItem())
|
|
{
|
|
case 0:
|
|
if (size < 10.0)
|
|
{
|
|
size = 10.0;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (size < 1.0)
|
|
{
|
|
size *= 60.0;
|
|
sizeUnit->setCurrentItem( 0 );
|
|
}
|
|
break;
|
|
case 2:
|
|
if (size < 1.0)
|
|
{
|
|
size *= 60.0;
|
|
sizeUnit->setCurrentItem( 1 );
|
|
}
|
|
break;
|
|
case 3:
|
|
if (size < 1.0)
|
|
{
|
|
size *= 24.0;
|
|
sizeUnit->setCurrentItem( 2 );
|
|
}
|
|
break;
|
|
}
|
|
|
|
ui_winSize->setValue( (int)size );
|
|
|
|
/*
|
|
double val = ui_winSize->value();
|
|
|
|
if (val > 10)
|
|
{
|
|
val /= fac;
|
|
}
|
|
else
|
|
{
|
|
val /= 2.;
|
|
}
|
|
|
|
val = QMAX( 1, val );
|
|
|
|
ui_winSize->setValue( (int)val );
|
|
*/
|
|
}
|
|
|
|
void
|
|
ScalePrefs::zoomOutSLOT( double fac )
|
|
{
|
|
double size = (double)ui_winSize->value() * fac;
|
|
|
|
double winSec = (double)windowSeconds() * fac;
|
|
double totalSec = (double)totalSeconds();
|
|
|
|
if (winSec <= totalSec)
|
|
{
|
|
switch (sizeUnit->currentItem())
|
|
{
|
|
case 0:
|
|
if (size > 600)
|
|
{
|
|
size /= 60.0;
|
|
sizeUnit->setCurrentItem( 1 );
|
|
}
|
|
break;
|
|
case 1:
|
|
if (size > 300)
|
|
{
|
|
size /= 60.0;
|
|
sizeUnit->setCurrentItem( 2 );
|
|
}
|
|
break;
|
|
case 2:
|
|
if (size > 48)
|
|
{
|
|
size /= 24.0;
|
|
sizeUnit->setCurrentItem( 3 );
|
|
}
|
|
break;
|
|
}
|
|
|
|
ui_winSize->setValue( (int)size );
|
|
}
|
|
else // clamp to total length
|
|
{
|
|
ui_winSize->setValue( winLength->value() );
|
|
sizeUnit->setCurrentItem( lengthUnit->currentItem() );
|
|
}
|
|
|
|
/*
|
|
double val = ui_winSize->value();
|
|
|
|
if (val > 10)
|
|
{
|
|
val *= fac;
|
|
}
|
|
else
|
|
{
|
|
val *= 2.;
|
|
}
|
|
|
|
val = QMAX( 2, val );
|
|
ui_winSize->setValue( (int)val );
|
|
*/
|
|
}
|
|
|
|
int
|
|
ScalePrefs::windowSeconds() const
|
|
{
|
|
int sec = ui_winSize->text().toInt();
|
|
|
|
switch (sizeUnit->currentItem())
|
|
{
|
|
case 1:
|
|
sec *= MINUTE_SECS;
|
|
break;
|
|
case 2:
|
|
sec *= HOUR_SECS;
|
|
break;
|
|
case 3:
|
|
sec *= DAY_SECS;
|
|
break;
|
|
}
|
|
|
|
return sec;
|
|
}
|
|
|
|
int
|
|
ScalePrefs::totalSeconds() const
|
|
{
|
|
int sec = winLength->text().toInt();
|
|
|
|
switch (lengthUnit->currentItem())
|
|
{
|
|
case 1:
|
|
sec *= MINUTE_SECS;
|
|
break;
|
|
case 2:
|
|
sec *= HOUR_SECS;
|
|
break;
|
|
case 3:
|
|
sec *= DAY_SECS;
|
|
break;
|
|
}
|
|
|
|
return sec;
|
|
}
|
|
|
|
void
|
|
ScalePrefs::setGraphSizeSLOT( int size, int length )
|
|
{
|
|
ui_winSize->setValue( size );
|
|
winLength->setValue( length );
|
|
}
|