marginvaluewidget.cpp
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"
This file is part of the documentation for kdeprint Library Version 3.2.2.