diff --git a/diskbrowser.c b/diskbrowser.c index 802fcfd..1a071ef 100644 --- a/diskbrowser.c +++ b/diskbrowser.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -21,6 +22,19 @@ char finderRequestName[] = "\pApple~Finder~"; #define winDiskBrowser 1001 +#define searchLine 1002 +#define searchButton 1003 +#define findDisksForText 1004 +#define forIIGSRadio 1005 +#define forAnyAppleIIRadio 1006 +#define disksList 1007 +#define previousPageButton 1008 +#define pageText 1009 +#define pageNumberLine 1010 +#define ofPagesText 1011 +#define nextPageButton 1012 +#define mountDiskButton 1013 + Word resourceFileID; /* ID of our menu item in the Finder (or 0 if we're not active) */ @@ -88,11 +102,66 @@ void CloseBrowserWindow(void) { } #pragma databank 0 +boolean DoLEEdit (int editAction) { + CtlRecHndl ctl; /* target control handle */ + unsigned long id; /* control ID */ + GrafPortPtr port; /* caller's GrafPort */ + + port = GetPort(); + SetPort(window); + ctl = FindTargetCtl(); + id = GetCtlID(ctl); + if ((id == searchLine) || (id == pageNumberLine)) { + LEFromScrap(); + switch (editAction) { + case cutAction: + LECut((LERecHndl) GetCtlTitle(ctl)); + LEToScrap(); + break; + case copyAction: + LECopy((LERecHndl) GetCtlTitle(ctl)); + LEToScrap(); + break; + case pasteAction: + LEPaste((LERecHndl) GetCtlTitle(ctl)); + break; + case clearAction: + LEDelete((LERecHndl) GetCtlTitle(ctl)); + break; + }; + }; + SetPort(port); + return ((id == searchLine) || (id == pageNumberLine)); +} + +/* Handle an event after TaskMasterDA processing */ +void HandleEvent(int eventCode, WmTaskRec *taskRec) { + switch (eventCode) { + case keyDownEvt: + case autoKeyEvt: + /* Handle keyboard shortcuts for cut/copy/paste */ + if (taskRec->modifiers & appleKey) { + switch (taskRec->message & 0x000000FF) { + case 'x': case 'X': + DoLEEdit(cutAction); + break; + case 'c': case 'C': + DoLEEdit(copyAction); + break; + case 'v': case 'V': + DoLEEdit(pasteAction); + break; + } + } + break; + } +} + /* NDA-style action routine for our window */ #pragma databank 1 int ActionProc(EventRecord *eventRec, int actionCode) { static WmTaskRec taskRec; - int handledEvent = 0; + int handledAction = 0; switch (actionCode) { case eventAction: @@ -101,23 +170,23 @@ int ActionProc(EventRecord *eventRec, int actionCode) { memmove(&taskRec, eventRec, 16); taskRec.wmTaskMask = 0x1F7FFF; /* everything except tmInfo */ - TaskMasterDA(0, &taskRec); + HandleEvent(TaskMasterDA(0, &taskRec), &taskRec); break; case cursorAction: break; - case cutAction: // TODO - break; + case cutAction: case copyAction: - break; case pasteAction: - break; case clearAction: + if (windowOpened) { + handledAction = DoLEEdit(actionCode); + } break; } - return handledEvent; + return handledAction; } #pragma databank 0 diff --git a/diskbrowser.rez b/diskbrowser.rez index 5ca85ab..0154ac1 100644 --- a/diskbrowser.rez +++ b/diskbrowser.rez @@ -144,7 +144,7 @@ resource rControlTemplate (previousPageButton) { {150, 10, 161, 34}, SimpleButtonControl {{ 0, - $3000+RefIsResource, + $1000+RefIsResource, 0, previousPageButton, 0, /* color table ref */ @@ -176,12 +176,12 @@ resource rControlTemplate (pageNumberLine) { 0, $7000+RefIsResource, 0, - 255, /* max size */ + 4, /* max size */ pageNumberLine /* text ref */ }}; }; -resource rPString (pageNumberLine) { "1000" }; +resource rPString (pageNumberLine) { "" }; resource rControlTemplate (ofPagesText) { ofPagesText, /* control ID */ @@ -195,7 +195,7 @@ resource rControlTemplate (ofPagesText) { }; resource rTextForLETextBox2 (ofPagesText) { - "/ 1000" + "" }; resource rControlTemplate (nextPageButton) { @@ -203,7 +203,7 @@ resource rControlTemplate (nextPageButton) { {150, 168, 161, 192}, SimpleButtonControl {{ 0, - $3000+RefIsResource, + $1000+RefIsResource, 0, nextPageButton, 0, /* color table ref */ @@ -217,8 +217,8 @@ resource rControlTemplate (mountDiskButton) { mountDiskButton, {152, 305, 0, 0}, SimpleButtonControl {{ - DefaultButton, - $3000+RefIsResource, + 0, + $1000+RefIsResource, 0, mountDiskButton, 0, /* color table ref */