00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012 #include <wx/gripper.h>
00013 #include <wx/dcclient.h>
00014
00015
00016
00017
00018
00019 IMPLEMENT_CLASS( wxGripWindow, wxWindow )
00020
00021 DEFINE_EVENT_TYPE( wxEVT_GRIP_DBLCLICK )
00022 DEFINE_EVENT_TYPE( wxEVT_GRIP_LEFTDOWN )
00023 DEFINE_EVENT_TYPE( wxEVT_GRIP_LEFTUP )
00024 DEFINE_EVENT_TYPE( wxEVT_GRIP_MOTION )
00025
00026 BEGIN_EVENT_TABLE( wxGripWindow, wxWindow )
00027 EVT_ERASE_BACKGROUND( wxGripWindow::OnErase )
00028 EVT_PAINT( wxGripWindow::OnPaint )
00029 EVT_LEFT_DCLICK( wxGripWindow::OnDoubleClick )
00030 EVT_LEFT_DOWN( wxGripWindow::OnLeftDown )
00031 EVT_LEFT_UP( wxGripWindow::OnLeftUp )
00032 EVT_MOTION( wxGripWindow::OnMotion )
00033 END_EVENT_TABLE()
00034
00035 void wxGripWindow::Init() {
00036
00037 pOwner_ = NULL;
00038 }
00039
00040 bool wxGripWindow::Create( wxWindow * parent, wxOrientation orientation, wxGdi::eGripperStyle gripStyle ) {
00041 bool r = wxWindow::Create( parent, -1, wxDefaultPosition, wxDefaultSize, wxCLIP_CHILDREN );
00042 orientation_ = orientation;
00043 gripStyle_ = gripStyle;
00044 pOwner_ = parent;
00045
00046 return r;
00047 }
00048
00049 void wxGripWindow::SetOrientation( wxOrientation orientation ) {
00050 orientation_ = orientation;
00051 }
00052
00053 void wxGripWindow::SetLabel( const wxString &label ){
00054 label_ = label;
00055 if( gripStyle_ != wxGdi::wxGRIP_STYLE_HEADER ) {
00056 SetToolTip( label );
00057 }
00058 }
00059
00060 void wxGripWindow::OnErase( wxEraseEvent& WXUNUSED(event) ) {
00061
00062 }
00063
00064 void wxGripWindow::OnPaint( wxPaintEvent& WXUNUSED(event) ) {
00065 wxPaintDC dc(this);
00066 wxRect cr = GetClientRect();
00067
00068
00069 wxOrientation imageOrentation = (orientation_ == wxHORIZONTAL) ? wxVERTICAL : wxHORIZONTAL;
00070 g_gdi.DrawGripper( dc, cr, imageOrentation, gripStyle_, label_ );
00071 }
00072
00073 void wxGripWindow::OnDoubleClick( wxMouseEvent& event ) {
00074
00075 int x = 0, y = 0;
00076 event.GetPosition( &x, &y );
00077 createMouseEvent( wxEVT_GRIP_DBLCLICK, x, y );
00078 }
00079
00080 void wxGripWindow::OnLeftDown( wxMouseEvent& event ) {
00081
00082 int x = 0, y = 0;
00083 event.GetPosition( &x, &y );
00084 createMouseEvent( wxEVT_GRIP_LEFTDOWN, x, y );
00085 }
00086
00087 void wxGripWindow::OnLeftUp( wxMouseEvent& event ) {
00088
00089 int x = 0, y = 0;
00090 event.GetPosition( &x, &y );
00091 createMouseEvent( wxEVT_GRIP_LEFTUP, x, y );
00092 }
00093
00094 void wxGripWindow::OnMotion( wxMouseEvent& event ) {
00095
00096 int x = 0, y = 0;
00097 event.GetPosition( &x, &y );
00098 createMouseEvent( wxEVT_GRIP_MOTION, x, y );
00099 }
00100
00101 void wxGripWindow::createMouseEvent( int eventId, int x, int y ) {
00102 wxMouseEvent e( eventId );
00103 e.SetEventObject( this );
00104 e.m_x = x;
00105 e.m_y = y;
00106 GetParent()->GetEventHandler()->ProcessEvent( e );
00107 }