📄 hello.c
字号:
#include <Pilot.h>
#include "hello.h"
// #include "Callback.h"
#define kNumTextColumns 3
#define kNumRows 8
VoidHand gHandles[kNumTextColumns][kNumRows];
static Boolean StartApplication(void)
{
int i;
int j;
for (i=0;i<kNumTextColumns;i++)
{
for (j=0;j<kNumRows;j++)
{
CharPtr s;
gHandles[i][j]=MemHandleNew(1);
if (!gHandles[i][j])
return false;
s=MemHandleLock(gHandles[i][j]);
*s='\0';
MemHandleUnlock(gHandles[i][j]);
}
}
FrmGotoForm(formID_hello);
return true;
}
static int WhichTextColumn(int column)
{
if (column==0)
return 0;
else if (column==5)
return 1;
else // column==7
return 2;
}
static Err CustomLoadItem(VoidPtr table, Word row, Word column,
Boolean editable, VoidHand *dataH, WordPtr dataOffset,
WordPtr dataSize, FieldPtr fld)
{
// #ifdef __GNUC__
// CALLBACK_PROLOGUE
// #endif
*dataH=gHandles[WhichTextColumn(column)][row];
*dataOffset=0;
*dataSize=MemHandleSize(*dataH);
// #ifdef __GNUC__
// CALLBACK_EPILOGUE
// #endif
return 0;
}
static Boolean CustomSaveItem(VoidPtr table, Word row, Word column)
{
int textColumn;
Boolean result=false;
textColumn=WhichTextColumn(column);
// the handle that we provided in CustomLoadItem has been modified
// We could edit that (if we wanted).
// If it's been edited, let's make the first row
// convert to lower-case and redraw
if ( row==0 && textColumn==1 )
{
FieldPtr field=TblGetCurrentField(table);
if (field && FldDirty(field))
{
VoidHand h=gHandles[textColumn][row];
CharPtr s;
int i;
s = MemHandleLock(h);
for (i=0;s[i]!='\0';i++)
if (s[i]>='A' && s[i]<='Z')
s[i]+='a'-'A';
MemHandleUnlock(h);
TblMarkRowInvalid(table, row);
result=true;
}
}
return result; // should the table be redrawn
}
// draws either \,|,/,or -
static void CustomDrawItem(VoidPtr table, Word row, Word column,
RectanglePtr bounds)
{
UInt fromx, fromy, tox, toy ;
switch (TblGetItemInt(table, row, column))
{
case 0:
fromx=bounds->topLeft.x;
fromy=bounds->topLeft.y;
tox=fromx+bounds->extent.x;
toy=fromy+bounds->extent.y;
break;
case 1:
fromx=bounds->topLeft.x + bounds->extent.x / 2 ;
fromy=bounds->topLeft.y;
tox=fromx;
toy=fromy+bounds->extent.y;
break;
case 2:
fromx=bounds->topLeft.x+bounds->extent.x;
fromy=bounds->topLeft.y;
tox=bounds->topLeft.x;
toy=fromy+bounds->extent.y;
break;
case 3:
fromx=bounds->topLeft.x;
fromy=bounds->topLeft.y+bounds->extent.y / 2;
tox=fromx+bounds->extent.x;
toy=fromy;
break;
default:
fromx=tox=bounds->topLeft.x;
fromy=toy=bounds->topLeft.y;
break;
}
WinDrawLine(fromx, fromy, tox, toy);
}
void MainViewInit(void)
{
FormPtr frm;
TablePtr tableP;
UInt numRows;
UInt kNumColumns=9;
UInt i;
static char * labels[]={"0","1","2","3","4","5","6","7"};
DateType dates[10];
ListPtr list;
// we'll have a missing date, and then some dates before and
// after the current date
* ((IntPtr) &dates[0])=noTime;
for (i=1;i<sizeof(dates)/sizeof(*dates);i++)
{
dates[i].year=1994+i-1904; // offset from 1904
dates[i].month=8;
dates[i].day=29;
}
// Get a pointer to the main form.
frm=FrmGetActiveForm();
tableP=FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,cmdTable));
list=FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,cmdList));
numRows=TblGetNumberOfRows(tableP);
for (i=0;i<numRows;i++)
{
TblSetItemStyle(tableP , i , 0 , textWithNoteTableItem);
TblSetItemStyle(tableP , i , 1 , numericTableItem);
TblSetItemInt(tableP , i , 1 , i );
TblSetItemStyle(tableP , i , 2 , checkboxTableItem);
TblSetItemInt(tableP , i , 2 , i % 2 );
TblSetItemStyle(tableP , i , 3 , labelTableItem);
TblSetItemPtr(tableP , i , 3 , labels[i] );
TblSetItemStyle(tableP , i , 4 , dateTableItem);
TblSetItemInt(tableP , i , 4 , DateToInt(dates[i]) );
TblSetItemStyle(tableP , i , 5 , textTableItem);
TblSetItemStyle(tableP , i , 6 , popupTriggerTableItem);
TblSetItemInt(tableP , i , 6 , i % 5 );
TblSetItemPtr(tableP , i , 6 , list );
TblSetItemStyle(tableP , i , 7 , narrowTextTableItem);
TblSetItemInt(tableP , i , 7 , i * 2 );
TblSetItemStyle(tableP , i , 8 , customTableItem);
TblSetItemInt(tableP , i , 8 , i % 4 );
}
TblSetRowUsable(tableP, 0, false); // just to see what happens
for (i=0;i<kNumColumns;i++)
TblSetColumnUsable(tableP, i, true);
//TblSetLoadDataProcedure(tableP, 0, CustomLoadItem);
// TblSetLoadDataProcedure(tableP, 5, CustomLoadItem);
// TblSetSaveDataProcedure(tableP, 5, CustomSaveItem);
// TblSetLoadDataProcedure(tableP, 7, CustomLoadItem);
TblSetCustomDrawProcedure(tableP, 8, CustomDrawItem);
// Draw the form.
FrmDrawForm(frm);
}
static Boolean HelloFormEventHandler(EventPtr event)
{
Boolean handled = false;
switch (event->eType) {
case ctlSelectEvent:
FrmCustomAlert(cmdButton, "aa", "bb", NULL);
handled=true;
break;
case frmOpenEvent:
MainViewInit();
FrmDrawForm(FrmGetActiveForm());
handled = true;
break;
case menuEvent:
if(event->data.menu.itemID==cmdMenu_1)
SndPlaySystemSound(sndInfo);
else
SndPlaySystemSound(sndStartUp);
handled=true;
break;
case tblSelectEvent:
// handle successful tap on a cell
// for a checkbox or popup, tblExitEvent will be
// called instead of tblSelectEvent
// if the user cancels the control
break;
case tblEnterEvent:
{
UInt row=event->data.tblEnter.row;
UInt column=event->data.tblEnter.column;
if (column==8)
{
TablePtr table=event->data.tblEnter.pTable;
int oldValue=TblGetItemInt(table, row, column);
TblSetItemInt(table, row, column, (oldValue+1)%4);
TblMarkRowInvalid(table, row);
TblRedrawTable(table);
handled=true;
}
}
break;
}
return (handled);
}
static Boolean ApplicationHandleEvent(EventPtr event)
{
FormPtr form;
Word formID;
Boolean handled = false;
if (event->eType == frmLoadEvent) {
formID = event->data.frmLoad.formID;
form = FrmInitForm(formID);
FrmSetActiveForm(form);
switch (formID) {
case formID_hello:
// MainViewInit();
FrmSetEventHandler(form, HelloFormEventHandler);
break;
}
handled = true;
}
return (handled);
}
// static void StartApplication()
// {
// FrmGotoForm(formID_hello);
// }
static void EventLoop(void)
{
short err;
int formID;
FormPtr form;
EventType event;
do {
EvtGetEvent(&event, evtWaitForever);
if (SysHandleEvent(&event)) continue;
if (MenuHandleEvent(NULL, &event, &err)) continue;
if (ApplicationHandleEvent(&event)) continue;
FrmDispatchEvent(&event);
} while (event.eType != appStopEvent);
}
static void StopApplication(void)
{
FrmCloseAllForms();
}
DWord PilotMain (Word cmd, Ptr cmdPBP, Word launchFlags)
{
if (cmd == sysAppLaunchCmdNormalLaunch) {
StartApplication();
EventLoop();
StopApplication();
}
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -