//--------------------------------------------------------- void CVIEW_Map_Control::On_Key_Down(wxKeyEvent &event) { if( m_pMap->Find_Layer(Get_Active_Layer()) && Get_Active_Layer()->Edit_On_Key_Down(event.GetKeyCode()) ) { return; } switch( event.GetKeyCode() ) { default: event.Skip(); break; case WXK_PAGEUP: _Zoom(m_pMap->Get_Extent().Get_Center(), true); break; case WXK_PAGEDOWN: _Zoom(m_pMap->Get_Extent().Get_Center(), false); break; case WXK_LEFT: _Move(wxPoint(-10, 0)); break; case WXK_RIGHT: _Move(wxPoint( 10, 0)); break; case WXK_UP: _Move(wxPoint( 0, -10)); break; case WXK_DOWN: _Move(wxPoint( 0, 10)); break; case WXK_F2: m_pMap->SaveAs_Image(); break; case 'C': if( event.GetModifiers() == wxMOD_CONTROL ) { m_pMap->SaveAs_Image_Clipboard(false); } else if( event.GetModifiers() == wxMOD_ALT ) { m_pMap->SaveAs_Image_Clipboard(GetClientSize().x, GetClientSize().y, -1); } break; case 'L': if( event.GetModifiers() == wxMOD_CONTROL ) { m_pMap->SaveAs_Image_Clipboard(true); } } }
//--------------------------------------------------------- void CVIEW_Map_Control::On_Mouse_Wheel(wxMouseEvent &event) { if( event.GetWheelRotation() < 0 ) { _Zoom(_Get_Client2World(event.GetPosition()), false); } else if( event.GetWheelRotation() > 0 ) { _Zoom(_Get_Client2World(event.GetPosition()), true); } }
//--------------------------------------------------------- void CVIEW_Map_Control::On_Mouse_RUp(wxMouseEvent &event) { wxMenu *pMenu = NULL; m_Drag_Mode = TOOL_INTERACTIVE_DRAG_NONE; switch( m_Mode ) { //----------------------------------------------------- case MAP_MODE_SELECT: if( g_pTool ) { g_pTool->Execute(_Get_Client2World(event.GetPosition()), TOOL_INTERACTIVE_RUP, GET_KEYS(event)); } else if( m_pMap->Find_Layer(Get_Active_Layer()) && !Get_Active_Layer()->Edit_On_Mouse_Up(_Get_Client2World(event.GetPosition()), _Get_Client2World(1.0), GET_KEYS(event)|TOOL_INTERACTIVE_KEY_RIGHT) ) { pMenu = Get_Active_Layer()->Edit_Get_Menu(); } break; //----------------------------------------------------- case MAP_MODE_DISTANCE: if( event.ControlDown() ) // context menu { pMenu = m_pParent->_Create_Menu(); } else // reset { _Distance_Reset(); } break; case MAP_MODE_ZOOM: if( event.ControlDown() ) // context menu { pMenu = m_pParent->_Create_Menu(); } else // zoom out { _Zoom(_Get_Client2World(event.GetPosition()), false); } break; //----------------------------------------------------- default: pMenu = m_pParent->_Create_Menu(); break; } //----------------------------------------------------- if( pMenu != NULL ) { PopupMenu(pMenu, event.GetPosition()); delete(pMenu); } }
//--------------------------------------------------------- bool CVIEW_Map_Control::_Zoom(const wxPoint &A, const wxPoint &B) { if( A.x == B.x && A.y == B.y ) { return( _Zoom(_Get_Client2World(A), true) ); } m_pMap->Set_Extent(CSG_Rect(_Get_Client2World(A), _Get_Client2World(B))); return( true ); }
//--------------------------------------------------------- void CVIEW_Map_Control::On_Mouse_LUp(wxMouseEvent &event) { if( HasCapture() ) { ReleaseMouse(); } //----------------------------------------------------- if( m_Mode != MAP_MODE_SELECT && (event.ControlDown() || event.AltDown()) ) // clipboard copy ? { return; } //----------------------------------------------------- _Draw_Inverse(m_Mouse_Down, event.GetPosition()); m_Drag_Mode = TOOL_INTERACTIVE_DRAG_NONE; switch( m_Mode ) { //----------------------------------------------------- case MAP_MODE_SELECT: if( g_pTool ) { g_pTool->Execute(_Get_Client2World(event.GetPosition()), TOOL_INTERACTIVE_LUP, GET_KEYS(event)); } else if( m_pMap->Find_Layer(Get_Active_Layer()) ) { Get_Active_Layer()->Edit_On_Mouse_Up(_Get_Client2World(event.GetPosition()), _Get_Client2World(1.0), GET_KEYS(event)|TOOL_INTERACTIVE_KEY_LEFT); } break; //----------------------------------------------------- case MAP_MODE_DISTANCE: _Distance_Add(event.GetPosition()); break; //----------------------------------------------------- case MAP_MODE_ZOOM: _Zoom(m_Mouse_Down, event.GetPosition()); break; //----------------------------------------------------- case MAP_MODE_PAN: break; //----------------------------------------------------- case MAP_MODE_PAN_DOWN: Set_Mode(MAP_MODE_PAN); _Move(m_Mouse_Down, event.GetPosition()); break; } }
//--------------------------------------------------------- bool CVIEW_Map_Control::_Zoom(wxPoint A, wxPoint B) { CSG_Rect rWorld; if( A.x == B.x && A.y == B.y ) { return( _Zoom(_Get_World(A), true) ); } rWorld.Assign(_Get_World(A), _Get_World(B)); m_pMap->Set_Extent(rWorld); return( true ); }