Page MenuHomePhabricator (Chris)

No OneTemporary

Authored By
Unknown
Size
6 KB
Referenced Files
None
Subscribers
None
diff --git a/src/CloneDialog.cpp b/src/CloneDialog.cpp
index 03f5b82..a7de176 100644
--- a/src/CloneDialog.cpp
+++ b/src/CloneDialog.cpp
@@ -1,138 +1,138 @@
#include "CloneDialog.h"
#include "ui_CloneDialog.h"
#include "common/misc.h"
#include "common/joinpath.h"
#include "BasicMainWindow.h"
#include "SearchFromGitHubDialog.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QThread>
enum SearchRepository {
None,
GitHub,
};
struct CloneDialog::Private {
QString url;
QString repo_name;
QString default_working_dir;
bool ok = false;
QString errmsg;
CloneDialog::Action action = CloneDialog::Action::Clone;
};
CloneDialog::CloneDialog(BasicMainWindow *parent, QString const &url, QString const &defworkdir)
: QDialog(parent)
, ui(new Ui::CloneDialog)
, m(new Private)
{
ui->setupUi(this);
Qt::WindowFlags flags = windowFlags();
flags &= ~Qt::WindowContextHelpButtonHint;
setWindowFlags(flags);
- ui->lineEdit_repo_location->setText(url);
m->default_working_dir = defworkdir;
ui->lineEdit_working_dir->setText(m->default_working_dir);
+ ui->lineEdit_repo_location->setText(url);
ui->comboBox->addItem(tr("Search"));
ui->comboBox->addItem(tr("GitHub"));
}
CloneDialog::~CloneDialog()
{
delete m;
delete ui;
}
CloneDialog::Action CloneDialog::action() const
{
return m->action;
}
BasicMainWindow *CloneDialog::mainwindow()
{
return qobject_cast<BasicMainWindow *>(parent());
}
QString CloneDialog::url()
{
return ui->lineEdit_repo_location->text();
}
QString CloneDialog::dir()
{
return ui->lineEdit_working_dir->text();
}
void CloneDialog::on_lineEdit_repo_location_textChanged(QString const &text)
{
QString path;
int i = text.lastIndexOf('/');
int j = text.lastIndexOf('\\');
if (i < j) i = j;
j = text.size();
if (text.endsWith(".git")) {
j -= 4;
}
if (i >= 0 && i < j) {
path = text.mid(i, j - i);
}
m->repo_name = path;
path = m->default_working_dir / m->repo_name;
path = misc::normalizePathSeparator(path);
ui->lineEdit_working_dir->setText(path);
}
void CloneDialog::on_comboBox_currentIndexChanged(int index)
{
if (index == GitHub) {
SearchFromGitHubDialog dlg(this, mainwindow());
if (dlg.exec() == QDialog::Accepted) {
ui->lineEdit_repo_location->setText(dlg.url());
}
}
ui->comboBox->setCurrentIndex(0);
}
void CloneDialog::on_pushButton_test_clicked()
{
mainwindow()->testRemoteRepositoryValidity(url());
}
void CloneDialog::on_pushButton_browse_clicked()
{
QString path = ui->lineEdit_working_dir->text();
path = QFileDialog::getExistingDirectory(this, tr("Checkout into"), path);
if (!path.isEmpty()) {
m->default_working_dir = path;
path = m->default_working_dir / m->repo_name;
path = misc::normalizePathSeparator(path);
ui->lineEdit_working_dir->setText(path);
}
}
void CloneDialog::on_pushButton_open_existing_clicked()
{
QString dir = mainwindow()->defaultWorkingDir();
dir = QFileDialog::getExistingDirectory(this, tr("Open existing directory"), dir);
if (QFileInfo(dir).isDir()) {
QString url;
GitPtr g = mainwindow()->git(dir);
QList<Git::Remote> vec;
if (g->isValidWorkingCopy()) {
g->getRemoteURLs(&vec);
}
for (Git::Remote const &r : vec) {
if (r.purpose == "push" || url.isEmpty()) {
url = r.url;
}
}
ui->lineEdit_repo_location->setText(url);
ui->lineEdit_working_dir->setText(dir);
m->action = CloneDialog::Action::AddExisting;
done(Accepted);
}
}
diff --git a/src/RepositoriesTreeWidget.cpp b/src/RepositoriesTreeWidget.cpp
index f44584e..387a10f 100644
--- a/src/RepositoriesTreeWidget.cpp
+++ b/src/RepositoriesTreeWidget.cpp
@@ -1,80 +1,96 @@
#include "RepositoriesTreeWidget.h"
#include <QDropEvent>
#include <QDebug>
#include <QMimeData>
#include <QApplication>
#include "CloneFromGitHubDialog.h"
#include "MainWindow.h"
RepositoriesTreeWidget::RepositoriesTreeWidget(QWidget *parent)
: QTreeWidget(parent)
{
connect(this, &RepositoriesTreeWidget::currentItemChanged, [&](QTreeWidgetItem *current, QTreeWidgetItem *){
current_item = current;
});
}
MainWindow *RepositoriesTreeWidget::mainwindow()
{
return qobject_cast<MainWindow *>(window());
}
void RepositoriesTreeWidget::dragEnterEvent(QDragEnterEvent *event)
{
if (QApplication::modalWindow()) return;
if (event->mimeData()->hasUrls()) {
event->acceptProposedAction();
event->accept();
return;
}
QTreeWidget::dragEnterEvent(event);
}
void RepositoriesTreeWidget::dropEvent(QDropEvent *event)
{
if (QApplication::modalWindow()) return;
if (0) {
QMimeData const *mimedata = event->mimeData();
QByteArray encoded = mimedata->data("application/x-qabstractitemmodeldatalist");
QDataStream stream(&encoded, QIODevice::ReadOnly);
while (!stream.atEnd()) {
int row, col;
QMap<int, QVariant> roledatamap;
stream >> row >> col >> roledatamap;
}
}
if (event->mimeData()->hasUrls()) {
Q_ASSERT(mainwindow());
- QList<QUrl> urls = event->mimeData()->urls();
- for (QUrl const &url : urls) {
- QString path = url.url();
+ QStringList paths;
+
+ QByteArray ba = event->mimeData()->data("text/uri-list");
+ if (ba.size() > 4 && memcmp(ba.data(), "h\0t\0t\0p\0", 8) == 0) {
+ QString path = QString::fromUtf16((ushort const *)ba.data(), ba.size() / 2);
+ int i = path.indexOf('\n');
+ if (i >= 0) {
+ path = path.mid(0, i);
+ }
+ if (!path.isEmpty()) {
+ paths.push_back(path);
+ }
+ } else {
+ QList<QUrl> urls = event->mimeData()->urls();
+ for (QUrl const &url : urls) {
+ QString path = url.url();
+ paths.push_back(path);
+ }
+ }
+ for (QString const &path : paths) {
if (path.startsWith("file://")) {
int i = 7;
#ifdef Q_OS_WIN
if (path.utf16()[i] == '/') {
i++;
}
#endif
- path = path.mid(i);
- mainwindow()->addWorkingCopyDir(path, false);
+ mainwindow()->addWorkingCopyDir(path.mid(i), false);
} else if (path.startsWith("https://github.com/")) {
int i = 19;
int j = path.indexOf('/', i);
if (j > i) {
QString username = path.mid(i, j - i);
QString reponame = path.mid(j + 1);
mainwindow()->postOpenRepositoryFromGitHub(username, reponame);
}
}
}
} else {
QTreeWidgetItem *item = current_item;
QTreeWidget::dropEvent(event);
setCurrentItem(item);
emit dropped();
}
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Jun 16, 12:09 AM (2 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
70973
Default Alt Text
(6 KB)

Event Timeline