TomoVision_Tools: CheckLists

 

 

The CheckLists class enable you to create a list of element that the user can select.  the list can be either single choice or multiple choices  in the case of multiple choices list, you can not have more than 32 elements, since each element is represented by a bit in the "Cur_Value" variable and that variable is 32 bits long.

 

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

 

CHECK_SINGLE_CHOICE

// If this bit is set, only one element at a time can be selected in the list.  the Cur_Value variable will then be the index of that element.  If not, then multiple element can be selected and the Cur_Value variable is a bit flag where the state of each element is either 1 or 0.

 

 

The variables that are specific to the CheckLists class are:

 

 

int          Cur_Value ;

//

 

char          **List ;

// NULL terminated array of element's names.

 

char          *List_Flag ;

// array of "1"/"0" values to enable/disable the elements.

 

short          Spacing ;

// vertical spacing between elements in the list

          

           

 

The methods that are specific to the CheckLists are:

 

 

int          Read( void ) ;

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

 

          

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

 

 

The tool_test_checklists_ctrl.cpp file from the CheckLists demo

 

 

...

 

// --- Interface tools ---

static          Boxs          box_box ;

 

static          CheckLists          check_demo_1 ;

static          CheckLists          check_demo_2 ;

 

char *list_1[] = { "item a 1", "item a 2", "item a 3", "item a 4", "item a 5",

                       "item a 6", "item a 7", "item a 8", "item a 9", "" } ;

 

char *list_2[] = { "item b 1", "item b 2", "item b 3", "item b 4", "item b 5",

                       "item b 6", "item b 7", "item b 8", "item b 9", "" } ;

 

// --- by having "0" for the 5th element, we will disable the corresponding

// choice in the list ---

char flag[] = { 1, 1, 1, 1, 0, 1, 1, 1, 1 } ;

 

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

//

//          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 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 CheckLists -------" ;

          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 ;

          }

 

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

          // --- CheckList 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 ;

 

          check_demo_1.Name      = "Demo CheckList 1" ;

          check_demo_1.Pos_X     = p_x ;

          check_demo_1.Pos_Y     = p_y ;

          check_demo_1.Dim_X     = d_x ;

          check_demo_1.Dim_Y     = d_y ;

          check_demo_1.border    = Border_Dim ;

          check_demo_1.Font_Name   = Tools_Font_Name ;

          check_demo_1.Font_Weight = Tools_Font_Weigth ;

          check_demo_1.Font_Scale  = Tools_Font_Scale ;

 

          // --- we associated the NULL terminate list to the tool ---

          check_demo_1.List = list_1 ;

          // --- we can also associate a list of 0/1 flags to disable some elements ---

          check_demo_1.List_Flag = flag ;

 

          check_demo_1.Init( wnd ) ;

 

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

          // --- CheckList 2

          //

          // Single choice list (flag = CHECK_SINGLE_CHOICE)

          //

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

          p_y += d_y + Space_Dim ;

          d_y = 85 ;

 

          check_demo_2.Flag      = CHECK_SINGLE_CHOICE ;

          check_demo_2.Name      = "Demo CheckList 2" ;

          check_demo_2.Pos_X     = p_x ;

          check_demo_2.Pos_Y     = p_y ;

          check_demo_2.Dim_X     = d_x ;

          check_demo_2.Dim_Y     = d_y ;

          check_demo_2.border    = Border_Dim ;

          check_demo_2.Font_Name   = Tools_Font_Name ;

          check_demo_2.Font_Weight = Tools_Font_Weigth ;

          check_demo_2.Font_Scale  = Tools_Font_Scale ;

 

          // --- we associated the NULL terminate list to the tool ---

          check_demo_2.List = list_2 ;

          // --- we can also associate a list of 0/1 flags to disable some elements ---

          check_demo_2.List_Flag = flag ;

 

          check_demo_2.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 tools ---

          check_demo_1.Draw() ;

          check_demo_2.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 ) ;

 

          check_demo_1.Deselect() ;

          check_demo_2.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 tool the click was.  For this we use the

          // "select" method.  If will tell us if the mouse

          // is inside the tool.

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

          if ( check_demo_1.Select( up_down ) ) {

              // --- now read the new value for Cur_Value ---

              int rep = check_demo_1.Read() ;

              if ( rep >= 0 ) {

                    // --- update the value and redraw ---

                    check_demo_1.Cur_Value = rep ;

                    check_demo_1.Adjust() ;

              }

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Click in box #1, Cur_Value = %d", check_demo_1.Cur_Value ) ;

              return( 1 ) ;

          }

 

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

          if ( check_demo_2.Select( up_down ) ) {

              // --- now read the new value for Cur_Value ---

              int rep = check_demo_2.Read() ;

              if ( rep >= 0 ) {

                    // --- update the value and redraw ---

                    check_demo_2.Cur_Value = rep ;

                    check_demo_2.Adjust() ;

              }

              Error_Fct( hwnd, ERROR_CODE_REPORT, "Click in box #2, Cur_Value = %d", check_demo_2.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 tool will get the "select" color

          // if the cursor is over it.

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

          check_demo_1.Select( up_down ) ;

          check_demo_2.Select( up_down ) ;

 

          return( 0 ) ;

}

 

...