diff --git a/src/widgets/pageview.h b/src/widgets/pageview.h --- a/src/widgets/pageview.h +++ b/src/widgets/pageview.h @@ -66,6 +66,7 @@ private slots: void onEditingFinished(); + void onAddItemRequested(); void onRemoveItemRequested(); void onPromoteItemRequested(); void onCurrentChanged(const QModelIndex ¤t); diff --git a/src/widgets/pageview.cpp b/src/widgets/pageview.cpp --- a/src/widgets/pageview.cpp +++ b/src/widgets/pageview.cpp @@ -27,10 +27,12 @@ #include #include #include +#include #include #include #include #include +#include #include "filterwidget.h" #include "itemdelegate.h" @@ -60,6 +62,46 @@ }; } +class PassivePopup : public QFrame +{ +public: + explicit PassivePopup(QWidget *parent = Q_NULLPTR) + : QFrame(parent), + m_hideTimer(new QTimer(this)), + m_label(new QLabel(this)) + { + setWindowFlags(Qt::Tool + | Qt::X11BypassWindowManagerHint + | Qt::WindowStaysOnTopHint + | Qt::FramelessWindowHint); + setFrameStyle(QFrame::Box | QFrame::Plain); + setLineWidth(2); + setAttribute(Qt::WA_DeleteOnClose); + + setLayout(new QVBoxLayout); + layout()->addWidget(m_label); + + connect(m_hideTimer, SIGNAL(timeout()), this, SLOT(hide())); + } + + void setVisible(bool visible) Q_DECL_OVERRIDE + { + if (visible) { + m_hideTimer->start(2000); + } + QFrame::setVisible(visible); + } + + void setText(const QString &text) + { + m_label->setText(text); + } + +private: + QTimer *m_hideTimer; + QLabel *m_label; +}; + using namespace Widgets; PageView::PageView(QWidget *parent) @@ -106,8 +148,7 @@ addItemAction->setText(tr("New item")); addItemAction->setIcon(QIcon::fromTheme("list-add")); addItemAction->setShortcut(Qt::CTRL | Qt::Key_N); - connect(addItemAction, SIGNAL(triggered(bool)), m_quickAddEdit, SLOT(selectAll())); - connect(addItemAction, SIGNAL(triggered(bool)), m_quickAddEdit, SLOT(setFocus())); + connect(addItemAction, SIGNAL(triggered(bool)), this, SLOT(onAddItemRequested())); auto cancelAddItemAction = new QAction(this); cancelAddItemAction->setObjectName("cancelAddItemAction"); @@ -217,6 +258,22 @@ m_quickAddEdit->clear(); } +void PageView::onAddItemRequested() +{ + if (m_quickAddEdit->hasFocus()) + return; + + const auto editTopLeft = m_quickAddEdit->geometry().topLeft(); + const auto pos = mapToGlobal(editTopLeft); + auto popup = new PassivePopup(m_quickAddEdit); + popup->setText(tr("Type and press enter to add an item")); + popup->show(); + popup->move(pos - QPoint(0, popup->height())); + + m_quickAddEdit->selectAll(); + m_quickAddEdit->setFocus(); +} + void PageView::onRemoveItemRequested() { const QModelIndexList ¤tIndexes = m_centralView->selectionModel()->selectedIndexes();