Ignore:
Timestamp:
Sep 29, 1999, 10:27:16 AM (26 years ago)
Author:
sandervl
Message:

Scrollbar changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/win32wbase.cpp

    r1083 r1091  
    1 /* $Id: win32wbase.cpp,v 1.18 1999-09-28 13:27:52 sandervl Exp $ */
     1/* $Id: win32wbase.cpp,v 1.19 1999-09-29 08:27:15 sandervl Exp $ */
    22/*
    33 * Win32 Window Base Class for OS/2
     
    122122  PSEraseFlag        = FALSE;
    123123  SupressEraseFlag   = FALSE;
     124
     125  horzScrollInfo     = NULL;
     126  vertScrollInfo     = NULL;
     127
    124128}
    125129//******************************************************************************
     
    146150        free(windowNameW);
    147151        windowNameW = NULL;
     152  }
     153  if(vertScrollInfo) {
     154        free(vertScrollInfo);
     155        vertScrollInfo = NULL;
     156  }
     157  if(horzScrollInfo) {
     158        free(horzScrollInfo);
     159        horzScrollInfo = NULL;
    148160  }
    149161}
     
    361373#endif
    362374
     375  if (cs->style & WS_HSCROLL)
     376  {
     377        horzScrollInfo = (SCROLLBAR_INFO*)malloc(sizeof(SCROLLBAR_INFO));
     378        horzScrollInfo->MinVal = horzScrollInfo->CurVal = horzScrollInfo->Page = 0;
     379        horzScrollInfo->MaxVal = 100;
     380        horzScrollInfo->flags  = ESB_ENABLE_BOTH;
     381  }
     382
     383  if (cs->style & WS_VSCROLL)
     384  {
     385        vertScrollInfo = (SCROLLBAR_INFO*)malloc(sizeof(SCROLLBAR_INFO));
     386        vertScrollInfo->MinVal = vertScrollInfo->CurVal = vertScrollInfo->Page = 0;
     387        vertScrollInfo->MaxVal = 100;
     388        vertScrollInfo->flags  = ESB_ENABLE_BOTH;
     389  }
     390
    363391  /* Send the WM_GETMINMAXINFO message and fix the size if needed */
    364392  if ((cs->style & WS_THICKFRAME) || !(cs->style & (WS_POPUP | WS_CHILD)))
     
    427455        dprintf(("WM_CREATE: WinSetWindowULong2 %X failed!!", OS2Hwnd));
    428456        return FALSE;
     457  }
     458  if(cs->style & WS_HSCROLL) {
     459        OSLibWinChangeScrollStyle(OS2HwndFrame, OSLIB_HSCROLL, 0);
     460  }
     461  if(cs->style & WS_VSCROLL) {
     462        OSLibWinChangeScrollStyle(OS2HwndFrame, OSLIB_VSCROLL, 0);
    429463  }
    430464#if 0
     
    12111245}
    12121246//******************************************************************************
     1247//TODO: Not complete (flags)
     1248//******************************************************************************
     1249SCROLLBAR_INFO *Win32BaseWindow::getScrollInfo(int nBar)
     1250{
     1251    switch(nBar) {
     1252    case SB_HORZ:
     1253        if(horzScrollInfo) {
     1254            horzScrollInfo->CurVal = OSLibWinGetScrollPos(OS2HwndFrame, OSLIB_HSCROLL);
     1255            return horzScrollInfo;
     1256        }
     1257        break;
     1258    case SB_VERT:
     1259        if(vertScrollInfo) {
     1260            vertScrollInfo->CurVal = OSLibWinGetScrollPos(OS2HwndFrame, OSLIB_VSCROLL);
     1261            return vertScrollInfo;
     1262        }
     1263        break;
     1264    }
     1265    return NULL;
     1266}
     1267//******************************************************************************
     1268//TODO: Not complete
     1269//******************************************************************************
     1270LONG Win32BaseWindow::setScrollInfo(int nBar, SCROLLINFO *info, int fRedraw)
     1271{
     1272  SCROLLBAR_INFO *infoPtr;
     1273  ULONG           scrollType;
     1274  int             new_flags;
     1275
     1276    switch(nBar) {
     1277    case SB_HORZ:
     1278        if(!horzScrollInfo) {
     1279            return 0;
     1280        }
     1281        infoPtr = horzScrollInfo;
     1282        scrollType = OSLIB_HSCROLL;
     1283        break;
     1284    case SB_VERT:
     1285        if(!vertScrollInfo) {
     1286            return 0;
     1287        }
     1288        infoPtr = vertScrollInfo;
     1289        scrollType = OSLIB_VSCROLL;
     1290        break;
     1291    default:
     1292        return 0;
     1293    }
     1294
     1295    if (info->fMask & ~(SIF_ALL | SIF_DISABLENOSCROLL)) return 0;
     1296    if ((info->cbSize != sizeof(*info)) &&
     1297        (info->cbSize != sizeof(*info)-sizeof(info->nTrackPos))) return 0;
     1298
     1299    /* Set the page size */
     1300    if (info->fMask & SIF_PAGE)
     1301    {
     1302        if( infoPtr->Page != info->nPage )
     1303        {
     1304            infoPtr->Page = info->nPage;
     1305            OSLibWinSetScrollPageSize(OS2HwndFrame, scrollType, info->nPage, infoPtr->MaxVal, fRedraw);
     1306        }
     1307    }
     1308
     1309    /* Set the scroll pos */
     1310    if (info->fMask & SIF_POS)
     1311    {
     1312        if( infoPtr->CurVal != info->nPos )
     1313        {
     1314            infoPtr->CurVal = info->nPos;
     1315            OSLibWinSetScrollPos(OS2HwndFrame, scrollType, info->nPos, fRedraw);
     1316        }
     1317    }
     1318
     1319    /* Set the scroll range */
     1320    if (info->fMask & SIF_RANGE)
     1321    {
     1322        /* Invalid range -> range is set to (0,0) */
     1323        if ((info->nMin > info->nMax) ||
     1324            ((UINT)(info->nMax - info->nMin) >= 0x80000000))
     1325        {
     1326            infoPtr->MinVal = 0;
     1327            infoPtr->MaxVal = 0;
     1328        }
     1329        else
     1330        {
     1331            if( infoPtr->MinVal != info->nMin ||
     1332                infoPtr->MaxVal != info->nMax )
     1333            {
     1334                infoPtr->MinVal = info->nMin;
     1335                infoPtr->MaxVal = info->nMax;
     1336
     1337                OSLibWinSetScrollRange(OS2HwndFrame, scrollType, info->nMin, info->nMax, fRedraw);
     1338            }
     1339        }
     1340    }
     1341
     1342    /* Make sure the page size is valid */
     1343    if (infoPtr->Page < 0) infoPtr->Page = 0;
     1344    else if (infoPtr->Page > infoPtr->MaxVal - infoPtr->MinVal + 1 )
     1345        infoPtr->Page = infoPtr->MaxVal - infoPtr->MinVal + 1;
     1346
     1347    /* Make sure the pos is inside the range */
     1348    if (infoPtr->CurVal < infoPtr->MinVal)
     1349        infoPtr->CurVal = infoPtr->MinVal;
     1350    else if (infoPtr->CurVal > infoPtr->MaxVal - MAX( infoPtr->Page-1, 0 ))
     1351        infoPtr->CurVal = infoPtr->MaxVal - MAX( infoPtr->Page-1, 0 );
     1352
     1353    /* Check if the scrollbar should be hidden or disabled */
     1354    if (info->fMask & (SIF_RANGE | SIF_PAGE | SIF_DISABLENOSCROLL))
     1355    {
     1356        new_flags = infoPtr->flags;
     1357        if (infoPtr->MinVal >= infoPtr->MaxVal - MAX( infoPtr->Page-1, 0 ))
     1358        {
     1359            /* Hide or disable scroll-bar */
     1360            if (info->fMask & SIF_DISABLENOSCROLL)
     1361            {
     1362                new_flags = ESB_DISABLE_BOTH;
     1363                //TODO:
     1364            }
     1365            else if (nBar != SB_CTL)
     1366            {
     1367                //TODO
     1368                goto done;
     1369            }
     1370        }
     1371        else  /* Show and enable scroll-bar */
     1372        {
     1373            //TODO
     1374            new_flags = 0;
     1375        }
     1376
     1377        if (infoPtr->flags != new_flags) /* check arrow flags */
     1378        {
     1379            infoPtr->flags = new_flags;
     1380        }
     1381    }
     1382
     1383done:
     1384    /* Return current position */
     1385
     1386    return infoPtr->CurVal;
     1387}
     1388//******************************************************************************
    12131389//******************************************************************************
    12141390LRESULT Win32BaseWindow::DefWindowProcA(UINT Msg, WPARAM wParam, LPARAM lParam)
     
    13501526#if 0
    13511527    case WM_SYSKEYDOWN:
    1352             if(HIWORD(lParam) & KEYDATA_ALT)
    1353             {
    1354             if(wParam == VK_F4) /* try to close the window */
    1355             {
    1356                     HWND hWnd = WIN_GetTopParent( wndPtr->hwndSelf );
    1357                     wndPtr = WIN_FindWndPtr( hWnd );
    1358                     if( wndPtr && !(getClass()->getStyle() & CS_NOCLOSE) )
    1359                             PostMessage(WM_SYSCOMMAND, SC_CLOSE, 0);
    1360             }
    1361         }
    1362         return 0;
     1528        if(HIWORD(lParam) & KEYDATA_ALT)
     1529        {
     1530            if(wParam == VK_F4) /* try to close the window */
     1531            {
     1532                HWND hWnd = WIN_GetTopParent( wndPtr->hwndSelf );
     1533                wndPtr = WIN_FindWndPtr( hWnd );
     1534                if( wndPtr && !(getClass()->getStyle() & CS_NOCLOSE) )
     1535                    PostMessage(WM_SYSCOMMAND, SC_CLOSE, 0);
     1536            }
     1537        }
     1538        return 0;
    13631539#endif
    13641540
Note: See TracChangeset for help on using the changeset viewer.