示例#1
0
/* Perform action assigned to given control object */
void DoControlAction
    (
    const Int16 control /* control value of the object */
    )
{
    UInt16  newRecord;
    Int16   controlID;

    /* Clear location of find pattern */
    ClearFindPatternData();

    if ( 0 < control ) {
        Int16   anchorIndex;
        UInt16  reference;
        Int16   paragraphOffset;
        Int16   byteOffsetInPara;
        UInt16  image;
        AnchorMode type;

        anchorIndex         = control - 1;
        reference           = GetVisibleReference( anchorIndex );
        paragraphOffset     = GetVisibleParagraphOffset( anchorIndex );
        byteOffsetInPara    = GetVisibleByteOffset( anchorIndex );
        image               = GetVisibleImage( anchorIndex );
        image               = GetVisibleImage( anchorIndex );
        type                = GetVisibleMode( anchorIndex );

        SndPlaySystemSound( sndClick );

        if ( image != 0 ) {
            RectangleType   bounds;
            ListType*       list;
            Int16           x;
            Int16           y;
            UInt16          prevCoordSys;
            Int16           selection;

            bounds  = GetVisibleImagePosition( anchorIndex );
            list    = GetObjectPtr( frmMainImageDialog );

            x = ( bounds.extent.x - 60 ) / 2;
            if ( x < 0 )
                x = 0;
            y = ( bounds.extent.y - 22 ) / 2;
            if ( y < 0 )
                y = 0;
            x += bounds.topLeft.x;
            y += bounds.topLeft.y;
            LstSetPosition( list, x, y );

            prevCoordSys    = PalmSetCoordinateSystem( STANDARD );
            selection       = LstPopupList( list );
            PalmSetCoordinateSystem( prevCoordSys );
            if ( selection == noListSelection ) {
                return;
            }
            else if ( selection == 1 ) {
                reference = image;
            }
        }
        if ( type == ANCHORMODE_LINK ) {
            Int16 byteOffset;
            
            if ( byteOffsetInPara == 0 ) {
                byteOffset = NO_OFFSET;
            }
            else {
                byteOffset      = ParagraphNumToByteOffset( paragraphOffset ) +
                                      byteOffsetInPara;
                paragraphOffset = NO_OFFSET;
            }
            JumpToRecord( reference, paragraphOffset, byteOffset );
        }
#ifdef SUPPORT_ANNOTATION
        else if ( type == ANCHORMODE_ANNOTATION ) {
            DoAnnotate( GetVisibleAnnotationIdentifier( anchorIndex ),
                0, 0, 0, 0, 0, NULL );
        }
#endif

        return;
    }

    if ( control != 0 )
        SndPlaySystemSound( sndClick );

    controlID = -( control + 1 );
    switch ( controlID ) {
        case HOMECONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            ViewRecord( HOME_PAGE_ID, ADD_TO_HISTORY, 0, 0,
                WRITEMODE_DRAW_CHAR );
            SetVisitedLink( HOME_PAGE_ID );
            break;

        case LEFTCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            newRecord = GetHistoryPrev();
            if ( newRecord != NO_RECORD ) {
                ViewRecord( newRecord, FROM_HISTORY, NO_OFFSET, NO_OFFSET,
                    WRITEMODE_DRAW_CHAR );
                SetVisitedLink( newRecord );
            }
            else {
                FrmGotoForm( GetValidForm( frmLibrary ) );
            }
            break;

        case RIGHTCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            newRecord = GetHistoryNext();
            if ( newRecord != NO_RECORD ) {
                ViewRecord( newRecord, FROM_HISTORY, NO_OFFSET, NO_OFFSET,
                    WRITEMODE_DRAW_CHAR );
                SetVisitedLink( newRecord );
            }
            break;

        case LIBRARYCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            CloseDocument();
            FrmGotoForm( GetValidForm( frmLibrary ) );
            break;

        case FINDCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            FrmPopupForm( frmSearch );
            break;

        case AGAINCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            SearchAgain();
            break;

        case MENUCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_OFF );
            EvtEnqueueKey( menuChr, 0, commandKeyMask );
            break;

        case OFFSETCONTROL:
        {
            UInt16 prevCoordSys;
            Int16  selection;

            DoAutoscrollToggle( AUTOSCROLL_OFF );
            prevCoordSys = PalmSetCoordinateSystem( STANDARD );
            selection = LstPopupList( GetObjectPtr( frmMainPercentList ) );
            PalmSetCoordinateSystem( prevCoordSys );
            if ( selection != noListSelection )
                GotoLocation( selection );

            break;
        }

        case BOOKMARKCONTROL:
        {
            UInt16      prevCoordSys;
            ListType*   list;
            Int16       selection;
            UInt16      numOfBookmarks;

            DoAutoscrollToggle( AUTOSCROLL_OFF );

            prevCoordSys = PalmSetCoordinateSystem( STANDARD );

            list            = GetObjectPtr( frmMainBookmarkList );
            numOfBookmarks  = CreatePopupBookmarkList( list );
            if ( numOfBookmarks == 0 ) {
                PalmSetCoordinateSystem( prevCoordSys );
                break;
            }
            
            selection = LstPopupList( GetObjectPtr( frmMainBookmarkList ) );
            
            if ( 0 <= selection ) {
                BookmarkListEntry e;

                MemMove( &e, GetBookmarkListEntry( selection ), sizeof( BookmarkListEntry ) );

                ReleaseBookmarkList();
                PalmSetCoordinateSystem( prevCoordSys );

                switch ( e.kind ) {
                    case BOOKMARK_ADD_BOOKMARK: 
                        DoAddBookmark();
                        break;
                    case BOOKMARK_EDIT_BOOKMARK:
                        FrmPopupForm( frmBookmarks );
                        break;
#ifdef SUPPORT_ANNOTATION
                    case BOOKMARK_ADD_ANNOTATION:
                        isSelectWordTapMode = true;
                        selectedWordAction  = SELECT_WORD_ANNOTATE;
                        ShowSelectWordTapIcon();
                        break;
#endif
                    case BOOKMARK_BOOKMARK:
                    case BOOKMARK_ANNOTATION:
                        SendBookmarkGoToEvent( &e, false );
                        break;

                    case BOOKMARK_EXT_BOOKMARK:
                        GoToExtBookmark( e.recordNum );
                        break;
                        
                    case BOOKMARK_INVALID:
                        break;
                }
            }
            else {
                ReleaseBookmarkList();
                PalmSetCoordinateSystem( prevCoordSys );
            }

            break;
        }

        case AUTOSCROLLSTARTCONTROL:
        case AUTOSCROLLSTOPCONTROL:
            DoAutoscrollToggle( AUTOSCROLL_TOGGLE );
            break;

        case AUTOSCROLLINCRCONTROL:
            DoAutoscrollIncr();
            break;

        case AUTOSCROLLDECRCONTROL:
            DoAutoscrollDecr();
            break;

        case COPYTOMEMOCONTROL:
            DoHardcopy();
            break;

#ifdef SUPPORT_WORD_LOOKUP
        case SELECTEDWORDCONTROL: {
            EventType newEvent;

            MemSet( &newEvent, sizeof( newEvent ), 0 );
            newEvent.eType                   = pluckerSelectedWordEvent;
            newEvent.data.generic.datum[ 0 ] = selectedWordAction;
            EvtAddEventToQueue( &newEvent );

            break;
        }
#endif

        default:
            break;
    }
}
示例#2
0
/* Perform action for specified select type */
void DoSelectTypeAction
    (
    SelectType selection    /* selection type */
    )
{
    if ( IsMainFormWinActive() || IsFullscreenformActive()
         || FrmGetActiveFormID() == frmLibrary ) {
        if ( IsMainFormWinActive() &&
             selection != SELECT_TOGGLE_AUTOSCROLL &&
             selection != SELECT_INCREASE_AUTOSCROLL &&
             selection != SELECT_DECREASE_AUTOSCROLL &&
             selection != SELECT_FULL_PAGE_UP &&
             selection != SELECT_FULL_PAGE_DOWN &&
             selection != SELECT_HALF_PAGE_UP &&
             selection != SELECT_HALF_PAGE_DOWN &&
             selection != SELECT_ONE_LINE_UP &&
             selection != SELECT_ONE_LINE_DOWN ) {
            DoAutoscrollToggle( AUTOSCROLL_OFF );
        }
        switch ( selection ) {
            case SELECT_NONE:
                break;

#ifdef SUPPORT_WORD_LOOKUP
#ifdef SUPPORT_PPI
            case SELECT_WORD_LOOKUP_PPI:
                isSelectWordTapMode = ! isSelectWordTapMode;
                selectedWordAction  = SELECT_WORD_PPI;
                ShowSelectWordTapIcon();
                break;
#endif
#ifdef SUPPORT_ANNOTATION
            case SELECT_WORD_LOOKUP_ANNOTATE:
                isSelectWordTapMode = ! isSelectWordTapMode;
                selectedWordAction  = SELECT_WORD_ANNOTATE;
                ShowSelectWordTapIcon();
                break;
#endif
            case SELECT_WORD_LOOKUP_SEARCH_FORM:
                isSelectWordTapMode = ! isSelectWordTapMode;
                selectedWordAction  = SELECT_WORD_SEARCH_FORM;
                ShowSelectWordTapIcon();
                break;
            case SELECT_WORD_LOOKUP_TO_CLIPBOARD:
                isSelectWordTapMode = ! isSelectWordTapMode;
                selectedWordAction  = SELECT_WORD_TO_CLIPBOARD;
                ShowSelectWordTapIcon();
                break;
#endif

            case SELECT_SAVE_POSITION:
                AddToHistory( GetCurrentRecordId() );
                break;

            case SELECT_BRIGHTNESS_ADJUST:
                EmitKey( vchrBrightness, commandKeyMask );
                break;

            case SELECT_TOGGLE_BACKLIGHT:
                EmitKey( vchrBacklight, commandKeyMask );
                break;
                
            case SELECT_CONTRAST_ADJUST:
                EmitKey( vchrContrast, commandKeyMask );
                break;

            case SELECT_ONE_LINE_UP:
                DoPageMove( GetDefaultMainStyleHeight() );
                break;

            case SELECT_ONE_LINE_DOWN:
                DoPageMove( -GetDefaultMainStyleHeight() );
                break;

            case SELECT_FULL_PAGE_UP:
                if ( Prefs()->autoscrollEnabled &&
                     Prefs()->autoscrollDir == AUTOSCROLL_UP )
                    DoAutoscrollIncr();
                else if ( Prefs()->autoscrollEnabled )
                    DoAutoscrollDecr();
                else if ( Prefs()->pageControlsLink && OnFirstScreen() &&
                          NO_RECORD == GetSequentialRecordId( DIRECTION_UP ) )
                    GoToFirstAnchor();
                else
                    DoPageMove( RotGetScrollValue() );
                break;

            case SELECT_HALF_PAGE_UP:
                if ( Prefs()->autoscrollEnabled &&
                     Prefs()->autoscrollDir == AUTOSCROLL_UP )
                    DoAutoscrollIncr();
                else if ( Prefs()->autoscrollEnabled )
                    DoAutoscrollDecr();
                else if ( Prefs()->pageControlsLink && OnFirstScreen() &&
                          NO_RECORD == GetSequentialRecordId( DIRECTION_UP ) )
                    GoToFirstAnchor();
                else
                    DoPageMove( RotGetScrollValue() / 2 );
                break;

            case SELECT_FULL_PAGE_DOWN:
                if ( Prefs()->autoscrollEnabled &&
                     Prefs()->autoscrollDir == AUTOSCROLL_UP )
                    DoAutoscrollDecr();
                else if ( Prefs()->autoscrollEnabled )
                    DoAutoscrollIncr();
                else if ( Prefs()->pageControlsLink && OnLastScreen() )
                    GoToLastAnchor();
                else
                    DoPageMove( -RotGetScrollValue() );
                break;

            case SELECT_HALF_PAGE_DOWN:
                if ( Prefs()->autoscrollEnabled &&
                     Prefs()->autoscrollDir == AUTOSCROLL_UP )
                    DoAutoscrollDecr();
                else if ( Prefs()->autoscrollEnabled )
                    DoAutoscrollIncr();
                else if ( Prefs()->pageControlsLink && OnLastScreen() )
                    GoToLastAnchor();
                else
                    DoPageMove( -RotGetScrollValue() / 2 );
                break;

            case SELECT_GO_BACK:
                if ( IsFullscreenformActive() )
                    FsDoControlAction( -( LEFTCONTROL + 1 ) );
                else
                    DoControlAction( -( LEFTCONTROL + 1 ) );
                break;

            case SELECT_GO_FORWARD:
                if ( IsFullscreenformActive() )
                    FsDoControlAction( -( RIGHTCONTROL + 1 ) );
                else
                    DoControlAction( -( RIGHTCONTROL + 1 ) );
                break;

            case SELECT_GO_HOME:
                if ( IsFullscreenformActive() )
                    FsDoControlAction( -( HOMECONTROL + 1 ) );
                else
                    DoControlAction( -( HOMECONTROL + 1 ) );
                break;

            case SELECT_GO_TO_TOP:
                if ( IsFullscreenformActive() )
                    FsAdjustVerticalOffset( FULLSCREEN_TOP );
                else
                    GotoLocation( TOP );
                break;

            case SELECT_GO_TO_BOTTOM:
                if ( IsFullscreenformActive() )
                    FsAdjustVerticalOffset( FULLSCREEN_BOTTOM );
                else
                    GotoLocation( BOTTOM );
                break;

            case SELECT_FIND:
                FrmPopupForm( frmSearch );
                break;

            case SELECT_FIND_AGAIN:
                SearchAgain();
                break;

            case SELECT_ADD_BOOKMARK:
                DoAddBookmark();
                break;

            case SELECT_VIEW_BOOKMARKS:
                FrmPopupForm( frmBookmarks );
                break;

            case SELECT_OPEN_LIBRARY:
                CloseDocument();
                FrmGotoForm( GetValidForm( frmLibrary ) );
                break;

            case SELECT_DETAILS:
                FrmPopupForm( frmDetails );
                break;

            case SELECT_PREFS:
                FrmGotoForm( frmPrefs );
                break;

            case SELECT_BUTTON_ACTION:
                PrefsButtonShowFirst();
                FrmGotoForm( frmPrefs );
                break;

            case SELECT_TAP_ACTION:
                PrefsControlShowFirst();
                FrmGotoForm( frmPrefs );
                break;

            case SELECT_GESTURE_ACTION:
                PrefsGestureShowFirst();
                FrmGotoForm( frmPrefs );
                break;

            case SELECT_TOGGLE_AUTOSCROLL:
                DoAutoscrollToggle( AUTOSCROLL_TOGGLE );
                break;

            case SELECT_INCREASE_AUTOSCROLL:
                DoAutoscrollIncr();
                break;
                
            case SELECT_DECREASE_AUTOSCROLL:
                DoAutoscrollDecr();
                break;

            case SELECT_NEXT_ANCHOR:
                HandleNextControl();
                break;

            case SELECT_PREV_ANCHOR:
                HandlePrevControl();
                break;

            case SELECT_GO_TO_LINK:
                if ( IsFullscreenformActive() ) {
                    if ( 0 < actualAnchor )
                        FsDoControlAction( actualAnchor );
                } else {
                    DoControlAction( actualAnchor );
                }
                break;

            case SELECT_COPY_TO_MEMO:
                DoHardcopy();
                break;

            case SELECT_DELETE_DOCUMENT:
                DoDeleteDocument();
                break;

            case SELECT_FONT:
                PrefsFontShowFirst();
                FrmGotoForm( frmPrefs );
                break;

            case SELECT_COMMAND_STROKE:
                EmitKey( vchrCommand, commandKeyMask );
                break;

            case SELECT_MENU:
                EmitKey( vchrMenu, commandKeyMask );
                break;

#ifdef HAVE_ROTATE
            case SELECT_ROTATE_LEFT: {
                RotateType angle;
                angle = Prefs()->rotate;
                switch ( angle ) {
                    case ROTATE_ZERO:
                        angle = ROTATE_PLUS90;
                        break;
                    case ROTATE_PLUS90:
                        angle = ROTATE_MINUS90;
                        break;
                    case ROTATE_MINUS90:
                        angle = ROTATE_ZERO;
                }
                if ( Prefs()->individualDocumentLayout )
                    GetHistoryPtr()->rotate = angle;
                else
                    Prefs()->rotate = angle;
                FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode );
                break;
            }

            case SELECT_ROTATE_RIGHT: {
                RotateType angle;
                angle = Prefs()->rotate;
                switch ( angle ) {
                    case ROTATE_PLUS90:
                        angle = ROTATE_ZERO;
                        break;
                    case ROTATE_MINUS90:
                        angle = ROTATE_PLUS90;
                        break;
                    case ROTATE_ZERO:
                        angle = ROTATE_MINUS90;
                        break;
                }
                if ( Prefs()->individualDocumentLayout )
                    GetHistoryPtr()->rotate = angle;
                else
                    Prefs()->rotate = angle;
                FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode );
                break;
            }
#endif

            case SELECT_TOGGLE_TOOLBAR:
                if ( ! IsFormMain( Prefs()->lastForm ) )
                    break;
                if ( Prefs()->toolbar != TOOLBAR_NONE ) {
                    Prefs()->savedToolbar = Prefs()->toolbar;
                    Prefs()->toolbar      = TOOLBAR_NONE;
                }
                else {
                    if ( Prefs()->savedToolbar == TOOLBAR_NONE )
                        Prefs()->toolbar = TOOLBAR_TOP;
                    else
                        Prefs()->toolbar = Prefs()->savedToolbar;
                }
#ifdef HAVE_SILKSCREEN
                if ( GetDIAState() == DIA_STATE_NO_STATUS_BAR &&
                   Prefs()->toolbar != TOOLBAR_NONE )
                    SetDIAState( Prefs()->savedSilkscreen );
#endif
                FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode );
                break;

            case SELECT_TOGGLE_FULLSCREEN: {
                UInt16       newToolbarState;
                UInt16       newScrollbarState;
                DIAStateType newDIAState;
                if ( Prefs()->toolbar == TOOLBAR_NONE &&
                    Prefs()->scrollbar == SCROLLBAR_NONE
                   ) {
                    /* From fullscreen to non-fullscreen */
                    if ( Prefs()->savedToolbar == TOOLBAR_NONE &&
                         Prefs()->savedScrollbar == SCROLLBAR_NONE ) {
                        Prefs()->savedToolbar   = TOOLBAR_TOP;
                        Prefs()->savedScrollbar = SCROLLBAR_RIGHT;
                    }
                    if ( Prefs()->savedSilkscreen == DIA_STATE_NO_STATUS_BAR ) {
                        Prefs()->savedSilkscreen = DIA_STATE_MIN;
                    }
                    newToolbarState   = Prefs()->savedToolbar;
                    newScrollbarState = Prefs()->savedScrollbar;
                    newDIAState       = Prefs()->savedSilkscreen;
                }
                else {
                    /* From non-fullscreen to fullscreen */
                    newToolbarState   = TOOLBAR_NONE;
                    newScrollbarState = SCROLLBAR_NONE;
                    newDIAState       = DIA_STATE_NO_STATUS_BAR;
                }
                Prefs()->savedToolbar    = Prefs()->toolbar;
                Prefs()->savedScrollbar  = Prefs()->scrollbar;
                Prefs()->savedSilkscreen = GetDIAState();
                Prefs()->toolbar         = newToolbarState;
                Prefs()->scrollbar       = newScrollbarState;
                SetDIAState( newDIAState );
                FrmUpdateForm( Prefs()->lastForm, frmRedrawUpdateCode );
                break;
            }

            default:
                break;
        }
    }
}
示例#3
0
void AI::GlutIdle()
{
	static int frame = 0;
	static int lastTime = glutGet(GLUT_ELAPSED_TIME);
	++frame;
	int time = glutGet(GLUT_ELAPSED_TIME);
	float dt = (time - lastTime) / 1000.f;
	lastTime = time;

	static int lastFPSTime = glutGet(GLUT_ELAPSED_TIME);
	if (time - lastFPSTime > 1000)
	{
		m_fps = frame * 1000.f / (time - lastFPSTime);
		lastFPSTime = time;
		frame = 0;
	}

	for (std::vector<GameObject *>::iterator it = m_goList.begin(); it != m_goList.end(); ++it)
	{
		GameObject *go = (GameObject *)*it;
		if (go->active)
		{
			go->pos += go->vel * dt * m_speed;

			GameObject *nearest = NULL;
			for (std::vector<GameObject *>::iterator it2 = m_goList.begin(); it2 != m_goList.end(); ++it2)
			{
				GameObject *other = (GameObject *)*it2;
				if (other->active)
				{

				}
			}

			//Code to handle out of bound game objects

			switch (go->type)
			{
			case GameObject::GO_BULLET:
				break;
			case GameObject::GO_ROBBER:
				break;
			case GameObject::GO_POLICE:

				switch (go->CurrentState)
				{
				case GameObject::STATES::PATROLLING:
					if (go->pos.y >= 70)
					{
						go->vel = Vector3(15, 0, 0);
					}
					if (go->pos.x >= 100)
					{
						go->vel = Vector3(0, -15, 0);
					}
					if (go->pos.y <= 40)
					{
						go->vel = Vector3(-15, 0, 0);
					}
					if (go->pos.x <= 79)
					{
						go->vel = Vector3(0, 15, 0);
					}
					if (Alarm)
						go->CurrentState = GameObject::STATES::MOVING;
					break;
				case GameObject::STATES::MOVING:
					GotoLocation(Vector3(50,50,0),go,15);
					go->color.Set(1, 0, 0);
					break;
				}
				
				break;
			}
		}
	}
}