actually fixed the bug
This commit is contained in:
parent
592c0a332a
commit
d1491addc2
|
@ -27,6 +27,7 @@ AbstractTableView::AbstractTableView(QWidget* parent) : QAbstractScrollArea(pare
|
||||||
mGuiState = AbstractTableView::NoState;
|
mGuiState = AbstractTableView::NoState;
|
||||||
|
|
||||||
mShouldReload = true;
|
mShouldReload = true;
|
||||||
|
mAllowPainting = true;
|
||||||
|
|
||||||
// ScrollBar Init
|
// ScrollBar Init
|
||||||
setVerticalScrollBar(new AbstractTableScrollBar(verticalScrollBar()));
|
setVerticalScrollBar(new AbstractTableScrollBar(verticalScrollBar()));
|
||||||
|
@ -79,8 +80,8 @@ void AbstractTableView::fontsUpdated()
|
||||||
*/
|
*/
|
||||||
void AbstractTableView::paintEvent(QPaintEvent* event)
|
void AbstractTableView::paintEvent(QPaintEvent* event)
|
||||||
{
|
{
|
||||||
int lastColumn = getColumnCount() - 1;
|
if(!mAllowPainting)
|
||||||
int lastColumnWidth = 0;
|
return;
|
||||||
if(getColumnCount()) //make sure the last column is never smaller than the window
|
if(getColumnCount()) //make sure the last column is never smaller than the window
|
||||||
{
|
{
|
||||||
int totalWidth = 0;
|
int totalWidth = 0;
|
||||||
|
@ -91,10 +92,11 @@ void AbstractTableView::paintEvent(QPaintEvent* event)
|
||||||
lastWidth += getColumnWidth(i);
|
lastWidth += getColumnWidth(i);
|
||||||
int width = this->viewport()->width();
|
int width = this->viewport()->width();
|
||||||
lastWidth = width > lastWidth ? width - lastWidth : 0;
|
lastWidth = width > lastWidth ? width - lastWidth : 0;
|
||||||
|
int last = getColumnCount() - 1;
|
||||||
if(totalWidth < width)
|
if(totalWidth < width)
|
||||||
lastColumnWidth = lastWidth;
|
setColumnWidth(last, lastWidth);
|
||||||
else
|
else
|
||||||
lastColumnWidth = getColumnWidth(lastColumn);
|
setColumnWidth(last, getColumnWidth(last));
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_UNUSED(event);
|
Q_UNUSED(event);
|
||||||
|
@ -122,23 +124,20 @@ void AbstractTableView::paintEvent(QPaintEvent* event)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < getColumnCount(); i++)
|
for(int i = 0; i < getColumnCount(); i++)
|
||||||
{
|
{
|
||||||
int columnWidth = getColumnWidth(i);
|
|
||||||
if(i == lastColumn)
|
|
||||||
columnWidth = lastColumnWidth;
|
|
||||||
QStyleOptionButton wOpt;
|
QStyleOptionButton wOpt;
|
||||||
if((mColumnList[i].header.isPressed == true) && (mColumnList[i].header.isMouseOver == true))
|
if((mColumnList[i].header.isPressed == true) && (mColumnList[i].header.isMouseOver == true))
|
||||||
wOpt.state = QStyle::State_Sunken;
|
wOpt.state = QStyle::State_Sunken;
|
||||||
else
|
else
|
||||||
wOpt.state = QStyle::State_Enabled;
|
wOpt.state = QStyle::State_Enabled;
|
||||||
|
|
||||||
wOpt.rect = QRect(x, y, columnWidth, getHeaderHeight());
|
wOpt.rect = QRect(x, y, getColumnWidth(i), getHeaderHeight());
|
||||||
|
|
||||||
mHeaderButtonSytle.style()->drawControl(QStyle::CE_PushButton, &wOpt, &wPainter, &mHeaderButtonSytle);
|
mHeaderButtonSytle.style()->drawControl(QStyle::CE_PushButton, &wOpt, &wPainter, &mHeaderButtonSytle);
|
||||||
|
|
||||||
wPainter.setPen(headerTextColor);
|
wPainter.setPen(headerTextColor);
|
||||||
wPainter.drawText(QRect(x + 4, y, columnWidth - 8, getHeaderHeight()), Qt::AlignVCenter | Qt::AlignLeft, mColumnList[i].title);
|
wPainter.drawText(QRect(x + 4, y, getColumnWidth(i) - 8, getHeaderHeight()), Qt::AlignVCenter | Qt::AlignLeft, mColumnList[i].title);
|
||||||
|
|
||||||
x += columnWidth;
|
x += getColumnWidth(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,32 +147,29 @@ void AbstractTableView::paintEvent(QPaintEvent* event)
|
||||||
// Iterate over all columns and cells
|
// Iterate over all columns and cells
|
||||||
for(int j = 0; j < getColumnCount(); j++)
|
for(int j = 0; j < getColumnCount(); j++)
|
||||||
{
|
{
|
||||||
int columnWidth = getColumnWidth(j);
|
|
||||||
if(j == lastColumn)
|
|
||||||
columnWidth = lastColumnWidth;
|
|
||||||
for(int i = 0; i < wViewableRowsCount; i++)
|
for(int i = 0; i < wViewableRowsCount; i++)
|
||||||
{
|
{
|
||||||
// Paints cell contents
|
// Paints cell contents
|
||||||
if(i < mNbrOfLineToPrint)
|
if(i < mNbrOfLineToPrint)
|
||||||
{
|
{
|
||||||
QString wStr = paintContent(&wPainter, mTableOffset, i, j, x, y, columnWidth, getRowHeight());
|
QString wStr = paintContent(&wPainter, mTableOffset, i, j, x, y, getColumnWidth(j), getRowHeight());
|
||||||
if(wStr.length())
|
if(wStr.length())
|
||||||
{
|
{
|
||||||
wPainter.setPen(textColor);
|
wPainter.setPen(textColor);
|
||||||
wPainter.drawText(QRect(x + 4, y, columnWidth - 4, getRowHeight()), Qt::AlignVCenter | Qt::AlignLeft, wStr);
|
wPainter.drawText(QRect(x + 4, y, getColumnWidth(j) - 4, getRowHeight()), Qt::AlignVCenter | Qt::AlignLeft, wStr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Paints cell right borders
|
// Paints cell right borders
|
||||||
wPainter.setPen(separatorColor);
|
wPainter.setPen(separatorColor);
|
||||||
wPainter.drawLine(x + columnWidth - 1, y, x + columnWidth - 1, y + getRowHeight() - 1);
|
wPainter.drawLine(x + getColumnWidth(j) - 1, y, x + getColumnWidth(j) - 1, y + getRowHeight() - 1);
|
||||||
|
|
||||||
// Update y for the next iteration
|
// Update y for the next iteration
|
||||||
y += getRowHeight();
|
y += getRowHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
y = getHeaderHeight();
|
y = getHeaderHeight();
|
||||||
x += columnWidth;
|
x += getColumnWidth(j);
|
||||||
}
|
}
|
||||||
emit repainted();
|
emit repainted();
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,6 +187,7 @@ protected:
|
||||||
QColor separatorColor;
|
QColor separatorColor;
|
||||||
QColor headerTextColor;
|
QColor headerTextColor;
|
||||||
QColor selectionColor;
|
QColor selectionColor;
|
||||||
|
bool mAllowPainting;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ABSTRACTTABLEVIEW_H
|
#endif // ABSTRACTTABLEVIEW_H
|
||||||
|
|
|
@ -975,6 +975,7 @@ void HexDump::appendDescriptor(int width, QString title, bool clickable, ColumnD
|
||||||
//Clears the descriptors, append a new descriptor and fix the tableOffset (use this instead of clearDescriptors()
|
//Clears the descriptors, append a new descriptor and fix the tableOffset (use this instead of clearDescriptors()
|
||||||
void HexDump::appendResetDescriptor(int width, QString title, bool clickable, ColumnDescriptor_t descriptor)
|
void HexDump::appendResetDescriptor(int width, QString title, bool clickable, ColumnDescriptor_t descriptor)
|
||||||
{
|
{
|
||||||
|
mAllowPainting = false;
|
||||||
if(mDescriptor.size())
|
if(mDescriptor.size())
|
||||||
{
|
{
|
||||||
int_t wRVA = getTableOffset() * getBytePerRowCount() - mByteOffset;
|
int_t wRVA = getTableOffset() * getBytePerRowCount() - mByteOffset;
|
||||||
|
@ -984,6 +985,7 @@ void HexDump::appendResetDescriptor(int width, QString title, bool clickable, Co
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
appendDescriptor(width, title, clickable, descriptor);
|
appendDescriptor(width, title, clickable, descriptor);
|
||||||
|
mAllowPainting = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HexDump::clearDescriptors()
|
void HexDump::clearDescriptors()
|
||||||
|
|
Loading…
Reference in New Issue