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

okteta

  • sources
  • kde-4.12
  • kdesdk
  • okteta
  • gui
bytearraytablecursor.cpp
Go to the documentation of this file.
1 /*
2  This file is part of the Okteta Gui library, made within the KDE community.
3 
4  Copyright 2003,2008-2009 Friedrich W. H. Kossebau <kossebau@kde.org>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation; either
9  version 2.1 of the License, or (at your option) version 3, or any
10  later version accepted by the membership of KDE e.V. (or its
11  successor approved by the membership of KDE e.V.), which shall
12  act as a proxy defined in Section 6 of version 3 of the license.
13 
14  This library is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  Lesser General Public License for more details.
18 
19  You should have received a copy of the GNU Lesser General Public
20  License along with this library. If not, see <http://www.gnu.org/licenses/>.
21 */
22 
23 #include "bytearraytablecursor.h"
24 
25 // lib
26 #include "bytearraytablelayout.h"
27 // Okteta core
28 #include <arraychangemetricslist.h>
29 
30 
31 namespace Okteta
32 {
33 
34 ByteArrayTableCursor::ByteArrayTableCursor( const ByteArrayTableLayout* layout )
35  : mLayout( layout ),
36  mIndex( layout->byteArrayOffset() ),
37  mCoord( layout->startCoord() ),
38  mBehind( false ),
39  mAppendPosEnabled( false )
40 {
41 }
42 
43 void ByteArrayTableCursor::setAppendPosEnabled( bool appendPosEnabled )
44 {
45  if( mAppendPosEnabled == appendPosEnabled )
46  return;
47 
48  mAppendPosEnabled = appendPosEnabled;
49  // reposition Cursor
50  if( realIndex() > mLayout->lastByteArrayOffset()
51  && mCoord.pos() < mLayout->noOfBytesPerLine()-1
52  && mLayout->length() > 0 )
53  {
54  if( mAppendPosEnabled )
55  {
56  ++mIndex;
57  mCoord.goRight();
58  mBehind = false;
59  }
60  else
61  {
62  --mIndex;
63  mCoord.goLeft();
64  mBehind = true;
65  }
66  }
67 }
68 
69 
70 void ByteArrayTableCursor::gotoPreviousByte()
71 {
72  if( mBehind )
73  mBehind = false;
74  else if( mIndex > mLayout->byteArrayOffset() )
75  {
76  --mIndex;
77  mCoord.goCLeft( mLayout->noOfBytesPerLine()-1 );
78  }
79 }
80 
81 
82 void ByteArrayTableCursor::gotoPreviousByte( Size indexSteps )
83 {
84  if( mBehind )
85  {
86  --indexSteps;
87  mBehind = false;
88  }
89  const Address newIndex = mIndex - indexSteps;
90  // would step before first position?
91  const Address firstIndex = mLayout->byteArrayOffset();
92  if( newIndex < firstIndex )
93  {
94  if( mIndex > firstIndex )
95  gotoStart();
96  }
97  else
98  gotoIndex( newIndex );
99 }
100 
101 
102 void ByteArrayTableCursor::gotoNextByte()
103 {
104  const Address lastIndex = mLayout->lastByteArrayOffset();
105 
106  if( mIndex < lastIndex )
107  {
108  ++mIndex;
109  mCoord.goCRight( mLayout->noOfBytesPerLine()-1 );
110  mBehind = false;
111  }
112  else if( mIndex == lastIndex )
113  stepToEnd();
114 }
115 
116 
117 void ByteArrayTableCursor::gotoNextByte( Size indexSteps ) // TODO: think about consistency with gotoNextByte!!!
118 {
119  if( mBehind )
120  {
121  ++indexSteps;
122  mBehind = false;
123  }
124  const Address newIndex = mIndex + indexSteps;
125  // would step behind the end?
126  if( newIndex > mLayout->lastByteArrayOffset() )
127  gotoEnd();
128  else
129  gotoIndex( newIndex );
130 }
131 
132 
133 void ByteArrayTableCursor::gotoUp()
134 {
135  // can we even go up?
136  if( mCoord.isBelow(mLayout->startLine()) )
137  {
138  mCoord.goUp();
139  if( mCoord.isPriorInLineThan(mLayout->startCoord()) )
140  {
141  mIndex = mLayout->byteArrayOffset();
142  mCoord.setPos( mLayout->firstStartLinePosition() );
143  mBehind = false;
144  }
145  else
146  {
147  mIndex -= mLayout->noOfBytesPerLine();
148  if( mBehind && !atLineEnd() )
149  {
150  ++mIndex;
151  mCoord.goRight();
152  mBehind = false;
153  }
154  }
155  }
156 }
157 
158 
159 void ByteArrayTableCursor::gotoDown()
160 {
161  if( mCoord.isAbove(mLayout->finalLine()) )
162  {
163  mCoord.goDown();
164  // behind End?
165  if( mCoord.isLaterInLineThan(mLayout->finalCoord()) )
166  gotoEnd();
167  else
168  mIndex += mLayout->noOfBytesPerLine();
169  }
170 }
171 
172 
173 void ByteArrayTableCursor::gotoLineStart()
174 {
175  const Address oldIndex = mIndex;
176  mIndex = mLayout->indexAtFirstLinePosition( mCoord.line() );
177  mCoord.goLeft( oldIndex-mIndex );
178  mBehind = false;
179 }
180 
181 
182 void ByteArrayTableCursor::gotoLineEnd()
183 {
184  if( mIndex <= mLayout->lastByteArrayOffset() )
185  {
186  const Address oldIndex = mIndex;
187  mIndex = mLayout->indexAtLastLinePosition( mCoord.line() );
188  mCoord.goRight( mIndex-oldIndex );
189 
190  stepToEnd();
191  }
192 }
193 
194 
195 void ByteArrayTableCursor::gotoStart()
196 {
197  mIndex = mLayout->byteArrayOffset();
198  mCoord = mLayout->startCoord();
199  mBehind = false;
200 }
201 
202 
203 void ByteArrayTableCursor::gotoEnd()
204 {
205  const Address lastIndex = mLayout->lastByteArrayOffset();
206  if( lastIndex >= 0 )
207  {
208  mIndex = lastIndex;
209  mCoord = mLayout->finalCoord();
210 
211  stepToEnd();
212  }
213  else
214  gotoStart();
215 }
216 
217 
218 void ByteArrayTableCursor::gotoCIndex( Address index )
219 {
220  if( mLayout->length() > 0 )
221  {
222  mIndex = mLayout->correctIndex( index );
223  mCoord = mLayout->coordOfIndex( mIndex );
224  mBehind = ( index > mIndex );
225  }
226  else
227  gotoStart();
228 }
229 
230 
231 void ByteArrayTableCursor::gotoCCoord( const Coord& coord )
232 {
233  if( mLayout->length() > 0 )
234  {
235  mCoord = mLayout->correctCoord( coord );
236  mIndex = mLayout->indexAtCoord( mCoord );
237  if( coord > mCoord )
238  stepToEnd();
239  else
240  mBehind = false;
241  }
242  else
243  gotoStart();
244 }
245 
246 
247 void ByteArrayTableCursor::stepToEnd()
248 {
249  if( mAppendPosEnabled && (mCoord.pos() < mLayout->noOfBytesPerLine()-1) )
250  {
251  ++mIndex;
252  mCoord.goRight();
253  mBehind = false;
254  }
255  else
256  mBehind = true;
257 }
258 
259 
260 void ByteArrayTableCursor::gotoIndex( Address index )
261 {
262  mIndex = index;
263  mCoord = mLayout->coordOfIndex( mIndex );
264  mBehind = false;
265 }
266 
267 
268 void ByteArrayTableCursor::gotoRealIndex()
269 {
270  if( mBehind
271  && (mAppendPosEnabled || ( mIndex < mLayout->lastByteArrayOffset() )) )
272  {
273  ++mIndex;
274  mCoord.goCRight( mLayout->noOfBytesPerLine()-1 );
275  mBehind = false;
276  }
277 }
278 
279 
280 void ByteArrayTableCursor::gotoCoord( const Coord& coord )
281 {
282  mIndex = mLayout->indexAtCoord( coord );
283  mCoord = coord;
284  mBehind = false;
285 }
286 
287 
288 void ByteArrayTableCursor::updateCoord()
289 {
290  mCoord = mLayout->coordOfIndex( mIndex );
291 }
292 
293 // page down should be: one page minus one line
294 // -> if in the very first line page down will put the cursor on the same page into the last line
295 void ByteArrayTableCursor::gotoPageUp()
296 {
297  const LineSize noOfLinesPerPage = mLayout->noOfLinesPerPage();
298  const Address newIndex = mIndex - noOfLinesPerPage * mLayout->noOfBytesPerLine();
299  if( newIndex >= mLayout->byteArrayOffset() )
300  {
301  mIndex = newIndex;
302  mCoord.goUp( noOfLinesPerPage );
303  if( mBehind && !atLineEnd() )
304  {
305  ++mIndex;
306  mCoord.goRight();
307  mBehind = false;
308  }
309  }
310  else
311  gotoStart();
312 }
313 
314 
315 void ByteArrayTableCursor::gotoPageDown()
316 {
317  const LineSize noOfLinesPerPage = mLayout->noOfLinesPerPage();
318  const Address newIndex = mIndex + noOfLinesPerPage * mLayout->noOfBytesPerLine();
319  if( newIndex <= mLayout->lastByteArrayOffset() )
320  {
321  mIndex = newIndex;
322  mCoord.goDown( noOfLinesPerPage );
323  }
324  else
325  gotoEnd();
326 }
327 
328 
329 Address ByteArrayTableCursor::validIndex() const
330 {
331  return ( mLayout->byteArrayOffset() <= mIndex && mIndex <= mLayout->lastByteArrayOffset() ) ? mIndex : -1;
332 }
333 
334 Address ByteArrayTableCursor::indexAtLineStart() const { return mLayout->indexAtFirstLinePosition( mCoord.line() ); }
335 Address ByteArrayTableCursor::indexAtLineEnd() const { return mLayout->indexAtLastLinePosition( mCoord.line() ); }
336 
337 
338 bool ByteArrayTableCursor::atStart() const { return mIndex == mLayout->byteArrayOffset(); }
339 bool ByteArrayTableCursor::atEnd() const { return realIndex() == mLayout->lastByteArrayOffset()+1; }
340 bool ByteArrayTableCursor::atAppendPos() const { return mIndex == mLayout->lastByteArrayOffset()+1; }
341 
342 
343 bool ByteArrayTableCursor::atLineStart() const { return mLayout->atFirstLinePosition( mCoord ); }
344 bool ByteArrayTableCursor::atLineEnd() const { return mLayout->atLastLinePosition( mCoord ); }
345 
346 // TODO: oldLength is a hack, as DataLayout is already updated and used by e.g. gotoCIndex
347 void ByteArrayTableCursor::adaptToChanges( const ArrayChangeMetricsList& changeList, Size oldLength )
348 {
349  foreach( const ArrayChangeMetrics& change, changeList )
350  {
351  // cursor affected?
352  if( mIndex >= change.offset() )
353  {
354  switch( change.type() )
355  {
356  case ArrayChangeMetrics::Replacement:
357  oldLength += change.lengthChange();
358  if( oldLength > 0 )
359  {
360  const Address newIndex =
361  // cursor behind the removed section?
362  ( mIndex >= change.offset()+change.removeLength() ) ? mIndex + change.lengthChange() :
363  // cursor at substituted section?
364  ( mIndex < change.offset()+change.insertLength() ) ? mIndex :
365  // cursor at unsubstituted section
366  change.offset() + change.insertLength();
367 
368  // if the cursor gets behind, it will never get inside again.
369  if( newIndex >= oldLength )
370  {
371  gotoEnd();
372  return;
373  }
374  mIndex = newIndex;
375  }
376  // if the cursor gets at the start, it will stay there
377  else
378  {
379  gotoStart();
380  return;
381  }
382  break;
383  case ArrayChangeMetrics::Swapping:
384  if( mIndex < change.secondStart() )
385  {
386  mIndex += change.secondLength();
387  }
388  else if( mIndex <= change.secondEnd() )
389  {
390  mIndex -= change.firstLength();
391  }
392  break;
393  default:
394  ;
395  }
396  }
397  }
398 
399  const bool wasBehind = ( mIndex >= oldLength );
400  if( wasBehind )
401  mIndex = oldLength - 1;
402  updateCoord();
403  if( wasBehind )
404  stepToEnd();
405 }
406 
407 ByteArrayTableCursor::~ByteArrayTableCursor() {}
408 
409 }
Okteta::ByteArrayTableLayout::indexAtLastLinePosition
Address indexAtLastLinePosition(Line line) const
calculates the index of last pos in line.
Definition: bytearraytablelayout.cpp:207
Okteta::ByteArrayTableLayout::correctIndex
Address correctIndex(Address index) const
returns the index if valid or the nearest valid index
Definition: bytearraytablelayout.cpp:237
Okteta::ByteArrayTableCursor::gotoRealIndex
void gotoRealIndex()
sets the index to the real index, i.e.
Definition: bytearraytablecursor.cpp:268
Okteta::Address
qint32 Address
Definition: address.h:34
Okteta::ByteArrayTableCursor::index
Address index() const
the index that is drawn at the actual coord
Definition: bytearraytablecursor.h:170
Okteta::Coord::isAbove
bool isAbove(Line line) const
Definition: coord.h:299
Okteta::ByteArrayTableLayout::noOfBytesPerLine
Size noOfBytesPerLine() const
returns number of bytes per line
Definition: bytearraytablelayout.h:209
Okteta::ArrayChangeMetrics::type
int type() const
Definition: arraychangemetrics.h:140
Okteta::ByteArrayTableCursor::gotoLineEnd
void gotoLineEnd()
Definition: bytearraytablecursor.cpp:182
Okteta::ArrayChangeMetrics::Replacement
Definition: arraychangemetrics.h:47
Okteta::Coord::isPriorInLineThan
bool isPriorInLineThan(const Coord &other) const
tests if the coord is prior in the same line than the given coord.
Definition: coord.h:288
Okteta::ByteArrayTableLayout::atLastLinePosition
bool atLastLinePosition(const Coord &coord) const
returns true if the coord is the last in it's line.
Definition: bytearraytablelayout.cpp:260
Okteta::ByteArrayTableCursor::appendPosEnabled
bool appendPosEnabled() const
Default is false.
Definition: bytearraytablecursor.h:176
Okteta::ArrayChangeMetrics::offset
Address offset() const
Definition: arraychangemetrics.h:141
Okteta::ArrayChangeMetrics::Swapping
Definition: arraychangemetrics.h:47
Okteta::ByteArrayTableCursor::stepToEnd
void stepToEnd()
if newpos allowed steps at a coord behind the last existing or, if that is at a line end...
Definition: bytearraytablecursor.cpp:247
Okteta::Coord
a class which represents a coord in a 2-dim.
Definition: coord.h:47
Okteta::ByteArrayTableLayout::finalCoord
Coord finalCoord() const
returns the coord of the end
Definition: bytearraytablelayout.h:214
Okteta::ByteArrayTableLayout::noOfLinesPerPage
LineSize noOfLinesPerPage() const
returns number of lines per visual page
Definition: bytearraytablelayout.h:220
Okteta::ByteArrayTableCursor::updateCoord
void updateCoord()
Definition: bytearraytablecursor.cpp:288
Okteta::ByteArrayTableCursor::gotoPreviousByte
void gotoPreviousByte()
Definition: bytearraytablecursor.cpp:70
Okteta::ByteArrayTableLayout::correctCoord
Coord correctCoord(const Coord &coord) const
returns the coord if valid or the nearest valid coord
Definition: bytearraytablelayout.cpp:245
Okteta::Coord::goUp
void goUp()
moves the coord 1 lines upwards.
Definition: coord.h:276
bytearraytablelayout.h
Okteta::ByteArrayTableLayout
the logical layout of a byte array table for a view
Definition: bytearraytablelayout.h:61
Okteta::ByteArrayTableCursor::gotoIndex
void gotoIndex(Address index)
Definition: bytearraytablecursor.cpp:260
Okteta::ByteArrayTableCursor::gotoNextByte
void gotoNextByte()
Definition: bytearraytablecursor.cpp:102
Okteta::ByteArrayTableCursor::gotoPageDown
void gotoPageDown()
Definition: bytearraytablecursor.cpp:315
Okteta::ByteArrayTableCursor::gotoUp
void gotoUp()
Definition: bytearraytablecursor.cpp:133
Okteta::ByteArrayTableLayout::startLine
Line startLine() const
Definition: bytearraytablelayout.h:218
Okteta::Coord::setPos
void setPos(LinePosition pos)
sets the position
Definition: coord.h:228
Okteta::Coord::goLeft
void goLeft()
moves the coord one position to the left.
Definition: coord.h:247
Okteta::ByteArrayTableLayout::coordOfIndex
Coord coordOfIndex(Address index) const
calculates the coord in which index is found.
Definition: bytearraytablelayout.cpp:223
Okteta::ArrayChangeMetrics::secondEnd
Address secondEnd() const
Definition: arraychangemetrics.h:146
Okteta::ByteArrayTableCursor::gotoDown
void gotoDown()
Definition: bytearraytablecursor.cpp:159
Okteta::ByteArrayTableCursor::setAppendPosEnabled
void setAppendPosEnabled(bool appendPosEnabled=true)
Definition: bytearraytablecursor.cpp:43
Okteta::ByteArrayTableCursor::validIndex
Address validIndex() const
returns the true index if it is valid index that is it is inside the data's range.
Definition: bytearraytablecursor.cpp:329
Okteta::ArrayChangeMetricsList
Definition: arraychangemetricslist.h:36
Okteta::ByteArrayTableCursor::atStart
bool atStart() const
Definition: bytearraytablecursor.cpp:338
Okteta::Coord::goCRight
void goCRight(LinePosition maxPos)
moves the coord one position to the right, or if the position has already reached or passed maxPos to...
Definition: coord.h:231
Okteta::Coord::isBelow
bool isBelow(Line line) const
Definition: coord.h:298
Okteta::Coord::pos
LinePosition pos() const
Definition: coord.h:213
Okteta::ByteArrayTableLayout::finalLine
Line finalLine() const
Definition: bytearraytablelayout.h:219
Okteta::ByteArrayTableCursor::indexAtLineEnd
Address indexAtLineEnd() const
returns the index at the end of the cursor's line
Definition: bytearraytablecursor.cpp:335
Okteta::ByteArrayTableLayout::lastByteArrayOffset
Address lastByteArrayOffset() const
Definition: bytearraytablelayout.h:212
Okteta::ByteArrayTableCursor::gotoCIndex
void gotoCIndex(Address index)
Definition: bytearraytablecursor.cpp:218
Okteta::ArrayChangeMetrics::secondStart
Address secondStart() const
Definition: arraychangemetrics.h:145
arraychangemetricslist.h
Okteta::ByteArrayTableCursor::~ByteArrayTableCursor
~ByteArrayTableCursor()
Definition: bytearraytablecursor.cpp:407
Okteta::ByteArrayTableCursor::gotoLineStart
void gotoLineStart()
Definition: bytearraytablecursor.cpp:173
Okteta::Coord::goCLeft
void goCLeft(LinePosition maxPos)
moves the coord one position to the left, or if the position is already at the line start to the give...
Definition: coord.h:238
Okteta::ByteArrayTableCursor::coord
Coord coord() const
the actual coord
Definition: bytearraytablecursor.h:173
Okteta::ByteArrayTableCursor::gotoCCoord
void gotoCCoord(const Coord &coord)
Definition: bytearraytablecursor.cpp:231
Okteta::ByteArrayTableLayout::indexAtCoord
Address indexAtCoord(const Coord &coord) const
calculates the index of coord.
Definition: bytearraytablelayout.cpp:213
Okteta::ArrayChangeMetrics::removeLength
Size removeLength() const
Definition: arraychangemetrics.h:142
Okteta::ArrayChangeMetrics::secondLength
Size secondLength() const
Definition: arraychangemetrics.h:148
Okteta::ByteArrayTableCursor::atEnd
bool atEnd() const
Definition: bytearraytablecursor.cpp:339
Okteta::ByteArrayTableCursor::gotoCoord
void gotoCoord(const Coord &coord)
Definition: bytearraytablecursor.cpp:280
Okteta::Coord::line
Line line() const
Definition: coord.h:214
Okteta::ByteArrayTableLayout::firstStartLinePosition
LinePosition firstStartLinePosition() const
Definition: bytearraytablelayout.h:216
Okteta::ByteArrayTableCursor::realIndex
Address realIndex() const
returns the real index.
Definition: bytearraytablecursor.h:175
Okteta::Coord::goRight
void goRight()
moves the coord one position to the right.
Definition: coord.h:246
Okteta::ByteArrayTableLayout::indexAtFirstLinePosition
Address indexAtFirstLinePosition(Line line) const
calculates the index of the first pos in line.
Definition: bytearraytablelayout.cpp:201
Okteta::ByteArrayTableLayout::byteArrayOffset
Address byteArrayOffset() const
returns the offset of the start of the displayed byte array section
Definition: bytearraytablelayout.h:210
Okteta::ByteArrayTableCursor::ByteArrayTableCursor
ByteArrayTableCursor(const ByteArrayTableLayout *layout)
Definition: bytearraytablecursor.cpp:34
Okteta::ArrayChangeMetrics
Definition: arraychangemetrics.h:38
Okteta::ByteArrayTableCursor::gotoStart
void gotoStart()
Definition: bytearraytablecursor.cpp:195
Okteta::ArrayChangeMetrics::insertLength
Size insertLength() const
Definition: arraychangemetrics.h:143
Okteta::ByteArrayTableLayout::atFirstLinePosition
bool atFirstLinePosition(const Coord &coord) const
returns true if the coord is the first in it's line.
Definition: bytearraytablelayout.cpp:254
Okteta::Size
qint32 Size
Definition: size.h:33
Okteta::ArrayChangeMetrics::lengthChange
Size lengthChange() const
Definition: arraychangemetrics.h:144
Okteta::ByteArrayTableLayout::startCoord
Coord startCoord() const
returns the coord of the start
Definition: bytearraytablelayout.h:215
Okteta::ByteArrayTableCursor::indexAtLineStart
Address indexAtLineStart() const
returns the index at the start of the cursor's line
Definition: bytearraytablecursor.cpp:334
Okteta::ArrayChangeMetrics::firstLength
Size firstLength() const
Definition: arraychangemetrics.h:147
Okteta::ByteArrayTableCursor::atLineStart
bool atLineStart() const
Definition: bytearraytablecursor.cpp:343
Okteta::ByteArrayTableCursor::atLineEnd
bool atLineEnd() const
Definition: bytearraytablecursor.cpp:344
Okteta::Coord::goDown
void goDown()
moves the coord lines lines downwards.
Definition: coord.h:277
Okteta::ByteArrayTableCursor::atAppendPos
bool atAppendPos() const
could only be true in InsertMode: Cursor is behind the last byte
Definition: bytearraytablecursor.cpp:340
bytearraytablecursor.h
Okteta::LineSize
qint32 LineSize
Definition: line.h:34
Okteta::ByteArrayTableCursor::gotoEnd
void gotoEnd()
sets the index behind the last index.
Definition: bytearraytablecursor.cpp:203
Okteta::Coord::isLaterInLineThan
bool isLaterInLineThan(const Coord &other) const
tests if the coord is later in the same line than the given coord.
Definition: coord.h:293
Okteta::ByteArrayTableLayout::length
Size length() const
returns the length of the displayed byte array section
Definition: bytearraytablelayout.h:211
Okteta::ByteArrayTableCursor::adaptToChanges
void adaptToChanges(const ArrayChangeMetricsList &changeList, Size oldLength)
Definition: bytearraytablecursor.cpp:347
Okteta::ByteArrayTableCursor::gotoPageUp
void gotoPageUp()
Definition: bytearraytablecursor.cpp:295
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:07 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okteta

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

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • okteta
  • 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