diff options
author | Robert Jonsson <spamatica@gmail.com> | 2010-10-13 19:34:22 +0000 |
---|---|---|
committer | Robert Jonsson <spamatica@gmail.com> | 2010-10-13 19:34:22 +0000 |
commit | 8a2c2824a59d7644e13bc52c9a0ecbd641f21f95 (patch) | |
tree | 064ad3f2bf8daab0ad27b128abd86a9bbdb1e496 /muse2/muse/widgets/sclif.cpp | |
parent | a27706d9629e8b592cca4659f865b70adef24e6d (diff) |
new branch muse2, first checkin
Diffstat (limited to 'muse2/muse/widgets/sclif.cpp')
-rw-r--r-- | muse2/muse/widgets/sclif.cpp | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/muse2/muse/widgets/sclif.cpp b/muse2/muse/widgets/sclif.cpp new file mode 100644 index 00000000..8740bc53 --- /dev/null +++ b/muse2/muse/widgets/sclif.cpp @@ -0,0 +1,205 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: sclif.cpp,v 1.1.1.1 2003/10/27 18:55:10 wschweer Exp $ + +// Copyright (C) 1997 Josef Wilgen +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License, version 2, +// as published by the Free Software Foundation. +// +// (C) Copyright 2000 Werner Schweer (ws@seh.de) +//========================================================= + +#include "sclif.h" + +// ScaleIf - An interface class for widgets containing a scale +// +// This interface class is used to provide classes +// with a protected ScaleDraw member and a public +// interface to access that scale. +// +// The primary purpose of this class is to define +// a common interface for classes which are supposed to +// contain a ScaleDraw class. It provides a protected +// ScaleDraw member +// called d_scale and a couple of public member functions +// which allow direct but restricted access +// to this scale by the user. +// Widgets derived from this class have +// to implement the member function scaleChange(), +// which is called to notify changes of the +// scale parameters and usually requires repainting or +// resizing respectively. +// In general, a class derived from ScaleIf is +// expected to manage the division and the position of its scale internally +// when no user-defined scale is set. It should take the d_maxMinor +// and d_maxMajor members into account, which can be set by the user. +// An implementation can check if a user-defined scale is set by calling the +// @ScaleIf::hasUserScale@ member. + +//------------------------------------------------------------ +// ScaleIf::ScaleIf +// Construct a ScaleIf instance +// +// Syntax +// ScaleIf::ScaleIf() +//------------------------------------------------------------ + +ScaleIf::ScaleIf() + { + d_userScale = FALSE; + d_maxMajor = 5; + d_maxMinor = 3; + d_scale.setScale(0.0,100.0,d_maxMajor, d_maxMinor); + } + +//------------------------------------------------------------ +// ScaleIf::setScale (1) +// Specify a user-defined scale. +// +// Syntax +// void ScaleIf::setScale(double vmin, double vmax, int logarithmic) +// +// Parameters +// double vmin, double vmax -- boundary values +// int logarithmic -- If != 0, Build a logarithmic scale +// +// Description +// By default, the widget is supposed to control the range of its scale +// automatically, but sometimes it is desirable to have a user-defined +// scale which is not in sync with +// the widget's range, e.g. if a logarithmic scale is needed +// (sliders don't support that) or if the scale is required +// to have a fixed range (say 0...100%), independent of the +// widget's range. +// +// See also +// @ScaleIf::autoScale@ +//------------------------------------------------------------ + +void ScaleIf::setScale(double vmin, double vmax, int logarithmic) + { + setScale(vmin,vmax,0.0,logarithmic); + } + +//------------------------------------------------------------ +// ScaleIf::setScale (2) +// Specify a user-defined scale. +// +// Syntax +// void ScaleIf::setScale(double vmin, double vmax, int logarithmic) +// +// Parameters +// double vmin, double vmax -- interval boundaries +// int step -- major step size +// int logarithmic -- If != 0, build a logarithmic scale +// +// Description +// By default, the widget is supposed to control the range of its scale +// automatically, but sometimes it is desirable to have a user-defined +// scale which is not in sync with +// the widget's range, e.g. if a logarithmic scale is needed +// (sliders don't support that) or if the scale is required +// to have a fixed range (say 0...100%), independent of the +// widget's range. +//------------------------------------------------------------ + +void ScaleIf::setScale(double vmin, double vmax, double step, int logarithmic) + { + ScaleDiv oldscl(d_scale.scaleDiv()); + + d_scale.setScale(vmin, vmax, d_maxMajor, d_maxMinor, step, logarithmic); + d_userScale = TRUE; + if (oldscl != d_scale.scaleDiv()) + scaleChange(); + } + +//------------------------------------------------------------ +// Scale::setScale +// Assign a user-defined scale division +// +// Syntax +// void Scale::setScale(const ScaleDiv &s) +// +// Parameters +// const ScaleDiv &s -- scale division +//------------------------------------------------------------ + +void ScaleIf::setScale(const ScaleDiv &s) + { + d_scale.setScale(s); + scaleChange(); + } + +//------------------------------------------------------------ +// ScaleIf::autoScale +// Advise the widget to control the scale range +// internally. +// Syntax +// void ScaleIf::autoScale +// +// Description +// Autoscaling is on by default. +//------------------------------------------------------------ + +void ScaleIf::autoScale() + { + if (!d_userScale) { + d_userScale = FALSE; + scaleChange(); + } + } + +//------------------------------------------------------------ +// ScaleIf::setScaleMaxMajor +// Set the maximum number of major tick intervals. +// +// Syntax +// void ScaleIf::setScaleMaxMajor(int ticks) +// +// Parameters +// int ticks -- maximal number of major ticks. +// +// Description +// The scale's major ticks are calculated automatically such that +// the number of major intervals does not exceed <ticks>. +// The default value is 5. +//------------------------------------------------------------ + +void ScaleIf::setScaleMaxMajor(int ticks) + { + if (ticks != d_maxMajor) { + d_maxMajor = ticks; + d_scale.setScale(d_scale.scaleDiv().lBound(), d_scale.scaleDiv().hBound(), + d_maxMajor, d_maxMinor, 0.0,d_scale.scaleDiv().logScale()); + scaleChange(); + } + } + +//------------------------------------------------------------ +// ScaleIf::setScaleMaxMinor +// Set the maximum number of minor tick intervals +// +// Syntax +// void ScaleIf::setScaleMaxMinor(int ticks) +// +// Parameters +// int ticks +// +// Description +// The scale's minor ticks are calculated automatically such that +// the number of minor intervals does not exceed <ticks>. +// The default value is 3. +//------------------------------------------------------------ + +void ScaleIf::setScaleMaxMinor(int ticks) + { + if ( ticks != d_maxMinor) { + d_maxMinor = ticks; + d_scale.setScale(d_scale.scaleDiv().lBound(), d_scale.scaleDiv().hBound(), + d_maxMajor, d_maxMinor, 0.0, d_scale.scaleDiv().logScale()); + scaleChange(); + } + } + |