Changeset 15 in flair-src for trunk/tools/FlairGCS/src/Vector3DSpinBox.cpp
- Timestamp:
- 04/08/16 15:40:57 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/FlairGCS/src/Vector3DSpinBox.cpp
r10 r15 12 12 #include "Layout.h" 13 13 14 Vector3DSpinBox::Vector3DSpinBox(Layout *parent, int row, int col, QString name, 15 QString value[3], float min, float max, 16 float step, int decimals) 17 : XmlWidget(name, "Vector3DSpinBox", parent) { 18 for (int i = 0; i < 3; i++) { 19 doublespinbox[i].setRange(min, max); 20 doublespinbox[i].setSingleStep(step); 21 doublespinbox[i].setDecimals(decimals); 22 } 14 23 15 Vector3DSpinBox::Vector3DSpinBox(Layout* parent,int row, int col,QString name,QString value[3],float min,float max,float step,int decimals): XmlWidget(name,"Vector3DSpinBox",parent) { 16 for(int i=0;i<3;i++) { 17 doublespinbox[i].setRange(min,max); 18 doublespinbox[i].setSingleStep(step); 19 doublespinbox[i].setDecimals(decimals); 24 adjust_decimals(value); 25 26 for (int i = 0; i < 3; i++) { 27 doublespinbox[i].setValue(value[i].toDouble()); 28 doublespinbox_value[i] = doublespinbox[i].cleanText(); 29 30 // event filter for qdoublespinbox and its child (qlinedit and incremnt 31 // qbuttons) 32 doublespinbox[i].installEventFilter(this); 33 QObjectList o_list = doublespinbox[i].children(); 34 for (int j = 0; j < o_list.length(); j++) { 35 QLineEdit *cast = qobject_cast<QLineEdit *>(o_list[j]); 36 if (cast) 37 cast->installEventFilter(this); 20 38 } 21 39 22 adjust_decimals(value); 40 connect(&doublespinbox[i], SIGNAL(valueChanged(const QString &)), this, 41 SLOT(valuechanged(const QString &))); 42 } 23 43 24 for(int i=0;i<3;i++) { 25 doublespinbox[i].setValue(value[i].toDouble()); 26 doublespinbox_value[i]=doublespinbox[i].cleanText(); 44 SetValues(value); 27 45 28 //event filter for qdoublespinbox and its child (qlinedit and incremnt qbuttons) 29 doublespinbox[i].installEventFilter(this); 30 QObjectList o_list = doublespinbox[i].children(); 31 for(int j = 0; j < o_list.length(); j++) { 32 QLineEdit *cast = qobject_cast<QLineEdit*>(o_list[j]); 33 if(cast) 34 cast->installEventFilter(this); 35 } 46 // creation et ajout QGroupBox 47 box = new QGroupBox(name); 48 box->setObjectName(name); 49 visible_widget = box; 50 parent->addWidget(box, row, col); 51 qgridlayout = new QGridLayout(new QWidget()); 52 box->setLayout(qgridlayout); 36 53 37 connect(&doublespinbox[i],SIGNAL(valueChanged(const QString &)),this, SLOT(valuechanged(const QString &))); 38 } 39 40 SetValues(value); 41 42 //creation et ajout QGroupBox 43 box = new QGroupBox(name); 44 box->setObjectName(name); 45 visible_widget=box; 46 parent->addWidget(box,row,col); 47 qgridlayout=new QGridLayout(new QWidget()); 48 box->setLayout(qgridlayout); 49 50 AddElement("x:",0); 51 AddElement("y:",1); 52 AddElement("z:",2); 54 AddElement("x:", 0); 55 AddElement("y:", 1); 56 AddElement("z:", 2); 53 57 } 54 58 55 Vector3DSpinBox::~Vector3DSpinBox() { 59 Vector3DSpinBox::~Vector3DSpinBox() {} 60 61 void Vector3DSpinBox::SetValues(QString value[3]) { 62 SetAttribute("value_x", value[0]); 63 SetAttribute("value_y", value[1]); 64 SetAttribute("value_z", value[2]); 56 65 } 57 66 58 void Vector3DSpinBox::SetValues(QString value[3]) { 59 SetAttribute("value_x",value[0]); 60 SetAttribute("value_y",value[1]); 61 SetAttribute("value_z",value[2]); 62 } 67 void Vector3DSpinBox::AddElement(QString name, int index) { 68 QWidget *widget = new QWidget(); 69 QFormLayout *object_layout = new QFormLayout(widget); 70 object_layout->setHorizontalSpacing(2); 71 object_layout->setVerticalSpacing(2); 72 object_layout->setContentsMargins(2, 2, 2, 2); 63 73 64 void Vector3DSpinBox::AddElement(QString name,int index) { 65 QWidget* widget=new QWidget(); 66 QFormLayout* object_layout = new QFormLayout(widget); 67 object_layout->setHorizontalSpacing(2); 68 object_layout->setVerticalSpacing(2); 69 object_layout->setContentsMargins (2,2,2,2); 74 object_layout->addRow(name, &doublespinbox[index]); 70 75 71 object_layout->addRow(name,&doublespinbox[index]); 72 73 qgridlayout->addWidget(widget,index,0); 76 qgridlayout->addWidget(widget, index, 0); 74 77 } 75 78 76 79 void Vector3DSpinBox::adjust_decimals(QString value[3]) { 77 for(int i=0;i<3;i++) {78 //auto adjust decimals79 80 80 for (int i = 0; i < 3; i++) { 81 // auto adjust decimals 82 QLocale locale; 83 value[i].remove(locale.groupSeparator()); 81 84 82 QStringList parts = value[i].split(locale.decimalPoint()); 83 if(parts.count() == 2) { 84 doublespinbox[i].setDecimals(parts[1].size()); 85 } 85 QStringList parts = value[i].split(locale.decimalPoint()); 86 if (parts.count() == 2) { 87 doublespinbox[i].setDecimals(parts[1].size()); 86 88 } 89 } 87 90 } 88 91 89 92 bool Vector3DSpinBox::eventFilter(QObject *object, QEvent *event) { 90 for(int i=0;i<3;i++) { 91 if(object==&doublespinbox[i] && event->type()==QEvent::MouseButtonPress) { 92 if (((QMouseEvent*)event)->button() == Qt::RightButton) { 93 QMenu * menu = new QMenu("menu", doublespinbox); 94 QAction *a,*b,*c,*z; 93 for (int i = 0; i < 3; i++) { 94 if (object == &doublespinbox[i] && 95 event->type() == QEvent::MouseButtonPress) { 96 if (((QMouseEvent *)event)->button() == Qt::RightButton) { 97 QMenu *menu = new QMenu("menu", doublespinbox); 98 QAction *a, *b, *c, *z; 95 99 96 a=menu->addAction("add decimal");97 b=menu->addAction("remove decimal");100 a = menu->addAction("add decimal"); 101 b = menu->addAction("remove decimal"); 98 102 99 if(doublespinbox[i].decimals()==0) b->setEnabled(false); 100 z=menu->exec(((QMouseEvent*)event)->globalPos()); 103 if (doublespinbox[i].decimals() == 0) 104 b->setEnabled(false); 105 z = menu->exec(((QMouseEvent *)event)->globalPos()); 101 106 102 if(z==a) doublespinbox[i].setDecimals(doublespinbox[i].decimals()+1); 103 if(z==b) doublespinbox[i].setDecimals(doublespinbox[i].decimals()-1); 104 delete menu; 105 return true; 106 } 107 } 107 if (z == a) 108 doublespinbox[i].setDecimals(doublespinbox[i].decimals() + 1); 109 if (z == b) 110 doublespinbox[i].setDecimals(doublespinbox[i].decimals() - 1); 111 delete menu; 112 return true; 113 } 108 114 } 109 return object->eventFilter(object, event); 115 } 116 return object->eventFilter(object, event); 110 117 } 111 118 112 119 void Vector3DSpinBox::SetUptodate(void) { 113 114 115 120 ui_to_var(); 121 ui_to_xml(); 122 visible_widget->setPalette(black_pal); 116 123 } 117 124 118 125 void Vector3DSpinBox::ui_to_var(void) { 119 for(int i=0;i<3;i++) {120 doublespinbox_value[i]=doublespinbox[i].cleanText();121 126 for (int i = 0; i < 3; i++) { 127 doublespinbox_value[i] = doublespinbox[i].cleanText(); 128 } 122 129 } 123 130 124 131 void Vector3DSpinBox::ui_to_xml(void) { 125 SetAttribute("value_x",doublespinbox[0].cleanText());126 SetAttribute("value_y",doublespinbox[1].cleanText());127 SetAttribute("value_z",doublespinbox[2].cleanText());132 SetAttribute("value_x", doublespinbox[0].cleanText()); 133 SetAttribute("value_y", doublespinbox[1].cleanText()); 134 SetAttribute("value_z", doublespinbox[2].cleanText()); 128 135 } 129 136 130 137 void Vector3DSpinBox::Reset(void) { 131 //le setvalue fait un arrondi pour l'affichage, la variable n'est donc plus egale 132 //on reprend la valeur de la boite et on force la couleur a noir 133 adjust_decimals(doublespinbox_value); 134 for(int i=0;i<3;i++) { 135 doublespinbox[i].setValue(doublespinbox_value[i].toDouble()); 136 doublespinbox_value[i]= doublespinbox[i].cleanText(); 137 } 138 visible_widget->setPalette(black_pal); 138 // le setvalue fait un arrondi pour l'affichage, la variable n'est donc plus 139 // egale 140 // on reprend la valeur de la boite et on force la couleur a noir 141 adjust_decimals(doublespinbox_value); 142 for (int i = 0; i < 3; i++) { 143 doublespinbox[i].setValue(doublespinbox_value[i].toDouble()); 144 doublespinbox_value[i] = doublespinbox[i].cleanText(); 145 } 146 visible_widget->setPalette(black_pal); 139 147 } 140 148 141 149 void Vector3DSpinBox::LoadEvent(QDomElement dom) { 142 if(doublespinbox[0].isEnabled()) {143 144 145 if(doublespinbox[1].isEnabled()) {146 147 148 if(doublespinbox[2].isEnabled()) {149 150 150 if (doublespinbox[0].isEnabled()) { 151 doublespinbox[0].setValue((dom.attribute("value_x")).toDouble()); 152 } 153 if (doublespinbox[1].isEnabled()) { 154 doublespinbox[1].setValue((dom.attribute("value_y")).toDouble()); 155 } 156 if (doublespinbox[2].isEnabled()) { 157 doublespinbox[2].setValue((dom.attribute("value_z")).toDouble()); 158 } 151 159 } 152 160 153 161 void Vector3DSpinBox::valuechanged(const QString &value) { 154 for(int i=0;i<3;i++) {155 if((QDoubleSpinBox*)sender()==&doublespinbox[i] && value!=doublespinbox_value[i]) {156 visible_widget->setPalette(red_pal);157 return;158 }162 for (int i = 0; i < 3; i++) { 163 if ((QDoubleSpinBox *)sender() == &doublespinbox[i] && 164 value != doublespinbox_value[i]) { 165 visible_widget->setPalette(red_pal); 166 return; 159 167 } 160 visible_widget->setPalette(black_pal); 168 } 169 visible_widget->setPalette(black_pal); 161 170 } 162 171 163 172 bool Vector3DSpinBox::IsUptodate(void) { 164 //si le widget n'est pas enabled, sa palette est differente de rouge (greyed) donc on renvoit true 165 //permet de ne pas envoyer les modifs d'un widget disabled 166 //if(label->palette()==red_pal) return false; 167 if(visible_widget->palette()==red_pal) return false; 168 return true; 173 // si le widget n'est pas enabled, sa palette est differente de rouge (greyed) 174 // donc on renvoit true 175 // permet de ne pas envoyer les modifs d'un widget disabled 176 // if(label->palette()==red_pal) return false; 177 if (visible_widget->palette() == red_pal) 178 return false; 179 return true; 169 180 } 170
Note:
See TracChangeset
for help on using the changeset viewer.