mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Merge branch 'dk_notifications'
This commit is contained in:
		
						commit
						7c1f1b36d5
					
				
					 5 changed files with 50 additions and 21 deletions
				
			
		|  | @ -2517,7 +2517,7 @@ wxDataViewItem ObjectList::add_settings_item(wxDataViewItem parent_item, const D | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selections/* = nullptr*/) | void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selections/* = nullptr*/, bool added_object/* = false*/) | ||||||
| { | { | ||||||
|     const ModelObject* model_object = (*m_objects)[obj_idx]; |     const ModelObject* model_object = (*m_objects)[obj_idx]; | ||||||
|     wxDataViewItem item_obj = m_objects_model->GetItemById(obj_idx); |     wxDataViewItem item_obj = m_objects_model->GetItemById(obj_idx); | ||||||
|  | @ -2561,8 +2561,8 @@ void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selectio | ||||||
|         if (! shows && should_show) { |         if (! shows && should_show) { | ||||||
|             m_objects_model->AddInfoChild(item_obj, type); |             m_objects_model->AddInfoChild(item_obj, type); | ||||||
|             Expand(item_obj); |             Expand(item_obj); | ||||||
|             wxGetApp().notification_manager()->push_updated_item_info_notification(type); |             if (added_object) | ||||||
|              |                 wxGetApp().notification_manager()->push_updated_item_info_notification(type);  | ||||||
|         } |         } | ||||||
|         else if (shows && ! should_show) { |         else if (shows && ! should_show) { | ||||||
|             if (!selections) |             if (!selections) | ||||||
|  | @ -2594,7 +2594,7 @@ void ObjectList::add_object_to_list(size_t obj_idx, bool call_selection_changed) | ||||||
|                       model_object->config.has("extruder") ? model_object->config.extruder() : 0, |                       model_object->config.has("extruder") ? model_object->config.extruder() : 0, | ||||||
|                       get_mesh_errors_count(obj_idx) > 0); |                       get_mesh_errors_count(obj_idx) > 0); | ||||||
| 
 | 
 | ||||||
|     update_info_items(obj_idx); |     update_info_items(obj_idx, nullptr, true); | ||||||
| 
 | 
 | ||||||
|     // add volumes to the object
 |     // add volumes to the object
 | ||||||
|     if (model_object->volumes.size() > 1) { |     if (model_object->volumes.size() > 1) { | ||||||
|  |  | ||||||
|  | @ -350,7 +350,7 @@ public: | ||||||
|     void update_and_show_object_settings_item(); |     void update_and_show_object_settings_item(); | ||||||
|     void update_settings_item_and_selection(wxDataViewItem item, wxDataViewItemArray& selections); |     void update_settings_item_and_selection(wxDataViewItem item, wxDataViewItemArray& selections); | ||||||
|     void update_object_list_by_printer_technology(); |     void update_object_list_by_printer_technology(); | ||||||
|     void update_info_items(size_t obj_idx, wxDataViewItemArray* selections = nullptr); |     void update_info_items(size_t obj_idx, wxDataViewItemArray* selections = nullptr, bool added_object = false); | ||||||
| 
 | 
 | ||||||
|     void instances_to_separated_object(const int obj_idx, const std::set<int>& inst_idx); |     void instances_to_separated_object(const int obj_idx, const std::set<int>& inst_idx); | ||||||
|     void instances_to_separated_objects(const int obj_idx); |     void instances_to_separated_objects(const int obj_idx); | ||||||
|  |  | ||||||
|  | @ -61,7 +61,7 @@ static const std::map<const wchar_t, std::string> font_icons_large = { | ||||||
|     {ImGui::SinkingObjectMarker     , "move"                            }, |     {ImGui::SinkingObjectMarker     , "move"                            }, | ||||||
|     {ImGui::CustomSupportsMarker    , "fdm_supports"                    }, |     {ImGui::CustomSupportsMarker    , "fdm_supports"                    }, | ||||||
|     {ImGui::CustomSeamMarker        , "seam"                            }, |     {ImGui::CustomSeamMarker        , "seam"                            }, | ||||||
|     {ImGui::MmuSegmentationMarker   , "move"                            }, |     {ImGui::MmuSegmentationMarker   , "fdm_supports"                    }, | ||||||
|     {ImGui::VarLayerHeightMarker    , "layers"                          }, |     {ImGui::VarLayerHeightMarker    , "layers"                          }, | ||||||
|     {ImGui::DocumentationButton     , "notification_documentation"      }, |     {ImGui::DocumentationButton     , "notification_documentation"      }, | ||||||
|     {ImGui::DocumentationHoverButton, "notification_documentation_hover"}, |     {ImGui::DocumentationHoverButton, "notification_documentation_hover"}, | ||||||
|  |  | ||||||
|  | @ -1074,10 +1074,39 @@ void NotificationManager::UpdatedItemsInfoNotification::count_spaces() | ||||||
| 	m_window_width_offset = m_left_indentation + m_line_height * 3.f; | 	m_window_width_offset = m_left_indentation + m_line_height * 3.f; | ||||||
| 	m_window_width = m_line_height * 25; | 	m_window_width = m_line_height * 25; | ||||||
| } | } | ||||||
|  | void NotificationManager::UpdatedItemsInfoNotification::add_type(InfoItemType type) | ||||||
|  | { | ||||||
|  | 	std::vector<std::pair<InfoItemType, size_t>>::iterator it = m_types_and_counts.begin(); | ||||||
|  | 	for (; it != m_types_and_counts.end(); ++it) { | ||||||
|  | 		if ((*it).first == type) { | ||||||
|  | 			(*it).second++; | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if (it == m_types_and_counts.end()) | ||||||
|  | 		m_types_and_counts.emplace_back(type, 1); | ||||||
|  | 
 | ||||||
|  | 	std::string text; | ||||||
|  | 	for (it = m_types_and_counts.begin(); it != m_types_and_counts.end(); ++it) { | ||||||
|  | 		text += std::to_string((*it).second); | ||||||
|  | 		text += _L_PLURAL(" Object was loaded with "," Objects were loaded with ", (*it).second).ToUTF8().data(); | ||||||
|  | 		switch ((*it).first) { | ||||||
|  | 		case InfoItemType::CustomSupports:      text += _utf8("custom supports.\n"); break; | ||||||
|  | 		case InfoItemType::CustomSeam:          text += _utf8("custom seam.\n"); break; | ||||||
|  | 		case InfoItemType::MmuSegmentation:     text += _utf8("multimaterial painting.\n"); break; | ||||||
|  | 		case InfoItemType::VariableLayerHeight: text += _utf8("variable layer height.\n"); break; | ||||||
|  | 		case InfoItemType::Sinking:             text += _utf8("Partial sinking.\n"); break; | ||||||
|  | 		default: text.clear(); break; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	NotificationData data { get_data().type, get_data().level , get_data().duration, text }; | ||||||
|  | 	update(data); | ||||||
|  | } | ||||||
| void NotificationManager::UpdatedItemsInfoNotification::render_left_sign(ImGuiWrapper& imgui) | void NotificationManager::UpdatedItemsInfoNotification::render_left_sign(ImGuiWrapper& imgui) | ||||||
| { | { | ||||||
| 	std::string text; | 	std::string text; | ||||||
| 	switch (m_info_item_type) { | 	InfoItemType type = (m_types_and_counts.empty() ? InfoItemType::CustomSupports : m_types_and_counts[0].first); | ||||||
|  | 	switch (type) { | ||||||
| 	case InfoItemType::CustomSupports:      text = ImGui::CustomSupportsMarker; break; | 	case InfoItemType::CustomSupports:      text = ImGui::CustomSupportsMarker; break; | ||||||
| 	case InfoItemType::CustomSeam:          text = ImGui::CustomSeamMarker; break; | 	case InfoItemType::CustomSeam:          text = ImGui::CustomSeamMarker; break; | ||||||
| 	case InfoItemType::MmuSegmentation:     text = ImGui::MmuSegmentationMarker; break; | 	case InfoItemType::MmuSegmentation:     text = ImGui::MmuSegmentationMarker; break; | ||||||
|  | @ -1349,7 +1378,6 @@ void NotificationManager::upload_job_notification_show_error(int id, const std:: | ||||||
| } | } | ||||||
| void NotificationManager::push_hint_notification(bool open_next) | void NotificationManager::push_hint_notification(bool open_next) | ||||||
| { | { | ||||||
| 	 |  | ||||||
| 	for (std::unique_ptr<PopNotification>& notification : m_pop_notifications) { | 	for (std::unique_ptr<PopNotification>& notification : m_pop_notifications) { | ||||||
| 		if (notification->get_type() == NotificationType::DidYouKnowHint) { | 		if (notification->get_type() == NotificationType::DidYouKnowHint) { | ||||||
| 			if (open_next) | 			if (open_next) | ||||||
|  | @ -1375,19 +1403,19 @@ bool NotificationManager::is_hint_notification_open() | ||||||
| 
 | 
 | ||||||
| void NotificationManager::push_updated_item_info_notification(InfoItemType type) | void NotificationManager::push_updated_item_info_notification(InfoItemType type) | ||||||
| { | { | ||||||
| 	std::string text = _utf8("Object(s) were loaded with "); | 	for (std::unique_ptr<PopNotification>& notification : m_pop_notifications) { | ||||||
| 	switch (type) { | 		if (notification->get_type() == NotificationType::UpdatedItemsInfo) { | ||||||
| 	case InfoItemType::CustomSupports:      text += _utf8("custom supports."); break; | 			(dynamic_cast<UpdatedItemsInfoNotification*>(notification.get()))->add_type(type); | ||||||
| 	case InfoItemType::CustomSeam:          text += _utf8("custom seam."); break; | 			return; | ||||||
|     case InfoItemType::MmuSegmentation:     text += _utf8("multimaterial painting."); break; | 		} | ||||||
| 	case InfoItemType::VariableLayerHeight: text += _utf8("variable layer height."); break; |  | ||||||
| 	case InfoItemType::Sinking:             text = _utf8("Partially sinking object(s) were loaded."); break; |  | ||||||
| 	default: text.clear(); break; |  | ||||||
| 	} | 	} | ||||||
| 	if (!text.empty()) { | 
 | ||||||
| 		NotificationData data{ NotificationType::UpdatedItemsInfo, NotificationLevel::RegularNotification, 10, text }; | 	NotificationData data{ NotificationType::UpdatedItemsInfo, NotificationLevel::RegularNotification, 5, "" }; | ||||||
| 		push_notification_data(std::make_unique<NotificationManager::UpdatedItemsInfoNotification>(data, m_id_provider, m_evt_handler, type), 0); | 	auto notification = std::make_unique<NotificationManager::UpdatedItemsInfoNotification>(data, m_id_provider, m_evt_handler, type); | ||||||
|  | 	if (push_notification_data(std::move(notification), 0)) { | ||||||
|  | 		(dynamic_cast<UpdatedItemsInfoNotification*>(m_pop_notifications.back().get()))->add_type(type); | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| } | } | ||||||
| bool NotificationManager::push_notification_data(const NotificationData& notification_data, int timestamp) | bool NotificationManager::push_notification_data(const NotificationData& notification_data, int timestamp) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -499,13 +499,14 @@ private: | ||||||
| 	public: | 	public: | ||||||
| 		UpdatedItemsInfoNotification(const NotificationData& n, NotificationIDProvider& id_provider, wxEvtHandler* evt_handler, InfoItemType info_item_type) | 		UpdatedItemsInfoNotification(const NotificationData& n, NotificationIDProvider& id_provider, wxEvtHandler* evt_handler, InfoItemType info_item_type) | ||||||
| 			: PopNotification(n, id_provider, evt_handler) | 			: PopNotification(n, id_provider, evt_handler) | ||||||
| 			, m_info_item_type(info_item_type) |  | ||||||
| 		{ | 		{ | ||||||
|  | 			//m_types_and_counts.emplace_back(info_item_type, 1);
 | ||||||
| 		} | 		} | ||||||
| 		void count_spaces() override; | 		void count_spaces() override; | ||||||
|  | 		void add_type(InfoItemType type); | ||||||
| 	protected: | 	protected: | ||||||
| 		void render_left_sign(ImGuiWrapper& imgui) override; | 		void render_left_sign(ImGuiWrapper& imgui) override; | ||||||
| 		InfoItemType m_info_item_type; | 		std::vector<std::pair<InfoItemType, size_t>> m_types_and_counts; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	// in HintNotification.hpp
 | 	// in HintNotification.hpp
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David Kocik
						David Kocik