4#include <QLoggingCategory>
6#include "FrmAddBookmark.h"
7#include "ui_FrmAddBookmark.h"
9static Q_LOGGING_CATEGORY(log,
"WebBrowser.Bookmark.Add")
19 , m_pDatabase(
nullptr)
20 , m_pModelTree(
nullptr)
23 ui->pbDelete->setVisible(
false);
25 setWindowIcon(QIcon::fromTheme(
"user-bookmarks"));
27 if(m_szTitle.isEmpty())
28 m_szTitle = m_Url.toString();
30 ui->leTitle->setText(m_szTitle);
33 m_pDatabase = &pPara->m_BookmarkDatabase;
34 resize(m_pPara->GetWindowSize());
35 ui->cbSave->setChecked(m_pPara->GetBookmarkShowEditor());
38 ui->tvFolder->setHeaderHidden(
true);
39 ui->tvFolder->setContextMenuPolicy(Qt::CustomContextMenu);
40 ui->tvFolder->setEditTriggers(QAbstractItemView::NoEditTriggers);
41 m_pModelTree =
new QStandardItemModel(ui->tvFolder);
43 ui->tvFolder->setModel(m_pModelTree);
44 m_pModelTree->setColumnCount(1);
48 check = connect(ui->tvFolder, SIGNAL(customContextMenuRequested(QPoint)),
49 this, SLOT(onCustomContextMenu(QPoint)));
51 check = connect(m_pDatabase, &CBookmarkDatabase::folderAdded,
53 loadFolder(folder.id);
59CFrmAddBookmark::~CFrmAddBookmark()
64void CFrmAddBookmark::on_pbAdd_clicked()
66 if(!m_pPara || !m_pDatabase)
return;
68 m_pPara->SetBookmarkShowEditor(ui->cbSave->isChecked());
70 auto index = ui->tvFolder->currentIndex();
72 int id = index.data((
int)Role::ID).toInt();
73 m_pPara->SetBookmarkCurrentFolder(
id);
74 auto items = m_pDatabase->getBookmarkByUrl(m_Url.toString());
75 if(!items.isEmpty()) {
77 item.title = ui->leTitle->text();
78 item.url = m_Url.toString();
80 m_pDatabase->updateBookmark(item);
83 item.title = ui->leTitle->text();
84 item.url = m_Url.toString();
86 item.createdTime = QDateTime::currentDateTime();
87 item.lastVisitTime = item.createdTime;
88 item.modifiedTime = item.createdTime;
89 int id = m_pDatabase->addBookmark(item);
98void CFrmAddBookmark::on_pbCancel_clicked()
103void CFrmAddBookmark::on_pbDelete_clicked()
105 auto items = m_pDatabase->getBookmarkByUrl(m_Url.toString());
106 m_pDatabase->deleteBookmark(items);
107 ui->pbDelete->setVisible(
false);
111void CFrmAddBookmark::loadFolder(
int nCurrent)
113 if(!m_pDatabase || !m_pModelTree || !m_pPara)
return;
115 m_pModelTree->clear();
116 m_folderItems.clear();
119 m_pModelTree->setHorizontalHeaderLabels(QStringList() << tr(
"Title"));
121 QStandardItem* pCurrentItem =
nullptr;
123 QList<BookmarkItem> folders = m_pDatabase->getAllFolders();
126 QStandardItem *rootItem = m_pModelTree->invisibleRootItem();
129 nCurrent = m_pPara->GetBookmarkCurrentFolder();
130 auto item = m_pDatabase->getBookmarkByUrl(m_Url.toString());
131 if(!item.isEmpty()) {
132 nCurrent = item[0].folderId;
133 ui->pbDelete->setVisible(
true);
134 ui->pbDelete->setText(tr(
"Delete %1 bookmarks").arg(item.count()));
139 for (
const auto &folder : folders) {
140 if (folder.folderId == 0) {
141 QStandardItem *pFolderItem =
new QStandardItem(folder.getIcon(), folder.title);
142 if(!pFolderItem)
continue;
143 pFolderItem->setData(folder.id, (
int)Role::ID);
144 pFolderItem->setData(BookmarkType_Folder, (
int)Role::Type);
145 rootItem->appendRow(pFolderItem);
146 m_folderItems[folder.id] = pFolderItem;
147 if(nCurrent == folder.id)
148 pCurrentItem = pFolderItem;
152 auto it = m_folderItems.find(folder.folderId);
153 if(m_folderItems.end() == it) {
154 qWarning(log) <<
"The parent of folder is not find:" << folder.folderId;
157 QStandardItem *pFolderItem =
new QStandardItem(folder.getIcon(), folder.title);
158 if(!pFolderItem)
continue;
159 pFolderItem->setData(folder.id, (
int)Role::ID);
160 pFolderItem->setData(BookmarkType_Folder, (
int)Role::Type);
161 (*it)->appendRow(pFolderItem);
162 m_folderItems[folder.id] = pFolderItem;
163 if(nCurrent == folder.id)
164 pCurrentItem = pFolderItem;
169 auto index = m_pModelTree->indexFromItem(pCurrentItem);
170 ui->tvFolder->setCurrentIndex(index);
173 ui->tvFolder->expandAll();
176void CFrmAddBookmark::on_pbNewFolder_clicked()
178 auto index = ui->tvFolder->currentIndex();
179 if(!index.isValid())
return;
180 QString szParent = index.data().toString();
181 int parentId = index.data((
int)Role::ID).toInt();
182 QString szFolder = QInputDialog::getText(
183 this, tr(
"New folder:"), tr(
"Create new folder in folder \"%1\"").arg(szParent));
184 if(szFolder.isEmpty())
return;
185 m_pDatabase->addFolder(szFolder, parentId);
188void CFrmAddBookmark::onCustomContextMenu(
const QPoint &pos)
190 QModelIndex index = ui->tvFolder->indexAt(pos);
191 if (!index.isValid())
return;
195 menu.addAction(QIcon::fromTheme(
"folder-new"), tr(
"Add folder"),
196 this, &CFrmAddBookmark::on_pbNewFolder_clicked);
198 menu.exec(ui->tvFolder->viewport()->mapToGlobal(pos));