Compare commits
	
		
			1 Commits
		
	
	
		
			43f6759d42
			...
			dev_contac
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d795d328d3 | 
@@ -80,6 +80,8 @@ target_sources(tomato PUBLIC
 | 
				
			|||||||
	./chat_gui/icons/group.cpp
 | 
						./chat_gui/icons/group.cpp
 | 
				
			||||||
	./chat_gui/contact_list.hpp
 | 
						./chat_gui/contact_list.hpp
 | 
				
			||||||
	./chat_gui/contact_list.cpp
 | 
						./chat_gui/contact_list.cpp
 | 
				
			||||||
 | 
						./chat_gui/contact_tree.hpp
 | 
				
			||||||
 | 
						./chat_gui/contact_tree.cpp
 | 
				
			||||||
	./chat_gui/file_selector.hpp
 | 
						./chat_gui/file_selector.hpp
 | 
				
			||||||
	./chat_gui/file_selector.cpp
 | 
						./chat_gui/file_selector.cpp
 | 
				
			||||||
	./chat_gui/send_image_popup.hpp
 | 
						./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(),
 | 
						mil(),
 | 
				
			||||||
	msg_tc(mil, sdlrtu),
 | 
						msg_tc(mil, sdlrtu),
 | 
				
			||||||
	cg(conf, os, rmm, cr, sdlrtu, contact_tc, msg_tc, theme),
 | 
						cg(conf, os, rmm, cr, sdlrtu, contact_tc, msg_tc, theme),
 | 
				
			||||||
 | 
						ctw(cr, theme, contact_tc),
 | 
				
			||||||
	sw(conf),
 | 
						sw(conf),
 | 
				
			||||||
	osui(os),
 | 
						osui(os),
 | 
				
			||||||
	tuiu(tc, conf),
 | 
						tuiu(tc, conf),
 | 
				
			||||||
@@ -357,6 +358,7 @@ Screen* MainScreen::render(float time_delta, bool&) {
 | 
				
			|||||||
	const float msgtc_interval = msg_tc.update();
 | 
						const float msgtc_interval = msg_tc.update();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const float cg_interval = cg.render(time_delta); // render
 | 
						const float cg_interval = cg.render(time_delta); // render
 | 
				
			||||||
 | 
						ctw.render();
 | 
				
			||||||
	sw.render(); // render
 | 
						sw.render(); // render
 | 
				
			||||||
	osui.render();
 | 
						osui.render();
 | 
				
			||||||
	tuiu.render(); // render
 | 
						tuiu.render(); // render
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,7 @@
 | 
				
			|||||||
#include "./message_image_loader.hpp"
 | 
					#include "./message_image_loader.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "./chat_gui4.hpp"
 | 
					#include "./chat_gui4.hpp"
 | 
				
			||||||
 | 
					#include "./chat_gui/contact_tree.hpp"
 | 
				
			||||||
#include "./chat_gui/settings_window.hpp"
 | 
					#include "./chat_gui/settings_window.hpp"
 | 
				
			||||||
#include "./object_store_ui.hpp"
 | 
					#include "./object_store_ui.hpp"
 | 
				
			||||||
#include "./tox_ui_utils.hpp"
 | 
					#include "./tox_ui_utils.hpp"
 | 
				
			||||||
@@ -92,6 +93,7 @@ struct MainScreen final : public Screen {
 | 
				
			|||||||
	TextureCache<void*, Message3Handle, MessageImageLoader> msg_tc;
 | 
						TextureCache<void*, Message3Handle, MessageImageLoader> msg_tc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ChatGui4 cg;
 | 
						ChatGui4 cg;
 | 
				
			||||||
 | 
						ContactTreeWindow ctw;
 | 
				
			||||||
	SettingsWindow sw;
 | 
						SettingsWindow sw;
 | 
				
			||||||
	ObjectStoreUI osui;
 | 
						ObjectStoreUI osui;
 | 
				
			||||||
	ToxUIUtils tuiu;
 | 
						ToxUIUtils tuiu;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user