From 119d4c4e5f6fb2abcdb693fdeb23dcc6c9db5000 Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Thu, 17 Jul 2025 13:27:46 +0200 Subject: [PATCH] RichEdit: Diagram, ide: Tool to convert virtual methods to override --- uppsrc/CodeEditor/CodeEditor.cpp | 13 +++++++++++++ uppsrc/CodeEditor/CodeEditor.h | 1 + uppsrc/RichText/Object.cpp | 3 +-- uppsrc/RichText/RichDiagram.cpp | 1 + uppsrc/RichText/RichText.h | 10 ++++++++-- uppsrc/ide/ide.key | 1 + uppsrc/ide/idebar.cpp | 2 ++ 7 files changed, 27 insertions(+), 4 deletions(-) diff --git a/uppsrc/CodeEditor/CodeEditor.cpp b/uppsrc/CodeEditor/CodeEditor.cpp index 59eb50386..83c2f5a25 100644 --- a/uppsrc/CodeEditor/CodeEditor.cpp +++ b/uppsrc/CodeEditor/CodeEditor.cpp @@ -593,6 +593,19 @@ void CodeEditor::MakeLineEnds() Make(THISBACK(LineEnds)); } +void CodeEditor::ConvertToOverrides() +{ + Make([](String& out) { + out.Insert(0, " "); + out.Replace("\tvirtual\t", "\t"); + out.Replace("\tvirtual ", "\t"); + out.Replace(" virtual\t", " "); + out.Replace(" virtual ", " "); + out.Replace(";", " override;"); + out.Remove(0, 1); + }); +} + void CodeEditor::MoveNextWord(bool sel) { int64 p = GetCursor64(); int64 e = GetLength64(); diff --git a/uppsrc/CodeEditor/CodeEditor.h b/uppsrc/CodeEditor/CodeEditor.h index bbb04c8ba..85a259921 100644 --- a/uppsrc/CodeEditor/CodeEditor.h +++ b/uppsrc/CodeEditor/CodeEditor.h @@ -441,6 +441,7 @@ public: void MakeTabsOrSpaces(bool tabs); void MakeLineEnds(); + void ConvertToOverrides(); void CopyWord(); void SwapChars(); diff --git a/uppsrc/RichText/Object.cpp b/uppsrc/RichText/Object.cpp index 694c3b016..43d9350b1 100644 --- a/uppsrc/RichText/Object.cpp +++ b/uppsrc/RichText/Object.cpp @@ -306,8 +306,7 @@ struct RichObjectTypeDrawingCls : public RichObjectType virtual Value Read(const String& s) const; virtual String Write(const Value& v) const; - struct Data - { + struct Data { void Serialize(Stream& stream); Drawing drawing; diff --git a/uppsrc/RichText/RichDiagram.cpp b/uppsrc/RichText/RichDiagram.cpp index 8d98bb363..93d660631 100644 --- a/uppsrc/RichText/RichDiagram.cpp +++ b/uppsrc/RichText/RichDiagram.cpp @@ -8,6 +8,7 @@ struct RichDiagram : public RichObjectType { virtual String Write(const Value& v) const; virtual Size GetPhysicalSize(const Value& data) const; virtual Size GetPixelSize(const Value& data) const; + virtual void Paint(const Value& data, Draw& w, Size sz, Color, void *) const; virtual Image ToImage(int64, const Value& data, Size sz, Color, void *) const; diff --git a/uppsrc/RichText/RichText.h b/uppsrc/RichText/RichText.h index ce600482b..74f3a3f09 100644 --- a/uppsrc/RichText/RichText.h +++ b/uppsrc/RichText/RichText.h @@ -136,6 +136,11 @@ struct PageDraw { class RichObject; class Bar; +struct RichObjectPaintInfo { + void *context; + Color ink; +}; + struct RichObjectType { virtual String GetTypeName(const Value& v) const = 0; virtual String GetCreateName() const; @@ -151,11 +156,12 @@ struct RichObjectType { virtual Size GetDefaultSize(const Value& data, Size maxsize, void *context) const; virtual Size GetPhysicalSize(const Value& data, void *context) const; virtual Size GetPixelSize(const Value& data, void *context) const; - virtual void Paint(const Value& data, Draw& w, Size sz, Color ink, void *context) const; - virtual Image ToImage(int64 serial_id, const Value& data, Size sz, Color ink, void *context) const; virtual void Menu(Bar& bar, RichObject& ex, void *context) const; virtual void DefaultAction(RichObject& ex, void *context) const; virtual String GetLink(const Value& data, Point pt, Size sz, void *context) const; + + virtual void Paint(const Value& data, Draw& w, Size sz, Color ink, void *context) const; + virtual Image ToImage(int64 serial_id, const Value& data, Size sz, Color ink, void *context) const; Size StdDefaultSize(const Value& data, Size maxsize, void *context) const; diff --git a/uppsrc/ide/ide.key b/uppsrc/ide/ide.key index ac7f73f65..6fdff4fb4 100644 --- a/uppsrc/ide/ide.key +++ b/uppsrc/ide/ide.key @@ -36,6 +36,7 @@ KEY(TRANSLATESTRING, "Mark selection with t_", K_ALT_F2) KEY(SPACESTOTABS, "Spaces to tabs", 0) KEY(TABSTOSPACES, "Tabs to spaces", 0) KEY(LINEENDINGS, "Remove trailing tabs and spaces", 0) +KEY(CONVERTOOVERRIDE, "Remove 'virtual', add 'override'", K_SHIFT|K_ALT_O) KEY(DUPLICATEIT, "Duplicate line or selection", K_CTRL_D) KEY(WORDWRAP, "Word wrap", K_ALT_W) diff --git a/uppsrc/ide/idebar.cpp b/uppsrc/ide/idebar.cpp index 0cc1ef80c..6e6b1f412 100644 --- a/uppsrc/ide/idebar.cpp +++ b/uppsrc/ide/idebar.cpp @@ -170,6 +170,8 @@ void Ide::EditSpecial(Bar& menu) .Help("Convert all tabs to spaces"); menu.Add(b, AK_LINEENDINGS, THISBACK(EditMakeLineEnds)) .Help("Remove tabs and spaces at line endings"); + menu.Add(b && editor.IsSelection(), AK_CONVERTOOVERRIDE, [=] { editor.ConvertToOverrides(); }) + .Help("Convert virtual function declarations to override (removes virtual, adds override)"); menu.Add(b, AK_TRANSLATESTRING, THISBACK(TranslateString)) .Help("Mark the current selection as translated string"); menu.Add(b, AK_SWAPCHARS, THISBACK(SwapChars))