textbox and combox behaviours
textbox: when uneditable the caret is hide combox: when uneditable (default) - inherit the textbox behaviour - open the lister clicking the textbox area also
This commit is contained in:
		
							parent
							
								
									760a0a9b78
								
							
						
					
					
						commit
						3069d998f0
					
				@ -171,7 +171,7 @@ namespace nana
 | 
				
			|||||||
					if(editor_)
 | 
										if(editor_)
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						editor_->editable(enb);
 | 
											editor_->editable(enb);
 | 
				
			||||||
 | 
											editor_->show_caret(enb);
 | 
				
			||||||
						if (!enb)
 | 
											if (!enb)
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
							editor_->ext_renderer().background = [this](graph_reference graph, const ::nana::rectangle&, const ::nana::color&)
 | 
												editor_->ext_renderer().background = [this](graph_reference graph, const ::nana::rectangle&, const ::nana::color&)
 | 
				
			||||||
@ -245,22 +245,23 @@ namespace nana
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				void open_lister_if_push_button_positioned()
 | 
									void open_lister_if_push_button_positioned()
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					if((nullptr == state_.lister) && !items_.empty() && (parts::push_button == state_.pointer_where))
 | 
										if(nullptr == state_.lister && !items_.empty())
 | 
				
			||||||
					{
 | 
											if((parts::push_button == state_.pointer_where && editor_->attr().editable) || !editor_->attr().editable)
 | 
				
			||||||
						module_.items.clear();
 | 
					 | 
				
			||||||
						std::copy(items_.cbegin(), items_.cend(), std::back_inserter(module_.items));
 | 
					 | 
				
			||||||
						state_.lister = &form_loader<nana::float_listbox, false>()(widget_->handle(), nana::rectangle(0, widget_->size().height, widget_->size().width, 10), true);
 | 
					 | 
				
			||||||
						state_.lister->renderer(item_renderer_);
 | 
					 | 
				
			||||||
						state_.lister->set_module(module_, image_pixels_);
 | 
					 | 
				
			||||||
						state_.item_index_before_selection = module_.index;
 | 
					 | 
				
			||||||
						//The lister window closes by itself. I just take care about the destroy event.
 | 
					 | 
				
			||||||
						//The event should be destroy rather than unload. Because the unload event is invoked while
 | 
					 | 
				
			||||||
						//the lister is not closed, if popuping a message box, the lister will cover the message box.
 | 
					 | 
				
			||||||
						state_.lister->events().destroy.connect_unignorable([this]
 | 
					 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
							_m_lister_close_sig();
 | 
												module_.items.clear();
 | 
				
			||||||
						});
 | 
												std::copy(items_.cbegin(), items_.cend(), std::back_inserter(module_.items));
 | 
				
			||||||
					}
 | 
												state_.lister = &form_loader<nana::float_listbox, false>()(widget_->handle(), nana::rectangle(0, widget_->size().height, widget_->size().width, 10), true);
 | 
				
			||||||
 | 
												state_.lister->renderer(item_renderer_);
 | 
				
			||||||
 | 
												state_.lister->set_module(module_, image_pixels_);
 | 
				
			||||||
 | 
												state_.item_index_before_selection = module_.index;
 | 
				
			||||||
 | 
												//The lister window closes by itself. I just take care about the destroy event.
 | 
				
			||||||
 | 
												//The event should be destroy rather than unload. Because the unload event is invoked while
 | 
				
			||||||
 | 
												//the lister is not closed, if popuping a message box, the lister will cover the message box.
 | 
				
			||||||
 | 
												state_.lister->events().destroy.connect_unignorable([this]
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
													_m_lister_close_sig();
 | 
				
			||||||
 | 
												});
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				void scroll_items(bool upwards)
 | 
									void scroll_items(bool upwards)
 | 
				
			||||||
@ -622,8 +623,8 @@ namespace nana
 | 
				
			|||||||
					if(drawer_->widget_ptr()->enabled())
 | 
										if(drawer_->widget_ptr()->enabled())
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						auto * editor = drawer_->editor();
 | 
											auto * editor = drawer_->editor();
 | 
				
			||||||
						if (!editor->mouse_pressed(arg))
 | 
											editor->mouse_pressed(arg);
 | 
				
			||||||
							drawer_->open_lister_if_push_button_positioned();
 | 
											drawer_->open_lister_if_push_button_positioned();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						drawer_->draw();
 | 
											drawer_->draw();
 | 
				
			||||||
						if(editor->attr().editable)
 | 
											if(editor->attr().editable)
 | 
				
			||||||
 | 
				
			|||||||
@ -1639,11 +1639,14 @@ namespace nana{	namespace widgets
 | 
				
			|||||||
		bool text_editor::mouse_move(bool left_button, const point& scrpos)
 | 
							bool text_editor::mouse_move(bool left_button, const point& scrpos)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			cursor cur = cursor::iterm;
 | 
								cursor cur = cursor::iterm;
 | 
				
			||||||
			if ((!hit_text_area(scrpos)) && (!text_area_.captured))
 | 
								if(((!hit_text_area(scrpos)) && (!text_area_.captured)) || !attributes_.editable || !API::window_enabled(window_))
 | 
				
			||||||
				cur = cursor::arrow;
 | 
									cur = cursor::arrow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			API::window_cursor(window_, cur);
 | 
								API::window_cursor(window_, cur);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if(!attributes_.editable)
 | 
				
			||||||
 | 
									return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if(left_button)
 | 
								if(left_button)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				auto caret_pos_before = caret();
 | 
									auto caret_pos_before = caret();
 | 
				
			||||||
@ -1662,6 +1665,9 @@ namespace nana{	namespace widgets
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		bool text_editor::mouse_pressed(const arg_mouse& arg)
 | 
							bool text_editor::mouse_pressed(const arg_mouse& arg)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								if(!attributes_.editable)
 | 
				
			||||||
 | 
									return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (event_code::mouse_down == arg.evt_code)
 | 
								if (event_code::mouse_down == arg.evt_code)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (!hit_text_area(arg.pos))
 | 
									if (!hit_text_area(arg.pos))
 | 
				
			||||||
@ -1790,6 +1796,9 @@ namespace nana{	namespace widgets
 | 
				
			|||||||
					reset_caret_pixels();
 | 
										reset_caret_pixels();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if(!attributes_.editable)
 | 
				
			||||||
 | 
									visible = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			API::caret_visible(window_, visible);
 | 
								API::caret_visible(window_, visible);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if(visible)
 | 
								if(visible)
 | 
				
			||||||
@ -3065,7 +3074,7 @@ namespace nana{	namespace widgets
 | 
				
			|||||||
			graph_.palette(false, scheme_->selection.get_color());
 | 
								graph_.palette(false, scheme_->selection.get_color());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//The text is not selected or the whole line text is selected
 | 
								//The text is not selected or the whole line text is selected
 | 
				
			||||||
			if (!focused || (!_m_get_sort_select_points(a, b)) || (select_.a.y != str_pos.y && select_.b.y != str_pos.y))
 | 
								if(!focused || (!_m_get_sort_select_points(a, b)) || (select_.a.y != str_pos.y && select_.b.y != str_pos.y) || !attributes_.editable)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				bool selected = (a.y < str_pos.y && str_pos.y < b.y);
 | 
									bool selected = (a.y < str_pos.y && str_pos.y < b.y);
 | 
				
			||||||
				for (auto & ent : reordered)
 | 
									for (auto & ent : reordered)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user