Compare commits
	
		
			1 Commits
		
	
	
		
			c7ae6490cc
			...
			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