home *** CD-ROM | disk | FTP | other *** search
/ Spanish Scene 4 / SpanishScene4.iso / Programas / DavidBarbion_Ind / backclock_V232c.lha / BackClock / sources / partial.c < prev    next >
C/C++ Source or Header  |  1999-06-11  |  5KB  |  184 lines

  1. /*****************************************************************************
  2.  * 
  3.  * name         : partial.c
  4.  * description      : close & reopen window on workbench close
  5.  * version        : 2.1ß3
  6.  *
  7.  * created        : ?
  8.  * last change      : 11-06-99
  9.  *
  10.  * version 2.1: bugfixed (sizing and dragging gadget)
  11.  * version 2.1ß2 : now open the window as backdrop (working)
  12.  * version 2.1ß3 : opens inf front of wb or do
  13.  *
  14.  *****************************************************************************
  15.  */
  16. #include "utils.h"
  17. #include "partial.h"
  18. #include "obp.h"
  19. #include <proto/intuition.h>
  20. #include <proto/exec.h>
  21.  
  22.  
  23. BOOL partialClose(idWin * prj) {
  24.   /* 
  25.    * handle notify_intuition msg
  26.    * close the window 
  27.    * 
  28.    */
  29.   BOOL ret = FALSE ;
  30.   struct Message * msg ;
  31.   struct IntNotifyMessage * imsg ;
  32.   
  33.   msg = GetMsg(prj->notifyPort) ;
  34.   imsg = (struct IntNotifyMessage*)msg ;
  35.  
  36.   if (imsg->inm_Code == 0x200) {
  37.     /* close the window
  38.      */
  39.     if (prj->win) {  
  40.       CloseWindow(prj->win) ;
  41.       prj->win = NULL ;      // in case of error
  42.       ret = TRUE ;
  43.     }
  44.   }
  45.   if (msg) ReplyMsg(msg) ;
  46.   
  47.   return(ret) ;
  48. }
  49.  
  50.  
  51. void partialOpen(idWin * prj) {
  52.   /* reopen the window
  53.    */
  54.   struct Screen * WBScreen = NULL ;
  55.   struct IntNotifyMessage * imsg ;
  56.   UWORD code ;
  57.   ULONG mask ;
  58.   BOOL stopWait = FALSE ;
  59.   
  60.   do{
  61.     /* get msg from notifyintuition
  62.      */
  63.     mask = Wait(1<<(prj->notifyPort->mp_SigBit)) ;
  64.     if ((imsg = (struct IntNotifyMessage*)GetMsg(prj->notifyPort)) != NULL) {
  65.       /* received a msg
  66.        */
  67.       code = imsg->inm_Code ;
  68.       ReplyMsg((struct Message *)imsg) ;
  69.       stopWait = TRUE ;
  70.     }
  71.   }while(code != 0x100) ;
  72.    
  73.   WBScreen = LockPubScreen("Workbench") ;
  74.   prj->wb = WBScreen ;
  75.   free_bitmap(prj) ;
  76.   init_bitmap(prj) ;
  77.   prj->win = OpenWindowTags(NULL, WA_Left,  prj->backWin.posX,
  78.                         WA_Top,   prj->backWin.posY,
  79.                         WA_Width, prj->backWin.width,
  80.                         WA_Height,  prj->backWin.height,
  81.                         WA_IDCMP, IDCMP,
  82.                                  WA_MinWidth,  50,
  83.                                  WA_MinHeight,   50,
  84.                                  WA_MaxHeight,   MAXH,
  85.                                  WA_MaxWidth,    MAXH, 
  86.                         WA_Flags, WFLG,
  87.                         WA_ScreenTitle, TXT_SCRTITLE, 
  88.                         WA_NewLookMenus, TRUE,
  89.                         WA_PubScreenName, "Workbench", TAG_DONE) ;
  90.   RemoveGList(prj->win, &szgdg, 2) ;
  91.                         
  92.   szgdg.Width  = prj->win->Width ;
  93.   szgdg.NextGadget = &tagdg ;
  94.   tagdg.LeftEdge  = prj->win->Width - 10 ;
  95.   tagdg.TopEdge   = prj->win->Height - 10 ;
  96.   
  97.   AddGList(prj->win, &szgdg, 0, 2, NULL) ;
  98.    
  99.   RefreshGList(&szgdg, prj->win, NULL, -1) ;                              
  100.   UnlockPubScreen(NULL, WBScreen) ;
  101.   setColors(prj) ;
  102.  
  103.   GoAhead(prj) ;
  104.  
  105.  
  106. }
  107.  
  108.  
  109.  
  110. void setWindow(idWin * prj) {
  111.   CloseWindow(prj->win) ;
  112.   prj->wb = LockPubScreen("Workbench") ;
  113.   
  114.   free_bitmap(prj) ;
  115.   init_bitmap(prj) ;
  116.   
  117.   prj->win = OpenWindowTags(NULL, WA_Left,  prj->backWin.posX,
  118.                         WA_Top,   prj->backWin.posY,
  119.                         WA_Width, prj->backWin.width,
  120.                         WA_Height,  prj->backWin.height,
  121.                         WA_IDCMP, IDCMP,
  122.                                  WA_MinWidth,  50,
  123.                                  WA_MinHeight,   50,
  124.                                  WA_MaxHeight,   MAXH,
  125.                                  WA_MaxWidth,    MAXH, 
  126.                         WA_Flags, WFLG,
  127.                         WA_ScreenTitle, TXT_SCRTITLE, 
  128.                         WA_NewLookMenus, TRUE,
  129.                         WA_PubScreenName, "Workbench", TAG_DONE) ;
  130.   RemoveGList(prj->win, &szgdg, 2) ;
  131.                         
  132.   szgdg.Width  = prj->win->Width ;
  133.   szgdg.NextGadget = &tagdg ;
  134.   tagdg.LeftEdge  = prj->win->Width /2 ;
  135.   tagdg.TopEdge   = prj->win->Height - 20 ;
  136.   tagdg.Width     = prj->win->Width /2 ;
  137.   
  138.   AddGList(prj->win, &szgdg, 0, 2, NULL) ;
  139.    
  140.   RefreshGList(&szgdg, prj->win, NULL, -1) ;
  141.  
  142.   UnlockPubScreen(NULL, prj->wb) ; 
  143. //  ChangeWindowBox(prj->win, prj->backWin.posX, prj->backWin.posY, prj->backWin.width, prj->backWin.height) ;
  144.   reinit_win(prj) ;
  145. }
  146.  
  147. void GoAhead(idWin * prj) {
  148.   /* go in front od wb or do main window
  149.    */
  150.   struct Window * win ;
  151.   win = FindWindow() ;
  152.   if (win)
  153.     MoveWindowInFrontOf(prj->win,win) ;
  154.  
  155.  
  156. }
  157.  
  158.  
  159. struct Window * FindWindow() {
  160.   /* find the WB or DO main window
  161.    */
  162.   struct Screen * wbscr ;
  163.   struct Window * wbwin ;
  164.   struct Window * found = NULL ;
  165.  
  166.   if ((wbscr = LockPubScreen("Workbench")) != NULL) {
  167.     /* workbench found !
  168.      */
  169.     wbwin = wbscr->FirstWindow ;
  170.     while(wbwin) {
  171.       /* search the main window (named "Directory Opus" || "Workbench"
  172.        */
  173.       if (strcmp(wbwin->Title, "Directory Opus") == 0)
  174.         found = wbwin ;
  175.       if (strcmp(wbwin->Title, "Workbench") == 0)
  176.         found = wbwin ;
  177.       wbwin = wbwin->NextWindow ;
  178.     }
  179.     UnlockPubScreen(NULL, wbscr) ;
  180.   }
  181.   return(found) ;
  182. }
  183.  
  184.