• 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
KeyboardTranslatorManager.cpp
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 // Own
23 #include "KeyboardTranslatorManager.h"
24 
25 // Qt
26 #include <QtCore/QFile>
27 #include <QtCore/QFileInfo>
28 
29 // KDE
30 #include <KDebug>
31 #include <KStandardDirs>
32 
33 using namespace Konsole;
34 
35 KeyboardTranslatorManager::KeyboardTranslatorManager()
36  : _haveLoadedAll(false)
37  , _fallbackTranslator(0)
38 {
39  _fallbackTranslator = new FallbackKeyboardTranslator();
40 }
41 
42 KeyboardTranslatorManager::~KeyboardTranslatorManager()
43 {
44  qDeleteAll(_translators);
45  delete _fallbackTranslator;
46 }
47 
48 K_GLOBAL_STATIC(KeyboardTranslatorManager , theKeyboardTranslatorManager)
49 KeyboardTranslatorManager* KeyboardTranslatorManager::instance()
50 {
51  return theKeyboardTranslatorManager;
52 }
53 
54 void KeyboardTranslatorManager::addTranslator(KeyboardTranslator* translator)
55 {
56  _translators.insert(translator->name(), translator);
57 
58  if (!saveTranslator(translator))
59  kWarning() << "Unable to save translator" << translator->name()
60  << "to disk.";
61 }
62 
63 bool KeyboardTranslatorManager::deleteTranslator(const QString& name)
64 {
65  Q_ASSERT(_translators.contains(name));
66 
67  // locate and delete
68  QString path = findTranslatorPath(name);
69  if (QFile::remove(path)) {
70  _translators.remove(name);
71  return true;
72  } else {
73  kWarning() << "Failed to remove translator - " << path;
74  return false;
75  }
76 }
77 
78 QString KeyboardTranslatorManager::findTranslatorPath(const QString& name)
79 {
80  return KStandardDirs::locate("data", "konsole/" + name + ".keytab");
81 }
82 
83 void KeyboardTranslatorManager::findTranslators()
84 {
85  QStringList list = KGlobal::dirs()->findAllResources("data",
86  "konsole/*.keytab",
87  KStandardDirs::NoDuplicates);
88 
89  // add the name of each translator to the list and associated
90  // the name with a null pointer to indicate that the translator
91  // has not yet been loaded from disk
92  foreach(const QString& translatorPath, list) {
93  QString name = QFileInfo(translatorPath).baseName();
94 
95  if (!_translators.contains(name))
96  _translators.insert(name, 0);
97  }
98 
99  _haveLoadedAll = true;
100 }
101 
102 const KeyboardTranslator* KeyboardTranslatorManager::findTranslator(const QString& name)
103 {
104  if (name.isEmpty())
105  return defaultTranslator();
106 
107  if (_translators.contains(name) && _translators[name] != 0)
108  return _translators[name];
109 
110  KeyboardTranslator* translator = loadTranslator(name);
111 
112  if (translator != 0)
113  _translators[name] = translator;
114  else if (!name.isEmpty())
115  kWarning() << "Unable to load translator" << name;
116 
117  return translator;
118 }
119 
120 bool KeyboardTranslatorManager::saveTranslator(const KeyboardTranslator* translator)
121 {
122  const QString path = KGlobal::dirs()->saveLocation("data", "konsole/") + translator->name()
123  + ".keytab";
124 
125  //kDebug() << "Saving translator to" << path;
126 
127  QFile destination(path);
128  if (!destination.open(QIODevice::WriteOnly | QIODevice::Text)) {
129  kWarning() << "Unable to save keyboard translation:"
130  << destination.errorString();
131  return false;
132  }
133 
134  {
135  KeyboardTranslatorWriter writer(&destination);
136  writer.writeHeader(translator->description());
137 
138  foreach(const KeyboardTranslator::Entry& entry, translator->entries()) {
139  writer.writeEntry(entry);
140  }
141  }
142 
143  destination.close();
144 
145  return true;
146 }
147 
148 KeyboardTranslator* KeyboardTranslatorManager::loadTranslator(const QString& name)
149 {
150  const QString& path = findTranslatorPath(name);
151 
152  QFile source(path);
153  if (name.isEmpty() || !source.open(QIODevice::ReadOnly | QIODevice::Text))
154  return 0;
155 
156  return loadTranslator(&source, name);
157 }
158 
159 KeyboardTranslator* KeyboardTranslatorManager::loadTranslator(QIODevice* source, const QString& name)
160 {
161  KeyboardTranslator* translator = new KeyboardTranslator(name);
162  KeyboardTranslatorReader reader(source);
163  translator->setDescription(reader.description());
164  while (reader.hasNextEntry())
165  translator->addEntry(reader.nextEntry());
166 
167  source->close();
168 
169  if (!reader.parseError()) {
170  return translator;
171  } else {
172  delete translator;
173  return 0;
174  }
175 }
176 
177 const KeyboardTranslator* KeyboardTranslatorManager::defaultTranslator()
178 {
179  // Try to find the default.keytab file if it exists, otherwise
180  // fall back to the internal hard-coded fallback translator
181  const KeyboardTranslator* translator = findTranslator("default");
182  if (!translator) {
183  translator = _fallbackTranslator;
184  }
185  return translator;
186 }
187 
188 QStringList KeyboardTranslatorManager::allTranslators()
189 {
190  if (!_haveLoadedAll) {
191  findTranslators();
192  }
193 
194  return _translators.keys();
195 }
QIODevice
Konsole::KeyboardTranslatorManager::addTranslator
void addTranslator(KeyboardTranslator *translator)
Adds a new translator.
Definition: KeyboardTranslatorManager.cpp:54
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::description
QString description() const
Returns the descriptive name of this keyboard translator.
Definition: KeyboardTranslator.cpp:641
QFile::remove
bool remove()
KeyboardTranslatorManager.h
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::KeyboardTranslator::entries
QList< Entry > entries() const
Returns a list of all entries in the translator.
Definition: KeyboardTranslator.cpp:656
QIODevice::close
virtual void close()
QFile
Konsole::KeyboardTranslatorReader
Parses the contents of a Keyboard Translator (.keytab) file and returns the entries found in it...
Definition: KeyboardTranslator.h:354
Konsole::KeyboardTranslatorManager::deleteTranslator
bool deleteTranslator(const QString &name)
Deletes a translator.
Definition: KeyboardTranslatorManager.cpp:63
Konsole::KeyboardTranslatorManager::allTranslators
QStringList allTranslators()
Returns a list of the names of available keyboard translators.
Definition: KeyboardTranslatorManager.cpp:188
Konsole::FallbackKeyboardTranslator
Definition: KeyboardTranslator.h:320
Konsole::KeyboardTranslatorWriter
Writes a keyboard translation to disk.
Definition: KeyboardTranslator.h:419
QString::isEmpty
bool isEmpty() const
Konsole::KeyboardTranslatorManager::~KeyboardTranslatorManager
~KeyboardTranslatorManager()
Definition: KeyboardTranslatorManager.cpp:42
QString
QStringList
Konsole::KeyboardTranslator::addEntry
void addEntry(const Entry &entry)
Adds an entry to this keyboard translator's table.
Definition: KeyboardTranslator.cpp:661
QFileInfo
Konsole::KeyboardTranslatorManager::defaultTranslator
const KeyboardTranslator * defaultTranslator()
Returns the default translator for Konsole.
Definition: KeyboardTranslatorManager.cpp:177
Konsole::KeyboardTranslator::name
QString name() const
Returns the name of this keyboard translator.
Definition: KeyboardTranslator.cpp:651
Konsole::KeyboardTranslatorManager::KeyboardTranslatorManager
KeyboardTranslatorManager()
Constructs a new KeyboardTranslatorManager and loads the list of available keyboard translations...
Definition: KeyboardTranslatorManager.cpp:35
Konsole::KeyboardTranslatorManager
Manages the keyboard translations available for use by terminal sessions, see KeyboardTranslator.
Definition: KeyboardTranslatorManager.h:41
QFileInfo::baseName
QString baseName() const
Konsole::KeyboardTranslator::setDescription
void setDescription(const QString &description)
Sets the descriptive name of this keyboard translator.
Definition: KeyboardTranslator.cpp:636
Konsole::KeyboardTranslatorManager::findTranslator
const KeyboardTranslator * findTranslator(const QString &name)
Returns the keyboard translator with the given name or 0 if no translator with that name exists...
Definition: KeyboardTranslatorManager.cpp:102
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