GUI: fixed bugs with the selection in the disassembly
This commit is contained in:
parent
0225a2a228
commit
c50dd97996
|
|
@ -447,10 +447,16 @@ void Disassembly::mouseMoveEvent(QMouseEvent* event)
|
|||
wI = wI < 0 ? 0 : wI;
|
||||
|
||||
int_t wRowIndex = mInstBuffer.at(wI).rva;
|
||||
int_t wInstrSize = getInstructionRVA(wRowIndex, 1) - wRowIndex - 1;
|
||||
|
||||
if(wRowIndex < getRowCount())
|
||||
{
|
||||
expandSelectionUpTo(wRowIndex);
|
||||
setSingleSelection(getInitialSelection());
|
||||
expandSelectionUpTo(getInstructionRVA(getInitialSelection(), 1)-1);
|
||||
if(wRowIndex > getInitialSelection()) //select down
|
||||
expandSelectionUpTo(wRowIndex+wInstrSize);
|
||||
else
|
||||
expandSelectionUpTo(wRowIndex);
|
||||
|
||||
repaint();
|
||||
|
||||
|
|
@ -512,7 +518,17 @@ void Disassembly::mousePressEvent(QMouseEvent* event)
|
|||
{
|
||||
if(!(event->modifiers() & Qt::ShiftModifier)) //SHIFT pressed
|
||||
setSingleSelection(wRowIndex);
|
||||
expandSelectionUpTo(wRowIndex+wInstrSize);
|
||||
if(getSelectionStart() > wRowIndex) //select up
|
||||
{
|
||||
setSingleSelection(getInitialSelection());
|
||||
expandSelectionUpTo(getInstructionRVA(getInitialSelection(), 1)-1);
|
||||
expandSelectionUpTo(wRowIndex);
|
||||
}
|
||||
else //select down
|
||||
{
|
||||
setSingleSelection(getInitialSelection());
|
||||
expandSelectionUpTo(wRowIndex+wInstrSize);
|
||||
}
|
||||
|
||||
mGuiState = Disassembly::MultiRowsSelectionState;
|
||||
|
||||
|
|
@ -998,11 +1014,9 @@ void Disassembly::expandSelectionUpTo(int_t to)
|
|||
if(to < mSelection.firstSelectedIndex)
|
||||
{
|
||||
mSelection.fromIndex = to;
|
||||
mSelection.toIndex = mSelection.firstSelectedIndex;
|
||||
}
|
||||
else if(to > mSelection.firstSelectedIndex)
|
||||
{
|
||||
mSelection.fromIndex = mSelection.firstSelectedIndex;
|
||||
mSelection.toIndex = to;
|
||||
}
|
||||
else if(to == mSelection.firstSelectedIndex)
|
||||
|
|
@ -1043,9 +1057,10 @@ int_t Disassembly::getSelectionEnd()
|
|||
void Disassembly::selectNext(bool expand)
|
||||
{
|
||||
int_t wAddr;
|
||||
int_t wStart = getInstructionRVA(getSelectionStart(), 1)-1;
|
||||
if(expand)
|
||||
{
|
||||
if(getSelectionEnd()==getInitialSelection() && getSelectionStart()!=getSelectionEnd()) //decrease down
|
||||
if(getSelectionEnd()==getInitialSelection() && wStart!=getSelectionEnd()) //decrease down
|
||||
{
|
||||
wAddr = getInstructionRVA(getSelectionStart(), 1);
|
||||
expandSelectionUpTo(wAddr);
|
||||
|
|
@ -1057,7 +1072,7 @@ void Disassembly::selectNext(bool expand)
|
|||
expandSelectionUpTo(wAddr + wInstrSize);
|
||||
}
|
||||
}
|
||||
else
|
||||
else //select next instruction
|
||||
{
|
||||
wAddr = getSelectionEnd() + 1;
|
||||
setSingleSelection(wAddr);
|
||||
|
|
@ -1070,9 +1085,10 @@ void Disassembly::selectNext(bool expand)
|
|||
void Disassembly::selectPrevious(bool expand)
|
||||
{
|
||||
int_t wAddr;
|
||||
int_t wStart = getInstructionRVA(getSelectionStart(), 1)-1;
|
||||
if(expand)
|
||||
{
|
||||
if(getSelectionStart()==getInitialSelection() && getSelectionStart()!=getSelectionEnd()) //decrease down
|
||||
if(getSelectionStart()==getInitialSelection() && wStart!=getSelectionEnd()) //decrease up
|
||||
{
|
||||
wAddr = getInstructionRVA(getSelectionEnd() + 1, -2);
|
||||
int_t wInstrSize = getInstructionRVA(wAddr, 1) - wAddr - 1;
|
||||
|
|
@ -1080,7 +1096,7 @@ void Disassembly::selectPrevious(bool expand)
|
|||
}
|
||||
else //expand up
|
||||
{
|
||||
wAddr = getInstructionRVA(getSelectionStart(), -1);
|
||||
wAddr = getInstructionRVA(wStart+1, -2);
|
||||
expandSelectionUpTo(wAddr);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue