home *** CD-ROM | disk | FTP | other *** search
- /*
- * ---------------------------------------------------------------------
- * CFinderEvent.c :
- *
- * Based on Jon Pugh Finder Event code
- *
- * © Copyright 1992 by F. Menneteau. All rights reserved.
- * This code can be both distributed and used freely.
- *
- * ---------------------------------------------------------------------
- */
-
-
- #include "CFinderEvent.h"
-
- #define RETURN(e) if ( (e) != noErr ) return(itsError)
-
-
- /*************************************************************************
- * METHOD DEFINITIONS
- *************************************************************************/
- OSErr CFinderEvent::IFinderEvent(void)
- {
- return(BuildTargetWithSignOnly(kFinderSignature)) ;
- }
-
-
- OSErr CFinderEvent::IRemoteFinderEvent(
- Ptr TheRemoteMachine) // 'Finder' name not included
- {
- Str255 LcTargetName ;
-
- if ( TheRemoteMachine == (Ptr) NULL )
- return(AskAndBuildTarget(sTARGET_ID)) ;
-
- pstrcpy((Ptr) LcTargetName,TheRemoteMachine) ;
-
- if ( PSTRLASTCHAR(LcTargetName) != PSTRLASTCHAR(PDELIMITER) )
- pstrcat((Ptr) LcTargetName,PDELIMITER) ;
-
- pstrcat((Ptr) LcTargetName,FINDER) ;
-
- return(BuildTargetWithRemoteName((Ptr) LcTargetName)) ;
- }
-
-
- OSErr CFinderEvent::privFakeHideEventPutParam(
- OSType TheCode)
- {
- Point LcPoint ;
- FinderWindow LcFWind ;
- char LcChar ;
-
- LcFWind.windowType = kAEMain ;
- LcFWind.aliasType = kFindCode ;
- LcFWind.aliasLength = 4 ;
-
- * (OSType *) &LcPoint = TheCode ;
- BlockMove(&LcPoint,&(LcFWind.alias),sizeof(LcPoint)) ;
-
- return(protPutParam(
- keyDirectObject,
- typeFinderWindow,
- (Ptr) &LcFWind,
- sizeof(LcFWind))) ;
- }
-
-
- OSErr CFinderEvent::privWindowPathPutParam(
- Ptr TheWindowPath,
- WindowType TheWindowType)
- {
- long LcLength ;
- FakeFinderWind LcFFWind ;
- FSSpec LcFSSpec ;
- AliasHandle LcFolderAlias ;
- char LcChar ;
-
- itsError = EntityPathToAlias(TheWindowPath,typeFOLDER,&LcFolderAlias);
- RETN_IF_ERR(itsError) ;
-
- HLock((Handle) LcFolderAlias) ;
- LcLength = (**LcFolderAlias).aliasSize - sizeof(AliasRecord) ;
-
- if ( LcLength >= MAX_ALIAS_SIZE ) {
- itsError = memFullErr ; // !!!
- goto CleanExit ;
- }
-
- LcFFWind.fFinderWindow.windowType = TheWindowType ;
- LcFFWind.fFinderWindow.aliasType = typeAlias ;
- LcFFWind.fFinderWindow.aliasLength = (**LcFolderAlias).aliasSize ;
-
- BlockMove(
- (Ptr) *LcFolderAlias,
- &(LcFFWind.fFinderWindow.alias),
- (**LcFolderAlias).aliasSize) ;
-
- (void) protPutParam(
- keyDirectObject,
- typeFinderWindow,
- (Ptr) &(LcFFWind.fFinderWindow),
- sizeof(LcFFWind.fFinderWindow) + LcLength) ;
-
- CleanExit:
- HUnlock((Handle) LcFolderAlias) ;
- DisposHandle((Handle) LcFolderAlias) ;
-
- return(itsError) ;
- }
-
-
- /* --------------------------------------------------------------------- */
- /* ALL THE POSSIBLE FINDER EVENTS ARE DESCRIBED BY THE FOLLOWING METHODS */
- /* --------------------------------------------------------------------- */
- OSErr CFinderEvent::FESendAbout(void)
- {
- RETURN(CreateAE(kCoreEventClass,kAEAbout)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendAliasSelection(
- Ptr TheFolderPath,
- Ptr TheItemList)
- {
- RETURN(CreateAE(kCoreEventClass,kAEAliasSelection)) ;
- RETURN(protFolderPathPutParam(TheFolderPath)) ;
- RETURN(protFilesListPutParam(TheFolderPath,TheItemList)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendCloseAbout(void)
- {
- /*
- * "This is a fake event that close the About window. This performs
- * some black magic that it is very ugly" dixit Jon Pugh.
- */
- RETURN(CreateAE(kAEFinderEvents,kAEClose)) ;
- RETURN(privFakeHideEventPutParam(kAboutCode)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendCloseWindow(
- Ptr TheWindowPath,
- WindowType TheWindowType)
- {
- RETURN(CreateAE(kAEFinderEvents,kAEClose)) ;
- RETURN(privWindowPathPutParam(TheWindowPath,TheWindowType)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendDragSelection(
- Ptr TheDestinationFolder,
- Ptr TheItemPathList,
- short TheHPos,
- short TheVPos)
- {
- Point LcPoint ;
-
- RETURN(CreateAE(kAEFinderEvents,kAEDrag)) ;
- RETURN(protFolderPathPutParam(TheDestinationFolder)) ;
- RETURN(protFilesListPutParam((Ptr) NULL,TheItemPathList)) ;
-
- LcPoint.h = TheHPos ;
- LcPoint.v = TheVPos ;
-
- RETURN(protPutParam(
- keyMiscellaneous,
- typeLongInteger,
- (Ptr) &LcPoint,
- sizeof(LcPoint))) ;
-
- return(SendAE(kAENeverInteract | kAENoReply/*kAEWaitReply*/)) ;
- }
-
-
- OSErr CFinderEvent::FESendDuplicateSelection(
- Ptr TheFolderPath,
- Ptr TheItemList)
- {
- RETURN(CreateAE(kAEFinderEvents,kAEDuplicateSelection)) ;
- RETURN(protFolderPathPutParam(TheFolderPath)) ;
- RETURN(protFilesListPutParam(TheFolderPath,TheItemList)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendEmptyTrash(void)
- {
- RETURN(CreateAE(kAEFinderEvents,kAEEmptyTrash)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendGetInfo(
- Ptr TheFolderPath,
- Ptr TheItemList)
- {
- RETURN(CreateAE(kAEFinderEvents,kAEGetInfoSelection)) ;
- RETURN(protFolderPathPutParam(TheFolderPath)) ;
- RETURN(protFilesListPutParam(TheFolderPath,TheItemList)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendHideClipboard(void)
- {
- /*
- * "This is a fake event that close the Clipboard window. This
- * performs some black magic that it is very ugly" dixit Jon Pugh.
- */
- RETURN(CreateAE(kAEFinderEvents,kAEClose)) ;
- privFakeHideEventPutParam(kClipCode) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendMoveSelection(
- Ptr TheDestinationFolder,
- Ptr TheItemPathList,
- short TheHPos,
- short TheVPos)
- {
- Point LcPoint ;
-
- RETURN(CreateAE(kAEFinderEvents,kAEMove)) ;
- RETURN(protFolderPathPutParam(TheDestinationFolder)) ;
- RETURN(protFilesListPutParam((Ptr) NULL,TheItemPathList)) ;
-
- LcPoint.h = TheHPos ;
- LcPoint.v = TheVPos ;
-
- RETURN(protPutParam(
- keyMiscellaneous,
- typeLongInteger,
- (Ptr) &LcPoint,
- sizeof(LcPoint))) ;
-
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendMoveWindow(
- Ptr TheWindowPath,
- short TheHPos,
- short TheVPos)
- {
- Point LcPoint ;
-
- RETURN(CreateAE(kAEFinderEvents,kAESetPosition)) ;
- RETURN(privWindowPathPutParam(TheWindowPath,kAEMain)) ;
-
- LcPoint.h = TheHPos ;
- LcPoint.v = TheVPos ;
-
- RETURN(protPutParam(
- keyMiscellaneous,
- typeLongInteger,
- (Ptr) &LcPoint,
- sizeof(LcPoint))) ;
-
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendOpenSelection(
- Ptr TheFolderPath,
- Ptr TheItemList)
- {
- RETURN(CreateAE(kAEFinderEvents,kAEOpenSelection)) ;
- RETURN(protFolderPathPutParam(TheFolderPath)) ;
- RETURN(protFilesListPutParam(TheFolderPath,TheItemList)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendPageSetup(
- Ptr TheWindowPath)
- {
- RETURN(CreateAE(kAEFinderEvents,kAEPageSetup)) ;
- RETURN(privWindowPathPutParam(TheWindowPath,kAEMain)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendPrintSelection(
- Ptr TheFolderPath,
- Ptr TheItemList)
- {
- RETURN(CreateAE(kAEFinderEvents,kAEPrintSelection)) ;
- RETURN(protFolderPathPutParam(TheFolderPath)) ;
- RETURN(protFilesListPutParam(TheFolderPath,TheItemList)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendPrintWindow(
- Ptr TheWindowPath)
- {
- RETURN(CreateAE(kAEFinderEvents,kAEPrintWindow)) ;
- RETURN(privWindowPathPutParam(TheWindowPath,kAEMain)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendPutAway(
- Ptr TheFolderPath,
- Ptr TheItemList)
- {
- RETURN(CreateAE(kAEFinderEvents,kAEPutAwaySelection)) ;
- RETURN(protFolderPathPutParam(TheFolderPath)) ;
- RETURN(protFilesListPutParam(TheFolderPath,TheItemList)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendResizeWindow(
- Ptr TheWindowPath,
- short TheHeight,
- short TheWidth)
- {
- Point LcPoint ;
-
- RETURN(CreateAE(kAEFinderEvents,kAEGrow)) ;
- RETURN(privWindowPathPutParam(TheWindowPath,kAEMain)) ;
-
- LcPoint.h = TheHeight ;
- LcPoint.v = TheWidth ;
-
- RETURN(protPutParam(
- keyMiscellaneous,
- typeLongInteger,
- (Ptr) &LcPoint,
- sizeof(LcPoint))) ;
-
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendRestart(void)
- {
- RETURN(CreateAE(kAEFinderEvents,kAERestart)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendRevealSelection(
- Ptr TheFolderPath,
- Ptr TheItemList)
- {
- RETURN(CreateAE(kAEFinderEvents,kAERevealSelection)) ;
- RETURN(protFolderPathPutParam(TheFolderPath)) ;
- RETURN(protFilesListPutParam(TheFolderPath,TheItemList)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendSetView(
- Ptr TheWindowPath,
- TypeWindowView TheWindowView)
- {
- long LcLong = (long) TheWindowView ;
-
- RETURN(CreateAE(kAEFinderEvents,kAEChangeView)) ;
- RETURN(privWindowPathPutParam(TheWindowPath,kAEMain)) ;
-
- RETURN(protPutParam(
- keyMiscellaneous,
- typeLongInteger,
- (Ptr) &LcLong,
- sizeof(LcLong))) ;
-
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendSharing(
- Ptr TheParentPath,
- Ptr TheFolderList)
- {
- RETURN(CreateAE(kAEFinderEvents,kAESharing)) ;
- RETURN(protFolderPathPutParam(TheParentPath)) ;
- RETURN(protFilesListPutParam(TheParentPath,TheFolderList)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendShowClipboard(void)
- {
- RETURN(CreateAE(kAEFinderEvents,kAEShowClipboard)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendShutDown(void)
- {
- RETURN(CreateAE(kAEFinderEvents,kAEShutDown)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendSleep(void)
- {
- RETURN(CreateAE(kAEFinderEvents,kAESleep)) ;
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
- OSErr CFinderEvent::FESendZoomWindow(
- Ptr TheWindowPath,
- TypeWindowZoom TheWindowZoom)
- {
- long LcLong = (long) TheWindowZoom ;
-
- RETURN(CreateAE(kAEFinderEvents,kAEZoom)) ;
- RETURN(privWindowPathPutParam(TheWindowPath,kAEMain)) ;
-
- RETURN(protPutParam(
- keyMiscellaneous,
- typeLongInteger,
- (Ptr) &LcLong,
- sizeof(LcLong))) ;
-
- return(SendAE(kAENeverInteract | kAENoReply)) ;
- }
-
-
-