| 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") );
- }
|