[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-devel
Subject: key macro with kate plugin
From: Krister Wicksell Eriksson <krister.wicksell () spray ! se>
Date: 2002-02-23 19:43:25
[Download RAW message or body]
Hi
I would like to make a plugin for kate that make it possible to record key
macros. Like in Kylix and Delphi for example (Ctrl+Shift+R/P). Have checked
the kate code but can't find a way to read which keys are being pressed. So
can any one give me a hint if it is possible.
Have made a quick test with kedit. Have attached a patch.
Thanks
Krister
--
krister.wicksell@spray.se
http://hem.spray.se/krister.wicksell/
["kdelibs-kedit_key_recording-20020223.patch" (text/x-diff)]
? kdelibs-kedit_key_recording-20020223.patch
Index: kdeui/keditcl.h
===================================================================
RCS file: /home/kde/kdelibs/kdeui/keditcl.h,v
retrieving revision 1.56
diff -u -3 -p -u -r1.56 keditcl.h
--- kdeui/keditcl.h 2002/02/08 20:10:36 1.56
+++ kdeui/keditcl.h 2002/02/23 19:15:30
@@ -21,6 +21,7 @@
#ifndef __KEDITCL_H__
#define __KEDITCL_H__
+#include <qptrlist.h>
#include <qmultilineedit.h>
#include <qstring.h>
#include <kdialogbase.h>
@@ -268,7 +269,26 @@ public:
*/
void setOverwriteEnabled(bool b);
+ /**
+ * If key recording is enabled.
+ */
+ bool isRecording() { return recording; }
+
+ /**
+ * Start key recording.
+ */
+ void startRecording();
+
+ /**
+ * Stop key recording.
+ */
+ void stopRecording();
+ /**
+ * Play recorded keys.
+ */
+ void play();
+
signals:
/** This signal is emitted if the user dropped a URL over the text editor
* @ref QMultiLineEdit widget.
@@ -397,6 +417,14 @@ private:
bool fill_column_is_set;
bool word_wrap_is_set;
int fill_column_value;
+
+ bool recording;
+ QPtrList<QKeyEvent> *recorded_keys;
+
+ /**
+ * Record a key event.
+ */
+ void record(QKeyEvent *e);
class KEditPrivate;
KEditPrivate *d;
Index: kdeui/keditcl1.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdeui/keditcl1.cpp,v
retrieving revision 1.54
diff -u -3 -p -u -r1.54 keditcl1.cpp
--- kdeui/keditcl1.cpp 2002/01/21 01:06:40 1.54
+++ kdeui/keditcl1.cpp 2002/02/23 19:15:30
@@ -61,10 +61,14 @@ KEdit::KEdit(QWidget *_parent, const cha
replace_dialog= NULL;
gotodialog = NULL;
+ recording = false;
+ recorded_keys = new QPtrList<QKeyEvent>;
+ recorded_keys->setAutoDelete(true);
+
setAcceptDrops(true);
KCursor::setAutoHideCursor( this, true );
-
- connect(this, SIGNAL(cursorPositionChanged(int,int)),
+
+ connect(this, SIGNAL(cursorPositionChanged(int,int)),
this, SLOT(slotCursorPositionChanged()));
}
@@ -72,6 +76,7 @@ KEdit::KEdit(QWidget *_parent, const cha
KEdit::~KEdit()
{
delete d;
+ delete recorded_keys;
}
void
@@ -380,7 +385,7 @@ void KEdit::keyPressEvent ( QKeyEvent *e
}
if(!atEnd()){
-
+
getCursorPosition(&line,&col);
killstring = textLine(line);
killstring = killstring.mid(col,killstring.length());
@@ -420,6 +425,7 @@ void KEdit::keyPressEvent ( QKeyEvent *e
QMultiLineEdit::keyPressEvent(e);
setModified(true);
+ record(e);
return;
}
@@ -438,6 +444,7 @@ void KEdit::keyPressEvent ( QKeyEvent *e
killing = false;
setModified(true);
+ record(e);
return;
}
@@ -445,18 +452,21 @@ void KEdit::keyPressEvent ( QKeyEvent *e
if ((e->state() & ControlButton ) && (e->key() == Key_Insert) ){
copy();
+ record(e);
return;
}
if ((e->state() & ShiftButton ) && (e->key() == Key_Insert) ){
paste();
setModified(true);
+ record(e);
return;
}
if ((e->state() & ShiftButton ) && (e->key() == Key_Delete) ){
cut();
setModified(true);
+ record(e);
return;
}
@@ -465,28 +475,33 @@ void KEdit::keyPressEvent ( QKeyEvent *e
if (e->key() == Key_Insert){
this->setOverwriteMode(!this->isOverwriteMode());
emit toggle_overwrite_signal();
+ record(e);
return;
}
}
if ( KStdAccel::isEqual( e, KStdAccel::deleteWordBack()) ) {
- moveCursor(MoveWordBackward, true);
+ moveCursor(MoveWordBackward, true);
if (hasSelectedText())
del();
e->accept();
setModified(true);
+ record(e);
return;
}
else if ( KStdAccel::isEqual( e, KStdAccel::deleteWordForward()) ) {
- moveCursor(MoveWordForward, true);
+ moveCursor(MoveWordForward, true);
if (hasSelectedText())
del();
e->accept();
setModified(true);
+ record(e);
return;
}
QMultiLineEdit::keyPressEvent(e);
+ if (e->isAccepted())
+ record(e);
}
void KEdit::installRBPopup(QPopupMenu *p) {
@@ -522,7 +537,7 @@ void KEdit::doGotoLine() {
}
int max_parag = paragraphs();
-
+
int line = 0;
int parag = -1;
int lines_in_parag = 0;
@@ -575,6 +590,37 @@ void KEdit::dropEvent(QDropEvent* e) {
void KEdit::setOverwriteEnabled(bool b)
{
d->overwriteEnabled = b;
+}
+
+void KEdit::startRecording()
+{
+ if (!recording)
+ {
+ recording = true;
+ recorded_keys->clear();
+ }
+}
+
+void KEdit::stopRecording()
+{
+ recording = false;
+}
+
+void KEdit::play()
+{
+ if (recording)
+ return;
+
+ QKeyEvent *e;
+ for (e = recorded_keys->first(); e != 0; e = recorded_keys->next())
+ keyPressEvent(e);
+}
+
+void KEdit::record(QKeyEvent *e)
+{
+ if (recording)
+ recorded_keys->append(new QKeyEvent(e->type(), e->key(), e->ascii(), e->state(),
+ e->text(), e->isAutoRepeat(), e->count()));
}
// QWidget::create() turns off mouse-Tracking which would break auto-hiding
["kdeutils-kedit_key_recording-20020223.patch" (text/x-diff)]
? kdeutils-kedit_key_recording-20020223.patch
? kedit/dummy.cpp
Index: kedit/kedit.cpp
===================================================================
RCS file: /home/kde/kdeutils/kedit/kedit.cpp,v
retrieving revision 1.156
diff -u -3 -p -u -r1.156 kedit.cpp
--- kedit/kedit.cpp 2002/01/25 21:15:50 1.156
+++ kedit/kedit.cpp 2002/02/23 19:15:53
@@ -225,6 +225,12 @@ void TopLevel::setupActions()
KStdAction::keyBindings(this, SLOT(editKeys()), actionCollection());
KStdAction::configureToolbars(this, SLOT(editToolbars()), actionCollection());
+ playAction = new KAction(i18n("&Play"), 0, (Qt::SHIFT + Qt::CTRL + Qt::Key_P), this,
+ SLOT(play()), actionCollection(), "play");
+
+ recordAction = new KToggleAction(i18n("&Record"), 0, (Qt::SHIFT + Qt::CTRL + Qt::Key_R), this,
+ SLOT(record()), actionCollection(), "record");
+
createGUI();
}
@@ -1300,7 +1306,7 @@ void TopLevel::openURL( const KURL& _url
else
{
if (_mode & OPEN_NEW == 0)
- {
+ {
KMessageBox::error(this, i18n("Cannot download file!"));
return;
}
@@ -1482,6 +1488,22 @@ void TopLevel::writeSettings( void )
config->sync();
}
+void TopLevel::play()
+{
+ eframe->play();
+}
+
+void TopLevel::record()
+{
+ if(recordAction->isChecked())
+ {
+ eframe->startRecording();
+ }
+ else
+ {
+ eframe->stopRecording();
+ }
+}
void TopLevel::toggle_overwrite(){
Index: kedit/kedit.h
===================================================================
RCS file: /home/kde/kdeutils/kedit/kedit.h,v
retrieving revision 1.61
diff -u -3 -p -u -r1.61 kedit.h
--- kedit/kedit.h 2001/10/14 04:16:55 1.61
+++ kedit/kedit.h 2002/02/23 19:15:53
@@ -140,6 +140,8 @@ private:
KAction *copyAction;
KAction *undoAction;
KAction *redoAction;
+ KAction *playAction;
+ KToggleAction *recordAction;
int open_mode;
@@ -196,6 +198,8 @@ public slots:
void search_again();
void toggle_overwrite();
void writeSettings();
+ void play();
+ void record();
void spellcheck();
void spell_started ( KSpell *);
Index: kedit/keditui.rc
===================================================================
RCS file: /home/kde/kdeutils/kedit/keditui.rc,v
retrieving revision 1.6
diff -u -3 -p -u -r1.6 keditui.rc
--- kedit/keditui.rc 2001/03/07 07:39:07 1.6
+++ kedit/keditui.rc 2002/02/23 19:15:53
@@ -6,5 +6,9 @@
<Action name="insert_date"/>
<Action name="clean_spaces"/>
</Menu>
+ <Menu name="tools"><text>&Tools</text>
+ <Action name="play"/>
+ <Action name="record"/>
+ </Menu>
</MenuBar>
</kpartgui>
>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic