summaryrefslogtreecommitdiff
path: root/noncore/applets/keyhelper/keyhelperapplet/anylnk/TextLnk.cpp
Side-by-side diff
Diffstat (limited to 'noncore/applets/keyhelper/keyhelperapplet/anylnk/TextLnk.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/keyhelper/keyhelperapplet/anylnk/TextLnk.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/noncore/applets/keyhelper/keyhelperapplet/anylnk/TextLnk.cpp b/noncore/applets/keyhelper/keyhelperapplet/anylnk/TextLnk.cpp
new file mode 100644
index 0000000..abb432c
--- a/dev/null
+++ b/noncore/applets/keyhelper/keyhelperapplet/anylnk/TextLnk.cpp
@@ -0,0 +1,34 @@
+#include "TextLnk.h"
+
+void TextLnk::execute()
+{
+ QClipboard* cb = QApplication::clipboard();
+ parseText();
+ cb->setText(m_params[1]);
+ QWSServer::sendKeyEvent('V'-'@',Qt::Key_V, Qt::ControlButton,
+ true, false);
+ QWSServer::sendKeyEvent('V'-'@',Qt::Key_V, Qt::ControlButton,
+ false, false);
+}
+
+void TextLnk::parse(QString& str)
+{
+ replace(str, "\\\\", "\\");
+ replace(str, "\\n", "\n");
+ replace(str, "\\r", "\r");
+ replace(str, "\\t", "\t");
+}
+
+void TextLnk::replace(QString& str, const QString& s1, const QString& s2)
+{
+ int index = 0;
+ int idx;
+ int len = s1.length();
+ idx = str.find(s1, index);
+ for(;;){
+ idx = str.find(s1, index);
+ if(idx < 0) break;
+ str.replace(idx, len, s2);
+ index = idx;
+ }
+}