Fix (hopefully) library dependency resolution.
Installing libs is now enabled, hardcoded. Enable -Wall for all builds. Fix many warnings and latent bugs.
This commit is contained in:
		| @@ -21,45 +21,45 @@ | ||||
| #include <QtCore/qmath.h> | ||||
|  | ||||
| // Origin: Qt | ||||
| static void viewItemTextLayout ( QTextLayout &textLayout, int lineWidth, qreal &height, qreal &widthUsed ) | ||||
| static void viewItemTextLayout(QTextLayout &textLayout, int lineWidth, qreal &height, | ||||
| 							   qreal &widthUsed) | ||||
| { | ||||
| 	height = 0; | ||||
| 	widthUsed = 0; | ||||
| 	textLayout.beginLayout(); | ||||
| 	QString str = textLayout.text(); | ||||
| 	while ( true ) | ||||
| 	while (true) | ||||
| 	{ | ||||
| 		QTextLine line = textLayout.createLine(); | ||||
| 		if ( !line.isValid() ) | ||||
| 		if (!line.isValid()) | ||||
| 			break; | ||||
| 		if(line.textLength() == 0) | ||||
| 		if (line.textLength() == 0) | ||||
| 			break; | ||||
| 		line.setLineWidth ( lineWidth ); | ||||
| 		line.setPosition ( QPointF ( 0, height ) ); | ||||
| 		line.setLineWidth(lineWidth); | ||||
| 		line.setPosition(QPointF(0, height)); | ||||
| 		height += line.height(); | ||||
| 		widthUsed = qMax ( widthUsed, line.naturalTextWidth() ); | ||||
| 		widthUsed = qMax(widthUsed, line.naturalTextWidth()); | ||||
| 	} | ||||
| 	textLayout.endLayout(); | ||||
| } | ||||
|  | ||||
| #define QFIXED_MAX (INT_MAX/256) | ||||
| #define QFIXED_MAX (INT_MAX / 256) | ||||
|  | ||||
| ListViewDelegate::ListViewDelegate ( QObject* parent ) : QStyledItemDelegate ( parent ) | ||||
| ListViewDelegate::ListViewDelegate(QObject *parent) : QStyledItemDelegate(parent) | ||||
| { | ||||
|  | ||||
| } | ||||
|  | ||||
| void drawSelectionRect(QPainter *painter, const QStyleOptionViewItemV4 &option, const QRect &rect) | ||||
| void drawSelectionRect(QPainter *painter, const QStyleOptionViewItemV4 &option, | ||||
| 					   const QRect &rect) | ||||
| { | ||||
| 	if ((option.state & QStyle::State_Selected)) | ||||
| 		painter->fillRect ( rect, option.palette.brush ( QPalette::Highlight ) ); | ||||
| 		painter->fillRect(rect, option.palette.brush(QPalette::Highlight)); | ||||
| 	else | ||||
| 	{ | ||||
| 		QColor backgroundColor = option.palette.color(QPalette::Background); | ||||
| 		backgroundColor.setAlpha(160); | ||||
| 		painter->fillRect ( rect, QBrush(backgroundColor) ); | ||||
| 		painter->fillRect(rect, QBrush(backgroundColor)); | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| void drawFocusRect(QPainter *painter, const QStyleOptionViewItemV4 &option, const QRect &rect) | ||||
| @@ -67,11 +67,12 @@ void drawFocusRect(QPainter *painter, const QStyleOptionViewItemV4 &option, cons | ||||
| 	if (!(option.state & QStyle::State_HasFocus)) | ||||
| 		return; | ||||
| 	QStyleOptionFocusRect opt; | ||||
| 	opt.direction       = option.direction; | ||||
| 	opt.fontMetrics     = option.fontMetrics; | ||||
| 	opt.palette         = option.palette; | ||||
| 	opt.rect            = rect; | ||||
| 	//opt.state           = option.state | QStyle::State_KeyboardFocusChange | QStyle::State_Item; | ||||
| 	opt.direction = option.direction; | ||||
| 	opt.fontMetrics = option.fontMetrics; | ||||
| 	opt.palette = option.palette; | ||||
| 	opt.rect = rect; | ||||
| 	// opt.state           = option.state | QStyle::State_KeyboardFocusChange | | ||||
| 	// QStyle::State_Item; | ||||
| 	auto col = option.state & QStyle::State_Selected ? QPalette::Highlight : QPalette::Base; | ||||
| 	opt.backgroundColor = option.palette.color(col); | ||||
| 	// Apparently some widget styles expect this hint to not be set | ||||
| @@ -84,29 +85,31 @@ void drawFocusRect(QPainter *painter, const QStyleOptionViewItemV4 &option, cons | ||||
| 	painter->setRenderHint(QPainter::Antialiasing); | ||||
| } | ||||
|  | ||||
| static QSize viewItemTextSize ( const QStyleOptionViewItemV4 *option ) | ||||
| static QSize viewItemTextSize(const QStyleOptionViewItemV4 *option) | ||||
| { | ||||
| 	QStyle *style = option->widget ? option->widget->style() : QApplication::style(); | ||||
| 	QTextOption textOption; | ||||
| 	textOption.setWrapMode ( QTextOption::WrapAtWordBoundaryOrAnywhere ); | ||||
| 	textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); | ||||
| 	QTextLayout textLayout; | ||||
| 	textLayout.setTextOption ( textOption ); | ||||
| 	textLayout.setFont ( option->font ); | ||||
| 	textLayout.setText ( option->text ); | ||||
| 	const int textMargin = style->pixelMetric ( QStyle::PM_FocusFrameHMargin, option, option->widget ) + 1; | ||||
| 	QRect bounds ( 0,0,100 - 2*textMargin,600 ); | ||||
| 	textLayout.setTextOption(textOption); | ||||
| 	textLayout.setFont(option->font); | ||||
| 	textLayout.setText(option->text); | ||||
| 	const int textMargin = | ||||
| 		style->pixelMetric(QStyle::PM_FocusFrameHMargin, option, option->widget) + 1; | ||||
| 	QRect bounds(0, 0, 100 - 2 * textMargin, 600); | ||||
| 	qreal height = 0, widthUsed = 0; | ||||
| 	viewItemTextLayout ( textLayout, bounds.width(), height, widthUsed ); | ||||
| 	const QSize size ( qCeil ( widthUsed ), qCeil ( height ) ); | ||||
| 	return QSize ( size.width() + 2 * textMargin, size.height() ); | ||||
| 	viewItemTextLayout(textLayout, bounds.width(), height, widthUsed); | ||||
| 	const QSize size(qCeil(widthUsed), qCeil(height)); | ||||
| 	return QSize(size.width() + 2 * textMargin, size.height()); | ||||
| } | ||||
|  | ||||
| void ListViewDelegate::paint ( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const | ||||
| void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, | ||||
| 							 const QModelIndex &index) const | ||||
| { | ||||
| 	QStyleOptionViewItemV4 opt = option; | ||||
| 	initStyleOption ( &opt, index ); | ||||
| 	initStyleOption(&opt, index); | ||||
| 	painter->save(); | ||||
| 	painter->setClipRect ( opt.rect ); | ||||
| 	painter->setClipRect(opt.rect); | ||||
|  | ||||
| 	opt.features |= QStyleOptionViewItem::WrapText; | ||||
| 	opt.text = index.data().toString(); | ||||
| @@ -115,26 +118,27 @@ void ListViewDelegate::paint ( QPainter* painter, const QStyleOptionViewItem& op | ||||
|  | ||||
| 	QStyle *style = opt.widget ? opt.widget->style() : QApplication::style(); | ||||
|  | ||||
| 	//const int iconSize =  style->pixelMetric(QStyle::PM_IconViewIconSize); | ||||
| 	// const int iconSize =  style->pixelMetric(QStyle::PM_IconViewIconSize); | ||||
| 	const int iconSize = 48; | ||||
| 	QRect iconbox = opt.rect; | ||||
| 	const int textMargin = style->pixelMetric ( QStyle::PM_FocusFrameHMargin, 0, opt.widget ) + 1; | ||||
| 	const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, opt.widget) + 1; | ||||
| 	QRect textRect = opt.rect; | ||||
| 	QRect textHighlightRect = textRect; | ||||
| 	// clip the decoration on top, remove width padding | ||||
| 	textRect.adjust ( textMargin,iconSize + textMargin + 5,-textMargin,0 ); | ||||
| 	 | ||||
| 	textHighlightRect.adjust ( 0,iconSize + 5,0,0 ); | ||||
| 	textRect.adjust(textMargin, iconSize + textMargin + 5, -textMargin, 0); | ||||
|  | ||||
| 	textHighlightRect.adjust(0, iconSize + 5, 0, 0); | ||||
|  | ||||
| 	// draw background | ||||
| 	{ | ||||
| 		QSize textSize = viewItemTextSize ( &opt ); | ||||
| 		// FIXME: unused | ||||
| 		// QSize textSize = viewItemTextSize ( &opt ); | ||||
| 		QPalette::ColorGroup cg; | ||||
| 		QStyleOptionViewItemV4 opt2(opt); | ||||
| 		 | ||||
| 		if((opt.widget && opt.widget->isEnabled()) || (opt.state & QStyle::State_Enabled)) | ||||
|  | ||||
| 		if ((opt.widget && opt.widget->isEnabled()) || (opt.state & QStyle::State_Enabled)) | ||||
| 		{ | ||||
| 			if(! ( opt.state & QStyle::State_Active )) | ||||
| 			if (!(opt.state & QStyle::State_Active)) | ||||
| 				cg = QPalette::Inactive; | ||||
| 			else | ||||
| 				cg = QPalette::Normal; | ||||
| @@ -144,31 +148,33 @@ void ListViewDelegate::paint ( QPainter* painter, const QStyleOptionViewItem& op | ||||
| 			cg = QPalette::Disabled; | ||||
| 		} | ||||
| 		opt2.palette.setCurrentColorGroup(cg); | ||||
| 		 | ||||
|  | ||||
| 		// fill in background, if any | ||||
| 		if ( opt.backgroundBrush.style() != Qt::NoBrush ) | ||||
| 		if (opt.backgroundBrush.style() != Qt::NoBrush) | ||||
| 		{ | ||||
| 			QPointF oldBO = painter->brushOrigin(); | ||||
| 			painter->setBrushOrigin ( opt.rect.topLeft() ); | ||||
| 			painter->fillRect ( opt.rect, opt.backgroundBrush ); | ||||
| 			painter->setBrushOrigin ( oldBO ); | ||||
| 			painter->setBrushOrigin(opt.rect.topLeft()); | ||||
| 			painter->fillRect(opt.rect, opt.backgroundBrush); | ||||
| 			painter->setBrushOrigin(oldBO); | ||||
| 		} | ||||
| 		 | ||||
| 		if ( opt.showDecorationSelected ) | ||||
|  | ||||
| 		if (opt.showDecorationSelected) | ||||
| 		{ | ||||
| 			drawSelectionRect(painter,opt2, opt.rect); | ||||
| 			drawFocusRect(painter,opt2, opt.rect); | ||||
| 			//painter->fillRect ( opt.rect, opt.palette.brush ( cg, QPalette::Highlight ) ); | ||||
| 			drawSelectionRect(painter, opt2, opt.rect); | ||||
| 			drawFocusRect(painter, opt2, opt.rect); | ||||
| 			// painter->fillRect ( opt.rect, opt.palette.brush ( cg, QPalette::Highlight ) ); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			 | ||||
| 			//if ( opt.state & QStyle::State_Selected ) | ||||
|  | ||||
| 			// if ( opt.state & QStyle::State_Selected ) | ||||
| 			{ | ||||
| 				//QRect textRect = subElementRect ( QStyle::SE_ItemViewItemText,  opt, opt.widget ); | ||||
| 				//painter->fillRect ( textHighlightRect, opt.palette.brush ( cg, QPalette::Highlight ) ); | ||||
| 				drawSelectionRect(painter,opt2, textHighlightRect); | ||||
| 				drawFocusRect(painter,opt2, textHighlightRect); | ||||
| 				// QRect textRect = subElementRect ( QStyle::SE_ItemViewItemText,  opt, | ||||
| 				// opt.widget ); | ||||
| 				// painter->fillRect ( textHighlightRect, opt.palette.brush ( cg, | ||||
| 				// QPalette::Highlight ) ); | ||||
| 				drawSelectionRect(painter, opt2, textHighlightRect); | ||||
| 				drawFocusRect(painter, opt2, textHighlightRect); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| @@ -176,71 +182,73 @@ void ListViewDelegate::paint ( QPainter* painter, const QStyleOptionViewItem& op | ||||
| 	// draw the icon | ||||
| 	{ | ||||
| 		QIcon::Mode mode = QIcon::Normal; | ||||
| 		if ( ! ( opt.state & QStyle::State_Enabled ) ) | ||||
| 		if (!(opt.state & QStyle::State_Enabled)) | ||||
| 			mode = QIcon::Disabled; | ||||
| 		else if ( opt.state & QStyle::State_Selected ) | ||||
| 		else if (opt.state & QStyle::State_Selected) | ||||
| 			mode = QIcon::Selected; | ||||
| 		QIcon::State state = opt.state & QStyle::State_Open ? QIcon::On : QIcon::Off; | ||||
|  | ||||
| 		iconbox.setHeight ( iconSize ); | ||||
| 		opt.icon.paint ( painter, iconbox, Qt::AlignCenter, mode, state ); | ||||
| 		iconbox.setHeight(iconSize); | ||||
| 		opt.icon.paint(painter, iconbox, Qt::AlignCenter, mode, state); | ||||
| 	} | ||||
| 	// set the text colors | ||||
| 	QPalette::ColorGroup cg = opt.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; | ||||
| 	if ( cg == QPalette::Normal && ! ( opt.state & QStyle::State_Active ) ) | ||||
| 	QPalette::ColorGroup cg = | ||||
| 		opt.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; | ||||
| 	if (cg == QPalette::Normal && !(opt.state & QStyle::State_Active)) | ||||
| 		cg = QPalette::Inactive; | ||||
| 	if ( opt.state & QStyle::State_Selected ) | ||||
| 	if (opt.state & QStyle::State_Selected) | ||||
| 	{ | ||||
| 		painter->setPen ( opt.palette.color ( cg, QPalette::HighlightedText ) ); | ||||
| 		painter->setPen(opt.palette.color(cg, QPalette::HighlightedText)); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		painter->setPen ( opt.palette.color ( cg, QPalette::Text ) ); | ||||
| 		painter->setPen(opt.palette.color(cg, QPalette::Text)); | ||||
| 	} | ||||
|  | ||||
| 	// draw the text | ||||
| 	QTextOption textOption; | ||||
| 	textOption.setWrapMode ( QTextOption::WrapAtWordBoundaryOrAnywhere ); | ||||
| 	textOption.setTextDirection ( opt.direction ); | ||||
| 	textOption.setAlignment ( QStyle::visualAlignment ( opt.direction, opt.displayAlignment ) ); | ||||
| 	textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); | ||||
| 	textOption.setTextDirection(opt.direction); | ||||
| 	textOption.setAlignment(QStyle::visualAlignment(opt.direction, opt.displayAlignment)); | ||||
| 	QTextLayout textLayout; | ||||
| 	textLayout.setTextOption ( textOption ); | ||||
| 	textLayout.setFont ( opt.font ); | ||||
| 	textLayout.setText ( opt.text ); | ||||
| 	textLayout.setTextOption(textOption); | ||||
| 	textLayout.setFont(opt.font); | ||||
| 	textLayout.setText(opt.text); | ||||
|  | ||||
| 	qreal width, height; | ||||
| 	viewItemTextLayout ( textLayout, textRect.width(), height, width ); | ||||
| 	viewItemTextLayout(textLayout, textRect.width(), height, width); | ||||
|  | ||||
| 	const int lineCount = textLayout.lineCount(); | ||||
|  | ||||
| 	const QRect layoutRect = QStyle::alignedRect ( opt.direction, opt.displayAlignment, QSize ( textRect.width(), int ( height ) ), textRect ); | ||||
| 	const QRect layoutRect = QStyle::alignedRect( | ||||
| 		opt.direction, opt.displayAlignment, QSize(textRect.width(), int(height)), textRect); | ||||
| 	const QPointF position = layoutRect.topLeft(); | ||||
| 	for ( int i = 0; i < lineCount; ++i ) | ||||
| 	for (int i = 0; i < lineCount; ++i) | ||||
| 	{ | ||||
| 		const QTextLine line = textLayout.lineAt ( i ); | ||||
| 		line.draw ( painter, position ); | ||||
| 		const QTextLine line = textLayout.lineAt(i); | ||||
| 		line.draw(painter, position); | ||||
| 	} | ||||
|  | ||||
| 	painter->restore(); | ||||
| } | ||||
|  | ||||
|  | ||||
| QSize ListViewDelegate::sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const | ||||
| QSize ListViewDelegate::sizeHint(const QStyleOptionViewItem &option, | ||||
| 								 const QModelIndex &index) const | ||||
| { | ||||
| 	QStyleOptionViewItemV4 opt = option; | ||||
| 	initStyleOption ( &opt, index ); | ||||
| 	initStyleOption(&opt, index); | ||||
| 	opt.features |= QStyleOptionViewItem::WrapText; | ||||
| 	opt.text = index.data().toString(); | ||||
| 	opt.textElideMode = Qt::ElideRight; | ||||
| 	opt.displayAlignment = Qt::AlignTop | Qt::AlignHCenter; | ||||
|  | ||||
| 	QStyle *style = opt.widget ? opt.widget->style() : QApplication::style(); | ||||
| 	const int textMargin = style->pixelMetric ( QStyle::PM_FocusFrameHMargin, &option, opt.widget ) + 1; | ||||
| 	const int textMargin = | ||||
| 		style->pixelMetric(QStyle::PM_FocusFrameHMargin, &option, opt.widget) + 1; | ||||
| 	int height = 48 + textMargin * 2 + 5; // TODO: turn constants into variables | ||||
| 	QSize szz = viewItemTextSize ( &opt ); | ||||
| 	QSize szz = viewItemTextSize(&opt); | ||||
| 	height += szz.height(); | ||||
| 	// FIXME: maybe the icon items could scale and keep proportions? | ||||
| 	QSize sz ( 100,height ); | ||||
| 	QSize sz(100, height); | ||||
| 	return sz; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user