1
Development / Re: new idea: context menu to open the image in doxygen style comment
« Last post by ollydbg on Today at 01:45:50 pm »This is the patch file for this simple feature.
When you right click on a image filename in the comment, such as "a.jpg".
Suppose you are editing a file named: "c:/abc/def.cpp", and you will open the file in the default image file browser.
When you right click on a image filename in the comment, such as "a.jpg".
Suppose you are editing a file named: "c:/abc/def.cpp", and you will open the file in the default image file browser.
Code
diff --git a/src/sdk/cbeditor.cpp b/src/sdk/cbeditor.cpp
index 71622d79..2a76d8a9 100644
--- a/src/sdk/cbeditor.cpp
+++ b/src/sdk/cbeditor.cpp
@@ -393,7 +393,7 @@ struct cbEditorInternalData
}
}
- wxString GetUrl()
+ wxString GetUrl(wxString filename = wxEmptyString)
{
cbStyledTextCtrl* control = m_pOwner->GetControl();
if (!control)
@@ -409,6 +409,9 @@ struct cbEditorInternalData
")"
"(\\/?)([\\w\\-\\.\\?\\,\\'\\/\\\\\\+&%\\$#]*)?"
"([\\d\\w\\.\\/\\%\\+\\-\\=\\&\\?\\:\\\\\\"\\'\\,\\|\\~\\;]*)"));
+
+ wxRegEx reFile(R"raw([A-Za-z0-9]+\.(jpg|jpeg|png|gif|bmp))raw");
+
wxString url = control->GetSelectedText();
// Is the URL selected?
if (reUrl.Matches(url))
@@ -456,6 +459,31 @@ struct cbEditorInternalData
else
url = wxEmptyString; // nope, too far from cursor, return invalid (empty)
}
+ else if (reFile.Matches(url))
+ {
+ wxString match = reFile.GetMatch(url);
+ if ((url.Find(match) + startPos < control->GetCurrentPos()) &&
+ (url.Find(match) + startPos + (int)match.Length() > control->GetCurrentPos()))
+ {
+ // Translate short file path to absolute file path using the current source file path
+ // match is some string like "xyz.jpg" or "xyz.png"
+ if (match.IsEmpty())
+ {
+ return wxT("file:///") + match;
+ }
+ else
+ {
+ // suppose we are editing a file named : "c:/abc/def.cpp"
+ // the file contains some piece of the comments which is "xyz.jpg"
+ // we create an absolute file path of the image file named "c:/abc/xyz.jpg"
+ wxFileName baseFilename(filename);
+ wxFileName newFilename(baseFilename.GetPath(), match);
+ return wxT("file:///") + newFilename.GetFullPath();
+ }
+ }
+ else
+ url = wxEmptyString; // nope, too far from cursor, return invalid (empty)
+ }
else
url = wxEmptyString; // nope, return invalid (empty)
@@ -3289,7 +3317,7 @@ void cbEditor::OnContextMenuEntry(wxCommandEvent& event)
else if (id == idFoldingToggleCurrent)
ToggleFoldBlockFromLine();
else if (id == idOpenUrl)
- wxLaunchDefaultBrowser(m_pData->GetUrl());
+ wxLaunchDefaultBrowser(m_pData->GetUrl(GetFilename()));
else if (id == idSplitHorz)
Split(stHorizontal);
else if (id == idSplitVert)