home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c083 / 13.ddi / NOTEBOOK.PAK / NB.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-02  |  8.7 KB  |  318 lines

  1. //----------------------------------------------------------------------------
  2. //    nb.cpp - shell used to test new TNotebook class
  3. //----------------------------------------------------------------------------
  4. //    Copyright (c) 1993 Borland International
  5. //----------------------------------------------------------------------------
  6. #include <owl\owlpch.h>
  7. #include <owl\applicat.h>
  8. #include <owl\mdi.h>
  9. #include <owl\decmdifr.h>
  10. #include <owl\statusba.h>
  11. #include <stdlib.h>
  12. #include <stdio.h>
  13.  
  14. #include "utils.h"        // debugging support
  15. #include "notebook.h"
  16. #include "nb.h"
  17. //----------------------------------------------------------------------------
  18. DEFINE_RESPONSE_TABLE1(TNBClient, TMDIClient)
  19.   EV_COMMAND_AND_ID(MID_TOP, NewWin),
  20.   EV_COMMAND_AND_ID(MID_RIGHT, NewWin),
  21.   EV_COMMAND_AND_ID(MID_BOTTOM, NewWin),
  22.   EV_COMMAND_AND_ID(MID_LEFT, NewWin),
  23.   EV_COMMAND(MID_EXIT, CmdExit),
  24.   EV_COMMAND(MID_CASCADE, CmdCascade),
  25.   EV_COMMAND(MID_TILEH, CmdTileH),
  26.   EV_COMMAND(MID_TILEV, CmdTileV),
  27.   EV_COMMAND(MID_ARRANGE, CmdArrange),
  28. END_RESPONSE_TABLE;
  29. //----------------------------------------------------------------------------
  30. DEFINE_RESPONSE_TABLE2(TMyNotebook, TNotebook, TMDIChild)
  31.   EV_WM_SIZE,
  32.   EV_WM_HSCROLL,
  33.   EV_WM_VSCROLL,
  34. END_RESPONSE_TABLE;
  35. //----------------------------------------------------------------------------
  36. TTestApp::TTestApp() 
  37.     : TApplication("Notebook Test App") 
  38. {
  39. }
  40. //---------------------------------------------------------------------------- 
  41. TMyNotebook::TMyNotebook(TMDIClient& parent, const char far* title, int tabloc)
  42.     : TMDIChild(parent, title), TNotebook(tabloc)
  43. {
  44.   Attr.Style |= (WS_HSCROLL | WS_VSCROLL);        // for testing...
  45.   sprintf(textbuff, "Window %d", 0);
  46.   SetTabCnt(2000, 0, 0);
  47.  
  48.   maxhs = 100;        // match initial scroll bars
  49.   maxvs = 100;        // match initial scroll bars
  50.   curhs = 0;
  51.   curvs = 0;
  52.   myresizing = FALSE;
  53.   maxxval = 350;
  54.   maxyval = 250;
  55. }
  56. //---------------------------------------------------------------------------- 
  57. void TMyNotebook::ActivateTab(int tabnum)
  58. {
  59.   TNotebook::ActivateTab(tabnum);
  60.  
  61.   sprintf(textbuff, "Window %d", tabnum);
  62.   ::InvalidateRect(HWindow, NULL, TRUE);
  63. }
  64. //----------------------------------------------------------------------------
  65. void TTestApp::InitMainWindow()
  66. {
  67.   EnableCtl3d(TRUE);
  68.  
  69.   TDecoratedMDIFrame *frame;
  70.  
  71.   Client = new TNBClient;
  72.   frame = new TDecoratedMDIFrame("Notebook Test App", "mainmenu", 
  73.     *Client, TRUE);
  74.   frame->SetIcon(this, "nb");
  75.   MainWindow = frame;
  76.  
  77.   TStatusBar *statusbar = new TStatusBar(0, TGadget::Recessed, 
  78.     TStatusBar::CapsLock | TStatusBar::NumLock | TStatusBar::Overtype);
  79.  
  80.   frame->Insert(*statusbar, TDecoratedFrame::Bottom);
  81. }
  82. //----------------------------------------------------------------------------
  83. void TTestApp::InitInstance()
  84. {
  85.   TApplication::InitInstance();
  86.  
  87.   Client->NewWin(MID_LEFT);
  88. }
  89. //----------------------------------------------------------------------------
  90. int OwlMain(int /*argc*/, char* /*argv*/ [])
  91. {
  92. #if defined(__WIN32__)
  93.   if (!(HIWORD(GetVersion())&0x8000)) {
  94.     ::MessageBox(0, "This is not a Win NT Example", "OWL Examples", MB_OK);
  95.     return 0;
  96.   }
  97. #endif
  98.   return(TTestApp().Run());
  99. }
  100. //----------------------------------------------------------------------------
  101. void TMyNotebook::Paint(TDC& dc, BOOL erase, TRect& /*rect*/)
  102. {
  103.   dc.SetWindowOrg(TPoint(curhs, curvs));
  104.  
  105.   if (erase) {
  106.     RECT myrect = GetClientRect();
  107.     FillRect(dc, &myrect, (HBRUSH) GetStockObject(WHITE_BRUSH));
  108.   }
  109.  
  110.   TBrush bluebrush(TColor::LtBlue);
  111.   TBrush greenbrush(TColor::LtGreen);
  112.   TBrush redbrush(TColor::LtRed);
  113.  
  114.   dc.FrameRect(0, 0, 350, 250, redbrush);
  115.   dc.FrameRect(50, 50, 300, 200, greenbrush);
  116.   dc.FrameRect(100, 100, 250, 150, bluebrush);
  117.  
  118.   dc.DrawText(textbuff, -1, TRect(100, 100, 250, 150), 
  119.     DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  120. }
  121. //----------------------------------------------------------------------------
  122. void TMyNotebook::EvSize(UINT sizeType, TSize& newsize)
  123. {
  124.   defer_ncpaint = 1;        // don't paint nc until futher notice...
  125.             // otherwise base EvSize() will paint
  126.   TNotebook::EvSize(sizeType, newsize);
  127.  
  128.   if (! myresizing) {
  129.     int cwidth = newsize.cx;
  130.     int cheight = newsize.cy;
  131.     int hsize = GetSystemMetrics(SM_CYHSCROLL) - 1;
  132.     int vsize = GetSystemMetrics(SM_CXVSCROLL) - 1;
  133.     int prev_maxvs = maxvs;
  134.     int prev_maxhs = maxhs;
  135.  
  136.     if ((maxhs) && (tabloc != LOC_BOTTOM))  // add size for horz sb
  137.         cheight += hsize;
  138.     if ((maxvs) && (tabloc != LOC_RIGHT))   // add size for vert sb
  139.         cwidth += vsize;
  140.  
  141.     // set "maxhs" and "maxvs" to max amt to be scrolled in each dir
  142.     if (cwidth < maxxval) {
  143.         maxhs = maxxval - cwidth;
  144.         if (tabloc != LOC_BOTTOM)
  145.           cheight -= hsize;
  146.     } else
  147.         maxhs = 0;
  148.   
  149.     if (cheight < maxyval){
  150.         maxvs = maxyval - cheight;
  151.         if (tabloc != LOC_RIGHT)
  152.           cwidth -= vsize;
  153.     } else
  154.         maxvs = 0;
  155.   
  156.     // if vscroll being used, recalc maxhs
  157.     if ((maxvs) && (cwidth < maxxval))
  158.         maxhs = maxxval - cwidth;
  159.  
  160.     myresizing = TRUE;        // avoid recursion
  161.     if (maxhs != prev_maxhs){
  162.       curhs = min(curhs, maxhs);
  163.       SetScrollRange(SB_HORZ, 0, maxhs, FALSE); 
  164.       SetScrollPos(SB_HORZ, curhs, TRUE);
  165.     }
  166.   
  167.     if (maxvs != prev_maxvs){
  168.         curvs = min(curvs, maxvs);
  169.         SetScrollRange(SB_VERT, 0, maxvs, FALSE); 
  170.         SetScrollPos(SB_VERT, curvs, TRUE);
  171.     }
  172.     ForceResize(TRUE);
  173.     myresizing = FALSE;
  174.     ::InvalidateRect(HWindow, NULL, TRUE);
  175.   }
  176. }
  177. //----------------------------------------------------------------------------
  178. void TMyNotebook::EvHScroll(UINT scrollCode, UINT thumbPos, HWND /*hWndCtl*/)
  179. {
  180.   int delta, newhs;
  181.   TRect crect = GetClientRect();
  182.   int cwidth = crect.Width();
  183.  
  184.   switch (scrollCode){
  185.     case SB_LINELEFT:
  186.         delta = -cwidth/10;
  187.         break;
  188.  
  189.     case SB_LINERIGHT:
  190.         delta = cwidth/10;
  191.         break;
  192.  
  193.     case SB_PAGELEFT:
  194.         delta = -cwidth;
  195.         break;
  196.  
  197.     case SB_PAGERIGHT:
  198.         delta = cwidth;
  199.         break;
  200.  
  201.     case SB_THUMBPOSITION:
  202.         delta = thumbPos-curhs;
  203.         break;
  204.  
  205.     default:
  206.         delta = 0;
  207.         break;
  208.   }
  209.  
  210.   newhs = min(max(0, curhs + delta), maxhs);
  211.   if (newhs != curhs) {
  212.     curhs = newhs;
  213.     SetScrollPos(SB_HORZ, curhs, TRUE);
  214.     ::InvalidateRect(HWindow, NULL, TRUE);
  215.     UpdateWindow();
  216.   }
  217. }
  218. //----------------------------------------------------------------------------
  219. void TMyNotebook::EvVScroll(UINT scrollCode, UINT thumbPos, HWND /*hWndCtl*/)
  220. {
  221.   int newvs, delta;
  222.   TRect crect = GetClientRect();
  223.   int cheight = crect.Height();
  224.  
  225.   switch (scrollCode) {
  226.     case SB_LINEUP:
  227.         delta = -cheight/10;
  228.         break;
  229.  
  230.     case SB_LINEDOWN:
  231.         delta = cheight/10;
  232.         break;
  233.  
  234.     case SB_PAGEUP:
  235.         delta = -cheight;
  236.         break;
  237.  
  238.     case SB_PAGEDOWN:
  239.         delta = cheight;
  240.         break;
  241.  
  242.     case SB_THUMBPOSITION:
  243.         delta = thumbPos-curvs;
  244.         break;
  245.  
  246.     default:
  247.         delta = 0;
  248.         break;
  249.   }
  250.  
  251.   newvs = min(max(0, curvs + delta), maxvs);
  252.   if (newvs != curvs) {
  253.     curvs = newvs;
  254.     SetScrollPos(SB_VERT, curvs, TRUE);
  255.     ::InvalidateRect(HWindow, NULL, TRUE);
  256.     UpdateWindow();
  257.   }
  258. }
  259. //----------------------------------------------------------------------------
  260. TNBClient::TNBClient(TModule *module)
  261.     : TMDIClient(module)
  262. {
  263. }
  264. //----------------------------------------------------------------------------
  265. void TNBClient::NewWin(WPARAM cmd)
  266. {
  267.   int tabloc;
  268.   TMyNotebook *nb;
  269.   char name[30];
  270.  
  271.   tabloc = cmd-MID_TOP;
  272.   switch (tabloc) {
  273.     case LOC_BOTTOM:
  274.         strcpy(name, "Tabs on Bottom");
  275.         break;
  276.     case LOC_TOP:
  277.         strcpy(name, "Tabs on Top");
  278.         break;
  279.     case LOC_LEFT:
  280.         strcpy(name, "Tabs on Left");
  281.         break;
  282.     case LOC_RIGHT:
  283.         strcpy(name, "Tabs on Right");
  284.         break;
  285.   }
  286.  
  287.   nb = new TMyNotebook(*this, name, tabloc);
  288.   nb->SetIcon(GetApplication(), "notebook");
  289.  
  290.   nb->Create();
  291. }
  292. //----------------------------------------------------------------------------
  293. void TNBClient::CmdCascade()
  294. {
  295.   CascadeChildren();
  296. }
  297. //----------------------------------------------------------------------------
  298. void TNBClient::CmdTileH()
  299. {
  300.   TileChildren(MDITILE_HORIZONTAL);
  301. }
  302. //----------------------------------------------------------------------------
  303. void TNBClient::CmdTileV()
  304. {
  305.   TileChildren(MDITILE_VERTICAL);
  306. }
  307. //----------------------------------------------------------------------------
  308. void TNBClient::CmdArrange()
  309. {
  310.   ArrangeIcons();
  311. }
  312. //----------------------------------------------------------------------------
  313. void TNBClient::CmdExit()
  314. {
  315.   PostQuitMessage(0);
  316. }
  317. //----------------------------------------------------------------------------
  318.