TomoVision_Tools: Sliders

 

 

The Sliders class enable you to draw a rectangular sliders in the interface. 

 

The flags that affect the sliders are:

 

 

OUTIL_INVISIBLE

// no graphics

 

OUTIL_DISABLE

// no select (but graphics OK)

 

OUTIL_VERTICAL

// the name is drawn vertically

 

OUTIL_EMPTY

// no fill

 

OUTIL_OUTLINE

// border as blue outline

 

OUTIL_NO_3D

// flat fill

 

OUTIL_NO_BORDER

 

// do not draw the outside box

 

VALUATOR_LOCK

 

 

VALUATOR_FREZE

 

 

 

The variables that are specific to the Sliders class are:

 

 

float          Cur_Value ;

// current value of the valuator

 

float          Min_Value ;

// Minimum value that the valuator can have

 

float          Max_Value ;

// Maximum value that the valuator can have

 

short          Curs_Larg ;

// width of the cursor

 

short          Arrow_Size ;

// size of the arrows at each end

 

float          Inc ;

// increment used by the arrows and the "Scroll" method

          

           

 

The methods that are specific to the Sliders are:

 

 

float          Read( void ) ;

// return the value of the slider under the cursor.

 

float          Scroll( int val ) ;

// return an incremented value of the slider (val*Inc).

 

void          Larg_Adjust( float real, float max ) ;

// adjust the value of the "Curs_Larg" variable, to make the slider proportional to the ration range_max / range_real. If the slider is used for scrolling, then "real" is the actual length of the page and "max" is the length of text to display.

 

          

An example of the usage of the Sliders class is given in the Samples\Demo Tools\Sliders demo directory.  the resulting interface for this demo look like this:

 

 

The tool_test_sliders_ctrl.cpp file from the Sliders demo

 

 

...

 

// --- Interface tools ---

static          Boxs          box_box ;

 

static          Sliders          demo_1 ;

static          Sliders          demo_2 ;

static          Sliders          demo_3 ;

 

// ----------------------------------------------------------------------------

//

//          Function:          Ctrl_Register

//

//          Parameters:          mode (unsigned short *)          Used only for Tools.

//                                                            If this pointer is not NULL,

//                                                            use it to specify to what tool

//                                                            window we belong.

//                                                            SLICEO_TOOL_2D, _BASIC,_3D...

//                                                  

//          Returns:          (int)                    Vertical size of your menu (in pixels)

//

//          This is called once at the start of the program.  We need it to

//          know you are using your own func. and how much space to reserve

//          in the menu interface.  You must also change the "mode" flag to

//          reflect in what tool window you want to appear.

//

//          Note: If you do not need a graphic interface, just comment out

//                the "Ctrl_Register" function.

//

// ----------------------------------------------------------------------------

extern "C" __declspec(dllexport) int          Ctrl_Register( unsigned short *mode )

{

// --------------------------------------------------------------------

// In the "Config" menu, the user can change the interface's size.

// This action change a number of variables that are used to compute

// the size of the tool in the interface.  We now load a few of these

// variables and use them to compute the dimension of our interface box.

// --------------------------------------------------------------------

short          Val_Dim_Mid =              (short)  Fct_Variable_Value( "$INTERFACE_VAL_DIM_MID" ) ;

short          Val_Dim_Sml =           (short) Fct_Variable_Value( "$INTERFACE_VAL_DIM_SML" ) ;

short          Title_Dim =           (short) Fct_Variable_Value( "$INTERFACE_TITLE_DIM_BIG" ) ;

short          Space_Dim =           (short) Fct_Variable_Value( "$INTERFACE_SPACE_DIM" ) ;

 

          // --- compute the height of the interface ---

          short height = Title_Dim + 2                    // title at top of tool

                         + Val_Dim_Mid                              // Slider 3

                         + Space_Dim                    // space between 2 and 3

                         + Val_Dim_Sml                              // Slider 2

                         + Space_Dim                    // space between 1 and 2

                         + Val_Dim_Sml                              // Slider 1

                         + Space_Dim ;                    // space at the bottom

 

          return( height ) ;

}

 

// ----------------------------------------------------------------------------

//

//          Function:          Ctrl_Create

//

//          Parameters:          wnd (HWND)          Pointer to Window's created window

//                              width (int)          horiz. size of the window

//                              height (int)          vert. size of the window

//          Returns:          (int)                    0 if error

//

//          This is called once when your control window is created

//

// ----------------------------------------------------------------------------

extern "C" __declspec(dllexport) int          Ctrl_Create( HWND wnd, int width, int height )

{

char   *Title_Font_Name =   (char *) Fct_Variable_Value( "$INTERFACE_TITLE_FONT_NAME" ) ;

char   *Title_Font_Weight = (char *) Fct_Variable_Value( "$INTERFACE_TITLE_FONT_WEIGHT" ) ;

short          Title_Font_Scale =  (short)  Fct_Variable_Value( "$INTERFACE_TITLE_FONT_SCALE" ) ;

short          Border_Dim =              (short)  Fct_Variable_Value( "$INTERFACE_BORDER_DIM" ) ;

 

          box_box.Name = "------- Tool Test Boxs -------" ;

          box_box.Flag      = OUTIL_DISABLE | OUTIL_NO_3D ;

          box_box.Pos_X     = 1 ;

          box_box.Pos_Y     = 1 ;

          box_box.Dim_X     = width - 2 ;

          box_box.Dim_Y     = height - 2 ;

          box_box.border    = Border_Dim;

          box_box.color.set( WINDOW_COLOR_TOOL_R,

                                 WINDOW_COLOR_TOOL_G,

                                 WINDOW_COLOR_TOOL_B ) ;

          box_box.Font_Name   = Title_Font_Name ;

          box_box.Font_Scale  = Title_Font_Scale ;

          box_box.Font_Weight = Title_Font_Weight ;

          box_box.Init( wnd ) ; 

 

          return( 1 ) ;

}

 

// ----------------------------------------------------------------------------

//

//          Function:          Ctrl_Resize

//

//          Parameters:          wnd (HWND)          Pointer to Window's created window

//                              width (int)          horiz. size of the window

//                              height (int)          vert. size of the window

//          Returns:          (int)                    0 if error

//

//          This is called once when your control window is created

//

// ----------------------------------------------------------------------------

extern "C" __declspec(dllexport) int          Ctrl_Resize( HWND wnd, int width, int height )

{

short          p_x, p_y, d_x, d_y ;

 

// -----------------------------------------------------------------------

// In the "Config" menu, the user can change the interface's size.

// This action change a number of variables that are used to compute

// the size of the tool in the intearface.  We now load a few of these

// variables and use them to compute the dimension of our interface tools.

// -----------------------------------------------------------------------

char   *Title_Font_Name =   (char *) Fct_Variable_Value( "$INTERFACE_TITLE_FONT_NAME" ) ;

char   *Title_Font_Weight = (char *) Fct_Variable_Value( "$INTERFACE_TITLE_FONT_WEIGHT" ) ;

short          Title_Font_Scale =  (short)  Fct_Variable_Value( "$INTERFACE_TITLE_FONT_SCALE" ) ;

char   *Tools_Font_Name =   (char *) Fct_Variable_Value( "$INTERFACE_TOOL_FONT_NAME" ) ;

char   *Tools_Font_Weigth = (char *) Fct_Variable_Value( "$INTERFACE_TOOL_FONT_WEIGHT" ) ;

short          Tools_Font_Scale =  (short)  Fct_Variable_Value( "$INTERFACE_TOOL_FONT_SCALE" ) ;

 

short          Val_Dim_Mid =              (short)  Fct_Variable_Value( "$INTERFACE_VAL_DIM_MID" ) ;

short          Val_Dim_Sml =           (short) Fct_Variable_Value( "$INTERFACE_VAL_DIM_SML" ) ;

short          Space_Dim =              (short)  Fct_Variable_Value( "$INTERFACE_SPACE_DIM" ) ;

short          Border_Dim =              (short)  Fct_Variable_Value( "$INTERFACE_BORDER_DIM" ) ;

 

          if ( wnd ) {

              box_box.Pos_X     = 1 ;

              box_box.Pos_Y     = 1 ;

              box_box.Dim_X     = width - 2 ;

              box_box.Dim_Y     = height - 2 ;

              box_box.border    = Border_Dim;

              box_box.Font_Name   = Title_Font_Name ;

              box_box.Font_Scale  = Title_Font_Scale ;

              box_box.Font_Weight = Title_Font_Weight ;

              box_box.Init( wnd ) ; 

          } else {

              wnd = box_box.wnd ;

          }

 

          // ===========================================================================

          // --- Box 1:

          //

          // Default FLAG value (=NULL)

          // ===========================================================================

          p_x = box_box.Pos_X + Space_Dim ;

          p_y = box_box.Pos_Y + Space_Dim ;

          d_x = box_box.Dim_X - 2*Space_Dim ;

          d_y = Val_Dim_Sml ;

 

          demo_1.Name      = "Demo slider 1" ;

          demo_1.Pos_X     = p_x ;

          demo_1.Pos_Y     = p_y ;

          demo_1.Dim_X     = d_x ;

          demo_1.Dim_Y     = d_y ;

          demo_1.Min_Value = 0 ;

          demo_1.Max_Value = 100 ;

          demo_1.border    = Border_Dim ;

          demo_1.Font_Name   = Tools_Font_Name ;

          demo_1.Font_Weight = Tools_Font_Weigth ;

          demo_1.Font_Scale  = Tools_Font_Scale ;

          demo_1.Init( wnd ) ;

 

          // ===========================================================================

          // --- Box 2

          //

          // disbaled (blue outline only)

          //

          // Note: we use "OUTIL_OUT". It is an or of 3 bits:

          //       OUTIL_DISABLE   (so that the "select" has no effect)

          //           OUTIL_INVISIBLE (the normal graphic is not drawn)

          //           OUTIL_OUTLINE   (blue outlines of the tool are drawn)

          // ===========================================================================

          p_y += d_y + Space_Dim ;

          d_y = Val_Dim_Sml ;

 

          demo_2.Flag      = OUTIL_OUT ;

          demo_2.Name      = "Demo Slider 2" ;

          demo_2.Pos_X     = p_x ;

          demo_2.Pos_Y     = p_y ;

          demo_2.Dim_X     = d_x ;

          demo_2.Dim_Y     = d_y ;

          demo_2.Min_Value = 0 ;

          demo_2.Max_Value = 100 ;

          demo_2.border    = Border_Dim ;

          demo_2.Font_Name   = Tools_Font_Name ;

          demo_2.Font_Weight = Tools_Font_Weigth ;

          demo_2.Font_Scale  = Tools_Font_Scale ;

          demo_2.Init( wnd ) ;

 

          // ===========================================================================

          // --- Box 3

          //

          // ===========================================================================

          p_y += d_y + Space_Dim ;

          d_y = Val_Dim_Mid ;

 

          demo_3.Flag      = VALUATOR_LOCK ;

          demo_3.Name      = "Demo Slider 3" ;

          demo_3.Pos_X     = p_x ;

          demo_3.Pos_Y     = p_y ;

          demo_3.Dim_X     = d_x ;

          demo_3.Dim_Y     = d_y ;

          demo_3.Min_Value = 0 ;

          demo_3.Max_Value = 100 ;

          demo_3.border    = Border_Dim ;

          demo_3.Font_Name   = Tools_Font_Name ;

          demo_3.Font_Weight = Tools_Font_Weigth ;

          demo_3.Font_Scale  = Tools_Font_Scale ;

          demo_3.Init( wnd ) ;

 

          return( 1 ) ;

}

 

// ----------------------------------------------------------------------------

//

//          Function:          Ctrl_Draw

//

//          Parameters:          (void)

//          Returns:          (int)                    0 if error

//

//          This is called each time your menu has to be re-drawn

//

// ----------------------------------------------------------------------------

extern "C" __declspec(dllexport) int          Ctrl_Draw( HWND wnd )

{

          // --- if the window if off or invible, we can get out ---

          if ( ! Flag_Ctrl_Wnd_On )

              return( 1 ) ;

          if ( ! Flag_Ctrl_Visible )

              return( 1 ) ;

 

          box_box.Draw() ;

 

          // --- We draw each of our 3 boxes ---

          demo_1.Draw() ;

          demo_2.Draw() ;

          demo_3.Draw() ;

          

          return( 1 ) ;

}

 

// ----------------------------------------------------------------------------

//

//          Function:          Ctrl_Leave

//

//          Parameters:          (void)

//          Returns:          (int)                    0 if error

//

//          This is called each time the cursor leave your menu

//

// ----------------------------------------------------------------------------

extern "C" __declspec(dllexport) int          Ctrl_Leave( void )

{

          // --- if the window if off or invible, we can get out ---

          if ( ! Flag_Ctrl_Wnd_On )

              return( 1 ) ;

          if ( ! Flag_Ctrl_Visible )

              return( 1 ) ;

 

          demo_1.Deselect() ;

          demo_2.Deselect() ;

          demo_3.Deselect() ;

          

          return( 1 ) ;

}

 

// ============================================================================

// ============================================================================

// ============================================================================

// ============================================================================

// ============================================================================

 

// ----------------------------------------------------------------------------

//

//          Function:          Ctrl_Click

//

//          Parameters:          wnd (HWND)          Pointer to Window's generating the signal

//                              up_down (int)          state of the mouse buttons

//                              x, y (int)          current cursor position

//          Returns:          (int)                    0 if error

//

//          This is called each time the cursor is inside your menu and the state

//          of the mouse buttons has changed.

//

// ----------------------------------------------------------------------------

extern "C" __declspec(dllexport) int          Ctrl_Click( HWND wnd, int up_down, short x, short y )

{

 

          // --- We only refresh the image when we release the button ---

          if ( ! up_down ) {

              return( 0 ) ;

          }

 

          // ------------------------------------------------

          // We received a mouse click, now we try to find in

          // which box the click was.  For this we use the

          // "select" method.

          // ------------------------------------------------

          if ( demo_1.Select( up_down ) ) {

              demo_1.Cur_Value = demo_1.Read() ;

              demo_1.Adjust() ;

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Click in tool #1: val = %.2f", demo_1.Cur_Value ) ;

              return( 1 ) ;

          }

 

          // ------------------------------------------------

          if ( demo_2.Select( up_down ) ) {

              demo_2.Cur_Value = demo_2.Read() ;

              demo_2.Adjust() ;

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Click in tool #2": val = %.2f", demo_2.Cur_Value ) ;

              return( 1 ) ;

          }

 

          // ------------------------------------------------

          if ( demo_3.Select( up_down ) ) {

              demo_3.Cur_Value = demo_3.Read() ;

              demo_3.Adjust() ;

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Click in tool #3": val = %.2f", demo_3.Cur_Value ) ;

              return( 1 ) ;

          }

          

          return( 1 ) ;

}

 

// ----------------------------------------------------------------------------

//

//          Function:          Ctrl_Motion

//

//          Parameters:          wnd (HWND)          Pointer to Window's generating the signal

//                              up_down (int)          state of the mouse buttons

//                              x, y (int)          current cursor position

//          Returns:          (int)                    0 if error

//

//          This is called each time the cursor is inside your menu and the cursor

//          has moved.

//

// ----------------------------------------------------------------------------

extern "C" __declspec(dllexport) int          Ctrl_Motion( HWND wnd, int up_down, short x, short y )

{

          // ------------------------------------------------

          // The mouse has moved.  By calling "select" we

          // insure that the box will get the "select" color

          // if the cursor is over it.

          // If a mouse key is pressed, we also need to update the tool

          //

          // Note: since box #2 has the "OUTIL_DISABLE" bit

          //       set in its flag, the "select" has no

          //       effect on it.

          // ------------------------------------------------

          if ( demo_1.Select( up_down ) ) {

              demo_1.Cur_Value = demo_1.Read() ;

              demo_1.Adjust() ;

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Motion in tool #1" ) ;

              return( 1 ) ;

          }

 

          // ------------------------------------------------

          if ( demo_2.Select( up_down ) ) {

              demo_2.Cur_Value = demo_2.Read() ;

              demo_2.Adjust() ;

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Motion in tool #2" ) ;

              return( 1 ) ;

          }

 

          // ------------------------------------------------

          if ( demo_3.Select( up_down ) ) {

              demo_3.Cur_Value = demo_3.Read() ;

              demo_3.Adjust() ;

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Motion in tool #3" ) ;

              return( 1 ) ;

          }

 

          return( 0 ) ;

}

 

// ----------------------------------------------------------------------------

//

//          Function:          Ctrl_Scroll

//

//          Parameters:          count (int)          number of mouse wheel cliks

//          Returns:          (int)                    0 if error

//

//          This is called each time the cursor is inside your menu and the mouse

//          wheel has been activated.

//

// ----------------------------------------------------------------------------

 

extern "C" __declspec(dllexport) int          Ctrl_Scroll( HWND wnd, int count, short x, short y )

{

          if ( demo_1.Select( KEY_QUERY ) ) {

              demo_1.Scroll( -count ) ;

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Scrool in tool #1" ) ;

              return( 1 ) ;

          }

 

          // ------------------------------------------------

          if ( demo_2.Select( KEY_QUERY ) ) {

              demo_2.Scroll( -count ) ;

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Click in tool #2" ) ;

              return( 1 ) ;

          }

 

          // ------------------------------------------------

          if ( demo_3.Select( KEY_QUERY ) ) {

              demo_3.Scroll( -count ) ;

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Click in tool #3" ) ;

              return( 1 ) ;

          }

 

          return( 0 ) ;

}

 

...