File indexing completed on 2024-04-21 05:40:59

0001 /*
0002     SPDX-FileCopyrightText: 2010 Johannes Steffen <johannes.steffen@st.ovgu.de>
0003     SPDX-FileCopyrightText: 2010 Sebastian Doerner <sebastian@sebastian-doerner.de>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "tagdialog.h"
0009 #include "gitwrapper.h"
0010 
0011 #include <KConfigGroup>
0012 #include <KLocalizedString>
0013 #include <KTextEdit>
0014 
0015 #include <QCheckBox>
0016 #include <QComboBox>
0017 #include <QGroupBox>
0018 #include <QPushButton>
0019 #include <QTextCodec>
0020 #include <QVBoxLayout>
0021 #include <QLabel>
0022 #include <QLineEdit>
0023 #include <QDialogButtonBox>
0024 #include <QRegularExpression>
0025 
0026 TagDialog::TagDialog (QWidget* parent ):
0027     QDialog (parent, Qt::Dialog),
0028     m_localCodec(QTextCodec::codecForLocale())
0029 {
0030     this->setWindowTitle(xi18nc("@title:window", "<application>Git</application> Create Tag"));
0031     m_buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
0032     QWidget *mainWidget = new QWidget(this);
0033     QVBoxLayout *mainLayout = new QVBoxLayout;
0034     this->setLayout(mainLayout);
0035     mainLayout->addWidget(mainWidget);
0036     QPushButton *okButton = m_buttonBox->button(QDialogButtonBox::Ok);
0037     okButton->setDefault(true);
0038     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0039     this->connect(m_buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
0040     this->connect(m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
0041     m_buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
0042     okButton->setText(i18nc("@action:button", "Create Tag"));
0043 
0044     QWidget* boxWidget = new QWidget(this);
0045     QVBoxLayout* boxLayout = new QVBoxLayout(boxWidget);
0046     mainLayout->addWidget(boxWidget);
0047 
0048     QGroupBox* tagInformationGroupBox = new QGroupBox(boxWidget);
0049     mainLayout->addWidget(tagInformationGroupBox);
0050     boxLayout->addWidget(tagInformationGroupBox);
0051     tagInformationGroupBox->setTitle(i18nc("@title:group", "Tag Information"));
0052     QVBoxLayout * tagInformationLayout = new QVBoxLayout(tagInformationGroupBox);
0053     tagInformationGroupBox->setLayout(tagInformationLayout);
0054 
0055     QLabel* nameLabel = new QLabel(i18nc("@label:textbox", "Tag Name:"), tagInformationGroupBox);
0056     tagInformationLayout->addWidget(nameLabel);
0057 
0058     m_tagNameTextEdit = new QLineEdit(tagInformationGroupBox);
0059     tagInformationLayout->addWidget(m_tagNameTextEdit);
0060     setOkButtonState();
0061     connect(m_tagNameTextEdit, &QLineEdit::textChanged, this, &TagDialog::setOkButtonState);
0062 
0063     QLabel* messageLabel = new QLabel(i18nc("@label:textbox", "Tag Message:"), tagInformationGroupBox);
0064     tagInformationLayout->addWidget(messageLabel);
0065 
0066     m_tagMessageTextEdit = new KTextEdit(tagInformationGroupBox);
0067     m_tagMessageTextEdit->setLineWrapMode(QTextEdit::FixedColumnWidth);
0068     m_tagMessageTextEdit->setLineWrapColumnOrWidth(72);
0069     tagInformationLayout->addWidget(m_tagMessageTextEdit);
0070 
0071     QGroupBox* attachToGroupBox = new QGroupBox(boxWidget);
0072     mainLayout->addWidget(attachToGroupBox);
0073     boxLayout->addWidget(attachToGroupBox);
0074     attachToGroupBox->setTitle(i18nc("@title:group", "Attach to"));
0075 
0076     mainLayout->addWidget(m_buttonBox);
0077 
0078     QHBoxLayout* attachToLayout = new QHBoxLayout();
0079     attachToGroupBox->setLayout(attachToLayout);
0080 
0081     QLabel* branchLabel = new QLabel(i18nc("@label:listbox", "Branch:"), attachToGroupBox);
0082     attachToLayout->addWidget(branchLabel);
0083 
0084     m_branchComboBox = new QComboBox(attachToGroupBox);
0085     attachToLayout->addWidget(m_branchComboBox);
0086     attachToLayout->addStretch();
0087 
0088     this->resize(QSize(300,200));
0089 
0090     //initialize alternate color scheme for errors
0091     m_errorColors = m_tagNameTextEdit->palette();
0092     m_errorColors.setColor(QPalette::Normal, QPalette::Base, Qt::red);
0093     m_errorColors.setColor(QPalette::Inactive, QPalette::Base, Qt::red);
0094 
0095     //get branch & tag names
0096     GitWrapper * gitWrapper = GitWrapper::instance();
0097 
0098     int currentIndex;
0099     const QStringList branches = gitWrapper->branches(&currentIndex);
0100     m_branchComboBox->addItems(branches);
0101     m_branchComboBox->setCurrentIndex(currentIndex);
0102 
0103     gitWrapper->tagSet(m_tagNames);
0104 }
0105 
0106 
0107 QByteArray TagDialog::tagMessage() const
0108 {
0109     return m_localCodec->fromUnicode(m_tagMessageTextEdit->toPlainText());
0110 }
0111 
0112 QString TagDialog::tagName() const
0113 {
0114     return m_tagNameTextEdit->text().trimmed();
0115 }
0116 
0117 QString TagDialog::baseBranch() const
0118 {
0119     return  m_branchComboBox->currentText();
0120 }
0121 
0122 void TagDialog::setOkButtonState()
0123 {
0124       const QString tagName = m_tagNameTextEdit->text().trimmed();
0125       QString toolTip;
0126       if (tagName.isEmpty()) {
0127         toolTip = i18nc("@info:tooltip", "You must enter a tag name first.");
0128       }
0129       else if (tagName.contains(QRegularExpression(QStringLiteral("\\s")))) {
0130         toolTip = i18nc("@info:tooltip", "Tag names may not contain any whitespace.");
0131       }
0132       else if (m_tagNames.contains(tagName)) {
0133         toolTip = i18nc("@info:tooltip", "A tag named '%1' already exists.", tagName);
0134       }
0135       QPushButton *okButton = m_buttonBox->button(QDialogButtonBox::Ok);
0136       okButton->setEnabled(toolTip.isEmpty());
0137       setLineEditErrorModeActive(!toolTip.isEmpty());
0138       m_tagNameTextEdit->setToolTip(toolTip);
0139       okButton->setToolTip(toolTip);
0140 }
0141 
0142 void TagDialog::setLineEditErrorModeActive(bool active)
0143 {
0144     m_tagNameTextEdit->setPalette(active ? m_errorColors : QPalette());
0145 }
0146 
0147 
0148 #include "moc_tagdialog.cpp"