@ -379,6 +379,121 @@ bool ToolTipToRichTextFilter::eventFilter(QObject *obj, QEvent *evt)
@@ -379,6 +379,121 @@ bool ToolTipToRichTextFilter::eventFilter(QObject *obj, QEvent *evt)
return QObject : : eventFilter ( obj , evt ) ;
}
void TableViewLastColumnResizingFixer : : connectViewHeadersSignals ( )
{
connect ( tableView - > horizontalHeader ( ) , SIGNAL ( sectionResized ( int , int , int ) ) , this , SLOT ( on_sectionResized ( int , int , int ) ) ) ;
connect ( tableView - > horizontalHeader ( ) , SIGNAL ( geometriesChanged ( ) ) , this , SLOT ( on_geometriesChanged ( ) ) ) ;
}
//we need to disconnect these while handling the resize events, otherwise we can enter infinite loops
void TableViewLastColumnResizingFixer : : disconnectViewHeadersSignals ( )
{
disconnect ( tableView - > horizontalHeader ( ) , SIGNAL ( sectionResized ( int , int , int ) ) , this , SLOT ( on_sectionResized ( int , int , int ) ) ) ;
disconnect ( tableView - > horizontalHeader ( ) , SIGNAL ( geometriesChanged ( ) ) , this , SLOT ( on_geometriesChanged ( ) ) ) ;
}
//setup the resize mode, handles compatibility for QT5 and below as the method signatures changed. (refactored here for readability)
void TableViewLastColumnResizingFixer : : setViewHeaderResizeMode ( int logicalIndex , QHeaderView : : ResizeMode resizeMode )
{
# if QT_VERSION < 0x050000
tableView - > horizontalHeader ( ) - > setResizeMode ( logicalIndex , resizeMode ) ;
# else
tableView - > horizontalHeader ( ) - > setSectionResizeMode ( logicalIndex , resizeMode ) ;
# endif
}
void TableViewLastColumnResizingFixer : : resizeColumn ( int nColumnIndex , int width ) {
tableView - > setColumnWidth ( nColumnIndex , width ) ;
tableView - > horizontalHeader ( ) - > resizeSection ( nColumnIndex , width ) ;
}
int TableViewLastColumnResizingFixer : : getColumnsWidth ( )
{
int nColumnsWidthSum = 0 ;
for ( int i = 0 ; i < columnCount ; i + + )
{
nColumnsWidthSum + = tableView - > horizontalHeader ( ) - > sectionSize ( i ) ;
}
return nColumnsWidthSum ;
}
int TableViewLastColumnResizingFixer : : getAvailableWidthForColumn ( int column )
{
int nResult = lastColumnMinimumWidth ;
int nTableWidth = tableView - > horizontalHeader ( ) - > width ( ) ;
if ( nTableWidth > 0 )
{
int nOtherColsWidth = getColumnsWidth ( ) - tableView - > horizontalHeader ( ) - > sectionSize ( column ) ;
nResult = std : : max ( nResult , nTableWidth - nOtherColsWidth ) ;
}
return nResult ;
}
//make sure we don't make the columns wider than the table's viewport's width.
void TableViewLastColumnResizingFixer : : adjustTableColumnsWidth ( )
{
disconnectViewHeadersSignals ( ) ;
resizeColumn ( lastColumnIndex , getAvailableWidthForColumn ( lastColumnIndex ) ) ;
connectViewHeadersSignals ( ) ;
int nTableWidth = tableView - > horizontalHeader ( ) - > width ( ) ;
int nColsWidth = getColumnsWidth ( ) ;
if ( nColsWidth > nTableWidth )
{
resizeColumn ( secondToLastColumnIndex , getAvailableWidthForColumn ( secondToLastColumnIndex ) ) ;
}
}
//make column use all the space available, useful during window resizing.
void TableViewLastColumnResizingFixer : : stretchColumnWidth ( int column ) {
disconnectViewHeadersSignals ( ) ;
resizeColumn ( column , getAvailableWidthForColumn ( column ) ) ;
connectViewHeadersSignals ( ) ;
}
//when a section is resized this is a slot-proxy for ajustAmountColumnWidth()
void TableViewLastColumnResizingFixer : : on_sectionResized ( int logicalIndex , int oldSize , int newSize )
{
adjustTableColumnsWidth ( ) ;
int remainingWidth = getAvailableWidthForColumn ( logicalIndex ) ;
if ( newSize > remainingWidth )
{
resizeColumn ( logicalIndex , remainingWidth ) ;
}
}
//when the table's geometry is ready, we manually perform the Stretch of the "Message" column
//as the "Stretch" resize mode does not allow for interactive resizing.
void TableViewLastColumnResizingFixer : : on_geometriesChanged ( )
{
if ( ( getColumnsWidth ( ) - this - > tableView - > horizontalHeader ( ) - > width ( ) ) ! = 0 )
{
disconnectViewHeadersSignals ( ) ;
resizeColumn ( secondToLastColumnIndex , getAvailableWidthForColumn ( secondToLastColumnIndex ) ) ;
connectViewHeadersSignals ( ) ;
}
}
/**
* Initializes all internal variables and prepares the
* the resize modes of the last 2 columns of the table and
*/
TableViewLastColumnResizingFixer : : TableViewLastColumnResizingFixer ( QTableView * table , int lastColMinimumWidth , int allColsMinimumWidth ) :
tableView ( table ) ,
lastColumnMinimumWidth ( lastColMinimumWidth ) ,
allColumnsMinimumWidth ( allColsMinimumWidth )
{
columnCount = tableView - > horizontalHeader ( ) - > count ( ) ;
lastColumnIndex = columnCount - 1 ;
secondToLastColumnIndex = columnCount - 2 ;
tableView - > horizontalHeader ( ) - > setMinimumSectionSize ( allColumnsMinimumWidth ) ;
setViewHeaderResizeMode ( secondToLastColumnIndex , QHeaderView : : Interactive ) ;
setViewHeaderResizeMode ( lastColumnIndex , QHeaderView : : Interactive ) ;
}
# ifdef WIN32
boost : : filesystem : : path static StartupShortcutPath ( )
{