mirror of
https://github.com/Murmele/Gittyup.git
synced 2024-09-19 06:29:10 +03:00
cleanup EditButton. Now the patch can be updated without recreation of the hole object
This commit is contained in:
parent
43d6554faf
commit
edbd280186
@ -1 +1 @@
|
||||
Subproject commit 90af68bbe2690998f015f18b7c890f5868bcd3ee
|
||||
Subproject commit f9fcda3c3489e0f2c9557d0bbfcf62f0d6600f19
|
@ -273,15 +273,33 @@ public:
|
||||
bool binary,
|
||||
bool lfs,
|
||||
QWidget *parent = nullptr)
|
||||
: Button(parent)
|
||||
: Button(parent),
|
||||
mBinary(binary),
|
||||
mLfs(lfs)
|
||||
{
|
||||
setObjectName("EditButton");
|
||||
|
||||
// Add edit button menu.
|
||||
QMenu *menu = new QMenu(this);
|
||||
mEditMenu = new QMenu(this);
|
||||
mEditWorkingCopyAction = mEditMenu->addAction("Edit Working Copy");
|
||||
mEditNewRevisionAction = mEditMenu->addAction("Edit New Revision");
|
||||
mEditOldRevisionAction = mEditMenu->addAction("Edit Old Revision");
|
||||
|
||||
QString name = patch.name();
|
||||
updatePatch(patch, index);
|
||||
|
||||
// why I am not able to directly use mEditMenu?
|
||||
QMenu* menu = mEditMenu;
|
||||
connect(this, &EditButton::clicked, [menu] {
|
||||
menu->actions().first()->trigger();
|
||||
});
|
||||
|
||||
setMenu(mEditMenu);
|
||||
}
|
||||
|
||||
void updatePatch(const git::Patch &patch, int index)
|
||||
{
|
||||
RepoView *view = RepoView::parentView(this);
|
||||
QString name = patch.name();
|
||||
|
||||
// Calculate starting line numbers.
|
||||
int oldLine = -1;
|
||||
@ -291,49 +309,56 @@ public:
|
||||
newLine = patch.lineNumber(index, 0, git::Diff::NewFile);
|
||||
}
|
||||
|
||||
disconnect(mEditWorkingCopyAction); // delete all connections from this sender
|
||||
if (view->repo().workdir().exists(name)) {
|
||||
QAction *action = menu->addAction("Edit Working Copy");
|
||||
connect(action, &QAction::triggered, [this, view, name, newLine] {
|
||||
mEditWorkingCopyAction->setVisible(true);
|
||||
connect(mEditWorkingCopyAction, &QAction::triggered, [this, view, name, newLine] {
|
||||
view->edit(name, newLine);
|
||||
});
|
||||
}
|
||||
} else
|
||||
mEditWorkingCopyAction->setVisible(false);
|
||||
|
||||
// Add revision edit actions.
|
||||
QList<git::Commit> commits = view->commits();
|
||||
git::Commit commit = !commits.isEmpty() ? commits.first() : git::Commit();
|
||||
git::Blob newBlob = patch.blob(git::Diff::NewFile);
|
||||
disconnect(mEditNewRevisionAction);
|
||||
if (newBlob.isValid()) {
|
||||
QAction *action = menu->addAction("Edit New Revision");
|
||||
connect(action, &QAction::triggered,
|
||||
mEditNewRevisionAction->setVisible(true);
|
||||
connect(mEditNewRevisionAction, &QAction::triggered,
|
||||
[this, view, name, newLine, newBlob, commit] {
|
||||
view->openEditor(name, newLine, newBlob, commit);
|
||||
});
|
||||
}
|
||||
} else
|
||||
mEditNewRevisionAction->setVisible(false);
|
||||
|
||||
disconnect(mEditOldRevisionAction);
|
||||
git::Blob oldBlob = patch.blob(git::Diff::OldFile);
|
||||
if (oldBlob.isValid()) {
|
||||
mEditOldRevisionAction->setVisible(true);
|
||||
if (commit.isValid()) {
|
||||
QList<git::Commit> parents = commit.parents();
|
||||
if (!parents.isEmpty())
|
||||
commit = parents.first();
|
||||
}
|
||||
|
||||
QAction *action = menu->addAction("Edit Old Revision");
|
||||
connect(action, &QAction::triggered,
|
||||
connect(mEditOldRevisionAction, &QAction::triggered,
|
||||
[this, view, name, oldLine, oldBlob, commit] {
|
||||
view->openEditor(name, oldLine, oldBlob, commit);
|
||||
});
|
||||
}
|
||||
} else
|
||||
mEditOldRevisionAction->setVisible(false);
|
||||
|
||||
// Connect button click to the first menu action.
|
||||
setEnabled(!menu->isEmpty() && !binary && !lfs);
|
||||
connect(this, &EditButton::clicked, [menu] {
|
||||
menu->actions().first()->trigger();
|
||||
});
|
||||
|
||||
setMenu(menu);
|
||||
bool enable = false;
|
||||
for (auto action: mEditMenu->actions()) {
|
||||
if (action->isVisible()) {
|
||||
enable = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
setEnabled(enable && !mBinary && !mLfs);
|
||||
}
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event) override
|
||||
{
|
||||
@ -357,6 +382,14 @@ protected:
|
||||
painter.drawLine(x - r + 1, y + r - 5, x - r + 5, y + r - 1);
|
||||
painter.drawLine(x + r - 6, y - r + 2, x + r - 2, y - r + 6);
|
||||
}
|
||||
|
||||
private:
|
||||
QMenu* mEditMenu{nullptr};
|
||||
QAction* mEditWorkingCopyAction{nullptr};
|
||||
QAction* mEditNewRevisionAction{nullptr};
|
||||
QAction* mEditOldRevisionAction{nullptr};
|
||||
bool mBinary;
|
||||
bool mLfs;
|
||||
};
|
||||
|
||||
class DiscardButton : public Button
|
||||
|
Loading…
Reference in New Issue
Block a user