Compare commits
1 Commits
swissbrows
...
swisssurfe
Author | SHA1 | Date | |
---|---|---|---|
|
18c790eeb1 |
2
README
@@ -8,4 +8,4 @@ Start e.g. with:
|
||||
|
||||
SWISSSIGNER='java -Xmx256M -Dorg.jpedal.jai=true -Dswing.aatext=true -Dch.abacus.swisssigner.incamail.certlogin=false -splash:swisssigner-splash.png -Dch.abacus.pkcs11.configuration=swisssigner-pkcs11.cfg -Duser.language=de -cp /home/marc/downloads/swisssigner/swisssigner.jar:/home/marc/downloads/swisssigner/bc.jar:bcmail.jar:/home/marc/downloads/swisssigner/bcpg.jar:/home/marc/downloads/swisssigner/bctsp.jar:/home/marc/downloads/swisssigner/exml.jar:/home/marc/downloads/swisssigner/itext.jar:/home/marc/downloads/swisssigner/jai_codec.jar:/home/marc/downloads/swisssigner/jai_core.jar:/home/marc/downloads/swisssigner/jai_imageio.jar:/home/marc/downloads/swisssigner/jdic.jar:/home/marc/downloads/swisssigner/jdic_native.jar:/home/marc/downloads/swisssigner/jdic_stub_unix.jar:/home/marc/downloads/swisssigner/jpedal.jar: ch.abacus.hotdog.SwissSigner locale=de document=%1 browser_bin=firefox keystores=pkcs11'
|
||||
|
||||
src/swissbrowser --mime application/pdf pdf "$SWISSSIGNER" --mime application/x-java-jnlp-file jnlp "javaws %1" http://swisssign.com/de/swisssign-support/ss-faq/7-server-certificates/34-how-to-apache-konfiguration-mit-ssl-zertifikaten
|
||||
src/swisssurfer --mime application/pdf pdf "$SWISSSIGNER" --mime application/x-java-jnlp-file jnlp "javaws %1" http://swisssign.com/de/swisssign-support/ss-faq/7-server-certificates/34-how-to-apache-konfiguration-mit-ssl-zertifikaten
|
||||
|
40
configure.in
@@ -17,10 +17,10 @@ dnl refers to ${prefix}. Thus we have to use `eval' twice.
|
||||
|
||||
AC_INIT([README])
|
||||
SRC_DIR=src
|
||||
TST_DIR=test
|
||||
TST_DIR=
|
||||
DOC_DIR=doc
|
||||
|
||||
m4_define(x_packagename, swissbrowser)
|
||||
m4_define(x_packagename, swisssurfer)
|
||||
m4_define(x_major, 1)
|
||||
m4_define(x_minor, 2)
|
||||
|
||||
@@ -43,13 +43,8 @@ AM_INIT_AUTOMAKE($PACKAGENAME, $MAJOR.$MINOR.$LEAST, [marc.waeckerlin@tech.swiss
|
||||
|
||||
# files to create
|
||||
AC_CONFIG_FILES([makefile ${PACKAGENAME}.spec src/version.cxx
|
||||
test/makefile test/qmake.pro
|
||||
src/makefile
|
||||
src/qmake.pro src/languages.qrc
|
||||
src/qbrowserlib/makefile
|
||||
src/qbrowserlib/qmake.pro src/qbrowserlib/languages.qrc
|
||||
src/designer/makefile
|
||||
src/designer/qmake.pro src/designer/resources.qrc
|
||||
doc/doxyfile doc/makefile
|
||||
debian/changelog])
|
||||
|
||||
@@ -112,37 +107,6 @@ AC_ARG_ENABLE(dot,
|
||||
test "$enableval" = "yes" && HAVE_DOT="YES" || HAVE_DOT="NO";
|
||||
AM_PATH_CPPUNIT([1.0.0], [have_cppunit="yes"], [have_cppunit="no"])
|
||||
|
||||
# Qt Designer Plugin Dir
|
||||
AC_MSG_CHECKING([QT_INSTALL_PLUGINS])
|
||||
AC_ARG_WITH([qt-install-plugins],
|
||||
[AS_HELP_STRING([--with-qt-install-plugins=DIR],
|
||||
[Qt designer plugin directory])],
|
||||
QT_INSTALL_PLUGINS=$withval)
|
||||
# Check that QTDIR is defined or that --with-qtdir given
|
||||
if test x"$QT_INSTALL_PLUGINS" = x ; then
|
||||
# some usual Qt-locations
|
||||
QT_SEARCH="/usr/share/qt4 /usr/lib/qt4 /usr/lib/qt /usr/X11R6 /opt/local/lib/qt4 /opt/local/share/qt4 /usr/local/Trolltech/Qt-4.0.0 /usr/local/Trolltech/Qt-4.0.1 /usr/local/Trolltech/Qt-4.1.0 /usr/local/Trolltech/Qt-4.2.0 /usr/local/Trolltech/Qt-4.2.1 /usr/local/Trolltech/Qt-4.2.2"
|
||||
for p in ${QT_SEARCH}; do
|
||||
if test -d ${p}/plugins/designer; then
|
||||
QT_INSTALL_PLUGINS=${p}/plugins/designer
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test x"$QT_INSTALL_PLUGINS" = x ; then
|
||||
for p in ${QT_SEARCH}; do
|
||||
if test -d ${p}/plugins; then
|
||||
QT_INSTALL_PLUGINS=${p}/plugins/designer
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
if test x"$QT_INSTALL_PLUGINS" = x ; then
|
||||
AC_MSG_ERROR([*** --with-qt-install-plugins or QT_INSTALL_PLUGINS must be given])
|
||||
fi
|
||||
AC_MSG_RESULT([$QT_INSTALL_PLUGINS])
|
||||
AC_SUBST(QT_INSTALL_PLUGINS)
|
||||
|
||||
MINGW32=no
|
||||
MAC=no
|
||||
case $host_os in
|
||||
|
2
debian/changelog.in
vendored
@@ -1,5 +1,5 @@
|
||||
@PACKAGE@ (@VERSION@-1) unstable; urgency=low
|
||||
|
||||
* see https://dev.swisssign.com/projects/swissbrowser for changes
|
||||
* see https://dev.swisssign.com/projects/swisssurfer for changes
|
||||
|
||||
-- Marc Wäckerlin (SwissSign AG) <marc.waeckerlin@tech.swisssign.com> Wed, 07 Apr 2010 10:23:02 +0200
|
||||
|
20
debian/control
vendored
@@ -1,27 +1,21 @@
|
||||
Source: swissbrowser
|
||||
Source: swisssurfer
|
||||
Section: web
|
||||
Priority: extra
|
||||
Maintainer: Marc Wäckerlin (SwissSign AG) <marc.waeckerlin@tech.swisssign.com>
|
||||
Build-Depends: debhelper (>= 7), autotools-dev
|
||||
Standards-Version: 3.8.1
|
||||
Homepage: https://dev.swisssign.com/projects/swissbrowser
|
||||
Homepage: https://dev.swisssign.com/projects/swisssurfer
|
||||
|
||||
Package: swissbrowser-dev
|
||||
Provides: swisssurfer-dev
|
||||
Conflicts: swisssurfer-dev
|
||||
Replaces: swisssurfer-dev
|
||||
Package: swisssurfer-dev
|
||||
Section: devel
|
||||
Architecture: any
|
||||
Depends: swissbrowser (= ${binary:Version})
|
||||
Description: swissbrowser
|
||||
Depends: swisssurfer (= ${binary:Version})
|
||||
Description: swisssurfer
|
||||
.
|
||||
|
||||
Package: swissbrowser
|
||||
Provides: swisssurfer
|
||||
Conflicts: swisssurfer
|
||||
Replaces: swisssurfer
|
||||
Package: swisssurfer
|
||||
Section: web
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: swissbrowser
|
||||
Description: swisssurfer
|
||||
.
|
||||
|
2
debian/copyright
vendored
@@ -1,7 +1,7 @@
|
||||
This package was debianized by Marc Wäckerlin (SwissSign AG) <marc.waeckerlin@tech.swisssign.com> on
|
||||
Wed, 07 Apr 2010 10:23:02 +0200.
|
||||
|
||||
It was downloaded from https://dev.swisssign.com/projects/swissbrowser
|
||||
It was downloaded from https://dev.swisssign.com/projects/swisssurfer
|
||||
|
||||
Upstream Author(s):
|
||||
|
||||
|
10
debian/menu
vendored
@@ -1,8 +1,8 @@
|
||||
?package(swissbrowser):\
|
||||
?package(swisssurfer):\
|
||||
needs="X11"\
|
||||
hints="Lightweight,Fast,Small,Security,SSL,Cryptoki,Certificate"\
|
||||
section="Applications/Network/Web Browsing"\
|
||||
title="SwissBrowser"\
|
||||
longtitle="SwissBrowser Internet Browser"\
|
||||
command="/usr/bin/swissbrowser"\
|
||||
icon="/usr/share/swissbrowser/swissbrowser.xpm"
|
||||
title="SwissSurfer"\
|
||||
longtitle="SwissSurfer Internet Browser"\
|
||||
command="/usr/bin/swisssurfer"\
|
||||
icon="/usr/share/swisssurfer/swisssurfer.xpm"
|
||||
|
4
debian/rules
vendored
@@ -30,7 +30,7 @@ endif
|
||||
ifneq "$(wildcard /usr/share/misc/config.guess)" ""
|
||||
cp -f /usr/share/misc/config.guess config.guess
|
||||
endif
|
||||
CPPFLAGS=-DALLOW_SSL_0_8 ./configure $(CROSS) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info --with-qt-install-plugins=\$${prefix}/share/qt4/plugins/designer CFLAGS="$(CFLAGS)"
|
||||
./configure $(CROSS) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info CFLAGS="$(CFLAGS)"
|
||||
|
||||
|
||||
build: build-stamp
|
||||
@@ -84,7 +84,7 @@ binary-arch: install
|
||||
dh_compress
|
||||
dh_fixperms
|
||||
# dh_perl
|
||||
dh_makeshlibs
|
||||
# dh_makeshlibs
|
||||
dh_installdeb
|
||||
dh_shlibdeps
|
||||
dh_gencontrol
|
||||
|
3
debian/swissbrowser-dev.dirs
vendored
@@ -1,3 +0,0 @@
|
||||
usr/lib
|
||||
usr/include
|
||||
usr/share
|
8
debian/swissbrowser-dev.install
vendored
@@ -1,8 +0,0 @@
|
||||
usr/share/doc/swissbrowser/html
|
||||
usr/include/*
|
||||
#usr/lib/lib*.a
|
||||
usr/lib/lib*.so
|
||||
usr/share/qt4
|
||||
#usr/lib/*.la
|
||||
#usr/lib/pkgconfig
|
||||
#usr/share/pkgconfig
|
11
debian/swissbrowser.install
vendored
@@ -1,11 +0,0 @@
|
||||
usr/bin/swissbrowser
|
||||
usr/share/applications/swissbrowser.desktop
|
||||
usr/share/swissbrowser/swissbrowser.xpm
|
||||
usr/share/swissbrowser/swissbrowser.png
|
||||
usr/share/doc/swissbrowser/AUTHORS
|
||||
usr/share/doc/swissbrowser/NEWS
|
||||
usr/share/doc/swissbrowser/README
|
||||
usr/share/doc/swissbrowser/COPYING
|
||||
usr/share/doc/swissbrowser/INSTALL
|
||||
usr/share/doc/swissbrowser/ChangeLog
|
||||
usr/lib/lib*.so.*
|
3
debian/swisssurfer-dev.dirs
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
#usr/lib
|
||||
#usr/include
|
||||
usr/share
|
7
debian/swisssurfer-dev.install
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
usr/share/doc/swisssurfer/html
|
||||
#usr/include/*
|
||||
#usr/lib/lib*.a
|
||||
#usr/lib/lib*.so
|
||||
#usr/lib/*.la
|
||||
#usr/lib/pkgconfig
|
||||
#usr/share/pkgconfig
|
@@ -1,3 +1,3 @@
|
||||
usr/lib
|
||||
#usr/lib
|
||||
usr/bin
|
||||
usr/share
|
@@ -1,7 +1,7 @@
|
||||
Document: swissbrowser
|
||||
Title: Debian swissbrowser Manual
|
||||
Document: swisssurfer
|
||||
Title: Debian swisssurfer Manual
|
||||
Author: <insert document author here>
|
||||
Abstract: This manual describes what swissbrowser is
|
||||
Abstract: This manual describes what swisssurfer is
|
||||
and how it can be used to
|
||||
manage online manuals on Debian systems.
|
||||
Section: unknown
|
11
debian/swisssurfer.install
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
usr/bin/swisssurfer
|
||||
usr/share/applications/swisssurfer.desktop
|
||||
usr/share/swisssurfer/swisssurfer.xpm
|
||||
usr/share/swisssurfer/swisssurfer.png
|
||||
usr/share/doc/swisssurfer/AUTHORS
|
||||
usr/share/doc/swisssurfer/NEWS
|
||||
usr/share/doc/swisssurfer/README
|
||||
usr/share/doc/swisssurfer/COPYING
|
||||
usr/share/doc/swisssurfer/INSTALL
|
||||
usr/share/doc/swisssurfer/ChangeLog
|
||||
#usr/lib/lib*.so.*
|
@@ -640,7 +640,7 @@ FILE_PATTERNS = *.[ch]xx \
|
||||
# should be searched for input files as well. Possible values are YES and NO.
|
||||
# If left blank NO is used.
|
||||
|
||||
RECURSIVE = YES
|
||||
RECURSIVE = NO
|
||||
|
||||
# The EXCLUDE tag can be used to specify files and/or directories that should
|
||||
# excluded from the INPUT source files. This way you can easily exclude a
|
||||
|
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 279 KiB |
@@ -5,17 +5,17 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>swissbrowser</string>
|
||||
<string>swisssurfer</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>SwissSign, (c) 2011</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>swissbrowser.icns</string>
|
||||
<string>swisssurfer.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.swisssign.swissbrowser</string>
|
||||
<string>com.swisssign.swisssurfer</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>SwissBrowser</string>
|
||||
<string>SwissSurfer</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
|
818
src/browser.hxx
@@ -8,50 +8,49 @@
|
||||
#ifndef BROWSER_HXX
|
||||
#define BROWSER_HXX
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <smartcardauth.hxx>
|
||||
#include <logincertificate.hxx>
|
||||
#include <errorlog.hxx>
|
||||
#include <downloadmanager.hxx>
|
||||
#include <authentication.hxx>
|
||||
#include <editbookmarks.hxx>
|
||||
#include <proxyface/proxy.hxx>
|
||||
#include <sslclientnetworkmanager.hxx>
|
||||
|
||||
#include <ui_browser.h>
|
||||
|
||||
#include <qbrowserlib/buttonlineedit.hxx>
|
||||
#include <qbrowserlib/filestorage.hxx>
|
||||
#include <qbrowserlib/swisswebview.hxx>
|
||||
#include <qbrowserlib/settings.hxx>
|
||||
#include <qbrowserlib/executor.hxx>
|
||||
|
||||
#include <QtGui/QMainWindow>
|
||||
#include <QtGui/QLineEdit>
|
||||
#include <QtGui/QProgressBar>
|
||||
#include <QtGui/QComboBox>
|
||||
#include <QtGui/QToolButton>
|
||||
#include <QtGui/QSlider>
|
||||
#include <QtGui/QMessageBox>
|
||||
#include <QtGui/QPrinter>
|
||||
#include <QtGui/QPrintDialog>
|
||||
#include <QtGui/QPrintPreviewDialog>
|
||||
#include <QtWebKit/QWebPage>
|
||||
#include <QtWebKit/QWebView>
|
||||
#include <QtWebKit/QWebFrame>
|
||||
#include <QtWebKit/QWebHistory>
|
||||
#include <QtNetwork/QNetworkReply>
|
||||
#include <QtNetwork/QSslError>
|
||||
#include <QtNetwork/QNetworkProxy>
|
||||
#include <QtCore/QProcess>
|
||||
#include <QtCore/QDir>
|
||||
#include <QtGui/QFileDialog>
|
||||
|
||||
#include <QtGui/QDesktopServices>
|
||||
#include <smartcardauth.hxx>
|
||||
#include <logincertificate.hxx>
|
||||
#include <errorlog.hxx>
|
||||
#include <downloadmanager.hxx>
|
||||
#include <authentication.hxx>
|
||||
#include <webpage.hxx>
|
||||
#include <settings.hxx>
|
||||
#include <editbookmarks.hxx>
|
||||
#include <pluginfactory.hxx>
|
||||
#include <temporaryfile.hxx>
|
||||
#include <saveorrun.hxx>
|
||||
#include <sslclientnetworkmanager.hxx>
|
||||
#include <proxyface/proxy.hxx>
|
||||
|
||||
#include <stdexcept>
|
||||
#include <cassert>
|
||||
#include <memory>
|
||||
|
||||
extern QString TMP;
|
||||
|
||||
//! @addtogroup browser
|
||||
//! @{
|
||||
#include <QtCore/QDebug>
|
||||
#ifndef LOG
|
||||
#define LOG qDebug()<<__PRETTY_FUNCTION__
|
||||
#endif
|
||||
|
||||
class Browser: public QMainWindow, protected Ui::Browser {
|
||||
|
||||
@@ -61,29 +60,21 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
|
||||
Browser(const QString& actlib, const QStringList& urls = QStringList(),
|
||||
QSettings* settings=0,
|
||||
qbrowserlib::Settings::MimeTypes mimeTypes =
|
||||
qbrowserlib::Settings::MimeTypes(),
|
||||
bool kiosk = false, bool login = true, bool quirks=true,
|
||||
QString bookmarkfile=QString()):
|
||||
Settings::MimeTypes mimeTypes = Settings::MimeTypes(),
|
||||
bool kiosk = false, bool login = true, bool quirks=true):
|
||||
_url(0), _find(new ButtonLineEdit),
|
||||
_kiosk(kiosk),
|
||||
_downloadManager(new DownloadManager),
|
||||
_kiosk(kiosk),
|
||||
_settings(mimeTypes, this, settings, !kiosk),
|
||||
_errorLog(this), _logincertificate(this),
|
||||
_proxy("http://swisssign.com", this),
|
||||
_showErrorLog(0),
|
||||
_startUrl(urls.size()),
|
||||
_quirks(quirks), _search(new ButtonLineEdit),
|
||||
_searchEngines(new QComboBox),
|
||||
_bookmarkfile(bookmarkfile),
|
||||
_executor(&_settings) {
|
||||
TRC; LOG<<urls;
|
||||
_searchEngines(new QComboBox) {
|
||||
LOG<<urls;
|
||||
_home = "about:blank";
|
||||
if (urls.size()) _home = urls.at(0);
|
||||
setupUi(this);
|
||||
actionDebugLog->setVisible(qbrowserlib::Log::DEBUG);
|
||||
actionStop->setVisible(false);
|
||||
actionReload->setVisible(false);
|
||||
show();
|
||||
try {
|
||||
_networkManager.scAuth(new SmartCardAuth(actlib, this, login));
|
||||
@@ -95,20 +86,11 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
_find->add(actionClearFind);
|
||||
_find->hide();
|
||||
statusBar()->addPermanentWidget(_progress = new QProgressBar());
|
||||
QSizePolicy sp(_progress->sizePolicy());
|
||||
sp.setHorizontalPolicy(QSizePolicy::Minimum);
|
||||
_progress->setSizePolicy(sp);
|
||||
QPushButton* btn(0);
|
||||
statusBar()->addPermanentWidget
|
||||
(btn=new QPushButton(QIcon(":/icons/16x16/butt16_09.png"), ""));
|
||||
assert(connect(btn, SIGNAL(clicked(bool)), SLOT(smaller())));
|
||||
_progress -> setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
||||
statusBar()->addPermanentWidget(new QLabel("-"));
|
||||
statusBar()->addPermanentWidget(_zoom = new QSlider(Qt::Horizontal));
|
||||
statusBar()->addPermanentWidget
|
||||
(btn=new QPushButton(QIcon(":/icons/16x16/butt16_10.png"), ""));
|
||||
assert(connect(btn, SIGNAL(clicked(bool)), SLOT(larger())));
|
||||
sp = _zoom->sizePolicy();
|
||||
sp.setHorizontalPolicy(QSizePolicy::Minimum);
|
||||
_zoom->setSizePolicy(sp);
|
||||
statusBar()->addPermanentWidget(new QLabel("+"));
|
||||
_zoom->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
||||
_zoom->setMinimum(10);
|
||||
_zoom->setMaximum(190);
|
||||
_zoom->setValue(100);
|
||||
@@ -116,24 +98,18 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
_zoom->setPageStep(10);
|
||||
_zoom->setTickPosition(QSlider::TicksAbove);
|
||||
assert(connect(_zoom, SIGNAL(valueChanged(int)), SLOT(zoom(int))));
|
||||
if (_kiosk||!_quirks) {
|
||||
if (!_quirks) {
|
||||
_toolbar->addAction(actionReload);
|
||||
_toolbar->addAction(actionStop);
|
||||
}
|
||||
if (!_kiosk) {
|
||||
QComboBox* combo(new QComboBox(_toolbar));
|
||||
_url = combo;
|
||||
QFrame* urlFrame(new QFrame);
|
||||
QHBoxLayout* layout(new QHBoxLayout);
|
||||
urlFrame->setLayout(layout);
|
||||
_toolbar->addWidget(urlFrame);
|
||||
layout->addWidget(_url);
|
||||
combo->setInsertPolicy(QComboBox::NoInsert);
|
||||
combo->setLineEdit(new ButtonLineEdit(combo));
|
||||
combo->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength);
|
||||
sp=combo->sizePolicy();
|
||||
sp.setHorizontalPolicy(QSizePolicy::Expanding);
|
||||
combo->setSizePolicy(sp);
|
||||
combo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding,
|
||||
QSizePolicy::Preferred));
|
||||
combo->setEditable(!_kiosk);
|
||||
assert(connect(combo, SIGNAL(currentIndexChanged(const QString&)),
|
||||
SLOT(load(QString))));
|
||||
@@ -144,8 +120,8 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
if (_quirks) {
|
||||
dynamic_cast<ButtonLineEdit*>(combo->lineEdit())->add
|
||||
(actionStop);
|
||||
dynamic_cast<ButtonLineEdit*>(combo->lineEdit())->add
|
||||
(actionReload);
|
||||
dynamic_cast<ButtonLineEdit*>(combo->lineEdit())->add
|
||||
(actionReload);
|
||||
}
|
||||
if (!_quirks) {
|
||||
dynamic_cast<ButtonLineEdit*>(combo->lineEdit())->add
|
||||
@@ -155,54 +131,48 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
}
|
||||
_editbookmarks =
|
||||
std::auto_ptr<EditBookmarks>(new EditBookmarks(combo, this));
|
||||
assert(connect(_editbookmarks.get(), SIGNAL(startEdit(bool)),
|
||||
actionAddBookmark, SLOT(setDisabled(bool))));
|
||||
assert(connect(_editbookmarks.get(), SIGNAL(endEdit(bool)),
|
||||
actionAddBookmark, SLOT(setEnabled(bool))));
|
||||
assert(connect(_editbookmarks.get(), SIGNAL(accepted()),
|
||||
SLOT(saveBookmarks())));
|
||||
} else {
|
||||
QLineEdit* label(new QLineEdit(_toolbar));
|
||||
_url = label;
|
||||
label->setReadOnly(true);
|
||||
label->setEnabled(false);
|
||||
_toolbar->addWidget(_url);
|
||||
}
|
||||
if (!_kiosk) {
|
||||
QFrame* searchFrame(new QFrame);
|
||||
QHBoxLayout* layout(new QHBoxLayout);
|
||||
layout->addWidget(_searchEngines);
|
||||
layout->addWidget(_search);
|
||||
searchFrame->setLayout(layout);
|
||||
_toolbar->addWidget(searchFrame);
|
||||
_search->add(actionSearch);
|
||||
_url->setSizePolicy(QSizePolicy(QSizePolicy::Expanding,
|
||||
QSizePolicy::Minimum));
|
||||
}
|
||||
_toolbar->addWidget(_url);
|
||||
QFrame* searchFrame(new QFrame);
|
||||
searchFrame->setBackgroundRole(QPalette::Base);
|
||||
searchFrame->setAutoFillBackground(true);
|
||||
QHBoxLayout* layout(new QHBoxLayout);
|
||||
layout->addWidget(_searchEngines);
|
||||
_searchEngines->setStyleSheet(tr("background-color: white",
|
||||
"search engines combobox"));
|
||||
layout->addWidget(_search);
|
||||
searchFrame->setLayout(layout);
|
||||
_toolbar->addWidget(searchFrame);
|
||||
_search->add(actionSearch);
|
||||
if (!_quirks) _search->add(actionClearSearch);
|
||||
sp=_search->sizePolicy();
|
||||
sp.setHorizontalPolicy(QSizePolicy::Minimum);
|
||||
_search->setSizePolicy(sp);
|
||||
_search->setSizePolicy(QSizePolicy(QSizePolicy::Fixed,
|
||||
QSizePolicy::Minimum));
|
||||
assert(connect(_search, SIGNAL(returnPressed()),
|
||||
SLOT(on_actionSearch_triggered())));
|
||||
if (_quirks) {
|
||||
_toolbar->setMovable(false);
|
||||
_toolbar->setFloatable(false);
|
||||
if (!_kiosk) _toolbar->addAction(actionAddBookmark);
|
||||
_toolbar->addAction(actionAddBookmark);
|
||||
_toolbar->addAction(actionHome);
|
||||
}
|
||||
assert(connect(&_errorLog, SIGNAL(reset()), SLOT(errorReset())));
|
||||
assert(connect(&_networkManager, SIGNAL(finished(QNetworkReply*)),
|
||||
SLOT(finished(QNetworkReply*))));
|
||||
assert(connect(&_networkManager, SIGNAL(created(QNetworkReply*)),
|
||||
_downloadManager.data(), SLOT(add(QNetworkReply*))));
|
||||
assert(connect(_downloadManager.data(), SIGNAL(progress(qint64, qint64)),
|
||||
&_downloadManager, SLOT(add(QNetworkReply*))));
|
||||
assert(connect(&_downloadManager, SIGNAL(progress(qint64, qint64)),
|
||||
SLOT(progress(qint64, qint64))));
|
||||
assert(connect(_downloadManager.data(), SIGNAL(started()),
|
||||
assert(connect(&_downloadManager, SIGNAL(started()),
|
||||
SLOT(started())));
|
||||
assert(connect(_downloadManager.data(), SIGNAL(finished()),
|
||||
assert(connect(&_downloadManager, SIGNAL(finished()),
|
||||
SLOT(finished())));
|
||||
assert(connect(_downloadManager.data(), SIGNAL(error(QString)),
|
||||
assert(connect(&_downloadManager, SIGNAL(error(QString)),
|
||||
SLOT(downloadError(QString))));
|
||||
assert(connect(_downloadManager.data(), SIGNAL(metaDataChanged(QNetworkReply*)),
|
||||
assert(connect(&_downloadManager, SIGNAL(metaDataChanged(QNetworkReply*)),
|
||||
SLOT(metaDataChanged(QNetworkReply*))));
|
||||
assert(connect(&_settings, SIGNAL(newSettings()), SLOT(newSettings())));
|
||||
newSettings();
|
||||
@@ -210,8 +180,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
|
||||
if (!settings || _kiosk) {
|
||||
actionSettings->setVisible(false);
|
||||
actionSaveWindowState->setVisible(false);
|
||||
actionLoadWindowState->setVisible(false);
|
||||
actionEditBookmarks->setVisible(false);
|
||||
}
|
||||
if (_kiosk) {
|
||||
actionNew->setEnabled(false);
|
||||
@@ -219,25 +188,30 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
actionNewTab->setEnabled(false);
|
||||
actionNewTab->setVisible(false);
|
||||
actionCloseTab->setVisible(false);
|
||||
actionEditBookmarks->setVisible(false);
|
||||
delete _bookmarks; _bookmarks=0;
|
||||
}
|
||||
if (!_kiosk &&
|
||||
((!_startUrl && _settings.flag("SaveWindowState") && _settings()) ||
|
||||
_bookmarkfile.readable()))
|
||||
if (!_kiosk && !_startUrl && _settings.flag("SaveWindowState")
|
||||
&& _settings())
|
||||
loadWin();
|
||||
if (urls.size()) load(urls.at(0));
|
||||
for (int i(1); i<urls.size(); ++i) load(urls.at(i), newTab());
|
||||
if (!QSslSocket::supportsSsl())
|
||||
QMessageBox::critical(this, tr("SSL Not Supported"),
|
||||
tr("SSL is not supported on your system"));
|
||||
// temporary caching of favicons
|
||||
QWebSettings::setIconDatabasePath(TMP);
|
||||
}
|
||||
|
||||
~Browser() {
|
||||
TRC;
|
||||
QWebSettings::clearIconDatabase();
|
||||
LOG;
|
||||
for (DownloadProcesses::iterator it(_downloadProcesses.begin());
|
||||
it!=_downloadProcesses.end(); ++it) {
|
||||
LOG<<"cleanup:"<<it->second->fileName();
|
||||
it->second->setAutoRemove(_settings.flag("CloseApps"));
|
||||
delete it->second;
|
||||
it->second = 0;
|
||||
if (_settings.flag("CloseApps")) {
|
||||
it->first->terminate();
|
||||
delete it->first;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//! Whitelisting
|
||||
@@ -245,83 +219,14 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
return true;
|
||||
}
|
||||
|
||||
//! Create new empty tab.
|
||||
qbrowserlib::SwissWebView* newTab() {
|
||||
qbrowserlib::SwissWebView* browser
|
||||
(new qbrowserlib::SwissWebView(&_networkManager, &_executor));
|
||||
newTab(browser);
|
||||
return browser;
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
void closeEvent(QCloseEvent *event) {
|
||||
TRC;
|
||||
if (!_kiosk &&
|
||||
((!_startUrl && _settings.flag("SaveWindowState") && _settings()) ||
|
||||
_bookmarkfile.writeable()))
|
||||
saveWin();
|
||||
QMainWindow::closeEvent(event);
|
||||
QApplication::exit(0);
|
||||
}
|
||||
|
||||
|
||||
public Q_SLOTS:
|
||||
|
||||
void on_actionEditBookmarks_triggered() {
|
||||
_editbookmarks->show();
|
||||
}
|
||||
|
||||
|
||||
private Q_SLOTS:
|
||||
|
||||
void load() {
|
||||
TRC;
|
||||
if (qobject_cast<QComboBox*>(_url))
|
||||
load(qobject_cast<QComboBox*>(_url)->currentText());
|
||||
else
|
||||
load(qobject_cast<QLineEdit*>(_url)->text());
|
||||
}
|
||||
|
||||
void load(QString page) {
|
||||
_settings.replaceSearchEngine(page);
|
||||
if (QUrl(page).scheme()=="") page = "http://"+page;
|
||||
if (qobject_cast<QComboBox*>(_url))
|
||||
qobject_cast<QComboBox*>(_url)->lineEdit()->setText(page);
|
||||
else
|
||||
qobject_cast<QLineEdit*>(_url)->setText(page);
|
||||
load(QUrl(page));
|
||||
}
|
||||
|
||||
void load(QUrl page, QWebView* view=0) {
|
||||
TRC; LOG<<page.toString();
|
||||
statusBar()->showMessage(tr("Checking: %1").arg(page.toString()));
|
||||
if (!check(page)) {
|
||||
LOG<<"########## BLACK LISTED IGNORED ##########";
|
||||
statusBar()->showMessage(tr("Forbidden: %1").arg(page.toString()));
|
||||
QMessageBox::warning(this, tr("Access Denied"),
|
||||
tr("<p>Access denied due to security"
|
||||
" considerations.</p><p>You are not"
|
||||
" allowed to connect to %1.")
|
||||
.arg(page.toString()));
|
||||
return;
|
||||
}
|
||||
statusBar()->showMessage(tr("Reading: %1").arg(page.toString()));
|
||||
if (!page.isValid()) {
|
||||
statusBar()->showMessage(tr("Illegal URL: %1").arg(page.errorString()));
|
||||
return;
|
||||
}
|
||||
if (!view) view=qobject_cast<QWebView*>(_tabs->currentWidget());
|
||||
view->load(page);
|
||||
}
|
||||
|
||||
//! Slot that receives and initializes a new SwissWebView
|
||||
void newTab(qbrowserlib::SwissWebView* browser) {
|
||||
QWebView* newTab() {
|
||||
QWebView* browser(new QWebView);
|
||||
browser->setPage(new WebPage(this, browser));
|
||||
browser->page()->setPluginFactory(new PluginFactory);
|
||||
browser->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
|
||||
browser->page()->setNetworkAccessManager(&_networkManager);
|
||||
browser->page()->setForwardUnsupportedContent(true);
|
||||
_url->setFocus();
|
||||
// SwissWebView
|
||||
assert(connect(browser, SIGNAL(newView(qbrowserlib::SwissWebView*)),
|
||||
SLOT(newTab(qbrowserlib::SwissWebView*))));
|
||||
// QWebView
|
||||
assert(connect(browser, SIGNAL(urlChanged(const QUrl&)),
|
||||
SLOT(urlChanged(const QUrl&))));
|
||||
@@ -556,9 +461,9 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
assert(connect(browser->page(),
|
||||
SIGNAL(toolBarVisibilityChangeRequested(bool)),
|
||||
SLOT(toolBarVisibilityChangeRequested(bool))));
|
||||
assert(connect(browser->page(),
|
||||
SIGNAL(unsupportedContent(QNetworkReply*)),
|
||||
SLOT(unsupportedContent(QNetworkReply*))));
|
||||
// assert(connect(browser->page(),
|
||||
// SIGNAL(unsupportedContent(QNetworkReply*)),
|
||||
// SLOT(unsupportedContent(QNetworkReply*))));
|
||||
assert(connect(browser->page(), SIGNAL(windowCloseRequested()),
|
||||
SLOT(windowCloseRequested())));
|
||||
// QNetworkAccessManager
|
||||
@@ -577,11 +482,61 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
SLOT(sslErrors(QNetworkReply*, const QList<QSslError>&))));
|
||||
_tabs->setCurrentIndex(_tabs->addTab(browser, tr("New Tab")));
|
||||
_tabs->setTabsClosable(_tabs->count()>1);
|
||||
return browser;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
void closeEvent(QCloseEvent *event) {
|
||||
LOG;
|
||||
if (!_kiosk && !_startUrl && _settings.flag("SaveWindowState")
|
||||
&& _settings())
|
||||
saveWin();
|
||||
QMainWindow::closeEvent(event);
|
||||
QApplication::exit(0);
|
||||
}
|
||||
|
||||
private Q_SLOTS:
|
||||
|
||||
void load() {
|
||||
LOG;
|
||||
if (qobject_cast<QComboBox*>(_url))
|
||||
load(qobject_cast<QComboBox*>(_url)->currentText());
|
||||
else
|
||||
load(qobject_cast<QLineEdit*>(_url)->text());
|
||||
}
|
||||
|
||||
void load(QString page) {
|
||||
_settings.replaceSearchEngine(page);
|
||||
if (QUrl(page).scheme()=="") page = "http://"+page;
|
||||
load(QUrl(page));
|
||||
}
|
||||
|
||||
void load(QUrl page, QWebView* view=0) {
|
||||
LOG<<page.toString();
|
||||
statusBar()->showMessage(tr("Checking: %1").arg(page.toString()));
|
||||
if (!check(page)) {
|
||||
LOG<<"########## BLACK LISTED IGNORED ##########";
|
||||
statusBar()->showMessage(tr("Forbidden: %1").arg(page.toString()));
|
||||
QMessageBox::warning(this, tr("Access Denied"),
|
||||
tr("<p>Access denied due to security"
|
||||
" considerations.</p><p>You are not"
|
||||
" allowed to connect to %1.")
|
||||
.arg(page.toString()));
|
||||
return;
|
||||
}
|
||||
statusBar()->showMessage(tr("Reading: %1").arg(page.toString()));
|
||||
if (!page.isValid()) {
|
||||
statusBar()->showMessage(tr("Illegal URL: %1").arg(page.errorString()));
|
||||
return;
|
||||
}
|
||||
if (!view) view=qobject_cast<QWebView*>(_tabs->currentWidget());
|
||||
view->load(page);
|
||||
}
|
||||
|
||||
void newSettings() {
|
||||
_searchEngines->clear();
|
||||
for (qbrowserlib::Settings::SearchEngines::const_iterator
|
||||
for (Settings::SearchEngines::const_iterator
|
||||
it(_settings.searchEngines().begin());
|
||||
it!=_settings.searchEngines().end(); it++)
|
||||
if (QFile(":/icons/"+it.key()).exists())
|
||||
@@ -591,31 +546,24 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
if (_searchEngines->count()==0)
|
||||
_searchEngines->addItem(QIcon(":/icons/gg"), tr("gg"),
|
||||
tr("http://www.google.com/search?hl=%2&q=%1"));
|
||||
_searchEngines->setVisible(_searchEngines->count()>1);
|
||||
}
|
||||
|
||||
void on_actionAddBookmark_triggered() {
|
||||
QComboBox* url(qobject_cast<QComboBox*>(_url));
|
||||
if (!_bookmarks) return;
|
||||
if (_url && !url->currentText().isEmpty()) {
|
||||
if (_url) {
|
||||
url->addItem(url->currentText());
|
||||
QAction* a(_bookmarks->addAction(url->currentText()));
|
||||
a->setData(url->currentText());
|
||||
connect(a, SIGNAL(triggered(bool)), SLOT(loadFromHistory()));
|
||||
saveBookmarks();
|
||||
}
|
||||
}
|
||||
|
||||
void smaller() {
|
||||
_zoom->setValue(_zoom->value()-_zoom->pageStep());
|
||||
}
|
||||
|
||||
void larger() {
|
||||
_zoom->setValue(_zoom->value()+_zoom->pageStep());
|
||||
void on_actionEditBookmarks_triggered() {
|
||||
_editbookmarks->show();
|
||||
}
|
||||
|
||||
void zoom(int i) {
|
||||
TRC; LOG<<i;
|
||||
LOG<<i;
|
||||
statusBar()->showMessage(tr("Zoom: %1%").arg(i));
|
||||
qobject_cast<QWebView*>(_tabs->currentWidget())->setZoomFactor(i/100.0);
|
||||
}
|
||||
@@ -625,12 +573,12 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
}
|
||||
|
||||
void on_actionHome_activated() {
|
||||
TRC;
|
||||
LOG;
|
||||
load(_home);
|
||||
}
|
||||
|
||||
void on_actionNew_triggered() {
|
||||
TRC;
|
||||
LOG;
|
||||
QStringList args(QCoreApplication::arguments());
|
||||
QString prg(args.takeFirst());
|
||||
statusBar()->showMessage(tr("opening new window"), 5000);
|
||||
@@ -645,18 +593,15 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
on__tabs_tabCloseRequested(_tabs->currentIndex());
|
||||
}
|
||||
|
||||
void on__tabs_currentChanged(int) {
|
||||
if (qobject_cast<QComboBox*>(_url)) {
|
||||
void on__tabs_currentChanged(int index) {
|
||||
if (qobject_cast<QComboBox*>(_url))
|
||||
qobject_cast<QComboBox*>(_url)->setEditText
|
||||
(qobject_cast<QWebView*>(_tabs->currentWidget())
|
||||
->url().toString());
|
||||
qobject_cast<QComboBox*>(_url)->lineEdit()->setCursorPosition(0);
|
||||
} else {
|
||||
else
|
||||
qobject_cast<QLineEdit*>(_url)->setText
|
||||
(qobject_cast<QWebView*>(_tabs->currentWidget())
|
||||
->url().toString());
|
||||
qobject_cast<QLineEdit*>(_url)->setCursorPosition(0);
|
||||
}
|
||||
activateTab();
|
||||
}
|
||||
|
||||
@@ -685,17 +630,17 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
}
|
||||
|
||||
void on_actionClose_triggered() {
|
||||
TRC;
|
||||
LOG;
|
||||
close();
|
||||
}
|
||||
|
||||
void on_actionBack_triggered() {
|
||||
TRC;
|
||||
LOG;
|
||||
qobject_cast<QWebView*>(_tabs->currentWidget())->history()->back();
|
||||
}
|
||||
|
||||
void on_actionBack_hovered() {
|
||||
TRC;
|
||||
LOG;
|
||||
if (!qobject_cast<QWebView*>(_tabs->currentWidget())->history()
|
||||
->backItem().isValid())
|
||||
return;
|
||||
@@ -709,12 +654,12 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
}
|
||||
|
||||
void on_actionForward_triggered() {
|
||||
TRC;
|
||||
LOG;
|
||||
qobject_cast<QWebView*>(_tabs->currentWidget())->history()->forward();
|
||||
}
|
||||
|
||||
void on_actionForward_hovered() {
|
||||
TRC;
|
||||
LOG;
|
||||
if (!qobject_cast<QWebView*>(_tabs->currentWidget())->history()
|
||||
->forwardItem().isValid())
|
||||
return;
|
||||
@@ -728,15 +673,15 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
}
|
||||
|
||||
void on_actionReload_triggered() {
|
||||
TRC;
|
||||
LOG;
|
||||
qobject_cast<QWebView*>(_tabs->currentWidget())->reload();
|
||||
}
|
||||
|
||||
void on_actionStop_triggered() {
|
||||
TRC;
|
||||
LOG;
|
||||
for (int i(0); i<_tabs->count(); ++i)
|
||||
qobject_cast<QWebView*>(_tabs->widget(i))->stop();
|
||||
_downloadManager->abort();
|
||||
_downloadManager.abort();
|
||||
}
|
||||
|
||||
void on_actionClearLocation_triggered() {
|
||||
@@ -832,7 +777,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
"%3\n"
|
||||
"%4\n"
|
||||
"qt-%5 (%6)\n"
|
||||
"openssl-%7 (%9) %10")
|
||||
"openssl-%7")
|
||||
.arg(VERSION)
|
||||
.arg(BUILDDATE)
|
||||
.arg(QString::fromStdString(proxy::version()))
|
||||
@@ -840,13 +785,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
.arg(qVersion())
|
||||
.arg(QT_VERSION_STR)
|
||||
.arg(SHLIB_VERSION_NUMBER)
|
||||
.arg(QApplication::applicationName())
|
||||
.arg(OPENSSL_VERSION_TEXT)
|
||||
.arg(QSslSocket::supportsSsl()?"ok":"failed"));
|
||||
}
|
||||
|
||||
void on_actionDebugLog_triggered() {
|
||||
qbrowserlib::Log::show(this);
|
||||
.arg(QApplication::applicationName()));
|
||||
}
|
||||
|
||||
void on_actionSettings_triggered() {
|
||||
@@ -862,9 +801,13 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
}
|
||||
|
||||
void saveWin() {
|
||||
TRC; LOG<<"Save Window State";
|
||||
saveBookmarks();
|
||||
LOG<<"Save Window State";
|
||||
if (!_settings()) return;
|
||||
QStringList urls;
|
||||
if (qobject_cast<QComboBox*>(_url))
|
||||
for (int i(0); i<qobject_cast<QComboBox*>(_url)->count(); ++i)
|
||||
urls<<qobject_cast<QComboBox*>(_url)->itemText(i);
|
||||
_settings()->setValue("Window/Urls", urls);
|
||||
QStringList tabs;
|
||||
for (int i(0); i<_tabs->count(); ++i)
|
||||
tabs<<qobject_cast<QWebView*>(_tabs->widget(i))->url().toString();
|
||||
@@ -874,27 +817,21 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
_settings()->setValue("Window/WindowState", saveState());
|
||||
}
|
||||
|
||||
void saveBookmarks() {
|
||||
TRC; LOG<<"Saving Bookmarks ...";
|
||||
QStringList urls;
|
||||
if (qobject_cast<QComboBox*>(_url))
|
||||
for (int i(0); i<qobject_cast<QComboBox*>(_url)->count(); ++i)
|
||||
urls<<qobject_cast<QComboBox*>(_url)->itemText(i);
|
||||
urls.removeAll("");
|
||||
urls.removeDuplicates();
|
||||
if (_bookmarkfile.writeable()) {
|
||||
LOG<<"write to bookmark file"<<_bookmarkfile.name();
|
||||
_bookmarkfile.write(urls);
|
||||
} else if (_settings()) {
|
||||
LOG<<"write to settings";
|
||||
_settings()->setValue("Window/Urls", urls);
|
||||
} else LOG<<"bookmarks not saved";
|
||||
}
|
||||
|
||||
void loadWin() {
|
||||
TRC;
|
||||
loadBookmarks();
|
||||
if (!_settings()) return;
|
||||
LOG;
|
||||
QStringList urls(_settings()->value("Window/Urls").toStringList());
|
||||
urls.sort();
|
||||
urls.removeDuplicates();
|
||||
if (qobject_cast<QComboBox*>(_url)) {
|
||||
qobject_cast<QComboBox*>(_url)->clear();
|
||||
qobject_cast<QComboBox*>(_url)->addItems(urls);
|
||||
}
|
||||
_bookmarks->clear();
|
||||
for (QStringList::iterator it(urls.begin()); it!=urls.end(); ++it) {
|
||||
QAction* a(_bookmarks->addAction(*it));
|
||||
a->setData(*it);
|
||||
connect(a, SIGNAL(triggered(bool)), SLOT(loadFromHistory()));
|
||||
}
|
||||
QStringList tabs(_settings()->value("Window/Tabs").toStringList());
|
||||
int oldCnt(_tabs->count());
|
||||
for (QStringList::iterator it(tabs.begin()); it!=tabs.end(); ++it) {
|
||||
@@ -908,90 +845,62 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
restoreGeometry(_settings()->value("Window/Geometry").toByteArray());
|
||||
restoreState(_settings()->value("Window/WindowState").toByteArray());
|
||||
}
|
||||
|
||||
void loadBookmarks() {
|
||||
TRC; LOG<<"Loading Bookmarks ...";
|
||||
QStringList urls;
|
||||
if (_bookmarkfile.readable()) {
|
||||
LOG<<"load from file"<<_bookmarkfile.name();
|
||||
urls = _bookmarkfile.read();
|
||||
} else if (_settings()) {
|
||||
LOG<<"load from settings";
|
||||
urls = _settings()->value("Window/Urls").toStringList();
|
||||
}
|
||||
urls.removeAll("");
|
||||
urls.removeDuplicates();
|
||||
if (qobject_cast<QComboBox*>(_url)) {
|
||||
QString ci(qobject_cast<QComboBox*>(_url)->currentText());
|
||||
qobject_cast<QComboBox*>(_url)->clear();
|
||||
qobject_cast<QComboBox*>(_url)->addItems(urls);
|
||||
qobject_cast<QComboBox*>(_url)->lineEdit()->setText(ci);
|
||||
}
|
||||
if (_bookmarks) {
|
||||
_bookmarks->clear();
|
||||
for (QStringList::iterator it(urls.begin()); it!=urls.end(); ++it) {
|
||||
QAction* a(_bookmarks->addAction(*it));
|
||||
a->setData(*it);
|
||||
connect(a, SIGNAL(triggered(bool)), SLOT(loadFromHistory()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//@name QWebView slots
|
||||
//@{
|
||||
|
||||
void urlChanged(const QUrl& url) {
|
||||
TRC; LOG<<url.toString();
|
||||
LOG<<url.toString();
|
||||
if (sender()!=_tabs->currentWidget()) return;
|
||||
LOG<<"signal on current tab";
|
||||
if (qobject_cast<QComboBox*>(_url)) {
|
||||
if (qobject_cast<QComboBox*>(_url))
|
||||
qobject_cast<QComboBox*>(_url)->setEditText(url.toString());
|
||||
qobject_cast<QComboBox*>(_url)->lineEdit()->setCursorPosition(0);
|
||||
} else {
|
||||
else
|
||||
qobject_cast<QLineEdit*>(_url)->setText(url.toString());
|
||||
qobject_cast<QLineEdit*>(_url)->setCursorPosition(0);
|
||||
}
|
||||
}
|
||||
|
||||
void linkClicked(const QUrl& url) {
|
||||
TRC; LOG<<url.toString();
|
||||
LOG<<url.toString();
|
||||
load(url, qobject_cast<QWebView*>(sender()));
|
||||
}
|
||||
|
||||
void iconChanged() {
|
||||
TRC;
|
||||
LOG;
|
||||
QWebView* view(qobject_cast<QWebView*>(sender()));
|
||||
int index = _tabs->indexOf(view);
|
||||
if (index<0) return;
|
||||
LOG<<"get icon for "<<view->url();
|
||||
QIcon icon(QWebSettings::iconForUrl(view->url()));
|
||||
if (!icon.isNull()) return _tabs->setTabIcon(index, icon);
|
||||
LOG<<"icon for url is null"<<view->url();
|
||||
_tabs->setTabIcon(index, QWebSettings::webGraphic
|
||||
(QWebSettings::DefaultFrameIconGraphic));
|
||||
if (icon.isNull()) {
|
||||
LOG<<"Icon for URL is Null"<<view->url();
|
||||
QPixmap pixmap(QWebSettings::webGraphic
|
||||
(QWebSettings::DefaultFrameIconGraphic));
|
||||
if (!pixmap.isNull()) icon = pixmap;
|
||||
} else icon = icon.pixmap(16, 16);
|
||||
if (icon.isNull()) LOG<<"Icon is still null";
|
||||
_tabs->setTabIcon(index, icon);
|
||||
}
|
||||
|
||||
void titleChanged(const QString& text) {
|
||||
TRC; LOG<<text;
|
||||
LOG<<text;
|
||||
_tabs->setTabText(_tabs->indexOf(qobject_cast<QWidget*>(sender())),
|
||||
trUtf8("%1").arg(text));
|
||||
}
|
||||
|
||||
void statusBarMessage(const QString& text) {
|
||||
TRC; LOG<<text;
|
||||
LOG<<text;
|
||||
if (text.size()) statusBar()->showMessage(tr("Info: %1").arg(text));
|
||||
}
|
||||
|
||||
void loadProgress(int i) {
|
||||
TRC; LOG<<i;
|
||||
LOG<<i;
|
||||
}
|
||||
|
||||
void loadStarted() {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void loadFinished(bool ok) {
|
||||
TRC; LOG<<(ok?"success":"error");
|
||||
LOG<<(ok?"success":"error");
|
||||
QSize sz(qobject_cast<QWebView*>(_tabs->currentWidget())->size());
|
||||
qobject_cast<QWebView*>(_tabs->currentWidget())->resize(0,0);
|
||||
qobject_cast<QWebView*>(_tabs->currentWidget())->resize(sz);
|
||||
@@ -1008,215 +917,215 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
//@{
|
||||
|
||||
void triggeredOpenLink(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredOpenLinkInNewWindow(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredOpenFrameInNewWindow(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredDownloadLinkToDisk(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredCopyLinkToClipboard(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredOpenImageInNewWindow(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredDownloadImageToDisk(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredCopyImageToClipboard(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredBack(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredForward(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredStop(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredReload(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredCut(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredCopy(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredPaste(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredUndo(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredRedo(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToNextChar(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToPreviousChar(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToNextWord(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToPreviousWord(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToNextLine(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToPreviousLine(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToStartOfLine(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToEndOfLine(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToStartOfBlock(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToEndOfBlock(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToStartOfDocument(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredMoveToEndOfDocument(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectNextChar(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectPreviousChar(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectNextWord(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectPreviousWord(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectNextLine(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectPreviousLine(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectStartOfLine(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectEndOfLine(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectStartOfBlock(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectEndOfBlock(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectStartOfDocument(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectEndOfDocument(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredDeleteStartOfWord(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredDeleteEndOfWord(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSetTextDirectionDefault(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSetTextDirectionLeftToRight(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSetTextDirectionRightToLeft(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredToggleBold(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredToggleItalic(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredToggleUnderline(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredInspectElement(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredInsertParagraphSeparator(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredInsertLineSeparator(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
void triggeredSelectAll(bool) {
|
||||
TRC; LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
LOG<<qobject_cast<QAction*>(sender())->data().toString();
|
||||
}
|
||||
|
||||
//@}
|
||||
@@ -1225,109 +1134,117 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
//@{
|
||||
|
||||
void contentsChanged() {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void databaseQuotaExceeded(QWebFrame* frame, QString databaseName) {
|
||||
TRC; LOG<<databaseName;
|
||||
LOG<<databaseName;
|
||||
}
|
||||
|
||||
void downloadRequested(const QNetworkRequest& request) {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void frameCreated(QWebFrame* frame) {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void geometryChangeRequested(const QRect& geom) {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
// void linkClicked(const QUrl& url) {
|
||||
// TRC; LOG<<url.toString();
|
||||
// LOG<<url.toString();
|
||||
// }
|
||||
|
||||
void linkHovered(const QString& link, const QString& title,
|
||||
const QString& textContent) {
|
||||
TRC; LOG<<link<<title<<textContent;
|
||||
LOG<<link<<title<<textContent;
|
||||
statusBar()->showMessage(tr("%1", "statusbar for hovered link %1=url")
|
||||
.arg(link));
|
||||
}
|
||||
|
||||
// void loadFinished(bool ok) {
|
||||
// TRC; LOG<<(ok?"succeess":"error");
|
||||
// LOG<<(ok?"succeess":"error");
|
||||
// }
|
||||
|
||||
// void loadProgress(int progress) {
|
||||
// TRC; LOG<<progress;
|
||||
// LOG<<progress;
|
||||
// }
|
||||
|
||||
// void loadStarted() {
|
||||
// TRC;
|
||||
// LOG;
|
||||
// }
|
||||
|
||||
void menuBarVisibilityChangeRequested(bool visible) {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void microFocusChanged() {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void printRequested(QWebFrame* frame) {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void repaintRequested(const QRect& dirtyRect) {
|
||||
//TRC;
|
||||
//LOG;
|
||||
}
|
||||
|
||||
void restoreFrameStateRequested(QWebFrame* frame) {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void saveFrameStateRequested(QWebFrame* frame, QWebHistoryItem* item) {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void scrollRequested(int dx, int dy, const QRect& rectToScroll) {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void selectionChanged() {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
// void statusBarMessage(const QString& text) {
|
||||
// TRC;
|
||||
// LOG;
|
||||
// }
|
||||
|
||||
void statusBarVisibilityChangeRequested(bool visible) {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void toolBarVisibilityChangeRequested(bool visible) {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
//@name handle downloads
|
||||
//@{
|
||||
|
||||
void unsupportedContent(QNetworkReply* reply) {
|
||||
TRC; LOG<<reply->header(QNetworkRequest::ContentTypeHeader).toString();
|
||||
LOG<<"Status:"<<_downloadManager->networkError(reply->error());
|
||||
LOG<<reply->header(QNetworkRequest::ContentTypeHeader).toString();
|
||||
LOG<<"Status:"<<_downloadManager.networkError(reply->error());
|
||||
QList<QNetworkReply::RawHeaderPair> rh(reply->rawHeaderPairs());
|
||||
for(QList<QNetworkReply::RawHeaderPair>::iterator it(rh.begin());
|
||||
it!=rh.end(); ++it) {
|
||||
LOG<<"RawHeader:"<<it->first<<it->second;
|
||||
}
|
||||
if (reply->isFinished())
|
||||
handleContent(reply);
|
||||
else
|
||||
assert(connect(reply, SIGNAL(finished()), SLOT(downloadFinished())));
|
||||
}
|
||||
|
||||
void downloadFinished() {
|
||||
LOG;
|
||||
QNetworkReply *reply(qobject_cast<QNetworkReply*>(sender()));
|
||||
handleContent(reply);
|
||||
}
|
||||
|
||||
//! check and handle content that is defined in settings
|
||||
void metaDataChanged(QNetworkReply* reply) {
|
||||
TRC;
|
||||
QString filename
|
||||
(QString::fromUtf8(reply->rawHeader("Content-Disposition")));
|
||||
if (filename.contains
|
||||
@@ -1348,35 +1265,104 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
(_settings.mimetype
|
||||
(reply->header(QNetworkRequest::ContentTypeHeader).toString(),
|
||||
filename));
|
||||
if (!type.isEmpty()) unsupportedContent(reply);
|
||||
}
|
||||
|
||||
void handleContent(QNetworkReply* reply) {
|
||||
TRC; LOG<<"Location:"<<reply->header(QNetworkRequest::LocationHeader)
|
||||
LOG<<"Location:"<<reply->header(QNetworkRequest::LocationHeader)
|
||||
.toString();
|
||||
LOG<<"Content-Type:"<<reply->header(QNetworkRequest::ContentTypeHeader)
|
||||
.toString();
|
||||
LOG<<"Content-Disposition:"<<reply->rawHeader("Content-Disposition");
|
||||
LOG<<"Status:"<<_downloadManager->networkError(reply->error());
|
||||
LOG<<"Status:"<<_downloadManager.networkError(reply->error());
|
||||
LOG<<"URL:"<<reply->url().toString();
|
||||
LOG<<"File:"<<reply->url().toLocalFile();
|
||||
LOG<<"Path:"<<reply->url().path();
|
||||
if (reply->error()!=QNetworkReply::NoError) {
|
||||
LOG<<"Error:"<<_downloadManager->networkError(reply->error());
|
||||
LOG<<"Error:"<<_downloadManager.networkError(reply->error());
|
||||
return;
|
||||
}
|
||||
statusBar()->showMessage(tr("handling content ..."), 5000);
|
||||
LOG<<"Show SaveOrRunDialog";
|
||||
qbrowserlib::SaveOrRunDialog dlg
|
||||
(reply, &_executor,
|
||||
reply->header(QNetworkRequest::ContentTypeHeader).toString(),
|
||||
reply->url().host(), _kiosk, this);
|
||||
if (!dlg.handlePreconfigured()) dlg.exec();
|
||||
QString filename
|
||||
(QString::fromUtf8(reply->rawHeader("Content-Disposition")));
|
||||
if (filename.contains
|
||||
(QRegExp("^\\s*attachment\\s*;\\s*filename\\s*=\\s*\"[^\"]+\""))) {
|
||||
LOG<<"From Content-Disposition";
|
||||
filename = filename.replace
|
||||
(QRegExp("^\\s*attachment\\s*;\\s*filename\\s*=\\s*\"([^\"]+)\".*"),
|
||||
"\\1");
|
||||
} else {
|
||||
LOG<<"From path";
|
||||
filename =
|
||||
QFileInfo(!reply->url().toLocalFile().isEmpty()
|
||||
?reply->url().toLocalFile()
|
||||
:reply->url().path()).fileName();
|
||||
}
|
||||
LOG<<"Filename:"<<filename;
|
||||
QStringList type
|
||||
(_settings.mimetype
|
||||
(reply->header(QNetworkRequest::ContentTypeHeader).toString(),
|
||||
filename));
|
||||
if (!type.isEmpty()) {
|
||||
filename.replace(QRegExp("^(.*)\\."+type.at(0)+"$"),
|
||||
"\\1"); // remove extension
|
||||
run(reply, filename+"."+type.at(0), type.at(1));
|
||||
} else {
|
||||
SaveOrRunDialog choice(_kiosk, this);
|
||||
choice.setup(filename,
|
||||
reply->header(QNetworkRequest::ContentTypeHeader)
|
||||
.toString(),
|
||||
reply->url().host());
|
||||
if (choice.exec()==QDialog::Accepted) {
|
||||
if (choice.save()) {
|
||||
QFile file(choice.sor()->filename());
|
||||
file.open(QIODevice::WriteOnly);
|
||||
file.write(reply->readAll());
|
||||
file.close();
|
||||
} else if (choice.run()) {
|
||||
run(reply, filename, choice.sor()->program()+" %1");
|
||||
} else {
|
||||
// ...
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void run(QNetworkReply* reply, QString filename, QString command) {
|
||||
TemporaryFile *file(new TemporaryFile
|
||||
(QDir::tempPath()+QDir::separator()
|
||||
+filename));
|
||||
file->open();
|
||||
reply->seek(0);
|
||||
file->write(reply->readAll());
|
||||
file->close();
|
||||
LOG<<"Stored as:"<<file->fileName();
|
||||
statusBar()->showMessage(tr("launching application ..."), 5000);
|
||||
QProcess* process(new QProcess);
|
||||
_downloadProcesses[process] = file;
|
||||
assert(connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
|
||||
SLOT(processFinished())));
|
||||
QStringList args(command.split(" ")
|
||||
.replaceInStrings("%1", file->fileName()));
|
||||
QString prg(args.takeFirst());
|
||||
LOG<<"Running:"<<prg<<args.join(" ");
|
||||
process->start(prg, args);
|
||||
}
|
||||
|
||||
void processFinished() {
|
||||
LOG;
|
||||
if (_downloadProcesses.find(qobject_cast<QProcess*>(sender()))
|
||||
== _downloadProcesses.end()) return;
|
||||
if (_downloadProcesses[qobject_cast<QProcess*>(sender())])
|
||||
_downloadProcesses[qobject_cast<QProcess*>(sender())]
|
||||
->setAutoRemove(true);
|
||||
delete _downloadProcesses[qobject_cast<QProcess*>(sender())];
|
||||
_downloadProcesses.erase(qobject_cast<QProcess*>(sender()));
|
||||
}
|
||||
|
||||
//@}
|
||||
|
||||
void windowCloseRequested() {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
//@}
|
||||
@@ -1391,26 +1377,34 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
|
||||
void started() {
|
||||
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
||||
actionStop->setVisible(true);
|
||||
actionReload->setVisible(false);
|
||||
if (_quirks) {
|
||||
actionStop->setEnabled(true);
|
||||
} else {
|
||||
actionStop->setVisible(true);
|
||||
actionReload->setVisible(false);
|
||||
}
|
||||
_progress->setRange(0, 0);
|
||||
_progress->setValue(0);
|
||||
_progress->setEnabled(true);
|
||||
_progress->show();
|
||||
}
|
||||
|
||||
|
||||
void finished() {
|
||||
TRC;
|
||||
LOG;
|
||||
QApplication::restoreOverrideCursor();
|
||||
actionStop->setVisible(false);
|
||||
actionReload->setVisible(true);
|
||||
if (_quirks) {
|
||||
actionStop->setEnabled(false);
|
||||
} else {
|
||||
actionStop->setVisible(false);
|
||||
actionReload->setVisible(true);
|
||||
}
|
||||
_progress->setRange(0, 1);
|
||||
_progress->setValue(1);
|
||||
_progress->setEnabled(false);
|
||||
}
|
||||
|
||||
void finished(QNetworkReply *r) {
|
||||
TRC;
|
||||
LOG;
|
||||
if (r->error()!=QNetworkReply::NoError &&
|
||||
r->error()!=QNetworkReply::OperationCanceledError) {
|
||||
statusBar()->showMessage(DownloadManager::networkError(r->error()));
|
||||
@@ -1427,7 +1421,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
}
|
||||
|
||||
void errorReset() {
|
||||
TRC;
|
||||
LOG;
|
||||
_showErrorLog->hide();
|
||||
}
|
||||
|
||||
@@ -1462,7 +1456,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
|
||||
void authenticationRequired(QNetworkReply* reply,
|
||||
QAuthenticator* authenticator) {
|
||||
TRC; LOG<<reply->url().toString()<<authenticator->realm();
|
||||
LOG<<reply->url().toString()<<authenticator->realm();
|
||||
statusBar()->showMessage(tr("authentication required"));
|
||||
Authentication auth(authenticator, this);
|
||||
if (auth.exec()==QDialog::Rejected) reply->abort();
|
||||
@@ -1470,11 +1464,11 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
|
||||
void proxyAuthenticationRequired(const QNetworkProxy& proxy,
|
||||
QAuthenticator* authenticator) {
|
||||
TRC;
|
||||
LOG;
|
||||
}
|
||||
|
||||
void sslErrors(QNetworkReply* reply, const QList<QSslError>& errors) {
|
||||
TRC;
|
||||
LOG;
|
||||
statusBar()->showMessage(tr("ssl error"));
|
||||
}
|
||||
|
||||
@@ -1497,6 +1491,56 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
class ButtonLineEdit: public QLineEdit {
|
||||
public:
|
||||
ButtonLineEdit(QWidget* p=0): QLineEdit(p) {
|
||||
LOG;
|
||||
}
|
||||
QToolButton* add(QAction* a) {
|
||||
LOG;
|
||||
QToolButton* b(new QToolButton(this));
|
||||
b->setDefaultAction(a);
|
||||
add(b);
|
||||
return b;
|
||||
}
|
||||
ButtonLineEdit& add(QToolButton* b) {
|
||||
LOG;
|
||||
b->setParent(this);
|
||||
b->setStyleSheet("QToolButton { border: none; padding: 0; }");
|
||||
b->setCursor(Qt::ArrowCursor);
|
||||
_buttons.push_back(b);
|
||||
resizeEvent(0);
|
||||
return *this;
|
||||
}
|
||||
ButtonLineEdit& changeStyleSheet(QString s) {
|
||||
LOG;
|
||||
_style = s;
|
||||
resizeEvent(0);
|
||||
return *this;
|
||||
}
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent*) {
|
||||
QSize sz;
|
||||
int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
|
||||
for (Buttons::iterator it(_buttons.begin());
|
||||
it!=_buttons.end(); ++it) {
|
||||
if (sz.isEmpty()) sz = (*it)->sizeHint();
|
||||
else sz.setWidth(sz.width()+(*it)->sizeHint().width());
|
||||
(*it)->move(rect().right() - frameWidth - sz.width(),
|
||||
(rect().bottom() + 1 - (*it)->sizeHint().height())/2);
|
||||
}
|
||||
setStyleSheet(QString("QLineEdit { padding-right: %1px; %2 }")
|
||||
.arg(sz.width() + frameWidth + 1)
|
||||
.arg(_style));
|
||||
}
|
||||
private:
|
||||
typedef QList<QToolButton*> Buttons;
|
||||
Buttons _buttons;
|
||||
QString _style;
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
QWidget* _url;
|
||||
@@ -1507,8 +1551,10 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
bool _kiosk;
|
||||
QPrinter _printer;
|
||||
SslClientAuthNetworkAccessManager _networkManager;
|
||||
QSharedPointer<DownloadManager> _downloadManager;
|
||||
qbrowserlib::Settings _settings;
|
||||
DownloadManager _downloadManager;
|
||||
typedef std::map<QProcess*, TemporaryFile*> DownloadProcesses;
|
||||
DownloadProcesses _downloadProcesses;
|
||||
Settings _settings;
|
||||
ErrorLog _errorLog;
|
||||
LoginCertificate _logincertificate;
|
||||
gui::Proxy _proxy;
|
||||
@@ -1518,9 +1564,5 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
bool _quirks;
|
||||
ButtonLineEdit* _search;
|
||||
QComboBox* _searchEngines;
|
||||
FileStorage _bookmarkfile;
|
||||
qbrowserlib::Executor _executor;
|
||||
};
|
||||
|
||||
//! @}
|
||||
#endif
|
||||
|
@@ -11,11 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>SwissBrowser</string>
|
||||
</property>
|
||||
<property name="windowIcon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/32x32/swissbrowser.png</normaloff>:/icons/32x32/swissbrowser.png</iconset>
|
||||
<string>SwissSurfer</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
@@ -70,7 +66,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1009</width>
|
||||
<height>25</height>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuDatei">
|
||||
@@ -115,7 +111,6 @@
|
||||
<addaction name="actionLoginCertificate"/>
|
||||
<addaction name="actionErrorLog"/>
|
||||
<addaction name="actionAbout"/>
|
||||
<addaction name="actionDebugLog"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="_bookmarks">
|
||||
<property name="title">
|
||||
@@ -134,7 +129,7 @@
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/32x32/butt32_02.png</normaloff>:/icons/32x32/butt32_02.png</iconset>
|
||||
<normaloff>:/icons/reload</normaloff>:/icons/reload</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>neu laden</string>
|
||||
@@ -149,7 +144,7 @@
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/32x32/butt32_05.png</normaloff>:/icons/32x32/butt32_05.png</iconset>
|
||||
<normaloff>:/icons/stop</normaloff>:/icons/stop</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>stoppen</string>
|
||||
@@ -164,13 +159,13 @@
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/32x32/butt32_03.png</normaloff>:/icons/32x32/butt32_03.png</iconset>
|
||||
<normaloff>:/icons/back</normaloff>:/icons/back</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>zurückkehren</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Alt+Left</string>
|
||||
<string notr="true">Alt+Left</string>
|
||||
</property>
|
||||
<property name="shortcutContext">
|
||||
<enum>Qt::WindowShortcut</enum>
|
||||
@@ -182,13 +177,13 @@
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/32x32/butt32_04.png</normaloff>:/icons/32x32/butt32_04.png</iconset>
|
||||
<normaloff>:/icons/forward</normaloff>:/icons/forward</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>weitergehen</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Alt+Right</string>
|
||||
<string notr="true">Alt+Right</string>
|
||||
</property>
|
||||
<property name="shortcutContext">
|
||||
<enum>Qt::WindowShortcut</enum>
|
||||
@@ -197,7 +192,7 @@
|
||||
<action name="actionHome">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/32x32/butt32_01.png</normaloff>:/icons/32x32/butt32_01.png</iconset>
|
||||
<normaloff>:/icons/gohome</normaloff>:/icons/gohome</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Startseite</string>
|
||||
@@ -211,7 +206,7 @@
|
||||
</action>
|
||||
<action name="actionNew">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/newwindow</normaloff>:/icons/newwindow</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -226,7 +221,7 @@
|
||||
</action>
|
||||
<action name="actionClose">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/close</normaloff>:/icons/close</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -235,7 +230,7 @@
|
||||
</action>
|
||||
<action name="actionProxySettings">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/settings</normaloff>:/icons/settings</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -244,7 +239,7 @@
|
||||
</action>
|
||||
<action name="actionPrint">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/print</normaloff>:/icons/print</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -253,7 +248,7 @@
|
||||
</action>
|
||||
<action name="actionPrintPreview">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/printpreview</normaloff>:/icons/printpreview</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -262,7 +257,7 @@
|
||||
</action>
|
||||
<action name="actionInstantPrint">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/print</normaloff>:/icons/print</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -290,7 +285,7 @@
|
||||
</action>
|
||||
<action name="actionNewTab">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/newtab</normaloff>:/icons/newtab</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -305,7 +300,7 @@
|
||||
</action>
|
||||
<action name="actionFind">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/find</normaloff>:/icons/find</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -320,7 +315,7 @@
|
||||
</action>
|
||||
<action name="actionUnFind">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/close</normaloff>:/icons/close</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -332,7 +327,7 @@
|
||||
</action>
|
||||
<action name="actionAbout">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/about</normaloff>:/icons/about</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -344,7 +339,7 @@
|
||||
</action>
|
||||
<action name="actionSettings">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/settings</normaloff>:/icons/settings</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -356,7 +351,7 @@
|
||||
</action>
|
||||
<action name="actionReverseFind">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/find</normaloff>:/icons/find</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -368,7 +363,7 @@
|
||||
</action>
|
||||
<action name="actionErrorLog">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/error</normaloff>:/icons/error</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -380,7 +375,7 @@
|
||||
</action>
|
||||
<action name="actionLoginCertificate">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/usercert</normaloff>:/icons/usercert</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -389,7 +384,7 @@
|
||||
</action>
|
||||
<action name="actionProxy">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/settings</normaloff>:/icons/settings</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -399,7 +394,7 @@
|
||||
<action name="actionClearLocation">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/32x32/butt32_06.png</normaloff>:/icons/32x32/butt32_06.png</iconset>
|
||||
<normaloff>:/icons/clearlocation</normaloff>:/icons/clearlocation</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Clear Location</string>
|
||||
@@ -411,7 +406,7 @@
|
||||
<action name="actionAddBookmark">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/32x32/butt32_08.png</normaloff>:/icons/32x32/butt32_08.png</iconset>
|
||||
<normaloff>:/icons/addbookmark</normaloff>:/icons/addbookmark</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add Bookmark</string>
|
||||
@@ -424,13 +419,17 @@
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionEditBookmarks">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/addbookmark</normaloff>:/icons/addbookmark</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Bookmarks</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionClearFind">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/clearlocation</normaloff>:/icons/clearlocation</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -442,7 +441,7 @@
|
||||
</action>
|
||||
<action name="actionCloseTab">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/close</normaloff>:/icons/close</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
@@ -465,7 +464,7 @@
|
||||
<action name="actionSearch">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/16x16/butt16_49.png</normaloff>:/icons/16x16/butt16_49.png</iconset>
|
||||
<normaloff>:/icons/find</normaloff>:/icons/find</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Search</string>
|
||||
@@ -474,17 +473,12 @@
|
||||
<action name="actionClearSearch">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/32x32/butt32_06.png</normaloff>:/icons/32x32/butt32_06.png</iconset>
|
||||
<normaloff>:/icons/clearlocation</normaloff>:/icons/clearlocation</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Clear Search</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionDebugLog">
|
||||
<property name="text">
|
||||
<string>Debug Log</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="resources.qrc"/>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB |
@@ -1,15 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#include <buttonlineeditwidgetifc.hxx>
|
||||
|
||||
//! @defgroup designer
|
||||
//! @{
|
||||
|
||||
Q_EXPORT_PLUGIN2(buttonlineedit, ButtonLineEditWidgetIfc);
|
||||
|
||||
//! @}
|
@@ -1,74 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef __BUTTONLINEEDITWIDGETIFC_HXX
|
||||
#define __BUTTONLINEEDITWIDGETIFC_HXX
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <qbrowserlib/buttonlineedit.hxx>
|
||||
#include <QtDesigner>
|
||||
|
||||
//! @defgroup designer
|
||||
//! @{
|
||||
|
||||
//! Buttonlineedit widget for Qt Designer
|
||||
class ButtonLineEditWidgetIfc: public QObject,
|
||||
public QDesignerCustomWidgetInterface {
|
||||
Q_OBJECT;
|
||||
Q_INTERFACES(QDesignerCustomWidgetInterface);
|
||||
public:
|
||||
bool isContainer() const {
|
||||
TRC;
|
||||
return false;
|
||||
}
|
||||
QIcon icon() const {
|
||||
TRC;
|
||||
return QIcon(":/icons/buttonlineedit.png");
|
||||
}
|
||||
QString domXml() const {
|
||||
TRC;
|
||||
return
|
||||
QString
|
||||
("<ui language=\"c++\" displayname=\"%1\">"
|
||||
" <widget class=\"%1\" name=\"%2\"/>"
|
||||
" <customwidgets>"
|
||||
" <customwidget>"
|
||||
" <class>%1</class>"
|
||||
" </customwidget>"
|
||||
" </customwidgets>"
|
||||
"</ui>")
|
||||
.arg(name())
|
||||
.arg(name().toLower());
|
||||
}
|
||||
QString group() const {
|
||||
TRC;
|
||||
return "Input Widgets";
|
||||
}
|
||||
QString includeFile() const {
|
||||
TRC;
|
||||
return "qbrowserlib/buttonlineedit.hxx";
|
||||
}
|
||||
QString name() const {
|
||||
TRC;
|
||||
return "ButtonLineEdit";
|
||||
}
|
||||
QString toolTip() const {
|
||||
TRC;
|
||||
return "";
|
||||
}
|
||||
QString whatsThis() const {
|
||||
TRC;
|
||||
return "";
|
||||
}
|
||||
QWidget *createWidget(QWidget *parent) {
|
||||
TRC;
|
||||
return new ButtonLineEdit(parent);
|
||||
}
|
||||
};
|
||||
|
||||
//! @}
|
||||
#endif
|
@@ -1,98 +0,0 @@
|
||||
## @file
|
||||
##
|
||||
## $Id: makefile.am 7 2010-03-01 14:55:44Z marc $
|
||||
##
|
||||
## 1 2 3 4 5 6 7 8
|
||||
## 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
include_HEADERS =
|
||||
|
||||
if !MINGW32
|
||||
if MAC
|
||||
AM_CPPFLAGS += -I/opt/local/include
|
||||
# -I/Library/OpenSC/include
|
||||
AM_LDFLAGS = -L/opt/local/lib
|
||||
# -F/System/Library/Frameworks/PCSC.framework
|
||||
else
|
||||
# AM_CPPFLAGS += -I/usr/include/PCSC
|
||||
endif
|
||||
endif
|
||||
|
||||
EXTRA_DIST = @srcdir@/*.[ch]xx @srcdir@/*.qrc.in @srcdir@/*.png
|
||||
# @srcdir@/*.ui
|
||||
|
||||
#LANGS = en de fr it
|
||||
ALL_SRC = @srcdir@/*.[ch]xx \
|
||||
*.qrc
|
||||
# @srcdir@/*.ui
|
||||
|
||||
QMAKE_PROJECT = qmake.pro
|
||||
|
||||
QMAKE_TARGET = qbrowserlib-swisswebview qbrowserlib-buttonlineedit
|
||||
TARGETS = ${QMAKE_TARGET}
|
||||
QMAKE_MAKEFILE = ${QMAKE_TARGET:%=makefile.qmake.%}
|
||||
|
||||
all: ${TARGETS} $
|
||||
#$(LANGS:%=@PACKAGENAME@_%.ts)
|
||||
|
||||
rebuild-ts: $(LANGS)
|
||||
${LUPDATE} @LUPDATE_ARGS@ ${QMAKE_PROJECT}
|
||||
|
||||
# ${LANGS}: ${ALL_SRC}
|
||||
# -rm @PACKAGENAME@_$@.qm
|
||||
# svn revert @PACKAGENAME@_$@.ts
|
||||
# mv @PACKAGENAME@_$@.ts translation.old
|
||||
# ${LUPDATE} @LUPDATE_ARGS@ ${QMAKE_PROJECT}
|
||||
# mv @PACKAGENAME@_$@.ts translation.new
|
||||
# echo '<?xml version="1.0" encoding="utf-8"?>' > @PACKAGENAME@_$@.ts
|
||||
# echo '<!DOCTYPE TS>' >> @PACKAGENAME@_$@.ts
|
||||
# echo '<TS version="2.0" language="'$@'">' >> @PACKAGENAME@_$@.ts
|
||||
# xqilla merge-translation.xquery >> @PACKAGENAME@_$@.ts
|
||||
# echo '</TS>' >> @PACKAGENAME@_$@.ts
|
||||
# rm translation.old translation.new
|
||||
|
||||
print:
|
||||
@echo "LANGS=${LANGS}"
|
||||
@echo "ALL_SRC=${ALL_SRC}"
|
||||
@echo "QMAKE=${QMAKE}"
|
||||
@echo "QMAKE_OPTIONS=${QMAKE_OPTIONS}"
|
||||
@echo "QMAKE_MAKEFILE=${QMAKE_MAKEFILE}"
|
||||
@echo "QMAKE_TARGET=${QMAKE_TARGET}"
|
||||
@echo "TARGETS=${TARGETS}"
|
||||
|
||||
|
||||
# @PACKAGENAME@_%.qm: @srcdir@/@PACKAGENAME@_%.ts
|
||||
# ${LRELEASE} $< -qm $@
|
||||
|
||||
%.xpm: resources/%.png
|
||||
convert $< $@ || cp $< $@
|
||||
|
||||
# %.ts: ${ALL_SRC}
|
||||
# ${LUPDATE} @LUPDATE_ARGS@ ${QMAKE_PROJECT}
|
||||
|
||||
${QMAKE_MAKEFILE}: ${QMAKE_PROJECT} ${ALL_SRC}
|
||||
${QMAKE} -o $@ $< CONFIG+=${@:makefile.qmake.%=%}
|
||||
|
||||
# $(LANGS:%=@PACKAGENAME@_%.qm)
|
||||
${QMAKE_TARGET}: ${QMAKE_MAKEFILE} ${ALL_SRC}
|
||||
make -f makefile.qmake.$@
|
||||
|
||||
install-data-local: ${QMAKE_MAKEFILE}
|
||||
${mkinstalldirs} ${DESTDIR}${QT_INSTALL_PLUGINS}
|
||||
for file in ${QMAKE_TARGET:%=lib%*}; do \
|
||||
if test -e $$file; then \
|
||||
${INSTALL} $$file ${DESTDIR}${QT_INSTALL_PLUGINS}; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
uninstall-local:
|
||||
-rm -r ${QMAKE_TARGET:%=${DESTDIR}${QT_INSTALL_PLUGINS}/lib%*}
|
||||
|
||||
clean-local:
|
||||
-rm -r ${QMAKE_TARGET:%=lib%*}
|
||||
|
||||
# $(LANGS:%=@PACKAGENAME@_%.qm)
|
||||
CLEANFILES = ${TARGETS} ${TARGETS:%=%.exe} \
|
||||
*.o *.obj qrc_*.cpp ui_*.h moc_*.cpp *.dll \
|
||||
${QMAKE_TARGET:%=lib%*}
|
||||
MAINTAINERCLEANFILES = makefile.in ${QMAKE_MAKEFILE}
|
@@ -1,58 +0,0 @@
|
||||
QT += gui webkit network
|
||||
CONFIG += designer plugin
|
||||
QMAKE_LIBS += -lproxyface -lpcscxx -lssl -lcrypto
|
||||
QMAKE_CXXFLAGS += -Wno-parentheses -Wno-unused-parameter
|
||||
#-std=c++0x
|
||||
QMAKE_INCDIR += @top_srcdir@/src
|
||||
QMAKE_INCDIR += .
|
||||
QMAKE_LIBDIR += @top_builddir@/src/qbrowserlib
|
||||
QMAKE_LIBDIR += @top_builddir@/src/qbrowserlib/release
|
||||
QMAKE_LIBS += -lqbrowserlib
|
||||
|
||||
unix {
|
||||
!macx {
|
||||
CONFIG += debug
|
||||
QMAKE_INCDIR += /usr/include/PCSC
|
||||
QMAKE_INCDIR += /usr/local/include/PCSC
|
||||
QMAKE_LIBS += -lpcsclite -lproxy
|
||||
}
|
||||
}
|
||||
macx {
|
||||
QMAKE_INCDIR += /opt/local/include
|
||||
QMAKE_LIBDIR += /opt/local/lib
|
||||
QMAKE_LFLAGS += -F/System/Library/Frameworks/PCSC.framework
|
||||
LIBS += -framework PCSC
|
||||
QMAKE_INCDIR += /System/Library/Frameworks/PCSC.framework/Headers
|
||||
QMAKE_INFO_PLIST = Info.plist
|
||||
CONFIG += x86
|
||||
}
|
||||
win32 {
|
||||
QMAKE_LIBS += -lwinhttp -lgdi32 -lws2_32
|
||||
QMAKE_LIBS += /opt/local/i586-mingw32msvc/lib/winscard.a
|
||||
CONFIG += dll
|
||||
}
|
||||
|
||||
FORMS =
|
||||
|
||||
RESOURCES = resources.qrc
|
||||
|
||||
TEMPLATE = lib
|
||||
|
||||
qbrowserlib-swisswebview {
|
||||
SOURCES = webviewwidgetifc.cxx
|
||||
HEADERS = webviewwidgetifc.hxx
|
||||
TARGET = qbrowserlib-swisswebview
|
||||
}
|
||||
qbrowserlib-buttonlineedit {
|
||||
SOURCES = buttonlineeditwidgetifc.cxx
|
||||
HEADERS = buttonlineeditwidgetifc.hxx
|
||||
TARGET = qbrowserlib-buttonlineedit
|
||||
}
|
||||
|
||||
CODECFORSRC = UTF-8
|
||||
CODECFORTR = UTF-8
|
||||
|
||||
DEFINES += VERSION=\'\"@VERSION@\"\' BUILDDATE=\'\"@BUILDDATE@\"\'
|
||||
|
||||
## DEBUG
|
||||
# QMAKE_CXXFLAGS += -include iostream -D\"CRYPTOKI_LOG(X)=std::clog<<\\\"CRYPTOKI_\\\"<<X<<\\\"_@_\\\"<<__PRETTY_FUNCTION__<<std::endl\" -D\"PCSC_LOG(X)=std::clog<<\\\"PCSC_\\\"<<X<<\\\"_@_\\\"<<__PRETTY_FUNCTION__<<std::endl\" -D\"OPENSSL_LOG(X)=std::clog<<\\\"OPENSSL_\\\"<<X<<\\\"_@_\\\"<<__PRETTY_FUNCTION__<<std::endl'" @CPPFLAGS@ @CXXFLAGS@
|
@@ -1,6 +0,0 @@
|
||||
<RCC>
|
||||
<qresource prefix="/icons">
|
||||
<file>swisswebview.png</file>
|
||||
<file>buttonlineedit.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
Before Width: | Height: | Size: 397 B |
@@ -1,15 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#include <webviewwidgetifc.hxx>
|
||||
|
||||
//! @defgroup designer
|
||||
//! @{
|
||||
|
||||
Q_EXPORT_PLUGIN2(swisswebviewwidgetplugin, SwissWebViewWidgetIfc);
|
||||
|
||||
//! @}
|
@@ -1,87 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef __WEBVIEWWIDGETIFC_HXX
|
||||
#define __WEBVIEWWIDGETIFC_HXX
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <qbrowserlib/swisswebview.hxx>
|
||||
#include <QtDesigner>
|
||||
|
||||
//! @defgroup designer
|
||||
//! @{
|
||||
|
||||
//! WebView widget for Qt Designer
|
||||
class SwissWebViewWidgetIfc: public QObject,
|
||||
public QDesignerCustomWidgetInterface {
|
||||
Q_OBJECT;
|
||||
Q_INTERFACES(QDesignerCustomWidgetInterface);
|
||||
public:
|
||||
SwissWebViewWidgetIfc(): _initialized(false) {}
|
||||
bool isContainer() const {
|
||||
TRC;
|
||||
return true;
|
||||
}
|
||||
QIcon icon() const {
|
||||
TRC;
|
||||
return QIcon(":/icons/swisswebview.png");
|
||||
}
|
||||
QString domXml() const {
|
||||
TRC;
|
||||
return
|
||||
QString
|
||||
("<ui language=\"c++\" displayname=\"%1\">"
|
||||
" <widget class=\"%1\" name=\"%2\"/>"
|
||||
" <customwidgets>"
|
||||
" <customwidget>"
|
||||
" <class>%1</class>"
|
||||
" </customwidget>"
|
||||
" </customwidgets>"
|
||||
"</ui>")
|
||||
.arg(name())
|
||||
.arg(name().toLower());
|
||||
}
|
||||
QString group() const {
|
||||
TRC;
|
||||
return "Display Widgets [Examples]";
|
||||
}
|
||||
QString includeFile() const {
|
||||
TRC;
|
||||
return "qbrowserlib/swisswebview.hxx";
|
||||
}
|
||||
QString name() const {
|
||||
TRC;
|
||||
return "SwissWebView";
|
||||
}
|
||||
QString toolTip() const {
|
||||
TRC;
|
||||
return "";
|
||||
}
|
||||
QString whatsThis() const {
|
||||
TRC;
|
||||
return "";
|
||||
}
|
||||
QWidget *createWidget(QWidget *parent) {
|
||||
TRC;
|
||||
return new qbrowserlib::SwissWebView(&_net, &_executor, parent);
|
||||
}
|
||||
bool isInitialized() {
|
||||
TRC;
|
||||
return _initialized;
|
||||
}
|
||||
void initialized() {
|
||||
TRC;
|
||||
_initialized = true;
|
||||
}
|
||||
private:
|
||||
bool _initialized;
|
||||
QNetworkAccessManager _net;
|
||||
qbrowserlib::Executor _executor;
|
||||
};
|
||||
|
||||
//! @}
|
||||
#endif
|
@@ -5,29 +5,28 @@
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef __DOWNLOAD_MANAGER_HXX
|
||||
#define __DOWNLOAD_MANAGER_HXX
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <QtNetwork/QNetworkReply>
|
||||
#include <QtNetwork/QSslError>
|
||||
#include <QtNetwork/QSslConfiguration>
|
||||
#include <map>
|
||||
|
||||
#include <cassert>
|
||||
#include <QtCore/QDebug>
|
||||
#ifndef LOG
|
||||
#define LOG qDebug()<<__PRETTY_FUNCTION__
|
||||
#endif
|
||||
|
||||
class DownloadManager: public QObject {
|
||||
Q_OBJECT;
|
||||
public:
|
||||
|
||||
DownloadManager& operator+=(QNetworkReply* reply) {
|
||||
TRC;
|
||||
LOG;
|
||||
add(reply);
|
||||
return *this;
|
||||
}
|
||||
|
||||
static QString networkError(QNetworkReply::NetworkError err) {
|
||||
TRC_FN; LOG<<err;
|
||||
LOG<<err;
|
||||
switch (err) {
|
||||
case QNetworkReply::NoError:
|
||||
return tr("Network connection successful, remote host can be"
|
||||
@@ -109,7 +108,7 @@ class DownloadManager: public QObject {
|
||||
public Q_SLOTS:
|
||||
|
||||
void add(QNetworkReply* reply) {
|
||||
TRC; LOG<<_downloads.size()<<reply->url().toString();
|
||||
LOG<<_downloads.size()<<reply->url().toString();
|
||||
LOG<<reply;
|
||||
_downloads[reply].progress = Progress(0, 0);
|
||||
assert(connect(reply, SIGNAL(downloadProgress(qint64, qint64)),
|
||||
@@ -136,7 +135,7 @@ class DownloadManager: public QObject {
|
||||
private:
|
||||
|
||||
void calcProgress() {
|
||||
//TRC;
|
||||
//LOG;
|
||||
qint64 done(0);
|
||||
qint64 total(0);
|
||||
for (Downloads::iterator it(_downloads.begin());
|
||||
@@ -150,7 +149,7 @@ class DownloadManager: public QObject {
|
||||
private Q_SLOTS:
|
||||
|
||||
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) {
|
||||
//TRC; LOG<<bytesReceived<<bytesTotal;
|
||||
//LOG<<bytesReceived<<bytesTotal;
|
||||
_downloads[qobject_cast<QNetworkReply*>(sender())].progress.first
|
||||
= bytesReceived;
|
||||
_downloads[qobject_cast<QNetworkReply*>(sender())].progress.second
|
||||
@@ -158,7 +157,7 @@ class DownloadManager: public QObject {
|
||||
calcProgress();
|
||||
}
|
||||
void error(QNetworkReply::NetworkError code) {
|
||||
TRC; LOG<<"Status:"<<networkError(code);
|
||||
LOG<<"Status:"<<networkError(code);
|
||||
QNetworkReply* reply(qobject_cast<QNetworkReply*>(sender()));
|
||||
_downloads[reply].error +=
|
||||
tr("<h1>Network Error</h1>"
|
||||
@@ -170,11 +169,11 @@ class DownloadManager: public QObject {
|
||||
.arg(code);
|
||||
}
|
||||
void slotDestroyed(QObject* obj) {
|
||||
TRC; LOG<<_downloads.size();
|
||||
LOG<<_downloads.size();
|
||||
_downloads.erase((QNetworkReply*)obj);
|
||||
}
|
||||
void slotFinished() {
|
||||
TRC; LOG<<_downloads.size();
|
||||
LOG<<_downloads.size();
|
||||
QNetworkReply* reply(qobject_cast<QNetworkReply*>(sender()));
|
||||
if (_downloads[reply].error.size())
|
||||
error(_downloads[reply].error);
|
||||
@@ -182,7 +181,7 @@ class DownloadManager: public QObject {
|
||||
if (_downloads.size()==0) finished();
|
||||
}
|
||||
void slotMetaDataChanged() {
|
||||
TRC;
|
||||
LOG;
|
||||
QNetworkReply* reply(qobject_cast<QNetworkReply*>(sender()));
|
||||
if (!reply) return;
|
||||
LOG<<"Location:"<<reply->header(QNetworkRequest::LocationHeader)
|
||||
@@ -197,7 +196,7 @@ class DownloadManager: public QObject {
|
||||
metaDataChanged(reply);
|
||||
}
|
||||
void sslErrors(const QList<QSslError> & errors) {
|
||||
TRC;
|
||||
LOG;
|
||||
QNetworkReply* reply(qobject_cast<QNetworkReply*>(sender()));
|
||||
for (QList<QSslError>::const_iterator err(errors.begin());
|
||||
err!=errors.end(); ++err) {
|
||||
@@ -217,30 +216,6 @@ class DownloadManager: public QObject {
|
||||
<<"C="<<err->certificate().subjectInfo(QSslCertificate::CountryName)
|
||||
<<"ST="<<err->certificate().subjectInfo(QSslCertificate::StateOrProvinceName);
|
||||
LOG<<"Certificate:\n"<<err->certificate().toPem();
|
||||
switch (err->error()) {
|
||||
case QSslError::SelfSignedCertificate:
|
||||
case QSslError::SelfSignedCertificateInChain: {
|
||||
QSslConfiguration sslConfig
|
||||
(QSslConfiguration::defaultConfiguration());
|
||||
QList<QSslCertificate> certs(sslConfig.caCertificates());
|
||||
for (QList<QSslCertificate>::iterator cert(certs.begin());
|
||||
cert!=certs.end(); ++cert) {
|
||||
if (err->certificate().subjectInfo(QSslCertificate::CommonName) ==
|
||||
cert->subjectInfo(QSslCertificate::CommonName)) {
|
||||
LOG<<"Found matching CN:"
|
||||
<<cert->subjectInfo(QSslCertificate::CommonName);
|
||||
if (err->certificate()==*cert) {
|
||||
LOG<<"QT-BUG! Certificate matches known certificate";
|
||||
//! @bug work around qt bug (Qt Mac 4.8.2)
|
||||
reply->ignoreSslErrors(errors);
|
||||
} else {
|
||||
LOG<<"CERTIFICATE ERROR! Certificates are different";
|
||||
}
|
||||
}
|
||||
}
|
||||
} break;
|
||||
default:; // ignore
|
||||
}
|
||||
_downloads[reply].error +=
|
||||
tr("<h1>SSL Error</h1>"
|
||||
"<dl><dt>URL:</dt><dd>%1</dd>"
|
||||
@@ -262,7 +237,7 @@ class DownloadManager: public QObject {
|
||||
"<tr><th>Location:</th><td>%12</td></tr>"
|
||||
"<tr><th>Organizational Unit:</th><td>%13</td></tr>"
|
||||
"<tr><th>Country:</th><td>%14</td></tr>"
|
||||
"<tr><th>State or Province:</th><td>%15</td></tr>"
|
||||
"<tr><th>State or Provive:</th><td>%15</td></tr>"
|
||||
"</table>")
|
||||
.arg(reply->url().toString())
|
||||
.arg(err->errorString())
|
||||
@@ -283,7 +258,7 @@ class DownloadManager: public QObject {
|
||||
}
|
||||
|
||||
void uploadProgress(qint64 bytesSent, qint64 bytesTotal) {
|
||||
//TRC; LOG<<bytesSent<<bytesTotal;
|
||||
//LOG<<bytesSent<<bytesTotal;
|
||||
_downloads[qobject_cast<QNetworkReply*>(sender())].progress.first
|
||||
= bytesSent;
|
||||
_downloads[qobject_cast<QNetworkReply*>(sender())].progress.second
|
||||
@@ -302,4 +277,3 @@ class DownloadManager: public QObject {
|
||||
|
||||
Downloads _downloads;
|
||||
};
|
||||
#endif
|
||||
|
@@ -17,9 +17,6 @@
|
||||
|
||||
class EditBookmarks: public QDialog, protected Ui::EditBookmarks {
|
||||
Q_OBJECT;
|
||||
Q_SIGNALS:
|
||||
void startEdit(bool=true);
|
||||
void endEdit(bool=true);
|
||||
public:
|
||||
EditBookmarks(QComboBox* url, QWidget* p=0): QDialog(p), _url(url) {
|
||||
setupUi(this);
|
||||
@@ -32,11 +29,15 @@ class EditBookmarks: public QDialog, protected Ui::EditBookmarks {
|
||||
QString current(_url->currentText());
|
||||
_url->clear();
|
||||
_url->addItems(urls);
|
||||
_url->setEditText(current);
|
||||
_url->lineEdit()->setText(current);
|
||||
QDialog::accept();
|
||||
}
|
||||
virtual void reject() {
|
||||
reset();
|
||||
QStringList urls;
|
||||
for (int i(0); i<_url->count(); ++i)
|
||||
urls<<_url->itemText(i);
|
||||
_bookmarks->clear();
|
||||
_bookmarks->addItems(urls);
|
||||
QDialog::reject();
|
||||
}
|
||||
protected Q_SLOTS:
|
||||
@@ -50,26 +51,8 @@ class EditBookmarks: public QDialog, protected Ui::EditBookmarks {
|
||||
}
|
||||
}
|
||||
void on__add_clicked(bool) {
|
||||
if (_url->currentText().isEmpty()) return;
|
||||
_bookmarks->addItem(_url->currentText());
|
||||
}
|
||||
protected:
|
||||
virtual void hideEvent(QHideEvent *event) {
|
||||
QDialog::hideEvent(event);
|
||||
endEdit();
|
||||
}
|
||||
virtual void showEvent(QShowEvent *event) {
|
||||
startEdit();
|
||||
reset();
|
||||
QDialog::showEvent(event);
|
||||
}
|
||||
void reset() {
|
||||
QStringList urls;
|
||||
for (int i(0); i<_url->count(); ++i)
|
||||
urls<<_url->itemText(i);
|
||||
_bookmarks->clear();
|
||||
_bookmarks->addItems(urls);
|
||||
}
|
||||
private:
|
||||
QComboBox* _url;
|
||||
};
|
||||
|
@@ -21,6 +21,10 @@
|
||||
<property name="text">
|
||||
<string>+</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/addbookmark</normaloff>:/icons/addbookmark</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@@ -41,6 +45,10 @@
|
||||
<property name="text">
|
||||
<string>-</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/icons/close</normaloff>:/icons/close</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -53,9 +61,6 @@
|
||||
<property name="toolTip">
|
||||
<string>Use Drag/Drop to move, double-click to edit.</string>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::AllEditTriggers</set>
|
||||
</property>
|
||||
<property name="dragEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
|
@@ -8,7 +8,6 @@
|
||||
#ifndef ERRORLOG_HXX
|
||||
#define ERRORLOG_HXX
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <ui_errorlog.h>
|
||||
#include <QtGui/QDialog>
|
||||
|
||||
@@ -19,16 +18,13 @@ class ErrorLog: public QDialog, protected Ui::ErrorLog {
|
||||
void reset();
|
||||
public:
|
||||
ErrorLog(QWidget* p): QDialog(p) {
|
||||
TRC;
|
||||
setupUi(this);
|
||||
}
|
||||
void append(QString text) {
|
||||
TRC; LOG<<text;
|
||||
_errors->append(text);
|
||||
}
|
||||
protected Q_SLOTS:
|
||||
void on__buttons_clicked(QAbstractButton* button) {
|
||||
TRC;
|
||||
switch (_buttons->buttonRole(button)) {
|
||||
case QDialogButtonBox::ResetRole: {
|
||||
_errors->clear();
|
||||
|
@@ -8,18 +8,15 @@
|
||||
#ifndef LOGINCERTIFICATE_HXX
|
||||
#define LOGINCERTIFICATE_HXX
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <ui_logincertificate.h>
|
||||
|
||||
class LoginCertificate: public QDialog, protected Ui::LoginCertificate {
|
||||
public:
|
||||
LoginCertificate(QWidget* p): QDialog(p) {
|
||||
TRC;
|
||||
setupUi(this);
|
||||
setup();
|
||||
}
|
||||
LoginCertificate& setup() {
|
||||
TRC;
|
||||
QSslCertificate c(QSslConfiguration::defaultConfiguration()
|
||||
.localCertificate());
|
||||
_cert->certificate(c);
|
||||
@@ -27,7 +24,6 @@ class LoginCertificate: public QDialog, protected Ui::LoginCertificate {
|
||||
}
|
||||
protected:
|
||||
virtual void showEvent(QShowEvent *event) {
|
||||
TRC;
|
||||
setup();
|
||||
QDialog::showEvent(event);
|
||||
}
|
||||
|
416
src/main.cxx
@@ -8,9 +8,6 @@
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <browser.hxx>
|
||||
|
||||
#include <QtGui/QApplication>
|
||||
#include <QtCore/QTranslator>
|
||||
#include <QtCore/QTextCodec>
|
||||
@@ -23,110 +20,278 @@
|
||||
#include <QtNetwork/QSslKey>
|
||||
#include <QtWebKit/QWebSettings>
|
||||
|
||||
#include <browser.hxx>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
#include <memory>
|
||||
|
||||
const QByteArray SWISSSIGN_EV_GOLD_CA_2009_G2
|
||||
("-----BEGIN CERTIFICATE-----\n"
|
||||
"MIIGvzCCBaegAwIBAgIQAPI39KUS4aGJo+mkR4+YuTANBgkqhkiG9w0BAQUFADBN\n"
|
||||
"MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMScwJQYDVQQDEx5T\n"
|
||||
"d2lzc1NpZ24gRVYgR29sZCBDQSAyMDA5IC0gRzIwHhcNMTAwNDI5MDgyMzA2WhcN\n"
|
||||
"MTIwNDI5MDgyMzA2WjCCASQxCzAJBgNVBAYTAkNIMQ0wCwYDVQQIEwRCZXJuMQ0w\n"
|
||||
"CwYDVQQHEwRCZXJuMSAwHgYDVQQKExdEaWUgU2Nod2VpemVyaXNjaGUgUG9zdDEa\n"
|
||||
"MBgGA1UEAxMRaWRwLnN3aXNzc2lnbi5uZXQxJzAlBgkqhkiG9w0BCQEWGG9wZXJh\n"
|
||||
"dGlvbnNAc3dpc3NzaWduLmNvbTEbMBkGA1UECRMSVmlrdG9yaWFzdHJhc3NlIDIx\n"
|
||||
"MQ0wCwYDVQQREwQzMDMwMRUwEwYLKwYBBAGCNzwCAQITBEJlcm4xEzARBgsrBgEE\n"
|
||||
"AYI3PAIBAxMCQ0gxGzAZBgNVBA8TElYxLjAsIENsYXVzZSA1LihiKTEbMBkGA1UE\n"
|
||||
"BRMSQ0gtMDM1LjguMDE3LjIxNy03MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\n"
|
||||
"CgKCAQEA6vtopNyjugIQb+OwsjcAN60Uo1ClcnFa+0Eme5MOCQg8khGwux42aRTL\n"
|
||||
"kUfcTrOye4J8ThE5/9Qm32hagA+mPQRWAkQqZKDJCPU7LMEQKzClZs4LYA04Vv32\n"
|
||||
"WFbeSVh3tK6j92tQ8mbtUep1S/dye9j72P1WQxdd2uJrwzQgA3ftEoVJ6lOMEcBS\n"
|
||||
"cR4lfCdFbQMSwfRI3g2BKPfuYZ+Vp90rF/0Si2kNd1CrBYdLhoZFvPFBapdcK9g/\n"
|
||||
"QzBXfoLQb7MZkR3o8HtUOzcmEl7fhvO/8PEh5hJgn/hnLlFW0TIrqd/ag+n4U17V\n"
|
||||
"isDHS13eaSPE7qq1xhfeTda2QBk9/wIDAQABo4ICwDCCArwwHAYDVR0RBBUwE4IR\n"
|
||||
"aWRwLnN3aXNzc2lnbi5uZXQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG\n"
|
||||
"AQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQUs/yd7N1TLOjtmtcB+S16SzcX5W8w\n"
|
||||
"HwYDVR0jBBgwFoAUiHRGbcd8tfpycRnevydeDWjg9ycwgf8GA1UdHwSB9zCB9DBH\n"
|
||||
"oEWgQ4ZBaHR0cDovL2NybC5zd2lzc3NpZ24ubmV0Lzg4NzQ0NjZEQzc3Q0I1RkE3\n"
|
||||
"MjcxMTlERUJGMjc1RTBENjhFMEY3MjcwgaiggaWggaKGgZ9sZGFwOi8vZGlyZWN0\n"
|
||||
"b3J5LnN3aXNzc2lnbi5uZXQvQ049ODg3NDQ2NkRDNzdDQjVGQTcyNzExOURFQkYy\n"
|
||||
"NzVFMEQ2OEUwRjcyNyUyQ089U3dpc3NTaWduJTJDQz1DSD9jZXJ0aWZpY2F0ZVJl\n"
|
||||
"dm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Q2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9p\n"
|
||||
"bnQwYgYDVR0gBFswWTBXBglghXQBWQECAQEwSjBIBggrBgEFBQcCARY8aHR0cDov\n"
|
||||
"L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS9Td2lzc1NpZ24tR29sZC1DUC1DUFMt\n"
|
||||
"UjQucGRmMIHGBggrBgEFBQcBAQSBuTCBtjBkBggrBgEFBQcwAoZYaHR0cDovL3N3\n"
|
||||
"aXNzc2lnbi5uZXQvY2dpLWJpbi9hdXRob3JpdHkvZG93bmxvYWQvODg3NDQ2NkRD\n"
|
||||
"NzdDQjVGQTcyNzExOURFQkYyNzVFMEQ2OEUwRjcyNzBOBggrBgEFBQcwAYZCaHR0\n"
|
||||
"cDovL29jc3Auc3dpc3NzaWduLm5ldC84ODc0NDY2REM3N0NCNUZBNzI3MTE5REVC\n"
|
||||
"RjI3NUUwRDY4RTBGNzI3MA0GCSqGSIb3DQEBBQUAA4IBAQCNpT2u/s/IKqXrWmHX\n"
|
||||
"TTVbW2Kh8xul9jLole+hWXtx8Ln4E8oW+bV25HGUjt8QrC1wXGABRCijgIjQ8PtR\n"
|
||||
"CQrcwJCmC9ShcckP7KXiaETaT67TUB8qIQ/pf3akNeWKcdFGcD6CDYM7umuu1Q1X\n"
|
||||
"326mufNviiqlU0uoK1LJQHhme3HMHarYdzkuIeShvIYHUYP3JnorXaizcCqjBhdF\n"
|
||||
"rj4QcCZx8hKE6gmNL+dJkBM/5CSqByy15tMs2qa0iMdwkPUiNxlL0VuZkwzooVQx\n"
|
||||
"1eKQwsSx3807MkQMKs+4v1LexkY+5/xU9dvtyRysjuSEWS8yCx3+E3fOOVAIX5jD\n"
|
||||
"0uSX\n"
|
||||
"-----END CERTIFICATE-----");
|
||||
const QByteArray SWISSSIGN_SERVER_GOLD_CA_2008_G2
|
||||
("-----BEGIN CERTIFICATE-----\n"
|
||||
"MIIGXjCCBEagAwIBAgIIXsz6acAzJ+8wDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UE\n"
|
||||
"BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEfMB0GA1UEAxMWU3dpc3NTaWdu\n"
|
||||
"IEdvbGQgQ0EgLSBHMjAeFw0wODA3MDcxNzA2MDNaFw0yMzA3MDcxNzA2MDNaMFEx\n"
|
||||
"CzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxKzApBgNVBAMTIlN3\n"
|
||||
"aXNzU2lnbiBTZXJ2ZXIgR29sZCBDQSAyMDA4IC0gRzIwggEiMA0GCSqGSIb3DQEB\n"
|
||||
"AQUAA4IBDwAwggEKAoIBAQDNMradteMVxVvR6t+pOooZejP8r1lY85el0PB7C118\n"
|
||||
"iKYv1Apfq3mZ0wt7ZdpCyd2DzKE338Ki04Qn9IidLCkKDLOSNtlQlw4Yvg12W2bU\n"
|
||||
"/WVaVAeUN0Tn3VeCkdWbSRIbvTGU63X9dp5lbgEm8XyjpLAK3SKABn7dWivfWuBo\n"
|
||||
"oUCy64hJ+fSWljJmqG772Qmc9p3GxfN7/L227JH4SMaOwVcJd0rkvMTi1bWa1XFp\n"
|
||||
"Q3lIlxW91JBEKqBKsru1h7wOq81VwIa3a2pdFgWY8F45G7M2Om9bLL5TiJ3Emkbl\n"
|
||||
"gKIFRX+GztmnQdKdY8c8rpknh/jWr6YiqYm+jV6+crGhAgMBAAGjggJEMIICQDAO\n"
|
||||
"BgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUl3be\n"
|
||||
"CjTlEJpAxOvYnVpTeyHMRz4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn\n"
|
||||
"8O4wgf8GA1UdHwSB9zCB9DBHoEWgQ4ZBaHR0cDovL2NybC5zd2lzc3NpZ24ubmV0\n"
|
||||
"LzVCMjU3Qjk2QTQ2NTUxN0VCODM5RjNDMDc4NjY1RUU4M0FFN0YwRUUwgaiggaWg\n"
|
||||
"gaKGgZ9sZGFwOi8vZGlyZWN0b3J5LnN3aXNzc2lnbi5uZXQvQ049NUIyNTdCOTZB\n"
|
||||
"NDY1NTE3RUI4MzlGM0MwNzg2NjVFRTgzQUU3RjBFRSUyQ089U3dpc3NTaWduJTJD\n"
|
||||
"Qz1DSD9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Q2xhc3M9\n"
|
||||
"Y1JMRGlzdHJpYnV0aW9uUG9pbnQwYgYDVR0gBFswWTBXBglghXQBWQECAQMwSjBI\n"
|
||||
"BggrBgEFBQcCARY8aHR0cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS9Td2lz\n"
|
||||
"c1NpZ24tR29sZC1DUC1DUFMtUjMucGRmMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEF\n"
|
||||
"BQcwAoZYaHR0cDovL3N3aXNzc2lnbi5uZXQvY2dpLWJpbi9hdXRob3JpdHkvZG93\n"
|
||||
"bmxvYWQvNUIyNTdCOTZBNDY1NTE3RUI4MzlGM0MwNzg2NjVFRTgzQUU3RjBFRTAN\n"
|
||||
"BgkqhkiG9w0BAQUFAAOCAgEAPuJBwXDS9McQwt5Gp0xHGpeiTCr4qmBwIKM33x8J\n"
|
||||
"U3xjHQ/ynptuwkI5sqQsUcfuHe6uipqA3lIJoBM8u6M65jg/tZTsLoExFE+DtOf5\n"
|
||||
"pHDvUXMFwhsjv9AbkhL6X1LBZAZEMkOpnuRdR2FD0wy1Kh4Hbel9LwmmaYJdfH5a\n"
|
||||
"tkKVlHsN0b6stJ6zEX0dIgi/7M4FYaAZgoxBS1OijPxFCSl0sFT6UYf0GYXcr6M+\n"
|
||||
"URLc1NBofDHo/lIrTygFNfk7PIvOrBoREiOqNtE5RnuGyJa+tt2y2P3QyGBE6Ppi\n"
|
||||
"e/VCCMJagmH8yel0WhuyDUJE35bpNEL34w+pJKr7ApQ1sT0yh607jGEbl53Y+vFC\n"
|
||||
"Uuwo39MMqzx26notCbj0izccf+nDuW05jFQWmRc6OCI2L9Yw34r+1PQTmQe1TKx6\n"
|
||||
"FqnW3WP66ZwbXfGXwwfqmjcK+42695kQYSLsDfNaxxkCBTkt+MauYgXWiOfzAnYz\n"
|
||||
"R2nMQ/LHTDsTpTMkJ+eA/bHcrUJVkBHNWDiolD5C03oSFY0fPRlSnfXHRpgcOkq8\n"
|
||||
"yI/OYArKo4tvQpAYPnG7ELI/j2grgRx6xutuVMYVmzhr/JnqFto5Eg32hKjA5H5+\n"
|
||||
"c4Ssw1ZaGGMMb9aMFlnJi4SYoXB8MfL+SU/u1K54dM1mV/oFK6e2dtGgaYDdV86v\n"
|
||||
"0qo=\n"
|
||||
"-----END CERTIFICATE-----");
|
||||
const QByteArray SWISSSIGN_GOLD_CA_G2
|
||||
("-----BEGIN CERTIFICATE-----\n"
|
||||
"MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJ\n"
|
||||
"BgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3\n"
|
||||
"aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1\n"
|
||||
"MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFH\n"
|
||||
"MR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG\n"
|
||||
"9w0BAQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJC\n"
|
||||
"Eyq8ZVeCQD5XJM1QiyUqt2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9\n"
|
||||
"lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5CjCA12UNNhPqE21Is8w4ndwtr\n"
|
||||
"vxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpgvd21mWRT\n"
|
||||
"uKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbL\n"
|
||||
"tK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpK\n"
|
||||
"xVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdV\n"
|
||||
"xVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02yMszYF9rNt85m\n"
|
||||
"ndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkOpeUD\n"
|
||||
"DniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59\n"
|
||||
"je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM\n"
|
||||
"gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOB\n"
|
||||
"rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E\n"
|
||||
"FgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64\n"
|
||||
"OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEF\n"
|
||||
"BQcCARYgaHR0cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZI\n"
|
||||
"hvcNAQEFBQADggIBACe645R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhW\n"
|
||||
"fvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g\n"
|
||||
"7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8\n"
|
||||
"AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS\n"
|
||||
"2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5\n"
|
||||
"JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a77KwPJ+HbBIrZXAVUjEa\n"
|
||||
"JM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJkvC24JdVU\n"
|
||||
"orgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7X\n"
|
||||
"dVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG\n"
|
||||
"2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEB\n"
|
||||
"nunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt\n"
|
||||
"Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ\n"
|
||||
"-----END CERTIFICATE-----\n");
|
||||
const QByteArray SWISSSIGN_PLATINUM_CA_G2
|
||||
("-----BEGIN CERTIFICATE-----\n"
|
||||
"MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkG\n"
|
||||
"A1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dp\n"
|
||||
"c3NTaWduIFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYx\n"
|
||||
"MDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWdu\n"
|
||||
"IEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIw\n"
|
||||
"DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZc\n"
|
||||
"ZB/HL37PZ/pEQtZ2Y5Wu669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeT\n"
|
||||
"IsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UFeNSH2XFwMyVTtIc7KZAoNppV\n"
|
||||
"RDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kneWCqv9hbr\n"
|
||||
"S3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky\n"
|
||||
"6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4E\n"
|
||||
"LE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/Q\n"
|
||||
"KTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrYzt3oEBSa/m0j\n"
|
||||
"h26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjydomy\n"
|
||||
"ExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3\n"
|
||||
"HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW\n"
|
||||
"ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGeP\n"
|
||||
"AgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w\n"
|
||||
"HQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv\n"
|
||||
"zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4w\n"
|
||||
"LAYIKwYBBQUHAgEWIGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20v\n"
|
||||
"MA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfF\n"
|
||||
"wUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQX\n"
|
||||
"OHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vl\n"
|
||||
"pqD4U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/Fqd\n"
|
||||
"Oxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cb\n"
|
||||
"OQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8DYSjFyMsSoEJL+WuICI20\n"
|
||||
"MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1BaYEUtLS1\n"
|
||||
"7Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyII\n"
|
||||
"oK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0Ne\n"
|
||||
"bvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsy\n"
|
||||
"mxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z\n"
|
||||
"Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==\n"
|
||||
"-----END CERTIFICATE-----\n");
|
||||
const QByteArray SWISSSIGN_SILVER_CA_G2
|
||||
("-----BEGIN CERTIFICATE-----\n"
|
||||
"MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkG\n"
|
||||
"A1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dp\n"
|
||||
"c3NTaWduIFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAy\n"
|
||||
"NTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBB\n"
|
||||
"RzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkq\n"
|
||||
"hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dO\n"
|
||||
"cbpLj6VzHVxumK4DV644N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gRE\n"
|
||||
"pzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm+/pe7R20nqA1W6GSy/BJkv6F\n"
|
||||
"CgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH6INaUFjp\n"
|
||||
"iou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2\n"
|
||||
"kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aD\n"
|
||||
"Cyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jM\n"
|
||||
"qDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJMoBgs5PAKrYY\n"
|
||||
"C51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBsROop\n"
|
||||
"N4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFu\n"
|
||||
"sB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6\n"
|
||||
"5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEA\n"
|
||||
"AaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV\n"
|
||||
"HQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB\n"
|
||||
"tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggr\n"
|
||||
"BgEFBQcCARYgaHR0cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJ\n"
|
||||
"KoZIhvcNAQEFBQADggIBAHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ\n"
|
||||
"1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEG\n"
|
||||
"DyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcS\n"
|
||||
"H9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpH\n"
|
||||
"kXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE\n"
|
||||
"790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8aRl5xB9+lwW/xekkUV7U\n"
|
||||
"1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqPe97Dh4kQ\n"
|
||||
"mUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNV\n"
|
||||
"V4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29\n"
|
||||
"MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm\n"
|
||||
"0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy\n"
|
||||
"tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u\n"
|
||||
"-----END CERTIFICATE-----\n");
|
||||
|
||||
//! @defgroup browser The SwissBrowser Executable and Main Window
|
||||
//! @defgroup pkcs11 The PKCS#11 Client Authentication
|
||||
//! @defgroup qbrowserlib The Swiss Browser Library
|
||||
//! @defgroup designer Qt Designer Plugin for Browser Related Widgets
|
||||
|
||||
/*! @mainpage The Secure Swiss PKCS#11 WebBrowser
|
||||
|
||||
The browser is divided into a library, @ref qbrowserlib that implements
|
||||
generic browsing utilities, the main @ref browser page that collects
|
||||
those features into a main window, a @ref pkcs11 Post-SuisseID
|
||||
hardware token client authentication and a @ref designer plugin for
|
||||
flexible GUI creation.
|
||||
*/
|
||||
|
||||
//! @addtogroup browser
|
||||
//! @{
|
||||
|
||||
QString TMP;
|
||||
void notrace(QtMsgType, const char*) {
|
||||
return;
|
||||
}
|
||||
|
||||
extern QWEBKIT_EXPORT void qt_drt_overwritePluginDirectories();
|
||||
|
||||
QMap<QString, QString>& env() {
|
||||
static QStringList l(QProcess::systemEnvironment());
|
||||
static QMap<QString, QString> env;
|
||||
if (env.isEmpty())
|
||||
for (QStringList::iterator it(l.begin()); it!=l.end(); ++it) {
|
||||
QStringList v(it->split('='));
|
||||
QString key(*v.begin());
|
||||
QString value((v.pop_front(), v.join("=")));
|
||||
env.insert(key, value);
|
||||
}
|
||||
return env;
|
||||
}
|
||||
|
||||
QString helptext() {
|
||||
return QObject::trUtf8
|
||||
("Usage: %1 [OPTIONS...] [<url> ...]\n"
|
||||
"Options:\n"
|
||||
" -h, --help show this help text\n"
|
||||
" -d, --debug enable verbose debug mode\n"
|
||||
" -t --tmp path temporary folder for data caching\n"
|
||||
" -k, --kiosk no url bar\n"
|
||||
" if you sepcify -k and -s, -k must be first\n"
|
||||
" -q, --quirks alternate user interface\n"
|
||||
" -n, --no-settings don't load or store any settings\n"
|
||||
" --login ask for smartcard password at startup\n"
|
||||
" -l, --lib <file> path to file libengine_act.so\n"
|
||||
" -s, --settings <file>\n"
|
||||
" load settings from <file>\n"
|
||||
" if you sepcify -k and -s, -k must be first\n"
|
||||
" -c, --cert <file> load local client certificate from <file>\n"
|
||||
" -y, --key <file> load local certificate key from <file>\n"
|
||||
" -m, --mime <mime> <ext> <tool>\n"
|
||||
" start <tool> for mimetype <mime>\n"
|
||||
" -b, --bookmarks <file>\n"
|
||||
" load and save bookmarks from and to <file>\n"
|
||||
" -e, --edit-bookmarks\n"
|
||||
" start in bookmark-edition mode\n"
|
||||
" <url> optional full URL\n"
|
||||
"Environment:\n"
|
||||
" LANGUAGE \"de\", \"en\", ... "
|
||||
"(actual: %5)\n"
|
||||
" PROXY_TYPE \"http\" or \"socks\" or \"\" "
|
||||
"(actual: %2)\n"
|
||||
" PROXY_PORT proxy port number (actual: %3)\n"
|
||||
" PROXY_HOST proxy host name (actual: %4)\n"
|
||||
" SWISS_USERAGENT fake user agent (actual: %6)\n"
|
||||
" QT_PLUGIN_PATH path to plugins dir (actual: %7)\n"
|
||||
" QTWEBKIT_PLUGIN_PATH path to netscape plugins (actual: %8)")
|
||||
.arg(QFileInfo(QCoreApplication::arguments().at(0)).fileName())
|
||||
.arg(env()["PROXY_TYPE"]).arg(env()["PROXY_PORT"]).arg(env()["PROXY_HOST"])
|
||||
.arg(env()["LANGUAGE"]).arg(env()["SWISS_USERAGENT"])
|
||||
.arg(env()["QT_PLUGIN_PATH"]).arg(env()["QTWEBKIT_PLUGIN_PATH"]);
|
||||
}
|
||||
|
||||
int main(int argv, char** argc) try {
|
||||
// qInstallMsgHandler(notrace);
|
||||
// std::cout.rdbuf((new std::stringstream)->rdbuf());
|
||||
// std::cerr.rdbuf((new std::stringstream)->rdbuf());
|
||||
// std::clog.rdbuf((new std::stringstream)->rdbuf());
|
||||
//............................................................................
|
||||
QSslConfiguration sslConfig(QSslConfiguration::defaultConfiguration());
|
||||
sslConfig.setProtocol(QSsl::AnyProtocol);
|
||||
sslConfig.setPeerVerifyMode(QSslSocket::AutoVerifyPeer);
|
||||
QList<QSslCertificate> certs(sslConfig.caCertificates());
|
||||
for (QList<QSslCertificate>::iterator cert(certs.begin());
|
||||
cert!=certs.end(); ++cert) {
|
||||
qDebug()<<"CERTIFICATE: "
|
||||
<<cert->issuerInfo(QSslCertificate::Organization)
|
||||
<<cert->issuerInfo(QSslCertificate::CommonName)
|
||||
<<cert->subjectInfo(QSslCertificate::Organization)
|
||||
<<cert->subjectInfo(QSslCertificate::CommonName);
|
||||
}
|
||||
// certs.push_back(QSslCertificate(SWISSSIGN_EV_GOLD_CA_2009_G2));
|
||||
// certs.push_back(QSslCertificate(SWISSSIGN_GOLD_CA_G2));
|
||||
// //certs.push_back(QSslCertificate(SWISSSIGN_SERVER_GOLD_CA_2008_G2));
|
||||
// certs.push_back(QSslCertificate(SWISSSIGN_SILVER_CA_G2));
|
||||
// certs.push_back(QSslCertificate(SWISSSIGN_PLATINUM_CA_G2));
|
||||
// sslConfig.setCaCertificates(certs);
|
||||
//............................................................................
|
||||
QStringList l(QProcess::systemEnvironment());
|
||||
QMap<QString, QString> env;
|
||||
for (QStringList::iterator it(l.begin()); it!=l.end(); ++it) {
|
||||
QStringList v(it->split('='));
|
||||
QString key(*v.begin());
|
||||
QString value((v.pop_front(), v.join("=")));
|
||||
env.insert(key, value);
|
||||
qDebug()<<"env:"<<key<<"="<<value;
|
||||
}
|
||||
//............................................................................
|
||||
QTextCodec* utf8(QTextCodec::codecForName("UTF-8"));
|
||||
QTextCodec::setCodecForCStrings(utf8);
|
||||
QTextCodec::setCodecForLocale(utf8);
|
||||
QTextCodec::setCodecForTr(utf8);
|
||||
QApplication app(argv, argc);
|
||||
app.setWindowIcon(QIcon(":/icons/32x32/swissbrowser.png"));
|
||||
app.setApplicationName(QObject::trUtf8("SwissBrowser", "application name"));
|
||||
app.setWindowIcon(QIcon(":/icons/appicon"));
|
||||
app.setApplicationName(QObject::trUtf8("SwissSurfer", "application name"));
|
||||
app.setApplicationVersion(VERSION);
|
||||
QTranslator qtTranslator;
|
||||
if (env().contains("LANGUAGE")) QLocale::setDefault(env()["LANGUAGE"]);
|
||||
if (env.contains("LANGUAGE")) QLocale::setDefault(env["LANGUAGE"]);
|
||||
qtTranslator.load(":/language/qt_" + QLocale().name());
|
||||
app.installTranslator(&qtTranslator);
|
||||
QTranslator appTranslator;
|
||||
appTranslator.load(":/language/swissbrowser_"+ QLocale().name());
|
||||
appTranslator.load(":/language/swisssurfer_"+ QLocale().name());
|
||||
app.installTranslator(&appTranslator);
|
||||
//............................................................................
|
||||
if (env["PROXY_TYPE"]=="http")
|
||||
QNetworkProxy::setApplicationProxy
|
||||
(QNetworkProxy
|
||||
(QNetworkProxy::HttpProxy,
|
||||
env["PROXY_HOST"], env["PROXY_PORT"].toInt()));
|
||||
if (env["PROXY_TYPE"]=="socks")
|
||||
QNetworkProxy::setApplicationProxy
|
||||
(QNetworkProxy
|
||||
(QNetworkProxy::Socks5Proxy,
|
||||
env["PROXY_HOST"], env["PROXY_PORT"].toInt()));
|
||||
else
|
||||
QNetworkProxyFactory::setUseSystemConfiguration(true);
|
||||
qDebug()<<"***************************************************************";
|
||||
qDebug()<<"Start - Proxy:"
|
||||
<<(QNetworkProxy::applicationProxy().type()==QNetworkProxy::NoProxy
|
||||
? "No Proxy"
|
||||
: (QNetworkProxy::applicationProxy().type()
|
||||
==QNetworkProxy::Socks5Proxy ? "socks" : "http"))
|
||||
<<"Hostname"<<QNetworkProxy::applicationProxy().hostName()
|
||||
<<"Port"<<QNetworkProxy::applicationProxy().port();
|
||||
qDebug()<<"***************************************************************";
|
||||
//----------------------------------------------------------------------------
|
||||
TMP=QDir::toNativeSeparators(QDir::tempPath());
|
||||
QStringList urls;
|
||||
QString actlib
|
||||
#ifdef Q_OS_LINUX
|
||||
@@ -146,20 +311,42 @@ int main(int argv, char** argc) try {
|
||||
bool silent(false);
|
||||
bool quirks(false);
|
||||
bool login(false);
|
||||
qbrowserlib::Settings::MimeTypes mimetypes;
|
||||
QString bookmarks;
|
||||
bool editbookmarks(false);
|
||||
Settings::MimeTypes mimetypes;
|
||||
QStringList args(app.arguments());
|
||||
std::auto_ptr<QSettings> settings
|
||||
(std::auto_ptr<QSettings>(new QSettings("SwissSign", "SwissBrowser")));
|
||||
(std::auto_ptr<QSettings>(new QSettings("SwissSign", "SwissSurfer")));
|
||||
for (QStringList::iterator it(args.begin()); ++it!=args.end();)
|
||||
if (*it=="-h" || *it=="--help" || *it=="-help" || *it=="/?") {
|
||||
std::cout<<helptext().toStdString()<<std::endl;
|
||||
std::cout<<QObject::trUtf8
|
||||
("Usage: %1 [OPTIONS...] [<url> ...]\n"
|
||||
"Options:\n"
|
||||
" -h, --help show this help text\n"
|
||||
" -k, --kiosk no url bar\n"
|
||||
" if you sepcify -k and -s, -k must be first\n"
|
||||
" -q, --quirks alternate user interface\n"
|
||||
" -n, --no-settings don't load or store any settings\n"
|
||||
" --login ask for smartcard password at startup\n"
|
||||
" -l, --lib <file> path to file libengine_act.so\n"
|
||||
" -s, --settings <file>\n"
|
||||
" load settings from <file>\n"
|
||||
" if you sepcify -k and -s, -k must be first\n"
|
||||
" -c, --cert <file> load local client certificate from <file>\n"
|
||||
" -y, --key <file> load local certificate key from <file>\n"
|
||||
" -m, --mime <mime> <ext> <tool>\n"
|
||||
" start <tool> for mimetype <mime>\n"
|
||||
" <url> optional full URL\n"
|
||||
"Environment:\n"
|
||||
" LANGUAGE \"de\", \"en\", ... (actual: %5)\n"
|
||||
" PROXY_TYPE \"http\" or \"socks\" or \"\" (actual: %2)\n"
|
||||
" PROXY_PORT proxy port number (actual: %3)\n"
|
||||
" PROXY_HOST proxy host name (actual: %4)\n"
|
||||
" SWISSSURFER_USERAGENT fake user agent (actual: %6)\n")
|
||||
.arg(QFileInfo(argc[0]).fileName())
|
||||
.arg(env["PROXY_TYPE"]).arg(env["PROXY_PORT"]).arg(env["PROXY_HOST"])
|
||||
.arg(env["LANGUAGE"]).arg(env["SWISSSURFER_USERAGENT"])
|
||||
.toStdString()
|
||||
<<std::endl;
|
||||
return 0;
|
||||
} else if (*it=="-d" || *it=="--debug") {
|
||||
qbrowserlib::Log::DEBUG = true;
|
||||
} else if ((*it=="-t" || *it=="--tmp") && ++it!=args.end()) {
|
||||
TMP=*it;
|
||||
} else if ((*it=="-k" || *it=="--kiosk")) {
|
||||
silent=true;
|
||||
settings.reset();
|
||||
@@ -171,10 +358,6 @@ int main(int argv, char** argc) try {
|
||||
login = true;
|
||||
} else if ((*it=="-l" || *it=="--lib") && ++it!=args.end()) {
|
||||
actlib = *it;
|
||||
} else if ((*it=="-b" || *it=="--bookmarks") && ++it!=args.end()) {
|
||||
bookmarks = *it;
|
||||
} else if ((*it=="-e" || *it=="--edit-bookmarks")) {
|
||||
editbookmarks = true;
|
||||
} else if ((*it=="-s" || *it=="--settings") && ++it!=args.end()) {
|
||||
settings = std::auto_ptr<QSettings>
|
||||
(new QSettings(*it, QSettings::IniFormat));
|
||||
@@ -212,58 +395,21 @@ int main(int argv, char** argc) try {
|
||||
} else if (it!=args.end()) {
|
||||
urls<<*it;
|
||||
} else {
|
||||
std::cerr<<QObject::trUtf8("Too few arguments.\nTry: %1 --help")
|
||||
std::cout<<QObject::trUtf8("Too few arguments.\nTry: %1 --help")
|
||||
.arg(QFileInfo(argc[0]).fileName()).toStdString()<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
TRC_FN;
|
||||
QList<QSslCertificate> certs(sslConfig.caCertificates());
|
||||
for (QList<QSslCertificate>::iterator cert(certs.begin());
|
||||
cert!=certs.end(); ++cert) {
|
||||
LOG<<"CERTIFICATE: "
|
||||
<<cert->issuerInfo(QSslCertificate::Organization)
|
||||
<<cert->issuerInfo(QSslCertificate::CommonName)
|
||||
<<cert->subjectInfo(QSslCertificate::Organization)
|
||||
<<cert->subjectInfo(QSslCertificate::CommonName);
|
||||
}
|
||||
QSslConfiguration::setDefaultConfiguration(sslConfig);
|
||||
//............................................................................
|
||||
if (env()["PROXY_TYPE"]=="http")
|
||||
QNetworkProxy::setApplicationProxy
|
||||
(QNetworkProxy
|
||||
(QNetworkProxy::HttpProxy,
|
||||
env()["PROXY_HOST"], env()["PROXY_PORT"].toInt()));
|
||||
if (env()["PROXY_TYPE"]=="socks")
|
||||
QNetworkProxy::setApplicationProxy
|
||||
(QNetworkProxy
|
||||
(QNetworkProxy::Socks5Proxy,
|
||||
env()["PROXY_HOST"], env()["PROXY_PORT"].toInt()));
|
||||
else
|
||||
QNetworkProxyFactory::setUseSystemConfiguration(true);
|
||||
LOG<<"Start - Proxy:"
|
||||
<<(QNetworkProxy::applicationProxy().type()==QNetworkProxy::NoProxy
|
||||
? "No Proxy"
|
||||
: (QNetworkProxy::applicationProxy().type()
|
||||
==QNetworkProxy::Socks5Proxy ? "socks" : "http"))
|
||||
<<"Hostname"<<QNetworkProxy::applicationProxy().hostName()
|
||||
<<"Port"<<QNetworkProxy::applicationProxy().port();
|
||||
//............................................................................
|
||||
if (env().contains("QTWEBKIT_PLUGIN_PATH"))
|
||||
qt_drt_overwritePluginDirectories();
|
||||
if (env.contains("QTWEBKIT_PLUGIN_PATH")) qt_drt_overwritePluginDirectories();
|
||||
Browser browser(actlib, urls, settings.get(), mimetypes, silent,
|
||||
login, quirks, bookmarks);
|
||||
if (editbookmarks) browser.on_actionEditBookmarks_triggered();
|
||||
login, quirks);
|
||||
return app.exec();
|
||||
} catch (std::exception& x) {
|
||||
TRC_FN; LOG<<"Terminated with Exception"<<x.what();
|
||||
std::cerr<<"**** Terminated with Error:"
|
||||
<<std::endl<<x.what()<<std::endl;
|
||||
std::cerr<<"**** Error: "<<x.what()<<std::endl;
|
||||
return 1;
|
||||
} catch (...) {
|
||||
// unexpected exception - just terminate
|
||||
TRC_FN; LOG<<"Terminated with unknown Exception";
|
||||
std::cerr<<"**** Terminated with unknown Error"<<std::endl;
|
||||
std::cerr<<"**** Error"<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
//! @}
|
||||
|
@@ -5,11 +5,7 @@
|
||||
## 1 2 3 4 5 6 7 8
|
||||
## 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
SUBDIRS = qbrowserlib designer
|
||||
|
||||
UI_FILES=@srcdir@/qbrowserlib/*.ui
|
||||
qbrowserlibdir=${includedir}/qbrowserlib
|
||||
qbrowserlib_HEADERS = @srcdir@/qbrowserlib/*.hxx $(shell ls qbrowserlib/ui_*.h)
|
||||
include_HEADERS =
|
||||
|
||||
if !MINGW32
|
||||
if MAC
|
||||
@@ -29,8 +25,7 @@ mypkg_DATA = @PACKAGENAME@.xpm resources/@PACKAGENAME@.png
|
||||
applicationsdir = ${datarootdir}/applications
|
||||
dist_applications_DATA = @PACKAGENAME@.desktop
|
||||
|
||||
EXTRA_DIST = @srcdir@/resources @srcdir@/*.cxx @srcdir@/*.hxx \
|
||||
@srcdir@/*.ui @srcdir@/*.ts @srcdir@/*.qrc
|
||||
EXTRA_DIST = resources *.cxx *.hxx *.ui *.ts *.qrc
|
||||
|
||||
LANGS = en de fr it
|
||||
ALL_SRC = ${top_srcdir}/src/*.[ch]xx ${top_srcdir}/src/*.ui $(shell find ${top_srcdir}/src/resources -name .svn -prune -o \( -type f -o -type l \) -print)
|
||||
@@ -38,7 +33,7 @@ ALL_SRC = ${top_srcdir}/src/*.[ch]xx ${top_srcdir}/src/*.ui $(shell find ${top_s
|
||||
QMAKE_PROJECT = qmake.pro
|
||||
QMAKE_MAKEFILE = makefile.qmake
|
||||
|
||||
bin_SCRIPTS = swissbrowser
|
||||
bin_SCRIPTS = swisssurfer
|
||||
QMAKE_TARGET = ${bin_SCRIPTS}
|
||||
|
||||
TARGETS = ${QMAKE_TARGET}
|
||||
@@ -86,24 +81,11 @@ ${QMAKE_MAKEFILE}: ${QMAKE_PROJECT} ${ALL_SRC}
|
||||
${QMAKE_TARGET}: ${QMAKE_MAKEFILE} ${ALL_SRC} $(LANGS:%=@PACKAGENAME@_%.qm)
|
||||
make -f ${QMAKE_MAKEFILE}
|
||||
|
||||
install-data-local:
|
||||
${mkinstalldirs} ${DESTDIR}${bindir}
|
||||
for file in ${QMAKE_TARGET}{,.app,.exe}; do \
|
||||
if test -d $$file; then \
|
||||
rsync -a --delete $$file ${DESTDIR}${bindir}/; \
|
||||
elif test -e $$file; then \
|
||||
${INSTALL} $$file ${DESTDIR}${bindir}; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
uninstall-local:
|
||||
-rm -r ${DESTDIR}${bindir}/${QMAKE_TARGET}*
|
||||
|
||||
clean-local:
|
||||
-rm -r ${QMAKE_TARGET}{,.app,.exe}
|
||||
-rm -r ${QMAKE_TARGET}.app
|
||||
|
||||
CLEANFILES = ${TARGETS} ${TARGETS:%=%.exe} $(LANGS:%=@PACKAGENAME@_%.qm) \
|
||||
*.o *.obj qrc_*.cpp ui_*.h moc_*.cpp \
|
||||
${QMAKE_TARGET} object_script.swissbrowser \
|
||||
${QMAKE_TARGET} \
|
||||
@PACKAGENAME@.xpm
|
||||
MAINTAINERCLEANFILES = makefile.in ${QMAKE_MAKEFILE}
|
||||
|
@@ -8,22 +8,23 @@
|
||||
#ifndef __PINDIALOG_HXX__
|
||||
#define __PINDIALOG_HXX__
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <ui_pinentry.h>
|
||||
#include <QtGui/QDialog>
|
||||
#include <QtCore/QDateTime>
|
||||
#include <QtNetwork/QSslCertificate>
|
||||
|
||||
#include <cassert>
|
||||
#include <QtCore/QDebug>
|
||||
#ifndef LOG
|
||||
#define LOG qDebug()<<__PRETTY_FUNCTION__
|
||||
#endif
|
||||
|
||||
class PinEntry: public QDialog, public Ui::PinEntry {
|
||||
Q_OBJECT;
|
||||
public:
|
||||
PinEntry(const QSslCertificate& cert, QWidget *parent=0): QDialog(parent) {
|
||||
setModal(true);
|
||||
setupUi(this);
|
||||
_cert->certificate(cert);
|
||||
on__showDetails_toggled(false);
|
||||
_name->setText(utfConv(cert.subjectInfo(QSslCertificate::CommonName))
|
||||
.remove(" (Authentication)"));
|
||||
_mail->setText(utfConv(cert.alternateSubjectNames()
|
||||
@@ -46,8 +47,7 @@ class PinEntry: public QDialog, public Ui::PinEntry {
|
||||
return _pin->text();
|
||||
}
|
||||
int myexec() {
|
||||
TRC;
|
||||
_pin->clear();
|
||||
LOG;
|
||||
show();
|
||||
LOG<<"SSSSSSSSSTTTTTTTAAAAAAAAAAAAARRRRRRRRRRTTTTTTTTTT";
|
||||
int res(_run.exec(QEventLoop::ExcludeSocketNotifiers));
|
||||
@@ -57,24 +57,23 @@ class PinEntry: public QDialog, public Ui::PinEntry {
|
||||
}
|
||||
public Q_SLOTS:
|
||||
virtual void accept() {
|
||||
TRC;
|
||||
LOG;
|
||||
QDialog::accept();
|
||||
}
|
||||
virtual void done(int r) {
|
||||
TRC; LOG<<r;
|
||||
LOG<<r;
|
||||
_run.exit(r);
|
||||
assert(!_run.isRunning());
|
||||
LOG<<"DDDDDDDDOOOOOOOOOOOONNNNNNNNNNNEEEEEEE";
|
||||
QDialog::done(r);
|
||||
}
|
||||
virtual void reject() {
|
||||
TRC;
|
||||
LOG;
|
||||
QDialog::reject();
|
||||
}
|
||||
protected Q_SLOTS:
|
||||
void on__showDetails_toggled(bool s) {
|
||||
_cert->setVisible(s);
|
||||
adjustSize();
|
||||
_certStack->setCurrentIndex(s?1:0);
|
||||
}
|
||||
protected:
|
||||
QString utfConv(const QString& txt) {
|
||||
|
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>668</width>
|
||||
<height>602</height>
|
||||
<width>603</width>
|
||||
<height>494</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -169,13 +169,25 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Certificate" name="_cert" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
<widget class="QStackedWidget" name="_certStack">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="page_4"/>
|
||||
<widget class="QWidget" name="page_5">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<widget class="Certificate" name="_cert" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
60
src/pluginfactory.hxx
Normal file
@@ -0,0 +1,60 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef __PLUGINFACTORY_HXX__
|
||||
#define __PLUGINFACTORY_HXX__
|
||||
|
||||
#include <QtWebKit/QWebPluginFactory>
|
||||
#include <saveorrun.hxx>
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
#ifndef LOG
|
||||
#define LOG qDebug()<<__PRETTY_FUNCTION__
|
||||
#endif
|
||||
|
||||
#define foreach(A, B) \
|
||||
auto foreach_loopvar_##A(B); \
|
||||
for (auto A(foreach_loopvar_##A.begin()); A!=foreach_loopvar_##A.end(); ++A)
|
||||
|
||||
class PluginFactory: public QWebPluginFactory {
|
||||
public:
|
||||
PluginFactory(QObject* p=0): QWebPluginFactory(p) {
|
||||
LOG;
|
||||
Plugin plugin;
|
||||
plugin.name = "Show PDF-Document";
|
||||
plugin.description = "Plugin for PDF documents";
|
||||
MimeType mime;
|
||||
mime.fileExtensions<<"pdf";
|
||||
mime.name = "application/pdf";
|
||||
mime.description = "PDF-Document";
|
||||
plugin.mimeTypes<<mime;
|
||||
_plugins.push_back(plugin);
|
||||
}
|
||||
virtual QObject* create(const QString& mimeType, const QUrl& url,
|
||||
const QStringList& argumentNames,
|
||||
const QStringList& argumentValues ) const {
|
||||
LOG<<"mimeType:"<<mimeType
|
||||
<<"url:"<<url
|
||||
<<"argumentNames:"<<argumentNames.join(", ")
|
||||
<<"argumentValues:"<<argumentValues.join(", ");
|
||||
if (mimeType=="application/pdf") {
|
||||
return new SaveOrRunPlugin(url, mimeType);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
virtual QList<Plugin> plugins() const {
|
||||
LOG;
|
||||
return _plugins;
|
||||
}
|
||||
virtual void refreshPlugins() {
|
||||
LOG;
|
||||
}
|
||||
private:
|
||||
QList<Plugin> _plugins;
|
||||
};
|
||||
|
||||
#endif
|
@@ -1,77 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef __BUTTONLINEEDIT_HXX__
|
||||
#define __BUTTONLINEEDIT_HXX__
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <QtGui/QLineEdit>
|
||||
#include <QtGui/QToolButton>
|
||||
#include <QtGui/QAction>
|
||||
#include <QtGui/QStyle>
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
//! @addtogroup qbrowserlib
|
||||
//! @{
|
||||
|
||||
//! A QLineEdit that may have buttons to the right within the lineedit.
|
||||
class ButtonLineEdit: public QLineEdit {
|
||||
Q_OBJECT;
|
||||
public:
|
||||
ButtonLineEdit(QWidget* p=0): QLineEdit(p) {
|
||||
TRC;
|
||||
}
|
||||
QToolButton* add(QAction* a) {
|
||||
TRC;
|
||||
QToolButton* b(new QToolButton(this));
|
||||
b->setDefaultAction(a);
|
||||
add(b);
|
||||
return b;
|
||||
}
|
||||
ButtonLineEdit& add(QToolButton* b) {
|
||||
TRC;
|
||||
b->setParent(this);
|
||||
b->setStyleSheet("QToolButton { border: none; padding: 0; }");
|
||||
b->setCursor(Qt::ArrowCursor);
|
||||
_buttons.push_back(b);
|
||||
resizeEvent(0);
|
||||
return *this;
|
||||
}
|
||||
ButtonLineEdit& changeStyleSheet(QString s) {
|
||||
TRC;
|
||||
_style = s;
|
||||
resizeEvent(0);
|
||||
return *this;
|
||||
}
|
||||
static void foreachActionWidget(QAction& a, void(QWidget::*f)()) {
|
||||
QList<QWidget*> widgets(a.associatedWidgets());
|
||||
for (QList<QWidget*>::iterator w(widgets.begin()); w!=widgets.end(); ++w)
|
||||
((*w)->*f)();
|
||||
}
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent*) {
|
||||
QSize sz;
|
||||
int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
|
||||
for (Buttons::iterator it(_buttons.begin());
|
||||
it!=_buttons.end(); ++it) {
|
||||
if (sz.isEmpty()) sz = (*it)->sizeHint();
|
||||
else sz.setWidth(sz.width()+(*it)->sizeHint().width());
|
||||
(*it)->move(rect().right() - frameWidth - sz.width(),
|
||||
(rect().bottom() + 1 - (*it)->sizeHint().height())/2);
|
||||
}
|
||||
setStyleSheet(QString("QLineEdit { padding-right: %1px; %2 }")
|
||||
.arg(sz.width() + frameWidth + 1)
|
||||
.arg(_style));
|
||||
}
|
||||
private:
|
||||
typedef QList<QToolButton*> Buttons;
|
||||
Buttons _buttons;
|
||||
QString _style;
|
||||
};
|
||||
|
||||
//! @}
|
||||
#endif
|
@@ -1,20 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#include <qbrowserlib/certs.hxx>
|
||||
|
||||
namespace qbrowserlib {
|
||||
#if defined(Q_OS_LINUX)
|
||||
const QString LIBNAME("libcvP11.so");
|
||||
#elif defined(Q_OS_MAC)
|
||||
const QString LIBNAME("libcvP11.dylib");
|
||||
#elif defined(Q_OS_WIN)
|
||||
const QString LIBNAME("cvP11.dll");
|
||||
#else
|
||||
const QString LIBNAME;
|
||||
#endif
|
||||
}
|
@@ -1,68 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef __QBROWSERLIB_CERTS_HXX__
|
||||
#define __QBROWSERLIB_CERTS_HXX__
|
||||
|
||||
#include <cryptoki.hxx>
|
||||
#include <QtCore/QList>
|
||||
#include <QtNetwork/QSslCertificate>
|
||||
|
||||
namespace qbrowserlib {
|
||||
|
||||
extern const QString LIBNAME;
|
||||
|
||||
//! Access certificate information from cryptoki library.
|
||||
/*! Advice: Keep one instance per executable, because library is
|
||||
loaded, instanciated and unloaded on each object creation or
|
||||
deletion. */
|
||||
class Certs {
|
||||
|
||||
public:
|
||||
|
||||
//! Initialize cryptoki library.
|
||||
/*! Advice: Keep one instance per executable, because library is
|
||||
loaded, instanciated and unloaded on each object creation or
|
||||
deletion.
|
||||
|
||||
@throws throws std::exception in case of error */
|
||||
Certs(const QString& lib = LIBNAME): _cryptoki(lib.toStdString()) {}
|
||||
|
||||
//! Get a list of authentification certificates.
|
||||
/*! @throws throws std::exception in case of error */
|
||||
QList<QSslCertificate> auth() {
|
||||
QList<QSslCertificate> authCerts;
|
||||
cryptoki::SlotList slotlist(_cryptoki.slotList());
|
||||
for (cryptoki::SlotList::iterator slot(slotlist.begin());
|
||||
slot!=slotlist.end(); ++slot) {
|
||||
cryptoki::Session session(*slot);
|
||||
cryptoki::ObjectList certs(session.find
|
||||
(cryptoki::Attribute(CKA_CLASS)
|
||||
.from<CK_OBJECT_CLASS>(CKO_CERTIFICATE)));
|
||||
for (cryptoki::ObjectList::iterator cert(certs.begin());
|
||||
cert!=certs.end(); ++cert) {
|
||||
cryptoki::Attribute label(cert->attribute(CKA_LABEL));
|
||||
if (label.value.find("auth")==0 ||
|
||||
label.value.find("Authentication")!=std::string::npos) {
|
||||
std::string data(cert->attribute(CKA_VALUE).value);
|
||||
authCerts.push_back(QSslCertificate(QByteArray(data.data(),
|
||||
data.size()),
|
||||
QSsl::Der));
|
||||
}
|
||||
}
|
||||
}
|
||||
return authCerts;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
cryptoki::Init _cryptoki;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
#endif
|
@@ -1,118 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef QBROWSERLIB_EXECUTOR_HXX
|
||||
#define QBROWSERLIB_EXECUTOR_HXX
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <qbrowserlib/settings.hxx>
|
||||
#include <qbrowserlib/temporaryfile.hxx>
|
||||
|
||||
#include <QtCore/QDir>
|
||||
#include <QtCore/QProcess>
|
||||
#include <QtNetwork/QNetworkReply>
|
||||
|
||||
namespace qbrowserlib {
|
||||
|
||||
class Executor: public QObject {
|
||||
|
||||
Q_OBJECT;
|
||||
|
||||
signals:
|
||||
|
||||
void applicationStarted();
|
||||
void applicationFinished();
|
||||
|
||||
public:
|
||||
|
||||
Executor(Settings* settings=0): _settings(settings) {}
|
||||
|
||||
~Executor() {
|
||||
TRC;
|
||||
for (DownloadProcesses::iterator it(_downloadProcesses.begin());
|
||||
it!=_downloadProcesses.end(); ++it) {
|
||||
LOG<<"cleanup:"<<it->second->fileName();
|
||||
it->second->setAutoRemove(_settings && _settings->flag("CloseApps"));
|
||||
delete it->second;
|
||||
it->second = 0;
|
||||
if (_settings && _settings->flag("CloseApps")) {
|
||||
LOG<<"terminate process";
|
||||
it->first->terminate();
|
||||
delete it->first;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Settings* settings() {
|
||||
return _settings;
|
||||
}
|
||||
|
||||
public Q_SLOTS:
|
||||
|
||||
void run(QNetworkReply* reply, QString filename, QString command) {
|
||||
TRC; LOG<<filename<<command;
|
||||
_reply = reply;
|
||||
_filename = filename;
|
||||
_command = command;
|
||||
if (_reply->isFinished()) {
|
||||
LOG<<"run immediate";
|
||||
downloadFinished();
|
||||
} else {
|
||||
LOG<<"run later";
|
||||
assert(connect(reply, SIGNAL(finished()), SLOT(downloadFinished())));
|
||||
}
|
||||
}
|
||||
|
||||
private Q_SLOTS:
|
||||
|
||||
void downloadFinished() {
|
||||
TRC;
|
||||
TemporaryFile *file(new TemporaryFile
|
||||
(QDir::tempPath()+QDir::separator()
|
||||
+QFileInfo(_filename).fileName()));
|
||||
file->open();
|
||||
_reply->seek(0);
|
||||
file->write(_reply->readAll());
|
||||
file->close();
|
||||
LOG<<"Stored as:"<<file->fileName();
|
||||
QProcess* process(new QProcess);
|
||||
_downloadProcesses[process] = file;
|
||||
assert(connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
|
||||
SLOT(processFinished())));
|
||||
QStringList args(_command.split(" ")
|
||||
.replaceInStrings("%1", file->fileName()));
|
||||
QString prg(args.takeFirst());
|
||||
LOG<<"Running:"<<prg<<args.join(" ");
|
||||
process->start(prg, args);
|
||||
applicationStarted();
|
||||
}
|
||||
|
||||
void processFinished() {
|
||||
TRC;
|
||||
if (_downloadProcesses.find(qobject_cast<QProcess*>(sender()))
|
||||
== _downloadProcesses.end()) return;
|
||||
if (_downloadProcesses[qobject_cast<QProcess*>(sender())])
|
||||
_downloadProcesses[qobject_cast<QProcess*>(sender())]
|
||||
->setAutoRemove(_settings && _settings->flag("CloseApps"));
|
||||
delete _downloadProcesses[qobject_cast<QProcess*>(sender())];
|
||||
_downloadProcesses.erase(qobject_cast<QProcess*>(sender()));
|
||||
applicationFinished();
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
typedef std::map<QProcess*, TemporaryFile*> DownloadProcesses;
|
||||
DownloadProcesses _downloadProcesses;
|
||||
Settings* _settings;
|
||||
QNetworkReply* _reply;
|
||||
QString _filename;
|
||||
QString _command;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
@@ -1,113 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <QtCore/QFile>
|
||||
#include <QtCore/QDir>
|
||||
#include <QtCore/QFileInfo>
|
||||
#include <QtCore/QString>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QTimer>
|
||||
#include <QtCore/QDateTime>
|
||||
|
||||
#include <cassert>
|
||||
|
||||
//! Store string lists.
|
||||
/** Abstract storage interface to string lists, such as bookmarks. */
|
||||
class Storage: public QObject {
|
||||
Q_OBJECT;
|
||||
Q_SIGNALS:
|
||||
//! Emitted if file content has changed.
|
||||
void changed();
|
||||
public:
|
||||
Storage() {
|
||||
TRC;
|
||||
}
|
||||
~Storage() {
|
||||
TRC;
|
||||
}
|
||||
/*! @return true if readable or writable */
|
||||
bool valid() {
|
||||
return readable() || writeable();
|
||||
}
|
||||
/*! @return true if valid */
|
||||
operator bool() {
|
||||
return valid();
|
||||
}
|
||||
/*! @return name of the storage, e.g. filename */
|
||||
virtual QString name() = 0;
|
||||
/*! @return true if storage object already exists */
|
||||
virtual bool readable() = 0;
|
||||
/*! @return true if storage object exists or could be created */
|
||||
virtual bool writeable() = 0;
|
||||
/*! @return storage content as string list */
|
||||
virtual QStringList read() = 0;
|
||||
//! Writes storage content from string list.
|
||||
virtual bool write(const QStringList& out) = 0;
|
||||
public Q_SLOTS:
|
||||
void emitChanged() {
|
||||
TRC;
|
||||
changed();
|
||||
}
|
||||
};
|
||||
|
||||
//! Implement @ref Storage for files.
|
||||
class FileStorage: public Storage {
|
||||
Q_OBJECT;
|
||||
public:
|
||||
/*! @param file full path to storage file */
|
||||
FileStorage(QString file, int msec=1000): _file(file) {
|
||||
TRC; LOG<<"file: "<<file;
|
||||
assert(connect(&_timer, SIGNAL(timeout()), SLOT(check())));
|
||||
_timer.setInterval(msec);
|
||||
_timer.start();
|
||||
}
|
||||
QString name() {
|
||||
return _file.fileName();
|
||||
}
|
||||
bool readable() {
|
||||
return QFileInfo(_file).exists();
|
||||
}
|
||||
bool writeable() {
|
||||
return readable() ||
|
||||
(!_file.fileName().isEmpty() &&
|
||||
QFileInfo(_file).absoluteDir().exists());
|
||||
}
|
||||
QStringList read() {
|
||||
TRC;
|
||||
QStringList res;
|
||||
if (readable()) {
|
||||
if (_file.open(QIODevice::ReadOnly))
|
||||
res=QString::fromUtf8(_file.readAll()).split("\n");
|
||||
_file.close();
|
||||
}
|
||||
return res;
|
||||
}
|
||||
bool write(const QStringList& out) {
|
||||
TRC;
|
||||
bool res(false);
|
||||
if (writeable()) {
|
||||
if (_file.open(QIODevice::WriteOnly))
|
||||
if (_file.write(out.join("\n").toUtf8())>=0) res=true;
|
||||
_file.close();
|
||||
}
|
||||
return res;
|
||||
}
|
||||
private Q_SLOTS:
|
||||
void check() {
|
||||
if (_modified!=QFileInfo(_file).lastModified()) {
|
||||
TRC;
|
||||
_modified = QFileInfo(_file).lastModified();
|
||||
LOG<<"file has been modified"<<_modified.toString();
|
||||
emitChanged();
|
||||
}
|
||||
}
|
||||
private:
|
||||
QFile _file;
|
||||
QDateTime _modified;
|
||||
QTimer _timer;
|
||||
};
|
@@ -1,8 +0,0 @@
|
||||
<RCC>
|
||||
<qresource prefix="/language">
|
||||
<file>qbrowserlib_de.qm</file>
|
||||
<file>qbrowserlib_fr.qm</file>
|
||||
<file>qbrowserlib_it.qm</file>
|
||||
<file>qbrowserlib_en.qm</file>
|
||||
</qresource>
|
||||
</RCC>
|
@@ -1,100 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
|
||||
namespace qbrowserlib {
|
||||
|
||||
bool Log::DEBUG(false);
|
||||
LogDialog* Log::_dialog(0);
|
||||
unsigned int Log::_level(0);
|
||||
|
||||
Log::Log(const void* addr, const std::string& name,
|
||||
const std::string& file, unsigned long line):
|
||||
_debug(DEBUG), _addr(addr), _name(name), _file(file), _line(line) {
|
||||
if (!_debug) return;
|
||||
++_level;
|
||||
std::stringstream ss;
|
||||
init(ss);
|
||||
indent(ss)<<"\\ "<<_name;
|
||||
std::clog<<close(ss).str()<<std::endl;
|
||||
}
|
||||
|
||||
Log::~Log() throw() {
|
||||
if (!_debug) return;
|
||||
std::stringstream ss;
|
||||
init(ss);
|
||||
indent(ss)<<"/ "<<_name;
|
||||
std::clog<<close(ss).str()<<std::endl;
|
||||
--_level;
|
||||
}
|
||||
|
||||
void Log::show(QWidget* p) {
|
||||
if (!_dialog)
|
||||
_dialog = new LogDialog(p);
|
||||
_dialog->_logs->resizeColumnsToContents();
|
||||
_dialog->_logs->resizeRowsToContents();
|
||||
_dialog->show();
|
||||
}
|
||||
|
||||
std::stringstream& Log::init(std::stringstream& ss) {
|
||||
if (_addr)
|
||||
ss<<std::hex<<std::setw(15)<<_addr<<": "<<std::dec;
|
||||
else
|
||||
ss<<std::setw(17)<<' ';
|
||||
return ss;
|
||||
}
|
||||
|
||||
std::stringstream& Log::indent(std::stringstream& ss) {
|
||||
ss<<std::setw(2+_level)<<std::setfill(' ');
|
||||
return ss;
|
||||
}
|
||||
|
||||
std::stringstream& Log::close(std::stringstream& ss) {
|
||||
ss<<" ("<<_file<<':'<<_line<<')';
|
||||
return ss;
|
||||
}
|
||||
|
||||
template<> LogDialog& LogDialog::append
|
||||
(const Log& log, std::string arg) {
|
||||
return append(log, QString::fromStdString(arg));
|
||||
}
|
||||
template<> LogDialog& LogDialog::append
|
||||
(const Log& log, const char* arg) {
|
||||
return append(log, QString(arg));
|
||||
}
|
||||
template<> LogDialog& LogDialog::append
|
||||
(const Log& log, unsigned long arg) {
|
||||
return append(log, (qulonglong)arg);
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& ss, QString arg) {
|
||||
ss<<'"'<<arg.toStdString()<<'"';
|
||||
return ss;
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& ss, QStringList arg) {
|
||||
ss<<"{ ";
|
||||
for (QStringList::iterator item(arg.begin()); item!=arg.end();) {
|
||||
ss<<*item;
|
||||
if (++item!=arg.end()) ss<<", ";
|
||||
}
|
||||
ss<<" }";
|
||||
return ss;
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& ss, QUrl arg) {
|
||||
ss<<arg.toString();
|
||||
return ss;
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& ss, QByteArray arg) {
|
||||
ss<<QString::fromUtf8(arg);
|
||||
return ss;
|
||||
}
|
||||
|
||||
}
|
@@ -1,217 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef QBROWSERLIB_LOG
|
||||
#define QBROWSERLIB_LOG
|
||||
|
||||
#ifdef QT_GUI_LIB
|
||||
#include <qbrowserlib/ui_log.h>
|
||||
#include <QtGui/QDialog>
|
||||
#endif
|
||||
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <typeinfo>
|
||||
|
||||
// supported Qt logging types
|
||||
#include <QtCore/QString>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QUrl>
|
||||
#include <QtCore/QByteArray>
|
||||
|
||||
namespace qbrowserlib {
|
||||
|
||||
#ifndef LOG
|
||||
#define LOG \
|
||||
QBROWSERLIB_LOCAL_TRACER
|
||||
// #define LOG
|
||||
// qbrowserlib::Log(1, __PRETTY_FUNCTION__, __FILE__, __LINE__)
|
||||
#endif
|
||||
|
||||
#ifndef TRC
|
||||
#define TRC \
|
||||
qbrowserlib::Log QBROWSERLIB_LOCAL_TRACER \
|
||||
(this, __PRETTY_FUNCTION__, __FILE__, __LINE__)
|
||||
#endif
|
||||
|
||||
#ifndef TRC_FN
|
||||
#define TRC_FN \
|
||||
qbrowserlib::Log QBROWSERLIB_LOCAL_TRACER \
|
||||
(0, __PRETTY_FUNCTION__, __FILE__, __LINE__)
|
||||
#endif
|
||||
|
||||
class LogDialog;
|
||||
|
||||
class Log {
|
||||
|
||||
public:
|
||||
|
||||
static bool DEBUG;
|
||||
|
||||
public:
|
||||
|
||||
Log(const void* addr, const std::string& name,
|
||||
const std::string& file, unsigned long line);
|
||||
|
||||
template<typename TYPE> Log& operator<<(TYPE arg);
|
||||
|
||||
~Log() throw();
|
||||
|
||||
static void show(QWidget* p);
|
||||
|
||||
private:
|
||||
|
||||
std::stringstream& init(std::stringstream& ss);
|
||||
|
||||
std::stringstream& indent(std::stringstream& ss);
|
||||
|
||||
std::stringstream& close(std::stringstream& ss);
|
||||
|
||||
private:
|
||||
|
||||
friend class LogDialog;
|
||||
|
||||
static LogDialog* _dialog;
|
||||
static unsigned int _level;
|
||||
bool _debug;
|
||||
const void* _addr;
|
||||
const std::string _name;
|
||||
const std::string _file;
|
||||
unsigned long _line;
|
||||
};
|
||||
|
||||
class LogDialog:
|
||||
#ifdef QT_GUI_LIB
|
||||
public QDialog, public Ui::LogDialog
|
||||
#else
|
||||
public QObject
|
||||
#endif
|
||||
{
|
||||
|
||||
Q_OBJECT;
|
||||
|
||||
public:
|
||||
|
||||
#ifdef QT_GUI_LIB
|
||||
LogDialog(QWidget* p=0): QDialog(p) {
|
||||
setupUi(this);
|
||||
}
|
||||
#endif
|
||||
|
||||
template<typename TYPE> LogDialog& append(const Log& log, TYPE* arg) {
|
||||
std::ostringstream ss;
|
||||
ss<<"("<<typeid(TYPE*).name()<<")"<<arg;
|
||||
return append(log, ss.str());
|
||||
}
|
||||
|
||||
template<typename TYPE> LogDialog& append(const Log& log, TYPE arg) {
|
||||
#ifdef QT_GUI_LIB
|
||||
int pos(_logs->rowCount());
|
||||
_logs->insertRow(pos);
|
||||
_logs->setItem
|
||||
(pos, FILE,
|
||||
new QTableWidgetItem(QString::fromStdString(log._file)));
|
||||
_logs->setItem
|
||||
(pos, LINE, new QTableWidgetItem(QString::number(log._line)));
|
||||
if (log._addr) _logs->setItem
|
||||
(pos, INSTANCE,
|
||||
new QTableWidgetItem
|
||||
(QString::number((qulonglong)log._addr)));
|
||||
_logs->setItem
|
||||
(pos, FUNCTION,
|
||||
new QTableWidgetItem(QString::fromStdString(log._name)));
|
||||
_logs->setItem
|
||||
(pos, MESSAGE,
|
||||
new QTableWidgetItem(QVariant(arg).toString()));
|
||||
#endif
|
||||
return *this;
|
||||
}
|
||||
|
||||
protected Q_SLOTS:
|
||||
|
||||
#ifdef QT_GUI_LIB
|
||||
void on__fileLine_toggled(bool checked) {
|
||||
if (checked) {
|
||||
_logs->showColumn(FILE);
|
||||
_logs->showColumn(LINE);
|
||||
} else {
|
||||
_logs->hideColumn(FILE);
|
||||
_logs->hideColumn(LINE);
|
||||
}
|
||||
}
|
||||
|
||||
void on__instance_toggled(bool checked) {
|
||||
if (checked) {
|
||||
_logs->showColumn(INSTANCE);
|
||||
} else {
|
||||
_logs->hideColumn(INSTANCE);
|
||||
}
|
||||
}
|
||||
|
||||
void on__function_toggled(bool checked) {
|
||||
if (checked) {
|
||||
_logs->showColumn(FUNCTION);
|
||||
} else {
|
||||
_logs->hideColumn(FUNCTION);
|
||||
}
|
||||
}
|
||||
|
||||
void on__buttons_clicked(QAbstractButton* button) {
|
||||
if (_buttons->buttonRole(button)==QDialogButtonBox::ResetRole)
|
||||
for (int i(_logs->rowCount()); i>1; --i)
|
||||
_logs->removeRow(i-1);
|
||||
}
|
||||
|
||||
void on__find_clicked(bool) {
|
||||
setCursor(QCursor(Qt::BusyCursor));
|
||||
QList<QTableWidgetItem*> items
|
||||
(_logs->findItems(_search->text(),
|
||||
Qt::MatchWrap|Qt::MatchContains
|
||||
|Qt::MatchFixedString));
|
||||
_logs->clearSelection();
|
||||
foreach (QTableWidgetItem* item, items) {
|
||||
item->setSelected(true);
|
||||
}
|
||||
if (!items.isEmpty()) _logs->scrollToItem(items[0]);
|
||||
unsetCursor();
|
||||
}
|
||||
#endif
|
||||
|
||||
private:
|
||||
|
||||
friend class Log;
|
||||
enum {FILE, LINE, INSTANCE, FUNCTION, MESSAGE} Columns;
|
||||
|
||||
};
|
||||
|
||||
// note: template class method must be defined in the header
|
||||
template<typename TYPE> Log& Log::operator<<(TYPE arg) {
|
||||
if (!_debug) return *this;
|
||||
std::stringstream ss;
|
||||
init(ss);
|
||||
indent(ss)<<" → "<<arg;
|
||||
std::clog<<close(ss).str()<<std::endl;
|
||||
if (!_dialog) _dialog = new LogDialog;
|
||||
_dialog->append(*this, arg);
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<> LogDialog& LogDialog::append
|
||||
(const Log& log, const char* arg);
|
||||
template<> LogDialog& LogDialog::append
|
||||
(const Log& log, std::string arg);
|
||||
template<> LogDialog& LogDialog::append
|
||||
(const Log& log, unsigned long arg);
|
||||
|
||||
std::ostream& operator<<(std::ostream& ss, QString arg);
|
||||
std::ostream& operator<<(std::ostream& ss, QStringList arg);
|
||||
std::ostream& operator<<(std::ostream& ss, QUrl arg);
|
||||
std::ostream& operator<<(std::ostream& ss, QByteArray arg);
|
||||
}
|
||||
|
||||
#endif
|
@@ -1,203 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>LogDialog</class>
|
||||
<widget class="QDialog" name="LogDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>957</width>
|
||||
<height>736</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Debug Log</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Show Columns</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="_fileLine">
|
||||
<property name="text">
|
||||
<string>File/Line</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="_instance">
|
||||
<property name="text">
|
||||
<string>Instance</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="_function">
|
||||
<property name="text">
|
||||
<string>Function</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Find Text</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="_search"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="_find">
|
||||
<property name="text">
|
||||
<string>Find</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTableWidget" name="_logs">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="dragDropOverwriteMode">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::NoSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderCascadingSectionResizes">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="horizontalHeaderStretchLastSection">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderCascadingSectionResizes">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>File</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignLeft|AlignTop</set>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Line</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignLeft|AlignTop</set>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Instance</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignLeft|AlignTop</set>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Function</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignLeft|AlignTop</set>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Message</string>
|
||||
</property>
|
||||
<property name="textAlignment">
|
||||
<set>AlignJustify|AlignTop</set>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="_buttons">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Close|QDialogButtonBox::Reset</set>
|
||||
</property>
|
||||
<property name="centerButtons">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>_buttons</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>LogDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>227</x>
|
||||
<y>640</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>_buttons</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>LogDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>295</x>
|
||||
<y>646</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
@@ -1,95 +0,0 @@
|
||||
## @file
|
||||
##
|
||||
## $Id: makefile.am 7 2010-03-01 14:55:44Z marc $
|
||||
##
|
||||
## 1 2 3 4 5 6 7 8
|
||||
## 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
include_HEADERS =
|
||||
|
||||
if !MINGW32
|
||||
if MAC
|
||||
AM_CPPFLAGS += -I/opt/local/include
|
||||
# -I/Library/OpenSC/include
|
||||
AM_LDFLAGS = -L/opt/local/lib
|
||||
# -F/System/Library/Frameworks/PCSC.framework
|
||||
else
|
||||
# AM_CPPFLAGS += -I/usr/include/PCSC
|
||||
endif
|
||||
endif
|
||||
|
||||
EXTRA_DIST = @srcdir@/*.[ch]xx @srcdir@/*.ui @srcdir@/*.ts @srcdir@/languages.qrc.in
|
||||
|
||||
LANGS = en de fr it
|
||||
ALL_SRC = @srcdir@/*.[ch]xx \
|
||||
languages.qrc \
|
||||
@srcdir@/*.ui
|
||||
|
||||
QMAKE_PROJECT = @srcdir@/qmake.pro
|
||||
QMAKE_MAKEFILE = makefile.qmake
|
||||
|
||||
QMAKE_TARGET = qbrowserlib
|
||||
|
||||
TARGETS = ${QMAKE_TARGET}
|
||||
|
||||
all: ${TARGETS} $(LANGS:%=@srcdir@/qbrowserlib_%.ts)
|
||||
|
||||
rebuild-ts: $(LANGS)
|
||||
${LUPDATE} @LUPDATE_ARGS@ ${QMAKE_PROJECT}
|
||||
|
||||
${LANGS}: ${ALL_SRC}
|
||||
-rm qbrowserlib_$@.qm
|
||||
svn revert @srcdir@/qbrowserlib_$@.ts
|
||||
mv @srcdir@/qbrowserlib_$@.ts translation.old
|
||||
${LUPDATE} @LUPDATE_ARGS@ ${QMAKE_PROJECT}
|
||||
mv @srcdir@/qbrowserlib_$@.ts translation.new
|
||||
echo '<?xml version="1.0" encoding="utf-8"?>' > @srcdir@/qbrowserlib_$@.ts
|
||||
echo '<!DOCTYPE TS>' >> @srcdir@/qbrowserlib_$@.ts
|
||||
echo '<TS version="2.0" language="'$@'">' >> @srcdir@/qbrowserlib_$@.ts
|
||||
xqilla merge-translation.xquery >> @srcdir@/qbrowserlib_$@.ts
|
||||
echo '</TS>' >> @srcdir@/qbrowserlib_$@.ts
|
||||
rm translation.old translation.new
|
||||
|
||||
print:
|
||||
@echo "LANGS=${LANGS}"
|
||||
@echo "ALL_SRC=${ALL_SRC}"
|
||||
@echo "QMAKE=${QMAKE}"
|
||||
@echo "QMAKE_OPTIONS=${QMAKE_OPTIONS}"
|
||||
@echo "QMAKE_MAKEFILE=${QMAKE_MAKEFILE}"
|
||||
@echo "QMAKE_TARGET=${QMAKE_TARGET}"
|
||||
@echo "TARGETS=${TARGETS}"
|
||||
|
||||
|
||||
qbrowserlib_%.qm: @srcdir@/qbrowserlib_%.ts
|
||||
${LRELEASE} $< -qm $@
|
||||
|
||||
%.xpm: resources/%.png
|
||||
convert $< $@ || cp $< $@
|
||||
|
||||
@srcdir@/%.ts: ${ALL_SRC}
|
||||
${LUPDATE} @LUPDATE_ARGS@ ${QMAKE_PROJECT}
|
||||
|
||||
${QMAKE_MAKEFILE}: ${QMAKE_PROJECT} ${ALL_SRC}
|
||||
${QMAKE} -o $@ $<
|
||||
|
||||
${QMAKE_TARGET}: ${QMAKE_MAKEFILE} ${ALL_SRC} $(LANGS:%=qbrowserlib_%.qm)
|
||||
make -f ${QMAKE_MAKEFILE}
|
||||
|
||||
install-data-local:
|
||||
${mkinstalldirs} ${DESTDIR}${libdir}
|
||||
for file in *${QMAKE_TARGET}{*.a,*.la,.so*,*.dylib,*.dll}; do \
|
||||
if test -e $$file; then \
|
||||
${INSTALL} $$file ${DESTDIR}${libdir}; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
uninstall-local:
|
||||
-rm -r ${DESTDIR}${libdir}/*${QMAKE_TARGET}*
|
||||
|
||||
clean-local:
|
||||
-rm -r *${QMAKE_TARGET}{.so*,*.dylib,*.dll}
|
||||
|
||||
CLEANFILES = ${TARGETS} ${TARGETS:%=%.exe} $(LANGS:%=qbrowserlib_%.qm) \
|
||||
*.o *.obj qrc_*.cpp ui_*.h moc_*.cpp *.qrc *.dll \
|
||||
${QMAKE_TARGET}* \
|
||||
MAINTAINERCLEANFILES = makefile.in ${QMAKE_MAKEFILE}
|
@@ -1,78 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef __PLUGINFACTORY_HXX__
|
||||
#define __PLUGINFACTORY_HXX__
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <QtWebKit/QWebPluginFactory>
|
||||
#include <qbrowserlib/saveorrun.hxx>
|
||||
|
||||
//! @addtogroup qbrowserlib
|
||||
//! @{
|
||||
|
||||
namespace qbrowserlib {
|
||||
|
||||
//! Handle PDF Documents
|
||||
/*! */
|
||||
class PluginFactory: public QWebPluginFactory {
|
||||
Q_OBJECT;
|
||||
signals:
|
||||
void done();
|
||||
public:
|
||||
PluginFactory(QNetworkAccessManager* net, Executor* executor,
|
||||
QObject* p=0): QWebPluginFactory(p),
|
||||
_net(net), _executor(executor) {
|
||||
TRC;
|
||||
// Plugin plugin;
|
||||
// plugin.name = "Show PDF-Document";
|
||||
// plugin.description = "Plugin for PDF documents";
|
||||
// MimeType mime;
|
||||
// mime.fileExtensions<<"pdf";
|
||||
// mime.name = "application/pdf";
|
||||
// mime.description = "PDF-Document";
|
||||
// plugin.mimeTypes<<mime;
|
||||
// _plugins.push_back(plugin);
|
||||
}
|
||||
virtual QObject* create(const QString& mimeType, const QUrl& url,
|
||||
const QStringList& argumentNames,
|
||||
const QStringList& argumentValues ) const {
|
||||
TRC; LOG<<"mimeType:"<<mimeType
|
||||
<<"url:"<<url
|
||||
<<"argumentNames:"<<argumentNames.join(", ")
|
||||
<<"argumentValues:"<<argumentValues.join(", ");
|
||||
// if (mimeType=="application/pdf") {
|
||||
// return new SaveOrRunPlugin(url, mimeType);
|
||||
// }
|
||||
QNetworkRequest req(url);
|
||||
QNetworkReply* reply(_net->get(QNetworkRequest(url)));
|
||||
SaveOrRunPlugin* p(new SaveOrRunPlugin(reply, _executor,
|
||||
url, mimeType));
|
||||
assert(connect(p, SIGNAL(accept()), SIGNAL(done())));
|
||||
if (p->handlePreconfigured()) {
|
||||
return p;
|
||||
}
|
||||
delete p; p=0;
|
||||
return 0;
|
||||
}
|
||||
virtual QList<Plugin> plugins() const {
|
||||
TRC;
|
||||
return _plugins;
|
||||
}
|
||||
virtual void refreshPlugins() {
|
||||
TRC;
|
||||
}
|
||||
private:
|
||||
QList<Plugin> _plugins;
|
||||
QNetworkAccessManager* _net;
|
||||
Executor* _executor;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
//! @}
|
||||
#endif
|
@@ -1,646 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.0" language="de_DE">
|
||||
<defaultcodec>UTF-8</defaultcodec>
|
||||
<context>
|
||||
<name>LogDialog</name>
|
||||
<message>
|
||||
<location filename="log.ui" line="14"/>
|
||||
<source>Debug Log</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="22"/>
|
||||
<source>Show Columns</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="28"/>
|
||||
<source>File/Line</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="38"/>
|
||||
<location filename="log.ui" line="129"/>
|
||||
<source>Instance</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="48"/>
|
||||
<location filename="log.ui" line="137"/>
|
||||
<source>Function</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="61"/>
|
||||
<source>Find Text</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="70"/>
|
||||
<source>Find</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="113"/>
|
||||
<source>File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="121"/>
|
||||
<source>Line</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="145"/>
|
||||
<source>Message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SaveOrRun</name>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="14"/>
|
||||
<source>Download</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="37"/>
|
||||
<source>Save As</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="65"/>
|
||||
<location filename="saveorrun.ui" line="129"/>
|
||||
<source>browse ...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="72"/>
|
||||
<source>Save As File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="79"/>
|
||||
<source>remember save path</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="89"/>
|
||||
<source>Open File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="97"/>
|
||||
<source>Open in External Application</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="103"/>
|
||||
<source>remember tool for this type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="136"/>
|
||||
<source>Run</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="144"/>
|
||||
<source>Information</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="164"/>
|
||||
<source>File:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="177"/>
|
||||
<location filename="saveorrun.ui" line="212"/>
|
||||
<location filename="saveorrun.ui" line="247"/>
|
||||
<source>...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="199"/>
|
||||
<source>Type:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="234"/>
|
||||
<source>Source</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="280"/>
|
||||
<source>Done</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Settings</name>
|
||||
<message>
|
||||
<location filename="settings.ui" line="14"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="24"/>
|
||||
<source>Web</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="32"/>
|
||||
<source>Network Connections</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="38"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether images are automatically loaded in web pages.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="45"/>
|
||||
<source>auto load images</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="52"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether SwissBrowser will try to pre-fetch DNS entries to speed up browsing.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="59"/>
|
||||
<source>DNS prefetch enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="86"/>
|
||||
<source>Rendering</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="92"/>
|
||||
<source>Specifies whether JavaScript programs can open new windows.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="95"/>
|
||||
<source>JavaScript can open windows</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="102"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Enables or disables the Spatial Navigation feature, which consists in the ability to navigate between focusable elements in a Web page, such as hyperlinks and form controls, by using Left, Right, Up and Down arrow keys. For example, if a user presses the Right key, heuristics determine whether there is an element he might be trying to reach towards the right and which element he probably wants.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="109"/>
|
||||
<source>spatial navigation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="116"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether hyperlinks should be included in the keyboard focus chain.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="123"/>
|
||||
<source>fokus links</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="130"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether the zoom factor on a frame applies only to the text or to all content.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="137"/>
|
||||
<source>zoom text only</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="144"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether the background color and images are also drawn when the page is printed.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="151"/>
|
||||
<source>print element backgrounds</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="158"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">This feature accelerates animations of web content. CSS animations of the transform and opacity properties will be rendered by composing the cached content of the animated elements.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="165"/>
|
||||
<source>accelerated composing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="172"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">This setting enables the tiled backing store feature. With the tiled backing store enabled, the web page contents in and around the current visible area is speculatively cached to bitmap tiles. The tiles are automatically kept in sync with the web page as it changes. Enabling tiling can significantly speed up painting heavy operations like scrolling. Enabling the feature increases memory consumption. It does not work well with contents using CSS fixed positioning.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="179"/>
|
||||
<source>tiled backing store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="186"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">With this setting each subframe is expanded to its contents. On touch devices, it is desired to not have any scrollable sub parts of the page as it results in a confusing user experience, with scrolling sometimes scrolling sub parts and at other times scrolling the page itself. For this reason iframes and framesets are barely usable on touch devices. This will flatten all the frames to become one scrollable page.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="193"/>
|
||||
<source>frame flattening</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="200"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">This setting enables WebKit's workaround for broken sites.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="207"/>
|
||||
<source>site specific quirks</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="233"/>
|
||||
<source>Security</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="241"/>
|
||||
<source>Extensions</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="247"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Enables or disables the running of JavaScript programs.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="254"/>
|
||||
<source>JavaScript</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="264"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Enables or disables Java applets. Currently Java applets are not supported.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="271"/>
|
||||
<source>Java</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="278"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Enables or disables plugins in Web pages (e.g. using NPAPI). Qt plugins with a mimetype such as &quot;application/x-qt-plugin&quot; are not affected by this setting.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="285"/>
|
||||
<source>Netscape plugins</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="295"/>
|
||||
<source>Extras</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="301"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Enables extra tools for Web developers. Currently this enables the &quot;Inspect&quot; element in the context menu as well as the use of QWebInspector which controls the web inspector for web site debugging. </span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="308"/>
|
||||
<source>developer extras</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="335"/>
|
||||
<source>Privacy</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="341"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Private browsing prevents SwissBrowser from recording visited pages in the history and storing web page icons.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="348"/>
|
||||
<source>private browsing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="355"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether JavaScript programs can read or write to the clipboard.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="362"/>
|
||||
<source>JavaScript can access clipboard</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="369"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether support for the HTML 5 offline storage feature is enabled or not.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="376"/>
|
||||
<source>offline storage database</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="383"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether support for the HTML 5 web application cache feature is enabled or not.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="390"/>
|
||||
<source>offline webapplication cache</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="397"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether support for the HTML 5 local storage feature is enabled or not.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="404"/>
|
||||
<source>local storage</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="411"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether locally loaded documents are allowed to access remote urls. </span><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Local resources are by default restricted from accessing remote content, which means your </span><span style=" font-family:'Courier New,courier'; font-size:medium; color:#363534;">file://</span><span style=" font-family:'Verdana'; font-size:medium; color:#363534;"> will not be able to access </span><span style=" font-family:'Courier New,courier'; font-size:medium; color:#363534;">http://domain.com/foo.html</span><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">. </span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="418"/>
|
||||
<source>local content can access remote urls</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="425"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether locally loaded documents are allowed to access other local urls.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="432"/>
|
||||
<source>local content can access file URLs</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="439"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether load requests should be monitored for cross-site scripting attempts. Suspicious scripts will be blocked and reported in the inspector's JavaScript console. Enabling this feature might have an impact on performance.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="446"/>
|
||||
<source>cross site scripting auditing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="472"/>
|
||||
<source>Applications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="494"/>
|
||||
<source>Mime-Type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="502"/>
|
||||
<source>Ext</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="510"/>
|
||||
<source>Program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="521"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">In the <span style=" font-weight:600;">Program</span>-column, enter <span style=" font-weight:600;">%1</span> as file name placeholder.</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="550"/>
|
||||
<location filename="settings.ui" line="621"/>
|
||||
<source>+</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="557"/>
|
||||
<location filename="settings.ui" line="628"/>
|
||||
<source>-</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="567"/>
|
||||
<source>Search Engines</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="583"/>
|
||||
<source>Scheme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="588"/>
|
||||
<source>Query URL</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="596"/>
|
||||
<source>Use %1 as placeholder for the query, use %2 as placeholder for your system language.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="638"/>
|
||||
<source>Session</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="644"/>
|
||||
<source>Session Management</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="650"/>
|
||||
<source>save window state when opened withiut URL</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="660"/>
|
||||
<source>close mimetype helper applications on exit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>qbrowserlib::SaveOrRun</name>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="144"/>
|
||||
<location filename="saveorrun.hxx" line="156"/>
|
||||
<source>File Exists</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="145"/>
|
||||
<location filename="saveorrun.hxx" line="157"/>
|
||||
<source>File already exists:
|
||||
|
||||
%1
|
||||
|
||||
Overwrite?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="169"/>
|
||||
<source>No Program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="170"/>
|
||||
<source>Not an executable Program:
|
||||
|
||||
%1
|
||||
|
||||
Specify full path to executable program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="182"/>
|
||||
<source>Save File As ...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="195"/>
|
||||
<source>Open File With ...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="207"/>
|
||||
<source>Dokumente</source>
|
||||
<comment>Documents folder in local language</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="209"/>
|
||||
<source>Arbeitsfläche</source>
|
||||
<comment>Desktop folder in local language</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>qbrowserlib::SaveOrRunDialog</name>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="261"/>
|
||||
<source>Unknown File Type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@@ -1,646 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.0" language="fr_FR">
|
||||
<defaultcodec>UTF-8</defaultcodec>
|
||||
<context>
|
||||
<name>LogDialog</name>
|
||||
<message>
|
||||
<location filename="log.ui" line="14"/>
|
||||
<source>Debug Log</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="22"/>
|
||||
<source>Show Columns</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="28"/>
|
||||
<source>File/Line</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="38"/>
|
||||
<location filename="log.ui" line="129"/>
|
||||
<source>Instance</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="48"/>
|
||||
<location filename="log.ui" line="137"/>
|
||||
<source>Function</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="61"/>
|
||||
<source>Find Text</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="70"/>
|
||||
<source>Find</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="113"/>
|
||||
<source>File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="121"/>
|
||||
<source>Line</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="log.ui" line="145"/>
|
||||
<source>Message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SaveOrRun</name>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="14"/>
|
||||
<source>Download</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="37"/>
|
||||
<source>Save As</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="65"/>
|
||||
<location filename="saveorrun.ui" line="129"/>
|
||||
<source>browse ...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="72"/>
|
||||
<source>Save As File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="79"/>
|
||||
<source>remember save path</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="89"/>
|
||||
<source>Open File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="97"/>
|
||||
<source>Open in External Application</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="103"/>
|
||||
<source>remember tool for this type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="136"/>
|
||||
<source>Run</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="144"/>
|
||||
<source>Information</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="164"/>
|
||||
<source>File:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="177"/>
|
||||
<location filename="saveorrun.ui" line="212"/>
|
||||
<location filename="saveorrun.ui" line="247"/>
|
||||
<source>...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="199"/>
|
||||
<source>Type:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="234"/>
|
||||
<source>Source</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.ui" line="280"/>
|
||||
<source>Done</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Settings</name>
|
||||
<message>
|
||||
<location filename="settings.ui" line="14"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="24"/>
|
||||
<source>Web</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="32"/>
|
||||
<source>Network Connections</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="38"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether images are automatically loaded in web pages.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="45"/>
|
||||
<source>auto load images</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="52"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether SwissBrowser will try to pre-fetch DNS entries to speed up browsing.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="59"/>
|
||||
<source>DNS prefetch enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="86"/>
|
||||
<source>Rendering</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="92"/>
|
||||
<source>Specifies whether JavaScript programs can open new windows.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="95"/>
|
||||
<source>JavaScript can open windows</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="102"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Enables or disables the Spatial Navigation feature, which consists in the ability to navigate between focusable elements in a Web page, such as hyperlinks and form controls, by using Left, Right, Up and Down arrow keys. For example, if a user presses the Right key, heuristics determine whether there is an element he might be trying to reach towards the right and which element he probably wants.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="109"/>
|
||||
<source>spatial navigation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="116"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether hyperlinks should be included in the keyboard focus chain.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="123"/>
|
||||
<source>fokus links</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="130"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether the zoom factor on a frame applies only to the text or to all content.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="137"/>
|
||||
<source>zoom text only</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="144"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether the background color and images are also drawn when the page is printed.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="151"/>
|
||||
<source>print element backgrounds</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="158"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">This feature accelerates animations of web content. CSS animations of the transform and opacity properties will be rendered by composing the cached content of the animated elements.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="165"/>
|
||||
<source>accelerated composing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="172"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">This setting enables the tiled backing store feature. With the tiled backing store enabled, the web page contents in and around the current visible area is speculatively cached to bitmap tiles. The tiles are automatically kept in sync with the web page as it changes. Enabling tiling can significantly speed up painting heavy operations like scrolling. Enabling the feature increases memory consumption. It does not work well with contents using CSS fixed positioning.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="179"/>
|
||||
<source>tiled backing store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="186"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">With this setting each subframe is expanded to its contents. On touch devices, it is desired to not have any scrollable sub parts of the page as it results in a confusing user experience, with scrolling sometimes scrolling sub parts and at other times scrolling the page itself. For this reason iframes and framesets are barely usable on touch devices. This will flatten all the frames to become one scrollable page.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="193"/>
|
||||
<source>frame flattening</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="200"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">This setting enables WebKit's workaround for broken sites.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="207"/>
|
||||
<source>site specific quirks</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="233"/>
|
||||
<source>Security</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="241"/>
|
||||
<source>Extensions</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="247"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Enables or disables the running of JavaScript programs.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="254"/>
|
||||
<source>JavaScript</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="264"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Enables or disables Java applets. Currently Java applets are not supported.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="271"/>
|
||||
<source>Java</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="278"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Enables or disables plugins in Web pages (e.g. using NPAPI). Qt plugins with a mimetype such as &quot;application/x-qt-plugin&quot; are not affected by this setting.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="285"/>
|
||||
<source>Netscape plugins</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="295"/>
|
||||
<source>Extras</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="301"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Enables extra tools for Web developers. Currently this enables the &quot;Inspect&quot; element in the context menu as well as the use of QWebInspector which controls the web inspector for web site debugging. </span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="308"/>
|
||||
<source>developer extras</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="335"/>
|
||||
<source>Privacy</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="341"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Private browsing prevents SwissBrowser from recording visited pages in the history and storing web page icons.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="348"/>
|
||||
<source>private browsing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="355"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether JavaScript programs can read or write to the clipboard.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="362"/>
|
||||
<source>JavaScript can access clipboard</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="369"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether support for the HTML 5 offline storage feature is enabled or not.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="376"/>
|
||||
<source>offline storage database</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="383"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether support for the HTML 5 web application cache feature is enabled or not.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="390"/>
|
||||
<source>offline webapplication cache</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="397"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether support for the HTML 5 local storage feature is enabled or not.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="404"/>
|
||||
<source>local storage</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="411"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether locally loaded documents are allowed to access remote urls. </span><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Local resources are by default restricted from accessing remote content, which means your </span><span style=" font-family:'Courier New,courier'; font-size:medium; color:#363534;">file://</span><span style=" font-family:'Verdana'; font-size:medium; color:#363534;"> will not be able to access </span><span style=" font-family:'Courier New,courier'; font-size:medium; color:#363534;">http://domain.com/foo.html</span><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">. </span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="418"/>
|
||||
<source>local content can access remote urls</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="425"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether locally loaded documents are allowed to access other local urls.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="432"/>
|
||||
<source>local content can access file URLs</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="439"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:medium; color:#363534;">Specifies whether load requests should be monitored for cross-site scripting attempts. Suspicious scripts will be blocked and reported in the inspector's JavaScript console. Enabling this feature might have an impact on performance.</span></p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="446"/>
|
||||
<source>cross site scripting auditing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="472"/>
|
||||
<source>Applications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="494"/>
|
||||
<source>Mime-Type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="502"/>
|
||||
<source>Ext</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="510"/>
|
||||
<source>Program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="521"/>
|
||||
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">In the <span style=" font-weight:600;">Program</span>-column, enter <span style=" font-weight:600;">%1</span> as file name placeholder.</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="550"/>
|
||||
<location filename="settings.ui" line="621"/>
|
||||
<source>+</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="557"/>
|
||||
<location filename="settings.ui" line="628"/>
|
||||
<source>-</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="567"/>
|
||||
<source>Search Engines</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="583"/>
|
||||
<source>Scheme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="588"/>
|
||||
<source>Query URL</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="596"/>
|
||||
<source>Use %1 as placeholder for the query, use %2 as placeholder for your system language.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="638"/>
|
||||
<source>Session</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="644"/>
|
||||
<source>Session Management</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="650"/>
|
||||
<source>save window state when opened withiut URL</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="settings.ui" line="660"/>
|
||||
<source>close mimetype helper applications on exit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>qbrowserlib::SaveOrRun</name>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="144"/>
|
||||
<location filename="saveorrun.hxx" line="156"/>
|
||||
<source>File Exists</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="145"/>
|
||||
<location filename="saveorrun.hxx" line="157"/>
|
||||
<source>File already exists:
|
||||
|
||||
%1
|
||||
|
||||
Overwrite?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="169"/>
|
||||
<source>No Program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="170"/>
|
||||
<source>Not an executable Program:
|
||||
|
||||
%1
|
||||
|
||||
Specify full path to executable program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="182"/>
|
||||
<source>Save File As ...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="195"/>
|
||||
<source>Open File With ...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="207"/>
|
||||
<source>Dokumente</source>
|
||||
<comment>Documents folder in local language</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="209"/>
|
||||
<source>Arbeitsfläche</source>
|
||||
<comment>Desktop folder in local language</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>qbrowserlib::SaveOrRunDialog</name>
|
||||
<message>
|
||||
<location filename="saveorrun.hxx" line="261"/>
|
||||
<source>Unknown File Type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@@ -1,60 +0,0 @@
|
||||
QT += webkit network gui
|
||||
QMAKE_LIBS += -lproxyface -lpcscxx -lssl -lcrypto
|
||||
QMAKE_CXXFLAGS += -Wno-parentheses -Wno-unused-parameter
|
||||
#-std=c++0x
|
||||
QMAKE_INCDIR += @srcdir@/.. ..
|
||||
|
||||
unix {
|
||||
!macx {
|
||||
CONFIG += debug
|
||||
QMAKE_INCDIR += /usr/include/PCSC
|
||||
QMAKE_INCDIR += /usr/local/include/PCSC
|
||||
QMAKE_LIBS += -lpcsclite -lproxy
|
||||
}
|
||||
}
|
||||
macx {
|
||||
QMAKE_INCDIR += /opt/local/include
|
||||
QMAKE_LIBDIR += /opt/local/lib
|
||||
QMAKE_LFLAGS += -F/System/Library/Frameworks/PCSC.framework
|
||||
LIBS += -framework PCSC
|
||||
QMAKE_INCDIR += /System/Library/Frameworks/PCSC.framework/Headers
|
||||
QMAKE_INFO_PLIST = Info.plist
|
||||
CONFIG += x86
|
||||
}
|
||||
win32 {
|
||||
QMAKE_LIBS += -lwinhttp -lgdi32 -lws2_32
|
||||
QMAKE_LIBS += /opt/local/i586-mingw32msvc/lib/winscard.a
|
||||
CONFIG += release dll
|
||||
}
|
||||
|
||||
TRANSLATIONS = @srcdir@/qbrowserlib_en.ts \
|
||||
@srcdir@/qbrowserlib_de.ts \
|
||||
@srcdir@/qbrowserlib_fr.ts \
|
||||
@srcdir@/qbrowserlib_it.ts
|
||||
|
||||
SOURCES = @srcdir@/log.cxx @srcdir@/certs.cxx
|
||||
|
||||
HEADERS = @srcdir@/log.hxx \
|
||||
@srcdir@/swisswebview.hxx @srcdir@/swisswebpage.hxx \
|
||||
@srcdir@/pluginfactory.hxx @srcdir@/saveorrun.hxx \
|
||||
@srcdir@/settings.hxx \
|
||||
@srcdir@/buttonlineedit.hxx \
|
||||
@srcdir@/filestorage.hxx @srcdir@/certs.hxx \
|
||||
@srcdir@/executor.hxx \
|
||||
@srcdir@/temporaryfile.hxx
|
||||
|
||||
FORMS = @srcdir@/saveorrun.ui @srcdir@/settings.ui @srcdir@/log.ui
|
||||
|
||||
RESOURCES = languages.qrc
|
||||
|
||||
TEMPLATE=lib
|
||||
TARGET = qbrowserlib
|
||||
|
||||
CODECFORSRC = UTF-8
|
||||
CODECFORTR = UTF-8
|
||||
|
||||
DEFINES += VERSION=\'\"@VERSION@\"\' BUILDDATE=\'\"@BUILDDATE@\"\'
|
||||
|
||||
## DEBUG
|
||||
# QMAKE_CXXFLAGS += -include iostream -D\"CRYPTOKI_LOG(X)=std::clog<<\\\"CRYPTOKI_\\\"<<X<<\\\"_@_\\\"<<__PRETTY_FUNCTION__<<std::endl\" -D\"PCSC_LOG(X)=std::clog<<\\\"PCSC_\\\"<<X<<\\\"_@_\\\"<<__PRETTY_FUNCTION__<<std::endl\" -D\"OPENSSL_LOG(X)=std::clog<<\\\"OPENSSL_\\\"<<X<<\\\"_@_\\\"<<__PRETTY_FUNCTION__<<std::endl'" @CPPFLAGS@ @CXXFLAGS@
|
||||
QMAKE_CXXFLAGS += @CPPFLAGS@ @CXXFLAGS@
|
@@ -1,284 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef __SAVEORRUN_HXX__
|
||||
#define __SAVEORRUN_HXX__
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <qbrowserlib/ui_saveorrun.h>
|
||||
#include <qbrowserlib/executor.hxx>
|
||||
|
||||
#include <QtCore/QUrl>
|
||||
#include <QtNetwork/QNetworkReply>
|
||||
#include <QtGui/QDialog>
|
||||
#include <QtGui/QFileDialog>
|
||||
#include <QtGui/QFileSystemModel>
|
||||
#include <QtGui/QDialogButtonBox>
|
||||
#include <QtGui/QMessageBox>
|
||||
#include <QtGui/QDesktopServices>
|
||||
#include <memory>
|
||||
|
||||
#include <cassert>
|
||||
|
||||
//! @addtogroup qbrowserlib
|
||||
//! @{
|
||||
|
||||
namespace qbrowserlib {
|
||||
|
||||
//! Ask User for Saving or Opening a Download
|
||||
class SaveOrRun: public QWidget, public Ui::SaveOrRun {
|
||||
Q_OBJECT;
|
||||
|
||||
signals:
|
||||
|
||||
void accept();
|
||||
|
||||
public:
|
||||
|
||||
SaveOrRun(QNetworkReply* reply, Executor* executor,
|
||||
QString type, QString src,
|
||||
QWidget* p=0): QWidget(p), _reply(reply), _executor(executor) {
|
||||
TRC;
|
||||
setupUi(this);
|
||||
QString obj(remoteFilename());
|
||||
_rememberPath->setVisible(false);
|
||||
_rememberTool->setVisible(false);
|
||||
// _program->setText(QDesktopServices::storageLocation
|
||||
// (QDesktopServices::ApplicationsLocation));
|
||||
delete _openInExternalApplication; _openInExternalApplication = 0;
|
||||
_object->setText(obj);
|
||||
_type->setText(type);
|
||||
_source->setText(src);
|
||||
_filename->setText(savePath()+QDir::separator()+obj);
|
||||
}
|
||||
|
||||
//! Run configured application if mime type is preconfigured.
|
||||
bool handlePreconfigured() {
|
||||
TRC;
|
||||
QString filename(remoteFilename());
|
||||
QStringList type
|
||||
(_executor->settings()->mimetype
|
||||
(_reply->header(QNetworkRequest::ContentTypeHeader).toString(),
|
||||
filename));
|
||||
if (!type.isEmpty()) {
|
||||
LOG<<"Start Application";
|
||||
hide();
|
||||
filename.replace(QRegExp("^(.*)\\."+type.at(0)+"$"),
|
||||
"\\1"); // remove extension
|
||||
assert(connect(_executor, SIGNAL(applicationStarted()),
|
||||
SIGNAL(accept())));
|
||||
_executor->run(_reply, filename+"."+type.at(0), type.at(1));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
QString remoteFilename() {
|
||||
TRC;
|
||||
QString filename
|
||||
(QString::fromUtf8(_reply->rawHeader("Content-Disposition")));
|
||||
if (filename.contains
|
||||
(QRegExp("^\\s*attachment\\s*;\\s*filename\\s*=\\s*\"[^\"]+\""))) {
|
||||
LOG<<"From Content-Disposition";
|
||||
filename = filename.replace
|
||||
(QRegExp("^\\s*attachment\\s*;\\s*filename\\s*=\\s*\"([^\"]+)\".*"),
|
||||
"\\1");
|
||||
} else {
|
||||
LOG<<"From path";
|
||||
filename =
|
||||
QFileInfo(!_reply->url().toLocalFile().isEmpty()
|
||||
?_reply->url().toLocalFile()
|
||||
:_reply->url().path()).fileName();
|
||||
}
|
||||
LOG<<"Filename:"<<filename;
|
||||
return filename;
|
||||
}
|
||||
|
||||
QString filename() {
|
||||
TRC;
|
||||
return _filename->text();
|
||||
}
|
||||
|
||||
QString program() {
|
||||
TRC;
|
||||
return QString();
|
||||
// return _program->text();
|
||||
}
|
||||
|
||||
public Q_SLOTS:
|
||||
|
||||
void save() {
|
||||
TRC;
|
||||
QFile file(filename());
|
||||
file.open(QIODevice::WriteOnly);
|
||||
file.write(_reply->readAll());
|
||||
file.close();
|
||||
accept();
|
||||
}
|
||||
|
||||
void open() {
|
||||
TRC;
|
||||
QFile file(filename());
|
||||
file.open(QIODevice::WriteOnly);
|
||||
file.write(_reply->readAll());
|
||||
file.close();
|
||||
QDesktopServices::openUrl(QUrl::fromLocalFile(file.fileName()));
|
||||
accept();
|
||||
}
|
||||
|
||||
void run() {
|
||||
TRC; LOG<<program()<<filename();
|
||||
_executor->run(_reply, filename(), program()+" %1");
|
||||
accept();
|
||||
}
|
||||
|
||||
protected Q_SLOTS:
|
||||
|
||||
void on__saveFileAs_clicked(bool=true) {
|
||||
TRC;
|
||||
if (QFileInfo(filename()).exists()
|
||||
&& QMessageBox::question(this, tr("File Exists"),
|
||||
tr("File already exists:\n\n"
|
||||
"%1\n\n"
|
||||
"Overwrite?").arg(filename()),
|
||||
QMessageBox::Yes|QMessageBox::No)
|
||||
== QMessageBox::No) return;
|
||||
save();
|
||||
}
|
||||
|
||||
void on__openFolder_clicked(bool=true) {
|
||||
TRC;
|
||||
if (QFileInfo(filename()).exists()
|
||||
&& QMessageBox::question(this, tr("File Exists"),
|
||||
tr("File already exists:\n\n"
|
||||
"%1\n\n"
|
||||
"Overwrite?").arg(filename()),
|
||||
QMessageBox::Yes|QMessageBox::No)
|
||||
== QMessageBox::No) return;
|
||||
open();
|
||||
}
|
||||
|
||||
void on__openFileIn_clicked(bool=true) {
|
||||
TRC;
|
||||
if (!QFile::exists(program())
|
||||
|| !QFileInfo(program()).isExecutable()) {
|
||||
QMessageBox::warning(this, tr("No Program"),
|
||||
tr("Not an executable Program:\n\n"
|
||||
"%1\n\n"
|
||||
"Specify full path to executable program")
|
||||
.arg(program()));
|
||||
return;
|
||||
}
|
||||
run();
|
||||
}
|
||||
|
||||
void on__browseSaveAs_clicked(bool) {
|
||||
TRC;
|
||||
QString saveFile
|
||||
(QFileDialog::getSaveFileName(this, tr("Save File As ..."),
|
||||
_filename->text(), QString(), 0,
|
||||
QFileDialog::DontConfirmOverwrite));
|
||||
if (!saveFile.size()) return;
|
||||
if (QFileInfo(saveFile).isDir())
|
||||
saveFile += QDir::separator()+_object->text();
|
||||
_filename->setText(saveFile);
|
||||
on__saveFileAs_clicked();
|
||||
}
|
||||
|
||||
void on__browseOpenWith_clicked(bool) {
|
||||
TRC;
|
||||
QString openFile
|
||||
(QFileDialog::getOpenFileName(this, tr("Open File With ..."),
|
||||
program()));
|
||||
if (!openFile.size()) return;
|
||||
// _program->setText(openFile);
|
||||
on__openFileIn_clicked();
|
||||
}
|
||||
|
||||
QString savePath() {
|
||||
TRC;
|
||||
QString path(QDir::homePath());
|
||||
QStringList defpaths;
|
||||
defpaths<<"downloads"<<"Downloads"<<"Documents"
|
||||
<<tr("Dokumente", "Documents folder in local language")
|
||||
<<"Desktop"
|
||||
<<tr("Arbeitsfläche", "Desktop folder in local language");
|
||||
for (QStringList::iterator it(defpaths.begin()); it!=defpaths.end(); ++it)
|
||||
if (QFile::exists(QDir::homePath()+QDir::separator()+*it)) {
|
||||
path = QDir::homePath()+QDir::separator()+*it;
|
||||
break;
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
friend class SaveOrRunDialog;
|
||||
QNetworkReply* _reply;
|
||||
Executor* _executor;
|
||||
|
||||
};
|
||||
|
||||
class SaveOrRunPlugin: public SaveOrRun {
|
||||
Q_OBJECT;
|
||||
|
||||
public:
|
||||
|
||||
SaveOrRunPlugin(QNetworkReply* reply, Executor* executor,
|
||||
const QUrl& url, const QString& mime,
|
||||
bool kiosk=false, QWidget* p=0):
|
||||
SaveOrRun(reply, executor,
|
||||
mime, url.toString(), p) {
|
||||
TRC;
|
||||
setAutoFillBackground(true);
|
||||
_type->setText(mime);
|
||||
_source->setText(url.host());
|
||||
assert(connect(this, SIGNAL(accept()), SLOT(hide())));
|
||||
}
|
||||
|
||||
protected Q_SLOTS:
|
||||
|
||||
void hide() {
|
||||
_stack->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
class SaveOrRunDialog: public QDialog {
|
||||
Q_OBJECT;
|
||||
|
||||
public:
|
||||
|
||||
SaveOrRunDialog(QNetworkReply* reply, Executor* executor,
|
||||
QString type, QString src,
|
||||
bool kiosk=false, QWidget* p=0):
|
||||
QDialog(p), _sor(new SaveOrRun(reply, executor, type, src)) {
|
||||
TRC;
|
||||
setWindowTitle(tr("Unknown File Type"));
|
||||
QVBoxLayout* l(new QVBoxLayout(this));
|
||||
l->addWidget(_sor);
|
||||
l->addWidget(_buttons = new QDialogButtonBox(QDialogButtonBox::Cancel));
|
||||
assert(connect(_sor, SIGNAL(accept()), SLOT(accept())));
|
||||
assert(connect(_buttons, SIGNAL(rejected()), SLOT(reject())));
|
||||
}
|
||||
|
||||
bool handlePreconfigured() {
|
||||
return _sor->handlePreconfigured();
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
SaveOrRun* _sor;
|
||||
QDialogButtonBox* _buttons;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
//! @}
|
||||
|
||||
#endif
|
@@ -1,328 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>SaveOrRun</class>
|
||||
<widget class="QWidget" name="SaveOrRun">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>719</width>
|
||||
<height>169</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Download</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="0" column="0">
|
||||
<widget class="QStackedWidget" name="_stack">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="page">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
<string>Save As</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLineEdit" name="_filename">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>400</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="_browseSaveAs">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>browse ...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QCommandLinkButton" name="_saveFileAs">
|
||||
<property name="text">
|
||||
<string>Save As File</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="_rememberPath">
|
||||
<property name="text">
|
||||
<string>remember save path</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QCommandLinkButton" name="_openFolder">
|
||||
<property name="text">
|
||||
<string>Open File</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="_openInExternalApplication">
|
||||
<attribute name="title">
|
||||
<string>Open in External Application</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="_rememberTool">
|
||||
<property name="text">
|
||||
<string>remember tool for this type</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLineEdit" name="_program">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="_browseOpenWith">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>browse ...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2" rowspan="2">
|
||||
<widget class="QCommandLinkButton" name="_openFileIn">
|
||||
<property name="text">
|
||||
<string>Run</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_3">
|
||||
<attribute name="title">
|
||||
<string>Information</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>File:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="_object">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Type:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="_type">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Source</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="_source">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="page_2">
|
||||
<layout class="QGridLayout" name="gridLayout_6">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Done</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>_filename</sender>
|
||||
<signal>returnPressed()</signal>
|
||||
<receiver>_saveFileAs</receiver>
|
||||
<slot>click()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>320</x>
|
||||
<y>78</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>430</x>
|
||||
<y>108</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>_program</sender>
|
||||
<signal>returnPressed()</signal>
|
||||
<receiver>_openFileIn</receiver>
|
||||
<slot>click()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>320</x>
|
||||
<y>78</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>430</x>
|
||||
<y>108</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
@@ -1,375 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef QBROWSERLIB_SETTINGS_HXX
|
||||
#define QBROWSERLIB_SETTINGS_HXX
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <qbrowserlib/ui_settings.h>
|
||||
|
||||
#include <QtWebKit/QWebSettings>
|
||||
#include <QtCore/QSettings>
|
||||
#include <QtCore/QMap>
|
||||
#include <QtCore/QList>
|
||||
#include <QtGui/QLineEdit>
|
||||
|
||||
#include <cassert>
|
||||
|
||||
namespace qbrowserlib {
|
||||
|
||||
class Settings: public QDialog, protected Ui::Settings {
|
||||
|
||||
Q_OBJECT;
|
||||
|
||||
public:
|
||||
|
||||
typedef QMap<QString, QVariant> MimeTypes;
|
||||
typedef QMap<QString, QVariant> SearchEngines;
|
||||
|
||||
Q_SIGNALS:
|
||||
|
||||
void newSettings();
|
||||
|
||||
public:
|
||||
|
||||
Settings(MimeTypes mimetypes, QWidget* p=0,
|
||||
QSettings* settings=0, bool autoWrite=true):
|
||||
QDialog(p), _settings(settings),
|
||||
_autoWrite(autoWrite), _mimetypes(mimetypes) {
|
||||
|
||||
setupUi(this);
|
||||
|
||||
// Web Attributes
|
||||
_attributes[QWebSettings::AutoLoadImages] =
|
||||
_settingAutoLoadImages;
|
||||
_attributes[QWebSettings::DnsPrefetchEnabled] =
|
||||
_settingDnsPrefetchEnabled;
|
||||
_attributes[QWebSettings::JavascriptEnabled] =
|
||||
_settingJavascriptEnabled;
|
||||
_attributes[QWebSettings::JavaEnabled] =
|
||||
_settingJavaEnabled;
|
||||
_attributes[QWebSettings::PluginsEnabled] =
|
||||
_settingPluginsEnabled;
|
||||
_attributes[QWebSettings::PrivateBrowsingEnabled] =
|
||||
_settingPrivateBrowsingEnabled;
|
||||
_attributes[QWebSettings::JavascriptCanOpenWindows] =
|
||||
_settingJavascriptCanOpenWindows;
|
||||
_attributes[QWebSettings::JavascriptCanAccessClipboard] =
|
||||
_settingJavascriptCanAccessClipboard;
|
||||
_attributes[QWebSettings::DeveloperExtrasEnabled] =
|
||||
_settingDeveloperExtrasEnabled;
|
||||
_attributes[QWebSettings::SpatialNavigationEnabled] =
|
||||
_settingSpatialNavigationEnabled;
|
||||
_attributes[QWebSettings::LinksIncludedInFocusChain] =
|
||||
_settingLinksIncludedInFocusChain;
|
||||
_attributes[QWebSettings::ZoomTextOnly] =
|
||||
_settingZoomTextOnly;
|
||||
_attributes[QWebSettings::PrintElementBackgrounds] =
|
||||
_settingPrintElementBackgrounds;
|
||||
_attributes[QWebSettings::OfflineStorageDatabaseEnabled] =
|
||||
_settingOfflineStorageDatabaseEnabled;
|
||||
_attributes[QWebSettings::OfflineWebApplicationCacheEnabled] =
|
||||
_settingOfflineWebApplicationCacheEnabled;
|
||||
_attributes[QWebSettings::LocalStorageEnabled] =
|
||||
_settingLocalStorageEnabled;
|
||||
_attributes[QWebSettings::LocalContentCanAccessRemoteUrls] =
|
||||
_settingLocalContentCanAccessRemoteUrls;
|
||||
_attributes[QWebSettings::LocalContentCanAccessFileUrls] =
|
||||
_settingLocalContentCanAccessFileUrls;
|
||||
// not in qt 4.7.0 (mac)
|
||||
// _attributes[QWebSettings::XSSAuditingEnabled] =
|
||||
// _settingXSSAuditingEnabled;
|
||||
_attributes[QWebSettings::AcceleratedCompositingEnabled] =
|
||||
_settingAcceleratedCompositingEnabled;
|
||||
_attributes[QWebSettings::TiledBackingStoreEnabled] =
|
||||
_settingTiledBackingStoreEnabled;
|
||||
_attributes[QWebSettings::FrameFlatteningEnabled] =
|
||||
_settingFrameFlatteningEnabled;
|
||||
// not in qt 4.7.0 (mac)
|
||||
// _attributes[QWebSettings::SiteSpecificQuirksEnabled] =
|
||||
// _settingSiteSpecificQuirksEnabled;
|
||||
|
||||
// CheckBoxes
|
||||
_checkboxes["SaveWindowState"] =
|
||||
std::make_pair(_saveWindowState, _saveWindowState->isChecked());
|
||||
_checkboxes["CloseApps"] =
|
||||
std::make_pair(_closeApps, _closeApps->isChecked());
|
||||
|
||||
load(!_mimetypes.size());
|
||||
on__buttons_rejected();
|
||||
}
|
||||
|
||||
static bool DEBUG;
|
||||
|
||||
void setSettings(QSettings* settings) {
|
||||
_settings = settings;
|
||||
}
|
||||
|
||||
QSettings* operator()() {
|
||||
return _settings;
|
||||
}
|
||||
|
||||
void setAttribute(QWebSettings::WebAttribute attr, bool state) {
|
||||
//TRC;
|
||||
QWebSettings::globalSettings()->setAttribute(attr, state);
|
||||
_attributes[attr]->setChecked(state);
|
||||
}
|
||||
|
||||
bool flag(const QString& name) {
|
||||
assert(_checkboxes.find(name)!=_checkboxes.end());
|
||||
return _checkboxes[name].second;
|
||||
}
|
||||
|
||||
const QString& text(const QString& name) {
|
||||
assert(_lineedits.find(name)!=_lineedits.end());
|
||||
return _lineedits[name].second;
|
||||
}
|
||||
|
||||
const MimeTypes& mimetypes() const {
|
||||
return _mimetypes;
|
||||
}
|
||||
|
||||
QStringList mimetype(QString mimetype, QString filename) const {
|
||||
Settings::MimeTypes::const_iterator
|
||||
it(_mimetypes.find(mimetype.split(';')[0]));
|
||||
if (it!=_mimetypes.end()) return it.value().toStringList();
|
||||
for (it=_mimetypes.begin(); it!=_mimetypes.end(); ++it)
|
||||
if (filename.endsWith("."+it.value().toStringList().at(0)))
|
||||
return it.value().toStringList();
|
||||
return QStringList();
|
||||
}
|
||||
|
||||
QString& replaceSearchEngine(QString& url) {
|
||||
TRC;
|
||||
int len(url.indexOf(QRegExp("[ :]")));
|
||||
if (len<=0) return url;
|
||||
QString scheme(url.left(len));
|
||||
LOG<<"scheme:"<<scheme;
|
||||
if (!_searchEngines.contains(scheme)) return url;
|
||||
QString query(url.right(url.size()-len-1));
|
||||
LOG<<"query:"<<query;
|
||||
url = QString(_searchEngines[scheme].toString())
|
||||
.arg(query).arg(QLocale::system().name().left(2));
|
||||
return url;
|
||||
}
|
||||
|
||||
const SearchEngines& searchEngines() const {
|
||||
return _searchEngines;
|
||||
}
|
||||
|
||||
bool save() {
|
||||
TRC;
|
||||
if (!_settings || !_settings->isWritable()) return false;
|
||||
// Attributes
|
||||
for (Attributes::iterator it(_attributes.begin());
|
||||
it!=_attributes.end(); ++it)
|
||||
_settings->setValue
|
||||
(QString("QWebSettings/%1").arg(it->first),
|
||||
QWebSettings::globalSettings()->testAttribute(it->first));
|
||||
// CheckBoxes
|
||||
for (CheckBoxes::iterator it(_checkboxes.begin());
|
||||
it!=_checkboxes.end(); ++it)
|
||||
_settings->setValue
|
||||
(QString("Flags/%1").arg(it->first), it->second.second);
|
||||
// LineEdits
|
||||
for (LineEdits::iterator it(_lineedits.begin());
|
||||
it!=_lineedits.end(); ++it)
|
||||
_settings->setValue
|
||||
(QString("Texts/%1").arg(it->first), it->second.second);
|
||||
// MimeTypes
|
||||
_settings->setValue("QWebSettings/MimeTypes", _mimetypes);
|
||||
// Search Engines
|
||||
_settings->setValue("QWebSettings/SearchEngines", _searchEngines);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool load(bool overwriteMimeTypes=true) {
|
||||
TRC;
|
||||
if (!_settings) return false;
|
||||
// Attributes
|
||||
for (Attributes::iterator it(_attributes.begin());
|
||||
it!=_attributes.end(); ++it) {
|
||||
QVariant val
|
||||
(_settings->value
|
||||
(QString("QWebSettings/%1").arg(it->first),
|
||||
QWebSettings::globalSettings()->testAttribute(it->first)));
|
||||
if (val.isValid() && val.canConvert(QVariant::Bool))
|
||||
setAttribute(it->first, val.toBool());
|
||||
}
|
||||
// CheckBoxes
|
||||
for (CheckBoxes::iterator it(_checkboxes.begin());
|
||||
it!=_checkboxes.end(); ++it) {
|
||||
QVariant val
|
||||
(_settings->value
|
||||
(QString("Flags/%1").arg(it->first), it->second.second));
|
||||
if (val.isValid() && val.canConvert(QVariant::Bool)) {
|
||||
it->second.first->setChecked(val.toBool());
|
||||
it->second.second = val.toBool();
|
||||
}
|
||||
}
|
||||
// LineEdits
|
||||
for (LineEdits::iterator it(_lineedits.begin());
|
||||
it!=_lineedits.end(); ++it) {
|
||||
QVariant val
|
||||
(_settings->value
|
||||
(QString("Texts/%1").arg(it->first), it->second.second));
|
||||
if (val.isValid() && val.canConvert(QVariant::String)) {
|
||||
it->second.first->setText(val.toString());
|
||||
it->second.second = val.toString();
|
||||
}
|
||||
}
|
||||
// MimeTypes
|
||||
if (overwriteMimeTypes) {
|
||||
QVariant val(_settings->value("QWebSettings/MimeTypes"));
|
||||
if (val.isValid() && val.canConvert(QVariant::Map))
|
||||
_mimetypes = val.toMap();
|
||||
}
|
||||
// SearchEngines
|
||||
QVariant val(_settings->value("QWebSettings/SearchEngines"));
|
||||
if (val.isValid() && val.canConvert(QVariant::Map))
|
||||
_searchEngines = val.toMap();
|
||||
newSettings();
|
||||
return true;
|
||||
}
|
||||
|
||||
private Q_SLOTS:
|
||||
|
||||
void on__buttons_accepted() {
|
||||
TRC;
|
||||
// Attributes
|
||||
for (Attributes::iterator it(_attributes.begin());
|
||||
it!=_attributes.end(); ++it)
|
||||
QWebSettings::globalSettings()
|
||||
->setAttribute(it->first, it->second->isChecked());
|
||||
// CheckBoxes
|
||||
for (CheckBoxes::iterator it(_checkboxes.begin());
|
||||
it!=_checkboxes.end(); ++it)
|
||||
it->second.second = it->second.first->isChecked();
|
||||
// LineEdits
|
||||
for (LineEdits::iterator it(_lineedits.begin());
|
||||
it!=_lineedits.end(); ++it)
|
||||
it->second.second = it->second.first->text();
|
||||
// MimeTypes
|
||||
_mimetypes.clear();
|
||||
for (int row(_mimeTypeTable->rowCount()); row--;)
|
||||
_mimetypes[_mimeTypeTable->item(row, 0)->text()] =
|
||||
QStringList()
|
||||
<<_mimeTypeTable->item(row, 1)->text()
|
||||
<<_mimeTypeTable->item(row, 2)->text();
|
||||
// SearchEngines
|
||||
_searchEngines.clear();
|
||||
for (int row(_searchEngineTable->rowCount()); row--;)
|
||||
_searchEngines[_searchEngineTable->item(row, 0)->text()] =
|
||||
_searchEngineTable->item(row, 1)->text();
|
||||
// Save
|
||||
if (_autoWrite) save();
|
||||
newSettings();
|
||||
}
|
||||
|
||||
void on__buttons_rejected() {
|
||||
TRC;
|
||||
// Attributes
|
||||
for (Attributes::iterator it(_attributes.begin());
|
||||
it!=_attributes.end(); ++it)
|
||||
it->second->setChecked
|
||||
(QWebSettings::globalSettings()->testAttribute(it->first));
|
||||
// CheckBoxes
|
||||
for (CheckBoxes::iterator it(_checkboxes.begin());
|
||||
it!=_checkboxes.end(); ++it)
|
||||
it->second.first->setChecked(it->second.second);
|
||||
// LineEdits
|
||||
for (LineEdits::iterator it(_lineedits.begin());
|
||||
it!=_lineedits.end(); ++it)
|
||||
it->second.first->setText(it->second.second);
|
||||
// MimeTypes
|
||||
_mimeTypeTable->setRowCount(_mimetypes.size());
|
||||
_mimeTypeTable->verticalHeader()->show();
|
||||
_mimeTypeTable->horizontalHeader()->show();
|
||||
_mimeTypeTable->horizontalHeader()->setStretchLastSection(true);
|
||||
int row(0);
|
||||
for (MimeTypes::iterator it(_mimetypes.begin());
|
||||
it!=_mimetypes.end(); ++it, ++row) {
|
||||
LOG<<"MimeType:"<<it.key()<<it.value().toStringList();
|
||||
_mimeTypeTable->setItem
|
||||
(row, 0, new QTableWidgetItem(it.key()));
|
||||
_mimeTypeTable->setItem
|
||||
(row, 1, new QTableWidgetItem(it.value().toStringList().at(0)));
|
||||
_mimeTypeTable->setItem
|
||||
(row, 2, new QTableWidgetItem(it.value().toStringList().at(1)));
|
||||
}
|
||||
// SearchEngines
|
||||
_searchEngineTable->setRowCount(_searchEngines.size());
|
||||
_searchEngineTable->verticalHeader()->show();
|
||||
_searchEngineTable->horizontalHeader()->show();
|
||||
_searchEngineTable->horizontalHeader()->setStretchLastSection(true);
|
||||
row = 0;
|
||||
for (MimeTypes::iterator it(_searchEngines.begin());
|
||||
it!=_searchEngines.end(); ++it, ++row) {
|
||||
LOG<<"SearchEngine:"<<it.key()<<it.value().toString();
|
||||
_searchEngineTable->setItem
|
||||
(row, 0, new QTableWidgetItem(it.key()));
|
||||
_searchEngineTable->setItem
|
||||
(row, 1, new QTableWidgetItem(it.value().toString()));
|
||||
}
|
||||
}
|
||||
|
||||
void on__addMimeType_pressed() {
|
||||
_mimeTypeTable->setRowCount(_mimeTypeTable->rowCount()+1);
|
||||
_mimeTypeTable->setItem(_mimeTypeTable->rowCount()-1, 0,
|
||||
new QTableWidgetItem);
|
||||
_mimeTypeTable->setItem(_mimeTypeTable->rowCount()-1, 1,
|
||||
new QTableWidgetItem);
|
||||
_mimeTypeTable->setItem(_mimeTypeTable->rowCount()-1, 2,
|
||||
new QTableWidgetItem);
|
||||
}
|
||||
|
||||
void on__removeMimeType_pressed() {
|
||||
QList<QTableWidgetSelectionRange> ranges
|
||||
(_mimeTypeTable->selectedRanges());
|
||||
if (ranges.isEmpty()) return;
|
||||
for (int begin(ranges.at(0).topRow()), count(ranges.at(0).rowCount());
|
||||
count; --count)
|
||||
_mimeTypeTable->removeRow(begin);
|
||||
}
|
||||
|
||||
void on__addSearchEngine_pressed() {
|
||||
_searchEngineTable->setRowCount(_searchEngineTable->rowCount()+1);
|
||||
_searchEngineTable->setItem(_searchEngineTable->rowCount()-1, 0,
|
||||
new QTableWidgetItem);
|
||||
_searchEngineTable->setItem(_searchEngineTable->rowCount()-1, 1,
|
||||
new QTableWidgetItem);
|
||||
_searchEngineTable->setItem(_searchEngineTable->rowCount()-1, 2,
|
||||
new QTableWidgetItem);
|
||||
}
|
||||
|
||||
void on__removeSearchEngine_pressed() {
|
||||
QList<QTableWidgetSelectionRange> ranges
|
||||
(_searchEngineTable->selectedRanges());
|
||||
if (ranges.isEmpty()) return;
|
||||
for (int begin(ranges.at(0).topRow()), count(ranges.at(0).rowCount());
|
||||
count; --count)
|
||||
_searchEngineTable->removeRow(begin);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
typedef std::map<QWebSettings::WebAttribute, QCheckBox*> Attributes ;
|
||||
Attributes _attributes;
|
||||
typedef std::map<QString, std::pair<QCheckBox*, bool> > CheckBoxes;
|
||||
CheckBoxes _checkboxes;
|
||||
typedef std::map<QString, std::pair<QLineEdit*, QString> > LineEdits;
|
||||
LineEdits _lineedits;
|
||||
QSettings* _settings;
|
||||
bool _autoWrite;
|
||||
MimeTypes _mimetypes;
|
||||
SearchEngines _searchEngines;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
@@ -1,85 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef __SWISSWEBPAGE_HXX__
|
||||
#define __SWISSWEBPAGE_HXX__
|
||||
|
||||
#include <qbrowserlib/log.hxx>
|
||||
#include <qbrowserlib/pluginfactory.hxx>
|
||||
|
||||
#include <QtWebKit/QWebPage>
|
||||
#include <QtWebKit/QWebHistory>
|
||||
#include <QtCore/QProcessEnvironment>
|
||||
|
||||
//! @addtogroup qbrowserlib
|
||||
//! @{
|
||||
|
||||
namespace qbrowserlib {
|
||||
|
||||
//! QWebPage with additional features and better default behaviour.
|
||||
/*! SwissWebPage is designed to be used by SwissWebView.
|
||||
|
||||
This QWebPage supports the folloing additional features:
|
||||
- Handling of plugins through PluginFactory
|
||||
- Processing of unsupportedContent
|
||||
- Delegation of all links
|
||||
- Signals @ref newPage if a new window should be created
|
||||
- Set useragent from environment variable @c SWISS_USERAGENT */
|
||||
class SwissWebPage: public QWebPage {
|
||||
Q_OBJECT;
|
||||
signals:
|
||||
void newPage(SwissWebPage*);
|
||||
public:
|
||||
SwissWebPage(QNetworkAccessManager* net,
|
||||
Executor* executor, QObject *parent = 0):
|
||||
QWebPage(parent), _net(net), _executor(executor) {
|
||||
setNetworkAccessManager(_net);
|
||||
PluginFactory* pf(new PluginFactory(_net, _executor, this));
|
||||
assert(connect(pf, SIGNAL(done()), SLOT(back())));
|
||||
setPluginFactory(pf);
|
||||
setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
|
||||
setForwardUnsupportedContent(true);
|
||||
}
|
||||
public Q_SLOTS:
|
||||
void back() {
|
||||
history()->back();
|
||||
}
|
||||
protected:
|
||||
virtual QWebPage* createWindow(WebWindowType type) {
|
||||
switch (type) {
|
||||
case QWebPage::WebBrowserWindow:
|
||||
case QWebPage::WebModalDialog: {
|
||||
SwissWebPage *page(new SwissWebPage(_net, _executor, parent()));
|
||||
newPage(page);
|
||||
return page;
|
||||
} break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
virtual QString userAgentForUrl(const QUrl& url) const {
|
||||
QString add(QProcessEnvironment::systemEnvironment()
|
||||
.value("SWISS_USERAGENT"));
|
||||
return QWebPage::userAgentForUrl(url)+(add.size()?" "+add:QString());
|
||||
}
|
||||
QObject* createPlugin(const QString& classid, const QUrl& url,
|
||||
const QStringList& paramNames,
|
||||
const QStringList& paramValues) {
|
||||
TRC; LOG<<"classid:"<<classid
|
||||
<<"url:"<<url
|
||||
<<"paramNames:"<<paramNames.join(", ")
|
||||
<<"paramValues:"<<paramValues.join(", ");
|
||||
return QWebPage::createPlugin(classid, url, paramNames, paramValues);
|
||||
}
|
||||
private:
|
||||
QNetworkAccessManager* _net;
|
||||
Executor* _executor;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
//! @}
|
||||
#endif
|
@@ -1,73 +0,0 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef SWISSWEBVIEW_HXX
|
||||
#define SWISSWEBVIEW_HXX
|
||||
|
||||
#include <qbrowserlib/swisswebpage.hxx>
|
||||
|
||||
#include <QtWebKit>
|
||||
#include <QtDesigner/QDesignerExportWidget>
|
||||
|
||||
#include <memory>
|
||||
|
||||
//! @addtogroup qbrowserlib
|
||||
//! @{
|
||||
|
||||
namespace qbrowserlib {
|
||||
|
||||
//! QWebViev class with additional features.
|
||||
/*! This QWebView class contains a @ref SwissWebPage and adds a new
|
||||
signal @refs newView that sends the view whenever the a new view
|
||||
(new window, new tab) must be opened.
|
||||
|
||||
\copydetails SwissWebView::newView(SwissWebView*)
|
||||
*/
|
||||
class SwissWebView: public QWebView {
|
||||
Q_OBJECT;
|
||||
signals:
|
||||
//! Signals that a new window (or tab) must be opened
|
||||
/*! @note You @b must connect to @ref newView and assign the new
|
||||
@ref SwissWebView instance to a partent widget or at least
|
||||
delete it, otherwise you'll have a memory leak! */
|
||||
void newView(qbrowserlib::SwissWebView*);
|
||||
public:
|
||||
//! Default construction, creates new @ref SwissWebView
|
||||
SwissWebView(QNetworkAccessManager* net,
|
||||
Executor* executor, QWidget *parent=0): QWebView(parent) {
|
||||
//! @bugfix, gcc does not yet support constructor calling
|
||||
x(new SwissWebPage(net, executor, this));
|
||||
}
|
||||
//! Construction with externally allocated @ref SwissWebPage
|
||||
/*! SwissWebView takes ownership of SwissWebPage. */
|
||||
SwissWebView(SwissWebPage* webpage) {
|
||||
//! @bugfix, gcc does not yet support constructor calling
|
||||
x(webpage);
|
||||
}
|
||||
private:
|
||||
//! @bugfix, gcc does not yet support constructor calling
|
||||
/*! @see http://en.wikipedia.org/wiki/C++11#Object_construction_improvement
|
||||
*/
|
||||
void x(SwissWebPage* webpage) {
|
||||
webpage->setParent(this);
|
||||
setPage(webpage);
|
||||
// create a new SwissWebView when a new SwissWebPage has been created
|
||||
assert(connect(page(), SIGNAL(newPage(SwissWebPage*)),
|
||||
SLOT(newPage(SwissWebPage*))));
|
||||
}
|
||||
private slots:
|
||||
void newPage(SwissWebPage* p) {
|
||||
// memory will be lost if signal is not handled and SwissWebView
|
||||
// is not assigned
|
||||
newView(new SwissWebView(p));
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
//! @}
|
||||
#endif
|
@@ -1,11 +1,7 @@
|
||||
QT += webkit network gui
|
||||
CONFIG += no_keywords
|
||||
QMAKE_LIBS += -lproxyface -lpcscxx -lssl -lcrypto
|
||||
QMAKE_CXXFLAGS += -Wno-parentheses -Wno-unused-parameter
|
||||
#-std=c++0x
|
||||
QMAKE_INCDIR += @top_srcdir@/src
|
||||
QMAKE_LIBDIR += @top_builddir@/src/qbrowserlib
|
||||
QMAKE_LIBDIR += @top_builddir@/src/qbrowserlib/release
|
||||
QMAKE_LIBS += -lqbrowserlib
|
||||
|
||||
unix {
|
||||
!macx {
|
||||
@@ -29,30 +25,25 @@ win32 {
|
||||
QMAKE_LIBS += /opt/local/i586-mingw32msvc/lib/winscard.a
|
||||
CONFIG += release
|
||||
}
|
||||
ICON = swissbrowser.icns
|
||||
ICON = swisssurfer.icns
|
||||
|
||||
TRANSLATIONS = @PACKAGENAME@_en.ts \
|
||||
@PACKAGENAME@_de.ts \
|
||||
@PACKAGENAME@_fr.ts \
|
||||
@PACKAGENAME@_it.ts
|
||||
|
||||
SOURCES = @srcdir@/main.cxx
|
||||
SOURCES = main.cxx webpage.cxx
|
||||
|
||||
HEADERS = @srcdir@/browser.hxx @srcdir@/smartcardauth.hxx \
|
||||
@srcdir@/pinentry.hxx @srcdir@/downloadmanager.hxx \
|
||||
@srcdir@/sslclientnetworkmanager.hxx \
|
||||
@srcdir@/authentication.hxx @srcdir@/errorlog.hxx \
|
||||
@srcdir@/certificate.hxx \
|
||||
@srcdir@/logincertificate.hxx \
|
||||
@srcdir@/editbookmarks.hxx @srcdir@/pdfdisplay.hpp
|
||||
HEADERS = browser.hxx smartcardauth.hxx pinentry.hxx \
|
||||
downloadmanager.hxx settings.hxx sslclientnetworkmanager.hxx \
|
||||
authentication.hxx webpage.hxx errorlog.hxx \
|
||||
certificate.hxx logincertificate.hxx editbookmarks.hxx \
|
||||
pluginfactory.hxx pdfdisplay.hpp saveorrun.hxx temporaryfile.hxx
|
||||
|
||||
FORMS = @srcdir@/browser.ui \
|
||||
@srcdir@/pinentry.ui @srcdir@/authentication.ui \
|
||||
@srcdir@/errorlog.ui @srcdir@/certificate.ui \
|
||||
@srcdir@/logincertificate.ui \
|
||||
@srcdir@/editbookmarks.ui
|
||||
FORMS = browser.ui settings.ui pinentry.ui authentication.ui errorlog.ui \
|
||||
certificate.ui logincertificate.ui editbookmarks.ui saveorrun.ui
|
||||
|
||||
RESOURCES = languages.qrc @srcdir@/resources.qrc
|
||||
RESOURCES = languages.qrc resources.qrc
|
||||
|
||||
TARGET = @PACKAGENAME@
|
||||
|
||||
@@ -63,4 +54,3 @@ DEFINES += VERSION=\'\"@VERSION@\"\' BUILDDATE=\'\"@BUILDDATE@\"\'
|
||||
|
||||
## DEBUG
|
||||
# QMAKE_CXXFLAGS += -include iostream -D\"CRYPTOKI_LOG(X)=std::clog<<\\\"CRYPTOKI_\\\"<<X<<\\\"_@_\\\"<<__PRETTY_FUNCTION__<<std::endl\" -D\"PCSC_LOG(X)=std::clog<<\\\"PCSC_\\\"<<X<<\\\"_@_\\\"<<__PRETTY_FUNCTION__<<std::endl\" -D\"OPENSSL_LOG(X)=std::clog<<\\\"OPENSSL_\\\"<<X<<\\\"_@_\\\"<<__PRETTY_FUNCTION__<<std::endl'" @CPPFLAGS@ @CXXFLAGS@
|
||||
QMAKE_CXXFLAGS += @CPPFLAGS@ @CXXFLAGS@
|
||||
|
@@ -1,36 +1,26 @@
|
||||
<RCC>
|
||||
<qresource prefix="icons/32x32">
|
||||
<file alias="butt32_49.png">resources/icons/32x32/butt32_49.png</file>
|
||||
<file alias="swissbrowser.png">resources/icons/32x32/swissbrowser.png</file>
|
||||
<file alias="butt32_01.png">resources/icons/32x32/butt32_01.png</file>
|
||||
<file alias="butt32_02.png">resources/icons/32x32/butt32_02.png</file>
|
||||
<file alias="butt32_03.png">resources/icons/32x32/butt32_03.png</file>
|
||||
<file alias="butt32_04.png">resources/icons/32x32/butt32_04.png</file>
|
||||
<file alias="butt32_05.png">resources/icons/32x32/butt32_05.png</file>
|
||||
<file alias="butt32_06.png">resources/icons/32x32/butt32_06.png</file>
|
||||
<file alias="butt32_07.png">resources/icons/32x32/butt32_07.png</file>
|
||||
<file alias="butt32_08.png">resources/icons/32x32/butt32_08.png</file>
|
||||
<file alias="butt32_09.png">resources/icons/32x32/butt32_09.png</file>
|
||||
<file alias="butt32_09_sw.png">resources/icons/32x32/butt32_09_sw.png</file>
|
||||
<file alias="butt32_10.png">resources/icons/32x32/butt32_10.png</file>
|
||||
<file alias="butt32_10_sw.png">resources/icons/32x32/butt32_10_sw.png</file>
|
||||
<file alias="butt32_11.png">resources/icons/32x32/butt32_11.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="icons/16x16">
|
||||
<file alias="butt16_49.png">resources/icons/16x16/butt16_49.png</file>
|
||||
<file alias="swissbrowser.png">resources/icons/16x16/swissbrowser.png</file>
|
||||
<file alias="butt16_01.png">resources/icons/16x16/butt16_01.png</file>
|
||||
<file alias="butt16_02.png">resources/icons/16x16/butt16_02.png</file>
|
||||
<file alias="butt16_03.png">resources/icons/16x16/butt16_03.png</file>
|
||||
<file alias="butt16_04.png">resources/icons/16x16/butt16_04.png</file>
|
||||
<file alias="butt16_05.png">resources/icons/16x16/butt16_05.png</file>
|
||||
<file alias="butt16_06.png">resources/icons/16x16/butt16_06.png</file>
|
||||
<file alias="butt16_07.png">resources/icons/16x16/butt16_07.png</file>
|
||||
<file alias="butt16_08.png">resources/icons/16x16/butt16_08.png</file>
|
||||
<file alias="butt16_09.png">resources/icons/16x16/butt16_09.png</file>
|
||||
<file alias="butt16_09_sw.png">resources/icons/16x16/butt16_09_sw.png</file>
|
||||
<file alias="butt16_10.png">resources/icons/16x16/butt16_10.png</file>
|
||||
<file alias="butt16_10_sw.png">resources/icons/16x16/butt16_10_sw.png</file>
|
||||
<file alias="butt16_11.png">resources/icons/16x16/butt16_11.png</file>
|
||||
<qresource prefix="icons">
|
||||
<file alias="gg">resources/icons/gg.png</file>
|
||||
<file alias="tel">resources/icons/tel.png</file>
|
||||
<file alias="wp">resources/icons/wp.png</file>
|
||||
<file alias="about">resources/icons/about.png</file>
|
||||
<file alias="addbookmark">resources/icons/addbookmark.png</file>
|
||||
<file alias="back">resources/icons/back.png</file>
|
||||
<file alias="clearlocation">resources/icons/clearlocation.png</file>
|
||||
<file alias="close">resources/icons/close.png</file>
|
||||
<file alias="error">resources/icons/error.png</file>
|
||||
<file alias="find">resources/icons/find.png</file>
|
||||
<file alias="forward">resources/icons/forward.png</file>
|
||||
<file alias="gohome">resources/icons/gohome.png</file>
|
||||
<file alias="newtab">resources/icons/newtab.png</file>
|
||||
<file alias="newwindow">resources/icons/newwindow.png</file>
|
||||
<file alias="print">resources/icons/print.png</file>
|
||||
<file alias="printpreview">resources/icons/printpreview.png</file>
|
||||
<file alias="reload">resources/icons/reload.png</file>
|
||||
<file alias="settings">resources/icons/settings.png</file>
|
||||
<file alias="stop">resources/icons/stop.png</file>
|
||||
<file alias="up">resources/icons/up.png</file>
|
||||
<file alias="usercert">resources/icons/usercert.png</file>
|
||||
<file alias="appicon">resources/icons/swisssurfer_32x32x32.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 527 B |
Before Width: | Height: | Size: 591 B |
Before Width: | Height: | Size: 422 B |
Before Width: | Height: | Size: 425 B |
Before Width: | Height: | Size: 445 B |
Before Width: | Height: | Size: 521 B |
Before Width: | Height: | Size: 475 B |
Before Width: | Height: | Size: 546 B |
Before Width: | Height: | Size: 569 B |
Before Width: | Height: | Size: 521 B |
Before Width: | Height: | Size: 550 B |
Before Width: | Height: | Size: 512 B |
Before Width: | Height: | Size: 412 B |
Before Width: | Height: | Size: 577 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 942 B |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 651 B |
Before Width: | Height: | Size: 805 B |
Before Width: | Height: | Size: 433 B |
Before Width: | Height: | Size: 441 B |
Before Width: | Height: | Size: 518 B |
Before Width: | Height: | Size: 640 B |
Before Width: | Height: | Size: 628 B |
Before Width: | Height: | Size: 662 B |
Before Width: | Height: | Size: 798 B |
Before Width: | Height: | Size: 657 B |
Before Width: | Height: | Size: 729 B |
Before Width: | Height: | Size: 620 B |
Before Width: | Height: | Size: 482 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |