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"