Compare commits
1 Commits
tray_test1
...
dev_contac
Author | SHA1 | Date | |
---|---|---|---|
d795d328d3 |
6
external/sdl/CMakeLists.txt
vendored
6
external/sdl/CMakeLists.txt
vendored
@ -9,8 +9,7 @@ if (NOT TARGET SDL3::SDL3)
|
||||
set(SDL_DISABLE_ANDROID_JAR OFF CACHE INTERNAL "")
|
||||
|
||||
FetchContent_Declare(SDL3
|
||||
#GIT_REPOSITORY https://github.com/libsdl-org/SDL
|
||||
GIT_REPOSITORY https://github.com/Semphriss/SDL
|
||||
GIT_REPOSITORY https://github.com/libsdl-org/SDL
|
||||
#GIT_TAG 0429f5d6a36fc35b551bcc2acd4a40c2db6dab82 # tip when looking
|
||||
#GIT_TAG 14f584a94bfd49cf1524db75bf3c419fdf9436cd # tip 26-04-2024
|
||||
#GIT_TAG 06d6f2cb2518622593570985589700910cf4399f # 13-05-2024 - before
|
||||
@ -26,8 +25,7 @@ if (NOT TARGET SDL3::SDL3)
|
||||
#GIT_TAG 6e885d96193a4b0096fe7fed6d4e6c3e5f247283 # tip 09-09-2024
|
||||
#GIT_TAG 9dd8859240703d886941733ad32c1dc6f50d64f0 # tip 19-09-2024
|
||||
#GIT_TAG afdf325fb4090e93a124519d1a3bc1fbe0ba9025 # bad
|
||||
#GIT_TAG e292d1f5ace469f718d7b6b4dec8c28e37dcaa0e # tip 05-10-2024 (3.1.3)
|
||||
GIT_TAG c523f0bcfeb5700ee233b7fae3c2b036822b8627
|
||||
GIT_TAG e292d1f5ace469f718d7b6b4dec8c28e37dcaa0e # tip 05-10-2024 (3.1.3)
|
||||
|
||||
FIND_PACKAGE_ARGS # for the future
|
||||
)
|
||||
|
@ -66,9 +66,6 @@ target_sources(tomato PUBLIC
|
||||
./sdl_clipboard_utils.hpp
|
||||
./sdl_clipboard_utils.cpp
|
||||
|
||||
./sys_tray.hpp
|
||||
./sys_tray.cpp
|
||||
|
||||
./chat_gui/theme.hpp
|
||||
./chat_gui/theme.cpp
|
||||
./chat_gui/icons/direct.hpp
|
||||
@ -83,6 +80,8 @@ target_sources(tomato PUBLIC
|
||||
./chat_gui/icons/group.cpp
|
||||
./chat_gui/contact_list.hpp
|
||||
./chat_gui/contact_list.cpp
|
||||
./chat_gui/contact_tree.hpp
|
||||
./chat_gui/contact_tree.cpp
|
||||
./chat_gui/file_selector.hpp
|
||||
./chat_gui/file_selector.cpp
|
||||
./chat_gui/send_image_popup.hpp
|
||||
|
97
src/chat_gui/contact_tree.cpp
Normal file
97
src/chat_gui/contact_tree.cpp
Normal file
@ -0,0 +1,97 @@
|
||||
#include "./contact_tree.hpp"
|
||||
|
||||
#include <solanaceae/contact/components.hpp>
|
||||
|
||||
#include "./contact_list.hpp"
|
||||
#include "entt/entity/entity.hpp"
|
||||
|
||||
#include <imgui/imgui.h>
|
||||
|
||||
namespace Components {
|
||||
struct TagTreeViewOpen {};
|
||||
};
|
||||
|
||||
ContactTreeWindow::ContactTreeWindow(Contact3Registry& cr, Theme& theme, ContactTextureCache& ctc) : _cr(cr), _theme(theme), _ctc(ctc) {
|
||||
}
|
||||
|
||||
void ContactTreeWindow::render(void) {
|
||||
//{ // main window menubar injection
|
||||
// // assumes the window "tomato" was rendered already by cg
|
||||
// if (ImGui::Begin("tomato")) {
|
||||
// if (ImGui::BeginMenuBar()) {
|
||||
// ImGui::Separator();
|
||||
// if (ImGui::BeginMenu("Settings")) {
|
||||
// if (ImGui::MenuItem("settings window", nullptr, _show_window)) {
|
||||
// _show_window = !_show_window;
|
||||
// }
|
||||
// ImGui::EndMenu();
|
||||
// }
|
||||
// ImGui::EndMenuBar();
|
||||
// }
|
||||
// }
|
||||
// ImGui::End();
|
||||
//}
|
||||
|
||||
if (_show_window) {
|
||||
if (ImGui::Begin("ContactTreeWindow", &_show_window)) {
|
||||
|
||||
if (ImGui::BeginTable("##table", 1, ImGuiTableFlags_None)) {
|
||||
// first we need all root nodes
|
||||
for (const auto [cv_root] : _cr.view<Contact::Components::TagRoot>().each()) {
|
||||
ImGui::TableNextRow();
|
||||
ImGui::PushID(entt::to_integral(cv_root));
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
|
||||
Contact3Handle c_root {_cr, cv_root};
|
||||
bool open = c_root.all_of<Components::TagTreeViewOpen>();
|
||||
|
||||
bool has_children = c_root.all_of<Contact::Components::ParentOf>();
|
||||
|
||||
// roots are usually no normal contacts
|
||||
// they should display as a protocol or profile or account
|
||||
// TODO: set some table background instead of full span selected?
|
||||
if (renderContactBig(_theme, _ctc, c_root, 2, false, true)) {
|
||||
// clicked, toggle open
|
||||
if (open) {
|
||||
c_root.remove<Components::TagTreeViewOpen>();
|
||||
open = false;
|
||||
} else {
|
||||
c_root.emplace_or_replace<Components::TagTreeViewOpen>();
|
||||
open = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (open) {
|
||||
// render children
|
||||
|
||||
ImGui::Indent();
|
||||
|
||||
if (c_root.all_of<Contact::Components::ParentOf>()) {
|
||||
for (const auto cv_child : c_root.get<Contact::Components::ParentOf>().subs) {
|
||||
ImGui::PushID(entt::to_integral(cv_child));
|
||||
|
||||
Contact3Handle c_child {_cr, cv_child};
|
||||
renderContactBig(_theme, _ctc, c_child, 2);
|
||||
|
||||
ImGui::PopID();
|
||||
}
|
||||
} else {
|
||||
// TODO: remove
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::TextDisabled("no parent of");
|
||||
}
|
||||
|
||||
ImGui::Unindent();
|
||||
|
||||
}
|
||||
ImGui::PopID();
|
||||
}
|
||||
ImGui::EndTable();
|
||||
}
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
}
|
||||
|
23
src/chat_gui/contact_tree.hpp
Normal file
23
src/chat_gui/contact_tree.hpp
Normal file
@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#include <solanaceae/contact/contact_model3.hpp>
|
||||
|
||||
#include "./texture_cache_defs.hpp"
|
||||
|
||||
// fwd
|
||||
struct Theme;
|
||||
|
||||
class ContactTreeWindow {
|
||||
bool _show_window {true};
|
||||
|
||||
Contact3Registry& _cr;
|
||||
|
||||
Theme& _theme;
|
||||
ContactTextureCache& _ctc;
|
||||
|
||||
public:
|
||||
ContactTreeWindow(Contact3Registry& cr, Theme& theme, ContactTextureCache& ctc);
|
||||
|
||||
void render(void);
|
||||
};
|
||||
|
@ -43,6 +43,7 @@ MainScreen::MainScreen(SimpleConfigModel&& conf_, SDL_Renderer* renderer_, Theme
|
||||
mil(),
|
||||
msg_tc(mil, sdlrtu),
|
||||
cg(conf, os, rmm, cr, sdlrtu, contact_tc, msg_tc, theme),
|
||||
ctw(cr, theme, contact_tc),
|
||||
sw(conf),
|
||||
osui(os),
|
||||
tuiu(tc, conf),
|
||||
@ -357,6 +358,7 @@ Screen* MainScreen::render(float time_delta, bool&) {
|
||||
const float msgtc_interval = msg_tc.update();
|
||||
|
||||
const float cg_interval = cg.render(time_delta); // render
|
||||
ctw.render();
|
||||
sw.render(); // render
|
||||
osui.render();
|
||||
tuiu.render(); // render
|
||||
|
@ -29,9 +29,8 @@
|
||||
#include "./tox_avatar_loader.hpp"
|
||||
#include "./message_image_loader.hpp"
|
||||
|
||||
#include "./sys_tray.hpp"
|
||||
|
||||
#include "./chat_gui4.hpp"
|
||||
#include "./chat_gui/contact_tree.hpp"
|
||||
#include "./chat_gui/settings_window.hpp"
|
||||
#include "./object_store_ui.hpp"
|
||||
#include "./tox_ui_utils.hpp"
|
||||
@ -93,9 +92,8 @@ struct MainScreen final : public Screen {
|
||||
MessageImageLoader mil;
|
||||
TextureCache<void*, Message3Handle, MessageImageLoader> msg_tc;
|
||||
|
||||
SystemTray st;
|
||||
|
||||
ChatGui4 cg;
|
||||
ContactTreeWindow ctw;
|
||||
SettingsWindow sw;
|
||||
ObjectStoreUI osui;
|
||||
ToxUIUtils tuiu;
|
||||
|
@ -1,52 +0,0 @@
|
||||
#include "./sys_tray.hpp"
|
||||
|
||||
#include "./image_loader_sdl_image.hpp"
|
||||
|
||||
#include <cstdint>
|
||||
#include <fstream>
|
||||
#include <ios>
|
||||
#include <memory>
|
||||
#include <iostream>
|
||||
|
||||
SystemTray::SystemTray(void) {
|
||||
std::cout << "adding sys tray\n";
|
||||
|
||||
std::ifstream file("../res/icon/tomato_v1_256.png");
|
||||
file.seekg(0, std::ios::end);
|
||||
size_t file_size = file.tellg();
|
||||
file.seekg(0, std::ios::beg);
|
||||
std::vector<uint8_t> data(file_size);
|
||||
file.read(reinterpret_cast<char*>(data.data()), file_size);
|
||||
file.close();
|
||||
|
||||
std::cout << "tray icon file size: " << file_size << "\n";
|
||||
|
||||
ImageLoaderSDLImage il;
|
||||
auto image = il.loadFromMemoryRGBA(data.data(), data.size());
|
||||
std::unique_ptr<SDL_Surface, decltype(&SDL_DestroySurface)> surf = {
|
||||
SDL_CreateSurfaceFrom(
|
||||
image.width, image.height,
|
||||
SDL_PIXELFORMAT_RGBA32,
|
||||
(void*)image.frames.at(0).data.data(),
|
||||
4*image.width
|
||||
),
|
||||
&SDL_DestroySurface
|
||||
};
|
||||
|
||||
std::cout << "tray dims " << image.width << "x" << image.height << "\n";
|
||||
|
||||
|
||||
// different icons?
|
||||
_tray = SDL_CreateTray(surf.get(), "tomato");
|
||||
if (_tray == nullptr) {
|
||||
std::cerr << "failed to create SystemTray!!\n";
|
||||
}
|
||||
}
|
||||
|
||||
SystemTray::~SystemTray(void) {
|
||||
if (_tray != nullptr) {
|
||||
SDL_DestroyTray(_tray);
|
||||
_tray = nullptr;
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
class SystemTray {
|
||||
SDL_Tray* _tray {nullptr};
|
||||
|
||||
public:
|
||||
SystemTray(void);
|
||||
~SystemTray(void);
|
||||
};
|
||||
|
Reference in New Issue
Block a user