# include  "toggle.hpp" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Toggle : : Toggle ( QWidget  * parent )  :  QAbstractButton ( parent ) , 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								_height ( 80 ) , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_height_rect ( 60 ) , 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								on ( false ) , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								_anim ( new  QPropertyAnimation ( this ,  " offset_circle " ,  this ) ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  _radius  =  _height  /  2 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  _x_circle  =  _radius ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  _y_circle  =  _radius ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  _y_rect  =  ( _height  -  _height_rect ) / 2 ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  circleColor  =  QColor ( 0xffffff ) ;  // placeholder
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  green  =  QColor ( 0xffffff ) ;  // placeholder
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  setEnabled ( true ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  Toggle : : paintEvent ( QPaintEvent  * e )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  this - > setFixedHeight ( _height ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QPainter  p ( this ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  p . setPen ( Qt : : NoPen ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  p . setRenderHint ( QPainter : : Antialiasing ,  true ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // Draw toggle background left
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  p . setBrush ( green ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  p . drawRoundedRect ( QRect ( 0 ,  _y_rect ,  _x_circle  +  _radius ,  _height_rect ) ,  _height_rect / 2 ,  _height_rect / 2 ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // Draw toggle background right
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  p . setBrush ( QColor ( 0x393939 ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  p . drawRoundedRect ( QRect ( _x_circle  -  _radius ,  _y_rect ,  width ( )  -  ( _x_circle  -  _radius ) ,  _height_rect ) ,  _height_rect / 2 ,  _height_rect / 2 ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // Draw toggle circle
   
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  p . setBrush ( circleColor ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  p . drawEllipse ( QRectF ( _x_circle  -  _radius ,  _y_circle  -  _radius ,  2  *  _radius ,  2  *  _radius ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  Toggle : : mouseReleaseEvent ( QMouseEvent  * e )  { 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if ( ! enabled ) { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  int  left  =  _radius ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  int  right  =  width ( )  -  _radius ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if ( _x_circle  ! =  left  & &  _x_circle  ! =  right ) { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    //Don't parse touch events, while the animation is running
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( e - > button ( )  &  Qt : : LeftButton )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    togglePosition ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    emit  stateChanged ( on ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  Toggle : : togglePosition ( )  { 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  on  =  ! on ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  int  left  =  _radius ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  int  right  =  width ( )  -  _radius ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  _anim - > setStartValue ( on  ?  left  +  immediateOffset  :  right  -  immediateOffset ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  _anim - > setEndValue ( on  ?  right  :  left ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  _anim - > setDuration ( animation_duration ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  _anim - > start ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  repaint ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  Toggle : : enterEvent ( QEvent  * e )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QAbstractButton : : enterEvent ( e ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bool  Toggle : : getEnabled ( ) { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  enabled ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  Toggle : : setEnabled ( bool  value ) { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  enabled  =  value ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if ( value ) { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    circleColor . setRgb ( 0xfafafa ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    green . setRgb ( 0x33ab4c ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } else { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    circleColor . setRgb ( 0x888888 ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    green . setRgb ( 0x227722 ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}