TomoVision_Tools: Valuators

 

 

The Valuators class enable you to draw a rectangular "valuators" in the interface. 

 

The flags that affect the Valuators 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

 

NAME_V_CENT

NAME_TOP

NAME_BOTTOM

 

// vertical position of the name in the tool

 

NAME_H_CENT

NAME_LEFT

NAME_RIGHT

 

// Horizontal position of the name in the tool

 

TOOL_ICON_V_CENT

TOOL_ICON_TOP

TOOL_ICON_BOTTOM

 

// vertical position of the icon's graphic

 

TOOL_ICON_H_CENT

TOOL_ICON_LEFT

TOOL_ICON_RIGHT

 

// vertical position of the icon's graphic

 

VALUATOR_LOG_10

VALUATOR_LOG_e

 

// the valuator is logarithmic

 

VALUATOR_INVERT

 

 

 

VALUATOR_LOCK

 

 

VALUATOR_FREZE

 

 

 

The variables that are specific to the Valuators 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

 

char          *Format ;

// format used to display the current value. This variable use the "sprintf" syntax (ex: "%.2f")

 

short          Num_Dim_X ;

// Space reserved for the numerical value

 

short          Curs_Larg ;

// width of the cursor

 

float          Inc ;

// increment used by the "Scroll" method

          

           

 

The methods that are specific to the Valuators are:

 

 

float          Read( void ) ;

// return the value of the "Cur_Value" variable.

 

float          Scroll( int val ) ;

 

 

void          Larg_Adjust( float range_real, float range_max ) ;

// adjust the value of the "Curs_Larg" variable

 

void          Lock( int val ) ;

// Lock/unlock the cursor.

 

          

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

 

 

The tool_test_valuators_ctrl.cpp file from the Valuators demo

 

 

...

 

// --- Interface tools ---

static          Boxs          box_box ;

 

static          Valuators          demo_1 ;

static          Valuators          demo_2 ;

static          Valuators          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 intearface.  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 Valuators -------" ;

          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 valuator 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 valuator 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

          //

          //  Scroll increment set to 1

          //  Display the value with 1 digit after the period.

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

          p_y += d_y + Space_Dim ;

          d_y = Val_Dim_Mid ;

 

          demo_3.Flag      = VALUATOR_LOCK ;

          demo_3.Name      = "Demo valuator 3" ;

          demo_3.Pos_X     = p_x ;

          demo_3.Pos_Y     = p_y ;

          demo_3.Dim_X     = d_x ;

          demo_3.Num_Dim_X = 60 ;

          demo_3.Format    = "%.1f" ;

          demo_3.Dim_Y     = d_y ;

          demo_3.Min_Value = 0 ;

          demo_3.Max_Value = 100 ;

          demo_3.Inc = 1 ;

          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_Key

//

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

//                              key (int)          code of the activated key

//                              x, y (int)          current cursor position

//          Returns:          (int)                    1 if key is used

//

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

//          key has been pressed.

//

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

extern "C" __declspec(dllexport) int          Ctrl_Key( HWND wnd, int key, short x, short y )

{

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

          // ---- Special keys:

          //                    Insert/Delete = val +- 100,

          //                    Home/End =          val +- 10,

          //                    PageUp/Down =          val +- 1

          //                    Left/Right =          val +- 1

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

          short val = 0 ;

          switch( key & 0x000FFFF ) {

          case INSERTKEY :

              val = 100 ;

              break ;

          case HOMEKEY :

              val = 10 ;

              break ;

          case PAGEUPKEY :

          case RIGHTARROWKEY :

              val = 1 ;

              break ;

          case DELKEY :

              val = -100 ;

              break ;

          case ENDKEY :

              val = -10 ;

              break ;

          case PAGEDOWNKEY :

          case LEFTARROWKEY :

              val = -1 ;

              break ;

          }

 

          if ( val ) {

              if ( demo_1.Select( KEY_QUERY ) ) {

                    demo_1.Cur_Value += val ;

                    demo_1.Adjust() ;

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

                    return( 1 ) ;

              }

              if ( demo_2.Select( KEY_QUERY ) ) {

                    demo_2.Cur_Value += val ;

                    demo_2.Adjust() ;

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

                    return( 1 ) ;

              }

              if ( demo_3.Select( KEY_QUERY ) ) {

                    demo_3.Cur_Value += val ;

                    demo_3.Adjust() ;

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

                    return( 1 ) ;

              }

          }

 

          return( 0 ) ;

}

 

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

//

//          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.

          //

          // 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, "Click 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, "Click 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, "Click 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 )

{

          int speed = 1 ;

          if ( getbutton( LEFTMOUSE ) )

              speed *= 10 ;

          if ( getbutton( MIDDLEMOUSE ) )

              speed *= 10  ;

          if ( getbutton( RIGHTMOUSE ) )

              speed *= 10  ;

 

          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 * speed ) ;

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

              return( 1 ) ;

          }

 

          return( 0 ) ;

}

 

...