home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / tplab009.zip / tp_main.cpp < prev   
C/C++ Source or Header  |  1996-05-04  |  4KB  |  171 lines

  1. /* 
  2.  
  3.  
  4.     tapelab.cpp (emx+gcc) 
  5.     Tape Label Editor Version 0.08
  6.  
  7.     1995 Giovanni Iachello
  8.     This is freeware software. You can use or modify it as you wish,
  9.     provided that the part of code that I wrote remains freeware.
  10.     Freeware means that the source code must be available on request 
  11.     to anyone.
  12.     You must also include this notice in all files derived from this
  13.     file.
  14.  
  15.  
  16. */
  17.  
  18. #include <stdio.h>
  19. #include <string.h>
  20. #include <stdlib.h>
  21. #include <time.h>
  22. #include "tapelab.h"
  23. #include "pmstdres.h"
  24. #include "pmhelp.h"
  25.  
  26. PMApp* App;
  27.  
  28. PMHelpWin *helpwin;
  29.  
  30. /////////////////////////////////////////////////////////////////////////////
  31. //
  32. // this help hook services requests of help from message boxes.
  33. //
  34. //
  35.  
  36. BOOL helpHook ( HAB habAnchor, SHORT sMode, USHORT usTopic, USHORT usSubTopic, PRECTL prclPos )
  37. {
  38.     if ( (sMode == HLPM_WINDOW ) && 
  39.          helpwin && 
  40.          ( usTopic>=PMHLP_DLG_ERRMSG && usTopic<=PMHLP_DLG_ASSERTFAIL)
  41.        ) {
  42.         helpwin->sendMsg(HM_DISPLAY_HELP, 
  43.             MPFROMLONG (MAKELONG (usTopic, 0)), MPFROMSHORT( HM_RESOURCEID) );
  44.         return TRUE;
  45.     } 
  46.     return FALSE;
  47. }
  48.  
  49. ////////////////////////////////////////////////////////////////////////////
  50.  
  51. class InfoDlg : public PMModalDialog {
  52. public:
  53.     InfoDlg(HWND hwnd,PMControlMap* ctrlmap,void* data) : PMModalDialog(HWND_DESKTOP,hwnd,DLG_INFO,ctrlmap,data)
  54.         { }
  55.     BOOL command(USHORT id,USHORT cmddev) {
  56.         switch (id) {
  57.             case DINFO_PB_CURRDATE1:
  58.             case DINFO_PB_CURRDATE2:
  59.                 char buf[64];
  60.                 time_t t;
  61.                 t=time(NULL);
  62.                 strftime(buf,64,"%D",localtime(&t));
  63.                 if (id == DINFO_PB_CURRDATE1) controlFromID(DINFO_EF_DATE1)->setText(buf);
  64.                 else controlFromID(DINFO_EF_DATE2)->setText(buf);
  65.                   return TRUE;
  66.         } 
  67.         return PMModalDialog::command(id,cmddev);
  68.     }
  69.     BOOL initdlg()
  70.     {
  71.         PMSpinButton* sp;
  72.         sp=(PMSpinButton*)controlFromID(DINFO_SB_SOURCE1);
  73.         sp->setArray(apchSources,5); sp->set();
  74.  
  75.         sp=(PMSpinButton*)controlFromID(DINFO_SB_SOURCE2);
  76.         sp->setArray(apchSources,5); sp->set();
  77.  
  78.         sp=(PMSpinButton*)controlFromID(DINFO_SB_NR1);
  79.         sp->setArray(apchNR,6); sp->set();
  80.  
  81.         sp=(PMSpinButton*)controlFromID(DINFO_SB_NR2);
  82.         sp->setArray(apchNR,6); sp->set();
  83.  
  84.         return TRUE;
  85.     }
  86. };
  87.  
  88. class SizeDlg : public PMModalDialog {
  89. public:
  90.     SizeDlg(HWND hwnd,PMControlMap* ctrlmap,void* data) : PMModalDialog(HWND_DESKTOP,hwnd,DLG_SIZE,ctrlmap,data)
  91.         { }
  92.     BOOL initdlg()
  93.     {
  94.         PMSpinButton* sp=(PMSpinButton*)controlFromID(DSIZE_SB_FLAPS);
  95.         sp->setLimits(4,2);
  96.         sp->set();
  97.         return TRUE;
  98.     }
  99. };
  100.  
  101. //////////////////////////////////////////////////////////////////////////////
  102.  
  103. //
  104. // usa un thread separato per stampare l'output, in modo da non bloccare
  105. // il programma!
  106. // use a separate thread for printing, to avoid blocking the rest of the
  107. // program.
  108. //
  109.  
  110.  
  111. class PMPrintLabelThread : public PMWindowThread 
  112. {
  113.     TapeLab* tl;
  114.     char* buf;
  115. public:
  116.     PMPrintLabelThread(char* ibuf,TapeLab *itl) : PMWindowThread() 
  117.     {
  118.         buf=ibuf; tl=itl;
  119.     }
  120.     void main(void* arg=NULL) 
  121.     {
  122.         PMPrinterDC printer(hab);
  123.         printer.open();
  124.         printer.startDoc(buf);
  125.  
  126.         PMPresSpace *prnps=new PMPresSpace(&printer,0,0,PU_LOMETRIC|GPIF_DEFAULT|GPIT_NORMAL|GPIA_ASSOC,hab);
  127.  
  128.         tl->paintlabel(*prnps);
  129.  
  130.         delete prnps;
  131.         printer.endDoc(buf);
  132.     }
  133. };
  134.  
  135. //////////////////////////////////////////////////////////////////////////////
  136.  
  137.  
  138. int main (int argc,char* argv[])
  139. {
  140.     char* file=NULL;
  141.     if (argc>1) file=argv[1];
  142.     
  143.     PMAnchorBlock ab;
  144.     PMMessageQueue mq;
  145.     ab.init();
  146.     mq.create(ab);
  147.     
  148.     App=new PMApp(ab,mq,argc,argv);
  149.  
  150.     helpwin=new PMHelpWin("Tape Label Editor Help","tapelab.hlp",ID_TAPELAB,ab);
  151.     helpwin->createWin();
  152.  
  153.     TapeLab * tl=new TapeLab(ab,file); // load also a file specified on the command line
  154.     tl->createWin();
  155.     
  156.     ab.setHook(mq,HK_HELP,(PFN)helpHook,NULLHANDLE);
  157.  
  158.     App->run();
  159.  
  160.     ab.releaseHook(mq,HK_HELP,(PFN)helpHook,NULLHANDLE);
  161.  
  162.     tl->destroyWin();
  163.  
  164.     mq.destroy();
  165.     ab.uninit();
  166.  
  167.     return (0);
  168. }
  169.  
  170.  
  171.