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(¤tIndex); 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"