AttachmentList: lazy initialization

This commit is contained in:
Le Tan 2018-05-23 20:08:17 +08:00
parent 43509d7022
commit 9718d1f727
2 changed files with 53 additions and 43 deletions

View File

@ -16,13 +16,11 @@ extern VConfigManager *g_config;
extern VMainWindow *g_mainWin; extern VMainWindow *g_mainWin;
VAttachmentList::VAttachmentList(QWidget *p_parent) VAttachmentList::VAttachmentList(QWidget *p_parent)
: QWidget(p_parent), VButtonPopupWidget(this), m_file(NULL) : QWidget(p_parent),
VButtonPopupWidget(this),
m_initialized(false),
m_file(NULL)
{ {
setupUI();
initActions();
updateContent();
} }
void VAttachmentList::setupUI() void VAttachmentList::setupUI()
@ -118,33 +116,10 @@ void VAttachmentList::setupUI()
setLayout(mainLayout); setLayout(mainLayout);
} }
void VAttachmentList::initActions()
{
m_openAct = new QAction(tr("&Open"), this);
m_openAct->setToolTip(tr("Open current attachment file"));
connect(m_openAct, &QAction::triggered,
this, [this]() {
QListWidgetItem *item = m_attachmentList->currentItem();
handleItemActivated(item);
});
m_deleteAct = new QAction(VIconUtils::menuDangerIcon(":/resources/icons/delete_attachment.svg"),
tr("&Delete"),
this);
m_deleteAct->setToolTip(tr("Delete selected attachments"));
connect(m_deleteAct, &QAction::triggered,
this, &VAttachmentList::deleteSelectedItems);
m_sortAct = new QAction(VIconUtils::menuIcon(":/resources/icons/sort.svg"),
tr("&Sort"),
this);
m_sortAct->setToolTip(tr("Sort attachments manually"));
connect(m_sortAct, &QAction::triggered,
this, &VAttachmentList::sortItems);
}
void VAttachmentList::setFile(VNoteFile *p_file) void VAttachmentList::setFile(VNoteFile *p_file)
{ {
init();
m_file = p_file; m_file = p_file;
updateButtonState(); updateButtonState();
@ -270,10 +245,23 @@ void VAttachmentList::handleContextMenuRequested(QPoint p_pos)
} }
if (m_attachmentList->selectedItems().size() == 1) { if (m_attachmentList->selectedItems().size() == 1) {
menu.addAction(m_openAct); QAction *openAct = new QAction(tr("&Open"), &menu);
openAct->setToolTip(tr("Open current attachment file"));
connect(openAct, &QAction::triggered,
this, [this]() {
QListWidgetItem *item = m_attachmentList->currentItem();
handleItemActivated(item);
});
menu.addAction(openAct);
} }
menu.addAction(m_deleteAct); QAction *deleteAct = new QAction(VIconUtils::menuDangerIcon(":/resources/icons/delete_attachment.svg"),
tr("&Delete"),
&menu);
deleteAct->setToolTip(tr("Delete selected attachments"));
connect(deleteAct, &QAction::triggered,
this, &VAttachmentList::deleteSelectedItems);
menu.addAction(deleteAct);
} }
m_attachmentList->update(); m_attachmentList->update();
@ -283,7 +271,13 @@ void VAttachmentList::handleContextMenuRequested(QPoint p_pos)
menu.addSeparator(); menu.addSeparator();
} }
menu.addAction(m_sortAct); QAction *sortAct = new QAction(VIconUtils::menuIcon(":/resources/icons/sort.svg"),
tr("&Sort"),
&menu);
sortAct->setToolTip(tr("Sort attachments manually"));
connect(sortAct, &QAction::triggered,
this, &VAttachmentList::sortItems);
menu.addAction(sortAct);
} }
if (!menu.actions().isEmpty()) { if (!menu.actions().isEmpty()) {
@ -499,6 +493,8 @@ bool VAttachmentList::handleDropEvent(QDropEvent *p_event)
return false; return false;
} }
init();
const QMimeData *mime = p_event->mimeData(); const QMimeData *mime = p_event->mimeData();
if (mime->hasFormat("text/uri-list") && mime->hasUrls()) { if (mime->hasFormat("text/uri-list") && mime->hasUrls()) {
// Add attachments. // Add attachments.
@ -531,6 +527,8 @@ bool VAttachmentList::handleDropEvent(QDropEvent *p_event)
void VAttachmentList::handleAboutToShow() void VAttachmentList::handleAboutToShow()
{ {
init();
updateContent(); updateContent();
checkAttachments(); checkAttachments();
@ -619,7 +617,22 @@ void VAttachmentList::checkAttachments()
void VAttachmentList::showEvent(QShowEvent *p_event) void VAttachmentList::showEvent(QShowEvent *p_event)
{ {
init();
QWidget::showEvent(p_event); QWidget::showEvent(p_event);
processShowEvent(p_event); processShowEvent(p_event);
} }
void VAttachmentList::init()
{
if (m_initialized) {
return;
}
m_initialized = true;
setupUI();
updateContent();
}

View File

@ -13,7 +13,6 @@ class QListWidget;
class QListWidgetItem; class QListWidgetItem;
class QLabel; class QLabel;
class VNoteFile; class VNoteFile;
class QAction;
class VAttachmentList : public QWidget, public VButtonPopupWidget class VAttachmentList : public QWidget, public VButtonPopupWidget
@ -25,9 +24,6 @@ public:
// Need to call updateContent() to update the list. // Need to call updateContent() to update the list.
void setFile(VNoteFile *p_file); void setFile(VNoteFile *p_file);
// Update attachment info of m_file.
void updateContent();
bool isAcceptDrops() const Q_DECL_OVERRIDE; bool isAcceptDrops() const Q_DECL_OVERRIDE;
bool handleDragEnterEvent(QDragEnterEvent *p_event) Q_DECL_OVERRIDE; bool handleDragEnterEvent(QDragEnterEvent *p_event) Q_DECL_OVERRIDE;
@ -57,7 +53,7 @@ private slots:
private: private:
void setupUI(); void setupUI();
void initActions(); void init();
void fillAttachmentList(const QVector<VAttachment> &p_attachments); void fillAttachmentList(const QVector<VAttachment> &p_attachments);
@ -69,6 +65,11 @@ private:
// Check if there are attachments that do not exist in disk. // Check if there are attachments that do not exist in disk.
void checkAttachments(); void checkAttachments();
// Update attachment info of m_file.
void updateContent();
bool m_initialized;
QPushButton *m_addBtn; QPushButton *m_addBtn;
QPushButton *m_clearBtn; QPushButton *m_clearBtn;
QPushButton *m_locateBtn; QPushButton *m_locateBtn;
@ -77,10 +78,6 @@ private:
LineEditDelegate m_listDelegate; LineEditDelegate m_listDelegate;
QListWidget *m_attachmentList; QListWidget *m_attachmentList;
QAction *m_openAct;
QAction *m_deleteAct;
QAction *m_sortAct;
VNoteFile *m_file; VNoteFile *m_file;
}; };