From 43b43abc4450b5b2bda1a8ac28a8018c98a28c40 Mon Sep 17 00:00:00 2001 From: Christian Heinemann Date: Sun, 31 Jul 2022 11:28:48 +0200 Subject: [PATCH] toolbar for browser window: refresh, login, logout, upload --- source/Gui/BrowserWindow.cpp | 63 +++++++++++++++++++++++++++++------- source/Gui/BrowserWindow.h | 6 +++- source/Gui/Definitions.h | 2 ++ source/Gui/LoginDialog.cpp | 2 +- source/Gui/MainWindow.cpp | 3 ++ 5 files changed, 63 insertions(+), 13 deletions(-) diff --git a/source/Gui/BrowserWindow.cpp b/source/Gui/BrowserWindow.cpp index 433a1c2c9..1e29252bc 100644 --- a/source/Gui/BrowserWindow.cpp +++ b/source/Gui/BrowserWindow.cpp @@ -18,6 +18,8 @@ #include "Viewport.h" #include "TemporalControlWindow.h" #include "MessageDialog.h" +#include "LoginDialog.h" +#include "UploadSimulationDialog.h" _BrowserWindow::_BrowserWindow( SimulationController const& simController, @@ -42,6 +44,12 @@ _BrowserWindow::~_BrowserWindow() _on = false; } +void _BrowserWindow::registerCyclicReferences(LoginDialogWeakPtr const& loginDialog, UploadSimulationDialogWeakPtr const& uploadSimulationDialog) +{ + _loginDialog = loginDialog; + _uploadSimulationDialog = uploadSimulationDialog; +} + void _BrowserWindow::onRefresh() { refreshIntern(false); @@ -77,23 +85,63 @@ void _BrowserWindow::refreshIntern(bool firstTimeStartup) void _BrowserWindow::processIntern() { + processToolbar(); processTable(); processStatus(); processFilter(); - processRefreshButton(); if(_scheduleRefresh) { onRefresh(); _scheduleRefresh = false; } } +void _BrowserWindow::processToolbar() +{ + if (AlienImGui::ToolbarButton(ICON_FA_SYNC)) { + onRefresh(); + } + AlienImGui::Tooltip("Refresh"); + + ImGui::SameLine(); + ImGui::BeginDisabled(_networkController->getLoggedInUserName().has_value()); + if (AlienImGui::ToolbarButton(ICON_FA_SIGN_IN_ALT)) { + if (auto loginDialog = _loginDialog.lock()) { + loginDialog->show(); + } + } + ImGui::EndDisabled(); + AlienImGui::Tooltip("Login or register"); + + ImGui::SameLine(); + ImGui::BeginDisabled(!_networkController->getLoggedInUserName()); + if (AlienImGui::ToolbarButton(ICON_FA_SIGN_OUT_ALT)) { + if (auto loginDialog = _loginDialog.lock()) { + _networkController->logout(); + onRefresh(); + } + } + ImGui::EndDisabled(); + AlienImGui::Tooltip("Logout"); + + ImGui::SameLine(); + ImGui::BeginDisabled(!_networkController->getLoggedInUserName()); + if (AlienImGui::ToolbarButton(ICON_FA_UPLOAD)) { + if (auto uploadSimulationDialog = _uploadSimulationDialog.lock()) { + uploadSimulationDialog->show(); + } + } + ImGui::EndDisabled(); + AlienImGui::Tooltip("Upload simulation"); + AlienImGui::Separator(); +} + void _BrowserWindow::processTable() { auto styleRepository = StyleRepository::getInstance(); static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Sortable | ImGuiTableFlags_SortMulti | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_NoBordersInBody | ImGuiTableFlags_ScrollY; - if (ImGui::BeginTable("Browser", 12, flags, ImVec2(0, ImGui::GetContentRegionAvail().y - styleRepository.scaleContent(90.0f)), 0.0f)) { + if (ImGui::BeginTable("Browser", 12, flags, ImVec2(0, ImGui::GetContentRegionAvail().y - styleRepository.scaleContent(63.0f)), 0.0f)) { ImGui::TableSetupColumn( "Actions", ImGuiTableColumnFlags_PreferSortDescending | ImGuiTableColumnFlags_WidthFixed, 0.0f, RemoteSimulationDataColumnId_Actions); ImGui::TableSetupColumn( @@ -150,7 +198,7 @@ void _BrowserWindow::processTable() ImGui::TableNextRow(); ImGui::TableNextColumn(); - if (ImGui::Button(ICON_FA_FOLDER_OPEN)) { + if (ImGui::Button(ICON_FA_DOWNLOAD)) { onOpenSimulation(item->id); } ImGui::SameLine(); @@ -217,7 +265,7 @@ void _BrowserWindow::processStatus() { auto styleRepository = StyleRepository::getInstance(); - if (ImGui::BeginChild("##", ImVec2(0, styleRepository.scaleContent(30.0f)), true, ImGuiWindowFlags_HorizontalScrollbar)) { + if (ImGui::BeginChild("##", ImVec2(0, styleRepository.scaleContent(33.0f)), true, ImGuiWindowFlags_HorizontalScrollbar)) { ImGui::PushStyleColor(ImGuiCol_Text, (ImVec4)Const::LogMessageColor); std::string statusText; statusText += std::string(" " ICON_FA_INFO_CIRCLE " "); @@ -252,13 +300,6 @@ void _BrowserWindow::processFilter() } } -void _BrowserWindow::processRefreshButton() -{ - if (AlienImGui::Button("Refresh")) { - onRefresh(); - } -} - void _BrowserWindow::processShortenedText(std::string const& text) { auto styleRepository = StyleRepository::getInstance(); auto textSize = ImGui::CalcTextSize(text.c_str()); diff --git a/source/Gui/BrowserWindow.h b/source/Gui/BrowserWindow.h index d146fa238..5c2e29f80 100644 --- a/source/Gui/BrowserWindow.h +++ b/source/Gui/BrowserWindow.h @@ -17,6 +17,8 @@ class _BrowserWindow : public _AlienWindow TemporalControlWindow const& temporalControlWindow); ~_BrowserWindow(); + void registerCyclicReferences(LoginDialogWeakPtr const& loginDialog, UploadSimulationDialogWeakPtr const& uploadSimulationDialog); + void onRefresh(); private: @@ -27,7 +29,7 @@ class _BrowserWindow : public _AlienWindow void processTable(); void processStatus(); void processFilter(); - void processRefreshButton(); + void processToolbar(); void processShortenedText(std::string const& text); bool processDetailButton(); @@ -56,4 +58,6 @@ class _BrowserWindow : public _AlienWindow StatisticsWindow _statisticsWindow; Viewport _viewport; TemporalControlWindow _temporalControlWindow; + LoginDialogWeakPtr _loginDialog; + UploadSimulationDialogWeakPtr _uploadSimulationDialog; }; diff --git a/source/Gui/Definitions.h b/source/Gui/Definitions.h index de6c1ce97..fe1c19b12 100644 --- a/source/Gui/Definitions.h +++ b/source/Gui/Definitions.h @@ -144,9 +144,11 @@ using NetworkController = std::shared_ptr<_NetworkController>; class _LoginDialog; using LoginDialog = std::shared_ptr<_LoginDialog>; +using LoginDialogWeakPtr = std::weak_ptr<_LoginDialog>; class _UploadSimulationDialog; using UploadSimulationDialog = std::shared_ptr<_UploadSimulationDialog>; +using UploadSimulationDialogWeakPtr = std::weak_ptr<_UploadSimulationDialog>; class _CreateUserDialog; using CreateUserDialog = std::shared_ptr<_CreateUserDialog>; diff --git a/source/Gui/LoginDialog.cpp b/source/Gui/LoginDialog.cpp index 7b110119d..6a197ef8a 100644 --- a/source/Gui/LoginDialog.cpp +++ b/source/Gui/LoginDialog.cpp @@ -22,7 +22,7 @@ _LoginDialog::_LoginDialog( { auto& settings = GlobalSettings::getInstance(); - _remember = settings.getBoolState("dialogs.login.remember", false); + _remember = settings.getBoolState("dialogs.login.remember", true); if (_remember) { settings.getStringState("dialogs.login.user name", ""); settings.getStringState("dialogs.login.password", ""); diff --git a/source/Gui/MainWindow.cpp b/source/Gui/MainWindow.cpp index d852365e5..4c158a001 100644 --- a/source/Gui/MainWindow.cpp +++ b/source/Gui/MainWindow.cpp @@ -159,6 +159,9 @@ _MainWindow::_MainWindow(SimulationController const& simController, SimpleLogger _networkSettingsDialog = std::make_shared<_NetworkSettingsDialog>(_browserWindow, _networkController); _imageToPatternDialog = std::make_shared<_ImageToPatternDialog>(_viewport, _simController); + //cyclic references + _browserWindow->registerCyclicReferences(_loginDialog, _uploadSimulationDialog); + ifd::FileDialog::Instance().CreateTexture = [](uint8_t* data, int w, int h, char fmt) -> void* { GLuint tex;