Blame view

app/gui/oven_control/configwindow.cpp 11 KB
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
1
  #include <QList>
8c2952457   김태훈   응용 프로그램 추가
2
3
  #include "configwindow.h"
  #include "ui_configwindow.h"
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
4
  #include "configfavoritebutton.h"
8c2952457   김태훈   응용 프로그램 추가
5
  #include "functiontestwindow.h"
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
6
  #include "engineermenuwindow.h"
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
7
  #include "config.h"
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
8
  #include "configinfodlg.h"
dbfe7c9ea   고영탁   설정 저장 기능 추가
9
  #include "yesnopopupdlg.h"
0603c0b43   고영탁   rtc 설정을 시스템에서 하도록 수정
10
  #include "configdatetimedlg.h"
d0ee3ccc8   고영탁   버그 수정 및 비밀 번호 입력창 개발
11
  #include "servicepassinputdlg.h"
1f685a2a5   고영탁   설정 시스템 관리 기능 개발
12
  #include "fileprocessor.h"
66e60ceb5   김태훈   모든 버튼에 음향 효과 추가
13
  #include "soundplayer.h"
e00c6a2a9   김태훈   기능 추가 구현
14
15
  #include "washwindow.h"
  #include "mainwindow.h"
663943a37   고영탁   설정 기능 마무리 진행 중
16
  #include "configdoormonitoring.h"
81b55e046   고영탁   config pannel but...
17
538041ab9   김태훈   소스 코드 구조 개선
18
  ConfigWindow::ConfigWindow(QWidget *parent) :
8c2952457   김태훈   응용 프로그램 추가
19
      QMainWindow(parent),
538041ab9   김태훈   소스 코드 구조 개선
20
      ui(new Ui::ConfigWindow)
8c2952457   김태훈   응용 프로그램 추가
21
  {
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
22
      uint32_t idx;
8c2952457   김태훈   응용 프로그램 추가
23
      ui->setupUi(this);
6f96c947a   김태훈   GUI 0.1.4
24
25
26
  
      ui->clockContainer->setParent(ui->upperStack);
      setAttribute(Qt::WA_DeleteOnClose);
5a38a241e   김태훈   환경 설정 뼈대 추가
27
81b55e046   고영탁   config pannel but...
28
      ui->scrollAreaMenuLayout->setAlignment(Qt::AlignTop);
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
29
66e60ceb5   김태훈   모든 버튼에 음향 효과 추가
30
31
      foreach (QPushButton *button, findChildren<QPushButton *>())
          connect(button, &QPushButton::pressed, SoundPlayer::playClick);
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
32
33
34
35
36
37
38
39
      Config* cfg = Config::getInstance();
  
      QSetIterator<uint32_t> itr = cfg->getConstBeginFavorite();
      while(itr.hasNext()) itr.next();
  
      while(itr.hasPrevious()){
          idx = itr.previous();
          //configbtn = new ConfigPanelButton(this,idx);
81b55e046   고영탁   config pannel but...
40
      }
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
41
      m_nCurConfigPos = config_menu_favorite;
81b55e046   고영탁   config pannel but...
42
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
43
      reloadUi();
5a38a241e   김태훈   환경 설정 뼈대 추가
44
8c2952457   김태훈   응용 프로그램 추가
45
46
47
48
49
50
51
52
53
  }
  
  ConfigWindow::~ConfigWindow()
  {
      delete ui;
  }
  
  void ConfigWindow::on_pushButton_clicked()
  {
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
54
55
56
57
      if(m_nCurConfigPos != config_menu_favorite){
          m_nCurConfigPos = config_menu_favorite;
          reloadUi();
      }
5a38a241e   김태훈   환경 설정 뼈대 추가
58
  }
80c5eb48b   고영탁   configwindow 엔코더 ...
59
  void ConfigWindow::prevFocus(){
40f5d047f   고영탁   엔코더 작업 진행 중
60
61
62
      int i = 0;
      for(i = 0; i < m_vectorTabOrder.size();i++){
          if(focusWidget() == m_vectorTabOrder[i]) break;
80c5eb48b   고영탁   configwindow 엔코더 ...
63
      }
40f5d047f   고영탁   엔코더 작업 진행 중
64
65
66
67
  
      if(i==0){
          i = m_vectorTabOrder.size()-1;
          m_vectorTabOrder[i]->setFocus();
80c5eb48b   고영탁   configwindow 엔코더 ...
68
      }
40f5d047f   고영탁   엔코더 작업 진행 중
69
70
71
      else if(i < m_vectorTabOrder.size()) {
          i = i - 1;
          m_vectorTabOrder[i]->setFocus();
80c5eb48b   고영탁   configwindow 엔코더 ...
72
      }
40f5d047f   고영탁   엔코더 작업 진행 중
73
74
75
      else{
          i=0;
          m_vectorTabOrder[i]->setFocus();
80c5eb48b   고영탁   configwindow 엔코더 ...
76
      }
80c5eb48b   고영탁   configwindow 엔코더 ...
77
78
79
  }
  
  void ConfigWindow::nextFocus(){
40f5d047f   고영탁   엔코더 작업 진행 중
80
81
82
      int i = 0;
      for(i = 0; i < m_vectorTabOrder.size();i++){
          if(focusWidget() == m_vectorTabOrder[i]) break;
80c5eb48b   고영탁   configwindow 엔코더 ...
83
      }
40f5d047f   고영탁   엔코더 작업 진행 중
84
85
86
87
  
      if(i<m_vectorTabOrder.size()-1){
          i+=1;
          m_vectorTabOrder[i]->setFocus();
80c5eb48b   고영탁   configwindow 엔코더 ...
88
      }
40f5d047f   고영탁   엔코더 작업 진행 중
89
90
91
      else if(i== (m_vectorTabOrder.size()-1)){
          i=0;
          m_vectorTabOrder[i]->setFocus();
80c5eb48b   고영탁   configwindow 엔코더 ...
92
      }
40f5d047f   고영탁   엔코더 작업 진행 중
93
94
95
      else{
          i=0;
          m_vectorTabOrder[i]->setFocus();
80c5eb48b   고영탁   configwindow 엔코더 ...
96
      }
40f5d047f   고영탁   엔코더 작업 진행 중
97
      return;
80c5eb48b   고영탁   configwindow 엔코더 ...
98
99
100
101
102
103
  }
  
  void ConfigWindow::keyReleaseEvent(QKeyEvent *event){
      switch (event->key())
      {
      case 0x01000030:    // Turn left
80c5eb48b   고영탁   configwindow 엔코더 ...
104
          prevFocus();
40f5d047f   고영탁   엔코더 작업 진행 중
105
          ui->scrollArea->ensureWidgetVisible(m_vectorTabOrder[m_nTabIndex]);
80c5eb48b   고영탁   configwindow 엔코더 ...
106
107
108
109
110
111
112
113
114
115
116
117
          break;
      case 0x01000031:    // Push
      {
          QPushButton *btn = qobject_cast<QPushButton*>(focusWidget());
          if(btn != NULL){
              btn->click();
          }
          qDebug() << "pushed ";
          break;
      }
      case 0x01000032:    // Turn right
          nextFocus();
40f5d047f   고영탁   엔코더 작업 진행 중
118
          ui->scrollArea->ensureWidgetVisible(focusWidget());
80c5eb48b   고영탁   configwindow 엔코더 ...
119
120
121
122
123
124
125
126
127
          qDebug() << "Turn Right";
          break;
      }
  }
  
  void ConfigWindow::keyPressEvent(QKeyEvent *event){
      switch (event->key())
      {
      case 0x01000030:    // Turn left
80c5eb48b   고영탁   configwindow 엔코더 ...
128
          prevFocus();
40f5d047f   고영탁   엔코더 작업 진행 중
129
          ui->scrollArea->ensureWidgetVisible(focusWidget());
80c5eb48b   고영탁   configwindow 엔코더 ...
130
131
132
133
134
135
136
137
          qDebug() << "turn left";
          break;
      case 0x01000031:    // Push
  
          qDebug() << "pushed ";
          break;
      case 0x01000032:    // Turn right
          nextFocus();
40f5d047f   고영탁   엔코더 작업 진행 중
138
          ui->scrollArea->ensureWidgetVisible(focusWidget());
80c5eb48b   고영탁   configwindow 엔코더 ...
139
140
141
142
          qDebug() << "Turn Right";
          break;
      }
  }
5a38a241e   김태훈   환경 설정 뼈대 추가
143
144
  void ConfigWindow::on_backButton_clicked()
  {
dbfe7c9ea   고영탁   설정 저장 기능 추가
145
146
147
148
149
150
      Config* cfg = Config::getInstance();
      QDialog* dlg = new YesNoPopupDlg(this,tr("현재 설정을 적용하시겠습니까?"));
      dlg->setModal(true);
      dlg->exec();
      if(dlg->result() == QDialog::Accepted){
          cfg->saveConfig();
eaa388fe1   고영탁   설정 즐겨찾기 저장 기능 개발
151
          cfg->saveFavorite();
dbfe7c9ea   고영탁   설정 저장 기능 추가
152
153
154
      }
      else{
          cfg->loadConfig();
eaa388fe1   고영탁   설정 즐겨찾기 저장 기능 개발
155
          cfg->loadFavorite();
dbfe7c9ea   고영탁   설정 저장 기능 추가
156
      }
af41f4730   고영탁   볼륨조절 표시 변경
157
      cfg->applyConfig();
5a38a241e   김태훈   환경 설정 뼈대 추가
158
      close();
8c2952457   김태훈   응용 프로그램 추가
159
  }
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
160
161
162
  
  void ConfigWindow::on_pushButton_3_clicked()
  {
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
163
      /*EngineerMenuWindow *w = new EngineerMenuWindow(this);
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
164
      w->setWindowModality(Qt::WindowModal);
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
165
166
167
168
169
      w->showFullScreen();*/
      if(m_nCurConfigPos != config_menu_service){
          m_nCurConfigPos = config_menu_service;
          reloadUi();
      }
3f5f5d4ce   고영탁   디버깅 요청 사항 적용
170
  }
81b55e046   고영탁   config pannel but...
171
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
172
  void ConfigWindow::on_pushButton_8_clicked() //설정 버튼
81b55e046   고영탁   config pannel but...
173
  {
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
174
175
176
177
      if(m_nCurConfigPos != config_menu_setting){
          m_nCurConfigPos = config_menu_setting;
          reloadUi();
      }
81b55e046   고영탁   config pannel but...
178
  }
937409186   고영탁   config enum 설정 진행...
179
180
181
182
183
184
185
186
  void ConfigWindow::reloadValue(){
      Config* cfg = Config::getInstance();
      QString strtemp="";
      for(int i=0;i<m_vectorMenuList.count();i++){
          strtemp = cfg->getValueString(m_arrConfigListInfos[m_nCurConfigPos][i]);
          m_vectorMenuList[i]->setValue(strtemp);
      }
  }
81b55e046   고영탁   config pannel but...
187
  void ConfigWindow::onConfigBtnClicked(uint16_t id){
92fef6124   고영탁   환경 설정 - 설정 UI 완료
188
      Config *cfg = Config::getInstance();
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
189
      QDialog* dlg;
40f5d047f   고영탁   엔코더 작업 진행 중
190
      QWidget *focusedWidget = focusWidget();
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
191
      switch(id){
663943a37   고영탁   설정 기능 마무리 진행 중
192
193
194
195
196
197
198
199
200
      case config_loading_door_monitoring:
      case config_cooking_door_monitoring:
          ConfigDoorMonitoring* wnd;
          wnd = new ConfigDoorMonitoring(this,(ConfigType) id);
          connect(wnd,SIGNAL(destroyed(QObject*)),this,SLOT(reloadValue()));
          wnd->setWindowModality(Qt::WindowModal);
          wnd->showFullScreen();
          qDebug() << "closed window";
          break;
0603c0b43   고영탁   rtc 설정을 시스템에서 하도록 수정
201
202
      case config_datetime:
          dlg = new ConfigDateTimeDlg(this);
00fd78596   고영탁   설정 기능 구현(엔지니어링 모드...
203
          dlg->exec();
0603c0b43   고영탁   rtc 설정을 시스템에서 하도록 수정
204
205
          if(m_nCurConfigPos != config_menu_favorite) reloadValue();
          break;
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
206
207
      case config_enter_engineer_mode:
          {
d0ee3ccc8   고영탁   버그 수정 및 비밀 번호 입력창 개발
208
209
              dlg = new ServicePassInputDlg(this);
              dlg->exec();
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
210
211
212
213
214
215
216
217
218
219
220
221
              break;
          }
      case config_software_info:
      case config_hotline_chef:
      case config_hotline_service:
          dlg = new ConfigInfoDlg(this,(ConfigType)id);
          dlg->exec();
          break;
      default:
          cfg->execConfigWindow(this,(Define::ConfigType)id);
          if(m_nCurConfigPos != config_menu_favorite) reloadValue();
          break;
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
222
      }
40f5d047f   고영탁   엔코더 작업 진행 중
223
      focusedWidget->setFocus();
81b55e046   고영탁   config pannel but...
224
225
226
227
  }
  
  
  void ConfigWindow::onConfigCheckBtnClicked(uint16_t id, bool checked){
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
228
229
230
231
232
233
234
235
      Config* cfg = Config::getInstance();
      qDebug()<<"favorite pressed " << id;
      if(checked){
          cfg->insertFavorite((ConfigType)id);
      }
      else{
          cfg->removeFavorite((ConfigType)id);
      }
81b55e046   고영탁   config pannel but...
236
  }
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
237
238
  
  void ConfigWindow::reloadUi(void){
937409186   고영탁   config enum 설정 진행...
239
      ConfigPanelButton** pws = m_vectorMenuList.data();
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
240
      ConfigFavoriteButton** fpws = m_vectorFavorMenuList.data();
937409186   고영탁   config enum 설정 진행...
241
      ConfigPanelButton* pw;
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
242
      ConfigPanelButton *pcb;
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
243
244
245
246
247
248
249
  
      ConfigFavoriteButton* fpw;
      ConfigFavoriteButton* fpcb;
  
      uint32_t idx;
  
      int i = 0;
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
250
251
      Config* cfg = Config::getInstance();
      QString strtemp="";
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
252
      for(i = 0; i < m_vectorMenuList.count();i++){
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
253
254
255
256
257
          pw = pws[i];
          ui->scrollAreaMenuLayout->removeWidget(pw);
          delete pw;
      }
      m_vectorMenuList.clear();
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
258
259
260
261
262
263
      for(i=0;i<m_vectorFavorMenuList.count();i++){
          fpw = fpws[i];
          ui->scrollAreaMenuLayout->removeWidget(fpw);
          delete fpw;
      }
      m_vectorFavorMenuList.clear();
40f5d047f   고영탁   엔코더 작업 진행 중
264
265
266
267
268
269
270
271
272
273
      m_vectorTabOrder.clear();
      m_vectorTabOrder.append(this);
      m_vectorTabOrder.append(ui->pushButton);
      m_vectorTabOrder.append(ui->pushButton_8);
      m_vectorTabOrder.append(ui->pushButton_7);
      m_vectorTabOrder.append(ui->pushButton_2);
      m_vectorTabOrder.append(ui->pushButton_4);
      m_vectorTabOrder.append(ui->pushButton_5);
      m_vectorTabOrder.append(ui->pushButton_6);
      m_vectorTabOrder.append(ui->pushButton_3);
80c5eb48b   고영탁   configwindow 엔코더 ...
274
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
275
      if(m_nCurConfigPos != config_menu_favorite){
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
276
          for(i=0 ; i < m_arrMaxMenuCount[m_nCurConfigPos] ;i++){
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
277
278
279
280
281
282
283
284
              pcb = new ConfigPanelButton(this,m_arrConfigListInfos[m_nCurConfigPos][i]);
              qDebug() <<m_arrConfigListInfos[m_nCurConfigPos][i] << cfg->getTitleString(m_arrConfigListInfos[m_nCurConfigPos][i]);
              strtemp = cfg->getTitleString(m_arrConfigListInfos[m_nCurConfigPos][i]);
              pcb->setText(strtemp);
              strtemp = cfg->getValueString(m_arrConfigListInfos[m_nCurConfigPos][i]);
              pcb->setValue(strtemp);
              pcb->showFavoriteButton();
              pcb->setFavoriteCheck(cfg->isFavorite(m_arrConfigListInfos[m_nCurConfigPos][i]));
40f5d047f   고영탁   엔코더 작업 진행 중
285
286
              m_vectorTabOrder.append(pcb->getFavoriteBtn());
              m_vectorTabOrder.append(pcb->getBtn());
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
287
288
289
              ui->scrollAreaMenuLayout->addWidget(pcb);
              m_vectorMenuList.append(pcb);
              connect(pcb ,SIGNAL(clicked(uint16_t)),SLOT(onConfigBtnClicked(uint16_t)));
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
290
291
292
293
294
295
296
297
298
299
              connect(pcb,SIGNAL(checkButtonClicked(uint16_t,bool)),SLOT(onConfigCheckBtnClicked(uint16_t,bool)));
          }
      }
      else{
          QList<uint32_t> list = cfg->getConstSortedFavorite();
          for(i=0;i <  list.count();i++){
              idx = list[i];
              fpcb = new ConfigFavoriteButton(this,idx);
              strtemp = cfg->getTitleString((ConfigType)idx);
              fpcb->setText(strtemp);
40f5d047f   고영탁   엔코더 작업 진행 중
300
301
              m_vectorTabOrder.append(fpcb->getBtn());
              m_vectorTabOrder.append(fpcb->getDelBtn());
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
302
303
304
305
              ui->scrollAreaMenuLayout->addWidget(fpcb);
              m_vectorFavorMenuList.append(fpcb);
              connect(fpcb,SIGNAL(clicked(uint16_t)),SLOT(onConfigBtnClicked(uint16_t)));
              connect(fpcb,SIGNAL(delBtnClicked(uint16_t)),SLOT(onDeleteFavoriteBtnClicked(uint16_t)));
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
306
307
          }
      }
40f5d047f   고영탁   엔코더 작업 진행 중
308
309
310
      m_vectorTabOrder.append(ui->backButton);
      m_vectorTabOrder.append(ui->washButton);
      m_vectorTabOrder.append(ui->helpButton);
a7905269d   고영탁   설정 메뉴 화면 기본 구조 완성
311
312
313
314
315
316
317
318
319
320
321
322
  
      ui->scrollAreaMenu->adjustSize(); //Display 전 Contents 사이즈 수정 깜빡임 제거함.
  
  }
  
  void ConfigWindow::on_pushButton_7_clicked() //음향 관리
  {
      if(m_nCurConfigPos != config_menu_sound){
          m_nCurConfigPos = config_menu_sound;
          reloadUi();
      }
  }
937409186   고영탁   config enum 설정 진행...
323
324
325
326
327
328
329
330
  
  void ConfigWindow::on_pushButton_2_clicked()
  {
      if(m_nCurConfigPos != config_menu_system){
          m_nCurConfigPos = config_menu_system;
          reloadUi();
      }
  }
776411ce5   고영탁   설정 기능 5월 개발 범위 UI...
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
  
  void ConfigWindow::on_pushButton_4_clicked()
  {
      if(m_nCurConfigPos != config_menu_energy){
          m_nCurConfigPos = config_menu_energy;
          reloadUi();
      }
  }
  
  void ConfigWindow::on_pushButton_5_clicked()
  {
      if(m_nCurConfigPos != config_menu_expert){
          m_nCurConfigPos = config_menu_expert;
          reloadUi();
      }
  }
  
  void ConfigWindow::onDeleteFavoriteBtnClicked(uint16_t id){
      Config* cfg = Config::getInstance();
      ConfigFavoriteButton* btn;
      for(int i = 0;i<m_vectorFavorMenuList.count();i++){
          if(m_vectorFavorMenuList[i]->getBtnId() == id){
              btn = m_vectorFavorMenuList[i];
              ui->scrollAreaMenuLayout->removeWidget(btn);
              m_vectorFavorMenuList.remove(i);
              delete btn;
              cfg->removeFavorite((ConfigType)id);
          }
      }
  }
e00c6a2a9   김태훈   기능 추가 구현
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
  
  void ConfigWindow::on_washButton_clicked()
  {
      Config* cfg = Config::getInstance();
      QDialog* dlg = new YesNoPopupDlg(this,tr("현재 설정을 적용하시겠습니까?"));
      dlg->setModal(true);
      dlg->exec();
      if(dlg->result() == QDialog::Accepted){
          cfg->saveConfig();
          cfg->saveFavorite();
      }
      else{
          cfg->loadConfig();
          cfg->loadFavorite();
      }
      cfg->applyConfig();
  
      WashWindow *w = new WashWindow(MainWindow::getInstance());
      w->setWindowModality(Qt::WindowModal);
      w->showFullScreen();
      w->raise();
  
      MainWindow::jump(w);
  }
  
  void ConfigWindow::on_helpButton_clicked()
  {
  
  }