⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wdefcntl.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:

    return ( ok );
}

BOOL WdeControlGetObjectInfo ( WdeControlObject *obj,
                               WdeDialogBoxControl **info, char **s )
{
    if ( info ) {
        *info = obj->control_info;
    }

    if ( s ) {
        *s = obj->symbol;
    }

    return ( TRUE );
}

BOOL WdeControlSetObjectInfo( WdeControlObject *obj,
                              WdeDialogBoxControl *info, char *s )
{
    RECT                size;
    POINT               origin;
    WdeResizeRatio      resizer;

    WdeControlModified( obj );

    if( obj->symbol ) {
        WdeMemFree( obj->symbol );
    }
    obj->symbol = WdeStrDup( s );


    if( !info ) {
        return( TRUE );
    }

    /* JPK - Added for help ID */
    if ( obj->helpsymbol ) {
        WdeMemFree ( obj->helpsymbol );
    }
    obj->helpsymbol = WdeStrDup(info->helpsymbol);

    if( obj->control_info ) {
        WdeFreeDialogBoxControl( &obj->control_info );
    }

    obj->control_info = WdeCopyDialogBoxControl( info );

    if( ( !GETCTL_SIZEX(obj->control_info) ) &&
        ( !GETCTL_SIZEY(obj->control_info) ) &&
        ( !GETCTL_SIZEW(obj->control_info) ) &&
        ( !GETCTL_SIZEH(obj->control_info) ) ) {

        Location( obj->object_handle, &size );

        if( obj->parent != obj->base_obj ) {
            GetOffset(&origin);

            OffsetRect ( &size, -origin.x, -origin.y );

            WdeMapWindowRect ( obj->res_info->edit_win,
                               obj->parent_handle, &size );
        }

        if( !Forward ( obj->parent, GET_RESIZER, &resizer, NULL) ) {
            WdeWriteTrail ( "WdeControlSetControlInfo: GET_RESIZER failed!" );
            return ( FALSE );
        }

        if( !WdeScreenToDialog( obj, &resizer, &size,
                                GETCTL_PSIZE(obj->control_info) ) ) {
            WdeWriteTrail( "WdeControlSetControlInfo: "
                           "WdeScreenToDialog failed!" );
            return( FALSE );
        }

    }

    return ( TRUE );
}

BOOL WdeControlSetObjectHelpInfo( WdeControlObject *obj,
                              WdeDialogBoxControl *info, char *hs )
{
    _wde_touch(info);

    if ( obj->helpsymbol ) {
        WdeMemFree ( obj->helpsymbol );
    }
    obj->helpsymbol = WdeStrDup(hs);

    return ( TRUE );
}

BOOL WdeControlGetObjectHelpInfo ( WdeControlObject *obj,
                               WdeDialogBoxControl **info, char **hs )
{
    // this is redundant
    if ( info ) {
        *info = obj->control_info;
    }

    // this is needed
    if ( hs ) {
        *hs = obj->helpsymbol;
    }

    return ( TRUE );
}

BOOL WdeControlResolveSymbol( WdeControlObject *obj, Bool *b, Bool *from_id )
{
    WdeHashValue        val;
    void                *vp;
    Bool                found;

    if( obj->control_info && obj->res_info ) {
        if( from_id && *from_id ) {
            vp = WdeResolveValue(
                    obj->res_info->hash_table,
                    (WdeHashValue) GETCTL_ID(obj->control_info) );
            if( vp ) {
                if( obj->symbol ) {
                    WdeMemFree( obj->symbol );
                }
                obj->symbol = vp;
                WdeControlModified( obj );
            }
        } else {
            if( obj->symbol ) {
                val = WdeLookupName( obj->res_info->hash_table,
                                     obj->symbol, &found );
                if( found ) {
                    SETCTL_ID(obj->control_info, (uint_16)val );
                    WdeControlModified( obj );
                } else {
                    WdeMemFree( obj->symbol );
                    obj->symbol = NULL;
                }
            }
        }
        if ( b && *b && ( obj->object_handle == GetCurrObject() ) ) {
            WdeWriteControlToInfo ( obj );
        }
    } else {
        return ( FALSE );
    }

    return ( TRUE );
}

BOOL WdeControlResolveHelpSymbol( WdeControlObject *obj, Bool *b, Bool *from_id )
{
    WdeHashValue        val;
    void                *vp;
    Bool                found;

    if( obj->control_info && obj->res_info ) {
        if( from_id && *from_id ) {
            vp = WdeResolveValue(
                    obj->res_info->hash_table,
                    (WdeHashValue) GETCTL_HELPID(obj->control_info) );
            if( vp ) {
                if( obj->helpsymbol ) {
                    WdeMemFree( obj->helpsymbol );
                }
                obj->helpsymbol = vp;
                if( obj->control_info->helpsymbol ) {
                    WdeMemFree( obj->control_info->helpsymbol );
                }
                obj->control_info->helpsymbol = WdeStrDup(obj->helpsymbol);
                WdeControlModified( obj );
            }
        } else {
            if( obj->helpsymbol ) {
                val = WdeLookupName( obj->res_info->hash_table,
                                     obj->helpsymbol, &found );
                if( found ) {
                    SETCTL_HELPID(obj->control_info, (uint_32)val );
                    WdeControlModified( obj );
                } else {
                    WdeMemFree( obj->helpsymbol );
                    obj->helpsymbol = NULL;
                }
            }
        }
        if ( b && *b && ( obj->object_handle == GetCurrObject() ) ) {
            WdeWriteControlToInfo ( obj );
        }
    } else {
        return ( FALSE );
    }

    return ( TRUE );
}

BOOL WdeControlModifyInfo ( WdeControlObject *obj, WdeInfoStruct *in,
                            void *p2 )
{
    WdeHashEntry        *entry;
    char                *text;
    Bool                dup;

    /* touch unused vars to get rid of warning */
    _wde_touch(p2);

    if( in->c.text ) {
        if( GETCTL_TEXT( obj->control_info ) ) {
            WdeMemFree( GETCTL_TEXT( obj->control_info ) );
        }
        SETCTL_TEXT( obj->control_info, in->c.text );
        text = WdeResNameOrOrdinalToStr( GETCTL_TEXT(obj->control_info), 10 );
        if( text ) {
            SendMessage( obj->window_handle, WM_SETTEXT, 0, (LPARAM) text );
            WdeMemFree( text );
        } else {
            SendMessage( obj->window_handle, WM_SETTEXT, 0, (LPARAM) "" );
        }
    }

    if( obj->symbol ) {
        WdeMemFree( obj->symbol );
    }

    obj->symbol = in->symbol;

    if( in->symbol ) {
        dup = FALSE;
        entry = WdeDefAddHashEntry( obj->res_info->hash_table,
                                    obj->symbol, &dup );
        if( entry ) {
            SETCTL_ID( obj->control_info, entry->value );
        }
    } else {
        SETCTL_ID( obj->control_info, in->c.id );
    }

    WdeControlModified( obj );

    WdeBringControlToTop( obj );

    return( TRUE );
}

Bool WdeControlGetOrderMode( WdeControlObject *obj, WdeOrderMode *mode,
                             void *p2 )
{
    /* touch unused vars to get rid of warning */
    _wde_touch(p2);

    *mode = obj->mode;

    return ( TRUE );
}

Bool WdeControlSetOrderMode ( WdeControlObject *obj, WdeOrderMode *mode,
                              WdeSetOrderLists **l )
{
    WdeSetOrderStruct   *o;
    DialogStyle         style;

    style = GETCTL_STYLE( obj->control_info );

    if ( obj->mode == WdeSelect ) {
        o = (WdeSetOrderStruct *) WdeMemAlloc ( sizeof(WdeSetOrderStruct) );
        if ( !o ) {
            return ( FALSE );
        }
        o->old_oe          = ListElement
                 (WdeFindOrderedEntry ((*l)->oldlist, obj->object_handle ));
        o->new_oe          = NULL;
        o->lists           = *l;
        o->old_oe->mode    = *mode;
        o->old_oe->pos_set = FALSE;
        o->old_oe->tab_set = ( (style & WS_TABSTOP) != 0);
        o->old_oe->grp_set = ( (style & WS_GROUP) != 0);
        o->res_info        = obj->res_info;
        obj->tag   = WdeCreateTag ( obj->window_handle, o );
        obj->mode  = *mode;
    } else if ( obj->mode == *mode ) {
        o = WdeGetTagInfo ( obj->tag );
        WdeDestroyTag  ( obj->tag );
        obj->tag = NULL;
        obj->mode = WdeSelect;
        if( o == NULL ) {
            return( FALSE );
        }
        if ( o->old_oe->tab_set ) {
            style |= WS_TABSTOP;
        } else {
            style &= ( 0xffffffff ^ WS_TABSTOP );
        }
        if ( o->old_oe->grp_set ) {
            style |= WS_GROUP;
        } else {
            style &= ( 0xffffffff ^ WS_GROUP );
        }
        *l = o->lists;
        WdeMemFree ( o );
    } else {
        o = WdeGetTagInfo ( obj->tag );
        if ( !o ) {
            return ( FALSE );
        }
        o->old_oe->mode = *mode;
        if ( o->new_oe ) {
            o->new_oe->mode = *mode;
        }
        *l = o->lists;
        obj->mode  = *mode;
    }

    SETCTL_STYLE( obj->control_info, style );

    return ( TRUE );
}

BOOL WdeControlSizeToText( WdeControlObject *obj, void *p1, void *p2 )
{
    SIZE        size;
    int         width;
    int         height;
    OBJ_ID      id;
    RECT        pos;
    BOOL        ok;

    /* touch unused vars to get rid of warning */
    _wde_touch(p1);
    _wde_touch(p2);

    ok = TRUE;

    if( obj->parent_handle == (HWND)NULL ) {
        ok = ( Forward ( obj->parent, GET_WINDOW_HANDLE,
                       &(obj->parent_handle), NULL ) &&
               obj->parent_handle != (HWND) NULL );
    }

    if( ok ) {
        ok = Forward( obj->object_handle, IDENTIFY, &id, NULL );
    }

    if( ok ) {
        ok = WdeGetNameOrOrdSize(
                    obj->parent, GETCTL_TEXT( obj->control_info ), &size );
    }

    if( ok ) {
        width = 0;
        ok = FALSE;
        switch( id ) {
            case PBUTTON_OBJ:
                SetRectEmpty( &pos );
                WdeChangeSizeToDefIfSmallRect
                    ( obj->parent, PBUTTON_OBJ, &pos );
                width = max( size.cx + ( WDE_SIZE_TO_TEXT_PAD * 2 ),
                             pos.right ) ;
                ok = TRUE;
                break;

            case RBUTTON_OBJ:
                width = -1;
            case CBUTTON_OBJ:
                width += WDE_CKECK_RADIO_ADJUST;
            case TEXT_OBJ:
            case EDIT_OBJ:
                width += size.cx + ( WDE_SIZE_TO_TEXT_PAD * 2 );
                ok = TRUE;
                break;
        }
    }

    if( ok ) {
        height = 0;
        ok = FALSE;
        switch( id ) {
            case RBUTTON_OBJ:
            case CBUTTON_OBJ:
            case TEXT_OBJ:
            case EDIT_OBJ:
                SetRectEmpty( &pos );
                WdeChangeSizeToDefIfSmallRect( obj->parent, id, &pos );
            case PBUTTON_OBJ:
                height = pos.bottom;
                ok = TRUE;
                break;
        }
    }

    if( ok ) {
        Location( obj->object_handle, &pos );
        pos.right =  pos.left + width;
        pos.bottom = pos.top + height;
        HideSelectBoxes();
        ok = Resize( obj->object_handle, &pos, TRUE );
        ShowSelectBoxes();
    }

    if( ok ) {
        WdeWriteControlToInfo( obj );
    }

    return( ok );
}

⌨️ 快捷键说明

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