gui_event.cpp

来自「ncbi源码」· C++ 代码 · 共 504 行 · 第 1/2 页

CPP
504
字号
/* * =========================================================================== * PRODUCTION $Log: gui_event.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 21:04:59  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6 * PRODUCTION * =========================================================================== *//*  $Id: gui_event.cpp,v 1000.1 2004/06/01 21:04:59 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors:  Mike DiCuccio * * File Description: *    Generic FLTK utilities. */#include <ncbi_pch.hpp>#include <gui/utils/fltk_utils.hpp>#include <FL/Fl.H>#include <FL/fl_draw.H>#include <FL/Fl_Window.H>BEGIN_NCBI_SCOPECFltkEvent::TEvent CFltkEvent::GetEvent(void){    TEvent state = 0;    //    // raw state processing    //    if (Fl::event_button1()) {        state |= fLeftMouse;    }        if (Fl::event_button2()) {        state |= fMiddleMouse;    }    if (Fl::event_button3()) {        state |= fRightMouse;    }    if (Fl::event_shift()) {        state |= fShift;    }        if (Fl::event_ctrl()) {        state |= fCtrl;    }        if (Fl::event_alt()) {        state |= fAlt;    }        if ( (Fl::event_key() == FL_Meta_R  &&  Fl::event_key(FL_Meta_R))  ||         (Fl::event_key() == FL_Meta_L  &&  Fl::event_key(FL_Meta_L)) ) {        state |= fMeta;    }        return state;}CFltkEvent::EEvent CFltkEvent::GetProcessedEvent(){    TEvent state = GetEvent();    TEventMap::const_iterator iter = sm_EventMap.find(state);    if (iter != sm_EventMap.end()) {        return iter->second;    }    return eNoState;}void CFltkEvent::SetState(EEvent state, TEvent key_combo){    sm_EventMap[key_combo] = state;}CFltkEvent::TEvent CFltkEvent::GetState(EEvent state){    ITERATE (TEventMap, iter, sm_EventMap) {        if (iter->second == state) {            return iter->first;        }    }    return 0;}//// set our default interaction modes// this is operating-system dependent//void CFltkEvent::SetOSDefaults(){#if   defined(NCBI_OS_MAC)  ||  defined(NCBI_OS_DARWIN)    CFltkEvent::SetState(CFltkEvent::eSelectState,                         CFltkEvent::fLeftMouse);    CFltkEvent::SetState(CFltkEvent::eMultiSelectState,                         CFltkEvent::fShiftLeftMouse);    CFltkEvent::SetState(CFltkEvent::ePopupState,                         CFltkEvent::fCtrlLeftMouse);    CFltkEvent::SetState(CFltkEvent::ePanState,                         CFltkEvent::fMetaLeftMouse);    CFltkEvent::SetState(CFltkEvent::eZoomState,                         CFltkEvent::fAltLeftMouse);#elif defined(NCBI_OS_UNIX)    // select = left mouse click    CFltkEvent::SetState(CFltkEvent::eSelectState,                         CFltkEvent::fLeftMouse);    // multiple select = shift left mouse click    CFltkEvent::SetState(CFltkEvent::eMultiSelectState,                         CFltkEvent::fShiftLeftMouse);    // pop-up = right mouse button    CFltkEvent::SetState(CFltkEvent::ePopupState,                         CFltkEvent::fRightMouse);    // pan    = middle mouse    CFltkEvent::SetState(CFltkEvent::ePanState,                         CFltkEvent::fMiddleMouse);    // zoom in = alt left mouse    CFltkEvent::SetState(CFltkEvent::eZoomState,                         CFltkEvent::fCtrlLeftMouse);#elif defined(NCBI_OS_MSWIN)    // select = left mouse click    CFltkEvent::SetState(CFltkEvent::eSelectState,                         CFltkEvent::fLeftMouse);    // multiple select = shift left mouse click    CFltkEvent::SetState(CFltkEvent::eMultiSelectState,                         CFltkEvent::fShiftLeftMouse);    // pop-up = right mouse button    CFltkEvent::SetState(CFltkEvent::ePopupState,                         CFltkEvent::fRightMouse);    // pan    = control left mouse    CFltkEvent::SetState(CFltkEvent::ePanState,                         CFltkEvent::fCtrlLeftMouse);    // zoom in = alt left mouse    CFltkEvent::SetState(CFltkEvent::eZoomState,                         CFltkEvent::fAltLeftMouse);#endif}CGUIEvent::CGUIEvent()    : m_LastFLTKEvent(0),      m_Modifiers(0){}int CGUIEvent::GetFLTKEvent() const{    return m_LastFLTKEvent;}void CGUIEvent::OnFLTKEvent(int event){    m_LastFLTKEvent = event;    m_MouseEvent = eNone;    m_GUISignal = eDefaultSignal;    switch(event)   {    case FL_KEYDOWN: x_OnKeyPressed();  break;    case FL_KEYUP: x_OnKeyReleased();   break;    case FL_UNFOCUS:        {{            m_stPressedKeys.clear();            m_Modifiers = 0;        }}        break;        case FL_MOVE: m_MouseEvent = eMouseMove; break;    case FL_PUSH:        switch(Fl::event_button())  {        case FL_LEFT_MOUSE: m_MouseEvent = eLeftMousePush; break;        case FL_MIDDLE_MOUSE: m_MouseEvent = eMiddleMousePush; break;        case FL_RIGHT_MOUSE: m_MouseEvent = eRightMousePush; break;        }        x_UpdateEventState();            // generate signal for requesting focus        break;    case FL_DRAG:        switch(Fl::event_button())  {        case FL_LEFT_MOUSE: m_MouseEvent = eLeftMouseDrag; break;        case FL_MIDDLE_MOUSE: m_MouseEvent = eMiddleMouseDrag; break;        case FL_RIGHT_MOUSE: m_MouseEvent = eRightMouseDrag; break;        }        x_UpdateEventState();        break;    case FL_RELEASE:        switch(Fl::event_button())  {        case FL_LEFT_MOUSE: m_MouseEvent = eLeftMouseRelease; break;        case FL_MIDDLE_MOUSE: m_MouseEvent = eMiddleMouseRelease; break;        case FL_RIGHT_MOUSE: m_MouseEvent = eRightMouseRelease; break;        }        x_UpdateEventState();        break;    //case FL_MOUSEWHEEL: res = x_HandleMouseWheel(event); break;    default:        break;    }       

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?