@ -3,15 +3,13 @@
# include <QFormLayout>
# include <QMenu>
# include <QMessageBox>
# include <QToolButton>
# include "tools/cabana/commands.h"
// DetailWidget
DetailWidget : : DetailWidget ( ChartsWidget * charts , QWidget * parent ) : charts ( charts ) , QWidget ( parent ) {
QWidget * main_widget = new QWidget ( this ) ;
QVBoxLayout * main_layout = new QVBoxLayout ( main_widget ) ;
QVBoxLayout * main_layout = new QVBoxLayout ( this ) ;
main_layout - > setContentsMargins ( 0 , 0 , 0 , 0 ) ;
// tabbar
@ -23,22 +21,22 @@ DetailWidget::DetailWidget(ChartsWidget *charts, QWidget *parent) : charts(chart
main_layout - > addWidget ( tabbar ) ;
// message title
QToolBar * toolbar = new QToolBar ( this ) ;
toolbar - > setIconSize ( { 16 , 16 } ) ;
toolbar - > addWidget ( new QLabel ( " time: " ) ) ;
QHBoxLayout * title_layout = new QHBoxLayout ( ) ;
title_layout - > setContentsMargins ( 0 , 6 , 0 , 0 ) ;
time_label = new QLabel ( this ) ;
time_label - > setStyleSheet ( " font-weight:bold " ) ;
toolbar - > addWidget ( time_label ) ;
time_label - > setToolTip ( tr ( " Current time " ) ) ;
time_label - > setStyleSheet ( " QLabel{font-weight:bold;} " ) ;
title_layout - > addWidget ( time_label ) ;
name_label = new ElidedLabel ( this ) ;
name_label - > setContentsMargins ( 5 , 0 , 5 , 0 ) ;
name_label - > setStyleSheet ( " font-weight:bold; " ) ;
name_label - > setStyleSheet ( " QLabel{font-weight:bold;} " ) ;
name_label - > setAlignment ( Qt : : AlignCenter ) ;
name_label - > setSizePolicy ( QSizePolicy : : Expanding , QSizePolicy : : Preferred ) ;
toolbar - > addWidget ( name_label ) ;
toolbar - > addAction ( utils : : icon ( " pencil " ) , " " , this , & DetailWidget : : editMsg ) - > setToolTip ( tr ( " Edit Message " ) ) ;
remove_msg_act = toolbar - > addAction ( utils : : icon ( " x-lg " ) , " " , this , & DetailWidget : : removeMsg ) ;
remove_msg_act - > setToolTip ( tr ( " Remove Message " ) ) ;
main_layout - > addWidget ( toolbar ) ;
title_layout - > addWidget ( name_label ) ;
auto edit_btn = toolButton ( " pencil " , tr ( " Edit Message " ) ) ;
title_layout - > addWidget ( edit_btn ) ;
remove_btn = toolButton ( " x-lg " , tr ( " Remove Message " ) ) ;
title_layout - > addWidget ( remove_btn ) ;
main_layout - > addLayout ( title_layout ) ;
// warning
warning_widget = new QWidget ( this ) ;
@ -59,19 +57,18 @@ DetailWidget::DetailWidget(ChartsWidget *charts, QWidget *parent) : charts(chart
splitter - > setStretchFactor ( 1 , 1 ) ;
tab_widget = new QTabWidget ( this ) ;
tab_widget - > setStyleSheet ( " QTabWidget::pane {border: none; margin-bottom: -2px;} " ) ;
tab_widget - > setTabPosition ( QTabWidget : : South ) ;
tab_widget - > addTab ( splitter , utils : : icon ( " file-earmark-ruled " ) , " &Msg " ) ;
tab_widget - > addTab ( history_log = new LogsWidget ( this ) , utils : : icon ( " stopwatch " ) , " &Logs " ) ;
main_layout - > addWidget ( tab_widget ) ;
stacked_layout = new QStackedLayout ( this ) ;
stacked_layout - > addWidget ( new WelcomeWidget ( this ) ) ;
stacked_layout - > addWidget ( main_widget ) ;
QObject : : connect ( edit_btn , & QToolButton : : clicked , this , & DetailWidget : : editMsg ) ;
QObject : : connect ( remove_btn , & QToolButton : : clicked , this , & DetailWidget : : removeMsg ) ;
QObject : : connect ( binary_view , & BinaryView : : resizeSignal , signal_view - > model , & SignalModel : : resizeSignal ) ;
QObject : : connect ( binary_view , & BinaryView : : addSignal , signal_view - > model , & SignalModel : : addSignal ) ;
QObject : : connect ( binary_view , & BinaryView : : signalHovered , signal_view , & SignalView : : signalHovered ) ;
QObject : : connect ( binary_view , & BinaryView : : signalClicked , signal_view , & SignalView : : expandSignal ) ;
QObject : : connect ( binary_view , & BinaryView : : signalClicked , [ this ] ( const Signal * s ) { signal_view - > selectSignal ( s , true ) ; } ) ;
QObject : : connect ( binary_view , & BinaryView : : editSignal , signal_view - > model , & SignalModel : : saveSignal ) ;
QObject : : connect ( binary_view , & BinaryView : : removeSignal , signal_view - > model , & SignalModel : : removeSignal ) ;
QObject : : connect ( binary_view , & BinaryView : : showChart , charts , & ChartsWidget : : showChart ) ;
@ -87,9 +84,7 @@ DetailWidget::DetailWidget(ChartsWidget *charts, QWidget *parent) : charts(chart
setMessage ( tabbar - > tabData ( index ) . value < MessageId > ( ) ) ;
}
} ) ;
QObject : : connect ( tabbar , & QTabBar : : tabCloseRequested , [ this ] ( int index ) {
tabbar - > removeTab ( index ) ;
} ) ;
QObject : : connect ( tabbar , & QTabBar : : tabCloseRequested , tabbar , & QTabBar : : removeTab ) ;
QObject : : connect ( charts , & ChartsWidget : : seriesChanged , signal_view , & SignalView : : updateChartState ) ;
}
@ -108,18 +103,8 @@ void DetailWidget::showTabBarContextMenu(const QPoint &pt) {
}
}
void DetailWidget : : removeAll ( ) {
msg_id = std : : nullopt ;
tabbar - > blockSignals ( true ) ;
while ( tabbar - > count ( ) > 0 ) {
tabbar - > removeTab ( 0 ) ;
}
tabbar - > blockSignals ( false ) ;
stacked_layout - > setCurrentIndex ( 0 ) ;
}
void DetailWidget : : setMessage ( const MessageId & message_id ) {
msg_id = message_id ;
if ( std : : exchange ( msg_id , message_id ) = = message_id ) return ;
tabbar - > blockSignals ( true ) ;
int index = tabbar - > count ( ) - 1 ;
@ -135,25 +120,18 @@ void DetailWidget::setMessage(const MessageId &message_id) {
tabbar - > blockSignals ( false ) ;
setUpdatesEnabled ( false ) ;
signal_view - > setMessage ( * msg_id ) ;
binary_view - > setMessage ( * msg_id ) ;
history_log - > setMessage ( * msg_id ) ;
stacked_layout - > setCurrentIndex ( 1 ) ;
signal_view - > setMessage ( msg_id ) ;
binary_view - > setMessage ( msg_id ) ;
history_log - > setMessage ( msg_id ) ;
refresh ( ) ;
splitter - > setSizes ( { 1 , 2 } ) ;
setUpdatesEnabled ( true ) ;
}
void DetailWidget : : refresh ( ) {
if ( ! msg_id ) return ;
QStringList warnings ;
auto msg = dbc ( ) - > msg ( * msg_id ) ;
auto msg = dbc ( ) - > msg ( msg_id ) ;
if ( msg ) {
if ( msg - > size ! = can - > lastMessage ( * msg_id ) . dat . size ( ) ) {
if ( msg - > size ! = can - > lastMessage ( msg_id ) . dat . size ( ) ) {
warnings . push_back ( tr ( " Message size (%1) is incorrect. " ) . arg ( msg - > size ) ) ;
}
for ( auto s : binary_view - > getOverlappingSignals ( ) ) {
@ -162,8 +140,8 @@ void DetailWidget::refresh() {
} else {
warnings . push_back ( tr ( " Drag-Select in binary view to create new signal. " ) ) ;
}
remove_msg_act - > setEnabled ( msg ! = nullptr ) ;
name_label - > setText ( msgName ( * msg_id ) ) ;
remove_btn - > setEnabled ( msg ! = nullptr ) ;
name_label - > setText ( msgName ( msg_id ) ) ;
if ( ! warnings . isEmpty ( ) ) {
warning_label - > setText ( warnings . join ( ' \n ' ) ) ;
@ -174,7 +152,7 @@ void DetailWidget::refresh() {
void DetailWidget : : updateState ( const QHash < MessageId , CanData > * msgs ) {
time_label - > setText ( QString : : number ( can - > currentSec ( ) , ' f ' , 3 ) ) ;
if ( ! msg_id | | ( msgs & & ! msgs - > contains ( * msg_id ) ) )
if ( ( msgs & & ! msgs - > contains ( msg_id ) ) )
return ;
if ( tab_widget - > currentIndex ( ) = = 0 )
@ -184,17 +162,16 @@ void DetailWidget::updateState(const QHash<MessageId, CanData> *msgs) {
}
void DetailWidget : : editMsg ( ) {
MessageId id = * msg_id ;
auto msg = dbc ( ) - > msg ( id ) ;
int size = msg ? msg - > size : can - > lastMessage ( id ) . dat . size ( ) ;
EditMessageDialog dlg ( id , msgName ( id ) , size , this ) ;
auto msg = dbc ( ) - > msg ( msg_id ) ;
int size = msg ? msg - > size : can - > lastMessage ( msg_id ) . dat . size ( ) ;
EditMessageDialog dlg ( msg_id , msgName ( msg_id ) , size , this ) ;
if ( dlg . exec ( ) ) {
UndoStack : : push ( new EditMsgCommand ( * msg_id , dlg . name_edit - > text ( ) , dlg . size_spin - > value ( ) ) ) ;
UndoStack : : push ( new EditMsgCommand ( msg_id , dlg . name_edit - > text ( ) , dlg . size_spin - > value ( ) ) ) ;
}
}
void DetailWidget : : removeMsg ( ) {
UndoStack : : push ( new RemoveMsgCommand ( * msg_id ) ) ;
UndoStack : : push ( new RemoveMsgCommand ( msg_id ) ) ;
}
// EditMessageDialog
@ -240,10 +217,34 @@ void EditMessageDialog::validateName(const QString &text) {
btn_box - > button ( QDialogButtonBox : : Ok ) - > setEnabled ( valid ) ;
}
// Welcome Widget
// Center Widget
WelcomeWidget : : WelcomeWidget ( QWidget * parent ) : QWidget ( parent ) {
CenterWidget : : CenterWidget ( ChartsWidget * charts , QWidget * parent ) : charts ( charts ) , QWidget ( parent ) {
QVBoxLayout * main_layout = new QVBoxLayout ( this ) ;
main_layout - > setContentsMargins ( 0 , 0 , 0 , 0 ) ;
main_layout - > addWidget ( welcome_widget = createWelcomeWidget ( ) ) ;
}
void CenterWidget : : setMessage ( const MessageId & msg_id ) {
if ( ! detail_widget ) {
delete welcome_widget ;
welcome_widget = nullptr ;
layout ( ) - > addWidget ( detail_widget = new DetailWidget ( charts , this ) ) ;
}
detail_widget - > setMessage ( msg_id ) ;
}
void CenterWidget : : clear ( ) {
delete detail_widget ;
detail_widget = nullptr ;
if ( ! welcome_widget ) {
layout ( ) - > addWidget ( welcome_widget = createWelcomeWidget ( ) ) ;
}
}
QWidget * CenterWidget : : createWelcomeWidget ( ) {
QWidget * w = new QWidget ( this ) ;
QVBoxLayout * main_layout = new QVBoxLayout ( w ) ;
main_layout - > addStretch ( 0 ) ;
QLabel * logo = new QLabel ( " CABANA " ) ;
logo - > setAlignment ( Qt : : AlignCenter ) ;
@ -268,7 +269,8 @@ WelcomeWidget::WelcomeWidget(QWidget *parent) : QWidget(parent) {
main_layout - > addLayout ( newShortcutRow ( " WhatsThis " , " Shift+F1 " ) ) ;
main_layout - > addStretch ( 0 ) ;
setStyleSheet ( " QLabel{color:darkGray;} " ) ;
setBackgroundRole ( QPalette : : Base ) ;
setAutoFillBackground ( true ) ;
w - > setStyleSheet ( " QLabel{color:darkGray;} " ) ;
w - > setBackgroundRole ( QPalette : : Base ) ;
w - > setAutoFillBackground ( true ) ;
return w ;
}