home *** CD-ROM | disk | FTP | other *** search
/ Komputer for Alle 1999 Ekstra 101 Spil / K-CD_1999_Ekstra_101_Spil.iso / Board / DGammon / dgammon.exe / RCDATA / 1 next >
Text File  |  1999-01-22  |  9KB  |  312 lines

  1. //----------------------------------------------------------------------------
  2. //  Project NotePad2
  3. //
  4. //  Copyright ⌐ 1996. All Rights Reserved.
  5. //
  6. //  SUBSYSTEM:    NotePad2 Application
  7. //  FILE:         apxprev.cpp
  8. //  AUTHOR:
  9. //
  10. //  OVERVIEW
  11. //  ~~~~~~~~
  12. //  Source file for implementation of Print Preview.
  13. //
  14. //----------------------------------------------------------------------------
  15. #include <owl/pch.h>
  16.  
  17. #include <owl/buttonga.h>
  18. #include <owl/textgadg.h>
  19. #include <stdio.h>
  20.  
  21. #include "apxprev.h"
  22. #include "ntpd2app.rh"
  23.  
  24.  
  25. //{{TApxPreviewWin Implementation}}
  26.  
  27. DEFINE_RESPONSE_TABLE1(TApxPreviewWin, TDecoratedFrame)
  28.   //EV_COMMAND_ENABLE(APX_PPR_PREVIOUS, PPR_PreviousEnable),
  29.   //EV_COMMAND_ENABLE(APX_PPR_NEXT, PPR_NextEnable),
  30.   //EV_COMMAND(APX_PPR_PREVIOUS, PPR_Previous),
  31.   //EV_COMMAND(APX_PPR_NEXT, PPR_Next),
  32.   //EV_COMMAND(APX_PPR_ONEUP, PPR_OneUp),
  33.   //EV_COMMAND_ENABLE(APX_PPR_TWOUP, PPR_TwoUpEnable),
  34.   //EV_COMMAND(APX_PPR_TWOUP, PPR_TwoUp),
  35.   //EV_COMMAND(APX_PPR_DONE, PPR_Done),
  36. //{{TApxPreviewWinRSP_TBL_BEGIN}}
  37.   //EV_WM_CLOSE,
  38. //{{TApxPreviewWinRSP_TBL_END}}
  39. END_RESPONSE_TABLE;
  40.  
  41. /*
  42. TApxPreviewWin::TApxPreviewWin(TWindow* parentWindow, TPrinter* printer,
  43.                                TWindow* currWindow, const char far* title,
  44.                                TLayoutWindow* client)
  45. :
  46.   TDecoratedFrame(parentWindow, title, client)
  47. {
  48.   CurrWindow = currWindow;
  49.   Printer = printer;
  50.   Client = client;
  51.   Page1 = 0;
  52.   Page2 = 0;
  53.   FromPage = 1;
  54.   ToPage = 1;
  55.  
  56.   TPrintDialog::TData& data = Printer->GetSetup();
  57.   PrnDC = new TPrintDC(data.GetDriverName(),
  58.                        data.GetDeviceName(),
  59.                        data.GetOutputName(),
  60.                        data.GetDevMode());
  61.  
  62.   PrintExtent = new TSize(PrnDC->GetDeviceCaps(HORZRES), PrnDC->GetDeviceCaps(VERTRES));
  63.   Printout = new TApxPrintout(Printer, "Print Preview", currWindow, true);
  64.  
  65.   SetBkgndColor(::GetSysColor(COLOR_APPWORKSPACE));
  66.  
  67.   // Create default toolbar New and associate toolbar buttons with commands.
  68.   //
  69.   PreviewSpeedBar = new TControlBar(this);
  70.   PreviewSpeedBar->Insert(*new TButtonGadget(APX_PPR_PREVIOUS, APX_PPR_PREVIOUS, TButtonGadget::Command, true));
  71.   PreviewSpeedBar->Insert(*new TButtonGadget(APX_PPR_NEXT, APX_PPR_NEXT, TButtonGadget::Command, true));
  72.   PreviewSpeedBar->Insert(*new TSeparatorGadget(6));
  73.   PreviewSpeedBar->Insert(*new TButtonGadget(APX_PPR_ONEUP, APX_PPR_ONEUP, TButtonGadget::Exclusive, true, TButtonGadget::Down));
  74.   PreviewSpeedBar->Insert(*new TButtonGadget(APX_PPR_TWOUP, APX_PPR_TWOUP, TButtonGadget::Exclusive, true));
  75.   PreviewSpeedBar->Insert(*new TSeparatorGadget(12));
  76.   PreviewSpeedBar->Insert(*new TTextGadget(APX_PPR_CURRPAGE, TGadget::Recessed, TTextGadget::Left, 10, "Page 1"));
  77.   PreviewSpeedBar->Insert(*new TSeparatorGadget(20));
  78.   PreviewSpeedBar->Insert(*new TButtonGadget(CM_FILEPRINT, CM_FILEPRINT, TButtonGadget::Command, true));
  79.   PreviewSpeedBar->Insert(*new TSeparatorGadget(20));
  80.   PreviewSpeedBar->Insert(*new TButtonGadget(APX_PPR_DONE, APX_PPR_DONE, TButtonGadget::Command, true));
  81.   Insert(*PreviewSpeedBar, TDecoratedFrame::Top);
  82.  
  83.   Attr.Style &= ~WS_VISIBLE;
  84.   SetAcceleratorTable(IDM_PRINTPREVIEW);
  85. }
  86.  
  87.  
  88. TApxPreviewWin::~TApxPreviewWin()
  89. {
  90.   delete Page1;
  91.   delete Page2;
  92.  
  93.   delete PrnDC;
  94.   delete PrintExtent;
  95.   delete Printout;
  96. }
  97.  
  98.  
  99. void TApxPreviewWin::SetupWindow()
  100. {
  101.   TDecoratedFrame::SetupWindow();
  102.  
  103.   TAPointer<char> captionText = new char[256];
  104.  
  105.   // Set the caption of the preview window based on that of the Main Window.
  106.   //
  107.   GetApplication()->GetMainWindow()->GetWindowText(captionText, 256);
  108.   strcat(captionText, " (Preview)");
  109.   SetCaption(captionText);
  110.  
  111.   // Set the icons of the preview window.
  112.   //
  113.   SetIcon(GetApplication(), IDI_SDIAPPLICATION);
  114.   SetIconSm(GetApplication(), IDI_SDIAPPLICATION);
  115.  
  116.   TPrintDialog::TData& data = Printer->GetSetup();
  117.   Page1 = new TPreviewPage(Client, *Printout, *PrnDC, *PrintExtent, 1);
  118.   Page1->SetPageNumber(1);
  119.   data.MaxPage = 1;
  120.  
  121.   Page2 = 0;
  122.  
  123.   TLayoutMetrics metrics1;
  124.  
  125.   metrics1.X.Set(lmLeft, lmRightOf, lmParent, lmLeft, 15);
  126.   metrics1.Y.Set(lmTop, lmBelow, lmParent, lmTop, 15);
  127.  
  128.   // Determine major axis of preview page, have that follow parent size.
  129.   // Make minor axis a percentage (aspect ratio) of the page's major axis
  130.   //
  131.   TRect r = Client->GetClientRect();
  132.   long ratio;
  133.  
  134.   if (PrintExtent->cx > PrintExtent->cy)
  135.     ratio = ((long)PrintExtent->cy * 100) / PrintExtent->cx;
  136.   else
  137.     ratio = ((long)PrintExtent->cx * 100) / PrintExtent->cy;
  138.  
  139.   bool xMajor = ((r.Width() * ratio) / 100) > r.Height();
  140.   if (xMajor){
  141.     metrics1.Height.Set(lmBottom, lmAbove, lmParent, lmBottom, 15);
  142.     metrics1.Width.PercentOf(Page1, (int)((long)PrintExtent->cx * 95 / PrintExtent->cy), lmHeight);
  143.   }
  144.   else {
  145.     metrics1.Height.PercentOf(Page1, (int)((long)PrintExtent->cy * 95 / PrintExtent->cx), lmWidth);
  146.     metrics1.Width.Set(lmRight, lmLeftOf, lmParent, lmRight, 15);
  147.   }
  148.  
  149.   Page1->Create();
  150.  
  151.   Client->SetChildLayoutMetrics(*Page1, metrics1);
  152.   Client->Layout();
  153. }
  154.  
  155.  
  156. void TApxPreviewWin::SpeedBarState()
  157. {
  158.   // Update the page count.
  159.   //
  160.   TTextGadget* cpGadget = TYPESAFE_DOWNCAST(PreviewSpeedBar->GadgetWithId(APX_PPR_CURRPAGE), TTextGadget);
  161.   if (cpGadget) {
  162.     TAPointer<char> buffer = new char[32];
  163.  
  164.     if (Page2 && FromPage != ToPage)
  165.       sprintf(buffer, "Page %d - %d", FromPage, ToPage);
  166.     else
  167.       sprintf(buffer, "Page %d", FromPage);
  168.     cpGadget->SetText(buffer);
  169.   }
  170. }
  171.  
  172.  
  173. void TApxPreviewWin::PPR_PreviousEnable(TCommandEnabler& tce)
  174. {
  175.   // Only have previous on if we're not at the first page.
  176.   //
  177.   tce.Enable(FromPage != 1);
  178. }
  179.  
  180.  
  181. void TApxPreviewWin::PPR_NextEnable(TCommandEnabler& tce)
  182. {
  183.   // Only have next on if we're not at the last page.
  184.   //
  185.   TPrintDialog::TData& printerData = Printer->GetSetup();
  186.   tce.Enable(ToPage != printerData.MaxPage);
  187. }
  188.  
  189.  
  190. void TApxPreviewWin::PPR_Previous()
  191. {
  192.   TPrintDialog::TData& printerData = Printer->GetSetup();
  193.  
  194.   if (FromPage > printerData.MinPage) {
  195.     FromPage--;
  196.     ToPage--;
  197.  
  198.     Page1->SetPageNumber(FromPage);
  199.     if (Page2)
  200.       Page2->SetPageNumber(ToPage);
  201.   }
  202.  
  203.   SpeedBarState();
  204. }
  205.  
  206.  
  207. void TApxPreviewWin::PPR_Next()
  208. {
  209.   TPrintDialog::TData& printerData = Printer->GetSetup();
  210.  
  211.   if (ToPage < printerData.MaxPage) {
  212.     FromPage++;
  213.     ToPage++;
  214.  
  215.     Page1->SetPageNumber(FromPage);
  216.     if (Page2)
  217.       Page2->SetPageNumber(ToPage);
  218.   }
  219.  
  220.   SpeedBarState();
  221. }
  222.  
  223.  
  224. void TApxPreviewWin::PPR_OneUp()
  225. {
  226.   if (Page2) {
  227.     Client->RemoveChildLayoutMetrics(*Page2);
  228.  
  229.     delete Page2;
  230.     Page2 = 0;
  231.  
  232.     Client->Layout();
  233.  
  234.     ToPage = FromPage;
  235.  
  236.     SpeedBarState();
  237.   }
  238. }
  239.  
  240.  
  241. void TApxPreviewWin::PPR_TwoUpEnable(TCommandEnabler& tce)
  242. {
  243.   // Two up is only available for portrait mode.
  244.   //
  245.   tce.Enable(PrintExtent->cx <= PrintExtent->cy);
  246. }
  247.  
  248.  
  249. void TApxPreviewWin::PPR_TwoUp()
  250. {
  251.   if (!Page2) {
  252.     Page2 = new TPreviewPage(Client, *Printout, *PrnDC, *PrintExtent, PageNumber + 1);
  253.     Page2->Create();
  254.  
  255.     TLayoutMetrics metrics2;
  256.  
  257.     metrics2.X.Set(lmLeft, lmRightOf, Page1, lmRight, 30);
  258.     metrics2.Y.SameAs(Page1, lmTop);
  259.  
  260.     // Assume portrait
  261.     //
  262.     metrics2.Width.SameAs(Page1, lmWidth);
  263.     metrics2.Height.SameAs(Page1, lmBottom);
  264.  
  265.     Client->SetChildLayoutMetrics(*Page2, metrics2);
  266.     Client->Layout();
  267.  
  268.     TPrintDialog::TData& printerData = Printer->GetSetup();
  269.  
  270.     // Page 2 is the next page.  If the next page is outside of our range then
  271.     // set the first page back one and the 2nd page is the current page. If the
  272.     // document is only 1 page long then the 2nd page is empty.
  273.     //
  274.     if (FromPage == printerData.MaxPage) {
  275.       if (FromPage > 1) {
  276.         FromPage--;
  277.         ToPage = FromPage + 1;
  278.         Page1->SetPageNumber(FromPage);
  279.         Page2->SetPageNumber(ToPage);
  280.       }
  281.       else
  282.         Page2->SetPageNumber(0);
  283.     }
  284.     else {
  285.       ToPage = FromPage + 1;
  286.       Page2->SetPageNumber(ToPage);
  287.     }
  288.  
  289.     SpeedBarState();
  290.   }
  291. }
  292.  
  293.  
  294. void TApxPreviewWin::PPR_Done()
  295. {
  296.   // Don't call the base class EvClose; we do not want TApxPreviewWin to be destructed.
  297.   //
  298.   GetApplication()->GetMainWindow()->SetRedraw(false);
  299.   GetApplication()->EndModal(IDCANCEL);
  300. }
  301.  
  302.  
  303. void TApxPreviewWin::EvClose()
  304. {
  305.   // Don't call the base class EvClose; we do not want TApxPreviewWin to be destructed.
  306.   //
  307.   GetApplication()->GetMainWindow()->SetRedraw(false);
  308.   GetApplication()->EndModal(IDCANCEL);
  309. }
  310.  
  311. */
  312.