Blame view

app/gui/oven_control/autocookselectionwindow.cpp 5.3 KB
99b8066f4   김태훈   V0.1.1
1
2
3
4
  #include "autocookselectionwindow.h"
  #include "ui_autocookselectionwindow.h"
  
  #include <QSignalMapper>
6f96c947a   김태훈   GUI 0.1.4
5
  #include <QtDebug>
6f1aa03f6   김태훈   엔코더 구현
6
  #include <QKeyEvent>
99b8066f4   김태훈   V0.1.1
7
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
8
  #include "autocookconfigwindow.h"
bbd7d8f29   김태훈   버튼 음향 추가
9
  #include "soundplayer.h"
e00c6a2a9   김태훈   기능 추가 구현
10
11
12
  #include "configwindow.h"
  #include "washwindow.h"
  #include "mainwindow.h"
1342af7b3   김태훈   도움말 버튼 연결
13
  #include "manualviewerdlg.h"
99b8066f4   김태훈   V0.1.1
14
efecf3b06   김태훈   자동 요리 선택 화면에 페이지 ...
15
16
  #define MAX_BUTTONS 30
  #define BUTTONS_PER_PAGE 27
3f52600cc   김태훈   소스 코드 구조 개선
17
  AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Define::CookType type) :
99b8066f4   김태훈   V0.1.1
18
19
      QMainWindow(parent),
      ui(new Ui::AutoCookSelectionWindow),
3f52600cc   김태훈   소스 코드 구조 개선
20
      type(type), autoCookWindowOpened(false)
99b8066f4   김태훈   V0.1.1
21
22
  {
      ui->setupUi(this);
6f96c947a   김태훈   GUI 0.1.4
23
      ui->clockContainer->setParent(ui->upperStack);
99b8066f4   김태훈   V0.1.1
24
      setAttribute(Qt::WA_DeleteOnClose);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
25
      ui->cookTypeIcon->setPixmap(Define::icon(type));
99b8066f4   김태훈   V0.1.1
26
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
27
      book = CookBook(type);
99b8066f4   김태훈   V0.1.1
28
29
30
  
      QSignalMapper *sm = new QSignalMapper(this);
      connect(sm, SIGNAL(mapped(int)), SLOT(onCookSelected(int)));
35b9cc32e   고영탁   다국어 지원 수정 및 메뉴얼 테...
31
      QFont font = this->font();
99b8066f4   김태훈   V0.1.1
32
33
34
35
36
37
      font.setPointSize(10);
      font.setBold(true);
      font.setWeight(75);
  
      QLatin1String stylesheet("QPushButton {
  "
05f2a7552   김태훈   image 관리 구조 변경
38
39
      "border-image: url(:/images/button/288.png);
  "
99b8066f4   김태훈   V0.1.1
40
41
      "}
  "
6f1aa03f6   김태훈   엔코더 구현
42
43
      "QPushButton::pressed, QPushButton:focus {
  "
05f2a7552   김태훈   image 관리 구조 변경
44
45
      "border-image: url(:/images/button/288_ov.png);
  "
99b8066f4   김태훈   V0.1.1
46
      "}");
efecf3b06   김태훈   자동 요리 선택 화면에 페이지 ...
47
48
49
      int cnt = book.list.size();
      if (cnt > MAX_BUTTONS)
          cnt = BUTTONS_PER_PAGE;
f6a046019   김태훈   엔코더 로직 개선
50
      QWidget *last = this;
efecf3b06   김태훈   자동 요리 선택 화면에 페이지 ...
51
      for (int idx = 0; idx < cnt; idx++)
99b8066f4   김태훈   V0.1.1
52
      {
99b8066f4   김태훈   V0.1.1
53
54
55
56
57
58
59
          int x = 12 + (idx % 3) * 294;
          int y = 615 + (idx / 3) * 80;
  
          QPushButton *pb = new QPushButton(this);
          pb->setGeometry(QRect(x, y, 288, 70));
          pb->setFont(font);
          pb->setStyleSheet(stylesheet);
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
60
          pb->setText(book.list.at(idx));
99b8066f4   김태훈   V0.1.1
61
62
63
  
          sm->setMapping(pb, idx);
          connect(pb, SIGNAL(clicked()), sm, SLOT(map()));
6f1aa03f6   김태훈   엔코더 구현
64
f6a046019   김태훈   엔코더 로직 개선
65
          setTabOrder(last, pb);
efecf3b06   김태훈   자동 요리 선택 화면에 페이지 ...
66
          button.append(pb);
f6a046019   김태훈   엔코더 로직 개선
67
          last = pb;
99b8066f4   김태훈   V0.1.1
68
      }
bbd7d8f29   김태훈   버튼 음향 추가
69
efecf3b06   김태훈   자동 요리 선택 화면에 페이지 ...
70
71
72
73
74
75
76
77
78
79
80
81
82
      if (book.list.size() > MAX_BUTTONS) {
          ui->bullets->setBulletPixmap(":/images/auto_popup/bullet.png");
          ui->bullets->setCurrentBulletPixmap(":/images/auto_popup/bullet_selected.png");
          ui->bullets->setMaximum(book.list.size() / BUTTONS_PER_PAGE);
      } else {
          ui->bullets->hide();
          ui->prev->hide();
          ui->next->hide();
      }
  
      setTabOrder(last, ui->prev);
      setTabOrder(ui->prev, ui->next);
      setTabOrder(ui->next, ui->backButton);
f6a046019   김태훈   엔코더 로직 개선
83
84
85
      setTabOrder(ui->backButton, ui->configButton);
      setTabOrder(ui->configButton, ui->washButton);
      setTabOrder(ui->washButton, ui->helpButton);
bbd7d8f29   김태훈   버튼 음향 추가
86
87
      foreach (QPushButton *button, findChildren<QPushButton *>())
          connect(button, &QPushButton::pressed, SoundPlayer::playClick);
6f1aa03f6   김태훈   엔코더 구현
88
89
  
      setFocus();
99b8066f4   김태훈   V0.1.1
90
91
92
93
94
  }
  
  AutoCookSelectionWindow::~AutoCookSelectionWindow()
  {
      delete ui;
99b8066f4   김태훈   V0.1.1
95
  }
6f1aa03f6   김태훈   엔코더 구현
96
97
98
99
  void AutoCookSelectionWindow::keyPressEvent(QKeyEvent *event)
  {
      switch (event->key())
      {
01249f413   김태훈   엔코더 방향 반전. 하드웨어가 변경됨
100
      case 0x01000032:    // Turn left
6f1aa03f6   김태훈   엔코더 구현
101
102
103
104
105
          onEncoderLeft();
          break;
      case 0x01000031:    // Push
          pushed = focusWidget();
          break;
01249f413   김태훈   엔코더 방향 반전. 하드웨어가 변경됨
106
      case 0x01000030:    // Turn right
6f1aa03f6   김태훈   엔코더 구현
107
108
109
110
111
112
113
114
115
          onEncoderRight();
          break;
      }
  }
  
  void AutoCookSelectionWindow::keyReleaseEvent(QKeyEvent *event)
  {
      switch (event->key())
      {
01249f413   김태훈   엔코더 방향 반전. 하드웨어가 변경됨
116
      case 0x01000032:    // Turn left
6f1aa03f6   김태훈   엔코더 구현
117
118
119
120
121
122
123
124
          onEncoderLeft();
          break;
      case 0x01000031:    // Push
          if (focusWidget() == pushed)
              onEncoderClicked(pushed);
  
          pushed = NULL;
          break;
01249f413   김태훈   엔코더 방향 반전. 하드웨어가 변경됨
125
      case 0x01000030:    // Turn right
6f1aa03f6   김태훈   엔코더 구현
126
127
128
129
          onEncoderRight();
          break;
      }
  }
99b8066f4   김태훈   V0.1.1
130
131
  void AutoCookSelectionWindow::onCookSelected(int idx)
  {
e9e5be516   김태훈   창 전환 후 복귀했을 때 포커스...
132
      setFocus();
efecf3b06   김태훈   자동 요리 선택 화면에 페이지 ...
133
      idx += ui->bullets->currentIndex() * BUTTONS_PER_PAGE;
e00c6a2a9   김태훈   기능 추가 구현
134
135
136
137
138
      AutoCookConfigWindow *w = new AutoCookConfigWindow(this, book.get(idx));
      w->setWindowModality(Qt::WindowModal);
      w->showFullScreen();
      w->raise();
  }
d66d7f5b4   김태훈   GUI 버전 0.1.2
139
e00c6a2a9   김태훈   기능 추가 구현
140
141
  void AutoCookSelectionWindow::on_backButton_clicked()
  {
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
142
      close();
e00c6a2a9   김태훈   기능 추가 구현
143
144
145
146
147
148
149
150
151
152
153
  }
  
  void AutoCookSelectionWindow::on_configButton_clicked()
  {
      ConfigWindow *w = new ConfigWindow(MainWindow::getInstance());
      w->setWindowModality(Qt::WindowModal);
      w->showFullScreen();
      w->raise();
  
      MainWindow::jump(w);
  }
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
154
e00c6a2a9   김태훈   기능 추가 구현
155
156
157
  void AutoCookSelectionWindow::on_washButton_clicked()
  {
      WashWindow *w = new WashWindow(MainWindow::getInstance());
6f96c947a   김태훈   GUI 0.1.4
158
      w->setWindowModality(Qt::WindowModal);
99b8066f4   김태훈   V0.1.1
159
      w->showFullScreen();
6a81d38e4   김태훈   자동 요리 관련 로직 전면 재작성
160
      w->raise();
e00c6a2a9   김태훈   기능 추가 구현
161
162
  
      MainWindow::jump(w);
99b8066f4   김태훈   V0.1.1
163
  }
e00c6a2a9   김태훈   기능 추가 구현
164
  void AutoCookSelectionWindow::on_helpButton_clicked()
99b8066f4   김태훈   V0.1.1
165
  {
1342af7b3   김태훈   도움말 버튼 연결
166
167
168
      ManualViewerDlg* dlg = new ManualViewerDlg(this, AUTO_COOK_PAGE);
      dlg->showFullScreen();
      dlg->raise();
99b8066f4   김태훈   V0.1.1
169
  }
6f1aa03f6   김태훈   엔코더 구현
170
171
172
  
  void AutoCookSelectionWindow::onEncoderLeft()
  {
f6a046019   김태훈   엔코더 로직 개선
173
      focusPreviousChild();
6f1aa03f6   김태훈   엔코더 구현
174
175
176
177
  }
  
  void AutoCookSelectionWindow::onEncoderRight()
  {
f6a046019   김태훈   엔코더 로직 개선
178
      focusNextChild();
6f1aa03f6   김태훈   엔코더 구현
179
180
181
182
183
184
185
186
  }
  
  void AutoCookSelectionWindow::onEncoderClicked(QWidget *clicked)
  {
      QPushButton *b = qobject_cast<QPushButton *>(clicked);
      if (b)
          b->click();
  }
efecf3b06   김태훈   자동 요리 선택 화면에 페이지 ...
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
  
  void AutoCookSelectionWindow::list()
  {
      int startAt = ui->bullets->currentIndex() * BUTTONS_PER_PAGE;
      for (int i = 0; i < button.size(); i++) {
          QPushButton *pb = button.at(i);
  
          int cookIdx = startAt + i;
          if (cookIdx >= book.list.size())
              pb->hide();
          else {
              pb->setText(book.list.at(cookIdx));
              pb->show();
          }
      }
  }
  
  void AutoCookSelectionWindow::on_prev_clicked()
  {
      ui->bullets->setCurrentIndex(ui->bullets->currentIndex() - 1);
      list();
  }
  
  void AutoCookSelectionWindow::on_next_clicked()
  {
      ui->bullets->setCurrentIndex(ui->bullets->currentIndex() + 1);
      list();
  }