Skip to content

Commit

Permalink
refactor: [editor] add menu
Browse files Browse the repository at this point in the history
add context menu and margin menu

Log: add menu
  • Loading branch information
Kakueeen authored and deepin-mozart committed Jan 19, 2024
1 parent b18c0fd commit 9e6e901
Show file tree
Hide file tree
Showing 12 changed files with 55 additions and 367 deletions.
2 changes: 0 additions & 2 deletions src/base/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@ project(base)

set(CXX_H
abstractmenu.h
abstracteditormenu.h
abstractaction.h
abstractwidget.h
abstractdebugger.h
)

set(CXX_CPP
abstractmenu.cpp
abstracteditormenu.cpp
abstractaction.cpp
abstractwidget.cpp
abstractdebugger.cpp
Expand Down
85 changes: 0 additions & 85 deletions src/base/abstracteditormenu.cpp

This file was deleted.

41 changes: 0 additions & 41 deletions src/base/abstracteditormenu.h

This file was deleted.

1 change: 1 addition & 0 deletions src/common/util/eventdefinitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ OPI_OBJECT(editor,
OPI_INTERFACE(switchContext, "name")
OPI_INTERFACE(switchWorkspace, "name")
OPI_INTERFACE(contextMenu, "menu")
OPI_INTERFACE(marginMenu, "menu")
OPI_INTERFACE(keyPressEvent, "event")
)

Expand Down
58 changes: 50 additions & 8 deletions src/plugins/codeeditor/gui/private/texteditor_p.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@

#include "texteditor_p.h"
#include "utils/editorutils.h"
#include "common/common.h"

#include <Qsci/qsciapis.h>

#include <DGuiApplicationHelper>

#include <QMenu>
#include <QDebug>

static constexpr char DEFAULT_FONT_NAME[] { "Courier New" };
Expand Down Expand Up @@ -170,19 +172,59 @@ void TextEditorPrivate::updateLineNumberMargin(bool visible)
q->updateLineNumberWidth(false);
}

QVariantHash TextEditorPrivate::getMenuParams(QContextMenuEvent *event)
void TextEditorPrivate::showContextMenu()
{
QVariantHash params;
params.insert("id", q->id());
params.insert("fileName", fileName);
params.insert("selectedText", q->selectedText());
QMenu menu;
QAction *action { nullptr };
if (!q->isReadOnly()) {
action = menu.addAction(tr("Undo"), q, &TextEditor::undo);
action->setEnabled(q->isUndoAvailable());

action = menu.addAction(tr("Redo"), q, &TextEditor::redo);
action->setEnabled(q->isRedoAvailable());

menu.addSeparator();

action = menu.addAction(tr("Cut"), q, &TextEditor::cut);
action->setEnabled(q->hasSelectedText());
}

action = menu.addAction(tr("Copy"), q, &TextEditor::copy);
action->setEnabled(q->hasSelectedText());

if (!q->isReadOnly()) {
action = menu.addAction(tr("Paste"), q, &TextEditor::paste);
action->setEnabled(q->SendScintilla(TextEditor::SCI_CANPASTE));

action = menu.addAction(tr("Delete"), q, [this] { q->SendScintilla(TextEditor::SCI_CLEAR); });
action->setEnabled(q->hasSelectedText());
}

menu.addSeparator();
action = menu.addAction(tr("Select All"), q, [this] { q->selectAll(true); });
action->setEnabled(q->length() != 0);

// notify other plugin to add action.
editor.contextMenu(QVariant::fromValue(&menu));
menu.exec(QCursor::pos());
}

void TextEditorPrivate::showMarginMenu()
{
QMenu menu;
int line = 0, index = 0;
q->getCursorPosition(&line, &index);
params.insert("cursorLine", line);
params.insert("cursorIndex", index);

return params;
if (q->hasBreakpoint(line)) {
menu.addAction(tr("Remove Breakpoint"), q, [this, line] { q->removeBreakpoint(line); });
} else {
static QString text("Add a breakpoint on line %1");
menu.addAction(text.arg(line + 1), q, [this, line] { q->addBreakpoint(line); });
}

// notify other plugin to add action.
editor.marginMenu(QVariant::fromValue(&menu));
menu.exec(QCursor::pos());
}

void TextEditorPrivate::gotoNextMark(MarginMask mask)
Expand Down
3 changes: 2 additions & 1 deletion src/plugins/codeeditor/gui/private/texteditor_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ class TextEditorPrivate : public QObject
void setMarginVisible(MarginType type, bool visible);
void updateLineNumberMargin(bool visible);

QVariantHash getMenuParams(QContextMenuEvent *event);
void showContextMenu();
void showMarginMenu();

void gotoNextMark(MarginMask mask);
void gotoPreviousMark(MarginMask mask);
Expand Down
32 changes: 2 additions & 30 deletions src/plugins/codeeditor/gui/texteditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,10 @@

#include "texteditor.h"
#include "private/texteditor_p.h"
#include "menu/texteditormarginmenu.h"
#include "menu/texteditormenu.h"
#include "utils/editorutils.h"

#include <QFile>
#include <QEvent>
#include <QMenu>
#include <QUuid>
#include <QScrollBar>
#include <QMimeData>
#include <QFileDialog>
#include <QApplication>
#include <QContextMenuEvent>
Expand Down Expand Up @@ -59,12 +53,6 @@ QString TextEditor::getFile() const
return d->fileName;
}

QString TextEditor::id() const
{
static auto id = QUuid::createUuid().toString(QUuid::Id128);
return id;
}

void TextEditor::save()
{
if (!isModified())
Expand Down Expand Up @@ -286,25 +274,9 @@ void TextEditor::contextMenuEvent(QContextMenuEvent *event)
if (!contextMenuNeeded(event->pos().x(), event->pos().y()))
return;

const auto &params = d->getMenuParams(event);
AbstractEditorMenu *editorMenu { nullptr };
if (event->pos().x() <= d->marginsWidth()) {
editorMenu = new TextEditorMarginMenu;
d->showMarginMenu();
} else {
editorMenu = new TextEditorMenu;
d->showContextMenu();
}

if (!editorMenu->initialize(params)) {
delete editorMenu;
return;
}

QMenu menu(this);
editorMenu->create(&menu);
editorMenu->updateState(&menu);

if (auto act = menu.exec(QCursor::pos()))
editorMenu->triggered(act);

delete editorMenu;
}
1 change: 0 additions & 1 deletion src/plugins/codeeditor/gui/texteditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ class TextEditor : public QsciScintilla

virtual void setFile(const QString &fileName);
QString getFile() const;
QString id() const;

void save();
void saveAs();
Expand Down
40 changes: 0 additions & 40 deletions src/plugins/codeeditor/menu/texteditormarginmenu.cpp

This file was deleted.

24 changes: 0 additions & 24 deletions src/plugins/codeeditor/menu/texteditormarginmenu.h

This file was deleted.

Loading

0 comments on commit 9e6e901

Please sign in to comment.