Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F103293
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
16 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/src/RepositoryPropertyDialog.cpp b/src/RepositoryPropertyDialog.cpp
index a6aafef..f73bd87 100644
--- a/src/RepositoryPropertyDialog.cpp
+++ b/src/RepositoryPropertyDialog.cpp
@@ -1,203 +1,222 @@
#include "RepositoryPropertyDialog.h"
#include "ui_RepositoryPropertyDialog.h"
#include "MainWindow.h"
+#include "BasicRepositoryDialog.h"
#include "common/misc.h"
#include <QClipboard>
#include <QMenu>
#include <QMessageBox>
RepositoryPropertyDialog::RepositoryPropertyDialog(MainWindow *parent, Git::Context const *gcx, GitPtr const &g, RepositoryItem const &item, bool open_repository_menu)
: BasicRepositoryDialog(parent, g)
, ui(new Ui::RepositoryPropertyDialog)
, gcx(gcx)
{
ui->setupUi(this);
Qt::WindowFlags flags = windowFlags();
flags &= ~Qt::WindowContextHelpButtonHint;
setWindowFlags(flags);
repository = item;
ui->groupBox_remote->setVisible(open_repository_menu);
ui->label_editable_name->setText(repository.name);
ui->label_editable_name->setVisible(true);
ui->lineEdit_name->setText(repository.name);
ui->lineEdit_name->setVisible(false);
ui->lineEdit_local_dir->setText(misc::normalizePathSeparator(repository.local_dir));
+ ui->pushButton_close->setFocus();
+
updateRemotesTable();
}
RepositoryPropertyDialog::~RepositoryPropertyDialog()
{
delete ui;
}
void RepositoryPropertyDialog::updateRemotesTable()
{
BasicRepositoryDialog::updateRemotesTable(ui->tableWidget);
}
void RepositoryPropertyDialog::toggleRemoteMenuActivity()
{
ui->groupBox_remote->setVisible(!ui->groupBox_remote->isVisible());
}
void MainWindow::changeSshKey(QString const &localdir, QString const &sshkey)
{
bool changed = false;
QList<RepositoryItem> *repos = getReposPtr();
for (int i = 0; i < repos->size(); i++) {
RepositoryItem *item = &(*repos)[i];
if (item->local_dir == localdir) {
item->ssh_key = sshkey;
changed = true;
}
}
if (changed) {
saveRepositoryBookmarks();
}
}
bool RepositoryPropertyDialog::execEditRemoteDialog(Git::Remote *remote, EditRemoteDialog::Operation op)
{
auto const *list = remotes();
if (op == EditRemoteDialog::RemoteSet) {
int row = ui->tableWidget->currentRow();
if (row >= 0 && row < list->size()) {
*remote = list->at(row);
}
} else {
*remote = Git::Remote();
}
if (remote->name.isEmpty() && list->isEmpty()) {
op = EditRemoteDialog::RemoteAdd;
remote->name = "origin";
}
EditRemoteDialog dlg(mainwindow(), op, gcx);
dlg.setName(remote->name);
dlg.setUrl(remote->url);
dlg.setSshKey(remote->ssh_key);
if (dlg.exec() == QDialog::Accepted) {
remote->name = dlg.name();
remote->url = dlg.url();
remote->ssh_key = dlg.sshKey();
GitPtr g = git();
if (op == EditRemoteDialog::RemoteAdd) {
bool ok = true;
for (Git::Remote const &r : *list) {
if (r.name == remote->name) {
qDebug() << "remote add: Already exists" << remote->name;
ok = false;
break;
}
}
if (ok) {
g->addRemoteURL(*remote);
}
} else if (op == EditRemoteDialog::RemoteSet) {
g->setRemoteURL(*remote);
}
// wip
QString localdir = ui->lineEdit_local_dir->text();
mainwindow()->changeSshKey(localdir, remote->ssh_key);
setSshKey_(remote->ssh_key);
getRemotes_();
updateRemotesTable();
return true;
}
return false;
}
Git::Remote RepositoryPropertyDialog::selectedRemote() const
{
Git::Remote remote;
auto const *list = remotes();
int row = ui->tableWidget->currentRow();
if (row >= 0 && row < list->size()) {
remote = list->at(row);
}
return remote;
}
bool RepositoryPropertyDialog::isRemoteChanged() const
{
return remote_changed;
}
bool RepositoryPropertyDialog::isNameChanged() const
{
return name_changed;
}
QString RepositoryPropertyDialog::getName()
{
return repository.name;
}
void RepositoryPropertyDialog::on_pushButton_remote_add_clicked()
{
Git::Remote r;
if (execEditRemoteDialog(&r, EditRemoteDialog::RemoteAdd)) {
remote_changed = true;
}
}
void RepositoryPropertyDialog::on_pushButton_remote_edit_clicked()
{
int row = ui->tableWidget->currentRow();
if (row < 0) {
ui->tableWidget->setCurrentCell(0, 0);
}
Git::Remote remote = selectedRemote();
if (execEditRemoteDialog(&remote, EditRemoteDialog::RemoteSet)) {
remote_changed = true;
}
}
void RepositoryPropertyDialog::on_pushButton_remote_remove_clicked()
{
Git::Remote remote = selectedRemote();
if (!remote.name.isEmpty()) {
int r = QMessageBox::warning(this, tr("Confirm Remove"), tr("Are you sure you want to remove the remote '%1' from the repository '%2' ?").arg(remote.name).arg(repository.name), QMessageBox::Ok, QMessageBox::Cancel);
if (r == QMessageBox::Ok) {
GitPtr g = git();
g->removeRemote(remote.name);
updateRemotesTable();
remote_changed = true;
}
}
}
void RepositoryPropertyDialog::on_pushButton_remote_menu_clicked()
{
toggleRemoteMenuActivity();
}
+
+void RepositoryPropertyDialog::setNameEditMode(bool f)
+{
+ ui->lineEdit_name->setVisible(f);
+ ui->label_editable_name->setVisible(!f);
+ ui->pushButton_edit_name->setText(f ? tr("Save") : tr("Edit Name"));
+ if (f) {
+ ui->lineEdit_name->setText(repository.name);
+ ui->lineEdit_name->setFocus();
+ } else {
+ if (!ui->lineEdit_name->text().isEmpty()) {
+ repository.name = ui->lineEdit_name->text();
+ ui->label_editable_name->setText(repository.name);
+ name_changed = true;
+ }
+ ui->pushButton_close->setFocus();
+ }
+}
+
+bool RepositoryPropertyDialog::isNameEditMode() const
+{
+ return ui->lineEdit_name->isVisible();
+}
+
void RepositoryPropertyDialog::on_pushButton_edit_name_clicked()
{
- if (ui->pushButton_edit_name->text() == "Edit Name")
- {
- ui->pushButton_edit_name->setText("Save");
- ui->label_editable_name->setVisible(false);
- ui->lineEdit_name->setVisible(true);
- }
- else
- {
- if (!ui->lineEdit_name->text().isEmpty())
- {
- name_changed = true;
- repository.name = ui->lineEdit_name->text();
- ui->label_editable_name->setText(ui->lineEdit_name->text());
- ui->pushButton_edit_name->setText("Edit Name");
- ui->label_editable_name->setVisible(true);
- ui->lineEdit_name->setVisible(false);
- }
- }
+ setNameEditMode(!isNameEditMode());
+}
+
+void RepositoryPropertyDialog::reject()
+{
+ if (isNameEditMode()) {
+ setNameEditMode(false);
+ } else {
+ BasicRepositoryDialog::reject();
+ }
}
diff --git a/src/RepositoryPropertyDialog.h b/src/RepositoryPropertyDialog.h
index 6865527..4ce3b12 100644
--- a/src/RepositoryPropertyDialog.h
+++ b/src/RepositoryPropertyDialog.h
@@ -1,43 +1,49 @@
#ifndef REPOSITORYPROPERTYDIALOG_H
#define REPOSITORYPROPERTYDIALOG_H
#include "RepositoryData.h"
#include "BasicRepositoryDialog.h"
#include "EditRemoteDialog.h"
#include <QDialog>
#include "Git.h"
class MainWindow;
namespace Ui {
class RepositoryPropertyDialog;
}
class RepositoryPropertyDialog : public BasicRepositoryDialog {
Q_OBJECT
private:
Ui::RepositoryPropertyDialog *ui;
RepositoryItem repository;
bool remote_changed = false;
bool name_changed = false;
Git::Context const *gcx;
void updateRemotesTable();
bool execEditRemoteDialog(Git::Remote *remote, EditRemoteDialog::Operation op);
Git::Remote selectedRemote() const;
void toggleRemoteMenuActivity();
+ bool isNameEditMode() const;
+ void setNameEditMode(bool f);
public:
explicit RepositoryPropertyDialog(MainWindow *parent, const Git::Context *gcx, const GitPtr &g, RepositoryItem const &item, bool open_repository_menu = false);
~RepositoryPropertyDialog() override;
bool isRemoteChanged() const;
bool isNameChanged() const;
- QString getName();
+ QString getName();
private slots:
void on_pushButton_remote_add_clicked();
void on_pushButton_remote_edit_clicked();
void on_pushButton_remote_remove_clicked();
void on_pushButton_remote_menu_clicked();
void on_pushButton_edit_name_clicked();
+
+ // QDialog interface
+public slots:
+ void reject();
};
#endif // REPOSITORYPROPERTYDIALOG_H
diff --git a/src/RepositoryPropertyDialog.ui b/src/RepositoryPropertyDialog.ui
index aef4b65..93958ac 100644
--- a/src/RepositoryPropertyDialog.ui
+++ b/src/RepositoryPropertyDialog.ui
@@ -1,284 +1,295 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>RepositoryPropertyDialog</class>
<widget class="QDialog" name="RepositoryPropertyDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>700</width>
- <height>375</height>
+ <height>502</height>
</rect>
</property>
<property name="windowTitle">
<string>Repository Property</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="DialogHeaderFrame" name="frame">
<property name="styleSheet">
<string notr="true">QFrame {
background: #ffffff;
}</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="topMargin">
<number>16</number>
</property>
<property name="bottomMargin">
<number>16</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_name">
<property name="font">
<font>
<pointsize>15</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">QLabel {
background: transparent;
}
</string>
</property>
<property name="text">
<string>Name: </string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_editable_name">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>15</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_name">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_edit_name">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Edit Name</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="frame_2">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="formAlignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Local dir :</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="ReadOnlyLineEdit" name="lineEdit_local_dir">
<property name="frame">
<bool>false</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Remote URLs</string>
</property>
</widget>
</item>
<item>
<widget class="RemoteRepositoriesTableWidget" name="tableWidget"/>
</item>
<item>
<widget class="QGroupBox" name="groupBox_remote">
<property name="title">
<string>Remote</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QPushButton" name="pushButton_remote_add">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_remote_edit">
<property name="text">
<string>Edit</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>118</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton_remote_remove">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="pushButton_remote_menu">
<property name="text">
<string>&Remote menu</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton_close">
<property name="text">
<string>Close</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>ReadOnlyLineEdit</class>
<extends>QLineEdit</extends>
<header>ReadOnlyLineEdit.h</header>
</customwidget>
<customwidget>
<class>RemoteRepositoriesTableWidget</class>
<extends>QTableWidget</extends>
<header>RemoteRepositoriesTableWidget.h</header>
</customwidget>
<customwidget>
<class>DialogHeaderFrame</class>
<extends>QFrame</extends>
<header>DialogHeaderFrame.h</header>
<container>1</container>
</customwidget>
</customwidgets>
+ <tabstops>
+ <tabstop>lineEdit_name</tabstop>
+ <tabstop>pushButton_edit_name</tabstop>
+ <tabstop>lineEdit_local_dir</tabstop>
+ <tabstop>tableWidget</tabstop>
+ <tabstop>pushButton_remote_add</tabstop>
+ <tabstop>pushButton_remote_edit</tabstop>
+ <tabstop>pushButton_remote_remove</tabstop>
+ <tabstop>pushButton_remote_menu</tabstop>
+ <tabstop>pushButton_close</tabstop>
+ </tabstops>
<resources/>
<connections>
<connection>
<sender>pushButton_close</sender>
<signal>clicked()</signal>
<receiver>RepositoryPropertyDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>456</x>
<y>343</y>
</hint>
<hint type="destinationlabel">
<x>226</x>
<y>354</y>
</hint>
</hints>
</connection>
</connections>
</ui>
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sat, Feb 7, 7:32 AM (1 d, 1 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
55892
Default Alt Text
(16 KB)
Attached To
Mode
R77 Guitar
Attached
Detach File
Event Timeline
Log In to Comment