src/eric7/HelpViewer/HelpBookmarksWidget.py

Thu, 07 Jul 2022 11:23:56 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 07 Jul 2022 11:23:56 +0200
branch
eric7
changeset 9209
b99e7fd55fd3
parent 8902
eric7/HelpViewer/HelpBookmarksWidget.py@ba9b8c6e4928
child 9221
bf71ee032bb4
permissions
-rw-r--r--

Reorganized the project structure to use the source layout in order to support up-to-date build systems with "pyproject.toml".

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
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
6 """
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
7 Module implementing a widget showing the list of bookmarks.
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
8 """
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
9
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import contextlib
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
11 import datetime
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import json
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
13 import os
8900
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 from PyQt6.QtCore import pyqtSignal, pyqtSlot, Qt, QPoint, QUrl
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from PyQt6.QtGui import QClipboard, QGuiApplication
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from PyQt6.QtWidgets import (
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
18 QAbstractItemView, QApplication, QDialog, QListWidget, QListWidgetItem,
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
19 QMenu
8900
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
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
22 from EricWidgets import EricFileDialog, EricMessageBox
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
23
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 import Preferences
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 from .HelpBookmarkPropertiesDialog import HelpBookmarkPropertiesDialog
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
28
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 class HelpBookmarksWidget(QListWidget):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 Class implementing a widget showing the list of bookmarks.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @signal escapePressed() emitted when the ESC key was pressed
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @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
35 @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
36 @signal newBackgroundTab(QUrl, str) emitted to open an entry in a
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 new background tab
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 escapePressed = pyqtSignal()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 openUrl = pyqtSignal(QUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 newTab = pyqtSignal(QUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 newBackgroundTab = pyqtSignal(QUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 UrlRole = Qt.ItemDataRole.UserRole + 1
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 def __init__(self, parent=None):
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 Constructor
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @param parent reference to the parent widget (defaults to None)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 @type QWidget (optional)
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 super().__init__(parent)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.setObjectName("HelpBookmarksWidget")
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.__helpViewer = parent
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.setAlternatingRowColors(True)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.setSelectionMode(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 QAbstractItemView.SelectionMode.ExtendedSelection)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.setSortingEnabled(True)
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 self.setContextMenuPolicy(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 Qt.ContextMenuPolicy.CustomContextMenu)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 self.customContextMenuRequested.connect(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 self.__showContextMenu)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.__bookmarks = []
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.__loadBookmarks()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.itemDoubleClicked.connect(self.__bookmarkActivated)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 @pyqtSlot(QPoint)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 def __showContextMenu(self, point):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 Private slot to handle the customContextMenuRequested signal of
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 the viewlist.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 @param point position to open the menu at
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 @type QPoint
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 selectedItemsCount = len(self.selectedItems())
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 if selectedItemsCount == 0:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 # background menu
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.__showBackgroundMenu(point)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 elif selectedItemsCount == 1:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 # single bookmark menu
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 self.__showBookmarkContextMenu(point)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 else:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 # multiple selected bookmarks
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 self.__showBookmarksContextMenu(point)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 @pyqtSlot(QPoint)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 def __showBackgroundMenu(self, point):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 Private slot to show the background menu (i.e. no selection).
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 @param point position to open the menu at
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 @type QPoint
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 menu = QMenu()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 openBookmarks = menu.addAction(self.tr("Open All Bookmarks"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 newBookmark = menu.addAction(self.tr("New Bookmark"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 addBookmark = menu.addAction(self.tr("Bookmark Page"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 menu.addSeparator()
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
107 deleteBookmarks = menu.addAction(self.tr("Delete All Bookmarks"))
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
108 menu.addSeparator()
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
109 exportBookmarks = menu.addAction(self.tr("Export All Bookmarks"))
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
110 importBookmarks = menu.addAction(self.tr("Import Bookmarks"))
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 act = menu.exec(self.mapToGlobal(point))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 if act == openBookmarks:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 self.__openBookmarks(selected=False)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 elif act == newBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 self.__newBookmark()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 elif act == addBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 self.__bookmarkCurrentPage()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 elif act == deleteBookmarks:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 self.__deleteBookmarks([
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 self.item(row) for row in range(self.count())
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 ])
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
123 elif act == exportBookmarks:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
124 self.__exportBookmarks(selected=False)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
125 elif act == importBookmarks:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
126 self.__importBookmarks()
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 @pyqtSlot(QPoint)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 def __showBookmarkContextMenu(self, point):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 Private slot to show the context menu for a bookmark.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 @param point position to open the menu at
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 @type QPoint
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 itm = self.selectedItems()[0]
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 url = itm.data(self.UrlRole)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 validUrl = (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 url is not None and not url.isEmpty() and url.isValid()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 )
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 menu = QMenu()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 curPage = menu.addAction(self.tr("Open Link"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 curPage.setEnabled(validUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 newPage = menu.addAction(self.tr("Open Link in New Page"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 newPage.setEnabled(validUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 newBackgroundPage = menu.addAction(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 self.tr("Open Link in Background Page"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 newBackgroundPage.setEnabled(validUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 copyUrl = menu.addAction(self.tr("Copy URL to Clipboard"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 copyUrl.setEnabled(validUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 newBookmark = menu.addAction(self.tr("New Bookmark"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 addBookmark = menu.addAction(self.tr("Bookmark Page"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 editBookmark = menu.addAction(self.tr("Edit Bookmark"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 deleteBookmark = menu.addAction(self.tr("Delete Bookmark"))
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
160 menu.addSeparator()
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
161 exportBookmarks = menu.addAction(self.tr("Export All Bookmarks"))
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
162 importBookmarks = menu.addAction(self.tr("Import Bookmarks"))
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 act = menu.exec(self.mapToGlobal(point))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 if act == curPage:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 self.openUrl.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 elif act == newPage:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 self.newTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 elif act == newBackgroundPage:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 self.newBackgroundTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 elif act == copyUrl:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 # copy the URL to both clipboard areas
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 QGuiApplication.clipboard().setText(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 url.toString(), QClipboard.Mode.Clipboard)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 QGuiApplication.clipboard().setText(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 url.toString(), QClipboard.Mode.Selection)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 elif act == newBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 self.__newBookmark()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 elif act == addBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 self.__bookmarkCurrentPage()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 elif act == editBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 self.__editBookmark(itm)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 elif act == deleteBookmark:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 self.__deleteBookmarks([itm])
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
185 elif act == exportBookmarks:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
186 self.__exportBookmarks(selected=False)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
187 elif act == importBookmarks:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
188 self.__importBookmarks()
8900
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 @pyqtSlot(QPoint)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 def __showBookmarksContextMenu(self, point):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 Private slot to show the context menu for multiple bookmark.
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 @param point position to open the menu at
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 @type QPoint
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 menu = QMenu()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 openBookmarks = menu.addAction(self.tr("Open Selected Bookmarks"))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 menu.addSeparator()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 deleteBookmarks = menu.addAction(self.tr("Delete Selected Bookmarks"))
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
202 menu.addSeparator()
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
203 exportBookmarks = menu.addAction(self.tr("Export Selected Bookmarks"))
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
204 exportAllBookmarks = menu.addAction(self.tr("Export All Bookmarks"))
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
205 importBookmarks = menu.addAction(self.tr("Import Bookmarks"))
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 act = menu.exec(self.mapToGlobal(point))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 if act == openBookmarks:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 self.__openBookmarks(selected=True)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 elif act == deleteBookmarks:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 self.__deleteBookmarks(self.selectedItems())
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
212 elif act == exportBookmarks:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
213 self.__exportBookmarks(selected=True)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
214 elif act == exportAllBookmarks:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
215 self.__exportBookmarks(selected=False)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
216 elif act == importBookmarks:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
217 self.__importBookmarks()
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 @pyqtSlot(str, str)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 def __addBookmark(self, title, url):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 Private slot to add a bookmark entry.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 @param title title for the bookmark
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 @type str
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 @param url URL for the bookmark
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 @type str
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 url = url.strip()
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 itm = QListWidgetItem(title, self)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 itm.setData(self.UrlRole, QUrl(url))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 itm.setToolTip(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 @pyqtSlot(str, QUrl)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 def addBookmark(self, title, url):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 Public slot to add a bookmark with given data.
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 @param title title for the bookmark
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 @type str
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 @param url URL for the bookmark
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 @type QUrl
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 dlg = HelpBookmarkPropertiesDialog(title, url.toString(), self)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 if dlg.exec() == QDialog.DialogCode.Accepted:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 title, url = dlg.getData()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 self.__addBookmark(title, url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 self.sortItems()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 self.__saveBookmarks()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 @pyqtSlot()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 def __bookmarkCurrentPage(self):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 Private slot to bookmark the current page.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 currentViewer = self.__helpViewer.currentViewer()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 title = currentViewer.pageTitle()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 url = currentViewer.link()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 self.addBookmark(title, url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 @pyqtSlot()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 def __newBookmark(self):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 Private slot to create a new bookmark.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 dlg = HelpBookmarkPropertiesDialog(parent=self)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 if dlg.exec() == QDialog.DialogCode.Accepted:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 title, url = dlg.getData()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 self.__addBookmark(title, url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 self.sortItems()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 self.__saveBookmarks()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 @pyqtSlot()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 def __editBookmark(self, itm):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 Private slot to edit a bookmark.
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 @param itm reference to the bookmark item to be edited
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 @type QListWidgetItem
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 dlg = HelpBookmarkPropertiesDialog(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 itm.text(), itm.data(self.UrlRole).toString(), self)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 if dlg.exec() == QDialog.DialogCode.Accepted:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 title, url = dlg.getData()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 itm.setText(title)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 itm.setData(self.UrlRole, QUrl(url))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 itm.setToolTip(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 self.sortItems()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 self.__saveBookmarks()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 @pyqtSlot(QListWidgetItem)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 def __bookmarkActivated(self, itm):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 Private slot handling the activation of a bookmark.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 @param itm reference to the activated item
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 @type QListWidgetItem
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 url = itm.data(self.UrlRole)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 if url and not url.isEmpty() and url.isValid():
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 buttons = QApplication.mouseButtons()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 modifiers = QApplication.keyboardModifiers()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 if buttons & Qt.MouseButton.MiddleButton:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 self.newTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 else:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 if (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 modifiers & (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 Qt.KeyboardModifier.ControlModifier |
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 Qt.KeyboardModifier.ShiftModifier
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 Qt.KeyboardModifier.ControlModifier |
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 Qt.KeyboardModifier.ShiftModifier
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 )
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 self.newBackgroundTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 elif modifiers & Qt.KeyboardModifier.ControlModifier:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 self.newTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 elif (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 modifiers & Qt.KeyboardModifier.ShiftModifier and
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 not self.__internal
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 ):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 self.newWindow.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 else:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 self.openUrl.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 def __openBookmarks(self, selected=False):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 Private method to open all or selected bookmarks.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 @param selected flag indicating to open the selected bookmarks
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 (defaults to False)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 @type bool (optional)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 items = (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 self.selectedItems()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 if selected else
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 [self.item(row) for row in range(self.count())]
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 )
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 for itm in items:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 url = itm.data(self.UrlRole)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 if url is not None and not url.isEmpty() and url.isValid():
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 self.newTab.emit(url)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 def __deleteBookmarks(self, items):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 Private method to delete the given bookmark items.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 @param items list of bookmarks to be deleted
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 @type list of QListWidgetItem
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 from UI.DeleteFilesConfirmationDialog import (
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 DeleteFilesConfirmationDialog
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 )
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 dlg = DeleteFilesConfirmationDialog(
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 self,
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 self.tr("Delete Bookmarks"),
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 self.tr("Shall these bookmarks really be deleted?"),
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 [itm.text() for itm in items]
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 if dlg.exec() == QDialog.DialogCode.Accepted:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 for itm in items:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 self.takeItem(self.row(itm))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 del itm
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 self.__saveBookmarks()
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 def __loadBookmarks(self):
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 Private method to load the defined bookmarks.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 bookmarksStr = Preferences.getHelp("Bookmarks")
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 with contextlib.suppress(ValueError):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 bookmarks = json.loads(bookmarksStr)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 self.clear()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 for bookmark in bookmarks:
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 self.__addBookmark(bookmark["title"], bookmark["url"])
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 self.sortItems()
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 def __saveBookmarks(self):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 Private method to save the defined bookmarks.
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 """
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 bookmarks = []
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 for row in range(self.count()):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 itm = self.item(row)
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 bookmarks.append({
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 "title": itm.text(),
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 "url": itm.data(self.UrlRole).toString(),
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 })
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 Preferences.setHelp("Bookmarks", json.dumps(bookmarks))
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
395 @pyqtSlot()
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
396 def __exportBookmarks(self, selected=False):
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
397 """
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
398 Private slot to export the bookmarks into a JSON file.
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
399
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
400 @param selected flag indicating to export the selected bookmarks
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
401 (defaults to False)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
402 @type bool (optional)
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 """
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
404 filename, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
405 self,
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
406 self.tr("Export Bookmarks"),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
407 "",
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
408 self.tr("eric Bookmarks Files (*.json);;All Files (*)"),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
409 None,
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
410 EricFileDialog.DontConfirmOverwrite
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
411 )
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
412 if filename:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
413 ext = os.path.splitext(filename)[1]
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
414 if not ext:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
415 ex = selectedFilter.split("(*")[1].split(")")[0]
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
416 if ex:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
417 filename += ex
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
418
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
419 if os.path.exists(filename):
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
420 ok = EricMessageBox.yesNo(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
421 self,
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
422 self.tr("Export Bookmarks"),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
423 self.tr("""The file <b>{0}</b> already exists. Do you"""
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
424 """ want to overwrite it?""").format(filename))
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
425 if not ok:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
426 return
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
427
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
428 bookmarksDict = {
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
429 "creator": "eric7",
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
430 "version": 1,
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
431 "created": datetime.datetime.now().isoformat(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
432 sep=" ", timespec="seconds"),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
433 "bookmarks": []
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
434 }
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
435 bookmarkItems = (
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
436 self.selectedItems()
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
437 if selected else
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
438 [self.item(row) for row in range(self.count())]
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
439 )
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
440 for bookmarkItem in bookmarkItems:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
441 bookmarksDict["bookmarks"].append({
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
442 "type": "url",
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
443 "title": bookmarkItem.text(),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
444 "url": bookmarkItem.data(self.UrlRole).toString(),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
445 })
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
446
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
447 jsonStr = json.dumps(bookmarksDict, indent=2, sort_keys=True)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
448 try:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
449 with open(filename, "w") as f:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
450 f.write(jsonStr)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
451 except OSError as err:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
452 EricMessageBox.critical(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
453 self,
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
454 self.tr("Export Bookmarks"),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
455 self.tr("""<p>The bookmarks could not be exported"""
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
456 """ to <b>{0}</b>.</p><p>Reason: {1}</p>""")
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
457 .format(filename, str(err)))
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
459 @pyqtSlot()
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 def __importBookmarks(self):
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 """
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
462 Private slot to import bookmarks from a JSON file.
8900
9c153ce17d74 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 """
8902
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
464 from .HelpBookmarksImportDialog import HelpBookmarksImportDialog
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
465
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
466 dlg = HelpBookmarksImportDialog(self)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
467 if dlg.exec() == QDialog.DialogCode.Accepted:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
468 replace, filename = dlg.getData()
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
469
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
470 try:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
471 with open(filename, "r") as f:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
472 jsonStr = f.read()
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
473 bookmarks = json.loads(jsonStr)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
474 except (OSError, json.JSONDecodeError) as err:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
475 EricMessageBox.critical(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
476 self,
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
477 self.tr("Import Bookmarks"),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
478 self.tr(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
479 "<p>The bookmarks file <b>{0}</b> could not be "
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
480 "read.</p><p>Reason: {1}</p>"
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
481 ).format(filename, str(err))
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
482 )
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
483 return
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
484
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
485 if not isinstance(bookmarks, dict):
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
486 EricMessageBox.critical(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
487 self,
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
488 self.tr("Import Bookmarks"),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
489 self.tr(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
490 "The bookmarks file <b>{0}</b> has invalid contents."
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
491 ).format(filename)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
492 )
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
493 return
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
494
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
495 try:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
496 if bookmarks["creator"] != "eric7":
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
497 EricMessageBox.critical(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
498 self,
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
499 self.tr("Import Bookmarks"),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
500 self.tr(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
501 "The bookmarks file <b>{0}</b> was not created"
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
502 " with 'eric7'."
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
503 ).format(filename)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
504 )
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
505 return
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
506
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
507 if bookmarks["version"] != 1:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
508 EricMessageBox.critical(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
509 self,
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
510 self.tr("Import Bookmarks"),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
511 self.tr(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
512 "The bookmarks file <b>{0}</b> has an unsupported"
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
513 " format version."
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
514 ).format(filename)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
515 )
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
516 return
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
517
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
518 if replace:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
519 self.clear()
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
520
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
521 for bookmark in bookmarks["bookmarks"]:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
522 if bookmark["type"] == "url":
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
523 self.__addBookmark(bookmark["title"], bookmark["url"])
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
524 self.sortItems()
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
525 self.__saveBookmarks()
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
526
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
527 except KeyError:
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
528 EricMessageBox.critical(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
529 self,
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
530 self.tr("Import Bookmarks"),
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
531 self.tr(
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
532 "The bookmarks file <b>{0}</b> has invalid contents."
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
533 ).format(filename)
ba9b8c6e4928 Help Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8900
diff changeset
534 )

eric ide

mercurial