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 }