EtherCAT Graphical User Interface Code 0.0.1
EtherCAT GUI that uses different communication protocols with EtherCAT Master server.
Loading...
Searching...
No Matches
ec_gui_sdo.h
1#ifndef EC_GUI_SDO_H
2#define EC_GUI_SDO_H
3
4#include <QtUiTools>
5#include <QWidget>
6
7#include "utils/ec_utils.h"
8
9class EcGuiSdo : public QWidget
10{
11 Q_OBJECT
12
13public:
14
15 typedef std::shared_ptr<EcGuiSdo> Ptr;
16
17 EcGuiSdo(QWidget * parent = 0);
18
19 ~EcGuiSdo();
20
21 void set_expert_user();
22 void restart_ec_gui_sdo(EcIface::Ptr client,SRD_SDO sdo_map);
23
24private slots:
25 void OnMouseClicked(QTreeWidgetItem* item, int column);
26 void OnItemExapanded(QTreeWidgetItem* item);
27 void SdoSearchChanged();
28 void onSaveSdoReleased();
29 void onRescanSdoReleased();
30 void onRestoreSdoReleased();
31 void onLoadSdoReleased();
32 void onSaveFileSdoReleased();
33 void onOpenFileSdoReleased();
34 void onYesToAllSdoReleased();
35 void onNoToAllSdoReleased();
36
37protected:
38 bool eventFilter( QObject* o, QEvent* e );
39
40private:
41 EcIface::Ptr _client;
42 QTreeWidget *_sdo_tree_wid;
43 QTreeWidgetItem *_sdo_item;
44 QLineEdit *_sdo_search;
45 QDialogButtonBox *_sdo_manager,*_sdo_flash_manager;
46 int _sdo_column;
47 std::map<uint32_t,std::map<std::string,QTreeWidgetItem *>> _sdo_item_map;
48 SRD_SDO _sdo_map;
49 std::string _old_sdo_value;
50 bool _user_expert;
51 QString _sdo_search_req;
52 Qt::CheckState _esc_id_state=Qt::Unchecked;
53
54 void add_esc_sdo();
55 void search_sdo();
56 bool check_client_setup();
57 void rescan_sdo();
58 void flash_cmd(int value);
59 void save_sdo_file();
60 void open_sdo_file();
61 void cmd_feedback(bool try_cmd,bool cmd_ok,QString cmd_name);
62 void esc_id_check();
63};
64
65class EcGuiSdoWizard : public QWidget
66{
67 Q_OBJECT
68
69public:
70 EcGuiSdoWizard(QWidget * parent = 0){
71 _sdo_wizard_tree = new QTreeWidget();
72 _sdo_wizard_tree->setColumnCount(2);
73 _sdo_wizard_tree->setHeaderLabels({"SDO Name","SDO Value"});
74 _sdo_wizard_tree->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
75 _sdo_wizard_tree->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
76 _sdo_wizard_tree->setMinimumSize(600,600);
77
78 auto sdo_sel_manager = new QDialogButtonBox(QDialogButtonBox::YesToAll| QDialogButtonBox::NoToAll);
79 sdo_sel_manager->setLayoutDirection(Qt::RightToLeft);
80 auto yes_all_btn = sdo_sel_manager->button(QDialogButtonBox::YesToAll);
81 connect(yes_all_btn, &QPushButton::released,this, &EcGuiSdoWizard::onYesToAllSdoReleased);
82 auto no_all_btn = sdo_sel_manager->button(QDialogButtonBox::NoToAll);
83 connect(no_all_btn, &QPushButton::released,this, &EcGuiSdoWizard::onNoToAllSdoReleased);
84
85 QWizardPage *sdo_wizard_page = new QWizardPage();
86 sdo_wizard_page->setTitle("Calibration Wizard");
87 QVBoxLayout *layout = new QVBoxLayout;
88 layout->addWidget(_sdo_wizard_tree);
89 layout->addWidget(sdo_sel_manager);
90
91 QHBoxLayout *layout_page = new QHBoxLayout;
92 QLabel *calib_image=new QLabel;
93 QPixmap calib_logo_pic;
94 calib_logo_pic.load(":/icon/calibration.png");
95 calib_image->setPixmap(calib_logo_pic);
96 layout_page->addWidget(calib_image);
97 layout_page->addLayout(layout);
98 sdo_wizard_page->setLayout(layout_page);
99 _sdo_wizard.addPage(sdo_wizard_page);
100 _sdo_wizard.setFixedSize(layout_page->geometry().width(),layout_page->geometry().height());
101 };
102
103 WR_SDO run_sdo_wizard(){
104 _write_new_sdo.clear();
105 if(init_wizard()){
106 if(_sdo_wizard.exec()){
107 fill_write_sdo();
108 }
109 }
110 return _write_new_sdo;
111 };
112
113
114 ~EcGuiSdoWizard(){};
115
116private slots:
117 void onYesToAllSdoReleased(){
118 _sdo_check_state=Qt::Checked;
119 sdo_checking();
120 };
121
122 void onNoToAllSdoReleased(){
123 _sdo_check_state=Qt::Unchecked;
124 sdo_checking();
125 };
126private:
127 QTreeWidget *_sdo_wizard_tree;
128 QWizard _sdo_wizard;
129 Qt::CheckState _sdo_check_state=Qt::Unchecked;
130 WR_SDO _write_new_sdo;
131
132 bool init_wizard(){
133 QFileDialog dialog(this);
134 dialog.setFileMode(QFileDialog::AnyFile);
135 dialog.setNameFilter(tr(".csv (*.csv)"));
136 QStringList fileNames;
137 if (dialog.exec()){
138 fileNames = dialog.selectedFiles();
139 }
140 if(!fileNames.empty()){
141 QFile *sdo_file=new QFile(fileNames[0]);
142 if(sdo_file->open(QFile::ReadOnly)){
143 QTextStream in(sdo_file);
144 while (!in.atEnd()){
145 QStringList split_line = in.readLine().split("\t");
146 add_content(split_line);
147 }
148 sdo_file->close();
149 return true;
150 }
151 }
152 return false;
153 };
154
155 void add_content(QStringList &list){
156 if(!list.empty()){
157 int i=0;
158 QTreeWidgetItem * sdo_wizard_item = new QTreeWidgetItem();
159 for(auto &value:list){
160 sdo_wizard_item->setText(i,value);
161 sdo_wizard_item->setFlags(sdo_wizard_item->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable);
162 sdo_wizard_item->setCheckState(0,Qt::Unchecked);
163 i++;
164 }
165 _sdo_wizard_tree->addTopLevelItem(sdo_wizard_item);
166 }
167 };
168
169 void sdo_checking(){
170 for(int i=0;i<_sdo_wizard_tree->topLevelItemCount();i++){
171 auto topLevel =_sdo_wizard_tree->topLevelItem(i);
172 topLevel->setCheckState(0,_sdo_check_state);
173 }
174 };
175 void fill_write_sdo(){
176 for(int i=0;i<_sdo_wizard_tree->topLevelItemCount();i++){
177 auto topLevel =_sdo_wizard_tree->topLevelItem(i);
178 if(topLevel->checkState(0)==Qt::Checked){
179 std::string sdo_name = topLevel->text(0).toStdString();
180 std::string sdo_value = topLevel->text(1).toStdString();
181 _write_new_sdo.push_back(std::make_tuple(sdo_name,sdo_value));
182 }
183 }
184 };
185};
186
187#endif // EC_GUI_SDO_H
188
189
Definition ec_gui_sdo.h:66
Definition ec_gui_sdo.h:10