Files
HPPA/HPPA/imageControl.h
2026-05-22 16:21:41 +08:00

71 lines
1.9 KiB
C++

#pragma once
#include <QDialog>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <vector>
#include "RasterLayer.h"
#include "ui_imgControl.h"
class RasterImageLayer;
class ImageControl : public QDialog
{
Q_OBJECT
public:
ImageControl(QWidget* parent = nullptr);
~ImageControl();
// Populate controls from a RasterImageLayer's wavelength info and current render params
void setActiveLayer(RasterImageLayer* layer);
RasterImageLayer* activeLayer() const;
public Q_SLOTS:
Q_SIGNALS:
// Emitted when user changes any of the R/G/B wavelength values
void bandSelectionChanged(double rWave, double gWave, double bWave);
private Q_SLOTS:
// Sync slider position while dragging spinbox (no render)
void onSpinRedValueChanged(double val);
void onSpinGreenValueChanged(double val);
void onSpinBlueValueChanged(double val);
// Sync spinbox display while dragging slider (no render)
void onSliderRedValueChanged(int val);
void onSliderGreenValueChanged(int val);
void onSliderBlueValueChanged(int val);
// Commit: spinbox Enter key pressed / focus lost
void onSpinRedEditingFinished();
void onSpinGreenEditingFinished();
void onSpinBlueEditingFinished();
// Commit: slider mouse released
void onSliderRedReleased();
void onSliderGreenReleased();
void onSliderBlueReleased();
void onTrueColorClicked();
void onColorInfraredClicked();
private:
void emitBandChange();
void blockAllSignals(bool block);
// Find the band index whose wavelength is closest to the given value
int nearestBandIndex(double wave) const;
// Set spinbox and slider to wavelength of the given band index
void setControlsToBandIndex(QDoubleSpinBox* spin, QSlider* slider, int idx);
Ui::ImageControl ui;
RasterImageLayer* m_activeLayer = nullptr;
double m_minWave = 374.5;
double m_maxWave = 948.1;
std::vector<double> m_wavelengths; // band wavelengths from header
};