diff --git a/src/bin/imgtools/rvio/UICommands.cpp b/src/bin/imgtools/rvio/UICommands.cpp index 22a26bdf8..44b0845e9 100644 --- a/src/bin/imgtools/rvio/UICommands.cpp +++ b/src/bin/imgtools/rvio/UICommands.cpp @@ -279,6 +279,10 @@ void initUICommands(MuLangContext* context) new Param(c, "doEncode", "bool", Value(true)), End), + new Function(c, "pasteTextFromClipboard", pasteTextFromClipboard, None, + Return, "string", + End), + new Function(c, "myNetworkPort", myNetworkPort, None, Return, "int", End), @@ -466,6 +470,11 @@ NODE_DECLARATION(putUrlOnClipboard, void) { } +NODE_DECLARAION(pasteTextFromClipboard, Mu::Pointer) +{ + NODE_RETURN(0); // Will represent a string +} + NODE_DECLARATION(myNetworkPort, int) { NODE_RETURN(0); diff --git a/src/bin/imgtools/rvio/UICommands.h b/src/bin/imgtools/rvio/UICommands.h index 9c232186a..f0a534c77 100644 --- a/src/bin/imgtools/rvio/UICommands.h +++ b/src/bin/imgtools/rvio/UICommands.h @@ -50,6 +50,7 @@ NODE_DECLARATION(httpGet, void); NODE_DECLARATION(httpPost, void); NODE_DECLARATION(sessionFromUrl, void); NODE_DECLARATION(putUrlOnClipboard, void); +NODE_DECLARATION(pasteTextFromClipboard, Mu::Pointer); NODE_DECLARATION(myNetworkPort, int); NODE_DECLARATION(encodePassword, Mu::Pointer); NODE_DECLARATION(decodePassword, Mu::Pointer); diff --git a/src/lib/app/RvCommon/MuUICommands.cpp b/src/lib/app/RvCommon/MuUICommands.cpp index f2ec081ad..d6f43fa4c 100644 --- a/src/lib/app/RvCommon/MuUICommands.cpp +++ b/src/lib/app/RvCommon/MuUICommands.cpp @@ -491,6 +491,10 @@ void initUICommands() new Param(c, "doEncode", "bool", Value(true)), End), + new Function(c, "pasteTextFromClipboard", pasteTextFromClipboard, None, + Return, "string", + End), + new Function(c, "myNetworkPort", myNetworkPort, None, Return, "int", End), @@ -2038,6 +2042,12 @@ NODE_IMPLEMENTATION(sessionFromUrl, void) RvApp()->sessionFromUrl(url->c_str()); } +NODE_IMPLEMENTATION(pasteTextFromClipboard, Pointer) { + const StringType* stype = static_cast(NODE_THIS.type()); + std::string s = RvApp()->pasteTextFromClipboard(); // Getting text from the clipboard + Mu::Pointer p = stype->allocate(s.c_str()); + NODE_RETURN(p); +} NODE_IMPLEMENTATION(putUrlOnClipboard, void) { @@ -2050,25 +2060,6 @@ NODE_IMPLEMENTATION(putUrlOnClipboard, void) RvApp()->putUrlOnClipboard(url->c_str(), title->c_str(), doEncode); - - /* - NO WORKY - - QUrl qurl; - qurl.setScheme("rvlink"); - qurl.setUrl (url->c_str(), QUrl::TolerantMode); - cerr << "made QUrl from '" << url->c_str() << "', valid " << qurl.isValid() << endl; - QList qlist; - qlist.append (qurl); - - // XXX memory leak, but a tiny one. - QMimeData *qmd = new QMimeData(); - - qmd->setUrls(qlist); - qmd->setText(url->c_str()); - - QApplication::clipboard()->setMimeData(qmd); - */ } NODE_IMPLEMENTATION(myNetworkPort, int) diff --git a/src/lib/app/RvCommon/RvApplication.cpp b/src/lib/app/RvCommon/RvApplication.cpp index 8bc523560..07b1c115b 100644 --- a/src/lib/app/RvCommon/RvApplication.cpp +++ b/src/lib/app/RvCommon/RvApplication.cpp @@ -51,6 +51,9 @@ #include #include #include +#include +#include +#include #ifndef PLATFORM_WINDOWS extern char **environ; @@ -1451,6 +1454,15 @@ RvApplication::putUrlOnClipboard(string url, string title, bool doEncode) #endif } +std::string +RvApplication::pasteTextFromClipboard() +{ + QString text; + QClipboard *clipboard = QApplication::clipboard(); + text = clipboard->text(QClipboard::Clipboard); + return text.toUtf8().constData(); +} + void RvApplication::initializeQSettings(string altPath) { diff --git a/src/lib/app/RvCommon/RvCommon/MuUICommands.h b/src/lib/app/RvCommon/RvCommon/MuUICommands.h index 33dce9457..10d14d02b 100644 --- a/src/lib/app/RvCommon/RvCommon/MuUICommands.h +++ b/src/lib/app/RvCommon/RvCommon/MuUICommands.h @@ -61,6 +61,7 @@ NODE_DECLARATION(httpPutString, void); NODE_DECLARATION(httpPutData, void); NODE_DECLARATION(sessionFromUrl, void); NODE_DECLARATION(putUrlOnClipboard, void); +NODE_DECLARATION(pasteTextFromClipboard, Mu::Pointer); NODE_DECLARATION(myNetworkPort, int); NODE_DECLARATION(myNetworkHost, Mu::Pointer); NODE_DECLARATION(encodePassword, Mu::Pointer); diff --git a/src/lib/app/RvCommon/RvCommon/RvApplication.h b/src/lib/app/RvCommon/RvCommon/RvApplication.h index c35f8c794..d722693b5 100644 --- a/src/lib/app/RvCommon/RvCommon/RvApplication.h +++ b/src/lib/app/RvCommon/RvCommon/RvApplication.h @@ -100,6 +100,7 @@ class RvApplication : public QObject, public RvConsoleApplication static void parseURL (const char *s, std::vector &av); static void sessionFromUrl (std::string url); static void putUrlOnClipboard (std::string url, std::string title, bool doEncode=true); + static std::string pasteTextFromClipboard (); static std::string encodeCommandLineURL (int argc, char *argv[]); static std::string bakeCommandLineURL (int argc, char *argv[]); static void initializeQSettings (std::string altPath); diff --git a/src/lib/app/mu_rvui/commands.mud b/src/lib/app/mu_rvui/commands.mud index fc3a06b98..5ff5157fd 100644 --- a/src/lib/app/mu_rvui/commands.mud +++ b/src/lib/app/mu_rvui/commands.mud @@ -1727,6 +1727,7 @@ networkAccessManager "Returns Qt network access manager object" //javascriptMuExport "Export Mu eval() call as a javascript Object in the given WebFrame" sessionFromUrl "Create a session from a (possibly baked) rvlink URL" putUrlOnClipboard "Copy a URL on the system clipboard" +pasteTextFromClipboard "Get the text sitting in your clipboard" myNetworkPort "Returns the currently set port number for networking" myNetworkHost "Returns the name of the host RV is running on for purposes of networking" encodePassword "-" diff --git a/src/plugins/rv-packages/annotate/annotate_mode.mu b/src/plugins/rv-packages/annotate/annotate_mode.mu index b2757d310..374db602e 100644 --- a/src/plugins/rv-packages/annotate/annotate_mode.mu +++ b/src/plugins/rv-packages/annotate/annotate_mode.mu @@ -622,6 +622,25 @@ class: AnnotateMinorMode : MinorMode populateAnnotationList(); } + method: pasteTextFromClipboard (void; Event event) + { + // Getting text directly from the users clipboard + let text = commands.pasteTextFromClipboard(); + + if (text == "") { + print("WARNING: Clipboard is empty"); + + } else { + _textPlacementMode = true; + _textBuffer.pop_back(); + + for (int i = 0; i < text.size(); i++) + _textBuffer.push_back(text[i]); + + setText(_textBuffer); + } + } + //---------------------------------------------------------------------- method: pointerLocation ((string, Point); Event event) @@ -2152,6 +2171,7 @@ class: AnnotateMinorMode : MinorMode ("key-down--alt--backspace", backwardsKillWord, ""), ("key-down--shift--backspace", backwardsKillWord, ""), ("key-down--control--backspace", backwardsKillWord, ""), + ("key-down--meta--v", pasteTextFromClipboard, ""), // Paste from clipboard ("key-down--meta--a", killLine, ""), ("key-down--alt--a", killLine, ""), ("key-down--space", insertChar, ""),