4#include <QLoggingCategory>
6#include "FrmAddBookmark.h"
7#include "ui_FrmAddBookmark.h"
9static Q_LOGGING_CATEGORY(log,
"WebBrowser.Bookmark.Add")
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 resize(m_pPara->GetWindowSize());
34 ui->cbSave->setChecked(m_pPara->GetBookmarkShowEditor());
37 ui->tvFolder->setHeaderHidden(
true);
38 ui->tvFolder->setContextMenuPolicy(Qt::CustomContextMenu);
39 ui->tvFolder->setEditTriggers(QAbstractItemView::NoEditTriggers);
40 m_pModelTree =
new QStandardItemModel(ui->tvFolder);
42 ui->tvFolder->setModel(m_pModelTree);
43 m_pModelTree->setColumnCount(1);
47 check = connect(ui->tvFolder, SIGNAL(customContextMenuRequested(QPoint)),
48 this, SLOT(onCustomContextMenu(QPoint)));
50 check = connect(m_pDatabase, &CBookmarkDatabase::folderAdded,
52 loadFolder(folder.id);
58CFrmAddBookmark::~CFrmAddBookmark()
63void CFrmAddBookmark::on_pbAdd_clicked()
65 if(!m_pPara || !m_pDatabase)
return;
67 m_pPara->SetBookmarkShowEditor(ui->cbSave->isChecked());
69 auto index = ui->tvFolder->currentIndex();
71 int id = index.data((
int)Role::ID).toInt();
72 m_pPara->SetBookmarkCurrentFolder(
id);
73 auto items = m_pDatabase->getBookmarkByUrl(m_Url.toString());
74 if(!items.isEmpty()) {
76 item.title = ui->leTitle->text();
77 item.url = m_Url.toString();
79 m_pDatabase->updateBookmark(item);
82 item.title = ui->leTitle->text();
83 item.url = m_Url.toString();
85 item.createdTime = QDateTime::currentDateTime();
86 item.lastVisitTime = item.createdTime;
87 item.modifiedTime = item.createdTime;
88 int id = m_pDatabase->addBookmark(item);
97void CFrmAddBookmark::on_pbCancel_clicked()
102void CFrmAddBookmark::on_pbDelete_clicked()
104 auto items = m_pDatabase->getBookmarkByUrl(m_Url.toString());
105 m_pDatabase->deleteBookmark(items);
106 ui->pbDelete->setVisible(
false);
110void CFrmAddBookmark::loadFolder(
int nCurrent)
112 if(!m_pDatabase || !m_pModelTree || !m_pPara)
return;
114 m_pModelTree->clear();
115 m_folderItems.clear();
118 m_pModelTree->setHorizontalHeaderLabels(QStringList() << tr(
"Title"));
120 QStandardItem* pCurrentItem =
nullptr;
122 QList<BookmarkItem> folders = m_pDatabase->getAllFolders();
125 QStandardItem *rootItem = m_pModelTree->invisibleRootItem();
128 nCurrent = m_pPara->GetBookmarkCurrentFolder();
129 auto item = m_pDatabase->getBookmarkByUrl(m_Url.toString());
130 if(!item.isEmpty()) {
131 nCurrent = item[0].folderId;
132 ui->pbDelete->setVisible(
true);
133 ui->pbDelete->setText(tr(
"Delete %1 bookmarks").arg(item.count()));
138 for (
const auto &folder : folders) {
139 if (folder.folderId == 0) {
140 QStandardItem *pFolderItem =
new QStandardItem(folder.getIcon(), folder.title);
141 if(!pFolderItem)
continue;
142 pFolderItem->setData(folder.id, (
int)Role::ID);
143 pFolderItem->setData(BookmarkType_Folder, (
int)Role::Type);
144 rootItem->appendRow(pFolderItem);
145 m_folderItems[folder.id] = pFolderItem;
146 if(nCurrent == folder.id)
147 pCurrentItem = pFolderItem;
151 auto it = m_folderItems.find(folder.folderId);
152 if(m_folderItems.end() == it) {
153 qWarning(log) <<
"The parent of folder is not find:" << folder.folderId;
156 QStandardItem *pFolderItem =
new QStandardItem(folder.getIcon(), folder.title);
157 if(!pFolderItem)
continue;
158 pFolderItem->setData(folder.id, (
int)Role::ID);
159 pFolderItem->setData(BookmarkType_Folder, (
int)Role::Type);
160 (*it)->appendRow(pFolderItem);
161 m_folderItems[folder.id] = pFolderItem;
162 if(nCurrent == folder.id)
163 pCurrentItem = pFolderItem;
168 auto index = m_pModelTree->indexFromItem(pCurrentItem);
169 ui->tvFolder->setCurrentIndex(index);
172 ui->tvFolder->expandAll();
175void CFrmAddBookmark::on_pbNewFolder_clicked()
177 auto index = ui->tvFolder->currentIndex();
178 if(!index.isValid())
return;
179 QString szParent = index.data().toString();
180 int parentId = index.data((
int)Role::ID).toInt();
181 QString szFolder = QInputDialog::getText(
182 this, tr(
"New folder:"), tr(
"Create new folder in folder \"%1\"").arg(szParent));
183 if(szFolder.isEmpty())
return;
184 m_pDatabase->addFolder(szFolder, parentId);
187void CFrmAddBookmark::onCustomContextMenu(
const QPoint &pos)
189 QModelIndex index = ui->tvFolder->indexAt(pos);
190 if (!index.isValid())
return;
194 menu.addAction(QIcon::fromTheme(
"folder-new"), tr(
"Add folder"),
195 this, &CFrmAddBookmark::on_pbNewFolder_clicked);
197 menu.exec(ui->tvFolder->viewport()->mapToGlobal(pos));