home *** CD-ROM | disk | FTP | other *** search
- /* $Revision Header * Header built automatically - do not edit! *************
- *
- * (C) Copyright 1990 by Olaf 'Olsen' Barthel & MXM
- *
- * Name .....: TermSub.c
- * Created ..: Monday 21-Jan-91 20:12
- * Revision .: 0
- *
- * Date Author Comment
- * ========= ======== ====================
- * 21-Jan-91 Olsen Created this file!
- *
- * $Revision Header ********************************************************/
-
- #include "TermGlobal.h"
-
- /* This module deals with the so-called `sub window', which is
- * brought up whenever a list of phone entries is to be dialed.
- */
-
- STATIC struct Menu *SubMenu;
-
- STATIC struct Gadget *SubGadgetList;
- STATIC struct Gadget *SubGadgetArray[4];
-
- STATIC WORD PositionX = -1,PositionY = -1;
-
- #define SUB_DIAL 1
- #define SUB_QUIT 2
-
- #define SUBWIDTH 354
- #define SUBHEIGHT 124
-
- enum { MEN_NEXT=1,MEN_PREV,MEN_WINDOW,MEN_DIALENTRY,MEN_DELETECALL,
- MEN_CANCEL,MEN_QUITPANEL };
-
- STATIC struct NewMenu CallMenu[] =
- {
- { NM_TITLE, "Project", 0 , 0, 0, (APTR)0},
- { NM_ITEM, "Next Entry", "N", 0, 0, (APTR)MEN_NEXT},
- { NM_ITEM, "Previous Entry", "P", 0, 0, (APTR)MEN_PREV},
- { NM_ITEM, "Other Window", "W", 0, 0, (APTR)MEN_WINDOW},
- { NM_ITEM, NM_BARLABEL, 0 , 0, 0, (APTR)0},
- { NM_ITEM, "Dial", "D", 0, 0, (APTR)MEN_DIALENTRY},
- { NM_ITEM, "Delete Call", "E", 0, 0, (APTR)MEN_DELETECALL},
- { NM_ITEM, "Cancel", "C", 0, 0, (APTR)MEN_CANCEL},
- { NM_ITEM, NM_BARLABEL, 0 , 0, 0, (APTR)0},
- { NM_ITEM, "Quit", "Q", 0, 0, (APTR)MEN_QUITPANEL},
- { NM_END, 0, 0 , 0, 0, (APTR)0}
- };
-
- STATIC struct Gadget *
- SubCreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
- {
- struct Gadget *Gadget;
- struct NewGadget NewGadget;
- UWORD Offset,Counter = 0;
-
- if(Gadget = CreateContext(GadgetList))
- {
- NewGadget . ng_Width = 334;
- NewGadget . ng_Height = 100;
- NewGadget . ng_GadgetText = NULL;
- NewGadget . ng_TextAttr = &DefaultFont;
- NewGadget . ng_VisualInfo = VisualInfo;
- NewGadget . ng_GadgetID = Counter;
- NewGadget . ng_LeftEdge = 10;
- NewGadget . ng_TopEdge = 1 + TopEdge;
-
- GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
- GTLV_Labels, &EmptyList,
- GTLV_ShowSelected, NULL,
- TAG_DONE);
-
- Offset = SUBWIDTH / 3 + 3;
-
- NewGadget . ng_Width = 92;
- NewGadget . ng_Height = 12;
- NewGadget . ng_GadgetText = "_Dial";
- NewGadget . ng_GadgetID = Counter;
- NewGadget . ng_Flags = 0;
- NewGadget . ng_LeftEdge = 10;
- NewGadget . ng_TopEdge = SUBHEIGHT - 3 - NewGadget . ng_Height;
-
- GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
- GT_Underscore, '_',
- TAG_DONE);
-
- NewGadget . ng_GadgetText = "D_elete Call";
- NewGadget . ng_GadgetID = Counter;
- NewGadget . ng_LeftEdge = NewGadget . ng_LeftEdge + Offset;
-
- GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
- GT_Underscore, '_',
- TAG_DONE);
-
- NewGadget . ng_GadgetText = "_Cancel";
- NewGadget . ng_GadgetID = Counter;
- NewGadget . ng_LeftEdge = NewGadget . ng_LeftEdge + Offset;
-
- GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
- GT_Underscore, '_',
- TAG_DONE);
- }
-
- return(Gadget);
- }
-
- BYTE
- OpenSubWindow()
- {
- if(SubCreateAllGadgets(&SubGadgetArray[0],&SubGadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
- {
- if(SubMenu = CreateMenus(CallMenu,
- GTMN_FrontPen, 0,
- TAG_DONE))
- {
- if(LayoutMenus(SubMenu,VisualInfo,
- GTMN_TextAttr,&DefaultFont,
- TAG_DONE))
- {
- if(PositionX == -1)
- PositionX = (Screen -> Width - SUBWIDTH) >> 1;
-
- if(PositionY == -1)
- PositionY = Window -> Height - SUBHEIGHT;
-
- if(SubWindow = OpenWindowTags(NULL,
- WA_Width, SUBWIDTH,
- WA_Height, SUBHEIGHT,
-
- WA_Left, PositionX,
- WA_Top, PositionY,
-
- WA_DragBar, TRUE,
- WA_DepthGadget, TRUE,
- WA_CloseGadget, TRUE,
- WA_RMBTrap, TRUE,
- WA_CustomScreen,Screen,
-
- WA_IDCMP, IDCMP_CLOSEWINDOW | BUTTONIDCMP | LISTVIEWIDCMP | IDCMP_MENUPICK,
-
- WA_Title, "Dial List",
- TAG_DONE))
- {
- AddGList(SubWindow,SubGadgetList,(UWORD)-1,(UWORD)-1,NULL);
- RefreshGList(SubGadgetList,SubWindow,NULL,(UWORD)-1);
- GT_RefreshWindow(SubWindow,NULL);
-
- if(SubList)
- {
- SubItemNum = SubListNum - 1;
-
- GT_SetGadgetAttrs(SubGadgetArray[0],SubWindow,NULL,
- GTLV_Labels,SubList,
- GTLV_Selected,SubListNum,
- TAG_DONE);
- }
-
- SetMenuStrip(SubWindow,SubMenu);
-
- SubWindow -> Flags &= ~WFLG_RMBTRAP;
-
- return(TRUE);
- }
- }
-
- FreeMenus(SubMenu);
- SubMenu = NULL;
- }
-
- FreeGadgets(SubGadgetList);
- SubGadgetList = NULL;
- }
-
- return(FALSE);
- }
-
- VOID
- CloseSubWindow()
- {
- if(SubWindow)
- {
- SubWindow -> Flags |= WFLG_RMBTRAP;
- ClearMenuStrip(SubWindow);
-
- if(SubGadgetList)
- RemoveGList(SubWindow,SubGadgetList,(UWORD)-1);
-
- PositionX = SubWindow -> LeftEdge;
- PositionY = SubWindow -> TopEdge;
-
- CloseWindow(SubWindow);
-
- SubWindow = NULL;
- }
-
- if(SubMenu)
- {
- FreeMenus(SubMenu);
-
- SubMenu = NULL;
- }
-
- if(SubGadgetList)
- {
- FreeGadgets(SubGadgetList);
-
- SubGadgetList = NULL;
- }
- }
-
- VOID
- AddSubEntry(LONG Entry)
- {
- if(!SubList)
- {
- if(SubList = (struct List *)AllocMem(sizeof(struct List),MEMF_PUBLIC | MEMF_CLEAR))
- NewList(SubList);
- }
-
- if(SubList)
- {
- struct PhoneNode *SubNode;
-
- if(SubNode = (struct PhoneNode *)AllocMem(sizeof(struct PhoneNode),MEMF_PUBLIC|MEMF_CLEAR))
- {
- GT_SetGadgetAttrs(SubGadgetArray[0],SubWindow,NULL,
- GTLV_Labels,~0,
- TAG_DONE);
-
- SubNode -> VanillaNode . ln_Name = Phonebook[Entry] -> Name;
- SubNode -> Entry = Phonebook[Entry];
- SubNode -> Number = Entry;
-
- AddTail(SubList,&SubNode -> VanillaNode);
-
- SubItemNum = SubListNum;
-
- GT_SetGadgetAttrs(SubGadgetArray[0],SubWindow,NULL,
- GTLV_Labels, SubList,
- GTLV_Selected, SubListNum++,
- TAG_DONE);
- }
- }
- }
-
- BYTE
- RemSubEntry()
- {
- struct PhoneNode *SubNode;
- LONG i;
-
- SubNode = (struct PhoneNode *)SubList -> lh_Head;
-
- i = 0;
-
- while(i < SubItemNum)
- {
- SubNode = (struct PhoneNode *)SubNode -> VanillaNode . ln_Succ;
-
- i++;
- }
-
- if(SubListNum)
- {
- if(SubItemNum == (--SubListNum))
- {
- if(SubItemNum)
- SubItemNum--;
- }
- }
- else
- SubItemNum = 0;
-
- if(SubWindow)
- {
- GT_SetGadgetAttrs(SubGadgetArray[0],SubWindow,NULL,
- GTLV_Labels,~0,
- TAG_DONE);
- }
-
- Remove(SubNode);
-
- FreeMem(SubNode,sizeof(struct PhoneNode));
-
- if(!SubListNum)
- {
- if(SubList)
- FreeMem(SubList,sizeof(struct List));
-
- SubList = NULL;
-
- CloseSubWindow();
-
- return(TRUE);
- }
- else
- {
- if(SubWindow)
- {
- GT_SetGadgetAttrs(SubGadgetArray[0],SubWindow,NULL,
- GTLV_Labels,SubList,
- GTLV_Selected,SubItemNum,
- TAG_DONE);
- }
-
- return(FALSE);
- }
- }
-
- VOID
- FreeSubList()
- {
- if(SubList)
- {
- struct PhoneNode *NextNode,*SubNode;
- LONG i;
-
- if(SubList -> lh_Head)
- NextNode = (struct PhoneNode *)SubList -> lh_Head -> ln_Succ;
- else
- NextNode = NULL;
-
- SubNode = (struct PhoneNode *)SubList -> lh_Head;
-
- for(i = 0 ; i < SubListNum ; i++)
- {
- NextNode = (struct PhoneNode *)SubNode -> VanillaNode . ln_Succ;
-
- FreeMem(SubNode,sizeof(struct PhoneNode));
-
- SubNode = NextNode;
- }
-
- SubListNum = 0;
-
- FreeMem(SubList,sizeof(struct List));
-
- SubList = NULL;
- }
- }
-
- BYTE
- HandleSubWindow(struct Window *PanelWindow)
- {
- if(SubWindow)
- {
- struct IntuiMessage *Massage;
- ULONG Class,Code;
- struct Gadget *Gadget;
-
- while(Massage = (struct IntuiMessage *)GT_GetIMsg(SubWindow -> UserPort))
- {
- Class = Massage -> Class;
- Code = Massage -> Code;
- Gadget = (struct Gadget *)Massage -> IAddress;
-
- GT_ReplyIMsg(Massage);
-
- if(Class == IDCMP_MENUPICK)
- {
- struct MenuItem *MenuItem;
-
- while(Code != MENUNULL)
- {
- MenuItem = ItemAddress(SubMenu,Code);
-
- switch((ULONG)MENU_USERDATA(MenuItem))
- {
- case MEN_QUITPANEL: return(SUB_QUIT);
-
- case MEN_CANCEL: CloseSubWindow();
- FreeSubList();
-
- return(0);
-
- case MEN_NEXT: if(SubItemNum == SubListNum - 1)
- SubItemNum = 0;
- else
- SubItemNum++;
-
- GT_SetGadgetAttrs(SubGadgetArray[0],SubWindow,NULL,
- GTLV_Selected,SubItemNum,
- TAG_DONE);
-
- break;
-
- case MEN_PREV: if(SubItemNum == 0)
- SubItemNum = SubListNum - 1;
- else
- SubItemNum--;
-
- GT_SetGadgetAttrs(SubGadgetArray[0],SubWindow,NULL,
- GTLV_Selected,SubItemNum,
- TAG_DONE);
-
- break;
-
- case MEN_WINDOW: if(PanelWindow)
- {
- WindowToFront(PanelWindow);
-
- ActivateWindow(PanelWindow);
- }
-
- break;
-
- case MEN_DIALENTRY: return(SUB_DIAL);
- break;
-
- case MEN_DELETECALL: if(RemSubEntry())
- return(0);
-
- break;
-
- default: break;
- }
-
- Code = MenuItem -> NextSelect;
- }
- }
-
- if(Class == IDCMP_CLOSEWINDOW)
- return(SUB_QUIT);
-
- if(Class == IDCMP_GADGETUP)
- {
- switch(Gadget -> GadgetID)
- {
- case 0: SubItemNum = Code;
- break;
-
- case 1: return(SUB_DIAL);
- break;
-
- case 2: if(RemSubEntry())
- return(0);
-
- break;
-
- case 3: CloseSubWindow();
-
- FreeSubList();
-
- return(0);
- }
- }
- }
- }
-
- return(0);
- }
-