TomoVision_Tools: Boxs

 

 

 

The Boxs class enable you to draw a rectangular box in the interface.  It is useful to group some other interface tools.  It can also be used to detect the presence of the mouse cursor within a region.  It can also be used to display an icon or an image.

 

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

 

BOX_TEXT_WHITE

// The name of the box is white instead of black

 

BOX_UP

// the look of the box is raised instead of depressed

 

 

The variables that are specific to the boxs class are:

 

None.

 

The methods that are specific to the boxs are:

 

None.

 

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

 

 

The tool_test_boxs_ctrl.cpp file from the Boxs demo

 

 

...

 

// --- Interface tools ---

static          Boxs          box_box ;

 

static          Boxs          box_demo_1 ;

static          Boxs          box_demo_2 ;

static          Boxs          box_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          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

                         + 85                              // Box 1

                         + Space_Dim                    // space between box1 and box 2

                         + 85                              // Box 2

                         + Space_Dim                    // space between box2 and box 3

                         + 85                              // Box 3

                         + 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          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 = 85 ;

 

          box_demo_1.Name      = "Demo Box 1" ;

          box_demo_1.Pos_X     = p_x ;

          box_demo_1.Pos_Y     = p_y ;

          box_demo_1.Dim_X     = d_x ;

          box_demo_1.Dim_Y     = d_y ;

          box_demo_1.border    = Border_Dim ;

          box_demo_1.Font_Name   = Tools_Font_Name ;

          box_demo_1.Font_Weight = Tools_Font_Weigth ;

          box_demo_1.Font_Scale  = Tools_Font_Scale ;

          box_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 = 85 ;

 

          box_demo_2.Flag      = OUTIL_OUT ;

          box_demo_2.Name      = "Demo Box 2" ;

          box_demo_2.Pos_X     = p_x ;

          box_demo_2.Pos_Y     = p_y ;

          box_demo_2.Dim_X     = d_x ;

          box_demo_2.Dim_Y     = d_y ;

          box_demo_2.border    = Border_Dim ;

          box_demo_2.Font_Name   = Tools_Font_Name ;

          box_demo_2.Font_Weight = Tools_Font_Weigth ;

          box_demo_2.Font_Scale  = Tools_Font_Scale ;

          box_demo_2.Init( wnd ) ;

 

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

          // --- Box 3

          //

          // display an image.

          //

          // Note: Image must be in TARGA 24 bits uncompressed.

          //       Black pixels are transparent.

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

          p_y += d_y + Space_Dim ;

          d_y = 85 ;

 

          box_demo_3.Name      = "Demo Box 3" ;

          box_demo_3.Pos_X     = p_x ;

          box_demo_3.Pos_Y     = p_y ;

          box_demo_3.Dim_X     = d_x ;

          box_demo_3.Dim_Y     = d_y ;

          box_demo_3.border    = Border_Dim ;

          box_demo_3.Font_Name   = Tools_Font_Name ;

          box_demo_3.Font_Weight = Tools_Font_Weigth ;

          box_demo_3.Font_Scale  = Tools_Font_Scale ;

 

          // --- to load the image, we need to know its path and its name ---

          char *Default_Icon_Path = (char *)  Fct_Variable_Value( "$DEFAULT_ICON_PATH" ) ;

 

          // --- the image is drawn over a color background.  We prepare these colors. ---

          // default background is grey, while default select background is redish

          Colors grey(DEFAULT_GREY) ;

          Colors col_red(SELECT_COLOR_R,SELECT_COLOR_G,SELECT_COLOR_B) ;

 

          // --- We now fill out the "Graph" region of the tool with the image.

          // The "Icon" method will read the TARGA image pointed to by the path

          // and name strings.  We also provide it with a background color.

          box_demo_3.Graph_Normal = box_demo_3.Icon( Default_Icon_Path, "tomovision.tga", grey ) ;

          box_demo_3.Graph_Select = box_demo_3.Icon( Default_Icon_Path, "tomovision.tga", col_red ) ;

 

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

          box_demo_1.Draw() ;

          box_demo_2.Draw() ;

          box_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 ) ;

 

          box_demo_1.Deselect() ;

          box_demo_2.Deselect() ;

          box_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 will tell us if the mouse

          // is inside the box.

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

          if ( box_demo_1.Select( up_down ) ) {

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Click in box #1" ) ;

              return( 1 ) ;

          }

 

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

          // Note: since the box #2 is disabled, the "select"

          //       will always return "0" and we will never

          //       get this click.

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

          if ( box_demo_2.Select( up_down ) ) {

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

              return( 1 ) ;

          }

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

          if ( box_demo_3.Select( up_down ) ) {

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

              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.

          //

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

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

          //       effect on it.

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

          box_demo_1.Select( up_down ) ;

          box_demo_2.Select( up_down ) ;

          box_demo_3.Select( up_down ) ;

 

          return( 0 ) ;

}

 

...