File indexing completed on 2024-04-28 17:05:52
0001 /* 0002 SPDX-FileCopyrightText: 2002 Shie Erlich <erlich@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2002 Rafi Yanai <yanai@users.sourceforge.net> 0004 SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "kraddbookmarkdlg.h" 0010 #include "../icon.h" 0011 #include "../krglobal.h" 0012 #include "krbookmarkhandler.h" 0013 0014 // QtWidgets 0015 #include <QDialogButtonBox> 0016 #include <QGridLayout> 0017 #include <QHeaderView> 0018 #include <QInputDialog> 0019 #include <QLabel> 0020 #include <QPushButton> 0021 0022 #include <KI18n/KLocalizedString> 0023 0024 KrAddBookmarkDlg::KrAddBookmarkDlg(QWidget *parent, const QUrl &url) 0025 : QDialog(parent) 0026 { 0027 setWindowModality(Qt::WindowModal); 0028 setWindowTitle(i18n("Add Bookmark")); 0029 0030 auto *mainLayout = new QVBoxLayout; 0031 setLayout(mainLayout); 0032 0033 auto *layout = new QGridLayout; // expanding 0034 // name and url 0035 QLabel *lb1 = new QLabel(i18n("Name:"), this); 0036 _name = new KLineEdit(this); 0037 _name->setText(url.toDisplayString()); // default name is the url 0038 _name->selectAll(); // make the text selected 0039 layout->addWidget(lb1, 0, 0); 0040 layout->addWidget(_name, 0, 1); 0041 0042 QLabel *lb2 = new QLabel(i18n("URL:"), this); 0043 _url = new KLineEdit(this); 0044 layout->addWidget(lb2, 1, 0); 0045 layout->addWidget(_url, 1, 1); 0046 _url->setText(url.toDisplayString()); // set the url in the field 0047 0048 // create in linedit and button 0049 QLabel *lb3 = new QLabel(i18n("Create in:"), this); 0050 _folder = new KLineEdit(this); 0051 layout->addWidget(lb3, 2, 0); 0052 layout->addWidget(_folder, 2, 1); 0053 _folder->setReadOnly(true); 0054 0055 _createInBtn = new QToolButton(this); 0056 _createInBtn->setIcon(Icon("go-down")); 0057 _createInBtn->setCheckable(true); 0058 connect(_createInBtn, &QToolButton::toggled, this, &KrAddBookmarkDlg::toggleCreateIn); 0059 layout->addWidget(_createInBtn, 2, 2); 0060 0061 mainLayout->addLayout(layout); 0062 0063 detailsWidget = createInWidget(); 0064 detailsWidget->setVisible(false); 0065 mainLayout->addWidget(detailsWidget); 0066 0067 QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); 0068 mainLayout->addWidget(buttonBox); 0069 0070 QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok); 0071 okButton->setDefault(true); 0072 okButton->setShortcut(Qt::CTRL | Qt::Key_Return); 0073 newFolderButton = new QPushButton(i18n("New Folder")); 0074 buttonBox->addButton(newFolderButton, QDialogButtonBox::ActionRole); 0075 newFolderButton->setVisible(false); // hide it until _createIn is shown 0076 connect(newFolderButton, &QPushButton::clicked, this, &KrAddBookmarkDlg::newFolder); 0077 0078 connect(buttonBox, &QDialogButtonBox::accepted, this, &KrAddBookmarkDlg::accept); 0079 connect(buttonBox, &QDialogButtonBox::rejected, this, &KrAddBookmarkDlg::reject); 0080 0081 _name->setFocus(); 0082 resize(sizeHint().width() * 2, sizeHint().height()); 0083 } 0084 0085 void KrAddBookmarkDlg::toggleCreateIn(bool show) 0086 { 0087 _createInBtn->setIcon(Icon(show ? "go-up" : "go-down")); 0088 newFolderButton->setVisible(show); 0089 detailsWidget->setVisible(show); 0090 } 0091 0092 // creates the widget that lets you decide where to put the new bookmark 0093 QWidget *KrAddBookmarkDlg::createInWidget() 0094 { 0095 _createIn = new KrTreeWidget(this); 0096 _createIn->setHeaderLabel(i18n("Folders")); 0097 _createIn->header()->hide(); 0098 _createIn->setRootIsDecorated(true); 0099 _createIn->setAlternatingRowColors(false); // disable alternate coloring 0100 0101 auto *item = new QTreeWidgetItem(_createIn); 0102 item->setText(0, i18n("Bookmarks")); 0103 _createIn->expandItem(item); 0104 item->setSelected(true); 0105 _xr[item] = krBookMan->_root; 0106 0107 populateCreateInWidget(krBookMan->_root, item); 0108 _createIn->setCurrentItem(item); 0109 slotSelectionChanged(); 0110 connect(_createIn, &KrTreeWidget::itemSelectionChanged, this, &KrAddBookmarkDlg::slotSelectionChanged); 0111 0112 return _createIn; 0113 } 0114 0115 void KrAddBookmarkDlg::slotSelectionChanged() 0116 { 0117 QList<QTreeWidgetItem *> items = _createIn->selectedItems(); 0118 0119 if (items.count() > 0) { 0120 _folder->setText(_xr[items[0]]->text()); 0121 } 0122 } 0123 0124 void KrAddBookmarkDlg::populateCreateInWidget(KrBookmark *root, QTreeWidgetItem *parent) 0125 { 0126 QListIterator<KrBookmark *> it(root->children()); 0127 while (it.hasNext()) { 0128 KrBookmark *bm = it.next(); 0129 if (bm->isFolder()) { 0130 auto *item = new QTreeWidgetItem(parent); 0131 item->setText(0, bm->text()); 0132 item->treeWidget()->expandItem(item); 0133 _xr[item] = bm; 0134 populateCreateInWidget(bm, item); 0135 } 0136 } 0137 } 0138 0139 void KrAddBookmarkDlg::newFolder() 0140 { 0141 // get the name 0142 QString newFolder = QInputDialog::getText(this, i18n("New Folder"), i18n("Folder name:")); 0143 if (newFolder.isEmpty()) { 0144 return; 0145 } 0146 0147 QList<QTreeWidgetItem *> items = _createIn->selectedItems(); 0148 if (items.count() == 0) 0149 return; 0150 0151 // add to the list in bookman 0152 KrBookmark *bm = new KrBookmark(newFolder); 0153 0154 krBookMan->addBookmark(bm, _xr[items[0]]); 0155 // fix the gui 0156 auto *item = new QTreeWidgetItem(items[0]); 0157 item->setText(0, bm->text()); 0158 _xr[item] = bm; 0159 0160 _createIn->setCurrentItem(item); 0161 item->setSelected(true); 0162 } 0163 0164 KrBookmark *KrAddBookmarkDlg::folder() const 0165 { 0166 QList<QTreeWidgetItem *> items = _createIn->selectedItems(); 0167 if (items.count() == 0) 0168 return nullptr; 0169 0170 return _xr[items[0]]; 0171 }