Kstars

astrocalc.h
1 /*
2  SPDX-FileCopyrightText: 2001-2002 Pablo de Vicente <[email protected]>
3 
4  SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #pragma once
8 
9 #include <QMap>
10 #include <QString>
11 #include <QDialog>
12 
13 class QStackedWidget;
14 class QTextEdit;
15 class QTreeWidget;
16 class QTreeWidgetItem;
17 
18 /**
19  * @class AstroCalc
20  * @brief This is the base class for the KStars astronomical calculator
21  *
22  * @author: Pablo de Vicente
23  * @version 0.9
24  */
25 class AstroCalc : public QDialog
26 {
27  Q_OBJECT
28 
29  public:
30  explicit AstroCalc(QWidget *parent = nullptr);
31 
32  /** @return suggested size of calculator window. */
33  QSize sizeHint() const override;
34  public slots:
35  // Q: Why is this public when we don't have access to navigationPanel anyway?
36  // Also doesn't seem to be used from outside -- asimha
37  /** Display calculator module or help text based on item selected. */
39 
40  private:
41  /** Pointer to function which return QWidget */
42  typedef QWidget *(AstroCalc::*WidgetConstructor)();
43  /**
44  * Data structure used for lazy widget construction. This class
45  * construct widget when it requested.
46  */
47  class WidgetThunk
48  {
49  public:
50  /**
51  * Create thunk
52  * @param acalc pointer to class.
53  * @param f function which construct widget.
54  */
55  WidgetThunk(AstroCalc *acalc, const WidgetConstructor& f) : widget(nullptr), calc(acalc), func(f) { }
56  /**
57  * Request widget.
58  * @return newly created widget or cached value.
59  */
60  QWidget *eval();
61 
62  private:
63  /// Cached value
64  QWidget *widget { nullptr };
65  /// Pointer to calculator
66  AstroCalc *calc { nullptr };
67  /// Function call to construct the widget.
68  WidgetConstructor func;
69  };
70 
71  /**
72  * Create widget of type T and put it to widget stack. Widget must
73  * have constructor of type T(QWidget*). Returns constructed widget.
74  */
75  template <typename T>
76  inline QWidget *addToStack();
77 
78  /**
79  * Add top level item to navigation panel. At the same time adds item to htmlTable
80  * @param title name of item
81  * @param html string to be displayed in splash screen
82  */
83  QTreeWidgetItem *addTreeTopItem(QTreeWidget *parent, const QString &title, const QString &html);
84 
85  /**
86  * Add item to navigation panel. At the same time adds item to dispatchTable Template
87  * parameter is type of widget to be constructed and added to widget stack. It must
88  * have T() constructor.
89  * @param title name of item
90  */
91  template <typename T>
92  QTreeWidgetItem *addTreeItem(QTreeWidgetItem *parent, const QString &title);
93 
94  /** Lookup table for help texts. Maps navpanel item to help text. */
96  /** Lookup table for widgets. Maps navpanel item to widget to be displayed. */
98  QTreeWidget *navigationPanel { nullptr };
99  QStackedWidget *acStack { nullptr };
100  QTextEdit *splashScreen { nullptr };
101 };
Q_OBJECTQ_OBJECT
void slotItemSelection(QTreeWidgetItem *it)
Display calculator module or help text based on item selected.
Definition: astrocalc.cpp:201
QSize sizeHint() const override
Definition: astrocalc.cpp:221
This is the base class for the KStars astronomical calculator.
Definition: astrocalc.h:25
QObject * parent() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Tue Dec 5 2023 03:58:25 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.