diff --git a/src/vcart.h b/src/vcart.h
index 4be62580..d9c4ad91 100644
--- a/src/vcart.h
+++ b/src/vcart.h
@@ -10,7 +10,6 @@ class QPushButton;
class VListWidget;
class QListWidgetItem;
class QLabel;
-class QAction;
class VCart : public QWidget, public VNavigationMode
{
diff --git a/src/vfilelist.h b/src/vfilelist.h
index dfb2a12e..c4cce227 100644
--- a/src/vfilelist.h
+++ b/src/vfilelist.h
@@ -15,7 +15,6 @@
#include "vnavigationmode.h"
#include "vlistwidget.h"
-class QAction;
class VNote;
class QListWidget;
class QPushButton;
diff --git a/src/vsnippetlist.cpp b/src/vsnippetlist.cpp
index 5887f103..434ab557 100644
--- a/src/vsnippetlist.cpp
+++ b/src/vsnippetlist.cpp
@@ -19,33 +19,21 @@ extern VMainWindow *g_mainWin;
const QString VSnippetList::c_infoShortcutSequence = "F2";
VSnippetList::VSnippetList(QWidget *p_parent)
- : QWidget(p_parent)
+ : QWidget(p_parent),
+ m_initialized(false),
+ m_uiInitialized(false)
{
- setupUI();
-
initShortcuts();
-
- initActions();
-
- if (!readSnippetsFromConfig()) {
- VUtils::showMessage(QMessageBox::Warning,
- tr("Warning"),
- tr("Fail to read snippets from %2.")
- .arg(g_config->c_dataTextStyle)
- .arg(g_config->getSnippetConfigFolder()),
- "",
- QMessageBox::Ok,
- QMessageBox::Ok,
- this);
- }
-
- updateContent();
-
- updateNumberLabel();
}
void VSnippetList::setupUI()
{
+ if (m_uiInitialized) {
+ return;
+ }
+
+ m_uiInitialized = true;
+
m_addBtn = new QPushButton(VIconUtils::buttonIcon(":/resources/icons/add_snippet.svg"), "");
m_addBtn->setToolTip(tr("New Snippet"));
m_addBtn->setProperty("FlatBtn", true);
@@ -88,40 +76,6 @@ void VSnippetList::setupUI()
setLayout(mainLayout);
}
-void VSnippetList::initActions()
-{
- m_applyAct = new QAction(VIconUtils::menuIcon(":/resources/icons/apply_snippet.svg"),
- tr("&Apply"),
- this);
- m_applyAct->setToolTip(tr("Insert this snippet in editor"));
- connect(m_applyAct, &QAction::triggered,
- this, [this]() {
- QListWidgetItem *item = m_snippetList->currentItem();
- handleItemActivated(item);
- });
-
- m_infoAct = new QAction(VIconUtils::menuIcon(":/resources/icons/snippet_info.svg"),
- tr("&Info\t%1").arg(VUtils::getShortcutText(c_infoShortcutSequence)),
- this);
- m_infoAct->setToolTip(tr("View and edit snippet's information"));
- connect(m_infoAct, &QAction::triggered,
- this, &VSnippetList::snippetInfo);
-
- m_deleteAct = new QAction(VIconUtils::menuDangerIcon(":/resources/icons/delete_snippet.svg"),
- tr("&Delete"),
- this);
- m_deleteAct->setToolTip(tr("Delete selected snippets"));
- connect(m_deleteAct, &QAction::triggered,
- this, &VSnippetList::deleteSelectedItems);
-
- m_sortAct = new QAction(VIconUtils::menuIcon(":/resources/icons/sort.svg"),
- tr("&Sort"),
- this);
- m_sortAct->setToolTip(tr("Sort snippets manually"));
- connect(m_sortAct, &QAction::triggered,
- this, &VSnippetList::sortItems);
-}
-
void VSnippetList::initShortcuts()
{
QShortcut *infoShortcut = new QShortcut(QKeySequence(c_infoShortcutSequence), this);
@@ -178,11 +132,33 @@ void VSnippetList::handleContextMenuRequested(QPoint p_pos)
if (item) {
int itemCount = m_snippetList->selectedItems().size();
if (itemCount == 1) {
- menu.addAction(m_applyAct);
- menu.addAction(m_infoAct);
+ QAction *applyAct = new QAction(VIconUtils::menuIcon(":/resources/icons/apply_snippet.svg"),
+ tr("&Apply"),
+ &menu);
+ applyAct->setToolTip(tr("Insert this snippet in editor"));
+ connect(applyAct, &QAction::triggered,
+ this, [this]() {
+ QListWidgetItem *item = m_snippetList->currentItem();
+ handleItemActivated(item);
+ });
+ menu.addAction(applyAct);
+
+ QAction *infoAct = new QAction(VIconUtils::menuIcon(":/resources/icons/snippet_info.svg"),
+ tr("&Info\t%1").arg(VUtils::getShortcutText(c_infoShortcutSequence)),
+ &menu);
+ infoAct->setToolTip(tr("View and edit snippet's information"));
+ connect(infoAct, &QAction::triggered,
+ this, &VSnippetList::snippetInfo);
+ menu.addAction(infoAct);
}
- menu.addAction(m_deleteAct);
+ QAction *deleteAct = new QAction(VIconUtils::menuDangerIcon(":/resources/icons/delete_snippet.svg"),
+ tr("&Delete"),
+ &menu);
+ deleteAct->setToolTip(tr("Delete selected snippets"));
+ connect(deleteAct, &QAction::triggered,
+ this, &VSnippetList::deleteSelectedItems);
+ menu.addAction(deleteAct);
}
m_snippetList->update();
@@ -192,7 +168,13 @@ void VSnippetList::handleContextMenuRequested(QPoint p_pos)
menu.addSeparator();
}
- menu.addAction(m_sortAct);
+ QAction *sortAct = new QAction(VIconUtils::menuIcon(":/resources/icons/sort.svg"),
+ tr("&Sort"),
+ &menu);
+ sortAct->setToolTip(tr("Sort snippets manually"));
+ connect(sortAct, &QAction::triggered,
+ this, &VSnippetList::sortItems);
+ menu.addAction(sortAct);
}
if (!menu.actions().isEmpty()) {
@@ -492,12 +474,16 @@ void VSnippetList::keyPressEvent(QKeyEvent *p_event)
void VSnippetList::showNavigation()
{
+ setupUI();
+
VNavigationMode::showNavigation(m_snippetList);
}
bool VSnippetList::handleKeyNavigation(int p_key, bool &p_succeed)
{
static bool secondKey = false;
+ setupUI();
+
return VNavigationMode::handleKeyNavigation(m_snippetList,
secondKey,
p_key,
@@ -617,6 +603,8 @@ bool VSnippetList::deleteSnippetFile(const VSnippet &p_snippet, QString *p_errMs
void VSnippetList::focusInEvent(QFocusEvent *p_event)
{
+ init();
+
QWidget::focusInEvent(p_event);
if (m_snippets.isEmpty()) {
@@ -632,3 +620,36 @@ void VSnippetList::updateNumberLabel() const
m_numLabel->setText(tr("%1 %2").arg(cnt)
.arg(cnt > 1 ? tr("Items") : tr("Item")));
}
+
+void VSnippetList::init()
+{
+ if (m_initialized) {
+ return;
+ }
+
+ m_initialized = true;
+
+ setupUI();
+
+ if (!readSnippetsFromConfig()) {
+ VUtils::showMessage(QMessageBox::Warning,
+ tr("Warning"),
+ tr("Fail to read snippets from %2.")
+ .arg(g_config->c_dataTextStyle)
+ .arg(g_config->getSnippetConfigFolder()),
+ "",
+ QMessageBox::Ok,
+ QMessageBox::Ok,
+ this);
+ }
+
+ updateContent();
+}
+
+void VSnippetList::showEvent(QShowEvent *p_event)
+{
+ init();
+
+ QWidget::showEvent(p_event);
+}
+
diff --git a/src/vsnippetlist.h b/src/vsnippetlist.h
index 979af7ae..a079bddd 100644
--- a/src/vsnippetlist.h
+++ b/src/vsnippetlist.h
@@ -12,7 +12,6 @@ class QPushButton;
class VListWidget;
class QListWidgetItem;
class QLabel;
-class QAction;
class QKeyEvent;
class QFocusEvent;
@@ -32,6 +31,8 @@ public:
bool handleKeyNavigation(int p_key, bool &p_succeed) Q_DECL_OVERRIDE;
protected:
+ void showEvent(QShowEvent *p_event) Q_DECL_OVERRIDE;
+
void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;
void focusInEvent(QFocusEvent *p_event) Q_DECL_OVERRIDE;
@@ -52,7 +53,7 @@ private slots:
private:
void setupUI();
- void initActions();
+ void init();
void initShortcuts();
@@ -89,16 +90,15 @@ private:
void updateNumberLabel() const;
+ bool m_initialized;
+
+ bool m_uiInitialized;
+
QPushButton *m_addBtn;
QPushButton *m_locateBtn;
QLabel *m_numLabel;
VListWidget *m_snippetList;
- QAction *m_applyAct;
- QAction *m_infoAct;
- QAction *m_deleteAct;
- QAction *m_sortAct;
-
QVector m_snippets;
static const QString c_infoShortcutSequence;
@@ -106,11 +106,15 @@ private:
inline const QVector &VSnippetList::getSnippets() const
{
+ const_cast(this)->init();
+
return m_snippets;
}
inline const VSnippet *VSnippetList::getSnippet(const QString &p_name) const
{
+ const_cast(this)->init();
+
for (auto const & snip : m_snippets) {
if (snip.getName() == p_name) {
return &snip;