Elide status bar text. Fixes #417.

This commit is contained in:
Leonardo Zide 2020-01-04 10:48:17 -08:00
parent 3044bf3972
commit 6891c59d38
2 changed files with 66 additions and 3 deletions

View file

@ -744,13 +744,75 @@ void lcMainWindow::CreateToolBars()
mPartsToolBar->raise(); mPartsToolBar->raise();
} }
class lcElidedLabel : public QFrame
{
public:
explicit lcElidedLabel(QWidget* Parent = nullptr)
: QFrame(Parent)
{
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
}
void setText(const QString& Text)
{
mText = Text;
update();
}
protected:
void paintEvent(QPaintEvent* event) override;
QString mText;
};
void lcElidedLabel::paintEvent(QPaintEvent* event)
{
QFrame::paintEvent(event);
QPainter Painter(this);
QFontMetrics FontMetrics = Painter.fontMetrics();
int LineSpacing = FontMetrics.lineSpacing();
int y = 0;
QTextLayout TextLayout(mText, Painter.font());
TextLayout.beginLayout();
for (;;)
{
QTextLine Line = TextLayout.createLine();
if (!Line.isValid())
break;
Line.setLineWidth(width());
int NextLineY = y + LineSpacing;
if (height() >= NextLineY + LineSpacing)
{
Line.draw(&Painter, QPoint(0, y));
y = NextLineY;
}
else
{
QString LastLine = mText.mid(Line.textStart());
QString ElidedLastLine = FontMetrics.elidedText(LastLine, Qt::ElideRight, width());
Painter.drawText(QPoint(0, y + FontMetrics.ascent()), ElidedLastLine);
Line = TextLayout.createLine();
break;
}
}
TextLayout.endLayout();
}
void lcMainWindow::CreateStatusBar() void lcMainWindow::CreateStatusBar()
{ {
QStatusBar* StatusBar = new QStatusBar(this); QStatusBar* StatusBar = new QStatusBar(this);
setStatusBar(StatusBar); setStatusBar(StatusBar);
mStatusBarLabel = new QLabel(); mStatusBarLabel = new lcElidedLabel();
StatusBar->addWidget(mStatusBarLabel); StatusBar->addWidget(mStatusBarLabel, 1);
mStatusPositionLabel = new QLabel(); mStatusPositionLabel = new QLabel();
StatusBar->addPermanentWidget(mStatusPositionLabel); StatusBar->addPermanentWidget(mStatusPositionLabel);

View file

@ -13,6 +13,7 @@ class lcQPartsTree;
class lcQColorList; class lcQColorList;
class lcQPropertiesTree; class lcQPropertiesTree;
class lcTimelineWidget; class lcTimelineWidget;
class lcElidedLabel;
#ifdef QT_NO_PRINTER #ifdef QT_NO_PRINTER
class QPrinter; class QPrinter;
#endif #endif
@ -420,7 +421,7 @@ protected:
QLineEdit* mTransformYEdit; QLineEdit* mTransformYEdit;
QLineEdit* mTransformZEdit; QLineEdit* mTransformZEdit;
QLabel* mStatusBarLabel; lcElidedLabel* mStatusBarLabel;
QLabel* mStatusPositionLabel; QLabel* mStatusPositionLabel;
QLabel* mStatusSnapLabel; QLabel* mStatusSnapLabel;
QLabel* mStatusTimeLabel; QLabel* mStatusTimeLabel;