• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • applications API Reference
  • KDE Home
  • Contact Us
 

Konsole

  • kde-4.14
  • applications
  • konsole
  • src
KeyboardTranslator.h
Go to the documentation of this file.
1 /*
2  This source file is part of Konsole, a terminal emulator.
3 
4  Copyright 2007-2008 by Robert Knight <robertknight@gmail.com>
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  02110-1301 USA.
20 */
21 
22 #ifndef KEYBOARDTRANSLATOR_H
23 #define KEYBOARDTRANSLATOR_H
24 
25 // Qt
26 #include <QtCore/QHash>
27 #include <QtCore/QList>
28 //#include <QtGui/QKeySequence>
29 #include <QtCore/QMetaType>
30 
31 // Konsole
32 #include "konsole_export.h"
33 
34 class QIODevice;
35 class QTextStream;
36 
37 namespace Konsole
38 {
52 class KONSOLEPRIVATE_EXPORT KeyboardTranslator
53 {
54 public:
63  enum State {
65  NoState = 0,
69  NewLineState = 1,
74  AnsiState = 2,
78  CursorKeysState = 4,
83  AlternateScreenState = 8,
85  AnyModifierState = 16,
87  ApplicationKeypadState = 32
88  };
89  Q_DECLARE_FLAGS(States, State)
90 
91 
94  enum Command {
96  NoCommand = 0,
98  SendCommand = 1,
100  ScrollPageUpCommand = 2,
102  ScrollPageDownCommand = 4,
104  ScrollLineUpCommand = 8,
106  ScrollLineDownCommand = 16,
108  ScrollUpToTopCommand = 32,
110  ScrollDownToBottomCommand = 64,
112  EraseCommand = 256
113  };
114  Q_DECLARE_FLAGS(Commands, Command)
115 
116 
121  class Entry
122  {
123  public:
127  Entry();
128 
133  bool isNull() const;
134 
136  Command command() const;
138  void setCommand(Command aCommand);
139 
152  QByteArray text(bool expandWildCards = false,
153  Qt::KeyboardModifiers keyboardModifiers = Qt::NoModifier) const;
154 
156  void setText(const QByteArray& aText);
157 
167  QByteArray escapedText(bool expandWildCards = false,
168  Qt::KeyboardModifiers modifiers = Qt::NoModifier) const;
169 
171  int keyCode() const;
173  void setKeyCode(int aKeyCode);
174 
183  Qt::KeyboardModifiers modifiers() const;
184 
186  Qt::KeyboardModifiers modifierMask() const;
187 
189  void setModifiers(Qt::KeyboardModifiers modifiers);
191  void setModifierMask(Qt::KeyboardModifiers modifiers);
192 
201  States state() const;
202 
204  States stateMask() const;
205 
207  void setState(States aState);
209  void setStateMask(States aStateMask);
210 
215  //QKeySequence keySequence() const;
216 
221  QString conditionToString() const;
222 
230  QString resultToString(bool expandWildCards = false,
231  Qt::KeyboardModifiers modifiers = Qt::NoModifier) const;
232 
237  bool matches(int keyCode ,
238  Qt::KeyboardModifiers modifiers ,
239  States flags) const;
240 
241  bool operator==(const Entry& rhs) const;
242 
243  private:
244  void insertModifier(QString& item , int modifier) const;
245  void insertState(QString& item , int state) const;
246  QByteArray unescape(const QByteArray& text) const;
247 
248  int _keyCode;
249  Qt::KeyboardModifiers _modifiers;
250  Qt::KeyboardModifiers _modifierMask;
251  States _state;
252  States _stateMask;
253 
254  Command _command;
255  QByteArray _text;
256  };
257 
259  explicit KeyboardTranslator(const QString& name);
260 
261  //KeyboardTranslator(const KeyboardTranslator& other);
262 
264  QString name() const;
265 
267  void setName(const QString& name);
268 
270  QString description() const;
271 
273  void setDescription(const QString& description);
274 
286  Entry findEntry(int keyCode ,
287  Qt::KeyboardModifiers modifiers ,
288  States state = NoState) const;
289 
294  void addEntry(const Entry& entry);
295 
300  void replaceEntry(const Entry& existing , const Entry& replacement);
301 
305  void removeEntry(const Entry& entry);
306 
308  QList<Entry> entries() const;
309 
310 private:
311  // All entries in this translator, indexed by their keycode
312  QMultiHash<int, Entry> _entries;
313 
314  QString _name;
315  QString _description;
316 };
317 Q_DECLARE_OPERATORS_FOR_FLAGS(KeyboardTranslator::States)
318 Q_DECLARE_OPERATORS_FOR_FLAGS(KeyboardTranslator::Commands)
319 
320 class FallbackKeyboardTranslator : public KeyboardTranslator
321 {
322 public:
323  FallbackKeyboardTranslator();
324 };
325 
354 class KeyboardTranslatorReader
355 {
356 public:
358  explicit KeyboardTranslatorReader(QIODevice* source);
359 
364  QString description() const;
365 
367  bool hasNextEntry();
369  KeyboardTranslator::Entry nextEntry();
370 
375  bool parseError();
376 
383  static KeyboardTranslator::Entry createEntry(const QString& condition ,
384  const QString& result);
385 private:
386  struct Token {
387  enum Type {
388  TitleKeyword,
389  TitleText,
390  KeyKeyword,
391  KeySequence,
392  Command,
393  OutputText
394  };
395  Type type;
396  QString text;
397  };
398  QList<Token> tokenize(const QString&);
399  void readNext();
400  bool decodeSequence(const QString& ,
401  int& keyCode,
402  Qt::KeyboardModifiers& modifiers,
403  Qt::KeyboardModifiers& modifierMask,
404  KeyboardTranslator::States& state,
405  KeyboardTranslator::States& stateFlags);
406 
407  static bool parseAsModifier(const QString& item , Qt::KeyboardModifier& modifier);
408  static bool parseAsStateFlag(const QString& item , KeyboardTranslator::State& state);
409  static bool parseAsKeyCode(const QString& item , int& keyCode);
410  static bool parseAsCommand(const QString& text , KeyboardTranslator::Command& command);
411 
412  QIODevice* _source;
413  QString _description;
414  KeyboardTranslator::Entry _nextEntry;
415  bool _hasNext;
416 };
417 
419 class KeyboardTranslatorWriter
420 {
421 public:
426  explicit KeyboardTranslatorWriter(QIODevice* destination);
427  ~KeyboardTranslatorWriter();
428 
433  void writeHeader(const QString& description);
435  void writeEntry(const KeyboardTranslator::Entry& entry);
436 
437 private:
438  QIODevice* _destination;
439  QTextStream* _writer;
440 };
441 
442 inline int KeyboardTranslator::Entry::keyCode() const
443 {
444  return _keyCode;
445 }
446 inline void KeyboardTranslator::Entry::setKeyCode(int aKeyCode)
447 {
448  _keyCode = aKeyCode;
449 }
450 
451 inline void KeyboardTranslator::Entry::setModifiers(Qt::KeyboardModifiers modifier)
452 {
453  _modifiers = modifier;
454 }
455 inline Qt::KeyboardModifiers KeyboardTranslator::Entry::modifiers() const
456 {
457  return _modifiers;
458 }
459 
460 inline void KeyboardTranslator::Entry::setModifierMask(Qt::KeyboardModifiers mask)
461 {
462  _modifierMask = mask;
463 }
464 inline Qt::KeyboardModifiers KeyboardTranslator::Entry::modifierMask() const
465 {
466  return _modifierMask;
467 }
468 
469 inline bool KeyboardTranslator::Entry::isNull() const
470 {
471  return (*this == Entry());
472 }
473 
474 inline void KeyboardTranslator::Entry::setCommand(Command aCommand)
475 {
476  _command = aCommand;
477 }
478 inline KeyboardTranslator::Command KeyboardTranslator::Entry::command() const
479 {
480  return _command;
481 }
482 
483 inline void KeyboardTranslator::Entry::setText(const QByteArray& aText)
484 {
485  _text = unescape(aText);
486 }
487 inline int oneOrZero(int value)
488 {
489  return value ? 1 : 0;
490 }
491 inline QByteArray KeyboardTranslator::Entry::text(bool expandWildCards,
492  Qt::KeyboardModifiers keyboardModifiers) const
493 {
494  QByteArray expandedText = _text;
495 
496  if (expandWildCards) {
497  int modifierValue = 1;
498  modifierValue += oneOrZero(keyboardModifiers & Qt::ShiftModifier);
499  modifierValue += oneOrZero(keyboardModifiers & Qt::AltModifier) << 1;
500  modifierValue += oneOrZero(keyboardModifiers & Qt::ControlModifier) << 2;
501 
502  for (int i = 0; i < _text.length(); i++) {
503  if (expandedText[i] == '*')
504  expandedText[i] = '0' + modifierValue;
505  }
506  }
507 
508  return expandedText;
509 }
510 
511 inline void KeyboardTranslator::Entry::setState(States aState)
512 {
513  _state = aState;
514 }
515 inline KeyboardTranslator::States KeyboardTranslator::Entry::state() const
516 {
517  return _state;
518 }
519 
520 inline void KeyboardTranslator::Entry::setStateMask(States aStateMask)
521 {
522  _stateMask = aStateMask;
523 }
524 inline KeyboardTranslator::States KeyboardTranslator::Entry::stateMask() const
525 {
526  return _stateMask;
527 }
528 }
529 
530 Q_DECLARE_METATYPE(Konsole::KeyboardTranslator::Entry)
531 Q_DECLARE_METATYPE(const Konsole::KeyboardTranslator*)
532 
533 #endif // KEYBOARDTRANSLATOR_H
534 
QIODevice
Konsole::KeyboardTranslator::State
State
The meaning of a particular key sequence may depend upon the state which the terminal emulation is in...
Definition: KeyboardTranslator.h:63
Konsole::KeyboardTranslator::Entry::keyCode
int keyCode() const
Returns the character code ( from the Qt::Key enum ) associated with this entry.
Definition: KeyboardTranslator.h:442
Konsole::KeyboardTranslator
A converter which maps between key sequences pressed by the user and the character strings which shou...
Definition: KeyboardTranslator.h:52
Konsole::KeyboardTranslator::Entry::setKeyCode
void setKeyCode(int aKeyCode)
Sets the character code associated with this entry.
Definition: KeyboardTranslator.h:446
QByteArray
Konsole::KeyboardTranslatorReader::hasNextEntry
bool hasNextEntry()
Returns true if there is another entry in the source stream.
Definition: KeyboardTranslator.cpp:301
Konsole::KeyboardTranslator::Entry::modifierMask
Qt::KeyboardModifiers modifierMask() const
Returns the keyboard modifiers which are valid in this entry.
Definition: KeyboardTranslator.h:464
Konsole::KeyboardTranslator::Entry
Represents an association between a key sequence pressed by the user and the character sequence and c...
Definition: KeyboardTranslator.h:121
Konsole::KeyboardTranslatorWriter::KeyboardTranslatorWriter
KeyboardTranslatorWriter(QIODevice *destination)
Constructs a new writer which saves data into destination.
Definition: KeyboardTranslator.cpp:40
Konsole::KeyboardTranslator::Entry::text
QByteArray text(bool expandWildCards=false, Qt::KeyboardModifiers keyboardModifiers=Qt::NoModifier) const
Returns the character sequence associated with this entry, optionally replacing wildcard '*' characte...
Definition: KeyboardTranslator.h:491
Konsole::KeyboardTranslator::Entry::modifiers
Qt::KeyboardModifiers modifiers() const
Returns a bitwise-OR of the enabled keyboard modifiers associated with this entry.
Definition: KeyboardTranslator.h:455
konsole_export.h
Konsole::KeyboardTranslatorReader::createEntry
static KeyboardTranslator::Entry createEntry(const QString &condition, const QString &result)
Parses a condition and result string for a translator entry and produces a keyboard translator entry...
Definition: KeyboardTranslator.cpp:305
Konsole::KeyboardTranslatorWriter::writeHeader
void writeHeader(const QString &description)
Writes the header for the keyboard translator.
Definition: KeyboardTranslator.cpp:51
QTextStream
Konsole::KeyboardTranslatorReader
Parses the contents of a Keyboard Translator (.keytab) file and returns the entries found in it...
Definition: KeyboardTranslator.h:354
Konsole::KeyboardTranslatorReader::KeyboardTranslatorReader
KeyboardTranslatorReader(QIODevice *source)
Constructs a new reader which parses the given source.
Definition: KeyboardTranslator.cpp:85
Konsole::KeyboardTranslator::Entry::state
States state() const
Returns a bitwise-OR of the enabled state flags associated with this entry.
Definition: KeyboardTranslator.h:515
Konsole::FallbackKeyboardTranslator
Definition: KeyboardTranslator.h:320
Konsole::KeyboardTranslatorWriter
Writes a keyboard translation to disk.
Definition: KeyboardTranslator.h:419
Konsole::KeyboardTranslator::Entry::setModifiers
void setModifiers(Qt::KeyboardModifiers modifiers)
See modifiers()
Definition: KeyboardTranslator.h:451
Konsole::KeyboardTranslator::Entry::setModifierMask
void setModifierMask(Qt::KeyboardModifiers modifiers)
See modifierMask() and modifiers()
Definition: KeyboardTranslator.h:460
Konsole::operator==
bool operator==(const Character &a, const Character &b)
Definition: Character.h:171
Konsole::KeyboardTranslatorWriter::writeEntry
void writeEntry(const KeyboardTranslator::Entry &entry)
Writes a translator entry.
Definition: KeyboardTranslator.cpp:55
QString
QList
Konsole::KeyboardTranslatorReader::description
QString description() const
Returns the description text.
Definition: KeyboardTranslator.cpp:297
Konsole::KeyboardTranslator::Entry::stateMask
States stateMask() const
Returns the state flags which are valid in this entry.
Definition: KeyboardTranslator.h:524
Konsole::oneOrZero
int oneOrZero(int value)
Definition: KeyboardTranslator.h:487
Konsole::KeyboardTranslator::Entry::command
Command command() const
Returns the commands associated with this entry.
Definition: KeyboardTranslator.h:478
Konsole::KeyboardTranslator::Entry::isNull
bool isNull() const
Returns true if this entry is null.
Definition: KeyboardTranslator.h:469
Konsole::KeyboardTranslator::Entry::setState
void setState(States aState)
See state()
Definition: KeyboardTranslator.h:511
Konsole::KeyboardTranslator::Entry::setText
void setText(const QByteArray &aText)
Sets the character sequence associated with this entry.
Definition: KeyboardTranslator.h:483
Konsole::KeyboardTranslatorReader::nextEntry
KeyboardTranslator::Entry nextEntry()
Returns the next entry found in the source stream.
Definition: KeyboardTranslator.cpp:333
KONSOLEPRIVATE_EXPORT
#define KONSOLEPRIVATE_EXPORT
Definition: konsole_export.h:33
Konsole::KeyboardTranslator::Command
Command
This enum describes commands which are associated with particular key sequences.
Definition: KeyboardTranslator.h:94
Konsole::KeyboardTranslatorReader::parseError
bool parseError()
Returns true if an error occurred whilst parsing the input or false if no error occurred.
Definition: KeyboardTranslator.cpp:340
Konsole::KeyboardTranslator::Entry::setStateMask
void setStateMask(States aStateMask)
See stateMask()
Definition: KeyboardTranslator.h:520
Konsole::KeyboardTranslatorWriter::~KeyboardTranslatorWriter
~KeyboardTranslatorWriter()
Definition: KeyboardTranslator.cpp:47
Konsole::KeyboardTranslator::Entry::setCommand
void setCommand(Command aCommand)
Sets the command associated with this entry.
Definition: KeyboardTranslator.h:474
QMultiHash
Qt::KeyboardModifiers
typedef KeyboardModifiers
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Sat May 9 2020 03:56:27 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Konsole

Skip menu "Konsole"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

applications API Reference

Skip menu "applications API Reference"
  •   kate
  •       kate
  •   KTextEditor
  •   Kate
  • Konsole

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal