diff --git a/src/peripheralwidget.cpp b/src/peripheralwidget.cpp --- a/src/peripheralwidget.cpp +++ b/src/peripheralwidget.cpp @@ -17,6 +17,11 @@ peripheralWidget::peripheralWidget(const setFont(QFont("Utopia", 14,QFont::Bold)); } +int peripheralWidget::count() +{ + return registersWdgts.count(); +} + void peripheralWidget::blinkCursor() { if(selectedReg!=-1) diff --git a/src/peripheralwidget.h b/src/peripheralwidget.h --- a/src/peripheralwidget.h +++ b/src/peripheralwidget.h @@ -28,6 +28,7 @@ public: return registersWdgts.at(index); return NULL; } + int count(); signals: void writeRegSig(qint32 address,qint32 value); qint32 readRegSig(qint32 address); diff --git a/src/socregsviewer.cpp b/src/socregsviewer.cpp --- a/src/socregsviewer.cpp +++ b/src/socregsviewer.cpp @@ -53,30 +53,40 @@ void socRegsViewer::periphClicked(periph void socRegsViewer::periphUp(peripheralWidget *sender, int cursorIndex) { - int index; + int index,senderIndex; if(sender!=NULL) { - index = p_peripherals.indexOf(sender); - if(index!=-1 && index!=0) + index =senderIndex= p_peripherals.indexOf(sender); + while(index!=-1 && index!=0) { - p_peripherals.at(index)->leave(); - p_peripherals.at(index-1)->enter(cursorIndex,false); - ensureWidgetVisible(p_peripherals.at(index-1)); + if(p_peripherals.at(index-1)->count()>0) + { + p_peripherals.at(senderIndex)->leave(); + p_peripherals.at(index-1)->enter(cursorIndex,false); + ensureWidgetVisible(p_peripherals.at(index-1)); + break; + } + index--; } } } void socRegsViewer::periphDown(peripheralWidget *sender, int cursorIndex) { - int index; + int index,senderIndex; if(sender!=NULL) { - index = p_peripherals.indexOf(sender); - if(index!=-1 && index<(p_peripherals.count()-1)) + index=senderIndex= p_peripherals.indexOf(sender); + while((index!=-1) && (index<(p_peripherals.count()-1))) { - p_peripherals.at(index)->leave(); - p_peripherals.at(index+1)->enter(cursorIndex); - ensureWidgetVisible(p_peripherals.at(index+1)); + if(p_peripherals.at(index+1)->count()>0) + { + p_peripherals.at(senderIndex)->leave(); + p_peripherals.at(index+1)->enter(cursorIndex); + ensureWidgetVisible(p_peripherals.at(index+1)); + break; + } + index++; } } }