home *** CD-ROM | disk | FTP | other *** search
- /* Interfac.c
- **
- ** Copyright 1995, mFactory, Inc.
- ** All rights reserved.
- */
-
- #include "Interfac.h"
-
- #define kActivatePopup 14 // DITL indices
- #define kSoundPopup 16
- #define kScenePopup 18
-
- #define kStaticPopup 20
- #define kDynamicPopup 22
- #define kSubmenuPopup 24
-
- #define kBeepButton 25
- #define kIconButton 26
-
- #define kYesRadioButton 27
- #define kNoRadioButton 28
- #define kMaybeRadioButton 29
-
- #define kShowCheckbox 30
- #define kPlayCheckbox 31
- #define kBackwardCheckbox 32
-
- #define kIntegerField 34
- #define kDoubleField 36
- #define kTimeField 38
- #define kStringField 40
-
- #define kTextBlock 41
-
- #define kYes 0 // radio button values
- #define kNo 1
- #define kMaybe 2
-
- #define kStrMaxLen 256 // maximum string length
-
- const kTimePeriod = 10; // milliseconds
-
-
- /* Initial entry point
- */
-
- MCompMainFuncDcl MCompMainName(MInitInfo *initInfo)
- {
- MDefineComponent(InterfacComp, kMCanDragOff);
- MInheritClass(MComponent, kMCompNumProcs, kMBaseCompSlot);
-
- // MComponent methods we must override
-
- MDefineMethod(kInterfacSlot, kMBaseCompSlot, kMCompConstructor, MCompConstructor);
- MDefineMethod(kInterfacSlot, kMBaseCompSlot, kMCompCopy, MCompCopy);
- MDefineMethod(kInterfacSlot, kMBaseCompSlot, kMCompCopyConstructor, MCompCopyConstructor);
- MDefineMethod(kInterfacSlot, kMBaseCompSlot, kMCompDestructor, MCompDestructor);
-
- // MComponent methods we choose to override
-
- MDefineMethod(kInterfacSlot, kMBaseCompSlot, kMCompEditorOpen, MCompEditorOpen);
- MDefineMethod(kInterfacSlot, kMBaseCompSlot, kMCompEditorItemChanged, MCompEditorItemChanged);
- MDefineMethod(kInterfacSlot, kMBaseCompSlot, kMCompEditorAccept, MCompEditorAccept);
- MDefineMethod(kInterfacSlot, kMBaseCompSlot, kMCompEditorDecline, MCompEditorDecline);
-
- MDefineMethod(kInterfacSlot, kMBaseCompSlot, kMCompGetSaveInfo, MCompGetSaveInfo);
- MDefineMethod(kInterfacSlot, kMBaseCompSlot, kMCompSaveComponent, MCompSaveComponent);
- MDefineMethod(kInterfacSlot, kMBaseCompSlot, kMCompRestoreComponent, MCompRestoreComponent);
-
- MConnectCommonServices(initInfo);
-
- MEndComponentDef;
- }
-
-
- /* Initialize component
- */
-
- static MErr MCompConstructor(InterfacComp *self, MObjectRef *mRef)
- {
- MInitEvent(self->f_activate, kMMouseDown, 0);
- MInitSymbol(self->f_sound, -1,0);
- MInitIDPath(self->f_scene, 3, self->f_sceneIDs);
- self->f_sceneIDs[0] = self->f_sceneIDs[1] = self->f_sceneIDs[2] = 0;
-
- MInitSymbol(self->f_static, 1, 0);
- MInitSymbol(self->f_dynamic, 1, 0);
- MInitSymbol(self->f_submenu, 11, 0);
-
- MInitInteger(self->f_yesNoMaybe, kYes);
-
- MInitBoolean(self->f_show, false);
- MInitBoolean(self->f_play, false);
- MInitBoolean(self->f_backward, false);
-
- MInitInteger(self->f_integer, 0);
- MInitDouble(self->f_double, 0.0);
- MInitTime(self->f_time, 0, 1, 600);
- MInitSizedString(self->f_string, kStrMaxLen);
- if ( !self->f_string.f_ptr )
- return kMUnableToComplyCompErr;
-
- MInitSizedString(self->f_block, 0);
- return kMNoCompErr;
- }
-
-
- /* Copy component data
- */
-
- static MErr MCompCopy(InterfacComp *self, InterfacComp *previousSelf)
- {
- MCopyEvent(self->f_activate, previousSelf->f_activate);
- MCopySymbol(self->f_sound, previousSelf->f_sound);
- MCopyIDPath(self->f_scene, previousSelf->f_scene);
-
- MCopySymbol(self->f_static, previousSelf->f_static);
- MCopySymbol(self->f_dynamic, previousSelf->f_dynamic);
- MCopySymbol(self->f_submenu, previousSelf->f_submenu);
-
- MCopyInteger(self->f_yesNoMaybe, previousSelf->f_yesNoMaybe);
-
- MCopyBoolean(self->f_show, previousSelf->f_show);
- MCopyBoolean(self->f_play, previousSelf->f_play);
- MCopyBoolean(self->f_backward, previousSelf->f_backward);
-
- MCopyInteger(self->f_integer, previousSelf->f_integer);
- MCopyDouble(self->f_double, previousSelf->f_double);
- MCopyTime(self->f_time, previousSelf->f_time);
- MCopyString(self, self->f_string, previousSelf->f_string);
-
- MCopyString(self, self->f_block, previousSelf->f_block);
- return kMNoCompErr;
- }
-
-
- /* Copy component
- */
-
- static MErr MCompCopyConstructor(InterfacComp *self, InterfacComp *previousSelf, MObjectRef *mRef)
- {
- MCompConstructor(self, mRef);
- return MCompCopy(self, previousSelf);
- }
-
-
- /* Dispose component
- */
-
- static MErr MCompDestructor(InterfacComp *self)
- {
- MDisposeEvent(self->f_activate);
- MDisposeSymbol(self->f_sound);
- MDisposeIDPath(self->f_scene);
-
- MDisposeSymbol(self->f_static);
- MDisposeSymbol(self->f_dynamic);
- MDisposeSymbol(self->f_submenu);
-
- MDisposeInteger(self->f_yesNoMaybe);
-
- MDisposeBoolean(self->f_show);
- MDisposeBoolean(self->f_play);
- MDisposeBoolean(self->f_backward);
-
- MDisposeInteger(self->f_integer);
- MDisposeDouble(self->f_double);
- MDisposeTime(self->f_time);
- MDisposeString(self->f_string);
-
- MDisposeString(self->f_block);
- return kMNoCompErr;
- }
-
-
- /* Open component dialog
- */
-
- static MErr MCompEditorOpen(InterfacComp *self, void *editor, short editorType)
- {
- if ( editorType == kMDialogEditorType ) {
- MBoolean bool;
-
- MAddSymbol(editor, kDynamicPopup, "California", kMEnabledItem, 1, 0);
- MAddSymbol(editor, kDynamicPopup, "New York", kMEnabledItem, 2, 0);
- MAddSymbol(editor, kDynamicPopup, "Illinois", kMEnabledItem, 3, 0);
- MAddSymbol(editor, kDynamicPopup, "Louisiana", kMEnabledItem, 4, 0);
- MAddSymbol(editor, kDynamicPopup, "-", kMDisabledItem, -1, 0);
- MAddSymbol(editor, kDynamicPopup, "British Columbia", kMEnabledItem, 5, 0);
- MAddSymbol(editor, kDynamicPopup, "Ontario", kMEnabledItem, 6, 0);
-
- MSetEditorItem(editor, kActivatePopup, (MDataType *) &self->f_activate);
- MSetEditorItem(editor, kSoundPopup, (MDataType *) &self->f_sound);
- MSetEditorItem(editor, kScenePopup, (MDataType *) &self->f_scene);
-
- MSetEditorItem(editor, kStaticPopup, (MDataType *) &self->f_static);
- MSetEditorItem(editor, kDynamicPopup, (MDataType *) &self->f_dynamic);
-
- MAddSymbol(editor, kSubmenuPopup, "California", kMEnabledItem, 1, 0);
- MAddSubSymbolItem(editor, kSubmenuPopup, 1, 0, "California", 11, 0, "San Mateo County");
- MAddSubSymbolItem(editor, kSubmenuPopup, 1, 0, "California", 12, 0, "Santa Clara County");
- MAddSubSymbolItem(editor, kSubmenuPopup, 1, 0, "California", 13, 0, "Marin County");
-
- MAddSymbol(editor, kSubmenuPopup, "Pennsylvania", kMEnabledItem, 2, 0);
- MAddSubSymbolItem(editor, kSubmenuPopup, 2, 0, "Pennsylvania", 21, 0, "Allegheny County");
- MAddSubSymbolItem(editor, kSubmenuPopup, 2, 0, "Pennsylvania", 22, 0, "Westchester County");
- MAddSubSymbolItem(editor, kSubmenuPopup, 2, 0, "Pennsylvania", 23, 0, "Latrobe County");
-
- MAddSymbol(editor, kSubmenuPopup, "-", kMDisabledItem, -1, 0);
-
- MAddSymbol(editor, kSubmenuPopup, "Ontario", kMEnabledItem, 3, 0);
- MAddSubSymbolItem(editor, kSubmenuPopup, 3, 0, "Ontario", 31, 0, "Waterloo County");
- MAddSubSymbolItem(editor, kSubmenuPopup, 3, 0, "Ontario", 32, 0, "Lanark County");
- MAddSubSymbolItem(editor, kSubmenuPopup, 3, 0, "Ontario", 33, 0, "Wellington County");
-
- MSetEditorItem(editor, kSubmenuPopup, (MDataType *) &self->f_submenu);
-
- MInitBoolean(bool, true);
- MSetEditorItem(editor, kYesRadioButton + self->f_yesNoMaybe.f_value, (MDataType *) &bool);
-
- MSetEditorItem(editor, kShowCheckbox, (MDataType *) &self->f_show);
- MSetEditorItem(editor, kPlayCheckbox, (MDataType *) &self->f_play);
- if ( self->f_play.f_value ) {
- MSetEditorItem(editor, kBackwardCheckbox, (MDataType *) &self->f_backward);
- }
- else {
- MSetEditorItemState(editor, kBackwardCheckbox, kMDisabledItem);
- }
-
- MSetEditorItem(editor, kIntegerField, (MDataType *) &self->f_integer);
- MSetEditorItem(editor, kDoubleField, (MDataType *) &self->f_double);
- MSetEditorItem(editor, kTimeField, (MDataType *) &self->f_time);
- MSetEditorItem(editor, kStringField, (MDataType *) &self->f_string);
-
- MSetEditorItem(editor, kTextBlock, (MDataType *) &self->f_block);
- return kMNoCompErr;
- }
- else
- return kMUnableToComplyCompErr;
- }
-
-
- /* Item changed in dialog
- */
-
- static MErr MCompEditorItemChanged(InterfacComp *self, void *editor, short editorType, short item, short part)
- {
- static int selected = false;
- MBoolean bool;
-
- switch (item) {
- case kBeepButton:
- SysBeep(1);
- break;
-
- case kIconButton:
- if ( part == kMMouseUpPart ) {
- MControl cicns;
-
- if ( selected ) {
- MInitControl(cicns, 1310, 1311, 0);
- }
- else {
- MInitControl(cicns, 1311, 1310, 0);
- }
- MSetItemSpec(editor, item, kMInteger, &cicns);
- selected = !selected;
- }
- break;
-
- case kPlayCheckbox:
- MInitBoolean(bool, false);
- MGetEditorItem(editor, kPlayCheckbox, (MDataType *) &bool);
- if ( bool.f_value ) {
- MSetEditorItemState(editor, kBackwardCheckbox, kMEnabledItem);
- }
- else {
- bool.f_value = false;
- MSetEditorItem(editor, kBackwardCheckbox, (MDataType *) &bool);
- MSetEditorItemState(editor, kBackwardCheckbox, kMDisabledItem);
- }
- break;
- }
- return kMNoCompErr;
- }
-
-
- /* Close component dialog
- */
-
- static MErr MCompEditorAccept(InterfacComp *self, void *editor)
- {
- MBoolean bool;
- MControl spec;
- long strLen;
-
- MGetEditorItem(editor, kActivatePopup, (MDataType *) &self->f_activate);
- MGetEditorItem(editor, kSoundPopup, (MDataType *) &self->f_sound);
- MGetEditorItem(editor, kScenePopup, (MDataType *) &self->f_scene);
-
- MGetEditorItem(editor, kStaticPopup, (MDataType *) &self->f_static);
- MGetEditorItem(editor, kDynamicPopup, (MDataType *) &self->f_dynamic);
- MGetEditorItem(editor, kSubmenuPopup, (MDataType *) &self->f_submenu);
- MForgetSymbols(editor, kDynamicPopup);
- MForgetSymbols(editor, kSubmenuPopup);
-
- MInitBoolean(bool, false);
- MGetEditorItem(editor, kYesRadioButton, (MDataType *) &bool);
- self->f_yesNoMaybe.f_value = (bool.f_value) ? kYes : self->f_yesNoMaybe.f_value;
- MGetEditorItem(editor, kNoRadioButton, (MDataType *) &bool);
- self->f_yesNoMaybe.f_value = (bool.f_value) ? kNo : self->f_yesNoMaybe.f_value;
- MGetEditorItem(editor, kMaybeRadioButton, (MDataType *) &bool);
- self->f_yesNoMaybe.f_value = (bool.f_value) ? kMaybe : self->f_yesNoMaybe.f_value;
-
- MGetEditorItem(editor, kShowCheckbox, (MDataType *) &self->f_show);
- MGetEditorItem(editor, kPlayCheckbox, (MDataType *) &self->f_play);
- MGetEditorItem(editor, kBackwardCheckbox, (MDataType *) &self->f_backward);
-
- MGetEditorItem(editor, kIntegerField, (MDataType *) &self->f_integer);
- MGetEditorItem(editor, kDoubleField, (MDataType *) &self->f_double);
- MGetEditorItem(editor, kTimeField, (MDataType *) &self->f_time);
-
- MGetEditorItem(editor, kStringField, (MDataType *) &self->f_string);
- MStrlen((size_t *) &self->f_string.f_strLen, self->f_string.f_ptr);
-
- MGetItemSpec(editor, kTextBlock, kMInteger, &spec);
- strLen = (long) spec.f_value + 1; // add one for null terminator
- if ( strLen > self->f_block.f_strLen || strLen < self->f_block.f_strLen / 2 ) {
- MDisposeString(self->f_block);
- MInitSizedString(self->f_block, strLen);
- if ( !self->f_block.f_ptr )
- return kMUnableToComplyCompErr;
- }
- MGetEditorItem(editor, kTextBlock, (MDataType *) &self->f_block);
- self->f_block.f_ptr[strLen - 1] = '\0';
- MStrlen((size_t *) &self->f_block.f_strLen, self->f_block.f_ptr);
- return kMNoCompErr;
- }
-
-
- /* Cancel component dialog
- */
-
- static MErr MCompEditorDecline(InterfacComp *self, void *editor)
- {
- MForgetSymbols(editor, kDynamicPopup);
- MForgetSymbols(editor, kSubmenuPopup);
- return kMNoCompErr;
- }
-
-
- /* Provide save information
- */
-
- static MErr MCompGetSaveInfo(InterfacComp *self, MFileIOServ *file, long saveInfo, short *rev, long *len)
- {
- long valueSize;
-
- MSizeOfValue(file, &self->f_activate, &valueSize);
- *len = valueSize;
- MSizeOfValue(file, &self->f_sound, &valueSize);
- *len += valueSize;
- MSizeOfValue(file, &self->f_scene, &valueSize);
- *len += valueSize;
-
- MSizeOfValue(file, &self->f_static, &valueSize);
- *len += valueSize;
- MSizeOfValue(file, &self->f_dynamic, &valueSize);
- *len += valueSize;
- MSizeOfValue(file, &self->f_submenu, &valueSize);
- *len += valueSize;
-
- MSizeOfValue(file, &self->f_yesNoMaybe, &valueSize);
- *len += valueSize;
-
- MSizeOfValue(file, &self->f_show, &valueSize);
- *len += valueSize;
- MSizeOfValue(file, &self->f_play, &valueSize);
- *len += valueSize;
- MSizeOfValue(file, &self->f_backward, &valueSize);
- *len += valueSize;
-
- MSizeOfValue(file, &self->f_integer, &valueSize);
- *len += valueSize;
- MSizeOfValue(file, &self->f_double, &valueSize);
- *len += valueSize;
- MSizeOfValue(file, &self->f_time, &valueSize);
- *len += valueSize;
- MSizeOfValue(file, &self->f_string, &valueSize);
- *len += valueSize;
-
- MSizeOfValue(file, &self->f_block, &valueSize);
- *len += valueSize;
-
- *rev = kInterfacRev;
- return kMNoCompErr;
- }
-
-
- /* Save component
- */
-
- static MErr MCompSaveComponent(InterfacComp *self, MFileIOServ *file, long saveInfo)
- {
- MWriteValue(file, &self->f_activate);
- MWriteValue(file, &self->f_sound);
- MWriteValue(file, &self->f_scene);
-
- MWriteValue(file, &self->f_static);
- MWriteValue(file, &self->f_dynamic);
- MWriteValue(file, &self->f_submenu);
-
- MWriteValue(file, &self->f_yesNoMaybe);
-
- MWriteValue(file, &self->f_show);
- MWriteValue(file, &self->f_play);
- MWriteValue(file, &self->f_backward);
-
- MWriteValue(file, &self->f_integer);
- MWriteValue(file, &self->f_double);
- MWriteValue(file, &self->f_time);
- MWriteValue(file, &self->f_string);
-
- MWriteValue(file, &self->f_block);
- return kMNoCompErr;
- }
-
-
- /* Restore component
- */
-
- static MErr MCompRestoreComponent(InterfacComp *self, MFileIOServ *file, long saveInfo, short rev)
- {
- if ( rev == kInterfacRev ) {
- MString tempString;
-
- MReadValue(file, &self->f_activate);
- MReadValue(file, &self->f_sound);
- MReadValue(file, &self->f_scene);
-
- MReadValue(file, &self->f_static);
- MReadValue(file, &self->f_dynamic);
- MReadValue(file, &self->f_submenu);
-
- MReadValue(file, &self->f_yesNoMaybe);
-
- MReadValue(file, &self->f_show);
- MReadValue(file, &self->f_play);
- MReadValue(file, &self->f_backward);
-
- MReadValue(file, &self->f_integer);
- MReadValue(file, &self->f_double);
- MReadValue(file, &self->f_time);
-
- MInitSizedString(tempString, 0);
- MReadValue(file, &tempString);
- MCopyString(self, self->f_string, tempString);
- self->f_string.f_ptr[self->f_string.f_strLen] = '\0';
- MDisposeString(tempString);
-
- MInitSizedString(tempString, 0);
- MReadValue(file, &tempString);
- MCopyString(self, self->f_block, tempString);
- self->f_block.f_ptr[self->f_block.f_strLen] = '\0';
- MDisposeString(tempString);
- return kMNoCompErr;
- }
- else
- return kMUnableToComplyCompErr;
- }
-