| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | 
							- //-----------------------------------------------------------------------------
 
- // Name:        custclass.cpp
 
- // Purpose:     XML resources sample: A custom class to insert into a XRC file
 
- // Author:      Robert O'Connor (rob@medicalmnemonics.com), Vaclav Slavik
 
- // Copyright:   (c) Robert O'Connor and Vaclav Slavik
 
- // Licence:     wxWindows licence
 
- //-----------------------------------------------------------------------------
 
- //-----------------------------------------------------------------------------
 
- // Standard wxWidgets headers
 
- //-----------------------------------------------------------------------------
 
- // For compilers that support precompilation, includes "wx/wx.h".
 
- #include "wx/wxprec.h"
 
- #ifdef __BORLANDC__
 
-     #pragma hdrstop
 
- #endif
 
- // For all others, include the necessary headers (this file is usually all you
 
- // need because it includes almost all "standard" wxWidgets headers)
 
- #ifndef WX_PRECOMP
 
-     #include "wx/wx.h"
 
- #endif
 
- //-----------------------------------------------------------------------------
 
- // Header of this .cpp file
 
- //-----------------------------------------------------------------------------
 
- #include "custclas.h"
 
- //-----------------------------------------------------------------------------
 
- // Internal constants
 
- //-----------------------------------------------------------------------------
 
- // Popup menu (PU) item control IDs. In this example, they aren't hooked up
 
- // to any functions. Normally you would use these IDs in your event table, so
 
- // that if one of these menu items is clicked, then a certain function is
 
- // called.
 
- enum {
 
-     PU_ADD_RECORD        = wxID_HIGHEST + 1,
 
-     PU_EDIT_RECORD,
 
-     PU_DELETE_RECORD
 
- };
 
- // Columns of the listctrl (the leftmost one starts at 0, and so on).
 
- // Allows easier code maintenance if want to add/rearrangement of listctrl's
 
- // columns.
 
- enum {
 
-     RECORD_COLUMN    = 0,
 
-     ACTION_COLUMN,
 
-     PRIORITY_COLUMN
 
- };
 
- //-----------------------------------------------------------------------------
 
- // wxWidgets macro: implement dynamic class
 
- //-----------------------------------------------------------------------------
 
- IMPLEMENT_DYNAMIC_CLASS( MyResizableListCtrl, wxListCtrl )
 
- //-----------------------------------------------------------------------------
 
- // Event table: connect the events to the handler functions to process them
 
- //-----------------------------------------------------------------------------
 
- wxBEGIN_EVENT_TABLE( MyResizableListCtrl, wxListCtrl )
 
-     // Something to do when right mouse down
 
-     EVT_RIGHT_DOWN( MyResizableListCtrl::ContextSensitiveMenu )
 
-     // Something to do when resized
 
-     EVT_SIZE( MyResizableListCtrl::OnSize )
 
- wxEND_EVENT_TABLE()
 
- //-----------------------------------------------------------------------------
 
- // Public methods
 
- //-----------------------------------------------------------------------------
 
- // Constructor, including setting the dialog's m_configuration_section member
 
- // to the incoming configuration_section string.
 
- MyResizableListCtrl::MyResizableListCtrl( wxWindow *parent, wxWindowID id,
 
-                                         const wxPoint& pos, const wxSize& size,
 
-                                         long style, const wxValidator& validator,
 
-                                         const wxString& name )
 
-    : wxListCtrl( parent, id, pos, size, style, validator, name )
 
- {
 
-     // This listctrl needs to insert its columns in the constructor, since
 
-     // as soon as the listctrl is built, it is resized and grafted onto an
 
-     // "unknown" XRC placeholder. This induces an OnSize() event, calling the
 
-     // overrriden OnSize function for this class, which needs to have 3
 
-     // columns to resize (else an assert on WXGTK debug build).
 
-     InsertColumn( RECORD_COLUMN, _("Record"), wxLIST_FORMAT_LEFT, 140);
 
-     InsertColumn( ACTION_COLUMN, _("Action"), wxLIST_FORMAT_LEFT, 70);
 
-     InsertColumn( PRIORITY_COLUMN, _("Priority"), wxLIST_FORMAT_LEFT, 70 );
 
- }
 
- void MyResizableListCtrl::ContextSensitiveMenu( wxMouseEvent& event )
 
- {
 
-     // Make an instance of a menu.
 
-     wxMenu      a_menu;
 
-     a_menu.Append( PU_ADD_RECORD, _( "Add a new record...") );
 
-     a_menu.Append( PU_EDIT_RECORD, _( "Edit selected record..." ) );
 
-     a_menu.Append( PU_DELETE_RECORD, _( "Delete selected record" ) );
 
-     // If no listctrl rows selected, then disable the menu items that
 
-     // require selection
 
-     if ( GetSelectedItemCount() == 0 ) {
 
-         a_menu.Enable( PU_EDIT_RECORD, false );
 
-         a_menu.Enable( PU_DELETE_RECORD, false );
 
-     }
 
-     // Show the popup menu (wxWindow::PopupMenu ), at the x,y position
 
-     // of the click event
 
-     PopupMenu( &a_menu, event.GetPosition() );
 
- }
 
- void MyResizableListCtrl::OnSize( wxSizeEvent &event )
 
- {
 
-     // Call our custom width setting function.
 
-     SetColumnWidths();
 
-     // REQURED event.Skip() call to allow this event to propagate
 
-     // upwards so others can do what they need to do in response to
 
-     // this size event.
 
-     event.Skip();
 
- }
 
- void MyResizableListCtrl::SetColumnWidths()
 
- {
 
-     // Get width of entire listctrl
 
-     int leftmostColumnWidth = GetSize().x;
 
-     // Subtract width of other columns, scrollbar, and some padding
 
-     leftmostColumnWidth -= GetColumnWidth( ACTION_COLUMN );
 
-     leftmostColumnWidth -= GetColumnWidth( PRIORITY_COLUMN );
 
-     leftmostColumnWidth -= wxSystemSettings::GetMetric( wxSYS_VSCROLL_X );
 
-     leftmostColumnWidth -= 5;
 
-     // Set the column width to the new value.
 
-     SetColumnWidth( RECORD_COLUMN, leftmostColumnWidth );
 
-     // This is just a debug message in case you want to watch the
 
-     // events scroll by as you resize.
 
-     wxLogDebug( wxT("Successfully set column widths") );
 
- }
 
 
  |