Changeset View
Changeset View
Standalone View
Standalone View
kstars/fitsviewer/fitstab.cpp
Show All 18 Lines | |||||
19 | #include "fitsdata.h" | 19 | #include "fitsdata.h" | ||
20 | #include "fitshistogram.h" | 20 | #include "fitshistogram.h" | ||
21 | #include "fitsview.h" | 21 | #include "fitsview.h" | ||
22 | #include "fitsviewer.h" | 22 | #include "fitsviewer.h" | ||
23 | #include "kstars.h" | 23 | #include "kstars.h" | ||
24 | #include "Options.h" | 24 | #include "Options.h" | ||
25 | #include "ui_fitsheaderdialog.h" | 25 | #include "ui_fitsheaderdialog.h" | ||
26 | #include "ui_statform.h" | 26 | #include "ui_statform.h" | ||
27 | #include "ekos/manager.h" | ||||
27 | 28 | | |||
28 | #include <QtConcurrent> | 29 | #include <QtConcurrent> | ||
29 | #include <KMessageBox> | 30 | #include <KMessageBox> | ||
30 | 31 | | |||
31 | FITSTab::FITSTab(FITSViewer *parent) : QWidget(parent) | 32 | FITSTab::FITSTab(FITSViewer *parent) : QWidget(parent) | ||
32 | { | 33 | { | ||
33 | viewer = parent; | 34 | viewer = parent; | ||
34 | undoStack = new QUndoStack(this); | 35 | undoStack = new QUndoStack(this); | ||
▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Line(s) | 80 | { | |||
80 | return previewText; | 81 | return previewText; | ||
81 | } | 82 | } | ||
82 | 83 | | |||
83 | void FITSTab::setPreviewText(const QString &value) | 84 | void FITSTab::setPreviewText(const QString &value) | ||
84 | { | 85 | { | ||
85 | previewText = value; | 86 | previewText = value; | ||
86 | } | 87 | } | ||
87 | 88 | | |||
89 | void FITSTab::selectRecentFITS(int i) | ||||
90 | { | ||||
91 | loadFITS(QUrl::fromLocalFile(recentImages->item(i)->text())); | ||||
92 | } | ||||
93 | | ||||
94 | void FITSTab::clearRecentFITS() | ||||
95 | { | ||||
96 | disconnect(recentImages, &QListWidget::currentRowChanged, this, &FITSTab::selectRecentFITS); | ||||
97 | recentImages->clear(); | ||||
98 | connect(recentImages, &QListWidget::currentRowChanged, this, &FITSTab::selectRecentFITS); | ||||
99 | } | ||||
100 | | ||||
88 | void FITSTab::loadFITS(const QUrl &imageURL, FITSMode mode, FITSScale filter, bool silent) | 101 | void FITSTab::loadFITS(const QUrl &imageURL, FITSMode mode, FITSScale filter, bool silent) | ||
89 | { | 102 | { | ||
90 | if (view.get() == nullptr) | 103 | if (view.get() == nullptr) | ||
91 | { | 104 | { | ||
92 | view.reset(new FITSView(this, mode, filter)); | 105 | view.reset(new FITSView(this, mode, filter)); | ||
93 | view->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); | 106 | view->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); | ||
94 | QVBoxLayout *vlayout = new QVBoxLayout(); | 107 | QVBoxLayout *vlayout = new QVBoxLayout(); | ||
95 | 108 | | |||
96 | fitsSplitter = new QSplitter(Qt::Horizontal,this); | 109 | fitsSplitter = new QSplitter(Qt::Horizontal,this); | ||
97 | fitsTools = new QToolBox(); | 110 | fitsTools = new QToolBox(); | ||
98 | 111 | | |||
99 | stat.setupUi(statWidget); | 112 | stat.setupUi(statWidget); | ||
100 | fitsTools->addItem(statWidget,i18n("Statistics")); | 113 | fitsTools->addItem(statWidget,i18n("Statistics")); | ||
101 | 114 | | |||
102 | fitsTools->addItem(histogram,i18n("Histogram")); | 115 | fitsTools->addItem(histogram,i18n("Histogram")); | ||
103 | 116 | | |||
104 | 117 | | |||
105 | header.setupUi(fitsHeaderDialog); | 118 | header.setupUi(fitsHeaderDialog); | ||
106 | fitsTools->addItem(fitsHeaderDialog,i18n("FITS Header")); | 119 | fitsTools->addItem(fitsHeaderDialog,i18n("FITS Header")); | ||
107 | 120 | | |||
121 | | ||||
122 | | ||||
123 | QVBoxLayout *recentPanelLayout = new QVBoxLayout(); | ||||
124 | QWidget *recentPanel = new QWidget(fitsSplitter); | ||||
125 | recentPanel->setLayout(recentPanelLayout); | ||||
126 | fitsTools->addItem(recentPanel,i18n("Recent Images")); | ||||
127 | recentImages = new QListWidget(recentPanel); | ||||
128 | recentPanelLayout->addWidget(recentImages); | ||||
129 | QPushButton *clearRecent = new QPushButton(i18n("Clear")); | ||||
yurchor: i18n("Clear") ? | |||||
130 | recentPanelLayout->addWidget(clearRecent); | ||||
131 | connect(clearRecent, &QPushButton::pressed, this, &FITSTab::clearRecentFITS); | ||||
132 | connect(recentImages, &QListWidget::currentRowChanged, this, &FITSTab::selectRecentFITS); | ||||
133 | | ||||
108 | QScrollArea *scrollFitsPanel = new QScrollArea(fitsSplitter); | 134 | QScrollArea *scrollFitsPanel = new QScrollArea(fitsSplitter); | ||
109 | scrollFitsPanel->setWidgetResizable(true); | 135 | scrollFitsPanel->setWidgetResizable(true); | ||
110 | scrollFitsPanel->setWidget(fitsTools); | 136 | scrollFitsPanel->setWidget(fitsTools); | ||
111 | 137 | | |||
112 | fitsSplitter->addWidget(scrollFitsPanel); | 138 | fitsSplitter->addWidget(scrollFitsPanel); | ||
113 | fitsSplitter->addWidget(view.get()); | 139 | fitsSplitter->addWidget(view.get()); | ||
114 | 140 | | |||
115 | 141 | | |||
Show All 21 Lines | 158 | connect(view.get(), &FITSView::loaded, [&,filter]() { | |||
137 | FITSData *image_data = view->getImageData(); | 163 | FITSData *image_data = view->getImageData(); | ||
138 | 164 | | |||
139 | if (histogram == nullptr) | 165 | if (histogram == nullptr) | ||
140 | { | 166 | { | ||
141 | histogram = new FITSHistogram(this); | 167 | histogram = new FITSHistogram(this); | ||
142 | image_data->setHistogram(histogram); | 168 | image_data->setHistogram(histogram); | ||
143 | } | 169 | } | ||
144 | 170 | | |||
145 | histogramFuture = QtConcurrent::run([&]() {histogram->constructHistogram();}); | 171 | histogramFuture = QtConcurrent::run([&]() {histogram->constructHistogram(); evaluateStats();}); | ||
146 | 172 | | |||
147 | if(histogram->isVisible()) | 173 | if(histogram->isVisible()) | ||
148 | histogramFuture.waitForFinished(); | 174 | histogramFuture.waitForFinished(); | ||
149 | 175 | | |||
150 | // if (filter != FITS_NONE) | 176 | // if (filter != FITS_NONE) | ||
151 | // { | 177 | // { | ||
152 | // image_data->applyFilter(filter); | 178 | // image_data->applyFilter(filter); | ||
153 | // view->rescale(ZOOM_KEEP_LEVEL); | 179 | // view->rescale(ZOOM_KEEP_LEVEL); | ||
154 | // } | 180 | // } | ||
155 | 181 | | |||
156 | if (viewer->isStarsMarked()) | 182 | if (viewer->isStarsMarked()) | ||
157 | view->toggleStars(true); | 183 | view->toggleStars(true); | ||
158 | 184 | | |||
159 | evaluateStats(); | 185 | | ||
160 | loadFITSHeader(); | 186 | loadFITSHeader(); | ||
161 | 187 | | |||
162 | view->updateFrame(); | 188 | view->updateFrame(); | ||
163 | 189 | | |||
164 | emit loaded(); | 190 | emit loaded(); | ||
165 | }); | 191 | }); | ||
166 | } | 192 | } | ||
167 | 193 | | |||
168 | currentURL = imageURL; | 194 | currentURL = imageURL; | ||
169 | 195 | | |||
170 | view->setFilter(filter); | 196 | view->setFilter(filter); | ||
171 | 197 | | |||
172 | view->loadFITS(imageURL.toLocalFile(), silent); | 198 | view->loadFITS(imageURL.toLocalFile(), silent); | ||
199 | | ||||
200 | | ||||
201 | if(recentImages->findItems(imageURL.toLocalFile(),Qt::MatchExactly).count()==0) //Don't add it to the list if it is already there | ||||
202 | { | ||||
203 | if(KStars::Instance()->ekosManager()->captureModule()) //If capture module doesn't exist, it was loaded from "Load Fits" so it should be added | ||||
204 | { | ||||
205 | //We need to be sure the capture module exists before doing this check. | ||||
206 | if(KStars::Instance()->ekosManager()->captureModule()->isActiveJobAPreview()) //If the image is in fact a preview, it should not be added | ||||
207 | return; | ||||
208 | } | ||||
209 | //So now the images was either loaded from "Open File" or in a sequence, so add it. | ||||
210 | | ||||
211 | | ||||
212 | disconnect(recentImages, &QListWidget::currentRowChanged, this, &FITSTab::selectRecentFITS); | ||||
213 | recentImages->addItem(imageURL.toLocalFile()); | ||||
214 | recentImages->setCurrentRow(recentImages->count()-1); | ||||
215 | connect(recentImages, &QListWidget::currentRowChanged, this, &FITSTab::selectRecentFITS); | ||||
216 | } | ||||
217 | | ||||
173 | } | 218 | } | ||
174 | 219 | | |||
175 | void FITSTab::modifyFITSState(bool clean) | 220 | void FITSTab::modifyFITSState(bool clean) | ||
176 | { | 221 | { | ||
177 | if (clean) | 222 | if (clean) | ||
178 | { | 223 | { | ||
179 | if (undoStack->isClean() == false) | 224 | if (undoStack->isClean() == false) | ||
180 | undoStack->setClean(); | 225 | undoStack->setClean(); | ||
▲ Show 20 Lines • Show All 195 Lines • Show Last 20 Lines |
i18n("Clear") ?