1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 02:36:34 +01:00

Added unified Library which contains history, bookmarks and RSS reader.

This commit is contained in:
nowrep 2011-07-29 15:39:43 +02:00
parent 433eb1fc89
commit 47a0dd058e
26 changed files with 1924 additions and 349 deletions

Binary file not shown.

714
src/3rdparty/fancytabwidget.cpp vendored Normal file
View File

@ -0,0 +1,714 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#include "fancytabwidget.h"
#include "stylehelper.h"
#include <QDebug>
#include <QAnimationGroup>
#include <QColorDialog>
#include <QHBoxLayout>
#include <QMenu>
#include <QMouseEvent>
#include <QPainter>
#include <QPropertyAnimation>
#include <QSignalMapper>
#include <QSplitter>
#include <QStackedLayout>
#include <QStyleOptionTabV3>
#include <QToolButton>
#include <QToolTip>
#include <QVBoxLayout>
#include <QWindowsStyle>
using namespace Core;
using namespace Internal;
const int FancyTabBar::m_rounding = 22;
const int FancyTabBar::m_textPadding = 4;
void FancyTabProxyStyle::drawControl(
ControlElement element, const QStyleOption* option,
QPainter* p, const QWidget* widget) const {
const QStyleOptionTabV3* v_opt = qstyleoption_cast<const QStyleOptionTabV3*>(option);
if (element != CE_TabBarTab || !v_opt) {
QProxyStyle::drawControl(element, option, p, widget);
return;
}
const QRect rect = v_opt->rect;
const bool selected = v_opt->state & State_Selected;
const bool vertical_tabs = v_opt->shape == QTabBar::RoundedWest;
const QString text = v_opt->text;
if (selected) {
//background
p->save();
QLinearGradient grad(rect.topLeft(), rect.topRight());
grad.setColorAt(0, QColor(255, 255, 255, 140));
grad.setColorAt(1, QColor(255, 255, 255, 210));
p->fillRect(rect.adjusted(0, 0, 0, -1), grad);
p->restore();
//shadows
p->setPen(QColor(0, 0, 0, 110));
p->drawLine(rect.topLeft() + QPoint(1,-1), rect.topRight() - QPoint(0,1));
p->drawLine(rect.bottomLeft(), rect.bottomRight());
p->setPen(QColor(0, 0, 0, 40));
p->drawLine(rect.topLeft(), rect.bottomLeft());
//highlights
p->setPen(QColor(255, 255, 255, 50));
p->drawLine(rect.topLeft() + QPoint(0, -2), rect.topRight() - QPoint(0,2));
p->drawLine(rect.bottomLeft() + QPoint(0, 1), rect.bottomRight() + QPoint(0,1));
p->setPen(QColor(255, 255, 255, 40));
p->drawLine(rect.topLeft() + QPoint(0, 0), rect.topRight());
p->drawLine(rect.topRight() + QPoint(0, 1), rect.bottomRight() - QPoint(0, 1));
p->drawLine(rect.bottomLeft() + QPoint(0,-1), rect.bottomRight()-QPoint(0,1));
}
QTransform m;
if (vertical_tabs) {
m = QTransform::fromTranslate(rect.left(), rect.bottom());
m.rotate(-90);
} else {
m = QTransform::fromTranslate(rect.left(), rect.top());
}
const QRect draw_rect(QPoint(0, 0), m.mapRect(rect).size());
p->save();
p->setTransform(m);
QRect icon_rect(QPoint(8, 0), v_opt->iconSize);
QRect text_rect(icon_rect.topRight() + QPoint(4, 0), draw_rect.size());
text_rect.setRight(draw_rect.width());
icon_rect.translate(0, (draw_rect.height() - icon_rect.height()) / 2);
QFont boldFont(p->font());
boldFont.setPointSizeF(Utils::StyleHelper::sidebarFontSize());
boldFont.setBold(true);
p->setFont(boldFont);
p->setPen(selected ? QColor(255, 255, 255, 160) : QColor(0, 0, 0, 110));
int textFlags = Qt::AlignHCenter | Qt::AlignVCenter;
p->drawText(text_rect, textFlags, text);
p->setPen(selected ? QColor(60, 60, 60) : Utils::StyleHelper::panelTextColor());
#ifndef Q_WS_MAC
if (widget) {
const QString fader_key = "tab_" + text + "_fader";
const QString animation_key = "tab_" + text + "_animation";
const QString tab_hover = widget->property("tab_hover").toString();
int fader = widget->property(fader_key.toUtf8().constData()).toInt();
QPropertyAnimation* animation = widget->property(animation_key.toUtf8().constData()).value<QPropertyAnimation*>();
if (!animation) {
QWidget* mut_widget = const_cast<QWidget*>(widget);
fader = 0;
mut_widget->setProperty(fader_key.toUtf8().constData(), fader);
animation = new QPropertyAnimation(mut_widget, fader_key.toUtf8(), mut_widget);
connect(animation, SIGNAL(valueChanged(QVariant)), mut_widget, SLOT(update()));
mut_widget->setProperty(animation_key.toUtf8().constData(), QVariant::fromValue(animation));
}
if (text == tab_hover) {
if (animation->state() != QAbstractAnimation::Running && fader != 40) {
animation->stop();
animation->setDuration(80);
animation->setEndValue(40);
animation->start();
}
} else {
if (animation->state() != QAbstractAnimation::Running && fader != 0) {
animation->stop();
animation->setDuration(160);
animation->setEndValue(0);
animation->start();
}
}
if (!selected) {
p->save();
QLinearGradient grad(draw_rect.topLeft(), vertical_tabs ? draw_rect.bottomLeft() : draw_rect.topRight());
grad.setColorAt(0, Qt::transparent);
grad.setColorAt(0.5, QColor(255, 255, 255, fader));
grad.setColorAt(1, Qt::transparent);
p->fillRect(draw_rect, grad);
p->setPen(QPen(grad, 1.0));
p->drawLine(draw_rect.topLeft(), vertical_tabs ? draw_rect.bottomLeft() : draw_rect.topRight());
p->drawLine(draw_rect.bottomRight(), vertical_tabs ? draw_rect.topRight() : draw_rect.bottomLeft());
p->restore();
}
}
#endif
Utils::StyleHelper::drawIconWithShadow(v_opt->icon, icon_rect, p, QIcon::Normal);
p->drawText(text_rect.translated(0, -1), textFlags, text);
p->restore();
}
void FancyTabProxyStyle::polish(QWidget* widget) {
if (QString(widget->metaObject()->className()) == "QTabBar") {
widget->setMouseTracking(true);
widget->installEventFilter(this);
}
QProxyStyle::polish(widget);
}
void FancyTabProxyStyle::polish(QApplication* app) {
QProxyStyle::polish(app);
}
void FancyTabProxyStyle::polish(QPalette& palette) {
QProxyStyle::polish(palette);
}
bool FancyTabProxyStyle::eventFilter(QObject* o, QEvent* e) {
QTabBar* bar = qobject_cast<QTabBar*>(o);
if (bar && (e->type() == QEvent::MouseMove || e->type() == QEvent::Leave)) {
QMouseEvent* event = static_cast<QMouseEvent*>(e);
const QString old_hovered_tab = bar->property("tab_hover").toString();
const QString hovered_tab = e->type() == QEvent::Leave ? QString() : bar->tabText(bar->tabAt(event->pos()));
bar->setProperty("tab_hover", hovered_tab);
if (old_hovered_tab != hovered_tab)
bar->update();
}
return false;
}
FancyTab::FancyTab(QWidget* tabbar)
: QWidget(tabbar), tabbar(tabbar), m_fader(0)
{
animator.setPropertyName("fader");
animator.setTargetObject(this);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
}
void FancyTab::fadeIn()
{
animator.stop();
animator.setDuration(80);
animator.setEndValue(40);
animator.start();
}
void FancyTab::fadeOut()
{
animator.stop();
animator.setDuration(160);
animator.setEndValue(0);
animator.start();
}
void FancyTab::setFader(float value)
{
m_fader = value;
tabbar->update();
}
FancyTabBar::FancyTabBar(QWidget *parent)
: QWidget(parent)
{
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
setStyle(new QWindowsStyle);
setMinimumWidth(qMax(2 * m_rounding, 40));
setAttribute(Qt::WA_Hover, true);
setFocusPolicy(Qt::NoFocus);
setMouseTracking(true); // Needed for hover events
m_triggerTimer.setSingleShot(true);
QVBoxLayout* layout = new QVBoxLayout;
layout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding));
layout->setSpacing(0);
layout->setContentsMargins(0, 0, 0, 0);
setLayout(layout);
// We use a zerotimer to keep the sidebar responsive
connect(&m_triggerTimer, SIGNAL(timeout()), this, SLOT(emitCurrentIndex()));
}
FancyTabBar::~FancyTabBar()
{
delete style();
}
QSize FancyTab::sizeHint() const {
QFont boldFont(font());
boldFont.setPointSizeF(Utils::StyleHelper::sidebarFontSize());
boldFont.setBold(true);
QFontMetrics fm(boldFont);
int spacing = 8;
int width = 60 + spacing + 2;
int iconHeight = 32;
QSize ret(width, iconHeight + spacing + fm.height());
return ret;
}
QSize FancyTabBar::tabSizeHint(bool minimum) const
{
QFont boldFont(font());
boldFont.setPointSizeF(Utils::StyleHelper::sidebarFontSize());
boldFont.setBold(true);
QFontMetrics fm(boldFont);
int spacing = 8;
int width = 60 + spacing + 2;
int iconHeight = minimum ? 0 : 32;
return QSize(width, iconHeight + spacing + fm.height());
}
void FancyTabBar::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
QPainter p(this);
for (int i = 0; i < count(); ++i)
if (i != currentIndex())
paintTab(&p, i);
// paint active tab last, since it overlaps the neighbors
if (currentIndex() != -1)
paintTab(&p, currentIndex());
}
void FancyTab::enterEvent(QEvent*)
{
fadeIn();
}
void FancyTab::leaveEvent(QEvent*)
{
fadeOut();
}
QSize FancyTabBar::sizeHint() const
{
QSize sh = tabSizeHint();
return QSize(sh.width(), sh.height() * m_tabs.count());
}
QSize FancyTabBar::minimumSizeHint() const
{
QSize sh = tabSizeHint(true);
return QSize(sh.width(), sh.height() * m_tabs.count());
}
QRect FancyTabBar::tabRect(int index) const
{
return m_tabs[index]->geometry();
}
QString FancyTabBar::tabToolTip(int index) const {
return m_tabs[index]->toolTip();
}
void FancyTabBar::setTabToolTip(int index, const QString& toolTip) {
m_tabs[index]->setToolTip(toolTip);
}
// This keeps the sidebar responsive since
// we get a repaint before loading the
// mode itself
void FancyTabBar::emitCurrentIndex()
{
emit currentChanged(m_currentIndex);
}
void FancyTabBar::mousePressEvent(QMouseEvent *e)
{
e->accept();
for (int index = 0; index < m_tabs.count(); ++index) {
if (tabRect(index).contains(e->pos())) {
m_currentIndex = index;
update();
m_triggerTimer.start(0);
break;
}
}
}
void FancyTabBar::addTab(const QIcon& icon, const QString& label) {
FancyTab *tab = new FancyTab(this);
tab->icon = icon;
tab->text = label;
m_tabs.append(tab);
qobject_cast<QVBoxLayout*>(layout())->insertWidget(layout()->count()-1, tab);
}
void FancyTabBar::addSpacer(int size) {
qobject_cast<QVBoxLayout*>(layout())->insertSpacerItem(layout()->count()-1,
new QSpacerItem(0, size, QSizePolicy::Fixed, QSizePolicy::Maximum));
}
void FancyTabBar::paintTab(QPainter *painter, int tabIndex) const
{
if (!validIndex(tabIndex)) {
qWarning("invalid index");
return;
}
painter->save();
QRect rect = tabRect(tabIndex);
bool selected = (tabIndex == m_currentIndex);
if (selected) {
//background
painter->save();
QLinearGradient grad(rect.topLeft(), rect.topRight());
grad.setColorAt(0, QColor(255, 255, 255, 140));
grad.setColorAt(1, QColor(255, 255, 255, 210));
painter->fillRect(rect.adjusted(0, 0, 0, -1), grad);
painter->restore();
//shadows
painter->setPen(QColor(0, 0, 0, 110));
painter->drawLine(rect.topLeft() + QPoint(1,-1), rect.topRight() - QPoint(0,1));
painter->drawLine(rect.bottomLeft(), rect.bottomRight());
painter->setPen(QColor(0, 0, 0, 40));
painter->drawLine(rect.topLeft(), rect.bottomLeft());
//highlights
painter->setPen(QColor(255, 255, 255, 50));
painter->drawLine(rect.topLeft() + QPoint(0, -2), rect.topRight() - QPoint(0,2));
painter->drawLine(rect.bottomLeft() + QPoint(0, 1), rect.bottomRight() + QPoint(0,1));
painter->setPen(QColor(255, 255, 255, 40));
painter->drawLine(rect.topLeft() + QPoint(0, 0), rect.topRight());
painter->drawLine(rect.topRight() + QPoint(0, 1), rect.bottomRight() - QPoint(0, 1));
painter->drawLine(rect.bottomLeft() + QPoint(0,-1), rect.bottomRight()-QPoint(0,1));
}
QString tabText(painter->fontMetrics().elidedText(this->tabText(tabIndex), Qt::ElideMiddle, width()));
QRect tabTextRect(tabRect(tabIndex));
QRect tabIconRect(tabTextRect);
tabIconRect.adjust(+4, +4, -4, -4);
tabTextRect.translate(0, -2);
QFont boldFont(painter->font());
boldFont.setPointSizeF(Utils::StyleHelper::sidebarFontSize());
boldFont.setBold(true);
painter->setFont(boldFont);
painter->setPen(selected ? QColor(255, 255, 255, 160) : QColor(0, 0, 0, 110));
int textFlags = Qt::AlignCenter | Qt::AlignBottom;
painter->drawText(tabTextRect, textFlags, tabText);
painter->setPen(selected ? QColor(60, 60, 60) : Utils::StyleHelper::panelTextColor());
#ifndef Q_WS_MAC
if (!selected) {
painter->save();
int fader = int(m_tabs[tabIndex]->fader());
QLinearGradient grad(rect.topLeft(), rect.topRight());
grad.setColorAt(0, Qt::transparent);
grad.setColorAt(0.5, QColor(255, 255, 255, fader));
grad.setColorAt(1, Qt::transparent);
painter->fillRect(rect, grad);
painter->setPen(QPen(grad, 1.0));
painter->drawLine(rect.topLeft(), rect.topRight());
painter->drawLine(rect.bottomLeft(), rect.bottomRight());
painter->restore();
}
#endif
const int textHeight = painter->fontMetrics().height();
tabIconRect.adjust(0, 4, 0, -textHeight);
Utils::StyleHelper::drawIconWithShadow(tabIcon(tabIndex), tabIconRect, painter, QIcon::Normal);
painter->translate(0, -1);
painter->drawText(tabTextRect, textFlags, tabText);
painter->restore();
}
void FancyTabBar::setCurrentIndex(int index) {
m_currentIndex = index;
update();
emit currentChanged(m_currentIndex);
}
//////
// FancyColorButton
//////
class FancyColorButton : public QWidget
{
public:
FancyColorButton(QWidget *parent)
: m_parent(parent)
{
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
}
void mousePressEvent(QMouseEvent *ev)
{
if (ev->modifiers() & Qt::ShiftModifier)
Utils::StyleHelper::setBaseColor(QColorDialog::getColor(Utils::StyleHelper::requestedBaseColor(), m_parent));
}
private:
QWidget *m_parent;
};
//////
// FancyTabWidget
//////
FancyTabWidget::FancyTabWidget(QWidget* parent)
: QWidget(parent),
mode_(Mode_None),
tab_bar_(NULL),
stack_(new QStackedLayout),
side_widget_(new QWidget),
side_layout_(new QVBoxLayout),
top_layout_(new QVBoxLayout),
use_background_(false),
menu_(NULL),
proxy_style_(new FancyTabProxyStyle)
{
side_layout_->setSpacing(0);
side_layout_->setMargin(0);
side_layout_->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding));
side_widget_->setLayout(side_layout_);
side_widget_->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
top_layout_->setMargin(0);
top_layout_->setSpacing(0);
top_layout_->addLayout(stack_);
QHBoxLayout* main_layout = new QHBoxLayout;
main_layout->setMargin(0);
main_layout->setSpacing(1);
main_layout->addWidget(side_widget_);
main_layout->addLayout(top_layout_);
setLayout(main_layout);
}
void FancyTabWidget::AddTab(QWidget* tab, const QIcon& icon, const QString& label) {
stack_->addWidget(tab);
items_ << Item(icon, label);
}
void FancyTabWidget::AddSpacer(int size) {
items_ << Item(size);
}
void FancyTabWidget::SetBackgroundPixmap(const QPixmap& pixmap) {
background_pixmap_ = pixmap;
update();
}
void FancyTabWidget::paintEvent(QPaintEvent*) {
if (!use_background_)
return;
QPainter painter(this);
QRect rect = side_widget_->rect().adjusted(0, 0, 1, 0);
rect = style()->visualRect(layoutDirection(), geometry(), rect);
Utils::StyleHelper::verticalGradient(&painter, rect, rect);
if (!background_pixmap_.isNull()) {
QRect pixmap_rect(background_pixmap_.rect());
pixmap_rect.moveTo(rect.topLeft());
while (pixmap_rect.top() < rect.bottom()) {
QRect source_rect(pixmap_rect.intersected(rect));
source_rect.moveTo(0, 0);
painter.drawPixmap(pixmap_rect.topLeft(), background_pixmap_, source_rect);
pixmap_rect.moveTop(pixmap_rect.bottom() - 10);
}
}
painter.setPen(Utils::StyleHelper::borderColor());
painter.drawLine(rect.topRight(), rect.bottomRight());
QColor light = Utils::StyleHelper::sidebarHighlight();
painter.setPen(light);
painter.drawLine(rect.bottomLeft(), rect.bottomRight());
}
int FancyTabWidget::current_index() const {
return stack_->currentIndex();
}
void FancyTabWidget::SetCurrentIndex(int index) {
if (FancyTabBar* bar = qobject_cast<FancyTabBar*>(tab_bar_)) {
bar->setCurrentIndex(index);
} else if (QTabBar* bar = qobject_cast<QTabBar*>(tab_bar_)) {
bar->setCurrentIndex(index);
} else {
stack_->setCurrentIndex(index);
}
}
void FancyTabWidget::ShowWidget(int index) {
stack_->setCurrentIndex(index);
emit CurrentChanged(index);
}
void FancyTabWidget::AddBottomWidget(QWidget* widget) {
top_layout_->addWidget(widget);
}
void FancyTabWidget::SetMode(Mode mode) {
// Remove previous tab bar
delete tab_bar_;
tab_bar_ = NULL;
use_background_ = false;
// Create new tab bar
switch (mode) {
case Mode_None:
default:
qDebug() << "Unknown fancy tab mode" << mode;
// fallthrough
case Mode_LargeSidebar: {
FancyTabBar* bar = new FancyTabBar(this);
side_layout_->insertWidget(0, bar);
tab_bar_ = bar;
foreach (const Item& item, items_) {
if (item.type_ == Item::Type_Spacer)
bar->addSpacer(item.spacer_size_);
else
bar->addTab(item.tab_icon_, item.tab_label_);
}
bar->setCurrentIndex(stack_->currentIndex());
connect(bar, SIGNAL(currentChanged(int)), SLOT(ShowWidget(int)));
use_background_ = true;
break;
}
case Mode_Tabs:
MakeTabBar(QTabBar::RoundedNorth, true, false, false);
break;
case Mode_IconOnlyTabs:
MakeTabBar(QTabBar::RoundedNorth, false, true, false);
break;
case Mode_SmallSidebar:
MakeTabBar(QTabBar::RoundedWest, true, true, true);
use_background_ = true;
break;
case Mode_PlainSidebar:
MakeTabBar(QTabBar::RoundedWest, true, true, false);
break;
}
tab_bar_->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
mode_ = mode;
emit ModeChanged(mode);
update();
}
void FancyTabWidget::contextMenuEvent(QContextMenuEvent* e) {
Q_UNUSED(e)
// if (!menu_) {
// menu_ = new QMenu(this);
// QSignalMapper* mapper = new QSignalMapper(this);
// QActionGroup* group = new QActionGroup(this);
// AddMenuItem(mapper, group, tr("Large sidebar"), Mode_LargeSidebar);
// AddMenuItem(mapper, group, tr("Small sidebar"), Mode_SmallSidebar);
// AddMenuItem(mapper, group, tr("Plain sidebar"), Mode_PlainSidebar);
// AddMenuItem(mapper, group, tr("Tabs on top"), Mode_Tabs);
// AddMenuItem(mapper, group, tr("Icons on top"), Mode_IconOnlyTabs);
// menu_->addActions(group->actions());
// connect(mapper, SIGNAL(mapped(int)), SLOT(SetMode(int)));
// }
// menu_->popup(e->globalPos());
}
void FancyTabWidget::AddMenuItem(QSignalMapper* mapper, QActionGroup* group,
const QString& text, Mode mode) {
QAction* action = group->addAction(text);
action->setCheckable(true);
mapper->setMapping(action, mode);
connect(action, SIGNAL(triggered()), mapper, SLOT(map()));
if (mode == mode_)
action->setChecked(true);
}
void FancyTabWidget::MakeTabBar(QTabBar::Shape shape, bool text, bool icons,
bool fancy) {
QTabBar* bar = new QTabBar(this);
bar->setShape(shape);
bar->setDocumentMode(true);
bar->setUsesScrollButtons(true);
if (shape == QTabBar::RoundedWest) {
bar->setIconSize(QSize(22, 22));
}
if (fancy) {
bar->setStyle(proxy_style_);
}
if (shape == QTabBar::RoundedNorth)
top_layout_->insertWidget(0, bar);
else
side_layout_->insertWidget(0, bar);
foreach (const Item& item, items_) {
if (item.type_ != Item::Type_Tab)
continue;
QString label = item.tab_label_;
if (shape == QTabBar::RoundedWest) {
label = QFontMetrics(font()).elidedText(label, Qt::ElideMiddle, 100);
}
int tab_id = -1;
if (icons && text)
tab_id = bar->addTab(item.tab_icon_, label);
else if (icons)
tab_id = bar->addTab(item.tab_icon_, QString());
else if (text)
tab_id = bar->addTab(label);
bar->setTabToolTip(tab_id, item.tab_label_);
}
bar->setCurrentIndex(stack_->currentIndex());
connect(bar, SIGNAL(currentChanged(int)), SLOT(ShowWidget(int)));
tab_bar_ = bar;
}

230
src/3rdparty/fancytabwidget.h vendored Normal file
View File

@ -0,0 +1,230 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#ifndef FANCYTABWIDGET_H
#define FANCYTABWIDGET_H
#include <QIcon>
#include <QPropertyAnimation>
#include <QProxyStyle>
#include <QTabBar>
#include <QTimer>
#include <QWidget>
class QActionGroup;
class QMenu;
class QPainter;
class QSignalMapper;
class QStackedLayout;
class QStatusBar;
class QVBoxLayout;
namespace Core {
namespace Internal {
class FancyTabProxyStyle : public QProxyStyle {
Q_OBJECT
public:
void drawControl(ControlElement element, const QStyleOption* option,
QPainter* painter, const QWidget* widget) const;
void polish(QWidget* widget);
void polish(QApplication* app);
void polish(QPalette& palette);
protected:
bool eventFilter(QObject* o, QEvent* e);
};
class FancyTab : public QWidget{
Q_OBJECT
Q_PROPERTY(float fader READ fader WRITE setFader)
public:
FancyTab(QWidget *tabbar);
float fader() { return m_fader; }
void setFader(float value);
QSize sizeHint() const;
void fadeIn();
void fadeOut();
QIcon icon;
QString text;
protected:
void enterEvent(QEvent *);
void leaveEvent(QEvent *);
private:
QPropertyAnimation animator;
QWidget *tabbar;
float m_fader;
};
class FancyTabBar : public QWidget
{
Q_OBJECT
public:
FancyTabBar(QWidget *parent = 0);
~FancyTabBar();
void paintEvent(QPaintEvent *event);
void paintTab(QPainter *painter, int tabIndex) const;
void mousePressEvent(QMouseEvent *);
bool validIndex(int index) const { return index >= 0 && index < m_tabs.count(); }
QSize sizeHint() const;
QSize minimumSizeHint() const;
void addTab(const QIcon &icon, const QString &label);
void addSpacer(int size = 40);
void removeTab(int index) {
FancyTab *tab = m_tabs.takeAt(index);
delete tab;
}
void setCurrentIndex(int index);
int currentIndex() const { return m_currentIndex; }
void setTabToolTip(int index, const QString& toolTip);
QString tabToolTip(int index) const;
QIcon tabIcon(int index) const {return m_tabs.at(index)->icon; }
QString tabText(int index) const { return m_tabs.at(index)->text; }
int count() const {return m_tabs.count(); }
QRect tabRect(int index) const;
signals:
void currentChanged(int);
public slots:
void emitCurrentIndex();
private:
static const int m_rounding;
static const int m_textPadding;
int m_currentIndex;
QList<FancyTab*> m_tabs;
QTimer m_triggerTimer;
QSize tabSizeHint(bool minimum = false) const;
};
class FancyTabWidget : public QWidget {
Q_OBJECT
public:
FancyTabWidget(QWidget* parent = 0);
// Values are persisted - only add to the end
enum Mode {
Mode_None = 0,
Mode_LargeSidebar = 1,
Mode_SmallSidebar = 2,
Mode_Tabs = 3,
Mode_IconOnlyTabs = 4,
Mode_PlainSidebar = 5,
};
struct Item {
Item(const QIcon& icon, const QString& label)
: type_(Type_Tab), tab_label_(label), tab_icon_(icon), spacer_size_(0) {}
Item(int size) : type_(Type_Spacer), spacer_size_(size) {}
enum Type {
Type_Tab,
Type_Spacer,
};
Type type_;
QString tab_label_;
QIcon tab_icon_;
int spacer_size_;
};
void AddTab(QWidget *tab, const QIcon &icon, const QString &label);
void AddSpacer(int size = 40);
void SetBackgroundPixmap(const QPixmap& pixmap);
void AddBottomWidget(QWidget* widget);
int current_index() const;
Mode mode() const { return mode_; }
public slots:
void SetCurrentIndex(int index);
void SetMode(Mode mode);
void SetMode(int mode) { SetMode(Mode(mode)); }
signals:
void CurrentChanged(int index);
void ModeChanged(FancyTabWidget::Mode mode);
protected:
void paintEvent(QPaintEvent *event);
void contextMenuEvent(QContextMenuEvent* e);
private slots:
void ShowWidget(int index);
private:
void MakeTabBar(QTabBar::Shape shape, bool text, bool icons, bool fancy);
void AddMenuItem(QSignalMapper* mapper, QActionGroup* group,
const QString& text, Mode mode);
Mode mode_;
QList<Item> items_;
QWidget* tab_bar_;
QStackedLayout* stack_;
QPixmap background_pixmap_;
QWidget* side_widget_;
QVBoxLayout* side_layout_;
QVBoxLayout* top_layout_;
bool use_background_;
QMenu* menu_;
FancyTabProxyStyle* proxy_style_;
};
} // namespace Internal
} // namespace Core
Q_DECLARE_METATYPE(QPropertyAnimation*);
using Core::Internal::FancyTab;
using Core::Internal::FancyTabBar;
using Core::Internal::FancyTabWidget;
#endif // FANCYTABWIDGET_H

241
src/3rdparty/stylehelper.cpp vendored Normal file
View File

@ -0,0 +1,241 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#include "stylehelper.h"
#include <QtGui/QPixmapCache>
#include <QtGui/QWidget>
#include <QtCore/QRect>
#include <QtGui/QPainter>
#include <QtGui/QApplication>
#include <QtGui/QPalette>
#include <QtGui/QStyleOption>
#include <QtCore/QObject>
// Clamps float color values within (0, 255)
static int clamp(float x)
{
const int val = x > 255 ? 255 : static_cast<int>(x);
return val < 0 ? 0 : val;
}
namespace Utils {
qreal StyleHelper::sidebarFontSize()
{
#if defined(Q_WS_MAC)
return 10;
#else
return 7.5;
#endif
}
QColor StyleHelper::panelTextColor(bool lightColored)
{
if (!lightColored)
return Qt::white;
else
return Qt::black;
}
// Invalid by default, setBaseColor needs to be called at least once
QColor StyleHelper::m_baseColor;
QColor StyleHelper::m_requestedBaseColor;
QColor StyleHelper::baseColor(bool lightColored)
{
if (!lightColored)
return m_baseColor;
else
return m_baseColor.lighter(230);
}
QColor StyleHelper::highlightColor(bool lightColored)
{
QColor result = baseColor(lightColored);
if (!lightColored)
result.setHsv(result.hue(),
clamp(result.saturation()),
clamp(result.value() * 1.16));
else
result.setHsv(result.hue(),
clamp(result.saturation()),
clamp(result.value() * 1.06));
return result;
}
QColor StyleHelper::shadowColor(bool lightColored)
{
QColor result = baseColor(lightColored);
result.setHsv(result.hue(),
clamp(result.saturation() * 1.1),
clamp(result.value() * 0.70));
return result;
}
QColor StyleHelper::borderColor(bool lightColored)
{
QColor result = baseColor(lightColored);
result.setHsv(result.hue(),
result.saturation(),
result.value() / 2);
return result;
}
// We try to ensure that the actual color used are within
// reasonalbe bounds while generating the actual baseColor
// from the users request.
void StyleHelper::setBaseColor(const QColor &newcolor)
{
m_requestedBaseColor = newcolor;
QColor color;
color.setHsv(newcolor.hue(),
newcolor.saturation() * 0.7,
64 + newcolor.value() / 3);
if (color.isValid() && color != m_baseColor) {
m_baseColor = color;
foreach (QWidget *w, QApplication::topLevelWidgets())
w->update();
}
}
static void verticalGradientHelper(QPainter *p, const QRect &spanRect, const QRect &rect, bool lightColored)
{
QColor highlight = StyleHelper::highlightColor(lightColored);
QColor shadow = StyleHelper::shadowColor(lightColored);
QLinearGradient grad(spanRect.topRight(), spanRect.topLeft());
grad.setColorAt(0, highlight.lighter(117));
grad.setColorAt(1, shadow.darker(109));
p->fillRect(rect, grad);
QColor light(255, 255, 255, 80);
p->setPen(light);
p->drawLine(rect.topRight() - QPoint(1, 0), rect.bottomRight() - QPoint(1, 0));
QColor dark(0, 0, 0, 90);
p->setPen(dark);
p->drawLine(rect.topLeft(), rect.bottomLeft());
}
void StyleHelper::verticalGradient(QPainter *painter, const QRect &spanRect, const QRect &clipRect, bool lightColored)
{
if (StyleHelper::usePixmapCache()) {
QString key;
QColor keyColor = baseColor(lightColored);
key.sprintf("mh_vertical %d %d %d %d %d",
spanRect.width(), spanRect.height(), clipRect.width(),
clipRect.height(), keyColor.rgb());;
QPixmap pixmap;
if (!QPixmapCache::find(key, pixmap)) {
pixmap = QPixmap(clipRect.size());
QPainter p(&pixmap);
QRect rect(0, 0, clipRect.width(), clipRect.height());
verticalGradientHelper(&p, spanRect, rect, lightColored);
p.end();
QPixmapCache::insert(key, pixmap);
}
painter->drawPixmap(clipRect.topLeft(), pixmap);
} else {
verticalGradientHelper(painter, spanRect, clipRect, lightColored);
}
}
// Draws a cached pixmap with shadow
void StyleHelper::drawIconWithShadow(const QIcon &icon, const QRect &rect,
QPainter *p, QIcon::Mode iconMode, int radius, const QColor &color, const QPoint &offset)
{
QPixmap cache;
QString pixmapName = QString("icon %0 %1 %2").arg(icon.cacheKey()).arg(iconMode).arg(rect.height());
if (!QPixmapCache::find(pixmapName, cache)) {
QPixmap px = icon.pixmap(rect.size());
cache = QPixmap(px.size() + QSize(radius * 2, radius * 2));
cache.fill(Qt::transparent);
QPainter cachePainter(&cache);
if (iconMode == QIcon::Disabled) {
QImage im = px.toImage().convertToFormat(QImage::Format_ARGB32);
for (int y=0; y<im.height(); ++y) {
QRgb *scanLine = (QRgb*)im.scanLine(y);
for (int x=0; x<im.width(); ++x) {
QRgb pixel = *scanLine;
char intensity = qGray(pixel);
*scanLine = qRgba(intensity, intensity, intensity, qAlpha(pixel));
++scanLine;
}
}
px = QPixmap::fromImage(im);
}
// Draw shadow
QImage tmp(px.size() + QSize(radius * 2, radius * 2 + 1), QImage::Format_ARGB32_Premultiplied);
tmp.fill(Qt::transparent);
QPainter tmpPainter(&tmp);
tmpPainter.setCompositionMode(QPainter::CompositionMode_Source);
tmpPainter.drawPixmap(QPoint(radius, radius), px);
tmpPainter.end();
// blur the alpha channel
QImage blurred(tmp.size(), QImage::Format_ARGB32_Premultiplied);
blurred.fill(Qt::transparent);
QPainter blurPainter(&blurred);
qt_blurImage(&blurPainter, tmp, radius, false, true);
blurPainter.end();
tmp = blurred;
// blacken the image...
tmpPainter.begin(&tmp);
tmpPainter.setCompositionMode(QPainter::CompositionMode_SourceIn);
tmpPainter.fillRect(tmp.rect(), color);
tmpPainter.end();
tmpPainter.begin(&tmp);
tmpPainter.setCompositionMode(QPainter::CompositionMode_SourceIn);
tmpPainter.fillRect(tmp.rect(), color);
tmpPainter.end();
// draw the blurred drop shadow...
cachePainter.drawImage(QRect(0, 0, cache.rect().width(), cache.rect().height()), tmp);
// Draw the actual pixmap...
cachePainter.drawPixmap(QPoint(radius, radius) + offset, px);
QPixmapCache::insert(pixmapName, cache);
}
QRect targetRect = cache.rect();
targetRect.moveCenter(rect.center());
p->drawPixmap(targetRect.topLeft() - offset, cache);
}
} // namespace Utils

86
src/3rdparty/stylehelper.h vendored Normal file
View File

@ -0,0 +1,86 @@
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#ifndef STYLEHELPER_H
#define STYLEHELPER_H
#include <QtGui/QColor>
#include <QtGui/QStyle>
QT_BEGIN_NAMESPACE
class QPalette;
class QPainter;
class QRect;
// Note, this is exported but in a private header as qtopengl depends on it.
// We should consider adding this as a public helper function.
void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0);
QT_END_NAMESPACE
// Helper class holding all custom color values
namespace Utils {
class StyleHelper
{
public:
static const unsigned int DEFAULT_BASE_COLOR = 0x666666;
// Height of the project explorer navigation bar
static qreal sidebarFontSize();
// This is our color table, all colors derive from baseColor
static QColor requestedBaseColor() { return m_requestedBaseColor; }
static QColor baseColor(bool lightColored = false);
static QColor panelTextColor(bool lightColored = false);
static QColor highlightColor(bool lightColored = false);
static QColor shadowColor(bool lightColored = false);
static QColor borderColor(bool lightColored = false);
static QColor sidebarHighlight() { return QColor(255, 255, 255, 40); }
static QColor sidebarShadow() { return QColor(0, 0, 0, 40); }
// Sets the base color and makes sure all top level widgets are updated
static void setBaseColor(const QColor &color);
// Gradients used for panels
static void verticalGradient(QPainter *painter, const QRect &spanRect, const QRect &clipRect, bool lightColored = false);
static bool usePixmapCache() { return true; }
static void drawIconWithShadow(const QIcon &icon, const QRect &rect, QPainter *p, QIcon::Mode iconMode,
int radius = 3, const QColor &color = QColor(0, 0, 0, 130),
const QPoint &offset = QPoint(1, -2));
private:
static QColor m_baseColor;
static QColor m_requestedBaseColor;
};
} // namespace Utils
using Utils::StyleHelper;
#endif // STYLEHELPER_H

View File

@ -123,7 +123,10 @@ SOURCES += main.cpp\
3rdparty/squeezelabelv2.cpp \
3rdparty/squeezelabelv1.cpp \
tools/buttonwithmenu.cpp \
navigation/locationbarsettings.cpp
navigation/locationbarsettings.cpp \
other/browsinglibrary.cpp \
3rdparty/stylehelper.cpp \
3rdparty/fancytabwidget.cpp
HEADERS += \
3rdparty/qtwin.h \
@ -207,7 +210,10 @@ HEADERS += \
3rdparty/squeezelabelv2.h \
3rdparty/squeezelabelv1.h \
tools/buttonwithmenu.h \
navigation/locationbarsettings.h
navigation/locationbarsettings.h \
other/browsinglibrary.h \
3rdparty/stylehelper.h \
3rdparty/fancytabwidget.h
FORMS += \
preferences/autofillmanager.ui \
@ -238,7 +244,8 @@ FORMS += \
desktopnotifications/desktopnotification.ui \
webview/jsconfirm.ui \
webview/jsalert.ui \
webview/jsprompt.ui
webview/jsprompt.ui \
other/browsinglibrary.ui
RESOURCES += \
data/icons.qrc \

View File

@ -19,10 +19,9 @@
#include "qupzilla.h"
#include "tabwidget.h"
#include "bookmarkstoolbar.h"
#include "bookmarksmanager.h"
#include "cookiemanager.h"
#include "cookiejar.h"
#include "historymanager.h"
#include "browsinglibrary.h"
#include "historymodel.h"
#include "networkmanager.h"
#include "rssmanager.h"
@ -39,9 +38,8 @@
MainApplication::MainApplication(const QList<CommandLineOptions::ActionPair> &cmdActions, int &argc, char **argv)
: QtSingleApplication("QupZillaWebBrowser", argc, argv)
,m_bookmarksmanager(0)
,m_cookiemanager(0)
,m_historymanager(0)
,m_browsingLibrary(0)
,m_historymodel(0)
,m_websettings(0)
,m_networkmanager(0)
@ -371,11 +369,11 @@ void MainApplication::quitApplication()
quit();
}
BookmarksManager* MainApplication::bookmarksManager()
BrowsingLibrary* MainApplication::browsingLibrary()
{
if (!m_bookmarksmanager)
m_bookmarksmanager = new BookmarksManager(getWindow());
return m_bookmarksmanager;
if (!m_browsingLibrary)
m_browsingLibrary = new BrowsingLibrary(getWindow());
return m_browsingLibrary;
}
PluginProxy* MainApplication::plugins()
@ -392,13 +390,6 @@ CookieManager* MainApplication::cookieManager()
return m_cookiemanager;
}
HistoryManager* MainApplication::historyManager()
{
if (!m_historymanager)
m_historymanager = new HistoryManager(getWindow());
return m_historymanager;
}
HistoryModel* MainApplication::history()
{
if (!m_historymodel)

View File

@ -31,9 +31,8 @@
#include "commandlineoptions.h"
class QupZilla;
class BookmarksManager;
class CookieManager;
class HistoryManager;
class BrowsingLibrary;
class HistoryModel;
class NetworkManager;
class CookieJar;
@ -76,9 +75,8 @@ public:
void checkProfile(QString path);
QupZilla* getWindow();
BookmarksManager* bookmarksManager();
CookieManager* cookieManager();
HistoryManager* historyManager();
BrowsingLibrary* browsingLibrary();
HistoryModel* history();
QWebSettings* webSettings();
NetworkManager* networkManager();
@ -113,9 +111,8 @@ private:
void translateApp();
void restoreOtherWindows();
BookmarksManager* m_bookmarksmanager;
CookieManager* m_cookiemanager;
HistoryManager* m_historymanager;
BrowsingLibrary* m_browsingLibrary;
HistoryModel* m_historymodel;
QWebSettings* m_websettings;
NetworkManager* m_networkmanager;

View File

@ -28,7 +28,6 @@
#include "downloadmanager.h"
#include "cookiejar.h"
#include "cookiemanager.h"
#include "historymanager.h"
#include "bookmarksmanager.h"
#include "bookmarkstoolbar.h"
#include "clearprivatedata.h"
@ -54,6 +53,7 @@
#include "closedtabsmanager.h"
#include "statusbarmessage.h"
#include "locationbarsettings.h"
#include "browsinglibrary.h"
const QString QupZilla::VERSION = "1.0.0-b3";
//const QString QupZilla::BUILDTIME = QLocale(QLocale::English).toDateTime(__DATE__" "__TIME__, "MMM d yyyy hh:mm:ss").toString("MM/dd/yyyy hh:ss");
@ -845,17 +845,17 @@ void QupZilla::changeEncoding()
void QupZilla::bookmarkPage()
{
mApp->bookmarksManager()->addBookmark(weView());
mApp->browsingLibrary()->bookmarksManager()->addBookmark(weView());
}
void QupZilla::addBookmark(const QUrl &url, const QString &title)
{
mApp->bookmarksManager()->insertBookmark(url, title);
mApp->browsingLibrary()->bookmarksManager()->insertBookmark(url, title);
}
void QupZilla::bookmarkAllTabs()
{
mApp->bookmarksManager()->insertAllTabs();
mApp->browsingLibrary()->bookmarksManager()->insertAllTabs();
}
void QupZilla::loadActionUrl()
@ -882,26 +882,17 @@ void QupZilla::showCookieManager()
void QupZilla::showHistoryManager()
{
HistoryManager* m = mApp->historyManager();
m->refreshTable();
m->setMainWindow(this);
m->show();
mApp->browsingLibrary()->showHistory(this);
}
void QupZilla::showRSSManager()
{
RSSManager* m = mApp->rssManager();
m->refreshTable();
m->setMainWindow(this);
m->show();
mApp->browsingLibrary()->showRSS(this);
}
void QupZilla::showBookmarksManager()
{
BookmarksManager* m = mApp->bookmarksManager();
m->refreshTable();
m->setMainWindow(this);
m->show();
mApp->browsingLibrary()->showBookmarks(this);
}
void QupZilla::showClearPrivateData()

View File

@ -47,7 +47,6 @@ BookmarksManager::BookmarksManager(QupZilla* mainClass, QWidget* parent) :
#endif
connect(ui->deleteB, SIGNAL(clicked()), this, SLOT(deleteItem()));
connect(ui->close, SIGNAL(clicked(QAbstractButton*)), this, SLOT(hide()));
connect(ui->bookmarksTree, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(itemChanged(QTreeWidgetItem*)));
connect(ui->addFolder, SIGNAL(clicked()), this, SLOT(addFolder()));
connect(ui->bookmarksTree, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(contextMenuRequested(const QPoint &)));

View File

@ -22,6 +22,7 @@
#include <QTreeWidgetItem>
#include <QInputDialog>
#include <QPointer>
#include <QDialogButtonBox>
#include "bookmarksmodel.h"

View File

@ -14,7 +14,7 @@
<string>Bookmarks</string>
</property>
<property name="windowIcon">
<iconset resource="../icons.qrc">
<iconset resource="../data/icons.qrc">
<normaloff>:/icons/qupzilla.png</normaloff>:/icons/qupzilla.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout">
@ -41,13 +41,6 @@
</column>
</widget>
</item>
<item row="1" column="4">
<widget class="QDialogButtonBox" name="close">
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QPushButton" name="deleteB">
<property name="text">
@ -65,6 +58,19 @@
</property>
</widget>
</item>
<item row="1" column="4">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<customwidgets>
@ -75,7 +81,7 @@
</customwidget>
</customwidgets>
<resources>
<include location="../icons.qrc"/>
<include location="../data/icons.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -72,5 +72,9 @@
<file>icons/other/adblock.png</file>
<file>icons/preferences/stock_dialog-question.png</file>
<file>icons/notifications/download.png</file>
<file>icons/other/background.png</file>
<file>icons/other/bighistory.png</file>
<file>icons/other/library-bg-top.png</file>
<file>icons/other/library-bg-top-right.png</file>
</qresource>
</RCC>

View File

@ -46,7 +46,6 @@ DownloadItem::DownloadItem(QListWidgetItem* item, QNetworkReply* reply, QString
QFile::remove(fullPath);
m_outputFile.setFileName(fullPath);
qDebug() << m_fileName << m_outputFile.fileName();
ui->setupUi(this);
setMaximumWidth(525);

View File

@ -42,11 +42,9 @@ HistoryManager::HistoryManager(QupZilla* mainClass, QWidget* parent) :
#endif
connect(ui->historyTree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this, SLOT(itemDoubleClicked(QTreeWidgetItem*)));
connect(ui->close, SIGNAL(clicked(QAbstractButton*)), this, SLOT(hide()));
connect(ui->deleteB, SIGNAL(clicked()), this, SLOT(deleteItem()));
connect(ui->clearAll, SIGNAL(clicked()), this, SLOT(clearHistory()));
// connect(ui->search, SIGNAL(textChanged(QString)), ui->historyTree, SLOT(filterStringWithoutTopItems(QString)));
connect(ui->search, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(search()));
connect(ui->historyTree, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(contextMenuRequested(const QPoint &)));
connect(ui->historyTree, SIGNAL(itemControlClicked(QTreeWidgetItem*)), this, SLOT(itemControlClicked(QTreeWidgetItem*)));
@ -56,7 +54,7 @@ HistoryManager::HistoryManager(QupZilla* mainClass, QWidget* parent) :
//QTimer::singleShot(0, this, SLOT(refreshTable()));
ui->search->setInactiveText(tr("Search"));
ui->historyTree->setFocus();
}
QupZilla* HistoryManager::getQupZilla()
@ -225,9 +223,8 @@ void HistoryManager::refreshTable()
ui->historyTree->setUpdatesEnabled(true);
}
void HistoryManager::search()
void HistoryManager::search(const QString &searchText)
{
QString searchText = ui->search->text();
if (searchText.isEmpty()) {
refreshTable();
return;

View File

@ -41,12 +41,12 @@ public:
public slots:
void refreshTable();
void search(const QString &searchText);
private slots:
void itemDoubleClicked(QTreeWidgetItem* item);
void deleteItem();
void clearHistory();
void search();
void contextMenuRequested(const QPoint &position);
void loadInNewTab();
void itemControlClicked(QTreeWidgetItem* item);

View File

@ -18,17 +18,7 @@
<normaloff>:/icons/qupzilla.png</normaloff>:/icons/qupzilla.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="2">
<widget class="QLabel" name="label">
<property name="text">
<string>Search in history: </string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="LineEdit" name="search"/>
</item>
<item row="1" column="0" colspan="4">
<item row="0" column="0" colspan="3">
<widget class="TreeWidget" name="historyTree">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
@ -51,7 +41,7 @@
</column>
</widget>
</item>
<item row="2" column="0">
<item row="1" column="0">
<widget class="QPushButton" name="deleteB">
<property name="text">
<string>Delete</string>
@ -61,28 +51,29 @@
</property>
</widget>
</item>
<item row="2" column="1">
<item row="1" column="1">
<widget class="QPushButton" name="clearAll">
<property name="text">
<string>Clear All History</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QDialogButtonBox" name="close">
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
<item row="1" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>LineEdit</class>
<extends>QLineEdit</extends>
<header>lineedit.h</header>
</customwidget>
<customwidget>
<class>TreeWidget</class>
<extends>QTreeWidget</extends>

View File

@ -0,0 +1,110 @@
#include "browsinglibrary.h"
#include "ui_browsinglibrary.h"
#include "historymanager.h"
#include "bookmarksmanager.h"
#include "rssmanager.h"
#include "mainapplication.h"
BrowsingLibrary::BrowsingLibrary(QupZilla* mainClass, QWidget *parent)
: QWidget(parent)
, ui(new Ui::BrowsingLibrary)
, m_historyManager(new HistoryManager(mainClass))
, m_bookmarksManager(new BookmarksManager(mainClass))
, m_rssManager(mApp->rssManager())
, m_historyLoaded(false)
, m_bookmarksLoaded(false)
, m_rssLoaded(false)
{
ui->setupUi(this);
ui->searchLine->hide();
//CENTER on scren
const QRect screen = QApplication::desktop()->screenGeometry();
const QRect &size = QWidget::geometry();
QWidget::move( (screen.width()-size.width())/2, (screen.height()-size.height())/2 );
ui->tabs->AddTab(m_historyManager, QIcon(":/icons/other/bighistory.png"), tr("History"));
ui->tabs->AddTab(m_bookmarksManager, QIcon(":/icons/other/bigstar.png"), tr("Bookmarks"));
ui->tabs->AddTab(m_rssManager, QIcon(":/icons/other/bigrss.png"), tr("RSS"));
ui->tabs->SetMode(FancyTabWidget::Mode_LargeSidebar);
ui->tabs->SetBackgroundPixmap(QPixmap(":icons/other/background.png"));
connect(ui->tabs, SIGNAL(CurrentChanged(int)), this, SLOT(currentIndexChanged(int)));
connect(ui->searchLine, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(search()));
}
void BrowsingLibrary::currentIndexChanged(int index)
{
switch (index) {
case 0:
if (!m_historyLoaded) {
m_historyManager->refreshTable();
m_historyLoaded = true;
}
ui->searchLine->show();
break;
case 1:
if (!m_bookmarksLoaded) {
m_bookmarksManager->refreshTable();
m_bookmarksLoaded = true;
}
ui->searchLine->hide();
break;
case 2:
if (!m_rssLoaded) {
m_rssManager->refreshTable();
m_rssLoaded = true;
}
ui->searchLine->hide();
break;
default:
qWarning("BrowsingLibrary::currentIndexChanged() received index out of range!");
}
}
void BrowsingLibrary::search()
{
m_historyManager->search(ui->searchLine->text());
}
void BrowsingLibrary::showHistory(QupZilla* mainClass)
{
ui->tabs->SetCurrentIndex(0);
show();
m_historyManager->setMainWindow(mainClass);
if (!m_historyLoaded) {
m_historyManager->refreshTable();
m_historyLoaded = true;
}
}
void BrowsingLibrary::showBookmarks(QupZilla* mainClass)
{
ui->tabs->SetCurrentIndex(1);
show();
m_bookmarksManager->setMainWindow(mainClass);
if (!m_bookmarksLoaded) {
m_bookmarksManager->refreshTable();
m_bookmarksLoaded = true;
}
}
void BrowsingLibrary::showRSS(QupZilla* mainClass)
{
ui->tabs->SetCurrentIndex(2);
show();
m_rssManager->setMainWindow(mainClass);
m_rssManager->refreshTable();
m_rssLoaded = true;
}
BrowsingLibrary::~BrowsingLibrary()
{
delete ui;
}

View File

@ -0,0 +1,45 @@
#ifndef LIBRARY_H
#define LIBRARY_H
#include <QWidget>
#include <QDesktopWidget>
namespace Ui {
class BrowsingLibrary;
}
class HistoryManager;
class BookmarksManager;
class RSSManager;
class QupZilla;
class BrowsingLibrary : public QWidget
{
Q_OBJECT
public:
explicit BrowsingLibrary(QupZilla* mainClass, QWidget *parent = 0);
~BrowsingLibrary();
void showHistory(QupZilla* mainClass);
void showBookmarks(QupZilla* mainClass);
void showRSS(QupZilla* mainClass);
HistoryManager* historyManager() { return m_historyManager; }
BookmarksManager* bookmarksManager() { return m_bookmarksManager; }
RSSManager* rssManager() { return m_rssManager; }
private slots:
void currentIndexChanged(int index);
void search();
private:
Ui::BrowsingLibrary *ui;
HistoryManager* m_historyManager;
BookmarksManager* m_bookmarksManager;
RSSManager* m_rssManager;
bool m_historyLoaded;
bool m_bookmarksLoaded;
bool m_rssLoaded;
};
#endif // LIBRARY_H

View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>BrowsingLibrary</class>
<widget class="QWidget" name="BrowsingLibrary">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>762</width>
<height>477</height>
</rect>
</property>
<property name="windowTitle">
<string>Library</string>
</property>
<property name="windowIcon">
<iconset resource="../data/icons.qrc">
<normaloff>:/qupzilla.png</normaloff>:/qupzilla.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="margin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="1" column="0" colspan="2">
<widget class="FancyTabWidget" name="tabs" native="true"/>
</item>
<item row="0" column="0">
<widget class="QFrame" name="frame">
<property name="minimumSize">
<size>
<width>71</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>71</width>
<height>25</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background: url(':icons/other/library-bg-top.png') no-repeat;</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QFrame" name="frame_2">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background: url(':icons/other/library-bg-top-right.png') repeat;</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLineEdit" name="searchLine">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>23</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">QLineEdit
{
background: transparent; border-image: url(:/icons/locationbar/lineedit.png); border-width:4; color:black;
}</string>
</property>
<property name="placeholderText">
<string>Search...</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>FancyTabWidget</class>
<extends>QWidget</extends>
<header>fancytabwidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../data/icons.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -44,7 +44,6 @@ RSSManager::RSSManager(QupZilla* mainClass, QWidget* parent) :
ui->tabWidget->setElideMode(Qt::ElideRight);
m_networkManager = new QNetworkAccessManager();
connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(close()));
connect(ui->reload, SIGNAL(clicked()), this, SLOT(reloadFeed()));
connect(ui->deletebutton, SIGNAL(clicked()), this, SLOT(deleteFeed()));
connect(ui->edit, SIGNAL(clicked()), this, SLOT(editFeed()));
@ -66,12 +65,6 @@ void RSSManager::setMainWindow(QupZilla* window)
void RSSManager::refreshTable()
{
QSqlQuery query;
query.exec("SELECT count(id) FROM rss");
if (!query.next())
return;
if (query.value(0).toInt() == 0)
return;
ui->tabWidget->clear();
query.exec("SELECT address, title FROM rss");
int i = 0;
@ -101,6 +94,23 @@ void RSSManager::refreshTable()
ui->deletebutton->setEnabled(true);
ui->reload->setEnabled(true);
ui->edit->setEnabled(true);
} else {
ui->deletebutton->setEnabled(false);
ui->reload->setEnabled(false);
ui->edit->setEnabled(false);
QFrame *frame = new QFrame();
frame->setStyleSheet("background: white;");
QVBoxLayout *verticalLayout = new QVBoxLayout(frame);
QLabel *label_2 = new QLabel(frame);
label_2->setPixmap(QPixmap(":/icons/menu/rss.png"));
label_2->setAlignment(Qt::AlignBottom|Qt::AlignHCenter);
verticalLayout->addWidget(label_2);
QLabel *label = new QLabel(frame);
label->setAlignment(Qt::AlignHCenter|Qt::AlignTop);
label->setText(tr("You don't have any RSS Feeds.<br/>\nPlease add some with RSS icon in navigation bar on site which offers feeds."));
verticalLayout->addWidget(label);
ui->tabWidget->addTab(frame, tr("Empty"));
}
}
@ -126,12 +136,8 @@ void RSSManager::deleteFeed()
query.exec("DELETE FROM rss WHERE address='"+url+"'");
ui->tabWidget->removeTab(ui->tabWidget->currentIndex());
if (ui->tabWidget->count() == 0) {
ui->deletebutton->setEnabled(false);
ui->reload->setEnabled(false);
ui->edit->setEnabled(false);
if (ui->tabWidget->count() == 0)
refreshTable();
}
}
void RSSManager::editFeed()

View File

@ -24,6 +24,7 @@
#include <QNetworkAccessManager>
#include <QFormLayout>
#include <QPointer>
#include <QDialogButtonBox>
namespace Ui {
class RSSManager;

View File

@ -19,7 +19,7 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
<number>6</number>
</property>
<item>
<widget class="QTabWidget" name="tabWidget">
@ -49,48 +49,6 @@
<property name="rightMargin">
<number>0</number>
</property>
<item>
<widget class="QFrame" name="frame">
<property name="styleSheet">
<string notr="true">background: white;</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="pixmap">
<pixmap resource="../data/icons.qrc">:/icons/menu/rss.png</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignBottom|Qt::AlignHCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>You don't have any RSS Feeds.&lt;br/&gt;
Please add some with RSS icon in navigation bar on site which offers feeds.</string>
</property>
<property name="alignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
@ -140,13 +98,6 @@ Please add some with RSS icon in navigation bar on site which offers feeds.</str
</property>
</spacer>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>

View File

@ -282,7 +282,7 @@ void TabWidget::closeTab(int index)
// disconnect(weView(index), SIGNAL(siteIconChanged()), p_QupZilla->locationBar(), SLOT(siteIconChanged()));
// disconnect(weView(index), SIGNAL(showUrl(QUrl)), p_QupZilla->locationBar(), SLOT(showUrl(QUrl)));
disconnect(webView, SIGNAL(wantsCloseTab(int)), this, SLOT(closeTab(int)));
disconnect(webView, SIGNAL(changed()), mApp, SLOT(setChanged()));
disconnect(webView, SIGNAL(changed()), mApp, SLOT(setStateChanged()));
disconnect(webView, SIGNAL(ipChanged(QString)), p_QupZilla->ipLabel(), SLOT(setText(QString)));
//Save last tab url and history
m_closedTabsManager->saveView(webView);

View File

@ -296,102 +296,102 @@ p, li { white-space: pre-wrap; }
<translation>Adresa</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="54"/>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="47"/>
<source>Delete</source>
<translation>Odstranit</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="57"/>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="50"/>
<source>Del</source>
<translation>Del</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="64"/>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="57"/>
<source>Add Folder</source>
<translation>Přidat složku</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="80"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="79"/>
<source>Add new folder</source>
<translation>Přidat složku</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="80"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="79"/>
<source>Choose name for new bookmark folder: </source>
<translation>Zvolte jméno pro novou složku:</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="110"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="109"/>
<source>New Tab</source>
<translation>Nový panel</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="160"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="185"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="210"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="338"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="380"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="159"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="184"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="209"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="337"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="379"/>
<source>Bookmarks In Menu</source>
<translation>Záložky v menu</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="161"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="190"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="212"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="339"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="381"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="160"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="189"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="211"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="338"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="380"/>
<source>Bookmarks In ToolBar</source>
<translation>Panel záložek</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="153"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="152"/>
<source>Open link in actual &amp;tab</source>
<translation>Otevřít odkaz v &amp;aktuálním panelu</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="154"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="153"/>
<source>Open link in &amp;new tab</source>
<translation>Otevřít odkaz v novém &amp;panelu</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="158"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="157"/>
<source>Move bookmark to &amp;folder</source>
<translation>Přesunout záložku do &amp;složky</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="169"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="168"/>
<source>&amp;Close</source>
<translation>&amp;Zavřít</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="159"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="337"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="379"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="158"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="336"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="378"/>
<source>Unsorted Bookmarks</source>
<translation>Nesetříděné záložky</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="334"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="333"/>
<source>&lt;b&gt;Warning: &lt;/b&gt;You already have this page bookmarked!</source>
<translation>&lt;b&gt;Upozornění: &lt;/b&gt;Tuto stránku již máte v záložkách!</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="345"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="344"/>
<source>Choose name and location of bookmark.</source>
<translation>Zvolte jméno a umístění záložky.</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="349"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="348"/>
<source>Add New Bookmark</source>
<translation>Přidat záložku</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="387"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="386"/>
<source>Choose folder for bookmarks:</source>
<translation>Zvolte složku pro záložky:</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="389"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="388"/>
<source>Bookmark All Tabs</source>
<translation>Přidat všechny panely do záložek</translation>
</message>
@ -572,6 +572,34 @@ p, li { white-space: pre-wrap; }
<translation>Nesetříděné záložky</translation>
</message>
</context>
<context>
<name>BrowsingLibrary</name>
<message>
<location filename="../src/other/browsinglibrary.ui" line="14"/>
<source>Library</source>
<translation>Knihovna</translation>
</message>
<message>
<location filename="../src/other/browsinglibrary.ui" line="95"/>
<source>Search...</source>
<translation>Hledat...</translation>
</message>
<message>
<location filename="../src/other/browsinglibrary.cpp" line="26"/>
<source>History</source>
<translation>Historie</translation>
</message>
<message>
<location filename="../src/other/browsinglibrary.cpp" line="27"/>
<source>Bookmarks</source>
<translation>Záložky</translation>
</message>
<message>
<location filename="../src/other/browsinglibrary.cpp" line="28"/>
<source>RSS</source>
<translation>RSS</translation>
</message>
</context>
<context>
<name>ClearPrivateData</name>
<message>
@ -812,6 +840,34 @@ p, li { white-space: pre-wrap; }
<translation>konce relace</translation>
</message>
</context>
<context>
<name>Core::Internal::FancyTabWidget</name>
<message>
<location filename="../src/3rdparty/fancytabwidget.cpp" line="646"/>
<source>Large sidebar</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/3rdparty/fancytabwidget.cpp" line="647"/>
<source>Small sidebar</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/3rdparty/fancytabwidget.cpp" line="648"/>
<source>Plain sidebar</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/3rdparty/fancytabwidget.cpp" line="649"/>
<source>Tabs on top</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/3rdparty/fancytabwidget.cpp" line="650"/>
<source>Icons on top</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DownloadItem</name>
<message>
@ -825,118 +881,118 @@ p, li { white-space: pre-wrap; }
<translation></translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="64"/>
<location filename="../src/downloads/downloaditem.cpp" line="63"/>
<source>Remaining time unavailable</source>
<translation>Neznámý zbývající čas</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="129"/>
<location filename="../src/downloads/downloaditem.cpp" line="128"/>
<source>Done - %1</source>
<translation>Hotovo - %1</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="181"/>
<location filename="../src/downloads/downloaditem.cpp" line="311"/>
<location filename="../src/downloads/downloaditem.cpp" line="180"/>
<location filename="../src/downloads/downloaditem.cpp" line="310"/>
<source>Cancelled</source>
<translation>Zrušeno</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="187"/>
<location filename="../src/downloads/downloaditem.cpp" line="186"/>
<source>few seconds</source>
<translation>několik sekund</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="189"/>
<location filename="../src/downloads/downloaditem.cpp" line="188"/>
<source>seconds</source>
<translation>sekund</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="191"/>
<location filename="../src/downloads/downloaditem.cpp" line="190"/>
<source>minutes</source>
<translation>minut</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="193"/>
<location filename="../src/downloads/downloaditem.cpp" line="192"/>
<source>hours</source>
<translation>hodin</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="199"/>
<location filename="../src/downloads/downloaditem.cpp" line="198"/>
<source>Unknown speed</source>
<translation>Neznámá rychlost</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="216"/>
<location filename="../src/downloads/downloaditem.cpp" line="215"/>
<source>Unknown size</source>
<translation>Neznámá velikost</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="252"/>
<location filename="../src/downloads/downloaditem.cpp" line="251"/>
<source>Remaining %1 - %2 of %3 (%4)</source>
<translation>Zbývá %1 - %2 z %3 (%4)</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="265"/>
<location filename="../src/downloads/downloaditem.cpp" line="264"/>
<source>Cancelled - %1</source>
<translation>Zrušeno - %1</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="279"/>
<location filename="../src/downloads/downloaditem.cpp" line="278"/>
<source>Delete file</source>
<translation>Smazat soubor</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="279"/>
<location filename="../src/downloads/downloaditem.cpp" line="278"/>
<source>Do you want to also delete dowloaded file?</source>
<translation>Chcete také smazat stahovaný soubor?</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="295"/>
<location filename="../src/downloads/downloaditem.cpp" line="294"/>
<source>Open File</source>
<translation>Otevřít soubor</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="297"/>
<location filename="../src/downloads/downloaditem.cpp" line="296"/>
<source>Open Folder</source>
<translation>Otevřít složku</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="299"/>
<location filename="../src/downloads/downloaditem.cpp" line="298"/>
<source>Go to Download Page</source>
<translation>Přejít na stránku stahování</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="300"/>
<location filename="../src/downloads/downloaditem.cpp" line="299"/>
<source>Copy Download Link</source>
<translation>Kopírovat stahovaný odkaz</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="308"/>
<location filename="../src/downloads/downloaditem.cpp" line="307"/>
<source>Cancel downloading</source>
<translation>Zrušit stahování</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="309"/>
<location filename="../src/downloads/downloaditem.cpp" line="308"/>
<source>Clear</source>
<translation>Vyčistit</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="311"/>
<location filename="../src/downloads/downloaditem.cpp" line="310"/>
<source>Error</source>
<translation>Chyba</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="318"/>
<location filename="../src/downloads/downloaditem.cpp" line="317"/>
<source>New tab</source>
<translation>Nový panel</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="339"/>
<location filename="../src/downloads/downloaditem.cpp" line="338"/>
<source>Not found</source>
<translation>Soubor neexistuje</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="339"/>
<location filename="../src/downloads/downloaditem.cpp" line="338"/>
<source>Sorry, the file
%1
was not found!</source>
@ -945,12 +1001,12 @@ p, li { white-space: pre-wrap; }
nebyl nalezen!</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="354"/>
<location filename="../src/downloads/downloaditem.cpp" line="353"/>
<source>Error: Cannot write to file!</source>
<translation>Chyba: Nelze zapisovat do souboru!</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="366"/>
<location filename="../src/downloads/downloaditem.cpp" line="365"/>
<source>Error: </source>
<translation>Chyba:</translation>
</message>
@ -1062,67 +1118,57 @@ nebyl nalezen!</translation>
<translation>Historie</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="24"/>
<source>Search in history: </source>
<translation>Vyhledávat v historii:</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="44"/>
<location filename="../src/history/historymanager.ui" line="34"/>
<source>Title</source>
<translation>Titulek</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="49"/>
<location filename="../src/history/historymanager.ui" line="39"/>
<source>Url</source>
<translation>Adresa</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="57"/>
<location filename="../src/history/historymanager.ui" line="47"/>
<source>Delete</source>
<translation>Odstranit</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="60"/>
<location filename="../src/history/historymanager.ui" line="50"/>
<source>Del</source>
<translation>Del</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="67"/>
<location filename="../src/history/historymanager.ui" line="57"/>
<source>Clear All History</source>
<translation>Vymazat celou historii</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="59"/>
<source>Search</source>
<translation>Vyhledávání</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="92"/>
<location filename="../src/history/historymanager.cpp" line="90"/>
<source>New Tab</source>
<translation>Nový panel</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="104"/>
<location filename="../src/history/historymanager.cpp" line="102"/>
<source>Open link in actual tab</source>
<translation>Otevřít odkaz v aktuálním panelu</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="105"/>
<location filename="../src/history/historymanager.cpp" line="103"/>
<source>Open link in new tab</source>
<translation>Otevřít odkaz v novém panelu</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="109"/>
<location filename="../src/history/historymanager.cpp" line="107"/>
<source>Close</source>
<translation>Zavřít</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="172"/>
<location filename="../src/history/historymanager.cpp" line="170"/>
<source>Confirmation</source>
<translation>Potvrzení</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="173"/>
<location filename="../src/history/historymanager.cpp" line="171"/>
<source>Are you sure to delete all history?</source>
<translation>Opravdu chcete vymazat celou historii?</translation>
</message>
@ -1211,12 +1257,12 @@ nebyl nalezen!</translation>
<context>
<name>MainApplication</name>
<message>
<location filename="../src/app/mainapplication.cpp" line="526"/>
<location filename="../src/app/mainapplication.cpp" line="517"/>
<source>Last session crashed</source>
<translation>Poslední relace spadla</translation>
</message>
<message>
<location filename="../src/app/mainapplication.cpp" line="527"/>
<location filename="../src/app/mainapplication.cpp" line="518"/>
<source>&lt;b&gt;QupZilla crashed :-(&lt;/b&gt;&lt;br/&gt;Oops, last session of QupZilla ends with its crash. We are very sorry. Would you try to restore saved state?</source>
<translation>&lt;b&gt;QupZilla spadla :-(&lt;/b&gt;&lt;br/&gt;Oops, poslední relace QupZilly skončila jejím pádem. Velice se omlouváme. Přejete si obnovit uložený stav?</translation>
</message>
@ -2332,7 +2378,7 @@ nebyl nalezen!</translation>
<translation>Defaultní</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1133"/>
<location filename="../src/app/qupzilla.cpp" line="1124"/>
<source>Start Private Browsing</source>
<translation>Spustit anonymní prohlížení</translation>
</message>
@ -2490,48 +2536,48 @@ nebyl nalezen!</translation>
<translation>Předvo&amp;lby</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1014"/>
<location filename="../src/app/qupzilla.cpp" line="1015"/>
<location filename="../src/app/qupzilla.cpp" line="1005"/>
<location filename="../src/app/qupzilla.cpp" line="1006"/>
<source>Web Inspector</source>
<translation>Web Inspektor</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1057"/>
<location filename="../src/app/qupzilla.cpp" line="1048"/>
<source>Open file...</source>
<translation>Otevřít soubor...</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1120"/>
<location filename="../src/app/qupzilla.cpp" line="1111"/>
<source>Are you sure you want to turn on private browsing?</source>
<translation>Jste si jistý že chcete zapnout soukromé prohlížení?</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1121"/>
<location filename="../src/app/qupzilla.cpp" line="1112"/>
<source>When private browsing is turned on, some actions concerning your privacy will be disabled:</source>
<translation>Se zapnutým soukromým prohlížením jsou některé akce týkající se soukromí vypnuty:</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1124"/>
<location filename="../src/app/qupzilla.cpp" line="1115"/>
<source>Webpages are not added to the history.</source>
<translation>Stránky nejsou přidávány do historie.</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1125"/>
<location filename="../src/app/qupzilla.cpp" line="1116"/>
<source>New cookies are not stored, but current cookies can be accessed.</source>
<translation>Nové cookies nejsou přijímány, ale současné cookies jsou zasílány.</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1126"/>
<location filename="../src/app/qupzilla.cpp" line="1117"/>
<source>Your session won&apos;t be stored.</source>
<translation>Vaše relace nebude uložena.</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1128"/>
<location filename="../src/app/qupzilla.cpp" line="1119"/>
<source>Until you close the window, you can still click the Back and Forward buttons to return to the webpages you have opened.</source>
<translation>Než zavřete prohlížeč, stále můžete použít tlačítka Zpět a Vpřed k vrácení se na stránky které jste otevřeli.</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1172"/>
<location filename="../src/app/qupzilla.cpp" line="1163"/>
<source>There are still %1 open tabs and your session won&apos;t be stored. Are you sure to quit?</source>
<translation>Ještě je otevřeno %1 panelů a Vaše relace nebude uložena. Opravdu chcete skončit?</translation>
</message>
@ -2571,69 +2617,69 @@ Prosím přidejte si nějaký kliknutím na RSS ikonku v navigačním řádku.</
<translation>Smazat kanál</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="82"/>
<location filename="../src/rss/rssmanager.cpp" line="81"/>
<source>News</source>
<translation>Novinky</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="91"/>
<location filename="../src/rss/rssmanager.cpp" line="114"/>
<location filename="../src/rss/rssmanager.cpp" line="90"/>
<location filename="../src/rss/rssmanager.cpp" line="113"/>
<source>Loading...</source>
<translation>Načítám...</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="154"/>
<location filename="../src/rss/rssmanager.cpp" line="153"/>
<source>Fill title and URL of a feed: </source>
<translation>Vyplňte titulek a adresu kanálu: </translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="156"/>
<location filename="../src/rss/rssmanager.cpp" line="155"/>
<source>Feed title: </source>
<translation>Titulek kanálu: </translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="157"/>
<location filename="../src/rss/rssmanager.cpp" line="156"/>
<source>Feed URL: </source>
<translation>Adresa kanálu: </translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="163"/>
<location filename="../src/rss/rssmanager.cpp" line="162"/>
<source>Edit RSS Feed</source>
<translation>Upravit kanál</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="200"/>
<location filename="../src/rss/rssmanager.cpp" line="199"/>
<source>Open link in actual tab</source>
<translation>Otevřít odkaz v aktuálním panelu</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="201"/>
<location filename="../src/rss/rssmanager.cpp" line="200"/>
<source>Open link in new tab</source>
<translation>Otevřít odkaz v novém panelu</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="203"/>
<location filename="../src/rss/rssmanager.cpp" line="202"/>
<source>Close</source>
<translation>Zavřít</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="226"/>
<location filename="../src/rss/rssmanager.cpp" line="232"/>
<location filename="../src/rss/rssmanager.cpp" line="225"/>
<location filename="../src/rss/rssmanager.cpp" line="231"/>
<source>New Tab</source>
<translation>Nový panel</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="298"/>
<location filename="../src/rss/rssmanager.cpp" line="297"/>
<source>Error in fetching feed</source>
<translation>Chyba při stahování kanálu</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="319"/>
<location filename="../src/rss/rssmanager.cpp" line="318"/>
<source>RSS feed duplicated</source>
<translation>Duplikovaný kanál</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="319"/>
<location filename="../src/rss/rssmanager.cpp" line="318"/>
<source>You already have this feed.</source>
<translation>Tento kanál již odebíráte.</translation>
</message>

View File

@ -300,102 +300,102 @@ p, li { white-space: pre-wrap; }
<translation>Adresa</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="54"/>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="47"/>
<source>Delete</source>
<translation>Odstrániť</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="57"/>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="50"/>
<source>Del</source>
<translation>Del</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="64"/>
<location filename="../src/bookmarks/bookmarksmanager.ui" line="57"/>
<source>Add Folder</source>
<translation>Pridať zložku</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="80"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="79"/>
<source>Add new folder</source>
<translation>Pridať novú zložku</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="80"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="79"/>
<source>Choose name for new bookmark folder: </source>
<translation>Zvoľte meno pre novú zložku:</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="110"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="109"/>
<source>New Tab</source>
<translation>Nový panel</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="160"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="185"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="210"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="338"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="380"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="159"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="184"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="209"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="337"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="379"/>
<source>Bookmarks In Menu</source>
<translation>Záložky v menu</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="161"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="190"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="212"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="339"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="381"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="160"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="189"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="211"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="338"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="380"/>
<source>Bookmarks In ToolBar</source>
<translation>Panel záložiek</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="153"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="152"/>
<source>Open link in actual &amp;tab</source>
<translation>Otvoriť odkaz v &amp;aktuálnom panely</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="154"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="153"/>
<source>Open link in &amp;new tab</source>
<translation>Otvoriť odkaz na &amp;novom panely</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="158"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="157"/>
<source>Move bookmark to &amp;folder</source>
<translation>Presunúť záložku do &amp;zložky</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="169"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="168"/>
<source>&amp;Close</source>
<translation>&amp;Zavrieť</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="159"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="337"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="379"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="158"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="336"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="378"/>
<source>Unsorted Bookmarks</source>
<translation>Nezotriedené záložky</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="334"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="333"/>
<source>&lt;b&gt;Warning: &lt;/b&gt;You already have this page bookmarked!</source>
<translation>&lt;b&gt;Upozornenie: &lt;/b&gt;Túto stránku máte už v záložkách!</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="345"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="344"/>
<source>Choose name and location of bookmark.</source>
<translation>Zvoľte meno a umiestnenie záložky.</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="349"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="348"/>
<source>Add New Bookmark</source>
<translation>Pridať záložku</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="387"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="386"/>
<source>Choose folder for bookmarks:</source>
<translation>Zvoľte zložku pre záložku:</translation>
</message>
<message>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="389"/>
<location filename="../src/bookmarks/bookmarksmanager.cpp" line="388"/>
<source>Bookmark All Tabs</source>
<translation>Pridať všetky panely do záložiek</translation>
</message>
@ -576,6 +576,34 @@ p, li { white-space: pre-wrap; }
<translation>Nezotriedené záložky</translation>
</message>
</context>
<context>
<name>BrowsingLibrary</name>
<message>
<location filename="../src/other/browsinglibrary.ui" line="14"/>
<source>Library</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/other/browsinglibrary.ui" line="95"/>
<source>Search...</source>
<translation type="unfinished">Hľadať...</translation>
</message>
<message>
<location filename="../src/other/browsinglibrary.cpp" line="26"/>
<source>History</source>
<translation type="unfinished">História</translation>
</message>
<message>
<location filename="../src/other/browsinglibrary.cpp" line="27"/>
<source>Bookmarks</source>
<translation type="unfinished">Záložky</translation>
</message>
<message>
<location filename="../src/other/browsinglibrary.cpp" line="28"/>
<source>RSS</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ClearPrivateData</name>
<message>
@ -815,6 +843,34 @@ p, li { white-space: pre-wrap; }
<translation>Konca relácie</translation>
</message>
</context>
<context>
<name>Core::Internal::FancyTabWidget</name>
<message>
<location filename="../src/3rdparty/fancytabwidget.cpp" line="646"/>
<source>Large sidebar</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/3rdparty/fancytabwidget.cpp" line="647"/>
<source>Small sidebar</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/3rdparty/fancytabwidget.cpp" line="648"/>
<source>Plain sidebar</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/3rdparty/fancytabwidget.cpp" line="649"/>
<source>Tabs on top</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/3rdparty/fancytabwidget.cpp" line="650"/>
<source>Icons on top</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DownloadItem</name>
<message>
@ -828,118 +884,118 @@ p, li { white-space: pre-wrap; }
<translation></translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="64"/>
<location filename="../src/downloads/downloaditem.cpp" line="63"/>
<source>Remaining time unavailable</source>
<translation>Neznámy zostávajúci čas</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="129"/>
<location filename="../src/downloads/downloaditem.cpp" line="128"/>
<source>Done - %1</source>
<translation>Dokončené - %1</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="181"/>
<location filename="../src/downloads/downloaditem.cpp" line="311"/>
<location filename="../src/downloads/downloaditem.cpp" line="180"/>
<location filename="../src/downloads/downloaditem.cpp" line="310"/>
<source>Cancelled</source>
<translation>Zrušené</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="187"/>
<location filename="../src/downloads/downloaditem.cpp" line="186"/>
<source>few seconds</source>
<translation>pár sekúnd</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="189"/>
<location filename="../src/downloads/downloaditem.cpp" line="188"/>
<source>seconds</source>
<translation>sekúnd</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="191"/>
<location filename="../src/downloads/downloaditem.cpp" line="190"/>
<source>minutes</source>
<translation>minút</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="193"/>
<location filename="../src/downloads/downloaditem.cpp" line="192"/>
<source>hours</source>
<translation>hodín</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="199"/>
<location filename="../src/downloads/downloaditem.cpp" line="198"/>
<source>Unknown speed</source>
<translation>Neznáma rýchslosť</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="216"/>
<location filename="../src/downloads/downloaditem.cpp" line="215"/>
<source>Unknown size</source>
<translation>Neznáma veľkosť</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="252"/>
<location filename="../src/downloads/downloaditem.cpp" line="251"/>
<source>Remaining %1 - %2 of %3 (%4)</source>
<translation>Zostáva %1 - %2 z %3 (%4)</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="265"/>
<location filename="../src/downloads/downloaditem.cpp" line="264"/>
<source>Cancelled - %1</source>
<translation>Zrušene - %1</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="279"/>
<location filename="../src/downloads/downloaditem.cpp" line="278"/>
<source>Delete file</source>
<translation>Vymazať súbor</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="279"/>
<location filename="../src/downloads/downloaditem.cpp" line="278"/>
<source>Do you want to also delete dowloaded file?</source>
<translation>Chcete zmazať sťahovaný súbor?</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="295"/>
<location filename="../src/downloads/downloaditem.cpp" line="294"/>
<source>Open File</source>
<translation>Otvoriť súbor</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="297"/>
<location filename="../src/downloads/downloaditem.cpp" line="296"/>
<source>Open Folder</source>
<translation>Otvoriť priečinok</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="299"/>
<location filename="../src/downloads/downloaditem.cpp" line="298"/>
<source>Go to Download Page</source>
<translation>Prejsť k sťahovanie stránke</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="300"/>
<location filename="../src/downloads/downloaditem.cpp" line="299"/>
<source>Copy Download Link</source>
<translation>Kopírovať sťahovaný odkaz</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="308"/>
<location filename="../src/downloads/downloaditem.cpp" line="307"/>
<source>Cancel downloading</source>
<translation>Zrušiť sťahovanie</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="309"/>
<location filename="../src/downloads/downloaditem.cpp" line="308"/>
<source>Clear</source>
<translation>Vyčistiť</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="311"/>
<location filename="../src/downloads/downloaditem.cpp" line="310"/>
<source>Error</source>
<translation>Chyba</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="318"/>
<location filename="../src/downloads/downloaditem.cpp" line="317"/>
<source>New tab</source>
<translation>Nový panel</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="339"/>
<location filename="../src/downloads/downloaditem.cpp" line="338"/>
<source>Not found</source>
<translation>Súbor neexistuje</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="339"/>
<location filename="../src/downloads/downloaditem.cpp" line="338"/>
<source>Sorry, the file
%1
was not found!</source>
@ -948,12 +1004,12 @@ p, li { white-space: pre-wrap; }
nebol nájdený!</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="354"/>
<location filename="../src/downloads/downloaditem.cpp" line="353"/>
<source>Error: Cannot write to file!</source>
<translation>Chyba: Nejde zapisovať do súboru!</translation>
</message>
<message>
<location filename="../src/downloads/downloaditem.cpp" line="366"/>
<location filename="../src/downloads/downloaditem.cpp" line="365"/>
<source>Error: </source>
<translation>Chyba: </translation>
</message>
@ -1065,67 +1121,57 @@ p, li { white-space: pre-wrap; }
<translation>História</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="24"/>
<source>Search in history: </source>
<translation>Hľadať v histórii:</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="44"/>
<location filename="../src/history/historymanager.ui" line="34"/>
<source>Title</source>
<translation>Názov</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="49"/>
<location filename="../src/history/historymanager.ui" line="39"/>
<source>Url</source>
<translation>Adresa</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="57"/>
<location filename="../src/history/historymanager.ui" line="47"/>
<source>Delete</source>
<translation>Vymazať</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="60"/>
<location filename="../src/history/historymanager.ui" line="50"/>
<source>Del</source>
<translation>Del</translation>
</message>
<message>
<location filename="../src/history/historymanager.ui" line="67"/>
<location filename="../src/history/historymanager.ui" line="57"/>
<source>Clear All History</source>
<translation>Vymazať celú históriu</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="59"/>
<source>Search</source>
<translation>Hľadať</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="92"/>
<location filename="../src/history/historymanager.cpp" line="90"/>
<source>New Tab</source>
<translation>Nový panel</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="104"/>
<location filename="../src/history/historymanager.cpp" line="102"/>
<source>Open link in actual tab</source>
<translation>Otvoriť odkaz v aktuálnom panely</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="105"/>
<location filename="../src/history/historymanager.cpp" line="103"/>
<source>Open link in new tab</source>
<translation>Otvoriť odkaz na novom panely</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="109"/>
<location filename="../src/history/historymanager.cpp" line="107"/>
<source>Close</source>
<translation>Zavrieť</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="172"/>
<location filename="../src/history/historymanager.cpp" line="170"/>
<source>Confirmation</source>
<translation>Potvrdenie</translation>
</message>
<message>
<location filename="../src/history/historymanager.cpp" line="173"/>
<location filename="../src/history/historymanager.cpp" line="171"/>
<source>Are you sure to delete all history?</source>
<translation>Skutočne chcete vymazať celú históriu?</translation>
</message>
@ -1213,12 +1259,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>MainApplication</name>
<message>
<location filename="../src/app/mainapplication.cpp" line="526"/>
<location filename="../src/app/mainapplication.cpp" line="517"/>
<source>Last session crashed</source>
<translation>Posledná relácia spadla</translation>
</message>
<message>
<location filename="../src/app/mainapplication.cpp" line="527"/>
<location filename="../src/app/mainapplication.cpp" line="518"/>
<source>&lt;b&gt;QupZilla crashed :-(&lt;/b&gt;&lt;br/&gt;Oops, last session of QupZilla ends with its crash. We are very sorry. Would you try to restore saved state?</source>
<translation>&lt;b&gt;QupZilla spadla :-(&lt;/b&gt;&lt;br/&gt;Oops, posledná relácia QupZilly skončila chybou. Prepáčte. Chcete obnoviť uložený stav?</translation>
</message>
@ -2334,7 +2380,7 @@ p, li { white-space: pre-wrap; }
<translation>Základné</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1133"/>
<location filename="../src/app/qupzilla.cpp" line="1124"/>
<source>Start Private Browsing</source>
<translation>Spustiť anonymné prehliadanie</translation>
</message>
@ -2491,48 +2537,48 @@ p, li { white-space: pre-wrap; }
<translation>Pr&amp;edvoľby</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1014"/>
<location filename="../src/app/qupzilla.cpp" line="1015"/>
<location filename="../src/app/qupzilla.cpp" line="1005"/>
<location filename="../src/app/qupzilla.cpp" line="1006"/>
<source>Web Inspector</source>
<translation>Web inšpektor</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1057"/>
<location filename="../src/app/qupzilla.cpp" line="1048"/>
<source>Open file...</source>
<translation>Otvoriť súbor...</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1120"/>
<location filename="../src/app/qupzilla.cpp" line="1111"/>
<source>Are you sure you want to turn on private browsing?</source>
<translation>Ste si istý, že chcete zapnúť súkromné prehliadanie?</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1121"/>
<location filename="../src/app/qupzilla.cpp" line="1112"/>
<source>When private browsing is turned on, some actions concerning your privacy will be disabled:</source>
<translation>So zapnutým súkromným prehliadaním niektoré akcie týkajúce sa súkromia vypnuté:</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1124"/>
<location filename="../src/app/qupzilla.cpp" line="1115"/>
<source>Webpages are not added to the history.</source>
<translation>Stránky nie pridávané do histórie.</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1125"/>
<location filename="../src/app/qupzilla.cpp" line="1116"/>
<source>New cookies are not stored, but current cookies can be accessed.</source>
<translation>Nové cookies nie prijímané, ale súčasné cookies zasielané.</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1126"/>
<location filename="../src/app/qupzilla.cpp" line="1117"/>
<source>Your session won&apos;t be stored.</source>
<translation>Vaša relácia nebude uložená.</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1128"/>
<location filename="../src/app/qupzilla.cpp" line="1119"/>
<source>Until you close the window, you can still click the Back and Forward buttons to return to the webpages you have opened.</source>
<translation>Dokiaľ nezavriete prehliadač, tak stále môžete používať tlačidla Späť a Dopredu k vráteniu sa na stránky, ktoré ste mali otvorené.</translation>
</message>
<message>
<location filename="../src/app/qupzilla.cpp" line="1172"/>
<location filename="../src/app/qupzilla.cpp" line="1163"/>
<source>There are still %1 open tabs and your session won&apos;t be stored. Are you sure to quit?</source>
<translation>Stále otvorené %1 panely a Vaša relácia nebude uložená. Skutočne chcete skončiť?</translation>
</message>
@ -2572,69 +2618,69 @@ Prosím pridajte si nejaký kliknutím na RSS ikonku v navigačnom riadku.</tran
<translation>Zmazať kanál</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="82"/>
<location filename="../src/rss/rssmanager.cpp" line="81"/>
<source>News</source>
<translation>Novinky</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="91"/>
<location filename="../src/rss/rssmanager.cpp" line="114"/>
<location filename="../src/rss/rssmanager.cpp" line="90"/>
<location filename="../src/rss/rssmanager.cpp" line="113"/>
<source>Loading...</source>
<translation>Nahrávam...</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="154"/>
<location filename="../src/rss/rssmanager.cpp" line="153"/>
<source>Fill title and URL of a feed: </source>
<translation>Vyplnte názov a adresu kanálu: </translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="156"/>
<location filename="../src/rss/rssmanager.cpp" line="155"/>
<source>Feed title: </source>
<translation>Názov kanálu: </translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="157"/>
<location filename="../src/rss/rssmanager.cpp" line="156"/>
<source>Feed URL: </source>
<translation>Adresa kanálu: </translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="163"/>
<location filename="../src/rss/rssmanager.cpp" line="162"/>
<source>Edit RSS Feed</source>
<translation>Upraviť RSS</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="200"/>
<location filename="../src/rss/rssmanager.cpp" line="199"/>
<source>Open link in actual tab</source>
<translation>Otvoriť odkaz v aktuálnom panely</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="201"/>
<location filename="../src/rss/rssmanager.cpp" line="200"/>
<source>Open link in new tab</source>
<translation>Otvoriť odkaz na novom panely</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="203"/>
<location filename="../src/rss/rssmanager.cpp" line="202"/>
<source>Close</source>
<translation>Zavrieť</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="226"/>
<location filename="../src/rss/rssmanager.cpp" line="232"/>
<location filename="../src/rss/rssmanager.cpp" line="225"/>
<location filename="../src/rss/rssmanager.cpp" line="231"/>
<source>New Tab</source>
<translation>Nový panel</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="298"/>
<location filename="../src/rss/rssmanager.cpp" line="297"/>
<source>Error in fetching feed</source>
<translation>Chyba pri sťahovaní kanálu</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="319"/>
<location filename="../src/rss/rssmanager.cpp" line="318"/>
<source>RSS feed duplicated</source>
<translation>Duplikovaný kanál</translation>
</message>
<message>
<location filename="../src/rss/rssmanager.cpp" line="319"/>
<location filename="../src/rss/rssmanager.cpp" line="318"/>
<source>You already have this feed.</source>
<translation>Tento kanál odoberáte.</translation>
</message>