File indexing completed on 2024-04-21 05:41:00
0001 /* 0002 SPDX-FileCopyrightText: 2011 Vishesh Yadav <vishesh3y@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "commitinfowidget.h" 0008 #include "commititemdelegate.h" 0009 #include "hgwrapper.h" 0010 0011 #include <QString> 0012 #include <QHBoxLayout> 0013 #include <QListWidget> 0014 #include <KTextEditor/Document> 0015 #include <KTextEditor/View> 0016 #include <KTextEditor/Editor> 0017 #include <KTextEditor/Cursor> 0018 #include <KLocalizedString> 0019 #include <KMessageBox> 0020 0021 HgCommitInfoWidget::HgCommitInfoWidget(QWidget *parent) : 0022 QWidget(parent) 0023 { 0024 setupUI(); 0025 0026 connect(m_commitListWidget, &QListWidget::itemSelectionChanged, 0027 this, &HgCommitInfoWidget::slotUpdateInfo); 0028 } 0029 0030 void HgCommitInfoWidget::setupUI() 0031 { 0032 m_commitListWidget = new QListWidget; 0033 m_commitListWidget->setItemDelegate(new CommitItemDelegate); 0034 0035 KTextEditor::Editor *editor = KTextEditor::Editor::instance(); 0036 if (!editor) { 0037 KMessageBox::error(this, 0038 i18n("A KDE text-editor component could not be found;" 0039 "\nplease check your KDE installation.")); 0040 return; 0041 } 0042 m_editorDoc = editor->createDocument(nullptr); 0043 m_editorView = qobject_cast<KTextEditor::View*>(m_editorDoc->createView(this)); 0044 m_editorView->setStatusBarEnabled(false); 0045 m_editorDoc->setReadWrite(false); 0046 0047 QHBoxLayout *layout = new QHBoxLayout; 0048 layout->addWidget(m_commitListWidget, 1); 0049 layout->addWidget(m_editorView, 2); 0050 0051 setLayout(layout); 0052 } 0053 0054 void HgCommitInfoWidget::addItem(const QString &revision, 0055 const QString &changeset, 0056 const QString &branch, 0057 const QString &author, 0058 const QString &log) 0059 { 0060 0061 QListWidgetItem *item = new QListWidgetItem; 0062 item->setData(Qt::DisplayRole, changeset); 0063 item->setData(Qt::UserRole + 1, revision); 0064 item->setData(Qt::UserRole + 2, branch); 0065 item->setData(Qt::UserRole + 3, author); 0066 item->setData(Qt::UserRole + 4, log); 0067 m_commitListWidget->addItem(item); 0068 } 0069 0070 void HgCommitInfoWidget::addItem(QListWidgetItem *item) 0071 { 0072 m_commitListWidget->addItem(item); 0073 } 0074 0075 QListWidgetItem* HgCommitInfoWidget::currentItem() const 0076 { 0077 return m_commitListWidget->currentItem(); 0078 } 0079 0080 const QString HgCommitInfoWidget::selectedChangeset() const 0081 { 0082 return m_commitListWidget->currentItem()->data(Qt::DisplayRole).toString(); 0083 } 0084 0085 void HgCommitInfoWidget::clear() const 0086 { 0087 m_commitListWidget->clear(); 0088 } 0089 0090 void HgCommitInfoWidget::slotUpdateInfo() 0091 { 0092 HgWrapper *hgw = HgWrapper::instance(); 0093 QString changeset = selectedChangeset(); 0094 QString output; 0095 const QStringList args{ 0096 QStringLiteral("-p"), 0097 QStringLiteral("-v"), 0098 QStringLiteral("-r"), 0099 changeset, 0100 }; 0101 hgw->executeCommand(QStringLiteral("log"), args, output); 0102 0103 m_editorDoc->setReadWrite(true); 0104 m_editorDoc->setModified(false); 0105 m_editorDoc->closeUrl(true); 0106 m_editorDoc->setText(output); 0107 m_editorDoc->setHighlightingMode(QStringLiteral("diff")); 0108 m_editorView->setCursorPosition( KTextEditor::Cursor(0, 0) ); 0109 m_editorDoc->setReadWrite(false); 0110 } 0111 0112 void HgCommitInfoWidget::setSelectionMode(QAbstractItemView::SelectionMode mode) 0113 { 0114 m_commitListWidget->setSelectionMode(mode); 0115 } 0116 0117 QList<QListWidgetItem*> HgCommitInfoWidget::selectedItems() const 0118 { 0119 return m_commitListWidget->selectedItems(); 0120 } 0121 0122 0123 #include "moc_commitinfowidget.cpp"