diff --git a/src/single_window/local_peer_window.cpp b/src/single_window/local_peer_window.cpp index 80cd301..8a833a9 100644 --- a/src/single_window/local_peer_window.cpp +++ b/src/single_window/local_peer_window.cpp @@ -20,7 +20,6 @@ int Render::LocalWindow() { ImGui::SetCursorPosY(ImGui::GetCursorPosY() + main_window_text_y_padding_); ImGui::Indent(main_child_window_x_padding_); - ImGui::SetWindowFontScale(1.0f); ImGui::TextColored( ImVec4(0.0f, 0.0f, 0.0f, 0.5f), "%s", @@ -45,7 +44,7 @@ int Render::LocalWindow() { ImGui::PopStyleVar(); ImGui::PopStyleColor(); { - ImGui::SetWindowFontScale(0.5f); + ImGui::SetWindowFontScale(0.8f); ImGui::Text("%s", localization::local_id[localization_language_index_].c_str()); @@ -70,17 +69,17 @@ int Render::LocalWindow() { ImGui::PopStyleVar(); ImGui::SameLine(); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0)); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0, 0, 0, 0)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0, 0, 0, 0)); ImGui::SetWindowFontScale(0.5f); - if (ImGui::Button(ICON_FA_COPY, ImVec2(35, 38))) { local_id_copied_ = true; ImGui::SetClipboardText(client_id_); copy_start_time_ = ImGui::GetTime(); } - + ImGui::SetWindowFontScale(1.0f); ImGui::PopStyleColor(3); auto time_duration = ImGui::GetTime() - copy_start_time_; @@ -123,16 +122,14 @@ int Render::LocalWindow() { ImGui::End(); } - ImGui::SetWindowFontScale(1.0f); - ImGui::Spacing(); ImGui::Separator(); ImGui::Spacing(); - ImGui::SetWindowFontScale(0.5f); - + ImGui::SetWindowFontScale(0.8f); ImGui::Text("%s", localization::password[localization_language_index_].c_str()); + ImGui::SetWindowFontScale(1.0f); ImGui::SetNextItemWidth(IPUT_WINDOW_WIDTH); ImGui::Spacing(); @@ -157,7 +154,6 @@ int Render::LocalWindow() { } } - ImGui::SetWindowFontScale(1.0f); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f); ImGui::InputTextWithHint( "##server_pwd", @@ -174,7 +170,6 @@ int Render::LocalWindow() { ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0)); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0, 0, 0, 0)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0, 0, 0, 0)); - ImGui::SetWindowFontScale(0.5f); auto l_x = ImGui::GetCursorScreenPos().x; auto l_y = ImGui::GetCursorScreenPos().y; @@ -246,9 +241,9 @@ int Render::LocalWindow() { auto window_height = ImGui::GetWindowSize().y; std::string text = localization::new_password[localization_language_index_]; - auto text_width = ImGui::CalcTextSize(text.c_str()).x; ImGui::SetWindowFontScale(0.5f); - ImGui::SetCursorPosX((window_width - text_width / 2) * 0.5f); + auto text_width = ImGui::CalcTextSize(text.c_str()).x; + ImGui::SetCursorPosX((window_width - text_width) * 0.5f); ImGui::SetCursorPosY(window_height * 0.2f); ImGui::Text("%s", text.c_str()); diff --git a/src/single_window/main_window.cpp b/src/single_window/main_window.cpp index 6eedc22..fab5346 100644 --- a/src/single_window/main_window.cpp +++ b/src/single_window/main_window.cpp @@ -3,15 +3,10 @@ #include "render.h" int Render::MainWindow() { - ImGui::SetNextWindowPos(ImVec2(0, 0), ImGuiCond_Always); - // ImGui::SetNextWindowSize( - // ImVec2(main_window_width_default_, main_window_height_default_), - // ImGuiCond_Always); - ImGui::SetNextWindowPos(ImVec2(0, title_bar_height_), ImGuiCond_Always); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); - ImGui::BeginChild("MainWindow", + ImGui::BeginChild("DeskWindow", ImVec2(main_window_width_default_, local_window_height_), ImGuiChildFlags_Border, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | @@ -31,276 +26,9 @@ int Render::MainWindow() { RemoteWindow(); ImGui::EndChild(); - ImGui::SetNextWindowPos( - ImVec2(0, title_bar_height_ + local_window_height_ - 1.0f), - ImGuiCond_Always); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); - ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); - ImGui::BeginChild( - "RecentConnectionsWindow", - ImVec2(main_window_width_default_, - main_window_height_default_ - title_bar_height_ - - local_window_height_ - status_bar_height_ + 1.0f), - ImGuiChildFlags_Border, - ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | - ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | - ImGuiWindowFlags_NoBringToFrontOnFocus); - ImGui::PopStyleVar(); - ImGui::PopStyleColor(); - - ImGui::SetCursorPosY(ImGui::GetCursorPosY() + main_window_text_y_padding_); - ImGui::Indent(main_child_window_x_padding_); - ImGui::SetWindowFontScale(0.8f); - - ImGui::TextColored( - ImVec4(0.0f, 0.0f, 0.0f, 0.5f), "%s", - localization::recent_connections[localization_language_index_].c_str()); - ImGui::SetWindowFontScale(1.0f); - - ShowRecentConnections(); - - ImGui::EndChild(); - + RecentConnectionsWindow(); StatusBar(); ConnectionStatusWindow(); return 0; } - -int Render::ShowRecentConnections() { - ImGui::SetCursorPosX(25.0f); - ImVec2 sub_window_pos = ImGui::GetCursorPos(); - std::map sub_containers_pos; - int recent_connection_sub_container_width = - recent_connection_image_width_ + 16.0f; - int recent_connection_sub_container_height = - recent_connection_image_height_ + 36.0f; - ImGui::PushStyleColor(ImGuiCol_ChildBg, - ImVec4(239.0 / 255, 240.0 / 255, 242.0 / 255, 1.0f)); - ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 10.0f); - ImGui::BeginChild("RecentConnectionsContainer", - ImVec2(main_window_width_default_ - 50.0f, 145.0f), - ImGuiChildFlags_Border, - ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | - ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | - ImGuiWindowFlags_NoBringToFrontOnFocus | - ImGuiWindowFlags_AlwaysHorizontalScrollbar | - ImGuiWindowFlags_NoScrollbar | - ImGuiWindowFlags_NoScrollWithMouse); - ImGui::PopStyleVar(); - ImGui::PopStyleColor(); - int recent_connections_count = recent_connection_textures_.size(); - int count = 0; - int button_width = 22; - int button_height = 22; - for (auto it = recent_connection_textures_.begin(); - it != recent_connection_textures_.end(); ++it) { - sub_containers_pos[it->first] = ImGui::GetCursorPos(); - std::string recent_connection_sub_window_name = - "RecentConnectionsSubContainer" + it->first; - // recent connections sub container - - ImGui::BeginChild(recent_connection_sub_window_name.c_str(), - ImVec2(recent_connection_sub_container_width, - recent_connection_sub_container_height), - ImGuiChildFlags_None, - ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | - ImGuiWindowFlags_NoMove | - ImGuiWindowFlags_NoTitleBar | - ImGuiWindowFlags_NoBringToFrontOnFocus | - ImGuiWindowFlags_NoScrollbar); - std::string connection_info = it->first; - std::string remote_id; - std::string password; - std::string host_name; - - // remote id length is 9 - // password length is 6 - // connection_info -> remote_id + 'Y' + password + host_name - // -> remote_id + 'N' + host_name - if ('Y' == connection_info[9] && connection_info.size() >= 16) { - remote_id = connection_info.substr(0, 9); - password = connection_info.substr(10, 6); - host_name = connection_info.substr(16); - } else if ('N' == connection_info[9] && connection_info.size() >= 10) { - remote_id = connection_info.substr(0, 9); - host_name = connection_info.substr(10); - } else { - host_name = "unknown"; - } - - ImVec2 image_screen_pos = ImVec2(ImGui::GetCursorScreenPos().x + 5.0f, - ImGui::GetCursorScreenPos().y + 5.0f); - ImVec2 image_pos = - ImVec2(ImGui::GetCursorPosX() + 5.0f, ImGui::GetCursorPosY() + 5.0f); - ImGui::SetCursorPos(image_pos); - ImGui::Image((ImTextureID)(intptr_t)it->second, - ImVec2((float)recent_connection_image_width_, - (float)recent_connection_image_height_)); - - // remote id display button - { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0.2f)); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0, 0, 0, 0.2f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0, 0, 0, 0.2f)); - - ImVec2 dummy_button_pos = - ImVec2(image_pos.x, image_pos.y + recent_connection_image_height_); - std::string dummy_button_name = "##DummyButton" + remote_id; - ImGui::SetCursorPos(dummy_button_pos); - ImGui::SetWindowFontScale(0.6f); - ImGui::Button(dummy_button_name.c_str(), - ImVec2(recent_connection_image_width_ - 2 * button_width, - button_height)); - ImGui::SetCursorPos( - ImVec2(dummy_button_pos.x + 2.0f, dummy_button_pos.y + 1.0f)); - ImGui::Text(remote_id.c_str()); - ImGui::PopStyleColor(3); - - if (ImGui::IsItemHovered()) { - ImGui::BeginTooltip(); - ImGui::SetWindowFontScale(0.5f); - ImGui::Text(host_name.c_str()); - ImGui::SetWindowFontScale(1.0f); - ImGui::EndTooltip(); - } - } - - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0.2f)); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, - ImVec4(0.1f, 0.4f, 0.8f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, - ImVec4(1.0f, 1.0f, 1.0f, 0.7f)); - - // trash button - { - ImVec2 trash_can_button_pos = ImVec2( - image_pos.x + recent_connection_image_width_ - 2 * button_width, - image_pos.y + recent_connection_image_height_); - ImGui::SetCursorPos(trash_can_button_pos); - ImGui::SetWindowFontScale(0.5f); - std::string trash_can = ICON_FA_TRASH_CAN; - std::string recent_connection_delete_button_name = - trash_can + "##RecentConnectionDelete" + - std::to_string(trash_can_button_pos.x); - if (ImGui::Button(recent_connection_delete_button_name.c_str(), - ImVec2(button_width, button_height))) { - show_confirm_delete_connection_ = true; - } - - if (delete_connection_) { - if (!thumbnail_->DeleteThumbnail(it->first)) { - reload_recent_connections_ = true; - delete_connection_ = false; - } - } - } - - // connect button - { - ImVec2 connect_button_pos = - ImVec2(image_pos.x + recent_connection_image_width_ - button_width, - image_pos.y + recent_connection_image_height_); - ImGui::SetCursorPos(connect_button_pos); - std::string connect = ICON_FA_ARROW_RIGHT_LONG; - std::string connect_to_this_connection_button_name = - connect + "##ConnectionTo" + it->first; - if (ImGui::Button(connect_to_this_connection_button_name.c_str(), - ImVec2(button_width, button_height))) { - LOG_ERROR("Connect to [{}], password [{}]", remote_id.c_str(), - password.c_str()); - remote_id_ = remote_id; - if (!password.empty() && password.size() == 6) { - remember_password_ = true; - } - strncpy(remote_password_, password.c_str(), 6); - ConnectTo(); - } - } - - ImGui::SetWindowFontScale(1.0f); - ImGui::PopStyleColor(3); - - ImGui::EndChild(); - - if (count != recent_connections_count - 1) { - ImVec2 line_start = - ImVec2(image_screen_pos.x + recent_connection_image_width_ + 20.0f, - image_screen_pos.y); - ImVec2 line_end = ImVec2( - image_screen_pos.x + recent_connection_image_width_ + 20.0f, - image_screen_pos.y + recent_connection_image_height_ + button_height); - ImGui::GetForegroundDrawList()->AddLine(line_start, line_end, - IM_COL32(0, 0, 0, 122), 1.0f); - } - - count++; - ImGui::SameLine(0, count != recent_connections_count ? 26.0f : 0.0f); - } - - ImGui::EndChild(); - - if (show_confirm_delete_connection_) { - ConfirmDeleteConnection(); - } - - return 0; -} - -int Render::ConfirmDeleteConnection() { - const ImGuiViewport* viewport = ImGui::GetMainViewport(); - ImGui::SetNextWindowPos(ImVec2((viewport->WorkSize.x - viewport->WorkPos.x - - connection_status_window_width_) / - 2, - (viewport->WorkSize.y - viewport->WorkPos.y - - connection_status_window_height_) / - 2)); - - ImGui::SetNextWindowSize(ImVec2(connection_status_window_width_, - connection_status_window_height_)); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f); - ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(1.0, 1.0, 1.0, 1.0)); - ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 1.0f); - ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 5.0f); - - ImGui::Begin("ConfirmDeleteConnectionWindow", nullptr, - ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | - ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | - ImGuiWindowFlags_NoSavedSettings); - ImGui::PopStyleVar(2); - ImGui::PopStyleColor(); - - ImGui::SetWindowFontScale(0.5f); - std::string text = - localization::confirm_delete_connection[localization_language_index_]; - ImGui::SetCursorPosX(connection_status_window_width_ * 6 / 19); - ImGui::SetCursorPosY(connection_status_window_height_ * 2 / 3); - - // ok - if (ImGui::Button(localization::ok[localization_language_index_].c_str()) || - ImGui::IsKeyPressed(ImGuiKey_Enter)) { - delete_connection_ = true; - show_confirm_delete_connection_ = false; - } - - ImGui::SameLine(); - // cancel - if (ImGui::Button( - localization::cancel[localization_language_index_].c_str()) || - ImGui::IsKeyPressed(ImGuiKey_Escape)) { - delete_connection_ = false; - show_confirm_delete_connection_ = false; - } - - auto window_width = ImGui::GetWindowSize().x; - auto window_height = ImGui::GetWindowSize().y; - auto text_width = ImGui::CalcTextSize(text.c_str()).x; - ImGui::SetCursorPosX((window_width - text_width) * 0.5f); - ImGui::SetCursorPosY(window_height * 0.2f); - ImGui::Text(text.c_str()); - ImGui::SetWindowFontScale(1.0f); - - ImGui::End(); - ImGui::PopStyleVar(); - return 0; -} \ No newline at end of file diff --git a/src/single_window/recent_connections.cpp b/src/single_window/recent_connections.cpp new file mode 100644 index 0000000..33f3878 --- /dev/null +++ b/src/single_window/recent_connections.cpp @@ -0,0 +1,275 @@ +#include "localization.h" +#include "rd_log.h" +#include "render.h" + +int Render::RecentConnectionsWindow() { + ImGui::SetNextWindowPos( + ImVec2(0, title_bar_height_ + local_window_height_ - 1.0f), + ImGuiCond_Always); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); + ImGui::BeginChild( + "RecentConnectionsWindow", + ImVec2(main_window_width_default_, + main_window_height_default_ - title_bar_height_ - + local_window_height_ - status_bar_height_ + 1.0f), + ImGuiChildFlags_Border, + ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | + ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | + ImGuiWindowFlags_NoBringToFrontOnFocus); + ImGui::PopStyleVar(); + ImGui::PopStyleColor(); + + ImGui::SetCursorPosY(ImGui::GetCursorPosY() + main_window_text_y_padding_); + ImGui::Indent(main_child_window_x_padding_); + + ImGui::TextColored( + ImVec4(0.0f, 0.0f, 0.0f, 0.5f), "%s", + localization::recent_connections[localization_language_index_].c_str()); + + ShowRecentConnections(); + + ImGui::EndChild(); + + return 0; +} + +int Render::ShowRecentConnections() { + ImGui::SetCursorPosX(25.0f); + ImVec2 sub_window_pos = ImGui::GetCursorPos(); + std::map sub_containers_pos; + int recent_connection_sub_container_width = + recent_connection_image_width_ + 16.0f; + int recent_connection_sub_container_height = + recent_connection_image_height_ + 36.0f; + ImGui::PushStyleColor(ImGuiCol_ChildBg, + ImVec4(239.0 / 255, 240.0 / 255, 242.0 / 255, 1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 10.0f); + ImGui::BeginChild("RecentConnectionsContainer", + ImVec2(main_window_width_default_ - 50.0f, 145.0f), + ImGuiChildFlags_Border, + ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | + ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | + ImGuiWindowFlags_NoBringToFrontOnFocus | + ImGuiWindowFlags_AlwaysHorizontalScrollbar | + ImGuiWindowFlags_NoScrollbar | + ImGuiWindowFlags_NoScrollWithMouse); + ImGui::PopStyleVar(); + ImGui::PopStyleColor(); + int recent_connections_count = recent_connection_textures_.size(); + int count = 0; + int button_width = 22; + int button_height = 22; + for (auto it = recent_connection_textures_.begin(); + it != recent_connection_textures_.end(); ++it) { + sub_containers_pos[it->first] = ImGui::GetCursorPos(); + std::string recent_connection_sub_window_name = + "RecentConnectionsSubContainer" + it->first; + // recent connections sub container + + ImGui::BeginChild(recent_connection_sub_window_name.c_str(), + ImVec2(recent_connection_sub_container_width, + recent_connection_sub_container_height), + ImGuiChildFlags_None, + ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | + ImGuiWindowFlags_NoMove | + ImGuiWindowFlags_NoTitleBar | + ImGuiWindowFlags_NoBringToFrontOnFocus | + ImGuiWindowFlags_NoScrollbar); + std::string connection_info = it->first; + std::string remote_id; + std::string password; + std::string host_name; + + // remote id length is 9 + // password length is 6 + // connection_info -> remote_id + 'Y' + password + host_name + // -> remote_id + 'N' + host_name + if ('Y' == connection_info[9] && connection_info.size() >= 16) { + remote_id = connection_info.substr(0, 9); + password = connection_info.substr(10, 6); + host_name = connection_info.substr(16); + } else if ('N' == connection_info[9] && connection_info.size() >= 10) { + remote_id = connection_info.substr(0, 9); + host_name = connection_info.substr(10); + } else { + host_name = "unknown"; + } + + ImVec2 image_screen_pos = ImVec2(ImGui::GetCursorScreenPos().x + 5.0f, + ImGui::GetCursorScreenPos().y + 5.0f); + ImVec2 image_pos = + ImVec2(ImGui::GetCursorPosX() + 5.0f, ImGui::GetCursorPosY() + 5.0f); + ImGui::SetCursorPos(image_pos); + ImGui::Image((ImTextureID)(intptr_t)it->second, + ImVec2((float)recent_connection_image_width_, + (float)recent_connection_image_height_)); + + // remote id display button + { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0.2f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0, 0, 0, 0.2f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0, 0, 0, 0.2f)); + + ImVec2 dummy_button_pos = + ImVec2(image_pos.x, image_pos.y + recent_connection_image_height_); + std::string dummy_button_name = "##DummyButton" + remote_id; + ImGui::SetCursorPos(dummy_button_pos); + ImGui::SetWindowFontScale(0.6f); + ImGui::Button(dummy_button_name.c_str(), + ImVec2(recent_connection_image_width_ - 2 * button_width, + button_height)); + ImGui::SetWindowFontScale(1.0f); + ImGui::SetCursorPos( + ImVec2(dummy_button_pos.x + 2.0f, dummy_button_pos.y + 1.0f)); + ImGui::SetWindowFontScale(0.65f); + ImGui::Text(remote_id.c_str()); + ImGui::SetWindowFontScale(1.0f); + ImGui::PopStyleColor(3); + + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip(); + ImGui::SetWindowFontScale(0.5f); + ImGui::Text(host_name.c_str()); + ImGui::SetWindowFontScale(1.0f); + ImGui::EndTooltip(); + } + } + + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0.2f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, + ImVec4(0.1f, 0.4f, 0.8f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, + ImVec4(1.0f, 1.0f, 1.0f, 0.7f)); + ImGui::SetWindowFontScale(0.5f); + // trash button + { + ImVec2 trash_can_button_pos = ImVec2( + image_pos.x + recent_connection_image_width_ - 2 * button_width, + image_pos.y + recent_connection_image_height_); + ImGui::SetCursorPos(trash_can_button_pos); + std::string trash_can = ICON_FA_TRASH_CAN; + std::string recent_connection_delete_button_name = + trash_can + "##RecentConnectionDelete" + + std::to_string(trash_can_button_pos.x); + if (ImGui::Button(recent_connection_delete_button_name.c_str(), + ImVec2(button_width, button_height))) { + show_confirm_delete_connection_ = true; + } + + if (delete_connection_) { + if (!thumbnail_->DeleteThumbnail(it->first)) { + reload_recent_connections_ = true; + delete_connection_ = false; + } + } + } + + // connect button + { + ImVec2 connect_button_pos = + ImVec2(image_pos.x + recent_connection_image_width_ - button_width, + image_pos.y + recent_connection_image_height_); + ImGui::SetCursorPos(connect_button_pos); + std::string connect = ICON_FA_ARROW_RIGHT_LONG; + std::string connect_to_this_connection_button_name = + connect + "##ConnectionTo" + it->first; + if (ImGui::Button(connect_to_this_connection_button_name.c_str(), + ImVec2(button_width, button_height))) { + LOG_ERROR("Connect to [{}], password [{}]", remote_id.c_str(), + password.c_str()); + remote_id_ = remote_id; + if (!password.empty() && password.size() == 6) { + remember_password_ = true; + } + strncpy(remote_password_, password.c_str(), 6); + ConnectTo(); + } + } + ImGui::SetWindowFontScale(1.0f); + ImGui::PopStyleColor(3); + + ImGui::EndChild(); + + if (count != recent_connections_count - 1) { + ImVec2 line_start = + ImVec2(image_screen_pos.x + recent_connection_image_width_ + 20.0f, + image_screen_pos.y); + ImVec2 line_end = ImVec2( + image_screen_pos.x + recent_connection_image_width_ + 20.0f, + image_screen_pos.y + recent_connection_image_height_ + button_height); + ImGui::GetForegroundDrawList()->AddLine(line_start, line_end, + IM_COL32(0, 0, 0, 122), 1.0f); + } + + count++; + ImGui::SameLine(0, count != recent_connections_count ? 26.0f : 0.0f); + } + + ImGui::EndChild(); + + if (show_confirm_delete_connection_) { + ConfirmDeleteConnection(); + } + + return 0; +} + +int Render::ConfirmDeleteConnection() { + const ImGuiViewport* viewport = ImGui::GetMainViewport(); + ImGui::SetNextWindowPos(ImVec2((viewport->WorkSize.x - viewport->WorkPos.x - + connection_status_window_width_) / + 2, + (viewport->WorkSize.y - viewport->WorkPos.y - + connection_status_window_height_) / + 2)); + + ImGui::SetNextWindowSize(ImVec2(connection_status_window_width_, + connection_status_window_height_)); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f); + ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(1.0, 1.0, 1.0, 1.0)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 1.0f); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 5.0f); + + ImGui::Begin("ConfirmDeleteConnectionWindow", nullptr, + ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | + ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | + ImGuiWindowFlags_NoSavedSettings); + ImGui::PopStyleVar(2); + ImGui::PopStyleColor(); + + std::string text = + localization::confirm_delete_connection[localization_language_index_]; + ImGui::SetCursorPosX(connection_status_window_width_ * 6 / 19); + ImGui::SetCursorPosY(connection_status_window_height_ * 2 / 3); + + // ok + ImGui::SetWindowFontScale(0.5f); + if (ImGui::Button(localization::ok[localization_language_index_].c_str()) || + ImGui::IsKeyPressed(ImGuiKey_Enter)) { + delete_connection_ = true; + show_confirm_delete_connection_ = false; + } + + ImGui::SameLine(); + // cancel + if (ImGui::Button( + localization::cancel[localization_language_index_].c_str()) || + ImGui::IsKeyPressed(ImGuiKey_Escape)) { + delete_connection_ = false; + show_confirm_delete_connection_ = false; + } + + auto window_width = ImGui::GetWindowSize().x; + auto window_height = ImGui::GetWindowSize().y; + + auto text_width = ImGui::CalcTextSize(text.c_str()).x; + ImGui::SetCursorPosX((window_width - text_width) * 0.5f); + ImGui::SetCursorPosY(window_height * 0.2f); + ImGui::Text(text.c_str()); + ImGui::SetWindowFontScale(1.0f); + + ImGui::End(); + ImGui::PopStyleVar(); + return 0; +} diff --git a/src/single_window/remote_peer_window.cpp b/src/single_window/remote_peer_window.cpp index c1d14f1..0db2e28 100644 --- a/src/single_window/remote_peer_window.cpp +++ b/src/single_window/remote_peer_window.cpp @@ -21,7 +21,6 @@ int Render::RemoteWindow() { ImGui::SetCursorPosY(ImGui::GetCursorPosY() + main_window_text_y_padding_); ImGui::Indent(main_child_window_x_padding_ - 1.0f); - ImGui::SetWindowFontScale(1.0f); ImGui::TextColored( ImVec4(0.0f, 0.0f, 0.0f, 0.5f), "%s", @@ -47,7 +46,7 @@ int Render::RemoteWindow() { ImGui::PopStyleVar(); ImGui::PopStyleColor(); { - ImGui::SetWindowFontScale(0.5f); + ImGui::SetWindowFontScale(0.8f); ImGui::Text( "%s", localization::remote_id[localization_language_index_].c_str()); diff --git a/src/single_window/render.h b/src/single_window/render.h index b785d4a..e582b8f 100644 --- a/src/single_window/render.h +++ b/src/single_window/render.h @@ -39,6 +39,7 @@ class Render { int MainWindow(); int LocalWindow(); int RemoteWindow(); + int RecentConnectionsWindow(); int SettingWindow(); int ControlWindow(); int ControlBar(); diff --git a/src/single_window/status_bar.cpp b/src/single_window/status_bar.cpp index f2c1483..0420975 100644 --- a/src/single_window/status_bar.cpp +++ b/src/single_window/status_bar.cpp @@ -13,17 +13,16 @@ int Render::StatusBar() { ImGuiChildFlags_Border, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBringToFrontOnFocus); + ImVec2 dot_pos = + ImVec2(13, main_window_height_default_ - status_bar_height_ + 11.0f); ImDrawList* draw_list = ImGui::GetWindowDrawList(); - draw_list->AddCircleFilled( - ImVec2(15, main_window_height_default_ - status_bar_height_ + 9.0f), 5, - ImColor(signal_connected_ ? 0.0f : 1.0f, signal_connected_ ? 1.0f : 0.0f, - 0.0f), - 100); - draw_list->AddCircle( - ImVec2(15, main_window_height_default_ - status_bar_height_ + 10.0f), 6, - ImColor(1.0f, 1.0f, 1.0f), 100); + draw_list->AddCircleFilled(dot_pos, 5.0f, + ImColor(signal_connected_ ? 0.0f : 1.0f, + signal_connected_ ? 1.0f : 0.0f, 0.0f), + 100); + draw_list->AddCircle(dot_pos, 6.0f, ImColor(1.0f, 1.0f, 1.0f), 100); - ImGui::SetWindowFontScale(0.5f); + ImGui::SetWindowFontScale(0.6f); draw_list->AddText( ImVec2(25, main_window_height_default_ - status_bar_height_ + 3.0f), ImColor(0.0f, 0.0f, 0.0f), diff --git a/src/single_window/title_bar.cpp b/src/single_window/title_bar.cpp index ba3150b..8a2b594 100644 --- a/src/single_window/title_bar.cpp +++ b/src/single_window/title_bar.cpp @@ -14,8 +14,9 @@ int Render::TitleBar(bool main_window) { ImGuiChildFlags_Border, ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBringToFrontOnFocus); - ImDrawList* draw_list = ImGui::GetWindowDrawList(); + ImGui::SetWindowFontScale(1.0f); + ImDrawList* draw_list = ImGui::GetWindowDrawList(); if (ImGui::BeginMenuBar()) { ImGui::SetCursorPosX( (main_window ? main_window_width_ : stream_window_width_) - @@ -157,8 +158,6 @@ int Render::TitleBar(bool main_window) { } ImGui::EndMenuBar(); - ImGui::SetWindowFontScale(1.0f); - ImGui::EndChild(); ImGui::PopStyleColor(); return 0;