Kstars

imagingplanner.h
1/*
2 SPDX-FileCopyrightText: 2024 Hy Murveit <hy@murveit.com>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#pragma once
8
9#include "ui_imagingplanner.h"
10#include "catalogsdb.h"
11
12#include <QDialog>
13#include <QDir>
14#include <QFuture>
15#include <QFutureWatcher>
16#include <QMenu>
17#include <QNetworkAccessManager>
18#include <QPointer>
19#include <QSortFilterProxyModel>
20
22class QStandardItem;
23class ImagingPlannerPopup;
24class KSMoon;
25
26// These are used to communicate with the database.
27class ImagingPlannerDBEntry
28{
29public:
30 enum EntryFlag
31 {
32 PickedBit = 0x1,
33 ImagedBit = 0x2,
34 //AddedBit = 0x4,
35 IgnoredBit = 0x8
36 };
37
38 QString m_Name;
39 int m_Flags;
40 QString m_Notes;
41 ImagingPlannerDBEntry() {};
42 ImagingPlannerDBEntry(const QString &name, int flags, const QString &notes);
43 ImagingPlannerDBEntry(const QString &name, bool picked, bool imaged, bool ignored, const QString &notes);
44 void setFlags(bool picked, bool imaged, bool ignored);
45 void getFlags(bool *picked, bool *imaged, bool *ignored);
46 QString name() { return m_Name; }
47};
48
49class ImagingPlannerUI : public QFrame, public Ui::ImagingPlanner
50{
52
53 public:
54 explicit ImagingPlannerUI(QWidget *parent);
55private:
56 void setupIcons();
57};
58
59class CatalogImageInfo
60{
61 public:
62 CatalogImageInfo() {}
63 CatalogImageInfo(const QString &csv);
64 QString m_Name, m_Filename, m_Author, m_Link, m_License;
65};
66
67class CatalogFilter : public QSortFilterProxyModel
68{
70 public:
71 CatalogFilter(QObject* parent = 0);
72 bool filterAcceptsRow(int row, const QModelIndex &parent) const override;
73 bool lessThan ( const QModelIndex & left, const QModelIndex & right ) const override;
74 void setMinHours(double hours);
75 void setImagedConstraints(bool enabled, bool required);
76 void setPickedConstraints(bool enabled, bool required);
77 void setIgnoredConstraints(bool enabled, bool required);
78 void setKeywordConstraints(bool enabled, bool required, const QString &keyword);
79 void setSortColumn(int column);
80
81private:
82 double m_MinHours = 0;
83 bool m_ImagedConstraintsEnabled = false;
84 bool m_ImagedRequired = false;
85 bool m_PickedConstraintsEnabled = false;
86 bool m_PickedRequired = false;
87 bool m_IgnoredConstraintsEnabled = false;
88 bool m_IgnoredRequired = false;
89 bool m_KeywordConstraintsEnabled = false;
90 bool m_KeywordRequired = false;
91 QString m_Keyword;
92 QRegularExpression m_KeywordRE;
93 int m_SortColumn = 1; // HOURS
94 bool m_ReverseSort = false;
95};
96
97class ImagingPlanner : public QDialog
98{
100
101 public:
102 ImagingPlanner();
103 virtual ~ImagingPlanner() override = default;
104
105 bool eventFilter(QObject *obj, QEvent *event) override;
106
107 public slots:
108 void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
109 void setSelection(int flag, bool enabled);
110
111 void setSelectionIgnored();
112 void setSelectionNotIgnored();
113
114 void setSelectionImaged();
115 void setSelectionNotImaged();
116
117 void setSelectionPicked();
118 void setSelectionNotPicked();
119
120 void centerOnSkymap();
121 void reallyCenterOnSkymap();
122
123protected slots:
124 void slotClose();
125 void searchAstrobin();
126 void searchWikipedia();
127 void searchSimbad();
128 void searchSpecialWebPageImages();
129
130 void recompute();
131 void sorry(const QString &message);
132
133signals:
134 void popupSorry(const QString &message);
135 void addRow(QList<QStandardItem *> itemList);
136
137protected:
138 void showEvent(QShowEvent *) override;
139
140 private slots:
141 void userNotesEditFinished();
142 void keywordEditFinished();
143 void loadImagedFile();
144 void searchSlot();
145 void loadCatalogViaMenu();
146 void getHelp();
147 void openOptionsMenu();
148 void addRowSlot(QList<QStandardItem *> itemList);
149
150
151 private:
152 void initialize();
153 void catalogLoaded();
154 void loadCatalog(const QString &path);
155 void installEventFilters();
156 void removeEventFilters();
157
158
159 // Methods for setting up buttons and options.
160 void setupHideButtons(bool(*option)(), void(*setOption)(bool),
161 QPushButton *hideButton, QPushButton *showButton,
162 QFrame *widget, QFrame *hiddenWidget);
163 void setupFilterButton(QCheckBox *checkbox, bool(*option)(), void(*setOption)(bool));
164 void setupFilter2Buttons(
165 QCheckBox *yes, QCheckBox *no, QCheckBox *dontCare,
166 bool(*yesOption)(), bool(*noOption)(), bool(*dontCareOption)(),
167 void(*setYesOption)(bool), void(*setNoOption)(bool), void(*setDontCareOption)(bool));
168
169 void updateSortConstraints();
170
171 GeoLocation *getGeo();
172 QDate getDate() const;
173
174 void loadInitialCatalog();
175 QString defaultDirectory() const;
176 QString findDefaultCatalog() const;
177 bool getKStarsCatalogObject(const QString &name, CatalogObject *catObject);
178 bool internetNameSearch(const QString &name, bool abellPlanetary, int abellNumber, CatalogObject * catObject);
179
180 bool addCatalogItem(const KSAlmanac &ksal, const QString &name, int flags = 0);
181 QUrl getAstrobinUrl(const QString &target, bool requireAwards, bool requireSomeFilters, double minRadius, double maxRadius);
182 void popupAstrobin(const QString &target);
183 void plotAltitudeGraph(const QDate &date, const dms &ra, const dms &dec);
184
185 void moveBackOneDay();
186 void moveForwardOneDay();
187 bool scrollToName(const QString &name);
188
189 void setStatus(const QString &message);
190 void updateStatus();
191
192 void updateDetails(const CatalogObject &object, int flags);
193 void updateNotes(const QString &notes);
194 void initUserNotes();
195 void disableUserNotes();
196 void setupNotesLinks(const QString &notes);
197
198 void setDefaultImage();
199
200 QString currentObjectName() const;
201 int currentObjectFlags();
202 QString currentObjectNotes();
203 void setCurrentObjectNotes(const QString &notes);
204
205 CatalogObject *currentCatalogObject();
206 CatalogObject *getObject(const QString &name);
207 CatalogObject *addObject(const QString &name);
208 void clearObjects();
209
210 void loadCatalogFromFile(QString filename = "", bool reset=true);
211 bool findCatalogImageInfo(const QString &name, CatalogImageInfo *info);
212 void addCatalogImageInfo(const CatalogImageInfo &info);
213
214 void objectDetails();
215 void updateDisplays();
216 void updateCounts();
217 KSMoon *getMoon();
218 void updateMoon();
219
220 // Database utilities.
221 void saveToDB(const QString &name, bool picked, bool imaged, bool ignored, const QString &notes);
222 void saveToDB(const QString &name, int flags, const QString &notes);
223 void loadFromDB();
224
225 void highlightImagedObject(const QModelIndex &index, bool imaged);
226 void highlightPickedObject(const QModelIndex &index, bool picked);
227
228 void focusOnTable();
229 void adjustWindowSize();
230
231 // Used for debugging the object lists.
232 void checkTargets(bool justCheckCurrentCatalog = false);
233 void checkTargets2(bool backwards = false);
234
235 void adjustSpecialWebPageButton(const QString &name);
236 bool checkIfPageExists(const QString &urlString);
237 QNetworkAccessManager m_networkManager;
238
239 ImagingPlannerUI *ui { nullptr };
240
241 bool m_initialShow { false };
242 bool m_InitialLoad = true;
243
244 CatalogsDB::DBManager m_manager;
245 QPointer<QStandardItemModel> m_CatalogModel;
246 QPointer<CatalogFilter> m_CatalogSortModel;
247
248 QFuture<void> m_LoadCatalogs;
249 QFutureWatcher<void> *m_LoadCatalogsWatcher;
250
251 QHash<QString, CatalogObject> m_CatalogHash;
252 QPixmap m_NoImagePixmap;
253
254 QPointer<ImagingPlannerPopup> m_PopupMenu;
255
256 double m_MinMoon = 30.0;
257 double m_MaxMoonAltitude = 90.0;
258 double m_MinAltitude = 30.0;
259 double m_MinHours = 0;
260 bool m_UseArtificialHorizon = true;
261 QString m_Keyword;
262
263 int m_numWithImage = 0;
264 int m_numMissingImage = 0;
265 bool m_loadingCatalog = false;
266
267 QMap<QString, CatalogImageInfo> m_CatalogImageInfoMap;
268};
269
270class ImagingPlannerPopup : public QMenu
271{
273 public:
274 ImagingPlannerPopup();
275 virtual ~ImagingPlannerPopup() override = default;
276
277 void init(ImagingPlanner *planner, const QStringList &names,
278 const bool *imaged, const bool *picked, const bool *ignored);
279};
280
281
Provides necessary information about the Moon.
Definition ksmoon.h:26
virtual QModelIndex parent(const QModelIndex &index) const const=0
QObject(QObject *parent)
Q_OBJECTQ_OBJECT
virtual bool event(QEvent *e)
QObject * parent() const const
QWidget(QWidget *parent, Qt::WindowFlags f)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Feb 28 2025 11:56:04 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.