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

lokalize

  • sources
  • kde-4.14
  • kdesdk
  • lokalize
  • src
editorview.cpp
Go to the documentation of this file.
1 /* ****************************************************************************
2  This file is part of Lokalize (some bits of KBabel code were reused)
3 
4  Copyright (C) 2007-2009 by Nick Shaforostoff <shafff@ukr.net>
5  Copyright (C) 1999-2000 by Matthias Kiefer <matthias.kiefer@gmx.de>
6  2001-2004 by Stanislav Visnovsky <visnovsky@kde.org>
7 
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 2 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 
22  In addition, as a special exception, the copyright holders give
23  permission to link the code of this program with any edition of
24  the Qt library by Trolltech AS, Norway (or with modified versions
25  of Qt that use the same license as Qt), and distribute linked
26  combinations including the two. You must obey the GNU General
27  Public License in all respects for all of the code used other than
28  Qt. If you modify this file, you may extend this exception to
29  your version of the file, but you are not obligated to do so. If
30  you do not wish to do so, delete this exception statement from
31  your version.
32 
33 **************************************************************************** */
34 
35 #include "editorview.h"
36 #include "xlifftextedit.h"
37 #include "project.h"
38 #include "catalog.h"
39 #include "cmd.h"
40 #include "prefs_lokalize.h"
41 #include "prefs.h"
42 
43 #include <QTimer>
44 #include <QMenu>
45 #include <QDragEnterEvent>
46 
47 #include <QLabel>
48 #include <QHBoxLayout>
49 
50 
51 #include <ktabbar.h>
52 #include <kled.h>
53 #include <kmessagebox.h>
54 #include <klocale.h>
55 #include <kdebug.h>
56 #include <kurl.h>
57 #include <kstandardshortcut.h>
58 #include <kcolorscheme.h>
59 
60 
61 //parent is set on qsplitter insertion
62 
63 LedsWidget::LedsWidget(QWidget* parent): QWidget(parent)
64 {
65  KColorScheme colorScheme(QPalette::Normal);
66 
67  QHBoxLayout* layout=new QHBoxLayout(this);
68  layout->addStretch();
69  layout->addWidget(new QLabel(i18nc("@label whether entry is fuzzy","Not ready:"),this));
70  layout->addWidget(ledFuzzy=new KLed(colorScheme.foreground(KColorScheme::NeutralText).color()/*Qt::green*/,KLed::Off,KLed::Sunken,KLed::Rectangular));
71  layout->addWidget(new QLabel(i18nc("@label whether entry is untranslated","Untranslated:"),this));
72  layout->addWidget(ledUntr=new KLed(colorScheme.foreground(KColorScheme::NegativeText).color()/*Qt::red*/,KLed::Off,KLed::Sunken,KLed::Rectangular));
73  layout->addSpacing(1);
74  layout->addWidget(lblColumn=new QLabel(this));
75  layout->addStretch();
76  setMaximumHeight(minimumSizeHint().height());
77 }
78 
79 void LedsWidget::contextMenuEvent(QContextMenuEvent* event)
80 {
81  QMenu menu;
82  menu.addAction(i18nc("@action","Hide"));
83  if (!menu.exec(event->globalPos()))
84  return; //NOTE the config doesn't seem to work
85  Settings::setLeds(false);
86  SettingsController::instance()->dirty=true;
87  hide();
88 }
89 
90 void LedsWidget::cursorPositionChanged(int column)
91 {
92  lblColumn->setText(i18nc("@info:label cursor position", "Column: %1", column));
93 }
94 
95 
96 
97 EditorView::EditorView(QWidget *parent,Catalog* catalog/*,keyEventHandler* kh*/)
98  : QSplitter(Qt::Vertical,parent)
99  , m_catalog(catalog)
100  , m_sourceTextEdit(new TranslationUnitTextEdit(catalog,DocPosition::Source,this))
101  , m_targetTextEdit(new TranslationUnitTextEdit(catalog,DocPosition::Target,this))
102  , m_pluralTabBar(new KTabBar(this))
103  , _leds(0)
104  , m_modifiedAfterFind(false)
105 {
106  m_pluralTabBar->hide();
107  m_sourceTextEdit->setWhatsThis(i18n("<qt><p><b>Original String</b></p>\n"
108  "<p>This part of the window shows the original message\n"
109  "of the currently displayed entry.</p></qt>"));
110 
111  connect (m_targetTextEdit, SIGNAL(contentsModified(DocPosition)), this, SLOT(resetFindForCurrent(DocPosition)));
112  connect (m_targetTextEdit, SIGNAL(toggleApprovementRequested()), this, SLOT(toggleApprovement()));
113  connect (this, SIGNAL(signalApprovedEntryDisplayed(bool)), m_targetTextEdit, SLOT(reflectApprovementState()));
114  connect (m_sourceTextEdit, SIGNAL(tagInsertRequested(InlineTag)), m_targetTextEdit, SLOT(insertTag(InlineTag)));
115 
116  connect (m_sourceTextEdit, SIGNAL(binaryUnitSelectRequested(QString)), this, SIGNAL(binaryUnitSelectRequested(QString)));
117  connect (m_targetTextEdit, SIGNAL(binaryUnitSelectRequested(QString)), this, SIGNAL(binaryUnitSelectRequested(QString)));
118  connect (m_sourceTextEdit, SIGNAL(gotoEntryRequested(DocPosition)), this, SIGNAL(gotoEntryRequested(DocPosition)));
119  connect (m_targetTextEdit, SIGNAL(gotoEntryRequested(DocPosition)), this, SIGNAL(gotoEntryRequested(DocPosition)));
120 
121  connect (m_sourceTextEdit, SIGNAL(tmLookupRequested(DocPosition::Part,QString)), this, SIGNAL(tmLookupRequested(DocPosition::Part,QString)));
122  connect (m_targetTextEdit, SIGNAL(tmLookupRequested(DocPosition::Part,QString)), this, SIGNAL(tmLookupRequested(DocPosition::Part,QString)));
123 
124  connect (m_sourceTextEdit, SIGNAL(findRequested()), this, SIGNAL(findRequested()));
125  connect (m_targetTextEdit, SIGNAL(findRequested()), this, SIGNAL(findRequested()));
126  connect (m_sourceTextEdit, SIGNAL(findNextRequested()), this, SIGNAL(findNextRequested()));
127  connect (m_targetTextEdit, SIGNAL(findNextRequested()), this, SIGNAL(findNextRequested()));
128  connect (m_sourceTextEdit, SIGNAL(replaceRequested()), this, SIGNAL(replaceRequested()));
129  connect (m_targetTextEdit, SIGNAL(replaceRequested()), this, SIGNAL(replaceRequested()));
130 
131  connect (this, SIGNAL(doExplicitCompletion()), m_targetTextEdit, SLOT(doExplicitCompletion()));
132 
133  addWidget(m_pluralTabBar);
134  addWidget(m_sourceTextEdit);
135  addWidget(m_targetTextEdit);
136 
137  QWidget::setTabOrder(m_targetTextEdit,m_sourceTextEdit);
138  QWidget::setTabOrder(m_sourceTextEdit,m_targetTextEdit);
139  setFocusProxy(m_targetTextEdit);
140 // QTimer::singleShot(3000,this,SLOT(setupWhatsThis()));
141  settingsChanged();
142 }
143 
144 EditorView::~EditorView()
145 {
146 }
147 
148 
149 void EditorView::resetFindForCurrent(const DocPosition& pos)
150 {
151  m_modifiedAfterFind=true;
152  emit signalChanged(pos.entry);
153 }
154 
155 
156 void EditorView::settingsChanged()
157 {
158  //Settings::self()->config()->setGroup("Editor");
159  m_sourceTextEdit->document()->setDefaultFont(Settings::msgFont());
160  m_targetTextEdit->document()->setDefaultFont(Settings::msgFont());
161  if (_leds) _leds->setVisible(Settings::leds());
162  else if (Settings::leds())
163  {
164  _leds=new LedsWidget(this);
165  insertWidget(2,_leds);
166  connect (m_targetTextEdit, SIGNAL(cursorPositionChanged(int)), _leds, SLOT(cursorPositionChanged(int)));
167  connect (m_targetTextEdit, SIGNAL(nonApprovedEntryDisplayed()),_leds->ledFuzzy, SLOT(on()));
168  connect (m_targetTextEdit, SIGNAL(approvedEntryDisplayed()), _leds->ledFuzzy, SLOT(off()));
169  connect (m_targetTextEdit, SIGNAL(untranslatedEntryDisplayed()),_leds->ledUntr, SLOT(on()));
170  connect (m_targetTextEdit, SIGNAL(translatedEntryDisplayed()), _leds->ledUntr, SLOT(off()));
171  m_targetTextEdit->showPos(m_targetTextEdit->currentPos());
172  }
173 }
174 
175 
176 //main function in this file :)
177 void EditorView::gotoEntry(DocPosition pos, int selection)
178 {
179  setUpdatesEnabled(false);
180 
181  bool refresh=(pos.entry==-1);
182  if (refresh) pos=m_targetTextEdit->currentPos();
183  //kWarning()<<"refresh"<<refresh;
184  //kWarning()<<"offset"<<pos.offset;
185  //TODO trigger refresh directly via Catalog signal
186 
187  if (KDE_ISUNLIKELY( m_catalog->isPlural(pos.entry)))
188  {
189  if (KDE_ISUNLIKELY( m_catalog->numberOfPluralForms()!=m_pluralTabBar->count() ))
190  {
191  int i=m_pluralTabBar->count();
192  if (m_catalog->numberOfPluralForms()>m_pluralTabBar->count())
193  while (i<m_catalog->numberOfPluralForms())
194  m_pluralTabBar->addTab(i18nc("@title:tab","Plural Form %1",++i));
195  else
196  while (i>m_catalog->numberOfPluralForms())
197  m_pluralTabBar->removeTab(i--);
198  }
199  m_pluralTabBar->show();
200  m_pluralTabBar->blockSignals(true);
201  m_pluralTabBar->setCurrentIndex(pos.form);
202  m_pluralTabBar->blockSignals(false);
203  }
204  else
205  m_pluralTabBar->hide();
206 
207  //bool keepCursor=DocPos(pos)==DocPos(_msgidEdit->currentPos());
208  bool keepCursor=false;
209  CatalogString sourceWithTags=m_sourceTextEdit->showPos(pos,CatalogString(),keepCursor);
210 
211  //kWarning()<<"calling showPos";
212  QString targetString=m_targetTextEdit->showPos(pos,sourceWithTags,keepCursor).string;
213  //kWarning()<<"ss"<<_msgstrEdit->textCursor().anchor()<<_msgstrEdit->textCursor().position();
214  m_sourceTextEdit->cursorToStart();
215  m_targetTextEdit->cursorToStart();
216 
217  bool untrans=targetString.isEmpty();
218  //kWarning()<<"ss1"<<_msgstrEdit->textCursor().anchor()<<_msgstrEdit->textCursor().position();
219 
220  if (pos.offset || selection)
221  {
222  TranslationUnitTextEdit* msgEdit=(pos.part==DocPosition::Source?m_sourceTextEdit:m_targetTextEdit);
223  QTextCursor t=msgEdit->textCursor();
224  t.movePosition(QTextCursor::NextCharacter,QTextCursor::MoveAnchor,pos.offset);
225  //NOTE this was kinda bug due to on-the-fly msgid wordwrap
226  if (selection)
227  t.movePosition(QTextCursor::NextCharacter,QTextCursor::KeepAnchor,selection);
228  msgEdit->setTextCursor(t);
229  }
230  else if (!untrans)
231  {
232  QTextCursor t=m_targetTextEdit->textCursor();
233  //what if msg starts with a tag?
234  if (KDE_ISUNLIKELY( targetString.startsWith('<') ))
235  {
236  int offset=targetString.indexOf(QRegExp(">[^<]"));
237  if ( offset!=-1 )
238  t.movePosition(QTextCursor::NextCharacter,QTextCursor::MoveAnchor,offset+1);
239  }
240  else if (KDE_ISUNLIKELY( targetString.startsWith(TAGRANGE_IMAGE_SYMBOL) ))
241  {
242  int offset=targetString.indexOf(QRegExp("[^"+TAGRANGE_IMAGE_SYMBOL+']'));
243  if ( offset!=-1 )
244  t.movePosition(QTextCursor::NextCharacter,QTextCursor::MoveAnchor,offset+1);
245  }
246  m_targetTextEdit->setTextCursor(t);
247  }
248  //kWarning()<<"set-->"<<_msgstrEdit->textCursor().anchor()<<_msgstrEdit->textCursor().position();
249  //kWarning()<<"anchor"<<t.anchor()<<"pos"<<t.position();
250  m_targetTextEdit->setFocus();
251  setUpdatesEnabled(true);
252 }
253 /*
254 void KAiderView::dragEnterEvent(QDragEnterEvent* event)
255 {
256  if(event->mimeData()->hasUrls() && event->mimeData()->urls().first().path().endsWith(".po"))
257  event->acceptProposedAction();
258 }
259 
260 void KAiderView::dropEvent(QDropEvent *event)
261 {
262  emit fileOpenRequested(KUrl(event->mimeData()->urls().first()));
263  event->acceptProposedAction();
264 }
265 
266 */
267 
268 
269 //BEGIN edit actions that are easier to do in this class
270 void EditorView::unwrap(TranslationUnitTextEdit* editor)
271 {
272  if (!editor)
273  editor=m_targetTextEdit;
274 
275  QTextCursor t=editor->document()->find(QRegExp("[^(\\\\n)]$"));
276  if (t.isNull())
277  return;
278 
279  if (editor==m_targetTextEdit)
280  m_catalog->beginMacro(i18nc("@item Undo action item","Unwrap"));
281  t.movePosition(QTextCursor::EndOfLine);
282  if (!t.atEnd())
283  t.deleteChar();
284 
285  QRegExp rx("[^(\\\\n)>]$");
286  //remove '\n's skipping "\\\\n"
287  while (!(t=editor->document()->find(rx,t)).isNull())
288  {
289  t.movePosition(QTextCursor::EndOfLine);
290  if (!t.atEnd())
291  t.deleteChar();
292  }
293  if (editor==m_targetTextEdit)
294  m_catalog->endMacro();
295 }
296 
297 void EditorView::insertTerm(const QString& term)
298 {
299  m_targetTextEdit->insertPlainText(term);
300  m_targetTextEdit->setFocus();
301 }
302 
303 
304 QString EditorView::selectionInTarget() const
305 {
306  //TODO remove IMAGES
307  return m_targetTextEdit->textCursor().selectedText();
308 }
309 
310 QString EditorView::selectionInSource() const
311 {
312  //TODO remove IMAGES
313  return m_sourceTextEdit->textCursor().selectedText();
314 }
315 
316 void EditorView::setProperFocus()
317 {
318  m_targetTextEdit->setFocus();
319 }
320 
321 
322 //END edit actions that are easier to do in this class
323 
324 
325 
326 QObject* EditorView::viewPort()
327 {
328  return m_targetTextEdit;
329 }
330 
331 void EditorView::toggleBookmark(bool checked)
332 {
333  if (KDE_ISUNLIKELY( m_targetTextEdit->currentPos().entry==-1 ))
334  return;
335 
336  m_catalog->setBookmark(m_targetTextEdit->currentPos().entry,checked);
337 }
338 
339 void EditorView::toggleApprovement()
340 {
341  //kWarning()<<"called";
342  if (KDE_ISUNLIKELY( m_targetTextEdit->currentPos().entry==-1 ))
343  return;
344 
345  bool newState=!m_catalog->isApproved(m_targetTextEdit->currentPos().entry);
346  SetStateCmd::push(m_catalog,m_targetTextEdit->currentPos(),newState);
347  emit signalApprovedEntryDisplayed(newState);
348 }
349 
350 void EditorView::setState(TargetState state)
351 {
352  if (KDE_ISUNLIKELY( m_targetTextEdit->currentPos().entry==-1
353  || m_catalog->state(m_targetTextEdit->currentPos())==state))
354  return;
355 
356  SetStateCmd::instantiateAndPush(m_catalog,m_targetTextEdit->currentPos(),state);
357  emit signalApprovedEntryDisplayed(m_catalog->isApproved(m_targetTextEdit->currentPos()));
358 }
359 
360 void EditorView::setEquivTrans(bool equivTrans)
361 {
362  m_catalog->push(new SetEquivTransCmd(m_catalog, m_targetTextEdit->currentPos(), equivTrans));
363 }
364 
365 
366 #include "editorview.moc"
QWidget::layout
QLayout * layout() const
EditorView::selectionInSource
QString selectionInSource() const
Definition: editorview.cpp:310
EditorView::findNextRequested
void findNextRequested()
Settings::leds
static bool leds()
Get Leds.
Definition: prefs_lokalize.h:196
EditorView::gotoEntryRequested
void gotoEntryRequested(const DocPosition &)
DocPosition::part
Part part
Definition: pos.h:49
EditorView::gotoEntry
void gotoEntry(DocPosition pos=DocPosition(), int selection=0)
Definition: editorview.cpp:177
QString::indexOf
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
project.h
QWidget
editorview.h
QTextCursor
QSplitter::insertWidget
void insertWidget(int index, QWidget *widget)
LedsWidget
Definition: editorview.h:123
Catalog::numberOfPluralForms
int numberOfPluralForms() const
Definition: catalog.h:150
SetStateCmd::push
static void push(Catalog *catalog, const DocPosition &pos, bool approved)
Definition: cmd.cpp:182
TAGRANGE_IMAGE_SYMBOL
#define TAGRANGE_IMAGE_SYMBOL
Definition: catalogstring.h:33
DocPosition::Part
Part
Definition: pos.h:40
EditorView::setState
void setState(TargetState)
Definition: editorview.cpp:350
QUndoStack::beginMacro
void beginMacro(const QString &text)
EditorView::setEquivTrans
void setEquivTrans(bool)
Definition: editorview.cpp:360
LedsWidget::lblColumn
QLabel * lblColumn
Definition: editorview.h:138
QMenu::addAction
void addAction(QAction *action)
TranslationUnitTextEdit::currentPos
DocPosition currentPos() const
Definition: xlifftextedit.h:47
QWidget::setVisible
virtual void setVisible(bool visible)
QHBoxLayout
Catalog::push
void push(QUndoCommand *cmd)
Definition: catalog.cpp:155
term
static const QString term
Definition: glossary.cpp:48
QWidget::minimumSizeHint
virtual QSize minimumSizeHint() const
Settings::msgFont
static QFont msgFont()
Get MsgFont.
Definition: prefs_lokalize.h:169
prefs.h
CatalogString::string
QString string
Definition: catalogstring.h:130
cmd.h
EditorView::viewPort
QObject * viewPort()
Definition: editorview.cpp:326
EditorView::toggleApprovement
void toggleApprovement()
Definition: editorview.cpp:339
SetEquivTransCmd
Definition: cmd.h:196
QBoxLayout::addSpacing
void addSpacing(int size)
QContextMenuEvent::globalPos
const QPoint & globalPos() const
QTextCursor::movePosition
bool movePosition(MoveOperation operation, MoveMode mode, int n)
QSplitter::addWidget
void addWidget(QWidget *widget)
DocPosition::offset
uint offset
Definition: pos.h:51
DocPosition::entry
int entry
Definition: pos.h:48
EditorView::signalApprovedEntryDisplayed
void signalApprovedEntryDisplayed(bool)
DocPosition
This struct represents a position in a catalog.
Definition: pos.h:38
QRegExp
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
EditorView::selectionInTarget
QString selectionInTarget() const
Definition: editorview.cpp:304
EditorView::tmLookupRequested
void tmLookupRequested(DocPosition::Part, const QString &)
EditorView::findRequested
void findRequested()
SetStateCmd::instantiateAndPush
static void instantiateAndPush(Catalog *catalog, const DocPosition &pos, TargetState state)
Definition: cmd.cpp:186
EditorView::signalChanged
void signalChanged(uint index)
LedsWidget::ledUntr
KLed * ledUntr
Definition: editorview.h:136
QContextMenuEvent
QWidget::setUpdatesEnabled
void setUpdatesEnabled(bool enable)
QObject
catalog.h
LedsWidget::cursorPositionChanged
void cursorPositionChanged(int column)
Definition: editorview.cpp:90
LedsWidget::ledFuzzy
KLed * ledFuzzy
Definition: editorview.h:135
QWidget::setTabOrder
void setTabOrder(QWidget *first, QWidget *second)
QWidget::setFocusProxy
void setFocusProxy(QWidget *w)
QString::isEmpty
bool isEmpty() const
DocPosition::form
char form
Definition: pos.h:50
QString::startsWith
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const
TranslationUnitTextEdit::cursorToStart
void cursorToStart()
Definition: xlifftextedit.cpp:1306
QTextCursor::isNull
bool isNull() const
QSplitter::refresh
void refresh()
Catalog::isPlural
bool isPlural(uint index) const
Definition: catalog.cpp:405
Settings::setLeds
static void setLeds(bool v)
Set Leds.
Definition: prefs_lokalize.h:186
QLabel::setText
void setText(const QString &)
SettingsController::dirty
bool dirty
Definition: prefs.h:44
QString
QWidget::hide
void hide()
QMenu::exec
QAction * exec()
EditorView::~EditorView
virtual ~EditorView()
Definition: editorview.cpp:144
QMenu
LedsWidget::LedsWidget
LedsWidget(QWidget *parent)
Definition: editorview.cpp:63
SettingsController::instance
static SettingsController * instance()
Definition: prefs.cpp:70
TranslationUnitTextEdit::showPos
CatalogString showPos(DocPosition pos, const CatalogString &refStr=CatalogString(), bool keepCursor=true)
makes MsgEdit reflect current entry
Definition: xlifftextedit.cpp:237
CatalogString
data structure used to pass info about inline elements a XLIFF tag is represented by a TAGRANGE_IMAGE...
Definition: catalogstring.h:128
xlifftextedit.h
EditorView::EditorView
EditorView(QWidget *, Catalog *)
Definition: editorview.cpp:97
QSplitter
TranslationUnitTextEdit
Definition: xlifftextedit.h:37
prefs_lokalize.h
QWidget::setMaximumHeight
void setMaximumHeight(int maxh)
QBoxLayout::addStretch
void addStretch(int stretch)
QUndoStack::endMacro
void endMacro()
DocPosition::Source
Definition: pos.h:43
Catalog::isApproved
bool isApproved(uint index) const
Definition: catalog.cpp:410
QTextCursor::deleteChar
void deleteChar()
Catalog
This class represents a catalog It uses CatalogStorage interface to work with catalogs in different f...
Definition: catalog.h:74
Catalog::state
TargetState state(const DocPosition &pos) const
Definition: catalog.cpp:421
EditorView::binaryUnitSelectRequested
void binaryUnitSelectRequested(const QString &id)
QTextCursor::atEnd
bool atEnd() const
Catalog::setBookmark
void setBookmark(uint, bool)
Definition: catalog.cpp:984
EditorView::setProperFocus
void setProperFocus()
Definition: editorview.cpp:316
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
EditorView::m_modifiedAfterFind
bool m_modifiedAfterFind
Definition: editorview.h:90
QLabel
TargetState
TargetState
Definition: state.h:30
EditorView::replaceRequested
void replaceRequested()
InlineTag
data structure used to pass info about inline elements a XLIFF tag is represented by a TAGRANGE_IMAGE...
Definition: catalogstring.h:44
QWidget::height
int height() const
EditorView::doExplicitCompletion
void doExplicitCompletion()
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:40:07 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

lokalize

Skip menu "lokalize"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • umbrello
  •   umbrello

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