more work on the frequency manager and adder 2.4MS/s to rtl tcp

This commit is contained in:
Ryzerth 2021-07-03 00:08:01 +02:00
parent 4a2774367f
commit a19e47bd54
2 changed files with 153 additions and 13 deletions

View File

@ -33,6 +33,13 @@ public:
FrequencyManagerModule(std::string name) { FrequencyManagerModule(std::string name) {
this->name = name; this->name = name;
config.aquire();
std::string selList = config.conf["selectedList"];
config.release();
refreshLists();
loadByName(selList);
gui::menu.registerEntry(name, menuHandler, this, NULL); gui::menu.registerEntry(name, menuHandler, this, NULL);
} }
@ -149,7 +156,8 @@ private:
bookmarks.erase(firstEeditedBookmarkName); bookmarks.erase(firstEeditedBookmarkName);
} }
bookmarks[nameBuf] = editedBookmark; bookmarks[nameBuf] = editedBookmark;
saveByName(selectedListName);
} }
if (strlen(nameBuf) == 0) { style::endDisabled(); } if (strlen(nameBuf) == 0) { style::endDisabled(); }
ImGui::SameLine(); ImGui::SameLine();
@ -161,9 +169,76 @@ private:
return open; return open;
} }
bool newListDialog() {
bool open = true;
gui::mainWindow.lockWaterfallControls = true;
float menuWidth = ImGui::GetContentRegionAvailWidth();
std::string id = "New##freq_manager_new_popup_" + name;
ImGui::OpenPopup(id.c_str());
char nameBuf[1024];
strcpy(nameBuf, editedListName.c_str());
if (ImGui::BeginPopup(id.c_str(), ImGuiWindowFlags_NoResize)) {
ImGui::Text("Name");
ImGui::SetNextItemWidth(menuWidth - ImGui::GetCursorPosX());
if (ImGui::InputText(("##freq_manager_edit_name"+name).c_str(), nameBuf, 1023)) {
editedListName = nameBuf;
}
if (strlen(nameBuf) == 0) { style::beginDisabled(); }
if (ImGui::Button("Apply")) {
open = false;
config.aquire();
config.conf["lists"][editedListName] = json::object();
config.release(true);
refreshLists();
loadByName(selectedListName);
}
if (strlen(nameBuf) == 0) { style::endDisabled(); }
ImGui::SameLine();
if (ImGui::Button("Cancel")) {
open = false;
}
ImGui::EndPopup();
}
return open;
}
void refreshLists() {
listNames.clear();
listNamesTxt = "";
config.aquire();
for (auto [_name, list] : config.conf["lists"].items()) {
listNames.push_back(_name);
listNamesTxt += _name;
listNamesTxt += '\0';
}
config.release();
}
void loadFirst() {
if (listNames.size() > 0) {
loadByName(listNames[0]);
return;
}
selectedListName = "";
selectedListId = 0;
}
void loadByName(std::string listName) { void loadByName(std::string listName) {
if (std::find(listNames.begin(), listNames.end(), listName) == listNames.end()) { return; }
bookmarks.clear(); bookmarks.clear();
if (std::find(listNames.begin(), listNames.end(), listName) == listNames.end()) {
selectedListName = "";
selectedListId = 0;
loadFirst();
}
selectedListId = std::distance(listNames.begin(), std::find(listNames.begin(), listNames.end(), listName));
spdlog::warn("Set id to {0} {1}", selectedListId, listName);
selectedListName = listName;
config.aquire(); config.aquire();
for (auto [bmName, bm] : config.conf["lists"][listName].items()) { for (auto [bmName, bm] : config.conf["lists"][listName].items()) {
FrequencyBookmark fbm; FrequencyBookmark fbm;
@ -195,12 +270,49 @@ private:
std::vector<std::string> selectedNames; std::vector<std::string> selectedNames;
for (auto& [name, bm] : _this->bookmarks) { if (bm.selected) { selectedNames.push_back(name); } } for (auto& [name, bm] : _this->bookmarks) { if (bm.selected) { selectedNames.push_back(name); } }
ImGui::Text("List"); float lineHeight = ImGui::GetTextLineHeightWithSpacing();
float btnSize = ImGui::CalcTextSize("Rename").x + 8;
ImGui::SetNextItemWidth(menuWidth - 24 - (2*lineHeight) - btnSize);
if (ImGui::Combo(("##freq_manager_list_sel"+_this->name).c_str(), &_this->selectedListId, _this->listNamesTxt.c_str())) {
_this->loadByName(_this->listNames[_this->selectedListId]);
}
ImGui::SameLine(); ImGui::SameLine();
ImGui::SetNextItemWidth(menuWidth - ImGui::GetCursorPosX()); if (ImGui::Button(("Rename##_freq_mgr_ren_lst_" + _this->name).c_str(), ImVec2(btnSize, 0))) {
char* testList = "Bad music\0"; // Rename list here
int testInt = 0; }
ImGui::Combo(("##freq_manager_list_sel"+_this->name).c_str(), &testInt, testList); ImGui::SameLine();
if (ImGui::Button(("+##_freq_mgr_add_lst_" + _this->name).c_str(), ImVec2(lineHeight, 0))) {
// Find new unique default name
if (std::find(_this->listNames.begin(), _this->listNames.end(), "New Bookmark") == _this->listNames.end()) {
_this->editedListName = "New Bookmark";
}
else {
char buf[64];
for (int i = 1; i < 1000; i++) {
sprintf(buf, "New Bookmark (%d)", i);
if (std::find(_this->listNames.begin(), _this->listNames.end(), buf) == _this->listNames.end()) { break; }
}
_this->editedListName = buf;
}
_this->newListOpen = true;
}
ImGui::SameLine();
if (ImGui::Button(("-##_freq_mgr_del_lst_" + _this->name).c_str(), ImVec2(lineHeight, 0))) {
config.aquire();
config.conf["lists"].erase(_this->selectedListName);
config.release(true);
_this->refreshLists();
_this->selectedListId = std::clamp<int>(_this->selectedListId, 0, _this->listNames.size());
if (_this->listNames.size() > 0) {
_this->loadByName(_this->listNames[_this->selectedListId]);
}
else {
_this->selectedListName = "";
}
}
if (_this->selectedListName == "") { style::beginDisabled(); }
//Draw buttons on top of the list //Draw buttons on top of the list
ImGui::BeginTable(("freq_manager_btn_table"+_this->name).c_str(), 3); ImGui::BeginTable(("freq_manager_btn_table"+_this->name).c_str(), 3);
@ -241,23 +353,23 @@ private:
} }
_this->editedBookmarkName = buf; _this->editedBookmarkName = buf;
} }
} }
ImGui::TableSetColumnIndex(1); ImGui::TableSetColumnIndex(1);
if (ImGui::Button(("Remove##_freq_mgr_rem_" + _this->name).c_str(), ImVec2(ImGui::GetContentRegionAvailWidth(), 0))) { if (ImGui::Button(("Remove##_freq_mgr_rem_" + _this->name).c_str(), ImVec2(ImGui::GetContentRegionAvailWidth(), 0))) {
for (auto& name : selectedNames) { _this->bookmarks.erase(name); } for (auto& name : selectedNames) { _this->bookmarks.erase(name); }
_this->saveByName(_this->selectedListName);
} }
ImGui::TableSetColumnIndex(2); ImGui::TableSetColumnIndex(2);
if (selectedNames.size() != 1) { style::beginDisabled(); } if (selectedNames.size() != 1 && _this->selectedListName != "") { style::beginDisabled(); }
if (ImGui::Button(("Edit##_freq_mgr_edt_" + _this->name).c_str(), ImVec2(ImGui::GetContentRegionAvailWidth(), 0))) { if (ImGui::Button(("Edit##_freq_mgr_edt_" + _this->name).c_str(), ImVec2(ImGui::GetContentRegionAvailWidth(), 0))) {
_this->editOpen = true; _this->editOpen = true;
_this->editedBookmark = _this->bookmarks[selectedNames[0]]; _this->editedBookmark = _this->bookmarks[selectedNames[0]];
_this->editedBookmarkName = selectedNames[0]; _this->editedBookmarkName = selectedNames[0];
_this->firstEeditedBookmarkName = selectedNames[0]; _this->firstEeditedBookmarkName = selectedNames[0];
} }
if (selectedNames.size() != 1) { style::endDisabled(); } if (selectedNames.size() != 1 && _this->selectedListName != "") { style::endDisabled(); }
ImGui::EndTable(); ImGui::EndTable();
@ -284,13 +396,31 @@ private:
ImGui::EndTable(); ImGui::EndTable();
if (selectedNames.size() != 1) { style::beginDisabled(); } if (selectedNames.size() != 1 && _this->selectedListName != "") { style::beginDisabled(); }
if (ImGui::Button(("Apply##_freq_mgr_apply_" + _this->name).c_str(), ImVec2(menuWidth, 0))) { if (ImGui::Button(("Apply##_freq_mgr_apply_" + _this->name).c_str(), ImVec2(menuWidth, 0))) {
FrequencyBookmark& bm = _this->bookmarks[selectedNames[0]]; FrequencyBookmark& bm = _this->bookmarks[selectedNames[0]];
applyBookmark(bm, gui::waterfall.selectedVFO); applyBookmark(bm, gui::waterfall.selectedVFO);
bm.selected = false; bm.selected = false;
} }
if (selectedNames.size() != 1) { style::endDisabled(); } if (selectedNames.size() != 1 && _this->selectedListName != "") { style::endDisabled(); }
//Draw import and export buttons
ImGui::BeginTable(("freq_manager_btn_table"+_this->name).c_str(), 2);
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0);
if (ImGui::Button(("Import##_freq_mgr_imp_" + _this->name).c_str(), ImVec2(ImGui::GetContentRegionAvailWidth(), 0))) {
}
ImGui::TableSetColumnIndex(1);
if (ImGui::Button(("Export##_freq_mgr_exp_" + _this->name).c_str(), ImVec2(ImGui::GetContentRegionAvailWidth(), 0))) {
}
ImGui::EndTable();
if (_this->selectedListName == "") { style::endDisabled(); }
if (_this->createOpen) { if (_this->createOpen) {
_this->createOpen = _this->bookmarkEditDialog(); _this->createOpen = _this->bookmarkEditDialog();
@ -299,12 +429,17 @@ private:
if (_this->editOpen) { if (_this->editOpen) {
_this->editOpen = _this->bookmarkEditDialog(); _this->editOpen = _this->bookmarkEditDialog();
} }
if (_this->newListOpen) {
_this->newListOpen = _this->newListDialog();
}
} }
std::string name; std::string name;
bool enabled = true; bool enabled = true;
bool createOpen = false; bool createOpen = false;
bool editOpen = false; bool editOpen = false;
bool newListOpen = false;
std::map<std::string, FrequencyBookmark> bookmarks; std::map<std::string, FrequencyBookmark> bookmarks;
@ -313,9 +448,12 @@ private:
FrequencyBookmark editedBookmark; FrequencyBookmark editedBookmark;
std::vector<std::string> listNames; std::vector<std::string> listNames;
std::string selectedListName; std::string listNamesTxt = "";
std::string selectedListName = "";
int selectedListId = 0; int selectedListId = 0;
std::string editedListName;
int testN = 0; int testN = 0;
}; };

View File

@ -28,6 +28,7 @@ const double sampleRates[] = {
1920000, 1920000,
2048000, 2048000,
2160000, 2160000,
2400000,
2560000, 2560000,
2880000, 2880000,
3200000 3200000
@ -41,6 +42,7 @@ const char* sampleRatesTxt[] = {
"1.92MHz", "1.92MHz",
"2.048MHz", "2.048MHz",
"2.16MHz", "2.16MHz",
"2.4MHz",
"2.56MHz", "2.56MHz",
"2.88MHz", "2.88MHz",
"3.2MHz" "3.2MHz"