public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
		{
			wfes = (IWindowsFormsEditorService)	provider.GetService(typeof(IWindowsFormsEditorService));
			if((wfes == null) || (context == null))
				return null ;
			
			ImageList imageList = GetImageList(context.Instance) ;
			if ((imageList == null) || (imageList.Images.Count==0))
				return -1 ;

			m_imagePanel = new ImageListPanel(); 
						
			m_imagePanel.BackgroundColor = Color.FromArgb(241,241,241);
			m_imagePanel.BackgroundOverColor = Color.FromArgb(102,154,204);
			m_imagePanel.HLinesColor = Color.FromArgb(182,189,210);
			m_imagePanel.VLinesColor = Color.FromArgb(182,189,210);
			m_imagePanel.BorderColor = Color.FromArgb(0,0,0);
			m_imagePanel.EnableDragDrop = true;
			m_imagePanel.Init(imageList,12,12,6,(int)value);
			
			// add listner for event
			m_imagePanel.ItemClick += new ImageListPanelEventHandler(OnItemClicked);
			
			// set m_selectedIndex to -1 in case the dropdown is closed without selection
			m_selectedIndex = -1;
			// show the popup as a drop-down
			wfes.DropDownControl(m_imagePanel) ;
			
			// return the selection (or the original value if none selected)
			return (m_selectedIndex != -1) ? m_selectedIndex : (int) value ;
		}
		public void OnItemClicked(object sender, ImageListPanelEventArgs e)
		{
			m_selectedIndex = ((ImageListPanelEventArgs) e).SelectedItem;
			
			//remove listner
			m_imagePanel.ItemClick -= new ImageListPanelEventHandler(OnItemClicked);
			
			// close the drop-dwon, we are done
			wfes.CloseDropDown() ;

			m_imagePanel.Dispose() ;
			m_imagePanel = null ;
		}