home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Spanish Scene 4
/
SpanishScene4.iso
/
Programas
/
DavidBarbion_Ind
/
backclock_V232c.lha
/
BackClock
/
sources
/
partial.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-06-11
|
5KB
|
184 lines
/*****************************************************************************
*
* name : partial.c
* description : close & reopen window on workbench close
* version : 2.1ß3
*
* created : ?
* last change : 11-06-99
*
* version 2.1: bugfixed (sizing and dragging gadget)
* version 2.1ß2 : now open the window as backdrop (working)
* version 2.1ß3 : opens inf front of wb or do
*
*****************************************************************************
*/
#include "utils.h"
#include "partial.h"
#include "obp.h"
#include <proto/intuition.h>
#include <proto/exec.h>
BOOL partialClose(idWin * prj) {
/*
* handle notify_intuition msg
* close the window
*
*/
BOOL ret = FALSE ;
struct Message * msg ;
struct IntNotifyMessage * imsg ;
msg = GetMsg(prj->notifyPort) ;
imsg = (struct IntNotifyMessage*)msg ;
if (imsg->inm_Code == 0x200) {
/* close the window
*/
if (prj->win) {
CloseWindow(prj->win) ;
prj->win = NULL ; // in case of error
ret = TRUE ;
}
}
if (msg) ReplyMsg(msg) ;
return(ret) ;
}
void partialOpen(idWin * prj) {
/* reopen the window
*/
struct Screen * WBScreen = NULL ;
struct IntNotifyMessage * imsg ;
UWORD code ;
ULONG mask ;
BOOL stopWait = FALSE ;
do{
/* get msg from notifyintuition
*/
mask = Wait(1<<(prj->notifyPort->mp_SigBit)) ;
if ((imsg = (struct IntNotifyMessage*)GetMsg(prj->notifyPort)) != NULL) {
/* received a msg
*/
code = imsg->inm_Code ;
ReplyMsg((struct Message *)imsg) ;
stopWait = TRUE ;
}
}while(code != 0x100) ;
WBScreen = LockPubScreen("Workbench") ;
prj->wb = WBScreen ;
free_bitmap(prj) ;
init_bitmap(prj) ;
prj->win = OpenWindowTags(NULL, WA_Left, prj->backWin.posX,
WA_Top, prj->backWin.posY,
WA_Width, prj->backWin.width,
WA_Height, prj->backWin.height,
WA_IDCMP, IDCMP,
WA_MinWidth, 50,
WA_MinHeight, 50,
WA_MaxHeight, MAXH,
WA_MaxWidth, MAXH,
WA_Flags, WFLG,
WA_ScreenTitle, TXT_SCRTITLE,
WA_NewLookMenus, TRUE,
WA_PubScreenName, "Workbench", TAG_DONE) ;
RemoveGList(prj->win, &szgdg, 2) ;
szgdg.Width = prj->win->Width ;
szgdg.NextGadget = &tagdg ;
tagdg.LeftEdge = prj->win->Width - 10 ;
tagdg.TopEdge = prj->win->Height - 10 ;
AddGList(prj->win, &szgdg, 0, 2, NULL) ;
RefreshGList(&szgdg, prj->win, NULL, -1) ;
UnlockPubScreen(NULL, WBScreen) ;
setColors(prj) ;
GoAhead(prj) ;
}
void setWindow(idWin * prj) {
CloseWindow(prj->win) ;
prj->wb = LockPubScreen("Workbench") ;
free_bitmap(prj) ;
init_bitmap(prj) ;
prj->win = OpenWindowTags(NULL, WA_Left, prj->backWin.posX,
WA_Top, prj->backWin.posY,
WA_Width, prj->backWin.width,
WA_Height, prj->backWin.height,
WA_IDCMP, IDCMP,
WA_MinWidth, 50,
WA_MinHeight, 50,
WA_MaxHeight, MAXH,
WA_MaxWidth, MAXH,
WA_Flags, WFLG,
WA_ScreenTitle, TXT_SCRTITLE,
WA_NewLookMenus, TRUE,
WA_PubScreenName, "Workbench", TAG_DONE) ;
RemoveGList(prj->win, &szgdg, 2) ;
szgdg.Width = prj->win->Width ;
szgdg.NextGadget = &tagdg ;
tagdg.LeftEdge = prj->win->Width /2 ;
tagdg.TopEdge = prj->win->Height - 20 ;
tagdg.Width = prj->win->Width /2 ;
AddGList(prj->win, &szgdg, 0, 2, NULL) ;
RefreshGList(&szgdg, prj->win, NULL, -1) ;
UnlockPubScreen(NULL, prj->wb) ;
// ChangeWindowBox(prj->win, prj->backWin.posX, prj->backWin.posY, prj->backWin.width, prj->backWin.height) ;
reinit_win(prj) ;
}
void GoAhead(idWin * prj) {
/* go in front od wb or do main window
*/
struct Window * win ;
win = FindWindow() ;
if (win)
MoveWindowInFrontOf(prj->win,win) ;
}
struct Window * FindWindow() {
/* find the WB or DO main window
*/
struct Screen * wbscr ;
struct Window * wbwin ;
struct Window * found = NULL ;
if ((wbscr = LockPubScreen("Workbench")) != NULL) {
/* workbench found !
*/
wbwin = wbscr->FirstWindow ;
while(wbwin) {
/* search the main window (named "Directory Opus" || "Workbench"
*/
if (strcmp(wbwin->Title, "Directory Opus") == 0)
found = wbwin ;
if (strcmp(wbwin->Title, "Workbench") == 0)
found = wbwin ;
wbwin = wbwin->NextWindow ;
}
UnlockPubScreen(NULL, wbscr) ;
}
return(found) ;
}