home *** CD-ROM | disk | FTP | other *** search
- /******************************** FindFile Window Management **********************
- FindFile window management routines
-
- 1.8
-
- **********************************************************************************/
- #include "FindFile.h"
-
- /* Export library bases */
-
- extern struct Library *IntuitionBase;
- extern struct Library *GadToolsBase;
- extern struct Library *CxBase;
- extern struct Library *IconBase;
-
- extern struct TextAttr DefaultFont;
- extern char *windowTitle;
-
- void
- OpenFFWindow( struct controlPanel *cp )
- {
- struct Screen *defScreen;
- WORD left,
- top;
-
-
-
- if( cp->ffWindow )
- {
- WindowToFront( cp->ffWindow );
- ActivateWindow( cp->ffWindow );
- return;
- }
-
- if( !( defScreen = (struct Screen *)LockPubScreen( NULL )))
- Shutdown( cp, 20 );
-
- if( !(cp->ffWinVi = GetVisualInfo( defScreen, TAG_DONE )))
- Shutdown( cp, 20 );
-
- CreateFFGadgets( cp, ( defScreen->WBorTop + defScreen->Font->ta_YSize+1 ),
- defScreen->WBorLeft );
-
- if( (cp->centerWindow) || cp->lastX == -1 || cp->lastY == -1 )
- CenterWindow( defScreen, &left, &top );
- else
- {
- left = cp->lastX;
- top = cp->lastY;
- }
-
- cp->ffWindow = OpenWindowTags( NULL, WA_Left , left,
- WA_Top, top,
- WA_InnerWidth, FF_WIDTH,
- WA_InnerHeight, FF_HEIGHT,
- WA_Activate, TRUE,
- WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET |
- WFLG_CLOSEGADGET |
- WFLG_SMART_REFRESH,
- WA_IDCMP, STRINGIDCMP|CYCLEIDCMP|
- BUTTONIDCMP|LISTVIEWIDCMP|
- IDCMP_CLOSEWINDOW|
- IDCMP_VANILLAKEY|
- IDCMP_REFRESHWINDOW|
- IDCMP_DISKINSERTED|
- IDCMP_DISKREMOVED,
- WA_PubScreen, defScreen,
- WA_Title, windowTitle,
- WA_Gadgets, cp->ffWinGadList,
- TAG_DONE );
-
- GT_RefreshWindow( cp->ffWindow, NULL );
-
- GT_SetGadgetAttrs( cp->ffWinGads[ID_FOUNDLIST],
- cp->ffWindow, NULL,
- GTLV_Labels, (&cp->foundList),
- GTLV_Selected, ~0L,
- TAG_DONE );
-
- UnlockPubScreen( NULL , defScreen );
-
- }
-
- void
- CloseFFWindow( struct controlPanel *cp )
- {
- int count;
-
- cp->lastX = cp->ffWindow->LeftEdge;
- cp->lastY = cp->ffWindow->TopEdge;
-
- CloseWindow( cp->ffWindow );
- cp->ffWindow = NULL;
-
- FreeVisualInfo( cp->ffWinVi );
- cp->ffWinVi = NULL;
-
- FreeGadgets( cp->ffWinGadList );
- cp->ffWinGadList = NULL;
-
- for( count = 0; count < ID_NUMGADS; count++ )
- cp->ffWinGads[ count ] = NULL;
-
- }
-
- void
- HandleFFWindowCommand( struct controlPanel *cp )
- {
- struct IntuiMessage *msg;
-
- while( msg = GT_GetIMsg( cp->ffWindow->UserPort ) )
- {
- struct Gadget *gad;
- ULONG class;
- UWORD code,
- qualifier;
-
- gad = (struct Gadget *)msg->IAddress;
- class = msg->Class;
- code = msg->Code;
- qualifier = msg->Qualifier;
-
- GT_ReplyIMsg( msg );
-
- switch( class )
- {
- case IDCMP_CLOSEWINDOW : CMD_Hide( cp );
- break;
-
- case IDCMP_VANILLAKEY : switch( code )
- {
- case '?' : DoFileReq( cp );
- GT_SetGadgetAttrs(cp->ffWinGads[ID_DEVGAD],
- cp->ffWindow, NULL,
- GTST_String, cp->searchPath,
- TAG_END );
- break;
- case 'p' :
- case 'P' : ActivateGadget(cp->ffWinGads[ID_PATGAD],
- cp->ffWindow, NULL );
- break;
-
- case 'D' :
- case 'd' : ActivateGadget(cp->ffWinGads[ID_DEVGAD],
- cp->ffWindow, NULL );
- break;
-
- case 'F' : if( cp->currFound != ~0 )
- cp->currFound = cp->currFound == 0 ?
- 0 :
- (--(cp->currFound)) % cp->numFound;
-
- GT_SetGadgetAttrs( cp->ffWinGads[ID_FOUNDLIST],
- cp->ffWindow, NULL,
- GTLV_Selected, cp->currFound,
- GTLV_Top, cp->currFound,
- TAG_END );
- break;
- case 'f' : if( cp->currFound == ~0 )
- cp->currFound = 0;
- else
- cp->currFound = cp->currFound == (cp->numFound-1) ?
- cp->currFound :
- (++cp->currFound) % cp->numFound;
-
- GT_SetGadgetAttrs( cp->ffWinGads[ID_FOUNDLIST],
- cp->ffWindow, NULL,
- GTLV_Selected, cp->currFound,
- GTLV_Top, cp->currFound,
- TAG_END );
- break;
- case 'h' :
- case 'H' : CMD_Hide( cp );
- break;
-
- case 's' :
- case 'S' : CMD_Search( cp );
- break;
-
- case 'q' :
- case 'Q' : CMD_Quit( cp );
- break;
-
- }
- break;
-
- case IDCMP_REFRESHWINDOW : GT_BeginRefresh(cp->ffWindow);
- GT_EndRefresh(cp->ffWindow,TRUE);
- break;
-
- case IDCMP_GADGETUP : switch( gad->GadgetID )
- {
- case ID_PATGAD : strncpy( cp->searchString ,
- ((struct StringInfo *)
- cp->ffWinGads[ID_PATGAD]
- ->SpecialInfo)->Buffer ,
- MAXSTR );
- break;
-
- case ID_DEVGAD : strncpy( cp->searchPath,
- ((struct StringInfo *)
- cp->ffWinGads[ID_DEVGAD]
- ->SpecialInfo)->Buffer,
- MAXSTR );
- break;
-
- case ID_FILEREQ: DBf("File Request on %s\n",cp->searchPath )
- DoFileReq( cp );
- GT_SetGadgetAttrs(cp->ffWinGads[ID_DEVGAD],
- cp->ffWindow, NULL,
- GTST_String, cp->searchPath,
- TAG_END );
- DBf("File request returned %s\n",cp->searchPath )
- break;
-
- case ID_SEARCH : CMD_Search( cp );
- break;
-
- case ID_HIDE : CMD_Hide( cp );
- break;
-
- case ID_QUIT : CMD_Quit( cp );
- break;
-
- }
- break;
- }
- if( ! cp->ffWindow )
- break;
- }
- }
-
- void
- CreateFFGadgets( struct controlPanel *cp, int topEdge , BYTE leftEdge)
- {
- struct Gadget *gadget;
- struct NewGadget ng;
-
-
-
- cp->ffWinGadList = NULL;
-
- if( ! ( gadget = CreateContext( &(cp->ffWinGadList) ) ) )
- Shutdown( cp , 20 );
-
- ng.ng_Width = 312;
- ng.ng_Height = 16;
- ng.ng_GadgetText = "Search _Pattern :";
- ng.ng_TextAttr = &DefaultFont;
- ng.ng_VisualInfo = cp->ffWinVi;
- ng.ng_GadgetID = ID_PATGAD;
- ng.ng_Flags = 0;
- ng.ng_LeftEdge = ( strlen( ng.ng_GadgetText ) + 2 - 1 ) * 8 - 2 + leftEdge;
- ng.ng_TopEdge = 5 + topEdge;
-
- cp->ffWinGads[ID_PATGAD] = gadget = CreateGadget( STRING_KIND, gadget, &ng,
- GT_Underscore, '_',
- GTST_MaxChars, MAXSTR,
- GTST_String, cp->searchString,
- TAG_DONE );
-
- ng.ng_GadgetID = ID_DEVGAD;
- ng.ng_GadgetText = "_Device to Search :";
- ng.ng_TopEdge += ng.ng_Height + INTERHEIGHT;
- ng.ng_LeftEdge = ( strlen( ng.ng_GadgetText ) + 2 - 1 ) * 8 - 2 + leftEdge;
- ng.ng_Width = 275;
- ng.ng_Height = 18;
-
-
- cp->ffWinGads[ID_DEVGAD] = gadget = CreateGadget( STRING_KIND, gadget, &ng,
- GT_Underscore, '_',
- GTST_MaxChars, MAXSTR,
- GTST_String, cp->searchPath,
- TAG_DONE );
-
-
- ng.ng_GadgetID = ID_FILEREQ;
- ng.ng_GadgetText = "_?";
- ng.ng_LeftEdge = ng.ng_LeftEdge + ng.ng_Width;
- ng.ng_Width = 20;
-
-
- cp->ffWinGads[ID_FILEREQ] = gadget = CreateGadget( BUTTON_KIND, gadget, &ng,
- GT_Underscore, '_',
- TAG_DONE );
-
- ng.ng_GadgetID = ID_FOUNDLIST;
- ng.ng_GadgetText = "_Files Found :";
- ng.ng_TopEdge += ng.ng_Height + 16;
- ng.ng_LeftEdge = leftEdge + 5;
- ng.ng_Width = 448;
- ng.ng_Height = 76;
-
- cp->ffWinGads[ID_FOUNDLIST] = gadget = CreateGadget( LISTVIEW_KIND, gadget, &ng,
- GTLV_ShowSelected, NULL,
- GT_Underscore, '_',
- TAG_DONE );
-
- ng.ng_GadgetID = ID_SEARCH;
- ng.ng_GadgetText = "_Search";
- ng.ng_LeftEdge = leftEdge + 5L;
- ng.ng_TopEdge += ng.ng_Height + 4;
- ng.ng_Width = 106;
- ng.ng_Height = 20;
-
- cp->ffWinGads[ID_SEARCH] = gadget = CreateGadget( BUTTON_KIND, gadget, &ng,
- GT_Underscore, '_',
- TAG_DONE );
- ng.ng_GadgetID = ID_ABORT;
- ng.ng_GadgetText = "_Abort";
- ng.ng_LeftEdge += ng.ng_Width + INTERWIDTH;
-
- cp->ffWinGads[ID_ABORT] = gadget = CreateGadget( BUTTON_KIND, gadget, &ng,
- GT_Underscore, '_',
- GA_Disabled, TRUE,
- TAG_DONE );
- ng.ng_GadgetID = ID_HIDE;
- ng.ng_GadgetText = "_Hide";
- ng.ng_LeftEdge += ng.ng_Width + INTERWIDTH;
-
- cp->ffWinGads[ID_HIDE] = gadget = CreateGadget( BUTTON_KIND, gadget, &ng,
- GT_Underscore, '_',
- TAG_DONE );
-
- ng.ng_GadgetID = ID_QUIT;
- ng.ng_GadgetText = "_Quit";
- ng.ng_LeftEdge += ng.ng_Width + INTERWIDTH;
-
- cp->ffWinGads[ID_QUIT] = gadget = CreateGadget( BUTTON_KIND, gadget, &ng,
- GT_Underscore, '_',
- TAG_DONE );
-
- }
-
- void
- CenterWindow( struct Screen *sc, WORD *leftEdge, WORD *topEdge )
- {
- (*leftEdge) = sc->MouseX - (FF_WIDTH >> 1);
- (*topEdge) = sc->MouseY - (FF_HEIGHT >> 1);
-
- while((*leftEdge) + FF_WIDTH > sc->Width)
- (*leftEdge)--;
-
- while((*leftEdge) < 0)
- (*leftEdge)++;
-
- while((*topEdge) + FF_HEIGHT > sc->Height)
- (*topEdge)--;
-
- while((*topEdge) < 0)
- (*topEdge)++;
- }
-