10
10
// DetailWidget
11
11
12
12
DetailWidget::DetailWidget (ChartsWidget *charts, QWidget *parent) : charts(charts), QWidget(parent) {
13
- QWidget *main_widget = new QWidget (this );
14
- QVBoxLayout *main_layout = new QVBoxLayout (main_widget);
13
+ QVBoxLayout *main_layout = new QVBoxLayout (this );
15
14
main_layout->setContentsMargins (0 , 0 , 0 , 0 );
16
15
17
16
// tabbar
@@ -65,10 +64,6 @@ DetailWidget::DetailWidget(ChartsWidget *charts, QWidget *parent) : charts(chart
65
64
tab_widget->addTab (history_log = new LogsWidget (this ), utils::icon (" stopwatch" ), " &Logs" );
66
65
main_layout->addWidget (tab_widget);
67
66
68
- stacked_layout = new QStackedLayout (this );
69
- stacked_layout->addWidget (new WelcomeWidget (this ));
70
- stacked_layout->addWidget (main_widget);
71
-
72
67
QObject::connect (binary_view, &BinaryView::resizeSignal, signal_view->model , &SignalModel::resizeSignal);
73
68
QObject::connect (binary_view, &BinaryView::addSignal, signal_view->model , &SignalModel::addSignal);
74
69
QObject::connect (binary_view, &BinaryView::signalHovered, signal_view, &SignalView::signalHovered);
@@ -109,20 +104,8 @@ void DetailWidget::showTabBarContextMenu(const QPoint &pt) {
109
104
}
110
105
}
111
106
112
- void DetailWidget::removeAll () {
113
- msg_id = std::nullopt;
114
- stacked_layout->setCurrentIndex (0 );
115
- tabbar->blockSignals (true );
116
- while (tabbar->count () > 0 ) {
117
- tabbar->removeTab (0 );
118
- }
119
- tabbar->blockSignals (false );
120
- }
121
-
122
107
void DetailWidget::setMessage (const MessageId &message_id) {
123
- if (message_id == msg_id) return ;
124
-
125
- msg_id = message_id;
108
+ if (std::exchange (msg_id, message_id) == message_id) return ;
126
109
127
110
tabbar->blockSignals (true );
128
111
int index = tabbar->count () - 1 ;
@@ -138,24 +121,18 @@ void DetailWidget::setMessage(const MessageId &message_id) {
138
121
tabbar->blockSignals (false );
139
122
140
123
setUpdatesEnabled (false );
141
-
142
- signal_view->setMessage (*msg_id);
143
- binary_view->setMessage (*msg_id);
144
- history_log->setMessage (*msg_id);
145
-
146
- stacked_layout->setCurrentIndex (1 );
124
+ signal_view->setMessage (msg_id);
125
+ binary_view->setMessage (msg_id);
126
+ history_log->setMessage (msg_id);
147
127
refresh ();
148
-
149
128
setUpdatesEnabled (true );
150
129
}
151
130
152
131
void DetailWidget::refresh () {
153
- if (!msg_id) return ;
154
-
155
132
QStringList warnings;
156
- auto msg = dbc ()->msg (* msg_id);
133
+ auto msg = dbc ()->msg (msg_id);
157
134
if (msg) {
158
- if (msg->size != can->lastMessage (* msg_id).dat .size ()) {
135
+ if (msg->size != can->lastMessage (msg_id).dat .size ()) {
159
136
warnings.push_back (tr (" Message size (%1) is incorrect." ).arg (msg->size ));
160
137
}
161
138
for (auto s : binary_view->getOverlappingSignals ()) {
@@ -165,7 +142,7 @@ void DetailWidget::refresh() {
165
142
warnings.push_back (tr (" Drag-Select in binary view to create new signal." ));
166
143
}
167
144
remove_msg_act->setEnabled (msg != nullptr );
168
- name_label->setText (msgName (* msg_id));
145
+ name_label->setText (msgName (msg_id));
169
146
170
147
if (!warnings.isEmpty ()) {
171
148
warning_label->setText (warnings.join (' \n ' ));
@@ -176,7 +153,7 @@ void DetailWidget::refresh() {
176
153
177
154
void DetailWidget::updateState (const QHash<MessageId, CanData> *msgs) {
178
155
time_label->setText (QString::number (can->currentSec (), ' f' , 3 ));
179
- if (!msg_id || (msgs && !msgs->contains (* msg_id)))
156
+ if ((msgs && !msgs->contains (msg_id)))
180
157
return ;
181
158
182
159
if (tab_widget->currentIndex () == 0 )
@@ -186,17 +163,16 @@ void DetailWidget::updateState(const QHash<MessageId, CanData> *msgs) {
186
163
}
187
164
188
165
void DetailWidget::editMsg () {
189
- MessageId id = *msg_id;
190
- auto msg = dbc ()->msg (id);
191
- int size = msg ? msg->size : can->lastMessage (id).dat .size ();
192
- EditMessageDialog dlg (id, msgName (id), size, this );
166
+ auto msg = dbc ()->msg (msg_id);
167
+ int size = msg ? msg->size : can->lastMessage (msg_id).dat .size ();
168
+ EditMessageDialog dlg (msg_id, msgName (msg_id), size, this );
193
169
if (dlg.exec ()) {
194
- UndoStack::push (new EditMsgCommand (* msg_id, dlg.name_edit ->text (), dlg.size_spin ->value ()));
170
+ UndoStack::push (new EditMsgCommand (msg_id, dlg.name_edit ->text (), dlg.size_spin ->value ()));
195
171
}
196
172
}
197
173
198
174
void DetailWidget::removeMsg () {
199
- UndoStack::push (new RemoveMsgCommand (* msg_id));
175
+ UndoStack::push (new RemoveMsgCommand (msg_id));
200
176
}
201
177
202
178
// EditMessageDialog
@@ -242,10 +218,33 @@ void EditMessageDialog::validateName(const QString &text) {
242
218
btn_box->button (QDialogButtonBox::Ok)->setEnabled (valid);
243
219
}
244
220
245
- // WelcomeWidget
221
+ // CenterWidget
246
222
247
- WelcomeWidget::WelcomeWidget ( QWidget *parent) : QWidget(parent) {
223
+ CenterWidget::CenterWidget (ChartsWidget *charts, QWidget *parent) : charts(charts), QWidget(parent) {
248
224
QVBoxLayout *main_layout = new QVBoxLayout (this );
225
+ main_layout->addWidget (welcome_widget = createWelcomeWidget ());
226
+ }
227
+
228
+ void CenterWidget::setMessage (const MessageId &msg_id) {
229
+ if (!detail_widget) {
230
+ delete welcome_widget;
231
+ welcome_widget = nullptr ;
232
+ layout ()->addWidget (detail_widget = new DetailWidget (charts, this ));
233
+ }
234
+ detail_widget->setMessage (msg_id);
235
+ }
236
+
237
+ void CenterWidget::clear () {
238
+ delete detail_widget;
239
+ detail_widget = nullptr ;
240
+ if (!welcome_widget) {
241
+ layout ()->addWidget (welcome_widget = createWelcomeWidget ());
242
+ }
243
+ }
244
+
245
+ QWidget *CenterWidget::createWelcomeWidget () {
246
+ QWidget *w = new QWidget (this );
247
+ QVBoxLayout *main_layout = new QVBoxLayout (w);
249
248
main_layout->addStretch (0 );
250
249
QLabel *logo = new QLabel (" CABANA" );
251
250
logo->setAlignment (Qt::AlignCenter);
@@ -270,7 +269,8 @@ WelcomeWidget::WelcomeWidget(QWidget *parent) : QWidget(parent) {
270
269
main_layout->addLayout (newShortcutRow (" WhatsThis" , " Shift+F1" ));
271
270
main_layout->addStretch (0 );
272
271
273
- setStyleSheet (" QLabel{color:darkGray;}" );
274
- setBackgroundRole (QPalette::Base);
275
- setAutoFillBackground (true );
272
+ w->setStyleSheet (" QLabel{color:darkGray;}" );
273
+ w->setBackgroundRole (QPalette::Base);
274
+ w->setAutoFillBackground (true );
275
+ return w;
276
276
}
0 commit comments