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

KDE's Doxygen guidelines are available online.