home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / contrib / samples / xrc / custclas.cpp next >
C/C++ Source or Header  |  2002-08-16  |  6KB  |  163 lines

  1. //-----------------------------------------------------------------------------
  2. // Name:        custclass.cpp
  3. // Purpose:     XML resources sample: A custom class to insert into a XRC file
  4. // Author:      Robert O'Connor (rob@medicalmnemonics.com), Vaclav Slavik
  5. // RCS-ID:      $Id: custclas.cpp,v 1.1 2002/08/16 11:24:46 JS Exp $
  6. // Copyright:   (c) Robert O'Connor and Vaclav Slavik
  7. // Licence:     wxWindows licence
  8. //-----------------------------------------------------------------------------
  9.  
  10. //-----------------------------------------------------------------------------
  11. // GCC implementation
  12. //-----------------------------------------------------------------------------
  13.  
  14. #ifdef __GNUG__
  15.     #pragma implementation "custclas.h"
  16. #endif
  17.  
  18. //-----------------------------------------------------------------------------
  19. // Standard wxWindows headers
  20. //-----------------------------------------------------------------------------
  21.  
  22. // For compilers that support precompilation, includes "wx/wx.h".
  23. #include "wx/wxprec.h"
  24.  
  25. #ifdef __BORLANDC__
  26.     #pragma hdrstop
  27. #endif
  28.  
  29. // For all others, include the necessary headers (this file is usually all you
  30. // need because it includes almost all "standard" wxWindows headers)
  31. #ifndef WX_PRECOMP
  32.     #include "wx/wx.h"
  33. #endif
  34.  
  35. //-----------------------------------------------------------------------------
  36. // Header of this .cpp file
  37. //-----------------------------------------------------------------------------
  38.  
  39. #include "custclas.h"
  40.  
  41. //-----------------------------------------------------------------------------
  42. // Internal constants
  43. //-----------------------------------------------------------------------------
  44.  
  45. // Popup menu (PU) item control IDs. In this example, they aren't hooked up 
  46. // to any functions. Normally you would use these IDs in your event table, so
  47. // that if one of these menu items is clicked, then a certain function is 
  48. // called.
  49. enum {
  50.     PU_ADD_RECORD        = wxID_HIGHEST + 1, 
  51.     PU_EDIT_RECORD,
  52.     PU_DELETE_RECORD    
  53. };
  54.  
  55. // Columns of the listctrl (the leftmost one starts at 0, and so on).
  56. // Allows easier code maintenance if want to add/rearrangement of listctrl's 
  57. // columns.
  58. enum {
  59.     RECORD_COLUMN    = 0,
  60.     ACTION_COLUMN,
  61.     PRIORITY_COLUMN
  62. };
  63.  
  64. //-----------------------------------------------------------------------------
  65. // wxWindows macro: implement dynamic class
  66. //-----------------------------------------------------------------------------
  67.  
  68. IMPLEMENT_DYNAMIC_CLASS( MyResizableListCtrl, wxListCtrl )
  69.  
  70. //-----------------------------------------------------------------------------
  71. // Event table: connect the events to the handler functions to process them
  72. //-----------------------------------------------------------------------------
  73.  
  74. BEGIN_EVENT_TABLE( MyResizableListCtrl, wxListCtrl )    
  75.     // Something to do when right mouse down   
  76.     EVT_RIGHT_DOWN( MyResizableListCtrl::ContextSensitiveMenu )     
  77.     // Something to do when resized
  78.     EVT_SIZE( MyResizableListCtrl::OnSize )
  79. END_EVENT_TABLE()
  80.  
  81. //-----------------------------------------------------------------------------
  82. // Public methods
  83. //-----------------------------------------------------------------------------
  84.  
  85. // Constructor, including setting the dialog's m_configuration_section member
  86. // to the incoming configuration_section string.
  87. MyResizableListCtrl::MyResizableListCtrl( wxWindow *parent, wxWindowID id,
  88.                                         const wxPoint& pos, const wxSize& size,
  89.                                         long style, const wxValidator& validator,
  90.                                         const wxString& name )
  91.    : wxListCtrl( parent, id, pos, size, style, validator, name )
  92. {
  93.     
  94.     // This listctrl needs to insert its columns in the constructor, since 
  95.     // as soon as the listctrl is built, it is resized and grafted onto an 
  96.     // "unknown" XRC placeholder. This induces an OnSize() event, calling the 
  97.     // overrriden OnSize function for this class, which needs to have 3 
  98.     // columns to resize (else an assert on WXGTK debug build).
  99.     InsertColumn( RECORD_COLUMN, _("Record"), wxLIST_FORMAT_LEFT, 140);
  100.     InsertColumn( ACTION_COLUMN, _("Action"), wxLIST_FORMAT_LEFT, 70);
  101.     InsertColumn( PRIORITY_COLUMN, _("Priority"), wxLIST_FORMAT_LEFT, 70 );    
  102. }
  103.  
  104.  
  105. MyResizableListCtrl::~MyResizableListCtrl()
  106. {
  107. }
  108.  
  109.  
  110. void MyResizableListCtrl::ContextSensitiveMenu( wxMouseEvent& event )
  111. {
  112.     // Make an instance of a menu.
  113.     wxMenu      a_menu;
  114.  
  115.     a_menu.Append( PU_ADD_RECORD, _( "Add a new record...") );
  116.     a_menu.Append( PU_EDIT_RECORD, _( "Edit selected record..." ) );
  117.     a_menu.Append( PU_DELETE_RECORD, _( "Delete selected record" ) );
  118.     
  119.     // If no listctrl rows selected, then disable the menu items that 
  120.     // require selection
  121.     if ( GetSelectedItemCount() == 0 ) {
  122.         a_menu.Enable( PU_EDIT_RECORD, FALSE );
  123.         a_menu.Enable( PU_DELETE_RECORD, FALSE );
  124.     }
  125.  
  126.     // Show the popup menu (wxWindow::PopupMenu ), at the x,y position 
  127.     // of the click event 
  128.     PopupMenu( &a_menu, event.GetPosition() );
  129. }
  130.  
  131.  
  132. void MyResizableListCtrl::OnSize( wxSizeEvent &event )
  133. {
  134.     // Call our custom width setting function.
  135.     SetColumnWidths();
  136.     // REQURED event.Skip() call to allow this event to propagate 
  137.     // upwards so others can do what they need to do in response to 
  138.     // this size event.
  139.     event.Skip();
  140. }
  141.  
  142.  
  143. void MyResizableListCtrl::SetColumnWidths()
  144. {     
  145.     // Get width of entire listctrl
  146.     int leftmostColumnWidth = GetSize().x;     
  147.      
  148.     // Subtract width of other columns, scrollbar, and some padding  
  149.     leftmostColumnWidth -= GetColumnWidth( ACTION_COLUMN );
  150.     leftmostColumnWidth -= GetColumnWidth( PRIORITY_COLUMN );
  151.     leftmostColumnWidth -= wxSystemSettings::GetSystemMetric( wxSYS_VSCROLL_X );     
  152.     leftmostColumnWidth -= 5;
  153.      
  154.     // Set the column width to the new value.
  155.     SetColumnWidth( RECORD_COLUMN, leftmostColumnWidth );  
  156.     
  157.     // This is just a debug message in case you want to watch the 
  158.     // events scroll by as you resize.
  159.     wxLogDebug( "Successfully set column widths" );
  160. }
  161.  
  162.  
  163.