eric7/HelpViewer/HelpBookmarksWidget.py

Tue, 04 Jan 2022 17:13:35 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 04 Jan 2022 17:13:35 +0100
branch
eric7
changeset 8900
9c153ce17d74
child 8902
ba9b8c6e4928
permissions
-rw-r--r--

Help Viewer
- added bookmarks to the internal help viewer

8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 import contextlib
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 import json
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 from PyQt6.QtCore import pyqtSignal, pyqtSlot, Qt, QPoint, QUrl
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt6.QtGui import QClipboard, QGuiApplication
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtWidgets import (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 QAbstractItemView, QApplication, QDialog, QListWidget, QListWidgetItem, QMenu
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 )
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 import Preferences
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from .HelpBookmarkPropertiesDialog import HelpBookmarkPropertiesDialog
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 class HelpBookmarksWidget(QListWidget):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 Class implementing a widget showing the list of bookmarks.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 @signal escapePressed() emitted when the ESC key was pressed
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 @signal openUrl(QUrl, str) emitted to open an entry in the current tab
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 @signal newTab(QUrl, str) emitted to open an entry in a new tab
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 @signal newBackgroundTab(QUrl, str) emitted to open an entry in a
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 new background tab
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 escapePressed = pyqtSignal()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 openUrl = pyqtSignal(QUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 newTab = pyqtSignal(QUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 newBackgroundTab = pyqtSignal(QUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 UrlRole = Qt.ItemDataRole.UserRole + 1
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 def __init__(self, parent=None):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 Constructor
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @param parent reference to the parent widget (defaults to None)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @type QWidget (optional)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 super().__init__(parent)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.setObjectName("HelpBookmarksWidget")
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.__helpViewer = parent
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.setAlternatingRowColors(True)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.setSelectionMode(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 QAbstractItemView.SelectionMode.ExtendedSelection)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.setSortingEnabled(True)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.setContextMenuPolicy(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 Qt.ContextMenuPolicy.CustomContextMenu)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.customContextMenuRequested.connect(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.__showContextMenu)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 self.__bookmarks = []
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.__loadBookmarks()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.itemDoubleClicked.connect(self.__bookmarkActivated)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 @pyqtSlot(QPoint)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 def __showContextMenu(self, point):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 Private slot to handle the customContextMenuRequested signal of
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 the viewlist.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 @param point position to open the menu at
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 @type QPoint
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 selectedItemsCount = len(self.selectedItems())
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 if selectedItemsCount == 0:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 # background menu
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.__showBackgroundMenu(point)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 elif selectedItemsCount == 1:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 # single bookmark menu
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 self.__showBookmarkContextMenu(point)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 else:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 # multiple selected bookmarks
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.__showBookmarksContextMenu(point)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 @pyqtSlot(QPoint)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 def __showBackgroundMenu(self, point):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 Private slot to show the background menu (i.e. no selection).
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 @param point position to open the menu at
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 @type QPoint
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 menu = QMenu()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 openBookmarks = menu.addAction(self.tr("Open All Bookmarks"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 newBookmark = menu.addAction(self.tr("New Bookmark"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 addBookmark = menu.addAction(self.tr("Bookmark Page"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 deleteBookmarks = menu.addAction(self.tr("Delete All Bookmark"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 act = menu.exec(self.mapToGlobal(point))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 if act == openBookmarks:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 self.__openBookmarks(selected=False)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 elif act == newBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 self.__newBookmark()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 elif act == addBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 self.__bookmarkCurrentPage()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 elif act == deleteBookmarks:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 self.__deleteBookmarks([
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 self.item(row) for row in range(self.count())
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 ])
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 @pyqtSlot(QPoint)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 def __showBookmarkContextMenu(self, point):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 Private slot to show the context menu for a bookmark.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 @param point position to open the menu at
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 @type QPoint
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 itm = self.selectedItems()[0]
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 url = itm.data(self.UrlRole)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 validUrl = (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 url is not None and not url.isEmpty() and url.isValid()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 )
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 menu = QMenu()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 curPage = menu.addAction(self.tr("Open Link"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 curPage.setEnabled(validUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 newPage = menu.addAction(self.tr("Open Link in New Page"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 newPage.setEnabled(validUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 newBackgroundPage = menu.addAction(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 self.tr("Open Link in Background Page"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 newBackgroundPage.setEnabled(validUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 copyUrl = menu.addAction(self.tr("Copy URL to Clipboard"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 copyUrl.setEnabled(validUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 newBookmark = menu.addAction(self.tr("New Bookmark"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 addBookmark = menu.addAction(self.tr("Bookmark Page"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 editBookmark = menu.addAction(self.tr("Edit Bookmark"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 deleteBookmark = menu.addAction(self.tr("Delete Bookmark"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 act = menu.exec(self.mapToGlobal(point))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 if act == curPage:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 self.openUrl.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 elif act == newPage:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 self.newTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 elif act == newBackgroundPage:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 self.newBackgroundTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 elif act == copyUrl:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 # copy the URL to both clipboard areas
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 QGuiApplication.clipboard().setText(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 url.toString(), QClipboard.Mode.Clipboard)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 QGuiApplication.clipboard().setText(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 url.toString(), QClipboard.Mode.Selection)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 elif act == newBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 self.__newBookmark()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 elif act == addBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 self.__bookmarkCurrentPage()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 elif act == editBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 self.__editBookmark(itm)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 elif act == deleteBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 self.__deleteBookmarks([itm])
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 @pyqtSlot(QPoint)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 def __showBookmarksContextMenu(self, point):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 Private slot to show the context menu for multiple bookmark.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 @param point position to open the menu at
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 @type QPoint
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 menu = QMenu()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 openBookmarks = menu.addAction(self.tr("Open Selected Bookmarks"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 deleteBookmarks = menu.addAction(self.tr("Delete Selected Bookmarks"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 act = menu.exec(self.mapToGlobal(point))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 if act == openBookmarks:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 self.__openBookmarks(selected=True)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 elif act == deleteBookmarks:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 self.__deleteBookmarks(self.selectedItems())
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 @pyqtSlot(str, str)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 def __addBookmark(self, title, url):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 Private slot to add a bookmark entry.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 @param title title for the bookmark
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 @type str
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 @param url URL for the bookmark
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 @type str
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 url = url.strip()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 itm = QListWidgetItem(title, self)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 itm.setData(self.UrlRole, QUrl(url))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 itm.setToolTip(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 @pyqtSlot(str, QUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 def addBookmark(self, title, url):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 Public slot to add a bookmark with given data.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 @param title title for the bookmark
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 @type str
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 @param url URL for the bookmark
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 @type QUrl
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 dlg = HelpBookmarkPropertiesDialog(title, url.toString(), self)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 if dlg.exec() == QDialog.DialogCode.Accepted:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 title, url = dlg.getData()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 self.__addBookmark(title, url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 self.sortItems()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 self.__saveBookmarks()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 @pyqtSlot()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 def __bookmarkCurrentPage(self):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 Private slot to bookmark the current page.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 currentViewer = self.__helpViewer.currentViewer()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 title = currentViewer.pageTitle()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 url = currentViewer.link()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 self.addBookmark(title, url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 @pyqtSlot()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 def __newBookmark(self):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 Private slot to create a new bookmark.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 dlg = HelpBookmarkPropertiesDialog(parent=self)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 if dlg.exec() == QDialog.DialogCode.Accepted:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 title, url = dlg.getData()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 self.__addBookmark(title, url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 self.sortItems()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 self.__saveBookmarks()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 @pyqtSlot()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 def __editBookmark(self, itm):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 Private slot to edit a bookmark.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 @param itm reference to the bookmark item to be edited
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 @type QListWidgetItem
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 dlg = HelpBookmarkPropertiesDialog(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 itm.text(), itm.data(self.UrlRole).toString(), self)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 if dlg.exec() == QDialog.DialogCode.Accepted:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 title, url = dlg.getData()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 itm.setText(title)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 itm.setData(self.UrlRole, QUrl(url))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 itm.setToolTip(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 self.sortItems()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 self.__saveBookmarks()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 @pyqtSlot(QListWidgetItem)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 def __bookmarkActivated(self, itm):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 Private slot handling the activation of a bookmark.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 @param itm reference to the activated item
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 @type QListWidgetItem
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 url = itm.data(self.UrlRole)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 if url and not url.isEmpty() and url.isValid():
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 buttons = QApplication.mouseButtons()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 modifiers = QApplication.keyboardModifiers()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 if buttons & Qt.MouseButton.MiddleButton:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 self.newTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 else:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 if (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 modifiers & (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 Qt.KeyboardModifier.ControlModifier |
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 Qt.KeyboardModifier.ShiftModifier
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 ) == (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 Qt.KeyboardModifier.ControlModifier |
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 Qt.KeyboardModifier.ShiftModifier
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 )
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 ):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 self.newBackgroundTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 elif modifiers & Qt.KeyboardModifier.ControlModifier:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 self.newTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 elif (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 modifiers & Qt.KeyboardModifier.ShiftModifier and
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 not self.__internal
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 ):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 self.newWindow.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 else:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 self.openUrl.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 def __openBookmarks(self, selected=False):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 Private method to open all or selected bookmarks.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 @param selected flag indicating to open the selected bookmarks
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 (defaults to False)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 @type bool (optional)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 items = (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 self.selectedItems()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 if selected else
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 [self.item(row) for row in range(self.count())]
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 )
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 for itm in items:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 url = itm.data(self.UrlRole)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 if url is not None and not url.isEmpty() and url.isValid():
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 self.newTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 def __deleteBookmarks(self, items):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 Private method to delete the given bookmark items.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 @param items list of bookmarks to be deleted
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 @type list of QListWidgetItem
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 from UI.DeleteFilesConfirmationDialog import (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 DeleteFilesConfirmationDialog
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 )
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 dlg = DeleteFilesConfirmationDialog(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 self,
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 self.tr("Delete Bookmarks"),
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 self.tr("Shall these bookmarks really be deleted?"),
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 [itm.text() for itm in items]
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 )
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 if dlg.exec() == QDialog.DialogCode.Accepted:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 for itm in items:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 self.takeItem(self.row(itm))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 del itm
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 self.__saveBookmarks()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 def __loadBookmarks(self):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 Private method to load the defined bookmarks.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 bookmarksStr = Preferences.getHelp("Bookmarks")
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 with contextlib.suppress(ValueError):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 bookmarks = json.loads(bookmarksStr)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 self.clear()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 for bookmark in bookmarks:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 self.__addBookmark(bookmark["title"], bookmark["url"])
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 self.sortItems()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 def __saveBookmarks(self):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 Private method to save the defined bookmarks.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 bookmarks = []
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 for row in range(self.count()):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 itm = self.item(row)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 bookmarks.append({
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 "title": itm.text(),
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 "url": itm.data(self.UrlRole).toString(),
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 })
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 Preferences.setHelp("Bookmarks", json.dumps(bookmarks))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 def __exportBookmarks(self):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 Private method to export the bookmarks into a JSON file.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 # TODO: not yet implemented
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 def __importBookmarks(self):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 Private method to import bookmarks from a JSON file.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 # TODO: not yet implemented
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 # 1. read file
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 # 2. check, if exported from eric and compatible format version
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 # 3. process each entry

eric ide

mercurial