diff --git a/src/vfilelist.cpp b/src/vfilelist.cpp
index 999fcec3..54621ab1 100644
--- a/src/vfilelist.cpp
+++ b/src/vfilelist.cpp
@@ -263,7 +263,7 @@ void VFileList::fileInfo(VNoteFile *p_file)
void VFileList::fillItem(QListWidgetItem *p_item, const VNoteFile *p_file)
{
- unsigned long long ptr = (long long)p_file;
+ qulonglong ptr = (qulonglong)p_file;
p_item->setData(Qt::UserRole, ptr);
p_item->setToolTip(p_file->getName());
p_item->setText(p_file->getName());
diff --git a/src/vmainwindow.cpp b/src/vmainwindow.cpp
index 0e131258..022bea55 100644
--- a/src/vmainwindow.cpp
+++ b/src/vmainwindow.cpp
@@ -115,7 +115,6 @@ void VMainWindow::setupUI()
m_findReplaceDialog = editArea->getFindReplaceDialog();
m_fileList->setEditArea(editArea);
directoryTree->setEditArea(editArea);
- notebookSelector->setEditArea(editArea);
// Main Splitter
m_mainSplitter = new QSplitter();
@@ -180,7 +179,7 @@ QWidget *VMainWindow::setupDirectoryPanel()
notebookLabel->setProperty("TitleLabel", true);
notebookLabel->setProperty("NotebookPanel", true);
- notebookSelector = new VNotebookSelector(vnote);
+ notebookSelector = new VNotebookSelector();
notebookSelector->setObjectName("NotebookSelector");
notebookSelector->setProperty("NotebookPanel", true);
notebookSelector->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
diff --git a/src/vmainwindow.h b/src/vmainwindow.h
index 2a273c49..69830df4 100644
--- a/src/vmainwindow.h
+++ b/src/vmainwindow.h
@@ -65,6 +65,8 @@ public:
VFileList *getFileList() const;
+ VEditArea *getEditArea() const;
+
// View and edit the information of @p_file, which is an orphan file.
void editOrphanFileInfo(VFile *p_file);
@@ -257,6 +259,7 @@ private:
QSplitter *m_naviSplitter;
VEditArea *editArea;
+
QDockWidget *toolDock;
QToolBox *toolBox;
VOutline *outline;
@@ -345,4 +348,9 @@ inline VFileList *VMainWindow::getFileList() const
return m_fileList;
}
+inline VEditArea *VMainWindow::getEditArea() const
+{
+ return editArea;
+}
+
#endif // VMAINWINDOW_H
diff --git a/src/vnotebook.cpp b/src/vnotebook.cpp
index 43b9ba22..a4ecb3ae 100644
--- a/src/vnotebook.cpp
+++ b/src/vnotebook.cpp
@@ -9,7 +9,7 @@
extern VConfigManager *g_config;
VNotebook::VNotebook(const QString &name, const QString &path, QObject *parent)
- : QObject(parent), m_name(name)
+ : QObject(parent), m_name(name), m_valid(false)
{
m_path = QDir::cleanPath(path);
m_recycleBinFolder = g_config->getRecycleBinFolder();
@@ -29,6 +29,7 @@ bool VNotebook::readConfigNotebook()
QJsonObject configJson = VConfigManager::readDirectoryConfig(m_path);
if (configJson.isEmpty()) {
qWarning() << "fail to read notebook configuration" << m_path;
+ m_valid = false;
return false;
}
@@ -58,6 +59,7 @@ bool VNotebook::readConfigNotebook()
writeConfigNotebook();
}
+ m_valid = true;
return true;
}
diff --git a/src/vnotebook.h b/src/vnotebook.h
index 80bf9585..316ca109 100644
--- a/src/vnotebook.h
+++ b/src/vnotebook.h
@@ -93,6 +93,8 @@ public:
// Need to check if this notebook has been opened.
QDateTime getCreatedTimeUtc();
+ bool isValid() const;
+
private:
// Serialize current instance to json.
QJsonObject toConfigJson() const;
@@ -118,6 +120,10 @@ private:
// Parent is NULL for root directory
VDirectory *m_rootDir;
+
+ // Whether this notebook is valid.
+ // Will set to true after readConfigNotebook().
+ bool m_valid;
};
inline VDirectory *VNotebook::getRootDir() const
@@ -130,4 +136,9 @@ inline const QString &VNotebook::getRecycleBinFolder() const
return m_recycleBinFolder;
}
+inline bool VNotebook::isValid() const
+{
+ return m_valid;
+}
+
#endif // VNOTEBOOK_H
diff --git a/src/vnotebookselector.cpp b/src/vnotebookselector.cpp
index 00605e80..b6ca308c 100644
--- a/src/vnotebookselector.cpp
+++ b/src/vnotebookselector.cpp
@@ -20,22 +20,27 @@
#include "vnote.h"
#include "veditarea.h"
#include "vnofocusitemdelegate.h"
+#include "vmainwindow.h"
extern VConfigManager *g_config;
+
extern VNote *g_vnote;
-const int VNotebookSelector::c_notebookStartIdx = 1;
+extern VMainWindow *g_mainWin;
-VNotebookSelector::VNotebookSelector(VNote *vnote, QWidget *p_parent)
- : QComboBox(p_parent), VNavigationMode(),
- m_vnote(vnote), m_notebooks(m_vnote->getNotebooks()),
- m_editArea(NULL), m_lastValidIndex(-1), m_naviLabel(NULL)
+VNotebookSelector::VNotebookSelector(QWidget *p_parent)
+ : QComboBox(p_parent),
+ VNavigationMode(),
+ m_notebooks(g_vnote->getNotebooks()),
+ m_lastValidIndex(-1),
+ m_muted(false),
+ m_naviLabel(NULL)
{
m_listWidget = new QListWidget(this);
m_listWidget->setItemDelegate(new VNoFocusItemDelegate(this));
m_listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_listWidget, &QListWidget::customContextMenuRequested,
- this, &VNotebookSelector::requestPopupListContextMenu);
+ this, &VNotebookSelector::popupListContextMenuRequested);
setModel(m_listWidget->model());
setView(m_listWidget);
@@ -47,8 +52,6 @@ VNotebookSelector::VNotebookSelector(VNote *vnote, QWidget *p_parent)
connect(this, SIGNAL(currentIndexChanged(int)),
this, SLOT(handleCurIndexChanged(int)));
- connect(this, SIGNAL(activated(int)),
- this, SLOT(handleItemActivated(int)));
}
void VNotebookSelector::initActions()
@@ -75,9 +78,7 @@ void VNotebookSelector::initActions()
}
Q_ASSERT(items.size() == 1);
- QListWidgetItem *item = items[0];
- int index = this->indexOfListItem(item);
- VNotebook *notebook = this->getNotebookFromComboIndex(index);
+ VNotebook *notebook = getNotebook(items[0]);
QUrl url = QUrl::fromLocalFile(notebook->getPath());
QDesktopServices::openUrl(url);
});
@@ -93,9 +94,7 @@ void VNotebookSelector::initActions()
}
Q_ASSERT(items.size() == 1);
- QListWidgetItem *item = items[0];
- int index = this->indexOfListItem(item);
- VNotebook *notebook = this->getNotebookFromComboIndex(index);
+ VNotebook *notebook = getNotebook(items[0]);
QUrl url = QUrl::fromLocalFile(notebook->getRecycleBinFolderPath());
QDesktopServices::openUrl(url);
});
@@ -111,9 +110,7 @@ void VNotebookSelector::initActions()
}
Q_ASSERT(items.size() == 1);
- QListWidgetItem *item = items[0];
- int index = this->indexOfListItem(item);
- VNotebook *notebook = this->getNotebookFromComboIndex(index);
+ VNotebook *notebook = getNotebook(items[0]);
QString binPath = notebook->getRecycleBinFolderPath();
int ret = VUtils::showMessage(QMessageBox::Warning, tr("Warning"),
@@ -129,7 +126,9 @@ void VNotebookSelector::initActions()
.arg(g_config->c_dataTextStyle)
.arg(binPath),
QMessageBox::Ok | QMessageBox::Cancel,
- QMessageBox::Ok, this, MessageBoxType::Danger);
+ QMessageBox::Ok,
+ this,
+ MessageBoxType::Danger);
if (ret == QMessageBox::Ok) {
QString info;
if (VUtils::emptyDirectory(notebook, binPath, true)) {
@@ -157,37 +156,60 @@ void VNotebookSelector::initActions()
void VNotebookSelector::updateComboBox()
{
+ m_muted = true;
+
int index = g_config->getCurNotebookIndex();
- disconnect(this, SIGNAL(currentIndexChanged(int)),
- this, SLOT(handleCurIndexChanged(int)));
clear();
+
m_listWidget->clear();
insertAddNotebookItem();
for (int i = 0; i < m_notebooks.size(); ++i) {
- addNotebookItem(m_notebooks[i]->getName());
+ addNotebookItem(m_notebooks[i]);
}
+
setCurrentIndex(-1);
- connect(this, SIGNAL(currentIndexChanged(int)),
- this, SLOT(handleCurIndexChanged(int)));
+
+ m_muted = false;
if (m_notebooks.isEmpty()) {
g_config->setCurNotebookIndex(-1);
setCurrentIndex(0);
} else {
- setCurrentIndexNotebook(index);
+ const VNotebook *nb = NULL;
+ if (index >= 0 && index < m_notebooks.size()) {
+ nb = m_notebooks[index];
+ }
+
+ setCurrentItemToNotebook(nb);
}
+
qDebug() << "notebooks" << m_notebooks.size() << "current index" << index;
}
-void VNotebookSelector::setCurrentIndexNotebook(int p_index)
+void VNotebookSelector::setCurrentItemToNotebook(const VNotebook *p_notebook)
{
- if (p_index > -1) {
- p_index += c_notebookStartIdx;
+ setCurrentIndex(itemIndexOfNotebook(p_notebook));
+}
+
+int VNotebookSelector::itemIndexOfNotebook(const VNotebook *p_notebook) const
+{
+ if (!p_notebook) {
+ return -1;
}
- setCurrentIndex(p_index);
+
+ qulonglong ptr = (qulonglong)p_notebook;
+ int cnt = m_listWidget->count();
+ for (int i = 0; i < cnt; ++i) {
+ QListWidgetItem *item = m_listWidget->item(i);
+ if (item->data(Qt::UserRole).toULongLong() == ptr) {
+ return i;
+ }
+ }
+
+ return -1;
}
void VNotebookSelector::insertAddNotebookItem()
@@ -199,49 +221,49 @@ void VNotebookSelector::insertAddNotebookItem()
font.setItalic(true);
item->setData(Qt::FontRole, font);
item->setToolTip(tr("Create or import a notebook"));
+
m_listWidget->insertItem(0, item);
}
void VNotebookSelector::handleCurIndexChanged(int p_index)
{
- qDebug() << "current index changed" << p_index << "startIdx" << c_notebookStartIdx;
+ if (m_muted) {
+ return;
+ }
+
+ QString tooltip = tr("View and edit notebooks");
VNotebook *nb = NULL;
if (p_index > -1) {
- if (p_index < c_notebookStartIdx) {
- // Click a special action item.
- if (m_listWidget->count() == c_notebookStartIdx) {
- // There is no regular notebook item. Just let it be selected.
- p_index = -1;
- } else {
- // handleItemActivated() will handle the logics.
- return;
- }
- } else {
- int nbIdx = p_index - c_notebookStartIdx;
- Q_ASSERT(nbIdx >= 0);
- nb = m_notebooks[nbIdx];
- }
- }
- m_lastValidIndex = p_index;
- QString tooltip;
- if (p_index > -1) {
- p_index -= c_notebookStartIdx;
- tooltip = nb->getName();
- }
- setToolTip(tooltip);
- g_config->setCurNotebookIndex(p_index);
- emit curNotebookChanged(nb);
-}
+ nb = getNotebook(p_index);
+ if (!nb) {
+ // Add notebook.
+ setToolTip(tooltip);
-void VNotebookSelector::handleItemActivated(int p_index)
-{
- if (p_index > -1 && p_index < c_notebookStartIdx) {
- // Click a special action item
- if (m_lastValidIndex > -1) {
- setCurrentIndex(m_lastValidIndex);
+ if (m_lastValidIndex != p_index && m_lastValidIndex > -1) {
+ setCurrentIndex(m_lastValidIndex);
+ }
+
+ newNotebook();
+
+ return;
}
- newNotebook();
}
+
+ m_lastValidIndex = p_index;
+
+ int nbIdx = -1;
+ if (nb) {
+ tooltip = nb->getName();
+
+ nbIdx = m_notebooks.indexOf(nb);
+ Q_ASSERT(nbIdx > -1);
+ }
+
+ g_config->setCurNotebookIndex(nbIdx);
+
+ setToolTip(tooltip);
+
+ emit curNotebookChanged(nb);
}
void VNotebookSelector::update()
@@ -260,13 +282,14 @@ bool VNotebookSelector::newNotebook()
info += tr("* A previously created notebook could be imported into VNote "
"by choosing its root folder.");
- QString defaultName;
- QString defaultPath;
-
// Use empty default name and path to let the dialog to auto generate a name
// under the default VNote notebook folder.
- VNewNotebookDialog dialog(tr("Add Notebook"), info, defaultName,
- defaultPath, m_notebooks, this);
+ VNewNotebookDialog dialog(tr("Add Notebook"),
+ info,
+ "",
+ "",
+ m_notebooks,
+ this);
if (dialog.exec() == QDialog::Accepted) {
createNotebook(dialog.getNameInput(),
dialog.getPathInput(),
@@ -289,7 +312,7 @@ void VNotebookSelector::createNotebook(const QString &p_name,
{
VNotebook *nb = VNotebook::createNotebook(p_name, p_path, p_import,
p_imageFolder, p_attachmentFolder,
- m_vnote);
+ g_vnote);
if (!nb) {
VUtils::showMessage(QMessageBox::Warning, tr("Warning"),
tr("Fail to create notebook "
@@ -302,8 +325,8 @@ void VNotebookSelector::createNotebook(const QString &p_name,
m_notebooks.append(nb);
g_config->setNotebooks(m_notebooks);
- addNotebookItem(nb->getName());
- setCurrentIndexNotebook(m_notebooks.size() - 1);
+ addNotebookItem(nb);
+ setCurrentItemToNotebook(nb);
}
void VNotebookSelector::deleteNotebook()
@@ -312,44 +335,47 @@ void VNotebookSelector::deleteNotebook()
if (items.isEmpty()) {
return;
}
- Q_ASSERT(items.size() == 1);
- QListWidgetItem *item = items[0];
- int index = indexOfListItem(item);
- VNotebook *notebook = getNotebookFromComboIndex(index);
+ Q_ASSERT(items.size() == 1);
+
+ VNotebook *notebook = getNotebook(items[0]);
Q_ASSERT(notebook);
VDeleteNotebookDialog dialog(tr("Delete Notebook"), notebook, this);
if (dialog.exec() == QDialog::Accepted) {
bool deleteFiles = dialog.getDeleteFiles();
- m_editArea->closeFile(notebook, true);
+ g_mainWin->getEditArea()->closeFile(notebook, true);
deleteNotebook(notebook, deleteFiles);
}
}
void VNotebookSelector::deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles)
{
- V_ASSERT(p_notebook);
+ Q_ASSERT(p_notebook);
- int idx = indexOfNotebook(p_notebook);
-
- m_notebooks.remove(idx);
+ m_notebooks.removeOne(p_notebook);
g_config->setNotebooks(m_notebooks);
- removeNotebookItem(idx);
+ int idx = itemIndexOfNotebook(p_notebook);
+ QListWidgetItem *item = m_listWidget->takeItem(idx);
+ Q_ASSERT(item);
+ delete item;
QString name(p_notebook->getName());
QString path(p_notebook->getPath());
bool ret = VNotebook::deleteNotebook(p_notebook, p_deleteFiles);
if (!ret) {
// Notebook could not be deleted completely.
- int cho = VUtils::showMessage(QMessageBox::Information, tr("Delete Notebook Folder From Disk"),
+ int cho = VUtils::showMessage(QMessageBox::Information,
+ tr("Delete Notebook Folder From Disk"),
tr("Fail to delete the root folder of notebook "
"%2 from disk. You may open "
"the folder and check it manually.")
- .arg(g_config->c_dataTextStyle).arg(name), "",
+ .arg(g_config->c_dataTextStyle).arg(name),
+ "",
QMessageBox::Open | QMessageBox::Ok,
- QMessageBox::Ok, this);
+ QMessageBox::Ok,
+ this);
if (cho == QMessageBox::Open) {
// Open the notebook location.
QUrl url = QUrl::fromLocalFile(path);
@@ -358,40 +384,28 @@ void VNotebookSelector::deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles
}
}
-int VNotebookSelector::indexOfNotebook(const VNotebook *p_notebook)
-{
- for (int i = 0; i < m_notebooks.size(); ++i) {
- if (m_notebooks[i] == p_notebook) {
- return i;
- }
- }
- return -1;
-}
-
-
void VNotebookSelector::editNotebookInfo()
{
QList items = m_listWidget->selectedItems();
if (items.isEmpty()) {
return;
}
+
Q_ASSERT(items.size() == 1);
- QListWidgetItem *item = items[0];
- int index = indexOfListItem(item);
- VNotebook *notebook = getNotebookFromComboIndex(index);
- QString curName = notebook->getName();
-
- VNotebookInfoDialog dialog(tr("Notebook Information"), "", notebook,
- m_notebooks, this);
+ VNotebook *notebook = getNotebook(items[0]);
+ VNotebookInfoDialog dialog(tr("Notebook Information"),
+ "",
+ notebook,
+ m_notebooks,
+ this);
if (dialog.exec() == QDialog::Accepted) {
bool updated = false;
bool configUpdated = false;
QString name = dialog.getName();
- if (name != curName) {
+ if (name != notebook->getName()) {
updated = true;
notebook->rename(name);
- updateComboBoxItem(index, name);
g_config->setNotebooks(m_notebooks);
}
@@ -407,54 +421,58 @@ void VNotebookSelector::editNotebookInfo()
}
if (updated) {
+ fillItem(items[0], notebook);
emit notebookUpdated(notebook);
}
}
}
-void VNotebookSelector::addNotebookItem(const QString &p_name)
+void VNotebookSelector::addNotebookItem(const VNotebook *p_notebook)
{
QListWidgetItem *item = new QListWidgetItem(m_listWidget);
- item->setText(p_name);
- item->setToolTip(p_name);
- item->setIcon(QIcon(":/resources/icons/notebook_item.svg"));
+ fillItem(item, p_notebook);
}
-void VNotebookSelector::removeNotebookItem(int p_index)
+void VNotebookSelector::fillItem(QListWidgetItem *p_item,
+ const VNotebook *p_notebook) const
{
- QListWidgetItem *item = m_listWidget->item(p_index + c_notebookStartIdx);
- m_listWidget->removeItemWidget(item);
- delete item;
+ p_item->setText(p_notebook->getName());
+ p_item->setToolTip(p_notebook->getName());
+ p_item->setIcon(QIcon(":/resources/icons/notebook_item.svg"));
+ p_item->setData(Qt::UserRole, (qulonglong)p_notebook);
}
-void VNotebookSelector::updateComboBoxItem(int p_index, const QString &p_name)
-{
- QListWidgetItem *item = m_listWidget->item(p_index);
- item->setText(p_name);
- item->setToolTip(p_name);
-}
-void VNotebookSelector::requestPopupListContextMenu(QPoint p_pos)
+void VNotebookSelector::popupListContextMenuRequested(QPoint p_pos)
{
- QModelIndex index = m_listWidget->indexAt(p_pos);
- if (!index.isValid() || index.row() < c_notebookStartIdx) {
+ QListWidgetItem *item = m_listWidget->itemAt(p_pos);
+ if (!item) {
+ return;
+ }
+
+ const VNotebook *nb = getNotebook(item);
+ if (!nb) {
return;
}
- QListWidgetItem *item = m_listWidget->itemAt(p_pos);
- Q_ASSERT(item);
m_listWidget->clearSelection();
item->setSelected(true);
QMenu menu(this);
menu.setToolTipsVisible(true);
menu.addAction(m_deleteNotebookAct);
- menu.addSeparator();
- menu.addAction(m_recycleBinAct);
- menu.addAction(m_emptyRecycleBinAct);
+ if (nb->isValid()) {
+ menu.addSeparator();
+ menu.addAction(m_recycleBinAct);
+ menu.addAction(m_emptyRecycleBinAct);
+ }
+
menu.addSeparator();
menu.addAction(m_openLocationAct);
- menu.addAction(m_notebookInfoAct);
+
+ if (nb->isValid()) {
+ menu.addAction(m_notebookInfoAct);
+ }
menu.exec(m_listWidget->mapToGlobal(p_pos));
}
@@ -471,40 +489,30 @@ bool VNotebookSelector::eventFilter(QObject *watched, QEvent *event)
return true;
}
}
- return QComboBox::eventFilter(watched, event);
-}
-int VNotebookSelector::indexOfListItem(const QListWidgetItem *p_item)
-{
- int nrItems = m_listWidget->count();
- for (int i = 0; i < nrItems; ++i) {
- if (m_listWidget->item(i) == p_item) {
- return i;
- }
- }
- return -1;
+ return QComboBox::eventFilter(watched, event);
}
bool VNotebookSelector::locateNotebook(const VNotebook *p_notebook)
{
- if (p_notebook) {
- for (int i = 0; i < m_notebooks.size(); ++i) {
- if (m_notebooks[i] == p_notebook) {
- setCurrentIndexNotebook(i);
- return true;
- }
- }
+ bool ret = false;
+ int index = itemIndexOfNotebook(p_notebook);
+ if (index > -1) {
+ setCurrentIndex(index);
+ ret = true;
}
- return false;
+
+ return ret;
}
void VNotebookSelector::showPopup()
{
- if (count() <= c_notebookStartIdx) {
+ if (m_notebooks.isEmpty()) {
// No normal notebook items. Just add notebook.
newNotebook();
return;
}
+
resizeListWidgetToContent();
QComboBox::showPopup();
}
@@ -526,6 +534,7 @@ void VNotebookSelector::resizeListWidgetToContent()
minHeight = m_listWidget->sizeHintForRow(0) * m_listWidget->count() + 10;
minHeight = qMin(minHeight, maxMinHeight);
}
+
m_listWidget->setMinimumSize(minWidth, minHeight);
}
@@ -616,3 +625,23 @@ bool VNotebookSelector::handlePopupKeyPress(QKeyEvent *p_event)
return false;
}
+
+VNotebook *VNotebookSelector::getNotebook(int p_itemIdx) const
+{
+ VNotebook *nb = NULL;
+ QListWidgetItem *item = m_listWidget->item(p_itemIdx);
+ if (item) {
+ nb = (VNotebook *)item->data(Qt::UserRole).toULongLong();
+ }
+
+ return nb;
+}
+
+VNotebook *VNotebookSelector::getNotebook(const QListWidgetItem *p_item) const
+{
+ if (p_item) {
+ return (VNotebook *)p_item->data(Qt::UserRole).toULongLong();
+ }
+
+ return NULL;
+}
diff --git a/src/vnotebookselector.h b/src/vnotebookselector.h
index 9f5797b5..cfb875d4 100644
--- a/src/vnotebookselector.h
+++ b/src/vnotebookselector.h
@@ -7,8 +7,6 @@
#include "vnavigationmode.h"
class VNotebook;
-class VNote;
-class VEditArea;
class QListWidget;
class QAction;
class QListWidgetItem;
@@ -18,11 +16,15 @@ class VNotebookSelector : public QComboBox, public VNavigationMode
{
Q_OBJECT
public:
- explicit VNotebookSelector(VNote *vnote, QWidget *p_parent = 0);
+ explicit VNotebookSelector(QWidget *p_parent = 0);
+
+ // Update Combox from m_notebooks.
void update();
- inline void setEditArea(VEditArea *p_editArea);
+
// Select notebook @p_notebook.
bool locateNotebook(const VNotebook *p_notebook);
+
+ // Add notebook on popup if no notebooks currently.
void showPopup() Q_DECL_OVERRIDE;
// Implementations for VNavigationMode.
@@ -41,24 +43,32 @@ signals:
void notebookCreated(const QString &p_name, bool p_import);
public slots:
+ // Popup a dialog to prompt user to create a notebook.
bool newNotebook();
protected:
bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
private slots:
+ // Act to currentIndexChanged() signal if m_muted is false.
void handleCurIndexChanged(int p_index);
- void handleItemActivated(int p_index);
- void requestPopupListContextMenu(QPoint p_pos);
+
+ void popupListContextMenuRequested(QPoint p_pos);
+
+ // Delete currently selected notebook.
void deleteNotebook();
+
+ // View and edit notebook information of selected notebook.
void editNotebookInfo();
private:
void initActions();
+
+ // Update Combox from m_notebooks.
void updateComboBox();
- // Return the index of @p_notebook in m_noteboks.
- int indexOfNotebook(const VNotebook *p_notebook);
+ // Return the item index of @p_notebook.
+ int itemIndexOfNotebook(const VNotebook *p_notebook) const;
// If @p_import is true, we will use the existing config file.
// If @p_imageFolder is empty, we will use the global one.
@@ -68,26 +78,37 @@ private:
const QString &p_attachmentFolder);
void deleteNotebook(VNotebook *p_notebook, bool p_deleteFiles);
- void addNotebookItem(const QString &p_name);
- // @p_index is the index of m_notebooks, NOT of QComboBox.
- void removeNotebookItem(int p_index);
- // @p_index is the index of QComboBox.
- void updateComboBoxItem(int p_index, const QString &p_name);
+
+ // Add an item corresponding to @p_notebook to combo box.
+ void addNotebookItem(const VNotebook *p_notebook);
+
+ void fillItem(QListWidgetItem *p_item, const VNotebook *p_notebook) const;
+
+ // Insert "Add Notebook" item to combo box.
void insertAddNotebookItem();
- // @p_index is the index of m_notebooks.
- void setCurrentIndexNotebook(int p_index);
- int indexOfListItem(const QListWidgetItem *p_item);
- // @p_index is the idnex of QComboBox.
- inline VNotebook *getNotebookFromComboIndex(int p_index);
+
+ // Set current item corresponding to @p_notebook.
+ void setCurrentItemToNotebook(const VNotebook *p_notebook);
+
+ // Get VNotebook from @p_itemIdx, the index of m_listWidget.
+ VNotebook *getNotebook(int p_itemIdx) const;
+
+ VNotebook *getNotebook(const QListWidgetItem *p_item) const;
+
void resizeListWidgetToContent();
+
bool handlePopupKeyPress(QKeyEvent *p_event);
- VNote *m_vnote;
QVector &m_notebooks;
- VEditArea *m_editArea;
+
QListWidget *m_listWidget;
+
+ // Used to restore after clicking Add Notebook item.
int m_lastValidIndex;
+ // Whether it is muted from currentIndexChanged().
+ bool m_muted;
+
// Actions
QAction *m_deleteNotebookAct;
QAction *m_notebookInfoAct;
@@ -95,28 +116,7 @@ private:
QAction *m_recycleBinAct;
QAction *m_emptyRecycleBinAct;
- // We will add several special action item in the combobox. This is the start index
- // of the real notebook items related to m_notebooks.
- static const int c_notebookStartIdx;
-
QLabel *m_naviLabel;
};
-inline void VNotebookSelector::setEditArea(VEditArea *p_editArea)
-{
- m_editArea = p_editArea;
-}
-
-inline VNotebook *VNotebookSelector::getNotebookFromComboIndex(int p_index)
-{
- if (p_index < c_notebookStartIdx) {
- return NULL;
- }
- int nbIdx = p_index - c_notebookStartIdx;
- if (nbIdx >= m_notebooks.size()) {
- return NULL;
- }
- return m_notebooks[nbIdx];
-}
-
#endif // VNOTEBOOKSELECTOR_H