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
00040 m_margin = toPixel(value(), m_mode);
00041
return m_margin;
00042 }
00043
00044
void MarginValueWidget::setMargin(
float m)
00045 {
00046 m_margin = m;
00047
double v = toValue(m, m_mode);
00048 m_block =
true;
00049 setValue(v);
00050 m_block =
false;
00051 emit marginChanged( m_margin );
00052 }
00053
00054
float MarginValueWidget::toPixel(
double value,
int mode)
00055 {
00056
switch (mode)
00057 {
00058
default:
00059
case Pixels:
return (
float)value;
00060
case IN:
return (
float)(value * m_dpi);
00061
case CM:
return (
float)(value * m_dpi / 2.54);
00062
case MM:
return (
float)(value * m_dpi / 25.4);
00063 }
00064 }
00065
00066
double MarginValueWidget::toValue(
float pix,
int mode)
00067 {
00068
switch (mode)
00069 {
00070
default:
00071
case Pixels:
00072
return (
double)pix;
00073
case IN:
00074
return (double(pix) / m_dpi);
00075
case CM:
00076
return (double(pix) * 2.54 / m_dpi);
00077
case MM:
00078
return ( double( pix ) * 25.4 / m_dpi );
00079 }
00080 }
00081
00082
void MarginValueWidget::slotValueChanged(
double v)
00083 {
00084
if (!m_block)
00085 {
00086 m_margin = toPixel( v, m_mode );
00087 emit marginChanged(margin());
00088 }
00089 }
00090
00091
void MarginValueWidget::setMode(
int m)
00092 {
00093
if (m != m_mode)
00094 {
00095 m_block =
true;
00096 m_mode = m;
00097
double v = toValue(m_margin, m);
00098
if (m == Pixels)
00099 {
00100 setPrecision(0);
00101 setRange(0.0, 999.0, 1.0,
false);
00102 }
00103
else
00104 {
00105 setPrecision(3);
00106 setRange(0.0, 999.0, 0.01,
false);
00107 }
00108 setValue(v);
00109 m_block =
false;
00110 }
00111 }
00112
00113
void MarginValueWidget::setResolution(
int dpi)
00114 {
00115 m_dpi = dpi;
00116 m_block =
true;
00117 setMargin(m_margin);
00118 m_block =
false;
00119 }
00120
00121
int MarginValueWidget::resolution()
const
00122
{
00123
return (
int)(m_dpi+0.5);
00124 }
00125
00126
#include "marginvaluewidget.moc"