Compare commits
	
		
			1 Commits
		
	
	
		
			ac951b2afa
			...
			dev_contac
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d795d328d3 | 
@@ -80,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
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,7 @@
 | 
			
		||||
#include "./message_image_loader.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"
 | 
			
		||||
@@ -92,6 +93,7 @@ struct MainScreen final : public Screen {
 | 
			
		||||
	TextureCache<void*, Message3Handle, MessageImageLoader> msg_tc;
 | 
			
		||||
 | 
			
		||||
	ChatGui4 cg;
 | 
			
		||||
	ContactTreeWindow ctw;
 | 
			
		||||
	SettingsWindow sw;
 | 
			
		||||
	ObjectStoreUI osui;
 | 
			
		||||
	ToxUIUtils tuiu;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user