Kstars

astrocalc.h
1/*
2 SPDX-FileCopyrightText: 2001-2002 Pablo de Vicente <vicente@oan.es>
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
13class QStackedWidget;
14class QTextEdit;
15class QTreeWidget;
16class 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 */
25class AstroCalc : public QDialog
26{
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};
This is the base class for the KStars astronomical calculator.
Definition astrocalc.h:26
QSize sizeHint() const override
void slotItemSelection(QTreeWidgetItem *it)
Display calculator module or help text based on item selected.
Q_OBJECTQ_OBJECT
QObject * parent() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Fri Nov 29 2024 11:57:49 by doxygen 1.12.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.