mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Implemented blinking icon to highlight a searched field
This commit is contained in:
		
							parent
							
								
									2317437ede
								
							
						
					
					
						commit
						752083cbe6
					
				
					 6 changed files with 59 additions and 18 deletions
				
			
		|  | @ -57,6 +57,9 @@ void Field::PostInitialize() | |||
|     m_Undo_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent) { on_back_to_initial_value(); })); | ||||
| 	m_Undo_to_sys_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent) { on_back_to_sys_value(); })); | ||||
| 
 | ||||
| 	m_attention_bmp		= ScalableBitmap(m_parent, "error_tick_f"); | ||||
| 	m_find_image		= new wxStaticBitmap(m_parent, wxID_ANY, wxNullBitmap, wxDefaultPosition, m_attention_bmp.bmp().GetSize()); | ||||
| 
 | ||||
| 	switch (m_opt.type) | ||||
| 	{ | ||||
| 	case coPercents: | ||||
|  |  | |||
|  | @ -191,6 +191,19 @@ public: | |||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	void	invalidate_attention_bmp() const { | ||||
|         m_find_image->SetBitmap(wxNullBitmap); | ||||
|     } | ||||
| 
 | ||||
| 	void	activate_attention_bmp() const { | ||||
| 		m_find_image->SetBitmap(m_attention_bmp.bmp()); | ||||
| 	} | ||||
| 
 | ||||
| 	void	blink_attention_bmp() const { | ||||
| 		bool is_shown = m_find_image->IsShown(); | ||||
| 		m_find_image->Show(!is_shown); | ||||
| 	} | ||||
| 
 | ||||
| 	bool	set_label_colour_force(const wxColour *clr) { | ||||
| 		if (m_Label == nullptr) return false; | ||||
| 		m_Label->SetForegroundColour(*clr); | ||||
|  | @ -240,6 +253,9 @@ protected: | |||
|     const ScalableBitmap*   m_undo_to_sys_bitmap = nullptr; | ||||
| 	const wxString*		    m_undo_to_sys_tooltip = nullptr; | ||||
| 
 | ||||
| 	ScalableBitmap			m_attention_bmp; | ||||
| 	wxStaticBitmap*			m_find_image{ nullptr }; | ||||
| 
 | ||||
| 	wxStaticText*		m_Label = nullptr; | ||||
| 	// Color for Label. The wxColour will be updated only if the new wxColour pointer differs from the currently rendered one.
 | ||||
| 	const wxColour*		m_label_color = nullptr; | ||||
|  |  | |||
|  | @ -110,6 +110,7 @@ void OptionsGroup::add_undo_buttuns_to_sizer(wxSizer* sizer, const t_field& fiel | |||
| 
 | ||||
| 	sizer->Add(field->m_Undo_to_sys_btn, 0, wxALIGN_CENTER_VERTICAL); | ||||
| 	sizer->Add(field->m_Undo_btn, 0, wxALIGN_CENTER_VERTICAL); | ||||
|     sizer->Add(field->m_find_image, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 2); | ||||
| } | ||||
| 
 | ||||
| void OptionsGroup::append_line(const Line& line, wxStaticText**	full_Label/* = nullptr*/) { | ||||
|  |  | |||
|  | @ -195,23 +195,6 @@ public: | |||
|         sizer->Add(m_grid_sizer, 0, wxEXPAND | wxALL, wxOSX||!staticbox ? 0: 5); | ||||
| #endif /* __WXGTK__ */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|         if (stb) | ||||
|             stb->Bind(wxEVT_PAINT, [this](wxPaintEvent& evt) { | ||||
|                 evt.Skip(); | ||||
|                 const wxSize sz = stb->GetSize(); | ||||
|                 wxPaintDC dc(stb); | ||||
|                 const wxPen pen = wxPen(wxColour(250, 10, 10), 2, wxPENSTYLE_SOLID); | ||||
|                 dc.SetPen(pen); | ||||
|                 dc.SetBrush(wxBrush(wxColour(250, 0, 0), wxBRUSHSTYLE_SOLID)); | ||||
|                 dc.DrawRectangle(25, 25, sz.x - 25, sz.y - 25); | ||||
| /*
 | ||||
|                 HDC hdc = GetHdcOf(dc); | ||||
|                 RECT dim = { 5, 5, sz.x - 5, sz.y - 5 }; | ||||
|                 ::FillRect(hdc, &dim, GetHbrushOf(wxBrush(wxColour( 0, 250,0), wxBRUSHSTYLE_SOLID))); | ||||
| */ | ||||
|             }); | ||||
|     } | ||||
| 
 | ||||
|     wxGridSizer*        get_grid_sizer() { return m_grid_sizer; } | ||||
|  |  | |||
|  | @ -69,6 +69,13 @@ Tab::Tab(wxNotebook* parent, const wxString& title, Preset::Type type) : | |||
|                 page->layout_valid = false; | ||||
|         evt.Skip(); | ||||
|     })); | ||||
| 
 | ||||
|     this->m_highlighting_timer.SetOwner(this, 0); | ||||
|     this->Bind(wxEVT_TIMER, [this](wxTimerEvent&) | ||||
|     { | ||||
|         if (!m_highlighter.blink()) | ||||
|             m_highlighting_timer.Stop(); | ||||
|     }); | ||||
| } | ||||
| 
 | ||||
| void Tab::set_type() | ||||
|  | @ -992,8 +999,11 @@ void Tab::activate_option(const std::string& opt_key, const wxString& category) | |||
|         tap_panel->SetSelection(page_id); | ||||
| 
 | ||||
|     // focused selected field
 | ||||
|     if (field) | ||||
|     if (field) { | ||||
|         field->getWindow()->SetFocus(); | ||||
|         m_highlighting_timer.Start(500, false); | ||||
|         m_highlighter.init(field); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -224,6 +224,34 @@ protected: | |||
|     bool                m_completed { false }; | ||||
|     ConfigOptionMode    m_mode = comExpert; // to correct first Tab update_visibility() set mode to Expert
 | ||||
| 
 | ||||
| 	wxTimer             m_highlighting_timer; | ||||
| 	struct { | ||||
| 	    Field*	field {nullptr}; | ||||
| 		int		blink_counter {0}; | ||||
| 
 | ||||
| 		void init(Field* f) | ||||
| 		{ | ||||
| 		    field = f; | ||||
| 			field->activate_attention_bmp(); | ||||
| 		} | ||||
| 
 | ||||
| 		void invalidate() | ||||
| 		{ | ||||
| 			field->invalidate_attention_bmp(); | ||||
| 		    field = nullptr; | ||||
| 			blink_counter = 0; | ||||
| 		} | ||||
| 
 | ||||
| 		bool blink() | ||||
| 		{ | ||||
| 			field->blink_attention_bmp(); | ||||
| 			if ((++blink_counter) == 5) | ||||
| 			    invalidate(); | ||||
| 
 | ||||
| 			return blink_counter != 0; | ||||
| 		} | ||||
| 	} m_highlighter; | ||||
| 
 | ||||
| public: | ||||
| 	PresetBundle*		m_preset_bundle; | ||||
| 	bool				m_show_btn_incompatible_presets = false; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 YuSanka
						YuSanka