dialogs:support multiple information widgets

work/spdx
Michail Vourlakos 4 years ago
parent 749cbca3e8
commit 8824c6e454

@ -42,59 +42,27 @@ namespace Dialog {
GenericDialog::GenericDialog(QWidget *parent, Qt::WindowFlags f) GenericDialog::GenericDialog(QWidget *parent, Qt::WindowFlags f)
: QDialog(parent, f) : QDialog(parent, f)
{ {
m_hideInlineMessageTimer.setSingleShot(true);
m_hideInlineMessageTimer.setInterval(2000);
} }
GenericDialog::~GenericDialog() GenericDialog::~GenericDialog()
{ {
} }
void GenericDialog::initMessageWidget() KMessageWidget *GenericDialog::initMessageWidget()
{ {
if (m_messageWidget) {
return;
}
QVBoxLayout *vLayout = qobject_cast<QVBoxLayout *>(layout()); QVBoxLayout *vLayout = qobject_cast<QVBoxLayout *>(layout());
if (!vLayout) { if (!vLayout) {
return; return nullptr;
} }
m_messageWidget = new KMessageWidget(this);
vLayout->insertWidget(vLayout->count()-1, m_messageWidget);
connect(&m_hideInlineMessageTimer, &QTimer::timeout, this, [&]() { auto messagewidget = new KMessageWidget(this);
m_messageWidget->animatedHide(); messagewidget->setVisible(false);
}); vLayout->insertWidget(vLayout->count()-1, messagewidget);
connect(m_messageWidget, &KMessageWidget::hideAnimationFinished, this, [&]() { connect(messagewidget, &KMessageWidget::hideAnimationFinished, messagewidget, &QObject::deleteLater);
clearCurrentMessageActions();
});
}
void GenericDialog::keyPressEvent(QKeyEvent *event) return messagewidget;
{
if (event && event->key() == Qt::Key_Escape) {
if (m_messageWidget && m_messageWidget->isVisible()) {
m_hideInlineMessageTimer.stop();
m_messageWidget->animatedHide();
clearCurrentMessageActions();
return;
}
}
QDialog::keyPressEvent(event);
}
void GenericDialog::clearCurrentMessageActions()
{
while(m_currentMessageActions.count() > 0) {
QAction *action = m_currentMessageActions.takeAt(0);
m_messageWidget->removeAction(action);
action->deleteLater();
}
} }
int GenericDialog::saveChangesConfirmation(const QString &text) int GenericDialog::saveChangesConfirmation(const QString &text)
@ -122,8 +90,10 @@ void GenericDialog::showInlineMessage(const QString &msg, const KMessageWidget::
return; return;
} }
if (!m_messageWidget) { auto messagewidget = initMessageWidget();
initMessageWidget();
if (!messagewidget) {
return;
} }
int hideInterval = 0; int hideInterval = 0;
@ -139,47 +109,35 @@ void GenericDialog::showInlineMessage(const QString &msg, const KMessageWidget::
} }
} }
if (!m_currentMessageActions.isEmpty()) { messagewidget->setCloseButtonVisible(!isPersistent || actions.count()==0);
clearCurrentMessageActions();
}
m_messageWidget->setCloseButtonVisible(!isPersistent || actions.count()==0);
m_currentMessageActions = actions;
for (int i=0; i<actions.count(); ++i) { for (int i=0; i<actions.count(); ++i) {
m_messageWidget->addAction(actions[i]); connect(actions[i], &QAction::triggered, messagewidget, &KMessageWidget::animatedHide);
messagewidget->addAction(actions[i]);
} }
m_hideInlineMessageTimer.stop(); messagewidget->setText(msg);
if (m_messageWidget->isVisible()) {
m_messageWidget->animatedHide();
}
m_messageWidget->setText(msg);
// TODO: wrap at arbitrary character positions once QLabel can do this // TODO: wrap at arbitrary character positions once QLabel can do this
// https://bugreports.qt.io/browse/QTBUG-1276 // https://bugreports.qt.io/browse/QTBUG-1276
m_messageWidget->setWordWrap(true); messagewidget->setWordWrap(true);
m_messageWidget->setMessageType(type); messagewidget->setMessageType(type);
m_messageWidget->setWordWrap(false); messagewidget->setWordWrap(false);
const int unwrappedWidth = m_messageWidget->sizeHint().width(); const int unwrappedWidth = messagewidget->sizeHint().width();
m_messageWidget->setWordWrap(unwrappedWidth > size().width()); messagewidget->setWordWrap(unwrappedWidth > size().width());
m_messageWidget->animatedShow(); messagewidget->animatedShow();
if (hideInterval > 0) { if (hideInterval > 0) {
m_hideInlineMessageTimer.setInterval(hideInterval); QTimer *hidetimer = new QTimer(messagewidget);
m_hideInlineMessageTimer.start(); hidetimer->setInterval(hideInterval);
}
}
void GenericDialog::hideInlineMessage() connect(hidetimer, &QTimer::timeout, this, [&, messagewidget]() {
{ messagewidget->animatedHide();
if (m_messageWidget) { });
m_messageWidget->animatedHide();
hidetimer->start();
} }
} }

@ -48,25 +48,8 @@ public:
int saveChangesConfirmation(const QString &text); int saveChangesConfirmation(const QString &text);
protected:
void keyPressEvent(QKeyEvent *event) override;
private slots: private slots:
void initMessageWidget(); KMessageWidget *initMessageWidget();
private:
void clearCurrentMessageActions();
private:
KMessageWidget *m_messageWidget{nullptr};
//! Current shown KMessageActions
QList<QAction *> m_currentMessageActions;
//! Timer to hide the inline message widget
QTimer m_hideInlineMessageTimer;
}; };
} }

@ -77,12 +77,6 @@ void Generic::showInlineMessage(const QString &msg, const KMessageWidget::Messag
m_dialog->showInlineMessage(msg, type, isPersistent, actions); m_dialog->showInlineMessage(msg, type, isPersistent, actions);
} }
void Generic::hideInlineMessage()
{
m_dialog->hideInlineMessage();
}
} }
} }
} }

@ -67,8 +67,6 @@ public slots:
virtual void resetDefaults() = 0; virtual void resetDefaults() = 0;
virtual void save() = 0; virtual void save() = 0;
void hideInlineMessage();
signals: signals:
void dataChanged(); void dataChanged();

@ -456,10 +456,8 @@ void TabLayouts::installLayoutTemplate(Latte::Data::Layout importedLayout, QStri
actions << yesAction; actions << yesAction;
actions << noAction; actions << noAction;
connect(noAction, &QAction::triggered, this, &Generic::hideInlineMessage);
connect(yesAction, &QAction::triggered, this, [&, templateFilePath]() { connect(yesAction, &QAction::triggered, this, [&, templateFilePath]() {
m_corona->templatesManager()->installCustomLayoutTemplate(templateFilePath); m_corona->templatesManager()->installCustomLayoutTemplate(templateFilePath);
hideInlineMessage();
}); });
showInlineMessage(informationText, showInlineMessage(informationText,

Loading…
Cancel
Save