File indexing completed on 2024-04-21 04:58:15

0001 /* This file is part of the KDE project
0002     SPDX-FileCopyrightText: 2009 Pino Toscano <pino@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "konqhistorydialog.h"
0008 #include "konqhistoryview.h"
0009 
0010 #include "konqhistory.h"
0011 #include "konqmainwindow.h"
0012 #include "konqmainwindowfactory.h"
0013 #include "konqurl.h"
0014 
0015 #include <QAction>
0016 #include <QTimer>
0017 #include <QMenu>
0018 #include <QToolBar>
0019 #include <QToolButton>
0020 #include <QVBoxLayout>
0021 #include <QModelIndex>
0022 #include <QTreeView>
0023 
0024 #include <KWindowConfig>
0025 #include <kactioncollection.h>
0026 #include <kguiitem.h>
0027 #include <QIcon>
0028 #include <KLocalizedString>
0029 #include <klineedit.h>
0030 #include <ktoggleaction.h>
0031 #include <KSharedConfig>
0032 #include <KConfigGroup>
0033 #include <QDialogButtonBox>
0034 #include <QPushButton>
0035 
0036 KonqHistoryDialog::KonqHistoryDialog(KonqMainWindow *parent)
0037     : QDialog(parent), m_mainWindow(parent), m_settings(KonqHistorySettings::self())
0038 {
0039     setWindowTitle(i18nc("@title:window", "History"));
0040 
0041     QVBoxLayout *mainLayout = new QVBoxLayout(this);
0042 
0043     m_historyView = new KonqHistoryView(this);
0044     connect(m_historyView->treeView(), &QTreeView::activated, this, &KonqHistoryDialog::slotOpenIndex);
0045     connect(m_historyView, &KonqHistoryView::openUrlInNewWindow, this, &KonqHistoryDialog::slotOpenWindow);
0046     connect(m_historyView, &KonqHistoryView::openUrlInNewTab, this, &KonqHistoryDialog::slotOpenTab);
0047     connect(m_historyView, &KonqHistoryView::openUrlInCurrentTab, this, &KonqHistoryDialog::slotOpenCurrentTab);
0048     connect(m_settings, &KonqHistorySettings::settingsChanged, this, &KonqHistoryDialog::reparseConfiguration);
0049 
0050     KActionCollection *collection = m_historyView->actionCollection();
0051 
0052     QToolBar *toolBar = new QToolBar(this);
0053     toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
0054     QToolButton *sortButton = new QToolButton(toolBar);
0055     sortButton->setText(i18nc("@action:inmenu Parent of 'By Name' and 'By Date'", "Sort"));
0056     sortButton->setIcon(QIcon::fromTheme(QStringLiteral("view-sort-ascending")));
0057     sortButton->setPopupMode(QToolButton::InstantPopup);
0058     sortButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
0059     QMenu *sortMenu = new QMenu(sortButton);
0060     sortMenu->addAction(collection->action(QStringLiteral("byName")));
0061     sortMenu->addAction(collection->action(QStringLiteral("byDate")));
0062     sortButton->setMenu(sortMenu);
0063     toolBar->addWidget(sortButton);
0064     toolBar->addSeparator();
0065     toolBar->addAction(collection->action(QStringLiteral("preferences")));
0066 
0067     mainLayout->addWidget(toolBar);
0068     mainLayout->addWidget(m_historyView);
0069 
0070     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close);
0071     connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
0072     connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
0073     mainLayout->addWidget(buttonBox);
0074 
0075     create(); // required by windowHandle()
0076     KWindowConfig::restoreWindowSize(windowHandle(), KSharedConfig::openConfig()->group("History Dialog"));
0077 
0078     reparseConfiguration();
0079 
0080     // give focus to the search line edit when opening the dialog (#240513)
0081     m_historyView->lineEdit()->setFocus();
0082 }
0083 
0084 KonqHistoryDialog::~KonqHistoryDialog()
0085 {
0086     KConfigGroup group(KSharedConfig::openConfig(), "History Dialog");
0087     KWindowConfig::saveWindowSize(windowHandle(), group);
0088 }
0089 
0090 QSize KonqHistoryDialog::sizeHint() const
0091 {
0092     return QSize(500, 400);
0093 }
0094 
0095 void KonqHistoryDialog::slotOpenWindow(const QUrl &url)
0096 {
0097     KonqMainWindow *mw = KonqMainWindowFactory::createNewWindow(url);
0098     mw->show();
0099 }
0100 
0101 void KonqHistoryDialog::slotOpenTab(const QUrl &url)
0102 {
0103     m_mainWindow->openMultiURL(QList<QUrl>() << url);
0104 }
0105 
0106 void KonqHistoryDialog::slotOpenCurrentTab(const QUrl& url)
0107 {
0108     m_mainWindow->openFilteredUrl(url.toString());
0109 }
0110 
0111 void KonqHistoryDialog::slotOpenCurrentOrNewTab(const QUrl& url)
0112 {
0113     QUrl currentUrl(m_mainWindow->currentURL());
0114     if (KonqUrl::hasKonqScheme(currentUrl) || currentUrl.isEmpty()) {
0115         slotOpenCurrentTab(url);
0116     } else {
0117         slotOpenTab(url);
0118     }
0119 }
0120 
0121 // Called when activating a row
0122 void KonqHistoryDialog::slotOpenIndex(const QModelIndex &index)
0123 {
0124     const QUrl url = m_historyView->urlForIndex(index);
0125     if (!url.isValid()) {
0126         return;
0127     }
0128     switch (m_defaultAction) {
0129         case KonqHistorySettings::Action::Auto:
0130             slotOpenCurrentOrNewTab(url);
0131             break;
0132         case KonqHistorySettings::Action::OpenNewTab:
0133             slotOpenTab(url);
0134             break;
0135         case KonqHistorySettings::Action::OpenCurrentTab:
0136             slotOpenCurrentTab(url);
0137             break;
0138         case KonqHistorySettings::Action::OpenNewWindow:
0139             slotOpenWindow(url);
0140             break;
0141     }
0142 }
0143 
0144 void KonqHistoryDialog::reparseConfiguration()
0145 {
0146     m_defaultAction = m_settings->m_defaultAction;
0147 }