From cb73ab7d07b435b28ced0ec639ddfecc839a0d4a Mon Sep 17 00:00:00 2001 From: Wei-ju Wu Date: Tue, 12 Jan 2016 23:06:47 -0800 Subject: [PATCH] filerequester is opened in its own window --- requesters/.gitignore | 1 + requesters/filereq.c | 139 +++++++++++++++++++++++++++++++----------- requesters/filereq.h | 2 +- requesters/main | Bin 11320 -> 0 bytes requesters/main.c | 37 ++++------- 5 files changed, 118 insertions(+), 61 deletions(-) create mode 100644 requesters/.gitignore delete mode 100755 requesters/main diff --git a/requesters/.gitignore b/requesters/.gitignore new file mode 100644 index 0000000..ba2906d --- /dev/null +++ b/requesters/.gitignore @@ -0,0 +1 @@ +main diff --git a/requesters/filereq.c b/requesters/filereq.c index 74815eb..cd02e30 100644 --- a/requesters/filereq.c +++ b/requesters/filereq.c @@ -1,17 +1,18 @@ #include + +#include #include #include - #include #include "filereq.h" #define REQ_TEXT_XOFFSET 10 #define REQ_WIDTH 240 -#define REQ_HEIGHT 170 +#define REQ_HEIGHT 175 #define TOPAZ_BASELINE 8 -#define BUTTON_Y 140 +#define BUTTON_Y 135 #define BUTTON_HEIGHT 18 #define BUTTON_TEXT_XOFFSET 14 @@ -24,39 +25,53 @@ #define STR_GADGET_Y 120 #define PATH_GADGET_WIDTH 100 +static struct Requester requester; +static BOOL req_opened = FALSE; +static struct Window *req_window; -struct Requester requester; -struct IntuiText labels[] = { +static struct IntuiText labels[] = { {1, 0, JAM2, REQ_TEXT_XOFFSET, STR_GADGET_Y, NULL, "Enter file path", NULL}, {1, 0, JAM2, 10, TOPAZ_BASELINE - 4, NULL, "Ok", NULL}, {1, 0, JAM2, 10, TOPAZ_BASELINE - 4, NULL, "Cancel", NULL} /* TOPAZ_BASELINE is 8 */ }; -WORD gadget_border_points[3][10] = { + +static WORD gadget_border_points[3][10] = { {0, 0, OK_BUTTON_WIDTH, 0, OK_BUTTON_WIDTH, BUTTON_HEIGHT, 0, BUTTON_HEIGHT, 0, 0}, {0, 0, CANCEL_BUTTON_WIDTH, 0, CANCEL_BUTTON_WIDTH, BUTTON_HEIGHT, 0, BUTTON_HEIGHT, 0, 0}, /* the -2 is the margin to set to avoid that the string gadget will overdraw the borders */ {-2, -2, PATH_GADGET_WIDTH, -2, PATH_GADGET_WIDTH, 10, -2, 10, -2, -2} }; -struct Border gadget_borders[] = { + +static struct Border gadget_borders[] = { {0, 0, 1, 0, JAM1, 5, gadget_border_points[0], NULL}, {0, 0, 1, 0, JAM1, 5, gadget_border_points[1], NULL}, {0, 0, 1, 0, JAM1, 5, gadget_border_points[2], NULL} }; -WORD req_border_points[] = { - 0, 0, REQ_WIDTH - 1, 0, REQ_WIDTH - 1, REQ_HEIGHT - 1, 0, REQ_HEIGHT - 1, 0, 0 -}; -struct Border req_border = {0, 0, 1, 0, JAM1, 5, req_border_points, NULL}; +static UBYTE buffer[81], undobuffer[81]; +static struct StringInfo strinfo = {buffer, undobuffer, 0, 80, 0, 0, 0, 0, 0, 0, NULL, 0, NULL}; -UBYTE buffer[81], undobuffer[81]; -struct StringInfo strinfo = {buffer, undobuffer, 0, 80, 0, 0, 0, 0, 0, 0, NULL, 0, NULL}; +#define REQWIN_WIDTH 260 +#define REQWIN_HEIGHT 180 +#define WIN_TITLE "Open File..." + +static struct NewWindow newwin = { + 0, 0, REQWIN_WIDTH, REQWIN_HEIGHT, 0, 1, + IDCMP_CLOSEWINDOW | IDCMP_GADGETUP, + WFLG_CLOSEGADGET | WFLG_SMART_REFRESH | WFLG_ACTIVATE | WFLG_DRAGBAR | WFLG_DEPTHGADGET, + NULL, NULL, WIN_TITLE, + NULL, NULL, + REQWIN_WIDTH, REQWIN_HEIGHT, + REQWIN_WIDTH, REQWIN_HEIGHT, + WBENCHSCREEN +}; /* Note: Cancel does not specify the GACT_ENDGADGET flag, it seems that IDCMP_REQCLEAR is not fired when Intuition closes the requester automatically */ -struct Gadget gadgets[] = { +static struct Gadget gadgets[] = { {&gadgets[1], OK_BUTTON_X, BUTTON_Y, OK_BUTTON_WIDTH, BUTTON_HEIGHT, GFLG_GADGHCOMP, GACT_RELVERIFY, GTYP_BOOLGADGET | GTYP_REQGADGET, &gadget_borders[0], NULL, &labels[1], 0, NULL, REQ_OK_BUTTON_ID, NULL}, @@ -68,14 +83,13 @@ struct Gadget gadgets[] = { &labels[3], 0, &strinfo, 103, NULL}, }; -BOOL initialized = 0; #define PATHBUFFER_SIZE 200 -char dirname[PATHBUFFER_SIZE + 1]; -BPTR flock; -LONG error; -struct FileInfoBlock fileinfo; +static char dirname[PATHBUFFER_SIZE + 1]; +static BPTR flock; +static LONG error; +static struct FileInfoBlock fileinfo; -void print_fileinfo(struct FileInfoBlock *fileinfo) +static void print_fileinfo(struct FileInfoBlock *fileinfo) { if (fileinfo->fib_DirEntryType > 0) { printf("dir: '%s'\n", fileinfo->fib_FileName); @@ -84,10 +98,56 @@ void print_fileinfo(struct FileInfoBlock *fileinfo) } } -struct Requester *open_file(struct Window *window) +static void close_requester() +{ + puts("close_requester()"); + if (req_opened) { + puts("EndRequest()"); + EndRequest(&requester, req_window); + req_opened = FALSE; + } +} + +static void handle_events() +{ + BOOL done = FALSE; + struct IntuiMessage *msg; + ULONG msgClass; + UWORD menuCode; + int buttonId; + + while (!done) { + Wait(1 << req_window->UserPort->mp_SigBit); + if (msg = (struct IntuiMessage *) GetMsg(req_window->UserPort)) { + msgClass = msg->Class; + switch (msgClass) { + case IDCMP_CLOSEWINDOW: + close_requester(); + done = TRUE; + break; + case IDCMP_GADGETUP: + buttonId = (int) ((struct Gadget *) (msg->IAddress))->GadgetID; + if (buttonId == REQ_OK_BUTTON_ID) { + close_requester(); + done = TRUE; + } + else if (buttonId == REQ_CANCEL_BUTTON_ID) { + close_requester(); + done = TRUE; + } + break; + default: + break; + } + ReplyMsg((struct Message *) msg); + } + } +} + +void open_file(struct Window *window) { BOOL result; - if (!initialized) { + if (req_window = OpenWindow(&newwin)) { InitRequester(&requester); requester.LeftEdge = 20; requester.TopEdge = 20; @@ -96,7 +156,7 @@ struct Requester *open_file(struct Window *window) requester.Flags = 0; requester.BackFill = 0; requester.ReqGadget = &gadgets[0]; - requester.ReqBorder = &req_border; + requester.ReqBorder = NULL; // &req_border; requester.ReqText = &labels[0]; /* scan current directory */ @@ -105,27 +165,34 @@ struct Requester *open_file(struct Window *window) function GetCurrentDirName() does not exist, but it's obtainable by calling Cli() and querying the returned CommandLineInterface structure - */ - puts("scanning directory..."); + */ + //puts("scanning directory..."); /* // on AmigaOS 1.x, this function does not exist !!! GetCurrentDirName(dirname, PATHBUFFER_SIZE); printf("current dir: '%s'\n", dirname); flock = Lock(dirname, SHARED_LOCK); if (Examine(flock, &fileinfo)) { - while (ExNext(flock, &fileinfo)) { - print_fileinfo(&fileinfo); - } - error = IoErr(); - if (error != ERROR_NO_MORE_ENTRIES) { - puts("unknown I/O error, TODO handle"); - } + while (ExNext(flock, &fileinfo)) { + print_fileinfo(&fileinfo); + } + error = IoErr(); + if (error != ERROR_NO_MORE_ENTRIES) { + puts("unknown I/O error, TODO handle"); + } } UnLock(flock); */ - - initialized = 1; + if (req_opened = Request(&requester, req_window)) { + puts("handle requester events..."); + handle_events(); + puts("quit handling requester events"); + CloseWindow(req_window); + req_window = NULL; + } else { + puts("Request() failed !!!"); + } + } else { + puts("OpenWindow() failed !!!"); } - result = Request(&requester, window); - return result ? &requester : NULL; } diff --git a/requesters/filereq.h b/requesters/filereq.h index 8e7a28e..4cdb0a1 100644 --- a/requesters/filereq.h +++ b/requesters/filereq.h @@ -2,7 +2,7 @@ #ifndef __FILEREQ_H__ #define __FILEREQ_H__ -extern struct Requester *open_file(struct Window *window); +extern void open_file(struct Window *window); #define REQ_OK_BUTTON_ID 101 #define REQ_CANCEL_BUTTON_ID 102 diff --git a/requesters/main b/requesters/main deleted file mode 100755 index fe9fcf7a6eefc11e5df8645dc177ded13222888d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11320 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 MIE~AQjIsFt0o~S~(f|Me diff --git a/requesters/main.c b/requesters/main.c index e3c4ea9..de30ea5 100644 --- a/requesters/main.c +++ b/requesters/main.c @@ -46,10 +46,10 @@ #define OPEN_MENU_ITEM_NUM 0 #define QUIT_MENU_ITEM_NUM 1 -struct NewWindow newwin = { +static struct NewWindow newwin = { WIN_LEFT, WIN_TOP, WIN_WIDTH, WIN_HEIGHT, 0, 1, IDCMP_CLOSEWINDOW | IDCMP_MENUPICK | IDCMP_GADGETUP | IDCMP_REQCLEAR, - WINDOWCLOSE | SMART_REFRESH | ACTIVATE | WINDOWSIZING | WINDOWDRAG | WINDOWDEPTH | NOCAREREFRESH, + WINDOWCLOSE | SMART_REFRESH | ACTIVATE | WINDOWSIZING | WINDOWDRAG | WINDOWDEPTH, NULL, NULL, WIN_TITLE, NULL, NULL, WIN_MIN_WIDTH, WIN_MIN_HEIGHT, @@ -57,25 +57,25 @@ struct NewWindow newwin = { WBENCHSCREEN }; -struct IntuiText menutext[] = { +static struct IntuiText menutext[] = { {0, 1, JAM2, 0, 1, NULL, "Open...", NULL}, {0, 1, JAM2, 0, 1, NULL, "Quit", NULL} }; -struct MenuItem fileMenuItems[] = { +static struct MenuItem fileMenuItems[] = { {&fileMenuItems[1], 0, 0, 0, 0, ITEMTEXT | ITEMENABLED | HIGHCOMP | COMMSEQ, 0, &menutext[0], NULL, 'O', NULL, 0}, {NULL, 0, 0, 0, 0, ITEMTEXT | ITEMENABLED | HIGHCOMP | COMMSEQ, 0, &menutext[1], NULL, 'Q', NULL, 0} }; -struct Menu menus[] = { +static struct Menu menus[] = { {NULL, 20, 0, 0, 0, MENUENABLED | MIDRAWN, "File", &fileMenuItems[0], 0, 0, 0, 0} }; -struct Window *window; +static struct Window *window; -void cleanup() +static void cleanup() { if (window) { ClearMenuStrip(window); @@ -83,9 +83,7 @@ void cleanup() } } -struct Requester *filereq; - -BOOL handle_menu(UWORD menuNum, UWORD itemNum, UWORD subItemNum) +static BOOL handle_menu(UWORD menuNum, UWORD itemNum, UWORD subItemNum) { printf("menu, menu num: %d, item num: %d, sub item num: %d\n", (int) menuNum, (int) itemNum, (int) subItemNum); @@ -94,12 +92,12 @@ BOOL handle_menu(UWORD menuNum, UWORD itemNum, UWORD subItemNum) return TRUE; } if (menuNum == FILE_MENU_NUM && itemNum == OPEN_MENU_ITEM_NUM) { - filereq = open_file(window); + open_file(window); } return FALSE; } -void handle_events() +static void handle_events() { BOOL done = FALSE; struct IntuiMessage *msg; @@ -108,6 +106,7 @@ void handle_events() int buttonId; while (!done) { + puts("main, wait..."); Wait(1 << window->UserPort->mp_SigBit); if (msg = (struct IntuiMessage *) GetMsg(window->UserPort)) { msgClass = msg->Class; @@ -119,14 +118,6 @@ void handle_events() menuCode = msg->Code; done = handle_menu(MENUNUM(menuCode), ITEMNUM(menuCode), SUBNUM(menuCode)); break; - case IDCMP_GADGETUP: - buttonId = (int) ((struct Gadget *) (msg->IAddress))->GadgetID; - if (buttonId == REQ_OK_BUTTON_ID && filereq) EndRequest(filereq, window); - else if (buttonId == REQ_CANCEL_BUTTON_ID && filereq) EndRequest(filereq, window); - break; - case IDCMP_REQCLEAR: - puts("requester closed"); - break; default: break; } @@ -135,7 +126,7 @@ void handle_events() } } -void setup_menu() +static void setup_menu() { UWORD txWidth, txHeight, txBaseline, txSpacing, itemWidth, itemHeight, numItems; struct RastPort *rp = &window->WScreen->RastPort; @@ -164,7 +155,6 @@ void setup_menu() fileMenuItems[i].Height = itemHeight; fileMenuItems[i].Width = itemWidth; } - SetMenuStrip(window, &menus[0]); } @@ -180,10 +170,9 @@ int main(int argc, char **argv) /* Adjust the new screen according to the IFF image */ if (window = OpenWindow(&newwin)) { setup_menu(); - // Note: rastport is the entire window, including title bars - //DrawImage(window->RPort, &image, 2, 10); handle_events(); } + puts("main cleanup"); cleanup(); return 1; }