source: flair-src/trunk/tools/FlairGCS/src/DoubleSpinBox.cpp@ 10

Last change on this file since 10 was 10, checked in by Sanahuja Guillaume, 8 years ago

lic

File size: 3.6 KB
Line 
1// %flair:license{
2// This file is part of the Flair framework distributed under the
3// CECILL-C License, Version 1.0.
4// %flair:license}
5#include "DoubleSpinBox.h"
6#include "Layout.h"
7#include <QLineEdit>
8#include <QMenu>
9#include <QContextMenuEvent>
10#include <QDoubleSpinBox>
11#include <QFormLayout>
12
13DoubleSpinBox::DoubleSpinBox(Layout* parent,int row, int col,QString name,QString suffix,QString value,float min,float max,float step,int decimals): FormLayout(parent,row,col,name,"DoubleSpinBox")
14{
15 doublespinbox = new QDoubleSpinBox();
16
17 doublespinbox->setRange(min,max);
18 doublespinbox->setSingleStep(step);
19 doublespinbox->setDecimals(decimals);
20 if(suffix!="") doublespinbox->setSuffix(suffix);
21 adjust_decimals(value);
22 doublespinbox->setValue(value.toDouble());
23 doublespinbox_value=doublespinbox->cleanText();
24
25 //event filter for qdoublespinbox and its child (qlinedit and incremnt qbuttons)
26 doublespinbox->installEventFilter(this);
27 QObjectList o_list = doublespinbox->children();
28 for(int i = 0; i < o_list.length(); i++)
29 {
30 QLineEdit *cast = qobject_cast<QLineEdit*>(o_list[i]);
31 if(cast)
32 cast->installEventFilter(this);
33 }
34
35 object_layout->addRow(name,doublespinbox);
36
37 connect(doublespinbox,SIGNAL(valueChanged(const QString &)),this, SLOT(valuechanged(const QString &)));
38
39 SetValue(value);
40}
41
42DoubleSpinBox::~DoubleSpinBox()
43{
44 delete doublespinbox;
45}
46
47void DoubleSpinBox::adjust_decimals(QString value)
48{
49 //auto adjust decimals
50 QLocale locale;
51 value.remove(locale.groupSeparator());
52
53 QStringList parts = value.split(locale.decimalPoint());
54 if(parts.count() == 2)
55 {
56 doublespinbox->setDecimals(parts[1].size());
57 }
58}
59
60bool DoubleSpinBox::eventFilter(QObject *object, QEvent *event)
61{
62 if(object==doublespinbox && event->type()==QEvent::MouseButtonPress)
63 {
64 if (((QMouseEvent*)event)->button() == Qt::RightButton)
65 {
66 QMenu * menu = new QMenu("menu", doublespinbox);
67 QAction *a,*b,*c,*z;
68
69 a=menu->addAction("add decimal");
70 b=menu->addAction("remove decimal");
71
72 if(doublespinbox->decimals()==0) b->setEnabled(false);
73 z=menu->exec(((QMouseEvent*)event)->globalPos());
74
75 if(z==a) doublespinbox->setDecimals(doublespinbox->decimals()+1);
76 if(z==b) doublespinbox->setDecimals(doublespinbox->decimals()-1);
77 delete menu;
78 return true;
79 }
80 }
81
82 return object->eventFilter(object, event);
83}
84
85void DoubleSpinBox::SetUptodate(void)
86{
87 ui_to_var();
88 ui_to_xml();
89 visible_widget->setPalette(black_pal);
90}
91
92void DoubleSpinBox::ui_to_var(void)
93{
94 doublespinbox_value=doublespinbox->cleanText();
95}
96
97void DoubleSpinBox::ui_to_xml(void)
98{
99 SetValue(doublespinbox->cleanText());
100}
101
102void DoubleSpinBox::Reset(void)
103{
104 //le setvalue fait un arrondi pour l'affichage, la variable n'est donc plus egale
105 //on reprend la valeur de la boite et on force la couleur a noir
106 adjust_decimals(doublespinbox_value);
107 doublespinbox->setValue(doublespinbox_value.toDouble());
108 doublespinbox_value= doublespinbox->cleanText();
109 visible_widget->setPalette(black_pal);
110
111}
112
113void DoubleSpinBox::LoadEvent(QDomElement dom)
114{
115 if(doublespinbox->isEnabled()==true)
116 {
117 doublespinbox->setValue((dom.attribute("value")).toDouble());
118 }
119}
120
121void DoubleSpinBox::valuechanged(const QString &value)
122{
123 if(value!=doublespinbox_value)
124 {
125 visible_widget->setPalette(red_pal);
126 }
127 else
128 {
129 visible_widget->setPalette(black_pal);
130 }
131}
Note: See TracBrowser for help on using the repository browser.