00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include "marginvaluewidget.h"
00021
00022
#include <math.h>
00023
00024 MarginValueWidget::MarginValueWidget(KNumInput *below,
double value,
QWidget *parent,
const char *name)
00025 : KDoubleNumInput(below, value, parent, name)
00026 {
00027 m_mode = Pixels;
00028 m_block =
false;
00029 setPrecision(0);
00030 m_dpi = 72.0;
00031 m_margin = (
float )value;
00032 setMode(m_mode);
00033 setRange(0, 999, 1,
false);
00034 connect(
this, SIGNAL(valueChanged(
double)), SLOT(slotValueChanged(
double)));
00035 }
00036
00037
float MarginValueWidget::margin()
00038 {
00039
return m_margin;
00040 }
00041
00042
void MarginValueWidget::setMargin(
float m)
00043 {
00044 m_margin = m;
00045
double v = toValue(m, m_mode);
00046 m_block =
true;
00047 setValue(v);
00048 m_block =
false;
00049 emit marginChanged( m_margin );
00050 }
00051
00052
float MarginValueWidget::toPixel(
double value,
int mode)
00053 {
00054
switch (mode)
00055 {
00056
default:
00057
case Pixels:
return (
float)value;
00058
case IN:
return (
float)(value * m_dpi);
00059
case CM:
return (
float)(value * m_dpi / 2.54);
00060
case MM:
return (
float)(value * m_dpi / 25.4);
00061 }
00062 }
00063
00064
double MarginValueWidget::toValue(
float pix,
int mode)
00065 {
00066
switch (mode)
00067 {
00068
default:
00069
case Pixels:
00070
return (
double)pix;
00071
case IN:
00072
return (double(pix) / m_dpi);
00073
case CM:
00074
return (double(pix) * 2.54 / m_dpi);
00075
case MM:
00076
return ( double( pix ) * 25.4 / m_dpi );
00077 }
00078 }
00079
00080
void MarginValueWidget::slotValueChanged(
double v)
00081 {
00082
if (!m_block)
00083 {
00084 m_margin = toPixel( v, m_mode );
00085 emit marginChanged(margin());
00086 }
00087 }
00088
00089
void MarginValueWidget::setMode(
int m)
00090 {
00091
if (m != m_mode)
00092 {
00093 m_block =
true;
00094 m_mode = m;
00095
double v = toValue(m_margin, m);
00096
if (m == Pixels)
00097 {
00098 setPrecision(0);
00099 setRange(0.0, 999.0, 1.0,
false);
00100 }
00101
else
00102 {
00103 setPrecision(3);
00104 setRange(0.0, 999.0, 0.01,
false);
00105 }
00106 setValue(v);
00107 m_block =
false;
00108 }
00109 }
00110
00111
void MarginValueWidget::setResolution(
int dpi)
00112 {
00113 m_dpi = dpi;
00114 m_block =
true;
00115 setMargin(m_margin);
00116 m_block =
false;
00117 }
00118
00119
int MarginValueWidget::resolution()
const
00120
{
00121
return (
int)(m_dpi+0.5);
00122 }
00123
00124
#include "marginvaluewidget.moc"