class AWebBrowser(QtGui.QMainWindow): def __init__(self, cookieJar=awb_cookiejar, downloadManager=None, appProfile=os.path.expanduser("~"), parent=None): super(AWebBrowser, self).__init__() self.defaultIcon = QtGui.QIcon() self.webViews = [] self.downloadManager = downloadManager self.cookieJar = cookieJar self.appProfile = appProfile if os.path.exists(unix_icon) and sys.platform.startswith("linux"): self.setWindowIcon(QtGui.QIcon(unix_icon)) elif os.path.exists(windows_icon) and sys.platform.startswith("win"): self.setWindowIcon(QtGui.QIcon(windows_icon)) self.closeAction = QtGui.QAction(self) self.closeAction.setShortcuts(["Ctrl+Shift+N"]) self.closeAction.triggered.connect(self.close) self.addAction(self.closeAction) self.toolBar = QtGui.QToolBar() self.toolBar.setStyleSheet("QToolBar { border: 0; }") self.toolBar.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.toolBar.setMovable(False) self.addToolBar(self.toolBar) self.backButton = QtGui.QToolButton(self) self.backButton.setText(tr("back")) self.backButton.setIcon(QtGui.QIcon().fromTheme("go-previous", QtGui.QIcon(os.path.join(app_lib, "icons", "web-back.png")))) self.toolBar.addWidget(self.backButton) self.nextButton = QtGui.QToolButton(self) self.nextButton.setText(tr("next")) self.nextButton.setIcon(QtGui.QIcon().fromTheme("go-next", QtGui.QIcon(os.path.join(app_lib, "icons", "web-next.png")))) self.toolBar.addWidget(self.nextButton) self.reloadButton = QtGui.QToolButton(self) self.reloadButton.setText(tr("reload")) self.reloadButton.setIcon(QtGui.QIcon().fromTheme("view-refresh", QtGui.QIcon(os.path.join(app_lib, "icons", "reload.png")))) self.toolBar.addWidget(self.reloadButton) self.urlEdit = RUrlBar(self.defaultIcon, self) self.toolBar.addWidget(self.urlEdit) self.focusURLEditAction = QtGui.QAction(self) self.focusURLEditAction.setShortcuts(["Ctrl+L", "Alt+D"]) self.focusURLEditAction.triggered.connect(self.urlEdit.setFocus) self.focusURLEditAction.triggered.connect(self.urlEdit.selectAll) self.addAction(self.focusURLEditAction) self.tabs = QtGui.QTabWidget(self) self.tabs.setMovable(True) self.tabs.setDocumentMode(True) self.tabs.currentChanged.connect(self.updateURLEdit) self.tabs.currentChanged.connect(self.updateTitles) self.tabs.currentChanged.connect(self.updateIcons) self.setCentralWidget(self.tabs) self.tabsToolBar = QtGui.QToolBar() self.tabsToolBar.setStyleSheet("QToolBar { border: 0; }") self.tabsToolBar.setMovable(False) self.tabsToolBar.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.tabs.setCornerWidget(self.tabsToolBar, QtCore.Qt.TopRightCorner) self.newTabAction = QtGui.QAction(self) self.newTabAction.setShortcut("Ctrl+T") self.newTabAction.setIcon(QtGui.QIcon(os.path.join(app_lib, "icons", "add-16.png"))) self.newTabAction.triggered.connect(self.newTab) self.tabsToolBar.addAction(self.newTabAction) self.addAction(self.newTabAction) self.closeTabAction = QtGui.QAction(self) self.closeTabAction.setShortcut("Ctrl+W") self.closeTabAction.setIcon(QtGui.QIcon(os.path.join(app_lib, "icons", "close.png"))) self.closeTabAction.triggered.connect(self.closeTab) self.tabsToolBar.addAction(self.closeTabAction) self.addAction(self.closeTabAction) self.newTab() self.defaultIcon = QtGui.QIcon(self.webViews[len(self.webViews) - 1].icon()) self.backButton.clicked.connect(self.back) self.nextButton.clicked.connect(self.forward) self.reloadButton.clicked.connect(self.reload) self.urlEdit.returnPressed.connect(self.updateWeb) self.backAction = QtGui.QAction(self) self.backAction.setShortcut("Alt+Left") self.backAction.triggered.connect(self.back) self.addAction(self.backAction) self.nextAction = QtGui.QAction(self) self.nextAction.setShortcut("Alt+Right") self.nextAction.triggered.connect(self.forward) self.addAction(self.nextAction) self.reloadAction = QtGui.QAction(self) self.reloadAction.setShortcuts(["F5", "Ctrl+R"]) self.reloadAction.triggered.connect(self.reload) self.addAction(self.reloadAction) self.tabs.widget(self.tabs.currentIndex()).load(QtCore.QUrl("about:blank")) self.resize(640, 480) def back(self): self.tabs.widget(self.tabs.currentIndex()).back() def forward(self): self.tabs.widget(self.tabs.currentIndex()).forward() def reload(self): self.tabs.widget(self.tabs.currentIndex()).reload() def updateWeb(self): t = unicode(self.urlEdit.text()) if not "://" in t: t = "http://" + t self.tabs.widget(self.tabs.currentIndex()).load(QtCore.QUrl(t)) def updateURLEdit(self): self.urlEdit.setText(self.tabs.widget(self.tabs.currentIndex()).url().toString()) self.updateIcons() def updateTitles(self): if unicode(self.tabs.widget(self.tabs.currentIndex()).title()) == "": self.setWindowTitle(tr('untitledPage')) else: self.setWindowTitle(self.tabs.widget(self.tabs.currentIndex()).title()) for tab in range(self.tabs.count()): t = self.tabs.widget(tab).title() if unicode(t) == "": self.tabs.setTabText(tab, tr("untitledPage")) else: if len(t) > 19: nt = "" for char in range(20): nt = nt + unicode(self.tabs.widget(tab).title())[char] nt = nt + "..." self.tabs.setTabText(tab, nt) else: self.tabs.setTabText(tab, t) def updateIcons(self): i = self.tabs.widget(self.tabs.currentIndex()).icon() if i.actualSize(QtCore.QSize(16, 16)).width() > 0 and not self.tabs.widget(self.tabs.currentIndex()).url() == QtCore.QUrl("about:blank"): self.urlEdit.setIcon(i) else: self.urlEdit.setIcon(self.defaultIcon) for tab in range(self.tabs.count()): i = self.tabs.widget(tab).icon() if i.actualSize(QtCore.QSize(16, 16)).width() > 0 and not self.tabs.widget(tab).url() == QtCore.QUrl("about:blank"): self.tabs.setTabIcon(tab, i) else: self.tabs.setTabIcon(tab, self.defaultIcon) def newTab(self): webView = RWebView(self) self.webViews.append(webView) webView.settings().setIconDatabasePath(qstring(self.appProfile)) webView.downloadManager = self.downloadManager webView.setCookieJar(self.cookieJar) webView.urlChanged.connect(self.updateURLEdit) webView.titleChanged.connect(self.updateTitles) webView.iconChanged.connect(self.updateIcons) webView.createNewTab.connect(self.newTabWithWebView) self.tabs.addTab(webView, webView.icon(), webView.title()) self.tabs.setCurrentIndex(self.tabs.count() - 1) self.updateTitles() def newTabWithWebView(self, webView): wv = webView.newWindows[len(webView.newWindows) - 1] wv.closeAction.setShortcut("") wv.urlChanged.connect(self.updateURLEdit) wv.titleChanged.connect(self.updateTitles) wv.iconChanged.connect(self.updateIcons) wv.createNewTab.connect(self.newTabWithWebView) self.tabs.addTab(wv, wv.icon(), wv.title()) self.tabs.setCurrentIndex(self.tabs.count() - 1) self.updateTitles() def closeTab(self): self.tabs.widget(self.tabs.currentIndex()).close() self.tabs.removeTab(self.tabs.currentIndex()) if self.tabs.count() < 1: self.newTab()