mirror of
https://github.com/AlexandreRouma/SDRPlusPlus.git
synced 2025-06-28 21:37:50 +02:00
Formatted the entire codebase and added a CI check for formatting
This commit is contained in:
@ -36,7 +36,7 @@ namespace colormaps {
|
||||
map.entryCount = mapTxt.size();
|
||||
map.map = new float[mapTxt.size() * 3];
|
||||
int i = 0;
|
||||
for(auto const& col : mapTxt) {
|
||||
for (auto const& col : mapTxt) {
|
||||
uint8_t r, g, b, a;
|
||||
map.map[i * 3] = std::stoi(col.substr(1, 2), NULL, 16);
|
||||
map.map[(i * 3) + 1] = std::stoi(col.substr(3, 2), NULL, 16);
|
||||
|
@ -10,14 +10,13 @@ namespace credits {
|
||||
ImFont* bigFont;
|
||||
|
||||
void init() {
|
||||
|
||||
}
|
||||
|
||||
void show() {
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 20.0f));
|
||||
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0,0,0,0));
|
||||
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0));
|
||||
ImVec2 dispSize = ImGui::GetIO().DisplaySize;
|
||||
ImVec2 center = ImVec2(dispSize.x/2.0f, dispSize.y/2.0f);
|
||||
ImVec2 center = ImVec2(dispSize.x / 2.0f, dispSize.y / 2.0f);
|
||||
ImGui::SetNextWindowPos(center, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
|
||||
ImGui::OpenPopup("Credits");
|
||||
ImGui::BeginPopupModal("Credits", NULL, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove);
|
||||
|
@ -4,19 +4,19 @@
|
||||
#include <string>
|
||||
#include <gui/gui.h>
|
||||
|
||||
#define GENERIC_DIALOG_BUTTONS_OK "Ok\0"
|
||||
#define GENERIC_DIALOG_BUTTONS_YES_NO "Yes\0No\0"
|
||||
#define GENERIC_DIALOG_BUTTONS_APPLY_CANCEL "Apply\0Cancel\0"
|
||||
#define GENERIC_DIALOG_BUTTONS_OK_CANCEL "Ok\0Cancel\0"
|
||||
#define GENERIC_DIALOG_BUTTONS_OK "Ok\0"
|
||||
#define GENERIC_DIALOG_BUTTONS_YES_NO "Yes\0No\0"
|
||||
#define GENERIC_DIALOG_BUTTONS_APPLY_CANCEL "Apply\0Cancel\0"
|
||||
#define GENERIC_DIALOG_BUTTONS_OK_CANCEL "Ok\0Cancel\0"
|
||||
|
||||
#define GENERIC_DIALOG_BUTTON_OK 0
|
||||
#define GENERIC_DIALOG_BUTTON_YES 0
|
||||
#define GENERIC_DIALOG_BUTTON_NO 1
|
||||
#define GENERIC_DIALOG_BUTTON_APPLY 0
|
||||
#define GENERIC_DIALOG_BUTTON_CANCE 1
|
||||
#define GENERIC_DIALOG_BUTTON_OK 0
|
||||
#define GENERIC_DIALOG_BUTTON_YES 0
|
||||
#define GENERIC_DIALOG_BUTTON_NO 1
|
||||
#define GENERIC_DIALOG_BUTTON_APPLY 0
|
||||
#define GENERIC_DIALOG_BUTTON_CANCE 1
|
||||
|
||||
namespace ImGui {
|
||||
template<typename Func>
|
||||
template <typename Func>
|
||||
int GenericDialog(const char* id, bool& open, const char* buttons, Func draw) {
|
||||
// If not open, return
|
||||
if (!open) { return -1; }
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,7 @@ namespace icons {
|
||||
ImTextureID CENTER_TUNING;
|
||||
|
||||
GLuint loadTexture(std::string path) {
|
||||
int w,h,n;
|
||||
int w, h, n;
|
||||
stbi_uc* data = stbi_load(path.c_str(), &w, &h, &n, 0);
|
||||
GLuint texId;
|
||||
glGenTextures(1, &texId);
|
||||
|
@ -49,10 +49,22 @@ void MainWindow::init() {
|
||||
// Load menu elements
|
||||
gui::menu.order.clear();
|
||||
for (auto& elem : menuElements) {
|
||||
if (!elem.contains("name")) { spdlog::error("Menu element is missing name key"); continue; }
|
||||
if (!elem["name"].is_string()) { spdlog::error("Menu element name isn't a string"); continue; }
|
||||
if (!elem.contains("open")) { spdlog::error("Menu element is missing open key"); continue; }
|
||||
if (!elem["open"].is_boolean()) { spdlog::error("Menu element name isn't a string"); continue; }
|
||||
if (!elem.contains("name")) {
|
||||
spdlog::error("Menu element is missing name key");
|
||||
continue;
|
||||
}
|
||||
if (!elem["name"].is_string()) {
|
||||
spdlog::error("Menu element name isn't a string");
|
||||
continue;
|
||||
}
|
||||
if (!elem.contains("open")) {
|
||||
spdlog::error("Menu element is missing open key");
|
||||
continue;
|
||||
}
|
||||
if (!elem["open"].is_boolean()) {
|
||||
spdlog::error("Menu element name isn't a string");
|
||||
continue;
|
||||
}
|
||||
Menu::MenuOption_t opt;
|
||||
opt.name = elem["name"];
|
||||
opt.open = elem["open"];
|
||||
@ -66,15 +78,15 @@ void MainWindow::init() {
|
||||
gui::menu.registerEntry("Theme", thememenu::draw, NULL);
|
||||
gui::menu.registerEntry("VFO Color", vfo_color_menu::draw, NULL);
|
||||
gui::menu.registerEntry("Module Manager", module_manager_menu::draw, NULL);
|
||||
|
||||
|
||||
gui::freqSelect.init();
|
||||
|
||||
// Set default values for waterfall in case no source init's it
|
||||
gui::waterfall.setBandwidth(8000000);
|
||||
gui::waterfall.setViewBandwidth(8000000);
|
||||
|
||||
fft_in = (fftwf_complex*) fftwf_malloc(sizeof(fftwf_complex) * fftSize);
|
||||
fft_out = (fftwf_complex*) fftwf_malloc(sizeof(fftwf_complex) * fftSize);
|
||||
|
||||
fft_in = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex) * fftSize);
|
||||
fft_out = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex) * fftSize);
|
||||
fftwPlan = fftwf_plan_dft_1d(fftSize, fft_in, fft_out, FFTW_FORWARD, FFTW_ESTIMATE);
|
||||
|
||||
sigpath::signalPath.init(8000000, 20, fftSize, &dummyStream, (dsp::complex_t*)fft_in, fftHandler, this);
|
||||
@ -88,7 +100,7 @@ void MainWindow::init() {
|
||||
|
||||
// Load modules from /module directory
|
||||
if (std::filesystem::is_directory(modulesDir)) {
|
||||
for (const auto & file : std::filesystem::directory_iterator(modulesDir)) {
|
||||
for (const auto& file : std::filesystem::directory_iterator(modulesDir)) {
|
||||
std::string path = file.path().generic_string();
|
||||
if (file.path().extension().generic_string() != SDRPP_MOD_EXTENTSION) {
|
||||
continue;
|
||||
@ -130,7 +142,7 @@ void MainWindow::init() {
|
||||
LoadingScreen::show("Loading color maps");
|
||||
spdlog::info("Loading color maps");
|
||||
if (std::filesystem::is_directory(resourcesDir + "/colormaps")) {
|
||||
for (const auto & file : std::filesystem::directory_iterator(resourcesDir + "/colormaps")) {
|
||||
for (const auto& file : std::filesystem::directory_iterator(resourcesDir + "/colormaps")) {
|
||||
std::string path = file.path().generic_string();
|
||||
LoadingScreen::show("Loading " + path);
|
||||
spdlog::info("Loading {0}", path);
|
||||
@ -196,11 +208,11 @@ void MainWindow::init() {
|
||||
float finalBwHalf = gui::waterfall.getBandwidth() / 2.0;
|
||||
for (auto& [_name, _vfo] : gui::waterfall.vfos) {
|
||||
if (_vfo->lowerOffset < -finalBwHalf) {
|
||||
sigpath::vfoManager.setCenterOffset(_name, (_vfo->bandwidth/2)-finalBwHalf);
|
||||
sigpath::vfoManager.setCenterOffset(_name, (_vfo->bandwidth / 2) - finalBwHalf);
|
||||
continue;
|
||||
}
|
||||
if (_vfo->upperOffset > finalBwHalf) {
|
||||
sigpath::vfoManager.setCenterOffset(_name, finalBwHalf-(_vfo->bandwidth/2));
|
||||
sigpath::vfoManager.setCenterOffset(_name, finalBwHalf - (_vfo->bandwidth / 2));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -224,8 +236,8 @@ void MainWindow::fftHandler(dsp::complex_t* samples, int count, void* ctx) {
|
||||
|
||||
// Zero out the rest of the samples
|
||||
if (count < _this->fftSize) {
|
||||
memset(&_this->fft_in[count], 0, (_this->fftSize-count) * sizeof(dsp::complex_t));
|
||||
}
|
||||
memset(&_this->fft_in[count], 0, (_this->fftSize - count) * sizeof(dsp::complex_t));
|
||||
}
|
||||
|
||||
// Execute FFT
|
||||
fftwf_execute(_this->fftwPlan);
|
||||
@ -258,14 +270,12 @@ void MainWindow::vfoAddedHandler(VFOManager::VFO* vfo, void* ctx) {
|
||||
double viewBW = gui::waterfall.getViewBandwidth();
|
||||
double viewOffset = gui::waterfall.getViewOffset();
|
||||
|
||||
double viewLower = viewOffset - (viewBW/2.0);
|
||||
double viewUpper = viewOffset + (viewBW/2.0);
|
||||
double viewLower = viewOffset - (viewBW / 2.0);
|
||||
double viewUpper = viewOffset + (viewBW / 2.0);
|
||||
|
||||
double newOffset = std::clamp<double>(offset, viewLower, viewUpper);
|
||||
|
||||
sigpath::vfoManager.setCenterOffset(name, _this->initComplete ? newOffset : offset);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::draw() {
|
||||
@ -289,7 +299,7 @@ void MainWindow::draw() {
|
||||
core::configManager.release(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sigpath::vfoManager.updateFromWaterfall(&gui::waterfall);
|
||||
|
||||
// Handle selection of another VFO
|
||||
@ -415,7 +425,7 @@ void MainWindow::draw() {
|
||||
|
||||
int snrWidth = std::min<int>(300, ImGui::GetWindowSize().x - ImGui::GetCursorPosX() - 87);
|
||||
|
||||
ImGui::SetCursorPosX(ImGui::GetWindowSize().x - (snrWidth+87));
|
||||
ImGui::SetCursorPosX(ImGui::GetWindowSize().x - (snrWidth + 87));
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 5);
|
||||
ImGui::SetNextItemWidth(snrWidth);
|
||||
ImGui::SNRMeter((vfo != NULL) ? gui::waterfall.selectedVFOSNR : 0);
|
||||
@ -456,7 +466,7 @@ void MainWindow::draw() {
|
||||
else {
|
||||
ImGui::SetMouseCursor(ImGuiMouseCursor_Arrow);
|
||||
}
|
||||
if(!down && grabbingMenu) {
|
||||
if (!down && grabbingMenu) {
|
||||
grabbingMenu = false;
|
||||
menuWidth = newWidth;
|
||||
core::configManager.acquire();
|
||||
@ -494,13 +504,13 @@ void MainWindow::draw() {
|
||||
core::configManager.release(true);
|
||||
}
|
||||
if (startedWithMenuClosed) {
|
||||
startedWithMenuClosed = false;
|
||||
startedWithMenuClosed = false;
|
||||
}
|
||||
else {
|
||||
firstMenuRender = false;
|
||||
}
|
||||
|
||||
if(ImGui::CollapsingHeader("Debug")) {
|
||||
if (ImGui::CollapsingHeader("Debug")) {
|
||||
ImGui::Text("Frame time: %.3f ms/frame", 1000.0 / ImGui::GetIO().Framerate);
|
||||
ImGui::Text("Framerate: %.1f FPS", ImGui::GetIO().Framerate);
|
||||
ImGui::Text("Center Frequency: %.0f Hz", gui::waterfall.getCenterFrequency());
|
||||
@ -511,7 +521,7 @@ void MainWindow::draw() {
|
||||
ImGui::Checkbox("Bypass buffering", &sigpath::signalPath.inputBuffer.bypass);
|
||||
|
||||
ImGui::Text("Buffering: %d", (sigpath::signalPath.inputBuffer.writeCur - sigpath::signalPath.inputBuffer.readCur + 32) % 32);
|
||||
|
||||
|
||||
if (ImGui::Button("Test Bug")) {
|
||||
spdlog::error("Will this make the software crash?");
|
||||
}
|
||||
@ -543,7 +553,7 @@ void MainWindow::draw() {
|
||||
|
||||
ImGui::BeginChild("Waterfall");
|
||||
|
||||
gui::waterfall.draw();
|
||||
gui::waterfall.draw();
|
||||
|
||||
ImGui::EndChild();
|
||||
|
||||
@ -589,7 +599,7 @@ void MainWindow::draw() {
|
||||
core::configManager.release(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ImGui::NextColumn();
|
||||
ImGui::BeginChild("WaterfallControls");
|
||||
|
||||
@ -598,7 +608,7 @@ void MainWindow::draw() {
|
||||
ImGui::SetCursorPosX((ImGui::GetWindowSize().x / 2.0) - 10);
|
||||
if (ImGui::VSliderFloat("##_7_", ImVec2(20.0, 150.0), &bw, 1.0, 0.0, "")) {
|
||||
double factor = (double)bw * (double)bw;
|
||||
|
||||
|
||||
// Map 0.0 -> 1.0 to 1000.0 -> bandwidth
|
||||
double wfBw = gui::waterfall.getBandwidth();
|
||||
double delta = wfBw - 1000.0;
|
||||
@ -687,7 +697,7 @@ void MainWindow::setFFTSize(int size) {
|
||||
fftwf_destroy_plan(fftwPlan);
|
||||
fftwf_free(fft_in);
|
||||
fftwf_free(fft_out);
|
||||
|
||||
|
||||
fft_in = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex) * fftSize);
|
||||
fft_out = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex) * fftSize);
|
||||
fftwPlan = fftwf_plan_dft_1d(fftSize, fft_in, fft_out, FFTW_FORWARD, FFTW_ESTIMATE);
|
||||
|
@ -9,7 +9,7 @@
|
||||
#include <mutex>
|
||||
#include <gui/tuner.h>
|
||||
|
||||
#define WINDOW_FLAGS ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoBackground
|
||||
#define WINDOW_FLAGS ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoBackground
|
||||
|
||||
class MainWindow {
|
||||
public:
|
||||
@ -20,7 +20,7 @@ public:
|
||||
void setFFTSize(int size);
|
||||
void setFFTWindow(int win);
|
||||
|
||||
// TODO: Replace with it's own class
|
||||
// TODO: Replace with it's own class
|
||||
void setVFO(double freq);
|
||||
|
||||
void setPlayState(bool _playing);
|
||||
@ -40,7 +40,7 @@ private:
|
||||
std::mutex fft_mtx;
|
||||
fftwf_complex *fft_in, *fft_out;
|
||||
fftwf_plan fftwPlan;
|
||||
|
||||
|
||||
// GUI Variables
|
||||
bool firstMenuRender = true;
|
||||
bool startedWithMenuClosed = false;
|
||||
@ -64,5 +64,4 @@ private:
|
||||
bool initComplete = false;
|
||||
|
||||
EventHandler<VFOManager::VFO*> vfoCreatedHandler;
|
||||
|
||||
};
|
@ -21,7 +21,7 @@ namespace bandplanmenu {
|
||||
if (bandplan::bandplans.find(core::configManager.conf["bandPlan"]) != bandplan::bandplans.end()) {
|
||||
std::string name = core::configManager.conf["bandPlan"];
|
||||
bandplanId = std::distance(bandplan::bandplanNames.begin(), std::find(bandplan::bandplanNames.begin(),
|
||||
bandplan::bandplanNames.end(), name));
|
||||
bandplan::bandplanNames.end(), name));
|
||||
gui::waterfall.bandplan = &bandplan::bandplans[name];
|
||||
}
|
||||
else {
|
||||
|
@ -33,15 +33,15 @@ namespace displaymenu {
|
||||
};
|
||||
|
||||
const char* FFTSizesStr = "524288\0"
|
||||
"262144\0"
|
||||
"131072\0"
|
||||
"65536\0"
|
||||
"32768\0"
|
||||
"16384\0"
|
||||
"8192\0"
|
||||
"4096\0"
|
||||
"2048\0"
|
||||
"1024\0";
|
||||
"262144\0"
|
||||
"131072\0"
|
||||
"65536\0"
|
||||
"32768\0"
|
||||
"16384\0"
|
||||
"8192\0"
|
||||
"4096\0"
|
||||
"2048\0"
|
||||
"1024\0";
|
||||
|
||||
int fftSizeId = 0;
|
||||
|
||||
@ -83,7 +83,7 @@ namespace displaymenu {
|
||||
fftRate = core::configManager.conf["fftRate"];
|
||||
sigpath::signalPath.setFFTRate(fftRate);
|
||||
|
||||
selectedWindow = std::clamp<int>((int)core::configManager.conf["fftWindow"], 0, _FFT_WINDOW_COUNT-1);
|
||||
selectedWindow = std::clamp<int>((int)core::configManager.conf["fftWindow"], 0, _FFT_WINDOW_COUNT - 1);
|
||||
gui::mainWindow.setFFTWindow(selectedWindow);
|
||||
}
|
||||
|
||||
@ -153,7 +153,5 @@ namespace displaymenu {
|
||||
}
|
||||
ImGui::Text("Color map Author: %s", colorMapAuthor.c_str());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -51,7 +51,7 @@ namespace module_manager_menu {
|
||||
ImGui::TableSetColumnIndex(2);
|
||||
ImVec2 origPos = ImGui::GetCursorPos();
|
||||
ImGui::SetCursorPos(ImVec2(origPos.x - 3, origPos.y));
|
||||
if (ImGui::Button(("##module_mgr_"+name).c_str(), ImVec2(height,height))) {
|
||||
if (ImGui::Button(("##module_mgr_" + name).c_str(), ImVec2(height, height))) {
|
||||
toBeRemoved = name;
|
||||
confirmOpened = true;
|
||||
}
|
||||
@ -61,14 +61,14 @@ namespace module_manager_menu {
|
||||
ImGui::EndTable();
|
||||
}
|
||||
|
||||
if (ImGui::GenericDialog("module_mgr_confirm_", confirmOpened, GENERIC_DIALOG_BUTTONS_YES_NO, [](){
|
||||
ImGui::Text("Deleting \"%s\". Are you sure?", toBeRemoved.c_str());
|
||||
}) == GENERIC_DIALOG_BUTTON_YES) {
|
||||
if (ImGui::GenericDialog("module_mgr_confirm_", confirmOpened, GENERIC_DIALOG_BUTTONS_YES_NO, []() {
|
||||
ImGui::Text("Deleting \"%s\". Are you sure?", toBeRemoved.c_str());
|
||||
}) == GENERIC_DIALOG_BUTTON_YES) {
|
||||
core::moduleManager.deleteInstance(toBeRemoved);
|
||||
modified = true;
|
||||
}
|
||||
|
||||
ImGui::GenericDialog("module_mgr_error_", errorOpen, GENERIC_DIALOG_BUTTONS_OK, [](){
|
||||
ImGui::GenericDialog("module_mgr_error_", errorOpen, GENERIC_DIALOG_BUTTONS_OK, []() {
|
||||
ImGui::Text(errorMessage.c_str());
|
||||
});
|
||||
|
||||
@ -89,7 +89,7 @@ namespace module_manager_menu {
|
||||
|
||||
ImGui::TableSetColumnIndex(2);
|
||||
if (strlen(modName) == 0) { style::beginDisabled(); }
|
||||
if (ImGui::Button("+##module_mgr_add_btn", ImVec2(16,0))) {
|
||||
if (ImGui::Button("+##module_mgr_add_btn", ImVec2(16, 0))) {
|
||||
if (!core::moduleManager.createInstance(modName, modTypes[modTypeId])) {
|
||||
core::moduleManager.postInit(modName);
|
||||
modified = true;
|
||||
|
@ -34,29 +34,41 @@ namespace sourecmenu {
|
||||
};
|
||||
|
||||
const char* offsetModesTxt = "None\0"
|
||||
"Custom\0"
|
||||
"SpyVerter\0"
|
||||
"Ham-It-Up\0"
|
||||
"DK5AV X-Band\0"
|
||||
"Ku LNB (9750MHz)\0"
|
||||
"Ku LNB (10700MHz)\0";
|
||||
"Custom\0"
|
||||
"SpyVerter\0"
|
||||
"Ham-It-Up\0"
|
||||
"DK5AV X-Band\0"
|
||||
"Ku LNB (9750MHz)\0"
|
||||
"Ku LNB (10700MHz)\0";
|
||||
|
||||
const char* decimationStages = "None\0"
|
||||
"2\0"
|
||||
"4\0"
|
||||
"8\0"
|
||||
"16\0"
|
||||
"32\0"
|
||||
"64\0";
|
||||
"2\0"
|
||||
"4\0"
|
||||
"8\0"
|
||||
"16\0"
|
||||
"32\0"
|
||||
"64\0";
|
||||
|
||||
void updateOffset() {
|
||||
if (offsetMode == OFFSET_MODE_CUSTOM) { effectiveOffset = customOffset; }
|
||||
else if (offsetMode == OFFSET_MODE_SPYVERTER) { effectiveOffset = 120000000; } // 120MHz Up-conversion
|
||||
else if (offsetMode == OFFSET_MODE_HAM_IT_UP) { effectiveOffset = 125000000; } // 125MHz Up-conversion
|
||||
else if (offsetMode == OFFSET_MODE_DK5AV_XB) { effectiveOffset = -6800000000; } // 6.8GHz Down-conversion
|
||||
else if (offsetMode == OFFSET_MODE_KU_LNB_9750) { effectiveOffset = -9750000000; } // 9.750GHz Down-conversion
|
||||
else if (offsetMode == OFFSET_MODE_KU_LNB_10700) { effectiveOffset = -10700000000; } // 10.7GHz Down-conversion
|
||||
else { effectiveOffset = 0; }
|
||||
if (offsetMode == OFFSET_MODE_CUSTOM) { effectiveOffset = customOffset; }
|
||||
else if (offsetMode == OFFSET_MODE_SPYVERTER) {
|
||||
effectiveOffset = 120000000;
|
||||
} // 120MHz Up-conversion
|
||||
else if (offsetMode == OFFSET_MODE_HAM_IT_UP) {
|
||||
effectiveOffset = 125000000;
|
||||
} // 125MHz Up-conversion
|
||||
else if (offsetMode == OFFSET_MODE_DK5AV_XB) {
|
||||
effectiveOffset = -6800000000;
|
||||
} // 6.8GHz Down-conversion
|
||||
else if (offsetMode == OFFSET_MODE_KU_LNB_9750) {
|
||||
effectiveOffset = -9750000000;
|
||||
} // 9.750GHz Down-conversion
|
||||
else if (offsetMode == OFFSET_MODE_KU_LNB_10700) {
|
||||
effectiveOffset = -10700000000;
|
||||
} // 10.7GHz Down-conversion
|
||||
else {
|
||||
effectiveOffset = 0;
|
||||
}
|
||||
sigpath::sourceManager.setTuningOffset(effectiveOffset);
|
||||
}
|
||||
|
||||
@ -86,7 +98,7 @@ namespace sourecmenu {
|
||||
|
||||
void onSourceRegistered(std::string name, void* ctx) {
|
||||
refreshSources();
|
||||
|
||||
|
||||
if (selectedSource.empty()) {
|
||||
sourceId = 0;
|
||||
selectSource(sourceNames[0]);
|
||||
|
@ -29,7 +29,7 @@ namespace vfo_color_menu {
|
||||
json conf = core::configManager.conf["vfoColors"];
|
||||
for (auto& [name, val] : conf.items()) {
|
||||
// If not a string, repair with default
|
||||
if (!val.is_string()) {
|
||||
if (!val.is_string()) {
|
||||
core::configManager.conf["vfoColors"][name] = "#FFFFFF";
|
||||
vfoColors[name] = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
modified = true;
|
||||
@ -120,7 +120,7 @@ namespace vfo_color_menu {
|
||||
if (vfoColors.find(name) != vfoColors.end()) {
|
||||
col = vfoColors[name];
|
||||
}
|
||||
if (ImGui::ColorEdit3(("##vfo_color_"+name).c_str(), (float*)&col, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel)) {
|
||||
if (ImGui::ColorEdit3(("##vfo_color_" + name).c_str(), (float*)&col, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel)) {
|
||||
vfoColors[name] = col;
|
||||
vfo->color = IM_COL32((int)roundf(col.x * 255), (int)roundf(col.y * 255), (int)roundf(col.z * 255), 50);
|
||||
core::configManager.acquire();
|
||||
|
@ -27,7 +27,7 @@ bool ThemeManager::loadThemesFromDir(std::string path) {
|
||||
return false;
|
||||
}
|
||||
themes.clear();
|
||||
for (const auto & file : std::filesystem::directory_iterator(path)) {
|
||||
for (const auto& file : std::filesystem::directory_iterator(path)) {
|
||||
std::string _path = file.path().generic_string();
|
||||
if (file.path().extension().generic_string() != ".json") {
|
||||
continue;
|
||||
@ -108,7 +108,7 @@ bool ThemeManager::loadTheme(std::string path) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
thm.data = data;
|
||||
themes[name] = thm;
|
||||
|
||||
@ -134,7 +134,7 @@ bool ThemeManager::applyTheme(std::string name) {
|
||||
|
||||
ImVec4* colors = style.Colors;
|
||||
Theme thm = themes[name];
|
||||
|
||||
|
||||
uint8_t ret[4];
|
||||
std::map<std::string, std::string> params = thm.data;
|
||||
for (auto const& [param, val] : params) {
|
||||
@ -142,20 +142,20 @@ bool ThemeManager::applyTheme(std::string name) {
|
||||
|
||||
if (param == "WaterfallBackground") {
|
||||
decodeRGBA(val, ret);
|
||||
waterfallBg = ImVec4((float)ret[0]/255.0f, (float)ret[1]/255.0f, (float)ret[2]/255.0f, (float)ret[3]/255.0f);
|
||||
waterfallBg = ImVec4((float)ret[0] / 255.0f, (float)ret[1] / 255.0f, (float)ret[2] / 255.0f, (float)ret[3] / 255.0f);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (param == "ClearColor") {
|
||||
decodeRGBA(val, ret);
|
||||
clearColor = ImVec4((float)ret[0]/255.0f, (float)ret[1]/255.0f, (float)ret[2]/255.0f, (float)ret[3]/255.0f);
|
||||
clearColor = ImVec4((float)ret[0] / 255.0f, (float)ret[1] / 255.0f, (float)ret[2] / 255.0f, (float)ret[3] / 255.0f);
|
||||
continue;
|
||||
}
|
||||
|
||||
// If param is a color, check that it's a valid RGBA hex value
|
||||
if (IMGUI_COL_IDS.find(param) != IMGUI_COL_IDS.end()) {
|
||||
decodeRGBA(val, ret);
|
||||
colors[IMGUI_COL_IDS[param]] = ImVec4((float)ret[0]/255.0f, (float)ret[1]/255.0f, (float)ret[2]/255.0f, (float)ret[3]/255.0f);
|
||||
colors[IMGUI_COL_IDS[param]] = ImVec4((float)ret[0] / 255.0f, (float)ret[1] / 255.0f, (float)ret[2] / 255.0f, (float)ret[3] / 255.0f);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -181,57 +181,57 @@ std::vector<std::string> ThemeManager::getThemeNames() {
|
||||
}
|
||||
|
||||
std::map<std::string, int> ThemeManager::IMGUI_COL_IDS = {
|
||||
{"Text", ImGuiCol_Text},
|
||||
{"TextDisabled", ImGuiCol_TextDisabled},
|
||||
{"WindowBg", ImGuiCol_WindowBg},
|
||||
{"ChildBg", ImGuiCol_ChildBg},
|
||||
{"PopupBg", ImGuiCol_PopupBg},
|
||||
{"Border", ImGuiCol_Border},
|
||||
{"BorderShadow", ImGuiCol_BorderShadow},
|
||||
{"FrameBg", ImGuiCol_FrameBg},
|
||||
{"FrameBgHovered", ImGuiCol_FrameBgHovered},
|
||||
{"FrameBgActive", ImGuiCol_FrameBgActive},
|
||||
{"TitleBg", ImGuiCol_TitleBg},
|
||||
{"TitleBgActive", ImGuiCol_TitleBgActive},
|
||||
{"TitleBgCollapsed", ImGuiCol_TitleBgCollapsed},
|
||||
{"MenuBarBg", ImGuiCol_MenuBarBg},
|
||||
{"ScrollbarBg", ImGuiCol_ScrollbarBg},
|
||||
{"ScrollbarGrab", ImGuiCol_ScrollbarGrab},
|
||||
{"ScrollbarGrabHovered", ImGuiCol_ScrollbarGrabHovered},
|
||||
{"ScrollbarGrabActive", ImGuiCol_ScrollbarGrabActive},
|
||||
{"CheckMark", ImGuiCol_CheckMark},
|
||||
{"SliderGrab", ImGuiCol_SliderGrab},
|
||||
{"SliderGrabActive", ImGuiCol_SliderGrabActive},
|
||||
{"Button", ImGuiCol_Button},
|
||||
{"ButtonHovered", ImGuiCol_ButtonHovered},
|
||||
{"ButtonActive", ImGuiCol_ButtonActive},
|
||||
{"Header", ImGuiCol_Header},
|
||||
{"HeaderHovered", ImGuiCol_HeaderHovered},
|
||||
{"HeaderActive", ImGuiCol_HeaderActive},
|
||||
{"Separator", ImGuiCol_Separator},
|
||||
{"SeparatorHovered", ImGuiCol_SeparatorHovered},
|
||||
{"SeparatorActive", ImGuiCol_SeparatorActive},
|
||||
{"ResizeGrip", ImGuiCol_ResizeGrip},
|
||||
{"ResizeGripHovered", ImGuiCol_ResizeGripHovered},
|
||||
{"ResizeGripActive", ImGuiCol_ResizeGripActive},
|
||||
{"Tab", ImGuiCol_Tab},
|
||||
{"TabHovered", ImGuiCol_TabHovered},
|
||||
{"TabActive", ImGuiCol_TabActive},
|
||||
{"TabUnfocused", ImGuiCol_TabUnfocused},
|
||||
{"TabUnfocusedActive", ImGuiCol_TabUnfocusedActive},
|
||||
{"PlotLines", ImGuiCol_PlotLines},
|
||||
{"PlotLinesHovered", ImGuiCol_PlotLinesHovered},
|
||||
{"PlotHistogram", ImGuiCol_PlotHistogram},
|
||||
{"PlotHistogramHovered", ImGuiCol_PlotHistogramHovered},
|
||||
{"TableHeaderBg", ImGuiCol_TableHeaderBg},
|
||||
{"TableBorderStrong", ImGuiCol_TableBorderStrong},
|
||||
{"TableBorderLight", ImGuiCol_TableBorderLight},
|
||||
{"TableRowBg", ImGuiCol_TableRowBg},
|
||||
{"TableRowBgAlt", ImGuiCol_TableRowBgAlt},
|
||||
{"TextSelectedBg", ImGuiCol_TextSelectedBg},
|
||||
{"DragDropTarget", ImGuiCol_DragDropTarget},
|
||||
{"NavHighlight", ImGuiCol_NavHighlight},
|
||||
{"NavWindowingHighlight", ImGuiCol_NavWindowingHighlight},
|
||||
{"NavWindowingDimBg", ImGuiCol_NavWindowingDimBg},
|
||||
{"ModalWindowDimBg", ImGuiCol_ModalWindowDimBg}
|
||||
{ "Text", ImGuiCol_Text },
|
||||
{ "TextDisabled", ImGuiCol_TextDisabled },
|
||||
{ "WindowBg", ImGuiCol_WindowBg },
|
||||
{ "ChildBg", ImGuiCol_ChildBg },
|
||||
{ "PopupBg", ImGuiCol_PopupBg },
|
||||
{ "Border", ImGuiCol_Border },
|
||||
{ "BorderShadow", ImGuiCol_BorderShadow },
|
||||
{ "FrameBg", ImGuiCol_FrameBg },
|
||||
{ "FrameBgHovered", ImGuiCol_FrameBgHovered },
|
||||
{ "FrameBgActive", ImGuiCol_FrameBgActive },
|
||||
{ "TitleBg", ImGuiCol_TitleBg },
|
||||
{ "TitleBgActive", ImGuiCol_TitleBgActive },
|
||||
{ "TitleBgCollapsed", ImGuiCol_TitleBgCollapsed },
|
||||
{ "MenuBarBg", ImGuiCol_MenuBarBg },
|
||||
{ "ScrollbarBg", ImGuiCol_ScrollbarBg },
|
||||
{ "ScrollbarGrab", ImGuiCol_ScrollbarGrab },
|
||||
{ "ScrollbarGrabHovered", ImGuiCol_ScrollbarGrabHovered },
|
||||
{ "ScrollbarGrabActive", ImGuiCol_ScrollbarGrabActive },
|
||||
{ "CheckMark", ImGuiCol_CheckMark },
|
||||
{ "SliderGrab", ImGuiCol_SliderGrab },
|
||||
{ "SliderGrabActive", ImGuiCol_SliderGrabActive },
|
||||
{ "Button", ImGuiCol_Button },
|
||||
{ "ButtonHovered", ImGuiCol_ButtonHovered },
|
||||
{ "ButtonActive", ImGuiCol_ButtonActive },
|
||||
{ "Header", ImGuiCol_Header },
|
||||
{ "HeaderHovered", ImGuiCol_HeaderHovered },
|
||||
{ "HeaderActive", ImGuiCol_HeaderActive },
|
||||
{ "Separator", ImGuiCol_Separator },
|
||||
{ "SeparatorHovered", ImGuiCol_SeparatorHovered },
|
||||
{ "SeparatorActive", ImGuiCol_SeparatorActive },
|
||||
{ "ResizeGrip", ImGuiCol_ResizeGrip },
|
||||
{ "ResizeGripHovered", ImGuiCol_ResizeGripHovered },
|
||||
{ "ResizeGripActive", ImGuiCol_ResizeGripActive },
|
||||
{ "Tab", ImGuiCol_Tab },
|
||||
{ "TabHovered", ImGuiCol_TabHovered },
|
||||
{ "TabActive", ImGuiCol_TabActive },
|
||||
{ "TabUnfocused", ImGuiCol_TabUnfocused },
|
||||
{ "TabUnfocusedActive", ImGuiCol_TabUnfocusedActive },
|
||||
{ "PlotLines", ImGuiCol_PlotLines },
|
||||
{ "PlotLinesHovered", ImGuiCol_PlotLinesHovered },
|
||||
{ "PlotHistogram", ImGuiCol_PlotHistogram },
|
||||
{ "PlotHistogramHovered", ImGuiCol_PlotHistogramHovered },
|
||||
{ "TableHeaderBg", ImGuiCol_TableHeaderBg },
|
||||
{ "TableBorderStrong", ImGuiCol_TableBorderStrong },
|
||||
{ "TableBorderLight", ImGuiCol_TableBorderLight },
|
||||
{ "TableRowBg", ImGuiCol_TableRowBg },
|
||||
{ "TableRowBgAlt", ImGuiCol_TableRowBgAlt },
|
||||
{ "TextSelectedBg", ImGuiCol_TextSelectedBg },
|
||||
{ "DragDropTarget", ImGuiCol_DragDropTarget },
|
||||
{ "NavHighlight", ImGuiCol_NavHighlight },
|
||||
{ "NavWindowingHighlight", ImGuiCol_NavWindowingHighlight },
|
||||
{ "NavWindowingDimBg", ImGuiCol_NavWindowingDimBg },
|
||||
{ "ModalWindowDimBg", ImGuiCol_ModalWindowDimBg }
|
||||
};
|
@ -20,7 +20,8 @@ public:
|
||||
|
||||
std::vector<std::string> getThemeNames();
|
||||
|
||||
ImVec4 waterfallBg = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);;
|
||||
ImVec4 waterfallBg = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
;
|
||||
ImVec4 clearColor = ImVec4(0.0666f, 0.0666f, 0.0666f, 1.0f);
|
||||
|
||||
private:
|
||||
@ -29,5 +30,4 @@ private:
|
||||
static std::map<std::string, int> IMGUI_COL_IDS;
|
||||
|
||||
std::map<std::string, Theme> themes;
|
||||
|
||||
};
|
@ -31,7 +31,7 @@ namespace tuner {
|
||||
|
||||
ImGui::WaterfallVFO* vfo = gui::waterfall.vfos[vfoName];
|
||||
|
||||
double currentOff = vfo->centerOffset;
|
||||
double currentOff = vfo->centerOffset;
|
||||
double currentTune = gui::waterfall.getCenterFrequency() + vfo->generalOffset;
|
||||
double delta = freq - currentTune;
|
||||
|
||||
@ -119,21 +119,21 @@ namespace tuner {
|
||||
|
||||
void tune(int mode, std::string vfoName, double freq) {
|
||||
switch (mode) {
|
||||
case TUNER_MODE_CENTER:
|
||||
centerTuning(vfoName, freq);
|
||||
break;
|
||||
case TUNER_MODE_NORMAL:
|
||||
normalTuning(vfoName, freq);
|
||||
break;
|
||||
case TUNER_MODE_LOWER_HALF:
|
||||
normalTuning(vfoName, freq);
|
||||
break;
|
||||
case TUNER_MODE_UPPER_HALF:
|
||||
normalTuning(vfoName, freq);
|
||||
break;
|
||||
case TUNER_MODE_IQ_ONLY:
|
||||
iqTuning(freq);
|
||||
break;
|
||||
case TUNER_MODE_CENTER:
|
||||
centerTuning(vfoName, freq);
|
||||
break;
|
||||
case TUNER_MODE_NORMAL:
|
||||
normalTuning(vfoName, freq);
|
||||
break;
|
||||
case TUNER_MODE_LOWER_HALF:
|
||||
normalTuning(vfoName, freq);
|
||||
break;
|
||||
case TUNER_MODE_UPPER_HALF:
|
||||
normalTuning(vfoName, freq);
|
||||
break;
|
||||
case TUNER_MODE_IQ_ONLY:
|
||||
iqTuning(freq);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
@ -21,10 +21,10 @@ namespace bandplan {
|
||||
|
||||
void to_json(json& j, const Band_t& b) {
|
||||
j = json{
|
||||
{"name", b.name},
|
||||
{"type", b.type},
|
||||
{"start", b.start},
|
||||
{"end", b.end},
|
||||
{ "name", b.name },
|
||||
{ "type", b.type },
|
||||
{ "start", b.start },
|
||||
{ "end", b.end },
|
||||
};
|
||||
}
|
||||
|
||||
@ -37,12 +37,12 @@ namespace bandplan {
|
||||
|
||||
void to_json(json& j, const BandPlan_t& b) {
|
||||
j = json{
|
||||
{"name", b.name},
|
||||
{"country_name", b.countryName},
|
||||
{"country_code", b.countryCode},
|
||||
{"author_name", b.authorName},
|
||||
{"author_url", b.authorURL},
|
||||
{"bands", b.bands}
|
||||
{ "name", b.name },
|
||||
{ "country_name", b.countryName },
|
||||
{ "country_code", b.countryCode },
|
||||
{ "author_name", b.authorName },
|
||||
{ "author_url", b.authorURL },
|
||||
{ "bands", b.bands }
|
||||
};
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ namespace bandplan {
|
||||
void to_json(json& j, const BandPlanColor_t& ct) {
|
||||
spdlog::error("ImGui color to JSON not implemented!!!");
|
||||
}
|
||||
|
||||
|
||||
void from_json(const json& j, BandPlanColor_t& ct) {
|
||||
std::string col = j.get<std::string>();
|
||||
if (col[0] != '#' || !std::all_of(col.begin() + 1, col.end(), ::isxdigit)) {
|
||||
@ -99,7 +99,7 @@ namespace bandplan {
|
||||
return;
|
||||
}
|
||||
bandplans.clear();
|
||||
for (const auto & file : std::filesystem::directory_iterator(path)) {
|
||||
for (const auto& file : std::filesystem::directory_iterator(path)) {
|
||||
std::string path = file.path().generic_string();
|
||||
if (file.path().extension().generic_string() != ".json") {
|
||||
continue;
|
||||
|
@ -35,7 +35,7 @@ namespace bandplan {
|
||||
|
||||
void to_json(json& j, const BandPlanColor_t& ct);
|
||||
void from_json(const json& j, BandPlanColor_t& ct);
|
||||
|
||||
|
||||
void loadBandPlan(std::string path);
|
||||
void loadFromDir(std::string path);
|
||||
void loadColorTable(json table);
|
||||
|
@ -12,7 +12,7 @@ namespace ImGui {
|
||||
float pad = style.FramePadding.y;
|
||||
ImVec2 min = window->DC.CursorPos;
|
||||
ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), CalcItemWidth());
|
||||
ImRect bb(min, ImVec2(min.x+size.x, min.y+size.y));
|
||||
ImRect bb(min, ImVec2(min.x + size.x, min.y + size.y));
|
||||
float lineHeight = size.y;
|
||||
|
||||
ItemSize(size, style.FramePadding.y);
|
||||
@ -20,13 +20,13 @@ namespace ImGui {
|
||||
return;
|
||||
}
|
||||
|
||||
window->DrawList->AddRectFilled(min, ImVec2(min.x+size.x, min.y+size.y), IM_COL32(0,0,0,255));
|
||||
window->DrawList->AddRectFilled(min, ImVec2(min.x + size.x, min.y + size.y), IM_COL32(0, 0, 0, 255));
|
||||
ImU32 col = ImGui::GetColorU32(ImGuiCol_CheckMark, 0.7f);
|
||||
float increment = size.x / 1024.0f;
|
||||
for (int i = 0; i < 1024; i++) {
|
||||
if (buffer[i].re > 1.5f || buffer[i].re < -1.5f) { continue; }
|
||||
if (buffer[i].im > 1.5f || buffer[i].im < -1.5f) { continue; }
|
||||
window->DrawList->AddCircleFilled(ImVec2((((buffer[i].re / 1.5f) + 1) * (size.x*0.5f)) + min.x, (((buffer[i].im / 1.5f) + 1) * (size.y*0.5f)) + min.y), 2, col);
|
||||
window->DrawList->AddCircleFilled(ImVec2((((buffer[i].re / 1.5f) + 1) * (size.x * 0.5f)) + min.x, (((buffer[i].im / 1.5f) + 1) * (size.y * 0.5f)) + min.y), 2, col);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,5 @@ namespace ImGui {
|
||||
private:
|
||||
std::mutex bufferMtx;
|
||||
dsp::complex_t buffer[1024];
|
||||
|
||||
};
|
||||
}
|
@ -39,7 +39,7 @@ bool FileSelect::render(std::string id) {
|
||||
if (workerThread.joinable()) { workerThread.join(); }
|
||||
workerThread = std::thread(&FileSelect::worker, this);
|
||||
}
|
||||
|
||||
|
||||
_pathChanged |= pathChanged;
|
||||
pathChanged = false;
|
||||
return _pathChanged;
|
||||
@ -63,15 +63,15 @@ bool FileSelect::pathIsValid() {
|
||||
}
|
||||
|
||||
void FileSelect::worker() {
|
||||
auto file = pfd::open_file("Open File", pathValid ? std::filesystem::path(expandString(path)).parent_path().string() : "", _filter);
|
||||
std::vector<std::string> res = file.result();
|
||||
auto file = pfd::open_file("Open File", pathValid ? std::filesystem::path(expandString(path)).parent_path().string() : "", _filter);
|
||||
std::vector<std::string> res = file.result();
|
||||
|
||||
if (res.size() > 0) {
|
||||
path = res[0];
|
||||
strcpy(strPath, path.c_str());
|
||||
pathChanged = true;
|
||||
}
|
||||
if (res.size() > 0) {
|
||||
path = res[0];
|
||||
strcpy(strPath, path.c_str());
|
||||
pathChanged = true;
|
||||
}
|
||||
|
||||
pathValid = std::filesystem::is_regular_file(expandString(path));
|
||||
dialogOpen = false;
|
||||
pathValid = std::filesystem::is_regular_file(expandString(path));
|
||||
dialogOpen = false;
|
||||
}
|
@ -8,7 +8,7 @@
|
||||
|
||||
class FileSelect {
|
||||
public:
|
||||
FileSelect(std::string defaultPath, std::vector<std::string> filter = {"All Files", "*"});
|
||||
FileSelect(std::string defaultPath, std::vector<std::string> filter = { "All Files", "*" });
|
||||
bool render(std::string id);
|
||||
void setPath(std::string path, bool markChanged = false);
|
||||
bool pathIsValid();
|
||||
@ -16,7 +16,7 @@ public:
|
||||
std::string expandString(std::string input);
|
||||
|
||||
std::string path = "";
|
||||
|
||||
|
||||
|
||||
private:
|
||||
void worker();
|
||||
|
@ -38,7 +38,7 @@ bool FolderSelect::render(std::string id) {
|
||||
if (workerThread.joinable()) { workerThread.join(); }
|
||||
workerThread = std::thread(&FolderSelect::worker, this);
|
||||
}
|
||||
|
||||
|
||||
_pathChanged |= pathChanged;
|
||||
pathChanged = false;
|
||||
return _pathChanged;
|
||||
@ -62,15 +62,15 @@ bool FolderSelect::pathIsValid() {
|
||||
}
|
||||
|
||||
void FolderSelect::worker() {
|
||||
auto fold = pfd::select_folder("Select Folder", pathValid ? std::filesystem::path(expandString(path)).parent_path().string() : "");
|
||||
std::string res = fold.result();
|
||||
auto fold = pfd::select_folder("Select Folder", pathValid ? std::filesystem::path(expandString(path)).parent_path().string() : "");
|
||||
std::string res = fold.result();
|
||||
|
||||
if (res != "") {
|
||||
path = res;
|
||||
strcpy(strPath, path.c_str());
|
||||
pathChanged = true;
|
||||
}
|
||||
if (res != "") {
|
||||
path = res;
|
||||
strcpy(strPath, path.c_str());
|
||||
pathChanged = true;
|
||||
}
|
||||
|
||||
pathValid = std::filesystem::is_directory(expandString(path));
|
||||
dialogOpen = false;
|
||||
pathValid = std::filesystem::is_directory(expandString(path));
|
||||
dialogOpen = false;
|
||||
}
|
@ -15,7 +15,7 @@ public:
|
||||
std::string expandString(std::string input);
|
||||
|
||||
std::string path = "";
|
||||
|
||||
|
||||
|
||||
private:
|
||||
void worker();
|
||||
|
@ -15,13 +15,11 @@ bool isInArea(ImVec2 val, ImVec2 min, ImVec2 max) {
|
||||
}
|
||||
|
||||
FrequencySelect::FrequencySelect() {
|
||||
|
||||
}
|
||||
|
||||
void FrequencySelect::init() {
|
||||
for (int i = 0; i < 12; i++) {
|
||||
digits[i] = 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,7 +43,6 @@ void FrequencySelect::onPosChange() {
|
||||
}
|
||||
|
||||
void FrequencySelect::onResize() {
|
||||
|
||||
}
|
||||
|
||||
void FrequencySelect::incrementDigit(int i) {
|
||||
@ -126,7 +123,7 @@ void FrequencySelect::draw() {
|
||||
int digitWidth = digitSz.x;
|
||||
int commaOffset = 0;
|
||||
bool zeros = true;
|
||||
|
||||
|
||||
ImGui::ItemSize(ImRect(digitTopMins[0], ImVec2(digitBottomMaxs[11].x + 15, digitBottomMaxs[11].y)));
|
||||
|
||||
for (int i = 0; i < 12; i++) {
|
||||
@ -134,12 +131,12 @@ void FrequencySelect::draw() {
|
||||
zeros = false;
|
||||
}
|
||||
sprintf(buf, "%d", digits[i]);
|
||||
window->DrawList->AddText(ImVec2(widgetPos.x + (i * digitWidth) + commaOffset, widgetPos.y),
|
||||
zeros ? disabledColor : textColor, buf);
|
||||
window->DrawList->AddText(ImVec2(widgetPos.x + (i * digitWidth) + commaOffset, widgetPos.y),
|
||||
zeros ? disabledColor : textColor, buf);
|
||||
if ((i + 1) % 3 == 0 && i < 11) {
|
||||
commaOffset += commaSz.x;
|
||||
window->DrawList->AddText(ImVec2(widgetPos.x + (i * digitWidth) + commaOffset + 11, widgetPos.y),
|
||||
zeros ? disabledColor : textColor, ".");
|
||||
window->DrawList->AddText(ImVec2(widgetPos.x + (i * digitWidth) + commaOffset + 11, widgetPos.y),
|
||||
zeros ? disabledColor : textColor, ".");
|
||||
}
|
||||
}
|
||||
|
||||
@ -183,7 +180,7 @@ void FrequencySelect::draw() {
|
||||
decrementDigit(i);
|
||||
}
|
||||
if ((ImGui::IsKeyPressed(GLFW_KEY_LEFT) || ImGui::IsKeyPressed(GLFW_KEY_BACKSPACE)) && i > 0) {
|
||||
moveCursorToDigit(i - 1);
|
||||
moveCursorToDigit(i - 1);
|
||||
}
|
||||
if (ImGui::IsKeyPressed(GLFW_KEY_RIGHT) && i < 11) {
|
||||
moveCursorToDigit(i + 1);
|
||||
|
@ -30,7 +30,7 @@ namespace ImGui {
|
||||
float height = roundf((width / (float)_width) * (float)_height);
|
||||
|
||||
ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), height);
|
||||
ImRect bb(min, ImVec2(min.x+size.x, min.y+size.y));
|
||||
ImRect bb(min, ImVec2(min.x + size.x, min.y + size.y));
|
||||
float lineHeight = size.y;
|
||||
|
||||
ItemSize(size, style.FramePadding.y);
|
||||
@ -42,7 +42,7 @@ namespace ImGui {
|
||||
newData = false;
|
||||
updateTexture();
|
||||
}
|
||||
|
||||
|
||||
window->DrawList->AddImage((void*)(intptr_t)textureId, min, ImVec2(min.x + width, min.y + height));
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,5 @@ namespace ImGui {
|
||||
GLuint textureId;
|
||||
|
||||
bool newData = false;
|
||||
|
||||
};
|
||||
}
|
@ -23,7 +23,7 @@ namespace ImGui {
|
||||
float height = roundf((width / (float)_frameWidth) * (float)_lineCount);
|
||||
|
||||
ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), height);
|
||||
ImRect bb(min, ImVec2(min.x+size.x, min.y+size.y));
|
||||
ImRect bb(min, ImVec2(min.x + size.x, min.y + size.y));
|
||||
float lineHeight = size.y;
|
||||
|
||||
// If there are no lines, there is no point in drawing anything
|
||||
@ -38,7 +38,7 @@ namespace ImGui {
|
||||
newData = false;
|
||||
updateTexture();
|
||||
}
|
||||
|
||||
|
||||
window->DrawList->AddImage((void*)(intptr_t)textureId, min, ImVec2(min.x + width, min.y + height));
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,5 @@ namespace ImGui {
|
||||
GLuint textureId;
|
||||
|
||||
bool newData = false;
|
||||
|
||||
|
||||
};
|
||||
}
|
@ -4,7 +4,6 @@
|
||||
#include <gui/style.h>
|
||||
|
||||
Menu::Menu() {
|
||||
|
||||
}
|
||||
|
||||
void Menu::registerEntry(std::string name, void (*drawHandler)(void* ctx), void* ctx, ModuleManager::Instance* inst) {
|
||||
@ -67,9 +66,9 @@ bool Menu::draw(bool updateStates) {
|
||||
window->DrawList->AddRect(posMin, posMax, textColor);
|
||||
}
|
||||
displayedCount++;
|
||||
|
||||
|
||||
MenuItem_t& item = items[opt.name];
|
||||
|
||||
|
||||
|
||||
ImRect orginalRect = window->WorkRect;
|
||||
if (item.inst != NULL) {
|
||||
@ -79,8 +78,8 @@ bool Menu::draw(bool updateStates) {
|
||||
ImVec2 posMin = ImGui::GetCursorScreenPos();
|
||||
ImVec2 posMax = ImVec2(posMin.x + menuWidth, posMin.y + ImGui::GetFrameHeight());
|
||||
|
||||
headerTops[displayedCount-1] = posMin.y;
|
||||
optionIDs[displayedCount-1] = rawId-1;
|
||||
headerTops[displayedCount - 1] = posMin.y;
|
||||
optionIDs[displayedCount - 1] = rawId - 1;
|
||||
|
||||
if (ImGui::IsMouseClicked(ImGuiMouseButton_Left) && ImGui::IsMouseHoveringRect(posMin, posMax)) {
|
||||
menuClicked = true;
|
||||
@ -89,7 +88,7 @@ bool Menu::draw(bool updateStates) {
|
||||
|
||||
if (menuClicked && ImGui::IsMouseDragging(ImGuiMouseButton_Left) && draggedMenuName.empty() && clickedMenuName == opt.name) {
|
||||
draggedMenuName = opt.name;
|
||||
draggedId = rawId-1;
|
||||
draggedId = rawId - 1;
|
||||
draggedOpt = opt;
|
||||
continue;
|
||||
}
|
||||
@ -142,7 +141,7 @@ bool Menu::draw(bool updateStates) {
|
||||
}
|
||||
|
||||
if (!ImGui::IsMouseDown(ImGuiMouseButton_Left) && menuClicked) {
|
||||
|
||||
|
||||
if (!draggedMenuName.empty()) {
|
||||
// Move menu
|
||||
order.erase(order.begin() + draggedId);
|
||||
@ -162,7 +161,7 @@ bool Menu::draw(bool updateStates) {
|
||||
}
|
||||
changed = true;
|
||||
}
|
||||
|
||||
|
||||
menuClicked = false;
|
||||
draggedMenuName = "";
|
||||
insertBeforeName = "";
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include <map>
|
||||
#include <module.h>
|
||||
|
||||
#define MAX_MENU_COUNT 1024
|
||||
#define MAX_MENU_COUNT 1024
|
||||
|
||||
class Menu {
|
||||
public:
|
||||
|
@ -39,7 +39,7 @@ namespace ImGui {
|
||||
window->DrawList->AddLine(min + ImVec2(roundf((float)i * it), 9), min + ImVec2(roundf((float)i * it), 14), text);
|
||||
sprintf(buf, "%d", i * 10);
|
||||
ImVec2 sz = ImGui::CalcTextSize(buf);
|
||||
window->DrawList->AddText(min + ImVec2(roundf(((float)i * it) - (sz.x/2.0)) + 1, 16), text, buf);
|
||||
window->DrawList->AddText(min + ImVec2(roundf(((float)i * it) - (sz.x / 2.0)) + 1, 16), text, buf);
|
||||
}
|
||||
}
|
||||
}
|
@ -13,8 +13,8 @@ namespace ImGui {
|
||||
ImFormatString(text_buf, IM_ARRAYSIZE(text_buf), display_format, *v);
|
||||
|
||||
// Map from [v_min,v_max] to [0,N]
|
||||
const int countValues = int((v_max-v_min)/v_step);
|
||||
int v_i = int((*v - v_min)/v_step);
|
||||
const int countValues = int((v_max - v_min) / v_step);
|
||||
int v_i = int((*v - v_min) / v_step);
|
||||
bool value_changed = ImGui::SliderInt(label, &v_i, 0, countValues, text_buf);
|
||||
|
||||
// Remap from [0,N] to [v_min,v_max]
|
||||
|
@ -21,7 +21,7 @@ namespace ImGui {
|
||||
float pad = style.FramePadding.y;
|
||||
ImVec2 min = window->DC.CursorPos;
|
||||
ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), 100);
|
||||
ImRect bb(min, ImVec2(min.x+size.x, min.y+size.y));
|
||||
ImRect bb(min, ImVec2(min.x + size.x, min.y + size.y));
|
||||
float lineHeight = size.y;
|
||||
|
||||
ItemSize(size, style.FramePadding.y);
|
||||
@ -29,20 +29,20 @@ namespace ImGui {
|
||||
return;
|
||||
}
|
||||
|
||||
window->DrawList->AddRectFilled(min, ImVec2(min.x+size.x, min.y+size.y), IM_COL32(0,0,0,255));
|
||||
window->DrawList->AddRectFilled(min, ImVec2(min.x + size.x, min.y + size.y), IM_COL32(0, 0, 0, 255));
|
||||
ImU32 col = ImGui::GetColorU32(ImGuiCol_CheckMark, 0.7f);
|
||||
ImU32 col2 = ImGui::GetColorU32(ImGuiCol_CheckMark, 0.7f);
|
||||
float increment = size.x / (float)sampleCount;
|
||||
float val;
|
||||
|
||||
for (auto l : lines) {
|
||||
window->DrawList->AddLine(ImVec2(min.x, (((l * _scale) + 1) * (size.y*0.5f)) + min.y), ImVec2(min.x + size.x, (((l * _scale) + 1) * (size.y*0.5f)) + min.y), IM_COL32(80, 80, 80, 255));
|
||||
window->DrawList->AddLine(ImVec2(min.x, (((l * _scale) + 1) * (size.y * 0.5f)) + min.y), ImVec2(min.x + size.x, (((l * _scale) + 1) * (size.y * 0.5f)) + min.y), IM_COL32(80, 80, 80, 255));
|
||||
}
|
||||
|
||||
for (int i = 0; i < sampleCount; i++) {
|
||||
val = buffer[i] * _scale;
|
||||
if (val > 1.0f || val < -1.0f) { continue; }
|
||||
window->DrawList->AddCircleFilled(ImVec2(((float)i * increment) + min.x, ((val + 1) * (size.y*0.5f)) + min.y), 2, col);
|
||||
window->DrawList->AddCircleFilled(ImVec2(((float)i * increment) + min.x, ((val + 1) * (size.y * 0.5f)) + min.y), 2, col);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,5 @@ namespace ImGui {
|
||||
float* buffer;
|
||||
float _scale;
|
||||
int sampleCount = 0;
|
||||
|
||||
};
|
||||
}
|
@ -29,25 +29,25 @@ namespace ImGui {
|
||||
|
||||
float zeroDb = roundf(((-val_min) / (val_max - val_min)) * size.x);
|
||||
|
||||
window->DrawList->AddRectFilled(min, min + ImVec2(zeroDb, lineHeight), IM_COL32( 9, 136, 9, 255 ));
|
||||
window->DrawList->AddRectFilled(min + ImVec2(zeroDb, 0), min + ImVec2(size.x, lineHeight), IM_COL32( 136, 9, 9, 255 ));
|
||||
window->DrawList->AddRectFilled(min, min + ImVec2(zeroDb, lineHeight), IM_COL32(9, 136, 9, 255));
|
||||
window->DrawList->AddRectFilled(min + ImVec2(zeroDb, 0), min + ImVec2(size.x, lineHeight), IM_COL32(136, 9, 9, 255));
|
||||
|
||||
float end = roundf(((avg - val_min) / (val_max - val_min)) * size.x);
|
||||
float endP = roundf(((peak - val_min) / (val_max - val_min)) * size.x);
|
||||
|
||||
if (avg <= 0) {
|
||||
window->DrawList->AddRectFilled(min, min + ImVec2(end, lineHeight), IM_COL32( 0, 255, 0, 255 ));
|
||||
window->DrawList->AddRectFilled(min, min + ImVec2(end, lineHeight), IM_COL32(0, 255, 0, 255));
|
||||
}
|
||||
else {
|
||||
window->DrawList->AddRectFilled(min, min + ImVec2(zeroDb, lineHeight), IM_COL32( 0, 255, 0, 255 ));
|
||||
window->DrawList->AddRectFilled(min + ImVec2(zeroDb, 0), min + ImVec2(end, lineHeight), IM_COL32( 255, 0, 0, 255 ));
|
||||
window->DrawList->AddRectFilled(min, min + ImVec2(zeroDb, lineHeight), IM_COL32(0, 255, 0, 255));
|
||||
window->DrawList->AddRectFilled(min + ImVec2(zeroDb, 0), min + ImVec2(end, lineHeight), IM_COL32(255, 0, 0, 255));
|
||||
}
|
||||
|
||||
if (peak <= 0) {
|
||||
window->DrawList->AddLine(min + ImVec2(endP, -1), min + ImVec2(endP, lineHeight - 1), IM_COL32( 127, 255, 127, 255 ));
|
||||
window->DrawList->AddLine(min + ImVec2(endP, -1), min + ImVec2(endP, lineHeight - 1), IM_COL32(127, 255, 127, 255));
|
||||
}
|
||||
else {
|
||||
window->DrawList->AddLine(min + ImVec2(endP, -1), min + ImVec2(endP, lineHeight - 1), IM_COL32( 255, 127, 127, 255 ));
|
||||
window->DrawList->AddLine(min + ImVec2(endP, -1), min + ImVec2(endP, lineHeight - 1), IM_COL32(255, 127, 127, 255));
|
||||
}
|
||||
}
|
||||
}
|
@ -10,32 +10,32 @@
|
||||
#include <gui/gui.h>
|
||||
|
||||
float DEFAULT_COLOR_MAP[][3] = {
|
||||
{0x00, 0x00, 0x20},
|
||||
{0x00, 0x00, 0x30},
|
||||
{0x00, 0x00, 0x50},
|
||||
{0x00, 0x00, 0x91},
|
||||
{0x1E, 0x90, 0xFF},
|
||||
{0xFF, 0xFF, 0xFF},
|
||||
{0xFF, 0xFF, 0x00},
|
||||
{0xFE, 0x6D, 0x16},
|
||||
{0xFF, 0x00, 0x00},
|
||||
{0xC6, 0x00, 0x00},
|
||||
{0x9F, 0x00, 0x00},
|
||||
{0x75, 0x00, 0x00},
|
||||
{0x4A, 0x00, 0x00}
|
||||
{ 0x00, 0x00, 0x20 },
|
||||
{ 0x00, 0x00, 0x30 },
|
||||
{ 0x00, 0x00, 0x50 },
|
||||
{ 0x00, 0x00, 0x91 },
|
||||
{ 0x1E, 0x90, 0xFF },
|
||||
{ 0xFF, 0xFF, 0xFF },
|
||||
{ 0xFF, 0xFF, 0x00 },
|
||||
{ 0xFE, 0x6D, 0x16 },
|
||||
{ 0xFF, 0x00, 0x00 },
|
||||
{ 0xC6, 0x00, 0x00 },
|
||||
{ 0x9F, 0x00, 0x00 },
|
||||
{ 0x75, 0x00, 0x00 },
|
||||
{ 0x4A, 0x00, 0x00 }
|
||||
};
|
||||
|
||||
// TODO: Fix this hacky BS
|
||||
|
||||
double freq_ranges[] = {
|
||||
1.0, 2.0, 2.5, 5.0,
|
||||
10.0, 20.0, 25.0, 50.0,
|
||||
100.0, 200.0, 250.0, 500.0,
|
||||
1000.0, 2000.0, 2500.0, 5000.0,
|
||||
10000.0, 20000.0, 25000.0, 50000.0,
|
||||
100000.0, 200000.0, 250000.0, 500000.0,
|
||||
1000000.0, 2000000.0, 2500000.0, 5000000.0,
|
||||
10000000.0, 20000000.0, 25000000.0, 50000000.0
|
||||
1.0, 2.0, 2.5, 5.0,
|
||||
10.0, 20.0, 25.0, 50.0,
|
||||
100.0, 200.0, 250.0, 500.0,
|
||||
1000.0, 2000.0, 2500.0, 5000.0,
|
||||
10000.0, 20000.0, 25000.0, 50000.0,
|
||||
100000.0, 200000.0, 250000.0, 500000.0,
|
||||
1000000.0, 2000000.0, 2500000.0, 5000000.0,
|
||||
10000000.0, 20000000.0, 25000000.0, 50000000.0
|
||||
};
|
||||
|
||||
inline double findBestRange(double bandwidth, int maxSteps) {
|
||||
@ -104,9 +104,9 @@ namespace ImGui {
|
||||
// Vertical scale
|
||||
for (float line = startLine; line > fftMin; line -= vRange) {
|
||||
float yPos = widgetPos.y + fftHeight + 10 - ((line - fftMin) * scaleFactor);
|
||||
window->DrawList->AddLine(ImVec2(roundf(widgetPos.x + 50), roundf(yPos)),
|
||||
ImVec2(roundf(widgetPos.x + dataWidth + 50), roundf(yPos)),
|
||||
IM_COL32(50, 50, 50, 255), 1.0);
|
||||
window->DrawList->AddLine(ImVec2(roundf(widgetPos.x + 50), roundf(yPos)),
|
||||
ImVec2(roundf(widgetPos.x + dataWidth + 50), roundf(yPos)),
|
||||
IM_COL32(50, 50, 50, 255), 1.0);
|
||||
sprintf(buf, "%d", (int)line);
|
||||
ImVec2 txtSz = ImGui::CalcTextSize(buf);
|
||||
window->DrawList->AddText(ImVec2(widgetPos.x + 40 - txtSz.x, roundf(yPos - (txtSz.y / 2.0))), text, buf);
|
||||
@ -117,12 +117,12 @@ namespace ImGui {
|
||||
double horizScale = (double)dataWidth / viewBandwidth;
|
||||
for (double freq = startFreq; freq < upperFreq; freq += range) {
|
||||
double xPos = widgetPos.x + 50 + ((freq - lowerFreq) * horizScale);
|
||||
window->DrawList->AddLine(ImVec2(roundf(xPos), widgetPos.y + 10),
|
||||
ImVec2(roundf(xPos), widgetPos.y + fftHeight + 10),
|
||||
IM_COL32(50, 50, 50, 255), 1.0);
|
||||
window->DrawList->AddLine(ImVec2(roundf(xPos), widgetPos.y + fftHeight + 10),
|
||||
ImVec2(roundf(xPos), widgetPos.y + fftHeight + 17),
|
||||
text, 1.0);
|
||||
window->DrawList->AddLine(ImVec2(roundf(xPos), widgetPos.y + 10),
|
||||
ImVec2(roundf(xPos), widgetPos.y + fftHeight + 10),
|
||||
IM_COL32(50, 50, 50, 255), 1.0);
|
||||
window->DrawList->AddLine(ImVec2(roundf(xPos), widgetPos.y + fftHeight + 10),
|
||||
ImVec2(roundf(xPos), widgetPos.y + fftHeight + 17),
|
||||
text, 1.0);
|
||||
printAndScale(freq, buf);
|
||||
ImVec2 txtSz = ImGui::CalcTextSize(buf);
|
||||
window->DrawList->AddText(ImVec2(roundf(xPos - (txtSz.x / 2.0)), widgetPos.y + fftHeight + 10 + txtSz.y), text, buf);
|
||||
@ -130,15 +130,15 @@ namespace ImGui {
|
||||
|
||||
// Data
|
||||
if (latestFFT != NULL && fftLines != 0) {
|
||||
for (int i = 1; i < dataWidth; i++) {
|
||||
for (int i = 1; i < dataWidth; i++) {
|
||||
double aPos = widgetPos.y + fftHeight + 10 - ((latestFFT[i - 1] - fftMin) * scaleFactor);
|
||||
double bPos = widgetPos.y + fftHeight + 10 - ((latestFFT[i] - fftMin) * scaleFactor);
|
||||
aPos = std::clamp<double>(aPos, widgetPos.y + 10, widgetPos.y + fftHeight + 10);
|
||||
bPos = std::clamp<double>(bPos, widgetPos.y + 10, widgetPos.y + fftHeight + 10);
|
||||
window->DrawList->AddLine(ImVec2(widgetPos.x + 49 + i, roundf(aPos)),
|
||||
ImVec2(widgetPos.x + 50 + i, roundf(bPos)), trace, 1.0);
|
||||
window->DrawList->AddLine(ImVec2(widgetPos.x + 50 + i, roundf(bPos)),
|
||||
ImVec2(widgetPos.x + 50 + i, widgetPos.y + fftHeight + 10), shadow, 1.0);
|
||||
window->DrawList->AddLine(ImVec2(widgetPos.x + 49 + i, roundf(aPos)),
|
||||
ImVec2(widgetPos.x + 50 + i, roundf(bPos)), trace, 1.0);
|
||||
window->DrawList->AddLine(ImVec2(widgetPos.x + 50 + i, roundf(bPos)),
|
||||
ImVec2(widgetPos.x + 50 + i, widgetPos.y + fftHeight + 10), shadow, 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -153,13 +153,13 @@ namespace ImGui {
|
||||
onFFTRedraw.emit(args);
|
||||
|
||||
// X Axis
|
||||
window->DrawList->AddLine(ImVec2(widgetPos.x + 50, widgetPos.y + fftHeight + 10),
|
||||
ImVec2(widgetPos.x + dataWidth + 50, widgetPos.y + fftHeight + 10),
|
||||
text, 1.0);
|
||||
window->DrawList->AddLine(ImVec2(widgetPos.x + 50, widgetPos.y + fftHeight + 10),
|
||||
ImVec2(widgetPos.x + dataWidth + 50, widgetPos.y + fftHeight + 10),
|
||||
text, 1.0);
|
||||
// Y Axis
|
||||
window->DrawList->AddLine(ImVec2(widgetPos.x + 50, widgetPos.y + 9),
|
||||
ImVec2(widgetPos.x + 50, widgetPos.y + fftHeight + 9),
|
||||
text, 1.0);
|
||||
window->DrawList->AddLine(ImVec2(widgetPos.x + 50, widgetPos.y + 9),
|
||||
ImVec2(widgetPos.x + 50, widgetPos.y + fftHeight + 9),
|
||||
text, 1.0);
|
||||
}
|
||||
|
||||
void WaterFall::drawWaterfall() {
|
||||
@ -210,8 +210,8 @@ namespace ImGui {
|
||||
ImVec2 dragOrigin(mousePos.x - drag.x, mousePos.y - drag.y);
|
||||
|
||||
bool mouseHovered, mouseHeld;
|
||||
bool mouseClicked = ImGui::ButtonBehavior(ImRect(fftAreaMin, wfMax), GetID("WaterfallID"), &mouseHovered, &mouseHeld,
|
||||
ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_PressedOnClick);
|
||||
bool mouseClicked = ImGui::ButtonBehavior(ImRect(fftAreaMin, wfMax), GetID("WaterfallID"), &mouseHovered, &mouseHeld,
|
||||
ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_PressedOnClick);
|
||||
|
||||
mouseInFFTResize = (dragOrigin.x > widgetPos.x && dragOrigin.x < widgetPos.x + widgetSize.x && dragOrigin.y >= widgetPos.y + newFFTAreaHeight - 2 && dragOrigin.y <= widgetPos.y + newFFTAreaHeight + 2);
|
||||
mouseInFreq = IS_IN_AREA(dragOrigin, freqAreaMin, freqAreaMax);
|
||||
@ -268,12 +268,16 @@ namespace ImGui {
|
||||
bool resizing = false;
|
||||
if (_vfo->reference != REF_LOWER) {
|
||||
if (IS_IN_AREA(mousePos, _vfo->lbwSelMin, _vfo->lbwSelMax)) { resizing = true; }
|
||||
else if (IS_IN_AREA(mousePos, _vfo->wfLbwSelMin, _vfo->wfLbwSelMax)) { resizing = true; }
|
||||
else if (IS_IN_AREA(mousePos, _vfo->wfLbwSelMin, _vfo->wfLbwSelMax)) {
|
||||
resizing = true;
|
||||
}
|
||||
}
|
||||
if (_vfo->reference != REF_UPPER) {
|
||||
if (IS_IN_AREA(mousePos, _vfo->rbwSelMin, _vfo->rbwSelMax)) { resizing = true; }
|
||||
else if (IS_IN_AREA(mousePos, _vfo->wfRbwSelMin, _vfo->wfRbwSelMax)) { resizing = true; }
|
||||
}
|
||||
else if (IS_IN_AREA(mousePos, _vfo->wfRbwSelMin, _vfo->wfRbwSelMax)) {
|
||||
resizing = true;
|
||||
}
|
||||
}
|
||||
if (!resizing) { continue; }
|
||||
relatedVfo = _vfo;
|
||||
vfoBorderSelect = true;
|
||||
@ -300,7 +304,7 @@ namespace ImGui {
|
||||
ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeNS);
|
||||
newFFTAreaHeight = mousePos.y - widgetPos.y;
|
||||
newFFTAreaHeight = std::clamp<float>(newFFTAreaHeight, 150, widgetSize.y - 50);
|
||||
ImGui::GetForegroundDrawList()->AddLine(ImVec2(widgetPos.x, newFFTAreaHeight + widgetPos.y), ImVec2(widgetEndPos.x, newFFTAreaHeight + widgetPos.y),
|
||||
ImGui::GetForegroundDrawList()->AddLine(ImVec2(widgetPos.x, newFFTAreaHeight + widgetPos.y), ImVec2(widgetEndPos.x, newFFTAreaHeight + widgetPos.y),
|
||||
ImGui::GetColorU32(ImGuiCol_SeparatorActive));
|
||||
return;
|
||||
}
|
||||
@ -386,7 +390,7 @@ namespace ImGui {
|
||||
// If the left and right keys are pressed while hovering the freq scale, move it too
|
||||
bool leftKeyPressed = ImGui::IsKeyPressed(GLFW_KEY_LEFT);
|
||||
if ((leftKeyPressed || ImGui::IsKeyPressed(GLFW_KEY_RIGHT)) && mouseInFreq) {
|
||||
viewOffset += leftKeyPressed ? (viewBandwidth / 20.0) : (-viewBandwidth / 20.0);
|
||||
viewOffset += leftKeyPressed ? (viewBandwidth / 20.0) : (-viewBandwidth / 20.0);
|
||||
|
||||
if (viewOffset + (viewBandwidth / 2.0) > wholeBandwidth / 2.0) {
|
||||
double freqOffset = (viewOffset + (viewBandwidth / 2.0)) - (wholeBandwidth / 2.0);
|
||||
@ -412,7 +416,7 @@ namespace ImGui {
|
||||
}
|
||||
|
||||
// Finally, if nothing else was selected, just move the VFO
|
||||
if ((VFOMoveSingleClick ? ImGui::IsMouseClicked(ImGuiMouseButton_Left) : ImGui::IsMouseDown(ImGuiMouseButton_Left)) && (mouseInFFT|mouseInWaterfall) && (mouseMoved || hoveredVFOName == "")) {
|
||||
if ((VFOMoveSingleClick ? ImGui::IsMouseClicked(ImGuiMouseButton_Left) : ImGui::IsMouseDown(ImGuiMouseButton_Left)) && (mouseInFFT | mouseInWaterfall) && (mouseMoved || hoveredVFOName == "")) {
|
||||
if (selVfo != NULL) {
|
||||
int refCenter = mousePos.x - (widgetPos.x + 50);
|
||||
if (refCenter >= 0 && refCenter < dataWidth) {
|
||||
@ -509,13 +513,13 @@ namespace ImGui {
|
||||
|
||||
// Calculate FFT index data
|
||||
double vfoMinSizeFreq = _vfo->centerOffset - _vfo->bandwidth;
|
||||
double vfoMinFreq = _vfo->centerOffset - (_vfo->bandwidth/2.0);
|
||||
double vfoMaxFreq = _vfo->centerOffset + (_vfo->bandwidth/2.0);
|
||||
double vfoMinFreq = _vfo->centerOffset - (_vfo->bandwidth / 2.0);
|
||||
double vfoMaxFreq = _vfo->centerOffset + (_vfo->bandwidth / 2.0);
|
||||
double vfoMaxSizeFreq = _vfo->centerOffset + _vfo->bandwidth;
|
||||
int vfoMinSideOffset = std::clamp<int>(((vfoMinSizeFreq / (wholeBandwidth/2.0)) * (double)(rawFFTSize/2)) + (rawFFTSize/2), 0, rawFFTSize);
|
||||
int vfoMinOffset = std::clamp<int>(((vfoMinFreq / (wholeBandwidth/2.0)) * (double)(rawFFTSize/2)) + (rawFFTSize/2), 0, rawFFTSize);
|
||||
int vfoMaxOffset = std::clamp<int>(((vfoMaxFreq / (wholeBandwidth/2.0)) * (double)(rawFFTSize/2)) + (rawFFTSize/2), 0, rawFFTSize);
|
||||
int vfoMaxSideOffset = std::clamp<int>(((vfoMaxSizeFreq / (wholeBandwidth/2.0)) * (double)(rawFFTSize/2)) + (rawFFTSize/2), 0, rawFFTSize);
|
||||
int vfoMinSideOffset = std::clamp<int>(((vfoMinSizeFreq / (wholeBandwidth / 2.0)) * (double)(rawFFTSize / 2)) + (rawFFTSize / 2), 0, rawFFTSize);
|
||||
int vfoMinOffset = std::clamp<int>(((vfoMinFreq / (wholeBandwidth / 2.0)) * (double)(rawFFTSize / 2)) + (rawFFTSize / 2), 0, rawFFTSize);
|
||||
int vfoMaxOffset = std::clamp<int>(((vfoMaxFreq / (wholeBandwidth / 2.0)) * (double)(rawFFTSize / 2)) + (rawFFTSize / 2), 0, rawFFTSize);
|
||||
int vfoMaxSideOffset = std::clamp<int>(((vfoMaxSizeFreq / (wholeBandwidth / 2.0)) * (double)(rawFFTSize / 2)) + (rawFFTSize / 2), 0, rawFFTSize);
|
||||
|
||||
double avg = 0;
|
||||
float max = -INFINITY;
|
||||
@ -601,7 +605,7 @@ namespace ImGui {
|
||||
else {
|
||||
bpBottom = widgetPos.y + height + 10;
|
||||
}
|
||||
|
||||
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
start = bandplan->bands[i].start;
|
||||
@ -637,20 +641,20 @@ namespace ImGui {
|
||||
bPos = widgetPos.x + 51;
|
||||
}
|
||||
if (width >= 1.0) {
|
||||
window->DrawList->AddRectFilled(ImVec2(roundf(aPos), bpBottom - height),
|
||||
ImVec2(roundf(bPos), bpBottom), colorTrans);
|
||||
window->DrawList->AddRectFilled(ImVec2(roundf(aPos), bpBottom - height),
|
||||
ImVec2(roundf(bPos), bpBottom), colorTrans);
|
||||
if (startVis) {
|
||||
window->DrawList->AddLine(ImVec2(roundf(aPos), bpBottom - height - 1),
|
||||
ImVec2(roundf(aPos), bpBottom - 1), color);
|
||||
window->DrawList->AddLine(ImVec2(roundf(aPos), bpBottom - height - 1),
|
||||
ImVec2(roundf(aPos), bpBottom - 1), color);
|
||||
}
|
||||
if (endVis) {
|
||||
window->DrawList->AddLine(ImVec2(roundf(bPos), bpBottom - height - 1),
|
||||
ImVec2(roundf(bPos), bpBottom - 1), color);
|
||||
window->DrawList->AddLine(ImVec2(roundf(bPos), bpBottom - height - 1),
|
||||
ImVec2(roundf(bPos), bpBottom - 1), color);
|
||||
}
|
||||
}
|
||||
if (txtSz.x <= width) {
|
||||
window->DrawList->AddText(ImVec2(cPos - (txtSz.x / 2.0), bpBottom - (height / 2.0f) - (txtSz.y / 2.0f)),
|
||||
IM_COL32(255, 255, 255, 255), bandplan->bands[i].name.c_str());
|
||||
window->DrawList->AddText(ImVec2(cPos - (txtSz.x / 2.0), bpBottom - (height / 2.0f) - (txtSz.y / 2.0f)),
|
||||
IM_COL32(255, 255, 255, 255), bandplan->bands[i].name.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -682,7 +686,7 @@ namespace ImGui {
|
||||
waterfallHeight = widgetSize.y - fftHeight - 52;
|
||||
}
|
||||
else {
|
||||
fftHeight = widgetSize.y - 50;
|
||||
fftHeight = widgetSize.y - 50;
|
||||
}
|
||||
dataWidth = widgetSize.x - 60.0;
|
||||
|
||||
@ -766,7 +770,7 @@ namespace ImGui {
|
||||
//window->DrawList->AddRectFilled(widgetPos, widgetEndPos, IM_COL32( 0, 0, 0, 255 ));
|
||||
ImU32 bg = ImGui::ColorConvertFloat4ToU32(gui::themeManager.waterfallBg);
|
||||
window->DrawList->AddRectFilled(widgetPos, widgetEndPos, bg);
|
||||
window->DrawList->AddRect(widgetPos, widgetEndPos, IM_COL32( 50, 50, 50, 255 ));
|
||||
window->DrawList->AddRect(widgetPos, widgetEndPos, IM_COL32(50, 50, 50, 255));
|
||||
window->DrawList->AddLine(ImVec2(widgetPos.x, widgetPos.y + fftHeight + 50), ImVec2(widgetPos.x + widgetSize.x, widgetPos.y + fftHeight + 50), IM_COL32(50, 50, 50, 255), 1.0);
|
||||
|
||||
if (!gui::mainWindow.lockWaterfallControls) {
|
||||
@ -787,7 +791,7 @@ namespace ImGui {
|
||||
}
|
||||
|
||||
updateAllVFOs(true);
|
||||
|
||||
|
||||
drawFFT();
|
||||
if (waterfallVisible) {
|
||||
drawWaterfall();
|
||||
@ -823,7 +827,7 @@ namespace ImGui {
|
||||
double offsetRatio = viewOffset / (wholeBandwidth / 2.0);
|
||||
int drawDataSize = (viewBandwidth / wholeBandwidth) * rawFFTSize;
|
||||
int drawDataStart = (((double)rawFFTSize / 2.0) * (offsetRatio + 1)) - (drawDataSize / 2);
|
||||
|
||||
|
||||
// If in fast mode, apply IIR filtering
|
||||
float* buf = &rawFFTs[currentFFTLine * rawFFTSize];
|
||||
if (_fastFFT) {
|
||||
@ -855,7 +859,7 @@ namespace ImGui {
|
||||
float dummy;
|
||||
calculateVFOSignalInfo(waterfallVisible ? &rawFFTs[currentFFTLine * rawFFTSize] : rawFFTs, vfos[selectedVFO], dummy, selectedVFOSNR);
|
||||
}
|
||||
|
||||
|
||||
buf_mtx.unlock();
|
||||
}
|
||||
|
||||
@ -982,7 +986,7 @@ namespace ImGui {
|
||||
double WaterFall::getViewOffset() {
|
||||
return viewOffset;
|
||||
}
|
||||
|
||||
|
||||
void WaterFall::setFFTMin(float min) {
|
||||
fftMin = min;
|
||||
vRange = findBestRange(fftMax - fftMin, maxVSteps);
|
||||
@ -1138,7 +1142,6 @@ namespace ImGui {
|
||||
}
|
||||
reference = ref;
|
||||
setOffset(generalOffset);
|
||||
|
||||
}
|
||||
|
||||
void WaterfallVFO::updateDrawingVars(double viewBandwidth, float dataWidth, double viewOffset, ImVec2 widgetPos, int fftHeight) {
|
||||
@ -1202,18 +1205,22 @@ namespace ImGui {
|
||||
if (rectMax.x - rectMin.x < 10) { return; }
|
||||
if (reference != REF_LOWER && !bandwidthLocked && !leftClamped) {
|
||||
if (IS_IN_AREA(mousePos, lbwSelMin, lbwSelMax)) { ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW); }
|
||||
else if (IS_IN_AREA(mousePos, wfLbwSelMin, wfLbwSelMax)) { ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW); }
|
||||
else if (IS_IN_AREA(mousePos, wfLbwSelMin, wfLbwSelMax)) {
|
||||
ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW);
|
||||
}
|
||||
}
|
||||
if (reference != REF_UPPER && !bandwidthLocked && !rightClamped) {
|
||||
if (IS_IN_AREA(mousePos, rbwSelMin, rbwSelMax)) { ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW); }
|
||||
else if (IS_IN_AREA(mousePos, wfRbwSelMin, wfRbwSelMax)) { ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW); }
|
||||
else if (IS_IN_AREA(mousePos, wfRbwSelMin, wfRbwSelMax)) {
|
||||
ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void WaterFall::showWaterfall() {
|
||||
buf_mtx.lock();
|
||||
if (rawFFTs == NULL) {
|
||||
if (rawFFTs == NULL) {
|
||||
spdlog::error("Null rawFFT");
|
||||
}
|
||||
waterfallVisible = true;
|
||||
@ -1237,7 +1244,7 @@ namespace ImGui {
|
||||
onResize();
|
||||
buf_mtx.unlock();
|
||||
}
|
||||
|
||||
|
||||
int WaterFall::getFFTHeight() {
|
||||
return FFTAreaHeight;
|
||||
}
|
||||
@ -1254,4 +1261,3 @@ namespace ImGui {
|
||||
snapInterval = interval;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include <GL/glew.h>
|
||||
#include <utils/event.h>
|
||||
|
||||
#define WATERFALL_RESOLUTION 1000000
|
||||
#define WATERFALL_RESOLUTION 1000000
|
||||
|
||||
namespace ImGui {
|
||||
class WaterfallVFO {
|
||||
@ -244,7 +244,7 @@ namespace ImGui {
|
||||
bool waterfallUpdate = false;
|
||||
|
||||
uint32_t waterfallPallet[WATERFALL_RESOLUTION];
|
||||
|
||||
|
||||
ImVec2 widgetPos;
|
||||
ImVec2 widgetEndPos;
|
||||
ImVec2 widgetSize;
|
||||
@ -270,9 +270,9 @@ namespace ImGui {
|
||||
int maxVSteps;
|
||||
int maxHSteps;
|
||||
|
||||
int dataWidth; // Width of the FFT and waterfall
|
||||
int fftHeight; // Height of the fft graph
|
||||
int waterfallHeight = 0; // Height of the waterfall
|
||||
int dataWidth; // Width of the FFT and waterfall
|
||||
int fftHeight; // Height of the fft graph
|
||||
int waterfallHeight = 0; // Height of the waterfall
|
||||
|
||||
double viewBandwidth;
|
||||
double viewOffset;
|
||||
|
Reference in New Issue
Block a user