Small ui improvements

This commit is contained in:
Carl Philipp Klemm 2026-03-06 11:36:39 +01:00
parent 887e14add9
commit 6eea5688a8
5 changed files with 467 additions and 360 deletions

View file

@ -36,6 +36,7 @@ add_executable(${PROJECT_NAME}
src/clickableslider.cpp src/clickableslider.cpp
${MusicGeneratorGUI_H} ${MusicGeneratorGUI_H}
res/resources.qrc res/resources.qrc
src/elidedlabel.h src/elidedlabel.cpp
) )
# UI file # UI file

View file

@ -89,6 +89,8 @@ MainWindow::MainWindow(QWidget *parent)
ui->songListView->setCurrentIndex(firstIndex); ui->songListView->setCurrentIndex(firstIndex);
} }
ui->nowPlayingLabel->setText("Now Playing:");
currentSong = songModel->getSong(0); currentSong = songModel->getSong(0);
} }
@ -426,7 +428,7 @@ void MainWindow::songGenerated(const SongItem& song)
{ {
generatedSongQueue.enqueue(song); generatedSongQueue.enqueue(song);
} }
ui->statusLabel->setText("idle"); ui->statusbar->showMessage("idle");
ensureSongsInQueue(); ensureSongsInQueue();
} }
@ -530,7 +532,7 @@ void MainWindow::ensureSongsInQueue(bool enqeueCurrent)
isGeneratingNext = true; isGeneratingNext = true;
ui->statusLabel->setText("Generateing: "+nextSong.caption); ui->statusbar->showMessage("Generateing: "+nextSong.caption);
aceStepWorker->generateSong(nextSong, jsonTemplate, aceStepWorker->generateSong(nextSong, jsonTemplate,
aceStepPath, qwen3ModelPath, aceStepPath, qwen3ModelPath,
textEncoderModelPath, ditModelPath, textEncoderModelPath, ditModelPath,

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>MainWindow</class> <class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow"> <widget class="QMainWindow" name="MainWindow">
<property name="geometry"> <property name="geometry">
@ -114,15 +114,18 @@
</layout> </layout>
</item> </item>
<item> <item>
<widget class="QLabel" name="nowPlayingLabel"> <widget class="ElidedLabel" name="nowPlayingLabel">
<property name="layoutDirection"> <property name="minimumSize">
<enum>Qt::LayoutDirection::LeftToRight</enum> <size>
<width>0</width>
<height>20</height>
</size>
</property> </property>
<property name="text"> <property name="frameShape">
<string>Now Playing:</string> <enum>QFrame::Shape::StyledPanel</enum>
</property> </property>
<property name="alignment"> <property name="frameShadow">
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set> <enum>QFrame::Shadow::Raised</enum>
</property> </property>
</widget> </widget>
</item> </item>
@ -241,13 +244,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QLabel" name="statusLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
</layout> </layout>
@ -351,9 +347,15 @@
<extends>QWidget</extends> <extends>QWidget</extends>
<header>src/clickableslider.h</header> <header>src/clickableslider.h</header>
</customwidget> </customwidget>
<customwidget>
<class>ElidedLabel</class>
<extends>QFrame</extends>
<header>src/elidedlabel.h</header>
<container>1</container>
</customwidget>
</customwidgets> </customwidgets>
<resources> <resources>
<include location="../res/resources.qrc"/> <include location="../res/resources.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>

70
src/elidedlabel.cpp Normal file
View file

@ -0,0 +1,70 @@
#include "elidedlabel.h"
#include <QTextLayout>
#include <QPainter>
ElidedLabel::ElidedLabel(const QString &text, QWidget *parent)
: QFrame(parent)
, elided(false)
, content(text)
{
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
}
ElidedLabel::ElidedLabel(QWidget *parent)
: QFrame(parent)
, elided(false)
, content("")
{
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
}
void ElidedLabel::setText(const QString &newText)
{
content = newText;
update();
}
void ElidedLabel::paintEvent(QPaintEvent *event)
{
QFrame::paintEvent(event);
QPainter painter(this);
QFontMetrics fontMetrics = painter.fontMetrics();
bool didElide = false;
int lineSpacing = fontMetrics.lineSpacing();
int y = 0;
QTextLayout textLayout(content, painter.font());
textLayout.beginLayout();
forever {
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;
//! [2]
//! [3]
} else {
QString lastLine = content.mid(line.textStart());
QString elidedLastLine = fontMetrics.elidedText(lastLine, Qt::ElideRight, width());
painter.drawText(QPoint(0, y + fontMetrics.ascent()), elidedLastLine);
line = textLayout.createLine();
didElide = line.isValid();
break;
}
}
textLayout.endLayout();
if (didElide != elided) {
elided = didElide;
emit elisionChanged(didElide);
}
}

32
src/elidedlabel.h Normal file
View file

@ -0,0 +1,32 @@
#ifndef ELIDEDLABEL_H
#define ELIDEDLABEL_H
#include <QFrame>
class ElidedLabel : public QFrame
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText)
Q_PROPERTY(bool isElided READ isElided)
public:
explicit ElidedLabel(const QString &text, QWidget *parent = 0);
explicit ElidedLabel(QWidget *parent = 0);
void setText(const QString &text);
const QString & text() const { return content; }
bool isElided() const { return elided; }
protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
signals:
void elisionChanged(bool elided);
private:
bool elided;
QString content;
};
#endif // ELIDEDLABEL_H