Cut/copy/paste support and small tweaks to controls.

This commit is contained in:
Stephen Heumann 2019-04-11 00:50:38 -05:00
parent 5a7e0de0d1
commit f862c2bef8
2 changed files with 83 additions and 14 deletions

View File

@ -8,6 +8,7 @@
#include <misctool.h>
#include <memory.h>
#include <control.h>
#include <lineedit.h>
#include <desk.h>
#include <gsos.h>
#include <orca.h>
@ -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

View File

@ -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 */