#include "list.h" #include #include "menu.h" #ifndef DEBUG #include #endif USHORT chip is_PropEndData[] = { 0x0000, 0x8000, /* ................#............... */ 0x7ffe, 0x0000, /* .##############................. */ 0x7ffe, 0x0000, /* .##############................. */ 0x8000, 0x0000, /* #............................... */ 0x0000, 0x0000, /* ................................ */ 0x0000, 0x8000, /* ................#............... */ 0x0000, 0x8000, /* ................#............... */ 0x2aaa, 0x8000, /* ..#.#.#.#.#.#.#.#............... */ }; USHORT chip is_PropArrowsData[] = { 0x0000, 0x8000, /* ................#............... */ 0x7ffe, 0x0000, /* .##############................. */ 0x7ffe, 0x0000, /* .##############................. */ 0x7e7e, 0x0000, /* .######..######................. */ 0x7c3e, 0x0000, /* .#####....#####................. */ 0x781e, 0x0000, /* .####......####................. */ 0x7ffe, 0x0000, /* .##############................. */ 0x7ffe, 0x0000, /* .##############................. */ 0x0000, 0x0000, /* ................................ */ 0x7ffe, 0x0000, /* .##############................. */ 0x7ffe, 0x0000, /* .##############................. */ 0x0000, 0x0000, /* ................................ */ 0x7ffe, 0x0000, /* .##############................. */ 0x7ffe, 0x0000, /* .##############................. */ 0x781e, 0x0000, /* .####......####................. */ 0x7c3e, 0x0000, /* .#####....#####................. */ 0x7e7e, 0x0000, /* .######..######................. */ 0x7ffe, 0x0000, /* .##############................. */ 0x7ffe, 0x0000, /* .##############................. */ 0x8000, 0x0000, /* #............................... */ 0x0000, 0x0000, /* ................................ */ 0x0000, 0x8000, /* ................#............... */ 0x0000, 0x8000, /* ................#............... */ 0x0180, 0x8000, /* .......##.......#............... */ 0x03c0, 0x8000, /* ......####......#............... */ 0x07e0, 0x8000, /* .....######.....#............... */ 0x0000, 0x8000, /* ................#............... */ 0x0000, 0x8000, /* ................#............... */ 0x0000, 0x8000, /* ................#............... */ 0x0000, 0x8000, /* ................#............... */ 0x0000, 0x8000, /* ................#............... */ 0x0000, 0x8000, /* ................#............... */ 0x0000, 0x8000, /* ................#............... */ 0x0000, 0x8000, /* ................#............... */ 0x07e0, 0x8000, /* .....######.....#............... */ 0x03c0, 0x8000, /* ......####......#............... */ 0x0180, 0x8000, /* .......##.......#............... */ 0x0000, 0x8000, /* ................#............... */ 0x0000, 0x8000, /* ................#............... */ 0x2aaa, 0x8000, /* ..#.#.#.#.#.#.#.#............... */ }; /* === Read Only Data ================================================== */ static USHORT chip Close1Data[] = { 0xffff, /* ################ */ 0xc003, /* ##............## */ 0xcff3, /* ##..########..## */ 0xcff3, /* ##..########..## */ 0xcff3, /* ##..########..## */ 0xcff3, /* ##..########..## */ 0xc003, /* ##............## */ 0xffff, /* ################ */ 0x0000, /* ................ */ 0x3ffc, /* ..############.. */ 0x300c, /* ..##........##.. */ 0x300c, /* ..##........##.. */ 0x300c, /* ..##........##.. */ 0x300c, /* ..##........##.. */ 0x3ffc, /* ..############.. */ 0x0000, /* ................ */ }; static USHORT chip Close2Data[] = { 0xffff, /* ################ */ 0xc003, /* ##............## */ 0xc3c3, /* ##....####....## */ 0xcdb3, /* ##..##.##.##..## */ 0xcdb3, /* ##..##.##.##..## */ 0xc3c3, /* ##....####....## */ 0xc003, /* ##............## */ 0xffff, /* ################ */ 0x0000, /* ................ */ 0x3ffc, /* ..############.. */ 0x3c3c, /* ..####....####.. */ 0x324c, /* ..##..#..#..##.. */ 0x324c, /* ..##..#..#..##.. */ 0x3c3c, /* ..####....####.. */ 0x3ffc, /* ..############.. */ 0x0000, /* ................ */ }; static USHORT chip Depth1Data[] = { 0xffff, /* ################ */ 0xc03f, /* ##........###### */ 0xcf3f, /* ##..####..###### */ 0xcc03, /* ##..##........## */ 0xc003, /* ##............## */ 0xfc03, /* ######........## */ 0xfc03, /* ######........## */ 0xffff, /* ################ */ 0x0000, /* ................ */ 0x3fc0, /* ..########...... */ 0x30c0, /* ..##....##...... */ 0x33fc, /* ..##..########.. */ 0x3ffc, /* ..############.. */ 0x03fc, /* ......########.. */ 0x03fc, /* ......########.. */ 0x0000, /* ................ */ }; static USHORT chip Depth2Data[] = { 0xffff, /* ################ */ 0xc03f, /* ##........###### */ 0xc03f, /* ##........###### */ 0xc003, /* ##............## */ 0xc0f3, /* ##......####..## */ 0xfcf3, /* ######..####..## */ 0xfc03, /* ######........## */ 0xffff, /* ################ */ 0x0000, /* ................ */ 0x3fc0, /* ..########...... */ 0x3fc0, /* ..########...... */ 0x3ffc, /* ..############.. */ 0x3f0c, /* ..######....##.. */ 0x030c, /* ......##....##.. */ 0x03fc, /* ......########.. */ 0x0000, /* ................ */ }; static USHORT chip SizeData[] = { 0xfcff, /* ######..######## */ 0xf3ff, /* ####..########## */ 0xccff, /* ##..##..######## */ 0x30ff, /* ..##....######## */ 0xffff, /* ################ */ 0x0300, /* ......##........ */ 0x0c00, /* ....##.......... */ 0x3300, /* ..##..##........ */ 0xcf00, /* ##..####........ */ 0x0000, /* ................ */ }; static struct Image Close1 = { 0,0, 16,8, 2, Close1Data, 0x03,0x00, NULL }; static struct Image Close2 = { 0,0, 16,8, 2, Close2Data, 0x03,0x00, NULL }; static struct Image Depth1 = { 0,0, 16,8, 2, Depth1Data, 0x03,0x00, NULL }; static struct Image Depth2 = { 0,0, 16,8, 2, Depth2Data, 0x03,0x00, NULL }; static struct Gadget SystemGadgets[] = { { &SystemGadgets[1], -19, 1, 16, 8, GRELRIGHT | GADGIMAGE | GADGHCOMP, RELVERIFY, SYSGADGET | WUPFRONT, (APTR)&Depth1, NULL, NULL, NULL, NULL, 0, NULL }, { &SystemGadgets[2], -39, 1, 16, 8, GRELRIGHT | GADGIMAGE | GADGHCOMP, RELVERIFY, SYSGADGET | WDOWNBACK, (APTR)&Depth2, NULL, NULL, NULL, NULL, 0, NULL }, { NULL, 4, 1, 16, 8, GADGIMAGE | GADGHIMAGE, RELVERIFY, SYSGADGET | CLOSE, (APTR)&Close1, (APTR)&Close2, NULL, NULL, NULL, 0, NULL }, }; struct Border st_LRBorder[] = { { 0, 0, BLACK, 0, JAM1, 4, NULL, NULL }, /* Window Border */ { 0, 0, BLACK, 0, JAM1, 5, NULL, NULL }, /* Window Border */ { 0, 0, BLUE, 0, JAM1, 2, NULL, NULL }, /* Prop left border */ }; struct Box st_LRBox[] = { { NULL, 1, 0, 0,10, BLACK, BLACK, WHITE, 0, NULL, NULL }, /* Title */ /* { NULL, 0,0, 62,13, BLUE, WHITE, BLACK, BLACK, "Cancel", BOX_SHADING }, { NULL, 17,0, 62,13, YELLW, WHITE, BLACK, BLACK, "Ok", BOX_SHADING }, */ { NULL, 0,0, 0, 0, BLUE, WHITE, 0, BLACK, "", BOX_SHADING } /* Display background */ }; struct Image st_LRImage[] = { { 0,0, 17, 4, SYSPLANES, is_PropEndData, 0x03, 0x00, NULL }, { 0,0, 17,20, SYSPLANES, is_PropArrowsData, 0x03, 0x00, NULL }, { 0,0, 17, 4, SYSPLANES, is_PropEndData, 0x03, 0x00, NULL }, }; struct Gadget st_LRGadget[FILEIO_GADGETS] = { { NULL, 0,0, 0,10, GRELWIDTH | GADGHNONE, TOPBORDER, SYSGADGET | WDRAGGING, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, { NULL, 19,0, 58,11, GADGHCOMP, RELVERIFY, BOOLGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_CANCEL, NULL, }, { NULL, 19,0, 58,11, GADGHCOMP, RELVERIFY, BOOLGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_OK, NULL, }, { NULL, 0,0, 14,7, GADGHCOMP, GADGIMMEDIATE | RELVERIFY, BOOLGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_UPGADGET, NULL, }, { NULL, 0,0, 14,7, GADGHCOMP, GADGIMMEDIATE | RELVERIFY, BOOLGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_DOWNGADGET, NULL, }, { NULL, 0,0, 10,0, GADGIMAGE | GADGHNONE, GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE, PROPGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_PROPGADGET, NULL, }, { NULL, OPENSELECT_LEFT,OPENSELECT_TOP, 0,0, GADGHNONE, GADGIMMEDIATE, BOOLGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_SELECTNAME, NULL, }, }; struct NewWindow st_LRnw = { 0,0, 0,0, BLUE, WHITE, GADGETUP | GADGETDOWN | MOUSEMOVE | CLOSEWINDOW | MENUPICK, BORDERLESS | SMART_REFRESH | ACTIVATE | NOCAREREFRESH, NULL, NULL, NULL, NULL, NULL, 0,0, 0,0, WBENCHSCREEN, }; struct TextAttr LRSafeFont = { (UBYTE *)"topaz.font", TOPAZ_EIGHTY, 0, 0 }; struct IntuiText st_LROpenSelectText = { 3, WHITE, JAM2, 1, 0, &LRSafeFont, NULL, NULL, }; struct Image st_LRPropImage = { 1, 0, 8, 0, SYSPLANES, NULL, 0x00, WHITE, NULL, }; UBYTE LRDefaultReqTitle[] = "iSup Lists Requester"; USHORT LR_Pattern[] = /* { 0x7f7f, 0x3f3f, 0xdfdf, 0xffff, 0xfdfd, 0xf9f9, 0xf7f7, 0xffff };*/ { 0x7b9c, /* .####.###..###.. */ 0xda7b, /* ##.##.#..####.## */ 0x3327, /* ..##..##..#..### */ 0xe5af, /* ###..#.##.#.#### */ 0x5eac, /* .#.####.#.#.##.. */ 0xd96a, /* ##.##..#.##.#.#. */ 0x6b6b, /* .##.#.##.##.#.## */ 0x1de7, /* ...###.####..### */ }; BOOL ls_AllocateData(list) register struct ListSupport *list; { register USHORT i; SHORT d_width, d_height, width, height; d_width = (list->MaxChars-1)*8 + 6; d_height = list->MaxLines*OPEN_LINEHEIGHT; width = d_width + 45; height = d_height + 12 + 14; if ( !(list->OpenSelectText = New(struct IntuiText, list->MaxLines)) || !(list->LRBorder = New(struct Border, FILEIO_BORDERS)) || !(list->LRBox = New(struct Box, FILEIO_BOXES)) || !(list->LRImage = New(struct Image, FILEIO_IMAGES)) || !(list->LRGadget = New(struct Gadget, FILEIO_GADGETS)) ) { ls_DeleteData(list); return(FALSE); } CopyMem(st_LRBorder, list->LRBorder, sizeof(struct Border)*FILEIO_BORDERS); for(i=1; iLRBorder[i].NextBorder = &list->LRBorder[i-1]; CopyMem(st_LRBox, list->LRBox, sizeof(struct Box)*FILEIO_BOXES); for(i=1; iLRBox[i].NextBox = &list->LRBox[i-1]; CopyMem(st_LRImage, list->LRImage, sizeof(struct Image)*FILEIO_IMAGES); for(i=1; iLRImage[i].NextImage = &list->LRImage[i-1]; for(i=0; iLRBorder[i].XY = New(SHORT, list->LRBorder[i].Count*2)) ) { ls_DeleteData(list); return(FALSE); } list->LRBorder[0].XY[0] = list->LRBorder[0].XY[2] = 1; list->LRBorder[0].XY[1] = list->LRBorder[0].XY[7] = 10; list->LRBorder[0].XY[3] = list->LRBorder[0].XY[5] = height-1; list->LRBorder[0].XY[4] = list->LRBorder[0].XY[6] = width-2; list->LRBorder[1].XY[0] = list->LRBorder[1].XY[1] = list->LRBorder[1].XY[2] = list->LRBorder[1].XY[7] = list->LRBorder[1].XY[8] = list->LRBorder[1].XY[9] = 0; list->LRBorder[1].XY[3] = list->LRBorder[1].XY[5] = height-1; list->LRBorder[1].XY[4] = list->LRBorder[1].XY[6] = width-1; list->LRBorder[2].XY[0] = list->LRBorder[2].XY[2] = width-34; list->LRBorder[2].XY[1] = OPENSELECT_TOP-1; list->LRBorder[2].XY[3] = OPENSELECT_TOP+d_height+4; list->LRBox[0].Width = width-2; /* list->LRBox[1].LeftEdge = width-81; list->LRBox[1].TopEdge = list->LRBox[2].TopEdge = height - 17; */ list->LRBox[1].LeftEdge = OPENSELECT_LEFT-5; list->LRBox[1].TopEdge = OPENSELECT_TOP-1; list->LRBox[1].Width = d_width+29; list->LRBox[1].Height = d_height+4; if (list->ReqTitle) list->LRBox[0].Text = list->ReqTitle; else list->LRBox[0].Text = LRDefaultReqTitle; list->LRImage[0].LeftEdge = list->LRImage[1].LeftEdge = list->LRImage[2].LeftEdge = width-31; list->LRImage[0].TopEdge = OPENSELECT_TOP+1; list->LRImage[1].TopEdge = OPENSELECT_TOP+6; list->LRImage[2].TopEdge = OPENSELECT_TOP+d_height-3; CopyMem(st_LRGadget, list->LRGadget, sizeof(struct Gadget)*FILEIO_GADGETS); for(i=2; iLRGadget[i].NextGadget = &list->LRGadget[i-1]; if ( !(list->LRGadget[OPENGADGET_PROPGADGET].SpecialInfo = (APTR)New(struct PropInfo, 1)) || !(list->LRGadget[OPENGADGET_PROPGADGET].GadgetRender = (APTR)New(struct Image, 1)) ) { ls_DeleteData(list); return(FALSE); } OpenPropInfo->Flags = FREEVERT | PROPBORDERLESS; Clone(&st_LRPropImage, OpenPropImage); /* let's hide the Ok and Cancel gadgets below the big display */ list->LRGadget[1].TopEdge = list->LRGadget[2].TopEdge = height-20; /* the others are visible and active */ list->LRGadget[3].LeftEdge = list->LRGadget[4].LeftEdge = width-30; list->LRGadget[3].TopEdge = OPENSELECT_TOP+7; list->LRGadget[4].TopEdge = OPENSELECT_TOP+18; list->LRGadget[5].LeftEdge = width-28; list->LRGadget[5].TopEdge = OPENSELECT_TOP+26; list->LRGadget[5].Height = d_height-29; list->LRGadget[6].Width = d_width; list->LRGadget[6].Height = d_height; for (i=0; iMaxLines; i++) { Clone(&st_LROpenSelectText, &list->OpenSelectText[i]); list->OpenSelectText[i].TopEdge = 1+(OPEN_LINEHEIGHT*i); if (i) list->OpenSelectText[i].NextText = &list->OpenSelectText[i-1]; if (!(list->OpenSelectText[i].IText = New(UBYTE, list->MaxChars))) { ls_DeleteData(list); return(FALSE); } } return(TRUE); } VOID ls_DeleteData(list) register struct ListSupport *list; { register USHORT i; SHORT d_height; if (list->LRGadget) { CheckDelete(OpenPropInfo, 1); CheckDelete(OpenPropImage, 1); Delete(list->LRGadget, FILEIO_GADGETS); } if (list->LRBorder) { for(i=0; iLRBorder[i].XY, list->LRBorder[i].Count*2); } Delete(list->LRBorder, FILEIO_BORDERS); } CheckDelete(list->LRBox, FILEIO_BOXES); CheckDelete(list->LRImage, FILEIO_IMAGES); if (list->OpenSelectText) { for(i=0; iMaxLines; i++) CheckDelete(list->OpenSelectText[i].IText, list->MaxChars); Delete(list->OpenSelectText, list->MaxLines); } } BOOL ls_StartRequester(list, window, x, y) struct ListSupport *list; struct Window *window; SHORT x, y; { SHORT width, height; struct NewWindow *nw; width = (list->MaxChars-1)*OPEN_LINEHEIGHT + 6 + 45; height = list->MaxLines*OPEN_LINEHEIGHT + 12 + 14; if (!(nw = New(struct NewWindow, 1))) return(FALSE); Clone(&st_LRnw, nw); /* if (window && FlagIsSet(list->Flags, LR_AUTO_CENTER)) { x = window->LeftEdge + (window->Width - width)/2; y = 10 + window->TopEdge + (window->Height-11 - height)/2; } */ nw->LeftEdge = x; nw->TopEdge = y; nw->Width = width; nw->Height = height; /* nw->Screen = window? window->WScreen : IntuitionBase->FirstScreen; is_BindWindowToScreen(nw); */ list->LRWindow = (struct Window *)OpenWindow(nw); Delete(nw, 1); if (!list->LRWindow) return(FALSE); SetMenuStrip(list->LRWindow, &Menu1); SetAPen (list->LRWindow->RPort, WHITE); SetBPen (list->LRWindow->RPort, BLACK); SetAfPt (list->LRWindow->RPort, LR_Pattern, 3); RectFill(list->LRWindow->RPort, 0,0, list->LRWindow->Width-1, list->LRWindow->Height-1 ); SetAfPt (list->LRWindow->RPort, NULL, 0); if (FlagIsClear(list->Flags, LR_DRAG_BAR_OFF)) AddGadget(list->LRWindow, &list->LRGadget[OPENGADGET_DRAG], (USHORT) ~0); AddGList(list->LRWindow, &list->LRGadget[FILEIO_GADGETS-1], (USHORT) ~0, -1, 0); DrawBox(list->LRWindow->RPort, &list->LRBox[FILEIO_BOXES-1], 0,0); DrawBorder(list->LRWindow->RPort, &list->LRBorder[FILEIO_BORDERS-1], 0,0); DrawImage (list->LRWindow->RPort, &list->LRImage[FILEIO_IMAGES-1], 0,0); if (FlagIsClear(list->Flags, LR_GOOD_LISTNAMES)) ls_WarmStartFileIO(list); else { list->OpenClickSeconds = list->OpenClickMicros = 0; ls_InitOpenProp(list, TRUE); ls_StuffSelectNames(list, 2); } return(TRUE); } VOID ls_EndRequester(list) struct ListSupport *list; { if (!list) return; if (list->LRWindow) { while (FlagIsSet( list->LRWindow->Flags, WINDOWREFRESH )) Delay( 10 ); /* if intuition use it */ ModifyIDCMP( list->LRWindow, NULL ); RemoveGList(list->LRWindow, &list->LRGadget[FILEIO_GADGETS-1], -1); if (FlagIsClear(list->Flags, LR_DRAG_BAR_OFF)) RemoveGadget(list->LRWindow, &list->LRGadget[OPENGADGET_DRAG]); ClearMenuStrip(list->LRWindow); CloseWindow(list->LRWindow); list->LRWindow = NULL; } }