Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F131267
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
6 KB
Referenced Files
None
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
Mode
R77 Guitar
Attached
Detach File
Event Timeline