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

kstars

  • sources
  • kde-4.12
  • kdeedu
  • kstars
  • kstars
kstars.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  kstars.cpp - K Desktop Planetarium
3  -------------------
4  begin : Mon Feb 5 01:11:45 PST 2001
5  copyright : (C) 2001 by Jason Harris
6  email : jharris@30doradus.org
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "kstars.h"
19 
20 #include <QApplication>
21 #include <QDockWidget>
22 
23 #include <KGlobal>
24 #include <KLocale>
25 #include <kdebug.h>
26 #include <kactioncollection.h>
27 #include <kstatusbar.h>
28 #include <ktoolbar.h>
29 #include <kicon.h>
30 
31 #include "Options.h"
32 #include "kstarsdata.h"
33 #include "kstarssplash.h"
34 #include "kactionmenu.h"
35 #include "skymap.h"
36 #include "simclock.h"
37 #include "fov.h"
38 #include "dialogs/finddialog.h"
39 #include "dialogs/exportimagedialog.h"
40 #include "observinglist.h"
41 #include "oal/execute.h"
42 #include "whatsinteresting/wiview.h"
43 
44 #include "kstarsadaptor.h"
45 
46 #include <config-kstars.h>
47 
48 #ifdef HAVE_INDI_H
49 //#include "indi/indimenu.h"
50 //#include "indi/indidriver.h"
51 //#include "indi/imagesequence.h"
52 #include "indi/drivermanager.h"
53 #endif
54 
55 KStars *KStars::pinstance = 0;
56 
57 KStars::KStars( bool doSplash, bool clockrun, const QString &startdate )
58  : KXmlGuiWindow(), kstarsData(0), skymap(0), TimeStep(0),
59  colorActionMenu(0), fovActionMenu(0), findDialog(0),
60  imgExportDialog(0), imageExporter(0), obsList(0), execute(0),
61  avt(0), wut(0), wi(0), wiObsConditions(0), wiDock(0), skycal(0),
62  sb(0), pv(0), jmt(0), mpt(0), fm(0), astrocalc(0), printingWizard(0),
63  ekosmenu(0), DialogIsObsolete(false), StartClockRunning( clockrun ),
64  StartDateString( startdate )
65 {
66  new KstarsAdaptor(this);
67  QDBusConnection::sessionBus().registerObject("/KStars", this);
68  QDBusConnection::sessionBus().registerService("org.kde.kstars");
69 
70  // Set pinstance to yourself
71  pinstance = this;
72 
73  connect( qApp, SIGNAL( aboutToQuit() ), this, SLOT( slotAboutToQuit() ) );
74 
75  //Initialize QActionGroups
76  projectionGroup = new QActionGroup( this );
77  cschemeGroup = new QActionGroup( this );
78 
79  kstarsData = KStarsData::Create();
80  Q_ASSERT( kstarsData );
81  //Set Geographic Location from Options
82  kstarsData->setLocationFromOptions();
83 
84  //Initialize Time and Date
85  KStarsDateTime startDate = KStarsDateTime::fromString( StartDateString );
86  if ( ! StartDateString.isEmpty() && startDate.isValid() )
87  data()->changeDateTime( data()->geo()->LTtoUT( startDate ) );
88  else
89  data()->changeDateTime( KStarsDateTime::currentUtcDateTime() );
90 
91  // Initialize clock. If --paused is not in the comand line, look in options
92  if ( clockrun )
93  StartClockRunning = Options::runClock();
94 
95  // Setup splash screen
96  KStarsSplash *splash = 0;
97  if ( doSplash ) {
98  splash = new KStarsSplash(0);
99  connect( kstarsData, SIGNAL( progressText(QString) ), splash, SLOT( setMessage(QString) ));
100  splash->show();
101  } else {
102  connect( kstarsData, SIGNAL( progressText(QString) ), kstarsData, SLOT( slotConsoleMessage(QString) ) );
103  }
104 
105  //set up Dark color scheme for application windows
106  DarkPalette = QPalette(QColor("darkred"), QColor("darkred"));
107  DarkPalette.setColor( QPalette::Normal, QPalette::Base, QColor( "black" ) );
108  DarkPalette.setColor( QPalette::Normal, QPalette::Text, QColor( 238, 0, 0 ) );
109  DarkPalette.setColor( QPalette::Normal, QPalette::Highlight, QColor( 238, 0, 0 ) );
110  DarkPalette.setColor( QPalette::Normal, QPalette::HighlightedText, QColor( "black" ) );
111  DarkPalette.setColor( QPalette::Inactive, QPalette::Text, QColor( 238, 0, 0 ) );
112  DarkPalette.setColor( QPalette::Inactive, QPalette::Base, QColor( 30, 10, 10 ) );
113  //store original color scheme
114  OriginalPalette = QApplication::palette();
115 
116  //Initialize data. When initialization is complete, it will run dataInitFinished()
117  if( !kstarsData->initialize() )
118  return;
119  delete splash;
120  datainitFinished();
121 
122 #if ( __GLIBC__ >= 2 &&__GLIBC_MINOR__ >= 1 && !defined(__UCLIBC__) )
123  kDebug() << "glibc >= 2.1 detected. Using GNU extension sincos()";
124 #else
125  kDebug() << "Did not find glibc >= 2.1. Will use ANSI-compliant sin()/cos() functions.";
126 #endif
127 }
128 
129 KStars *KStars::createInstance( bool doSplash, bool clockrun, const QString &startdate ) {
130  delete pinstance;
131  // pinstance is set directly in constructor.
132  new KStars( doSplash, clockrun, startdate );
133  Q_ASSERT( pinstance && "pinstance must be non NULL");
134  return pinstance;
135 }
136 
137 KStars::~KStars()
138 {
139  Q_ASSERT( pinstance );
140 
141  #ifdef HAVE_INDI_H
142  DriverManager::Instance()->clearServers();
143  #endif
144 
145  delete kstarsData;
146  pinstance = 0;
147 
148  QSqlDatabase::removeDatabase("userdb");
149  QSqlDatabase::removeDatabase("skydb");
150 }
151 
152 void KStars::clearCachedFindDialog() {
153  if ( findDialog ) { // dialog is cached
155  if ( findDialog->isHidden() ) {
156  delete findDialog;
157  findDialog = 0;
158  DialogIsObsolete = false;
159  }
160  else
161  DialogIsObsolete = true; // dialog was opened so it could not deleted
162  }
163 }
164 
165 void KStars::applyConfig( bool doApplyFocus ) {
166  if ( Options::isTracking() ) {
167  actionCollection()->action("track_object")->setText( i18n( "Stop &Tracking" ) );
168  actionCollection()->action("track_object")->setIcon( KIcon("document-encrypt") );
169  }
170 
171  actionCollection()->action("coordsys")->setText(
172  Options::useAltAz() ? i18n("Switch to star globe view (Equatorial &Coordinates)"): i18n("Switch to horizonal view (Horizontal &Coordinates)") );
173 
174  #ifdef HAVE_OPENGL
175  Q_ASSERT( SkyMap::Instance() ); // This assert should not fail, because SkyMap is already created by now. Just throwing it in anyway.
176  actionCollection()->action("opengl")->setText( (Options::useGL() ? i18n("Switch to QPainter backend"): i18n("Switch to OpenGL backend")) );
177  #endif
178 
179 
180  actionCollection()->action("show_time_box" )->setChecked( Options::showTimeBox() );
181  actionCollection()->action("show_location_box" )->setChecked( Options::showGeoBox() );
182  actionCollection()->action("show_focus_box" )->setChecked( Options::showFocusBox() );
183  actionCollection()->action("show_statusBar" )->setChecked( Options::showStatusBar() );
184  actionCollection()->action("show_sbAzAlt" )->setChecked( Options::showAltAzField() );
185  actionCollection()->action("show_sbRADec" )->setChecked( Options::showRADecField() );
186  actionCollection()->action("show_stars" )->setChecked( Options::showStars() );
187  actionCollection()->action("show_deepsky" )->setChecked( Options::showDeepSky() );
188  actionCollection()->action("show_planets" )->setChecked( Options::showSolarSystem() );
189  actionCollection()->action("show_clines" )->setChecked( Options::showCLines() );
190  actionCollection()->action("show_cnames" )->setChecked( Options::showCNames() );
191  actionCollection()->action("show_cbounds" )->setChecked( Options::showCBounds() );
192  actionCollection()->action("show_mw" )->setChecked( Options::showMilkyWay() );
193  actionCollection()->action("show_equatorial_grid" )->setChecked( Options::showEquatorialGrid() );
194  actionCollection()->action("show_horizontal_grid" )->setChecked( Options::showHorizontalGrid() );
195  actionCollection()->action("show_horizon" )->setChecked( Options::showGround() );
196  actionCollection()->action("show_flags" )->setChecked( Options::showFlags() );
197  actionCollection()->action("show_supernovae" )->setChecked( Options::showSupernovae() );
198  statusBar()->setVisible( Options::showStatusBar() );
199 
200  //color scheme
201  kstarsData->colorScheme()->loadFromConfig();
202  QApplication::setPalette( Options::darkAppColors() ? DarkPalette : OriginalPalette );
203 
204  //Set toolbar options from config file
205  toolBar("kstarsToolBar")->applySettings( KGlobal::config()->group( "MainToolBar" ) );
206  toolBar( "viewToolBar" )->applySettings( KGlobal::config()->group( "ViewToolBar" ) );
207 
208  //Geographic location
209  data()->setLocationFromOptions();
210 
211  //Focus
212  if ( doApplyFocus ) {
213  SkyObject *fo = data()->objectNamed( Options::focusObject() );
214  if ( fo && fo != map()->focusObject() ) {
215  map()->setClickedObject( fo );
216  map()->setClickedPoint( fo );
217  map()->slotCenter();
218  }
219 
220  if ( ! fo ) {
221  SkyPoint fp( Options::focusRA(), Options::focusDec() );
222  if ( fp.ra().Degrees() != map()->focus()->ra().Degrees() || fp.dec().Degrees() != map()->focus()->dec().Degrees() ) {
223  map()->setClickedPoint( &fp );
224  map()->slotCenter();
225  }
226  }
227  }
228 }
229 
230 void KStars::showImgExportDialog() {
231  if(imgExportDialog)
232  imgExportDialog->show();
233 }
234 
235 void KStars::syncFOVActions() {
236  foreach(QAction *action, fovActionMenu->menu()->actions()) {
237  if(action->text().isEmpty()) {
238  continue;
239  }
240 
241  if(Options::fOVNames().contains(action->text().remove(0, 1))) {
242  action->setChecked(true);
243  } else {
244  action->setChecked(false);
245  }
246  }
247 }
248 
249 void KStars::hideAllFovExceptFirst()
250 {
251  // When there is only one visible FOV symbol, we don't need to do anything
252  // Also, don't do anything if there are no available FOV symbols.
253  if(data()->visibleFOVs.size() == 1 ||
254  data()->availFOVs.size() == 0) {
255  return;
256  } else {
257  // If there are no visible FOVs, select first available
258  if(data()->visibleFOVs.size() == 0) {
259  Q_ASSERT( !data()->availFOVs.isEmpty() );
260  Options::setFOVNames(QStringList(data()->availFOVs.first()->name()));
261  } else {
262  Options::setFOVNames(QStringList(data()->visibleFOVs.first()->name()));
263  }
264 
265  // Sync FOV and update skymap
266  data()->syncFOV();
267  syncFOVActions();
268  map()->update(); // SkyMap::forceUpdate() is not required, as FOVs are drawn as overlays
269  }
270 }
271 
272 void KStars::selectNextFov()
273 {
274 
275  if( data()->getVisibleFOVs().isEmpty() )
276  return;
277 
278  Q_ASSERT( ! data()->getAvailableFOVs().isEmpty() ); // The available FOVs had better not be empty if the visible ones are not.
279 
280  FOV *currentFov = data()->getVisibleFOVs().first();
281  int currentIdx = data()->availFOVs.indexOf(currentFov);
282 
283  // If current FOV is not the available FOV list or there is only 1 FOV available, then return
284  if(currentIdx == -1 || data()->availFOVs.size() < 2) {
285  return;
286  }
287 
288  QStringList nextFovName;
289  if(currentIdx == data()->availFOVs.size() - 1) {
290  nextFovName << data()->availFOVs.first()->name();
291  } else {
292  nextFovName << data()->availFOVs.at(currentIdx + 1)->name();
293  }
294 
295  Options::setFOVNames(nextFovName);
296  data()->syncFOV();
297  syncFOVActions();
298  map()->update();
299 }
300 
301 void KStars::selectPreviousFov()
302 {
303  if( data()->getVisibleFOVs().isEmpty() )
304  return;
305 
306  Q_ASSERT( ! data()->getAvailableFOVs().isEmpty() ); // The available FOVs had better not be empty if the visible ones are not.
307 
308  FOV *currentFov = data()->getVisibleFOVs().first();
309  int currentIdx = data()->availFOVs.indexOf(currentFov);
310 
311  // If current FOV is not the available FOV list or there is only 1 FOV available, then return
312  if(currentIdx == -1 || data()->availFOVs.size() < 2) {
313  return;
314  }
315 
316  QStringList prevFovName;
317  if(currentIdx == 0) {
318  prevFovName << data()->availFOVs.last()->name();
319  } else {
320  prevFovName << data()->availFOVs.at(currentIdx - 1)->name();
321  }
322 
323  Options::setFOVNames(prevFovName);
324  data()->syncFOV();
325  syncFOVActions();
326  map()->update();
327 }
328 
329 void KStars::showWISettingsUI()
330 {
331  slotWISettings();
332 }
333 
334 void KStars::updateTime( const bool automaticDSTchange ) {
335  // Due to frequently use of this function save data and map pointers for speedup.
336  // Save options and geo() to a pointer would not speedup because most of time options
337  // and geo will accessed only one time.
338  KStarsData *Data = data();
339  SkyMap *Map = map();
340  // dms oldLST( Data->lst()->Degrees() );
341 
342  Data->updateTime( Data->geo(), Map, automaticDSTchange );
343 
344  //We do this outside of kstarsdata just to get the coordinates
345  //displayed in the infobox to update every second.
346  // if ( !Options::isTracking() && LST()->Degrees() > oldLST.Degrees() ) {
347  // int nSec = int( 3600.*( LST()->Hours() - oldLST.Hours() ) );
348  // Map->focus()->setRA( Map->focus()->ra().Hours() + double( nSec )/3600. );
349  // if ( Options::useAltAz() ) Map->focus()->EquatorialToHorizontal( LST(), geo()->lat() );
350  // Map->showFocusCoords();
351  // }
352 
353  //If time is accelerated beyond slewTimescale, then the clock's timer is stopped,
354  //so that it can be ticked manually after each update, in order to make each time
355  //step exactly equal to the timeScale setting.
356  //Wrap the call to manualTick() in a singleshot timer so that it doesn't get called until
357  //the skymap has been completely updated.
358  if ( Data->clock()->isManualMode() && Data->clock()->isActive() ) {
359  QTimer::singleShot( 0, Data->clock(), SLOT( manualTick() ) );
360  }
361 }
362 
363 Execute* KStars::getExecute() {
364  if( !execute )
365  execute = new Execute();
366  return execute;
367 }
368 
369 #include "kstars.moc"
370 
Options::focusRA
static double focusRA()
Get Right Ascension of focus position.
Definition: Options.h:1018
Options::setFOVNames
static void setFOVNames(const QStringList &v)
Set Name of selected FOV indicators.
Definition: Options.h:970
Options::focusDec
static double focusDec()
Get Declination of focus position.
Definition: Options.h:1037
KStars::showImgExportDialog
void showImgExportDialog()
Definition: kstars.cpp:230
SkyPoint::ra
const dms & ra() const
Definition: skypoint.h:171
KStarsData::objectNamed
SkyObject * objectNamed(const QString &name)
Find object by name.
Definition: kstarsdata.cpp:345
Options::showAltAzField
static bool showAltAzField()
Get Display Alt/Az coordinates in the statusbar?
Definition: Options.h:334
KStarsDateTime::fromString
static KStarsDateTime fromString(const QString &s)
Definition: kstarsdatetime.cpp:75
KStarsData::clock
SimClock * clock()
Definition: kstarsdata.h:158
Options::showRADecField
static bool showRADecField()
Get Display RA/Dec coordinates in the statusbar?
Definition: Options.h:353
KStarsData
KStarsData is the backbone of KStars.
Definition: kstarsdata.h:66
FOV
class encapulating a Field-of-View symbol
Definition: fov.h:32
KStars::map
SkyMap * map() const
Definition: kstars.h:134
SkyMap::slotCenter
void slotCenter()
Center the display at the point ClickedPoint.
Definition: skymap.cpp:373
SimClock::isManualMode
bool isManualMode() const
Manual Mode is a new (04/2002) addition to the SimClock.
Definition: simclock.h:72
KStarsData::colorScheme
ColorScheme * colorScheme()
Definition: kstarsdata.h:149
Options::darkAppColors
static bool darkAppColors()
Get Use Dark colors for KStars windows?
Definition: Options.h:2892
KStarsData::setLocationFromOptions
void setLocationFromOptions()
Set the GeoLocation according to the values stored in the configuration file.
Definition: kstarsdata.cpp:317
wiview.h
Options::showFlags
static bool showFlags()
Get Draw flags in the sky map?
Definition: Options.h:1778
exportimagedialog.h
SkyMap::setClickedObject
void setClickedObject(SkyObject *o)
Set the ClickedObject pointer to the argument.
Definition: skymap.cpp:361
dms::Degrees
const double & Degrees() const
Definition: dms.h:98
Options::showSupernovae
static bool showSupernovae()
Get Draw supernovae in the sky map?
Definition: Options.h:1436
Options::showMilkyWay
static bool showMilkyWay()
Get Draw Milky Way contour in the sky map?
Definition: Options.h:1892
KStarsData::geo
GeoLocation * geo()
Definition: kstarsdata.h:164
Options::isTracking
static bool isTracking()
Get Is tracking engaged?
Definition: Options.h:1075
Options::useGL
static bool useGL()
Get Switch to OpenGL backend.
Definition: Options.h:2740
KStars
This is the main window for KStars.
Definition: kstars.h:94
Options::focusObject
static QString focusObject()
Get Name of focused object.
Definition: Options.h:1056
Options::runClock
static bool runClock()
Get Run clock.
Definition: Options.h:2759
SimClock::isActive
bool isActive()
Whether the clock is active or not is a bit complicated by the introduction of "manual mode"...
Definition: simclock.cpp:97
fov.h
Options::showGround
static bool showGround()
Get Draw opaque ground in the sky map?
Definition: Options.h:1740
KStars::getExecute
Execute * getExecute()
Definition: kstars.cpp:363
Options::showGeoBox
static bool showGeoBox()
Get Display the geographic InfoBox?
Definition: Options.h:203
KStarsData::Create
static KStarsData * Create()
Definition: kstarsdata.cpp:93
KXmlGuiWindow
SkyPoint
The sky coordinates of a point in the sky.
Definition: skypoint.h:50
KStars::applyConfig
void applyConfig(bool doApplyFocus=true)
Apply config options throughout the program.
Definition: kstars.cpp:165
Options::fOVNames
static QStringList fOVNames()
Get Name of selected FOV indicators.
Definition: Options.h:980
KStars::showWISettingsUI
void showWISettingsUI()
Definition: kstars.cpp:329
SkyMap::focus
SkyPoint * focus()
Retrieve the Focus point; the position on the sky at the center of the skymap.
Definition: skymap.h:120
ColorScheme::loadFromConfig
void loadFromConfig()
Read color-scheme data from the Config object.
Definition: colorscheme.cpp:266
Options::showCBounds
static bool showCBounds()
Get Draw constellation boundaries in the sky map?
Definition: Options.h:1550
Options::showSolarSystem
static bool showSolarSystem()
Get Meta-option for all planets in the sky map.
Definition: Options.h:1930
Options::showCNames
static bool showCNames()
Get Draw constellation names in the sky map?
Definition: Options.h:1607
skymap.h
KStars::updateTime
void updateTime(const bool automaticDSTchange=true)
Update time-dependent data and (possibly) repaint the sky map.
Definition: kstars.cpp:334
kstarssplash.h
KStars::selectNextFov
void selectNextFov()
Definition: kstars.cpp:272
execute.h
KStarsDateTime
Extension of KDateTime for KStars KStarsDateTime can represent the date/time as a Julian Day...
Definition: kstarsdatetime.h:45
Options::showHorizontalGrid
static bool showHorizontalGrid()
Get Draw horizontal coordinate grid in the sky map?
Definition: Options.h:1721
Options::showDeepSky
static bool showDeepSky()
Get Draw "deep sky" objects in the sky map?
Definition: Options.h:1626
Options::showTimeBox
static bool showTimeBox()
Get Display the time InfoBox?
Definition: Options.h:165
simclock.h
SkyPoint::dec
const dms & dec() const
Definition: skypoint.h:174
KStarsData::syncFOV
void syncFOV()
Synchronize list of visible FOVs and list of selected FOVs in Options.
Definition: kstarsdata.cpp:1045
Options.h
KStarsData::getVisibleFOVs
const QList< FOV * > getVisibleFOVs() const
Definition: kstarsdata.h:211
KStars::syncFOVActions
void syncFOVActions()
Definition: kstars.cpp:235
KStars::selectPreviousFov
void selectPreviousFov()
Definition: kstars.cpp:301
KStarsSplash
The KStars Splash Screen.
Definition: kstarssplash.h:30
finddialog.h
SkyMap::setClickedPoint
void setClickedPoint(SkyPoint *f)
Set the ClickedPoint to the skypoint given as an argument.
Definition: skymap.cpp:829
Options::showCLines
static bool showCLines()
Get Draw constellation lines in the sky map?
Definition: Options.h:1588
Options::showStatusBar
static bool showStatusBar()
Get Display the statusbar?
Definition: Options.h:315
Options::showFocusBox
static bool showFocusBox()
Get Display the focus InfoBox?
Definition: Options.h:184
SkyMap
This is the canvas on which the sky is painted.
Definition: skymap.h:72
SkyMap::Instance
static SkyMap * Instance()
Definition: skymap.cpp:141
Options::useAltAz
static bool useAltAz()
Get Use horizontal coordinate system?
Definition: Options.h:2386
KStars::data
KStarsData * data() const
Definition: kstars.h:131
KStars::clearCachedFindDialog
void clearCachedFindDialog()
Delete FindDialog because ObjNames list has changed in KStarsData due to reloading star data...
Definition: kstars.cpp:152
KStarsData::updateTime
void updateTime(GeoLocation *geo, SkyMap *skymap, const bool automaticDSTchange=true)
Update the Simulation Clock.
Definition: kstarsdata.cpp:189
Options::showStars
static bool showStars()
Get Draw stars in the sky map?
Definition: Options.h:2177
kstarsdata.h
KStars::createInstance
static KStars * createInstance(bool doSplash, bool clockrunning=true, const QString &startDateString=QString())
Create an instance of this class.
Definition: kstars.cpp:129
KStars::~KStars
virtual ~KStars()
Destructor.
Definition: kstars.cpp:137
SkyObject
Provides all necessary information about an object in the sky: its coordinates, name(s), type, magnitude, and QStringLists of URLs for images and webpages regarding the object.
Definition: skyobject.h:46
Options::showEquatorialGrid
static bool showEquatorialGrid()
Get Draw equatorial coordinate grid in the sky map?
Definition: Options.h:1702
KStars::hideAllFovExceptFirst
void hideAllFovExceptFirst()
Definition: kstars.cpp:249
kstars.h
drivermanager.h
observinglist.h
DriverManager::Instance
static DriverManager * Instance()
Definition: drivermanager.cpp:91
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:36:20 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kstars

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

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

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