From 33bfa9e96a29391e9271104a1603dfa7ddd8cc53 Mon Sep 17 00:00:00 2001 From: Eric Heien Date: Mon, 12 Aug 2002 23:22:17 +0000 Subject: [PATCH] Updated GUI (added preferences, about box) svn path=/trunk/boinc/; revision=307 --- client/mac/mac_about.cpp | 96 ++++++++++ client/mac/mac_about.h | 22 +++ client/mac/{mac_join.c => mac_join.cpp} | 4 +- client/mac/mac_main.c | 239 ------------------------ client/mac/mac_prefs.cpp | 98 ++++++++++ client/mac/mac_prefs.h | 13 ++ mac_build.sit | Bin 18351 -> 18298 bytes 7 files changed, 231 insertions(+), 241 deletions(-) create mode 100644 client/mac/mac_about.cpp create mode 100644 client/mac/mac_about.h rename client/mac/{mac_join.c => mac_join.cpp} (97%) delete mode 100755 client/mac/mac_main.c create mode 100644 client/mac/mac_prefs.cpp create mode 100644 client/mac/mac_prefs.h diff --git a/client/mac/mac_about.cpp b/client/mac/mac_about.cpp new file mode 100644 index 0000000000..2273653ee3 --- /dev/null +++ b/client/mac/mac_about.cpp @@ -0,0 +1,96 @@ +// The contents of this file are subject to the Mozilla Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.mozilla.org/MPL/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations +// under the License. +// +// The Original Code is the Berkeley Open Infrastructure for Network Computing. +// +// The Initial Developer of the Original Code is the SETI@home project. +// Portions created by the SETI@home project are Copyright (C) 2002 +// University of California at Berkeley. All Rights Reserved. +// +// Contributor(s): +// + +#include "mac_about.h" + +// Create, show and run our about box +// +OSStatus CreateAboutWindow() +{ + IBNibRef nibRef; + EventTypeSpec dialogSpec = {kEventClassCommand, kEventCommandProcess }; + WindowRef aboutWindow; + EventHandlerUPP aboutBoxUPP; + OSStatus err = noErr; + + // Find the dialog nib + err = CreateNibReference(CFSTR("AboutBox"), &nibRef); + require_noerr( err, CantFindDialogNib ); + + // Load the window inside it + err = CreateWindowFromNib(nibRef, CFSTR("About Box"), &aboutWindow); + require_noerr( err, CantCreateDialogWindow ); + + // We don't need the nib reference anymore. + DisposeNibReference(nibRef); + + // Install our event handler + /*dialogUPP = NewEventHandlerUPP (JoinDialogEventHandler); + err = InstallWindowEventHandler (aboutWindow, aboutBoxUPP, 1, &dialogSpec, (void *) dialogWindow, NULL); + require_noerr( err, CantInstallDialogHandler );*/ + + // Show the window + ShowWindow( aboutWindow ); + + /*HideWindow(aboutWindow); + DisposeWindow(aboutWindow); + DisposeEventHandlerUPP(aboutBoxUPP);*/ + +CantFindDialogNib: +CantCreateDialogWindow: +CantInstallDialogHandler: + + return err; +} + + +// Dialog event handler +// +/*pascal OSStatus AboutBoxEventHandler (EventHandlerCallRef myHandler, EventRef event, void *userData) { + OSStatus result = eventNotHandledErr; + HICommand command; + bool stopModalLoop = FALSE; + + // Get the HI Command + GetEventParameter (event, kEventParamDirectObject, typeHICommand, NULL, + sizeof (HICommand), NULL, &command); + // Look for our Yes Join and No Join commands + switch (command.commandID) { + case 'ysjn': + //HandleResponse(TRUE); + stopModalLoop = TRUE; + result = noErr; + break; + case 'nojn': + //HandleResponse(FALSE); + stopModalLoop = TRUE; + result = noErr; + break; + } + + // Stop the modal loop. + if (stopModalLoop) { + QuitAppModalLoopForWindow((WindowRef)userData); + } + + //Return how we handled the event. + return result; +} + +*/ \ No newline at end of file diff --git a/client/mac/mac_about.h b/client/mac/mac_about.h new file mode 100644 index 0000000000..c6e0d67061 --- /dev/null +++ b/client/mac/mac_about.h @@ -0,0 +1,22 @@ +// The contents of this file are subject to the Mozilla Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.mozilla.org/MPL/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations +// under the License. +// +// The Original Code is the Berkeley Open Infrastructure for Network Computing. +// +// The Initial Developer of the Original Code is the SETI@home project. +// Portions created by the SETI@home project are Copyright (C) 2002 +// University of California at Berkeley. All Rights Reserved. +// +// Contributor(s): +// + +#include + +OSStatus CreateAboutWindow(); diff --git a/client/mac/mac_join.c b/client/mac/mac_join.cpp similarity index 97% rename from client/mac/mac_join.c rename to client/mac/mac_join.cpp index 93ee36eb4d..d0d103ec16 100644 --- a/client/mac/mac_join.c +++ b/client/mac/mac_join.cpp @@ -74,12 +74,12 @@ pascal OSStatus JoinDialogEventHandler (EventHandlerCallRef myHandler, EventRef sizeof (HICommand), NULL, &command); // Look for our Yes Join and No Join commands switch (command.commandID) { - case 'ysjn': + case kHICommandOK: // 'ok ' //HandleResponse(TRUE); stopModalLoop = TRUE; result = noErr; break; - case 'nojn': + case kHICommandCancel: // 'not!' //HandleResponse(FALSE); stopModalLoop = TRUE; result = noErr; diff --git a/client/mac/mac_main.c b/client/mac/mac_main.c deleted file mode 100755 index c1ad7da337..0000000000 --- a/client/mac/mac_main.c +++ /dev/null @@ -1,239 +0,0 @@ -// The contents of this file are subject to the Mozilla Public License -// Version 1.0 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.mozilla.org/MPL/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations -// under the License. -// -// The Original Code is the Berkeley Open Infrastructure for Network Computing. -// -// The Initial Developer of the Original Code is the SETI@home project. -// Portions created by the SETI@home project are Copyright (C) 2002 -// University of California at Berkeley. All Rights Reserved. -// -// Contributor(s): -// - -#include -#include -#include - -// project includes --------------------------------------------------------- - -#include "mac_main.h" -#include "mac_join.h" - -// statics/globals (internal only) ------------------------------------------ - -static const EventTypeSpec appEventList[] = -{ -{kEventClassCommand, kEventCommandProcess}, - {kEventClassMouse, kEventMouseDown}, -{kEventClassMouse, kEventMouseUp}, -{kEventClassMouse, kEventMouseMoved}, -{kEventClassMouse, kEventMouseDragged}, -{kEventClassMouse, kEventMouseWheelMoved} -}; - -WindowRef boincWindow; -ControlRef boincStatusControl; -EventLoopTimerRef boincTimer; -EventLoopTimerUPP boincTimerUPP; -EventHandlerUPP appCommandProcessor; -WindowPtr boincAboutWindow; - -bool user_requested_exit = false; - -#define kStatusControl 'cntl' -#define kStatusControlID 128 - -enum -{ - kBOINCCommandJoin = 'join', - kBOINCCommandSuspend = 'susp' -}; - -// -------------------------------------------------------------------------- - -void InitToolbox(void) -{ - OSStatus err; - Handle boincMenuBar; - ControlID ctrlID; - IBNibRef boincNibRef; - - InitCursor(); - - // Search for the "boinc" .nib file - err = CreateNibReference(CFSTR("boinc"), &boincNibRef); - if ( err != noErr ) { - fprintf(stderr, "Can't load boinc.nib. Err: %d\n", (int)err); - ExitToShell(); - } - - // Init Menus - err = CreateMenuBarFromNib(boincNibRef, CFSTR("MainMenu"), &boincMenuBar); - if ( err != noErr ) { - fprintf(stderr, "Can't load MenuBar. Err: %d\n", (int)err); - ExitToShell(); - } - - err = CreateWindowFromNib(boincNibRef, CFSTR("Client Window"), &boincWindow); - if (err != noErr) { - fprintf(stderr, "Can't load Window. Err: %d\n", (int)err); - ExitToShell(); - } - - ctrlID.id = kStatusControl; - ctrlID.signature = kStatusControlID; - GetControlByID(boincWindow, &ctrlID, &boincStatusControl); - - // Enable the preferences item - EnableMenuCommand(NULL, kHICommandPreferences); - - // Application-level event handler installer - appCommandProcessor = NewEventHandlerUPP(MainAppEventHandler); - err = InstallApplicationEventHandler(appCommandProcessor, GetEventTypeCount(appEventList), - appEventList, 0, NULL); - // BOINC Timed event handler installer - boincTimerUPP = NewEventLoopTimerUPP(BOINCPollLoopProcessor); - err = InstallEventLoopTimer(GetCurrentEventLoop(), 0, - kEventDurationMillisecond*1000, // Every 1 second - boincTimerUPP, NULL, &boincTimer); - - SetMenuBar(boincMenuBar); - ShowWindow(boincWindow); - - DisposeNibReference(boincNibRef); -} - -////////////////////////////////////////////////////////////////////////////////// -// BOINCPollLoopProcessor // -////////////////////////////////////////////////////////////////////////////////// -pascal void BOINCPollLoopProcessor(EventLoopTimerRef inTimer, void* timeData) -{ -#pragma unused(inTimer, timeData) - fprintf( stderr, "Fired timer.\n" ); - // Call do_something here - -} - -////////////////////////////////////////////////////////////////////////////////// -// MainAppEventHandler // -////////////////////////////////////////////////////////////////////////////////// -pascal OSStatus MainAppEventHandler(EventHandlerCallRef appHandler, EventRef theEvent, void* appData) -{ -#pragma unused (appHandler, appData) - - HICommand aCommand; - OSStatus result; - Point mDelta; - - switch(GetEventClass(theEvent)) - { - case kEventClassMouse: // 'mous' - GetEventParameter(theEvent, // the event itself - kEventParamMouseDelta, // symbolic parameter name - typeQDPoint, // expected type - NULL, // actual type (NULL is valid) - sizeof(mDelta), // buffer size - NULL, // actual buffer size (Can be NULL) - &mDelta); // variable to hold data - switch(GetEventKind(theEvent)) - { - case kEventMouseDown: - break; - case kEventMouseUp: - break; - case kEventMouseMoved: - break; - case kEventMouseDragged: - break; - case kEventMouseWheelMoved: - break; - default: - result = eventNotHandledErr; - break; - } - break; - case kEventClassCommand: - result = GetEventParameter(theEvent, kEventParamDirectObject, - typeHICommand, NULL, sizeof(HICommand), - NULL, &aCommand); - switch (aCommand.commandID) - { - case kHICommandOK: // 'ok ' - case kHICommandCancel: // 'not!' - result = eventNotHandledErr; - break; - case kHICommandQuit: - QuitApplicationEventLoop(); - result = noErr; - break; - case kHICommandUndo: // 'undo' - case kHICommandRedo: // 'redo' - case kHICommandCut: // 'cut ' - case kHICommandCopy: // 'copy' - case kHICommandPaste: // 'past' - case kHICommandClear: // 'clea' - case kHICommandSelectAll: // 'sall' - case kHICommandHide: // 'hide' - case kHICommandZoomWindow: // 'zoom' - case kHICommandMinimizeWindow: // 'mini' - case kHICommandArrangeInFront: // 'frnt' - break; - case kHICommandPreferences: // 'pref' - // Open prefs dialog - result = noErr; - break; - case kBOINCCommandJoin: // 'join' - // Open join dialog - CreateJoinDialog(); - result = noErr; - break; - case kBOINCCommandSuspend: // 'susp' - // Suspend processing - result = noErr; - break; - case kHICommandAbout: // 'abou' - // Put in check to see if window is already open - /*err = CreateWindowFromNib(boincNibRef, CFSTR("About Box"), &boincAboutWindow); - if (err != noErr) { - fprintf(stderr, "Can't load Window. Err: %d\n", (int)err); - ExitToShell(); - } - ShowWindow(boincAboutWindow);*/ - result = noErr; - break; - default: - result = eventNotHandledErr; - break; - } - break; - default: - result = eventNotHandledErr; - break; - } - return result; -} - -// -------------------------------------------------------------------------- - -int mac_setup (void) -{ - InitToolbox (); - RunApplicationEventLoop(); - return true; -} - -// -------------------------------------------------------------------------- - -void mac_cleanup (void) -{ - RemoveEventLoopTimer(boincTimer); - DisposeEventLoopTimerUPP(boincTimerUPP); - DisposeEventHandlerUPP(appCommandProcessor); -} diff --git a/client/mac/mac_prefs.cpp b/client/mac/mac_prefs.cpp new file mode 100644 index 0000000000..d761d037ff --- /dev/null +++ b/client/mac/mac_prefs.cpp @@ -0,0 +1,98 @@ +// The contents of this file are subject to the Mozilla Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.mozilla.org/MPL/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations +// under the License. +// +// The Original Code is the Berkeley Open Infrastructure for Network Computing. +// +// The Initial Developer of the Original Code is the SETI@home project. +// Portions created by the SETI@home project are Copyright (C) 2002 +// University of California at Berkeley. All Rights Reserved. +// +// Contributor(s): +// + +#include "mac_prefs.h" + +// Create, show and run our prefs dialog +// +OSStatus CreatePrefsDialog() +{ + IBNibRef nibRef; + EventTypeSpec dialogSpec = {kEventClassCommand, kEventCommandProcess }; + WindowRef prefsDialog; + EventHandlerUPP prefsDialogUPP; + OSStatus err = noErr; + + // Find the dialog nib + err = CreateNibReference(CFSTR("PrefsDialog"), &nibRef); + require_noerr( err, CantFindDialogNib ); + + // Load the window inside it + err = CreateWindowFromNib(nibRef, CFSTR("Prefs Dialog"), &prefsDialog); + require_noerr( err, CantCreateDialogWindow ); + + // We don't need the nib reference anymore. + DisposeNibReference(nibRef); + + // Install our event handler + prefsDialogUPP = NewEventHandlerUPP (PrefsDialogEventHandler); + err = InstallWindowEventHandler (prefsDialog, prefsDialogUPP, 1, &dialogSpec, (void *) prefsDialog, NULL); + require_noerr( err, CantInstallDialogHandler ); + + // Show the window + ShowWindow( prefsDialog ); + + // Run modally + RunAppModalLoopForWindow(prefsDialog); + + HideWindow(prefsDialog); + DisposeWindow(prefsDialog); + DisposeEventHandlerUPP(prefsDialogUPP); + +CantFindDialogNib: +CantCreateDialogWindow: +CantInstallDialogHandler: + + return err; +} + + +// Dialog event handler +// +pascal OSStatus PrefsDialogEventHandler (EventHandlerCallRef myHandler, EventRef event, void *userData) { +OSStatus result = eventNotHandledErr; +HICommand command; +bool stopModalLoop = FALSE; + +// Get the HI Command +GetEventParameter (event, kEventParamDirectObject, typeHICommand, NULL, + sizeof (HICommand), NULL, &command); +// Look for OK and Cancel commands +switch (command.commandID) { + case kHICommandOK: // 'ok ' + //HandleResponse(TRUE); + stopModalLoop = TRUE; + result = noErr; + break; + case kHICommandCancel: // 'not!' + //HandleResponse(FALSE); + stopModalLoop = TRUE; + result = noErr; + break; +} + +// Stop the modal loop. +if (stopModalLoop) { + QuitAppModalLoopForWindow((WindowRef)userData); +} + +//Return how we handled the event. +return result; +} + diff --git a/client/mac/mac_prefs.h b/client/mac/mac_prefs.h new file mode 100644 index 0000000000..f114ac2976 --- /dev/null +++ b/client/mac/mac_prefs.h @@ -0,0 +1,13 @@ +/* + * mac_prefs.h + * boinc + * + * Created by Eric Heien on Mon Aug 12 2002. + * Copyright (c) 2002 __MyCompanyName__. All rights reserved. + * + */ + +#include + +OSStatus CreatePrefsDialog(); +pascal OSStatus PrefsDialogEventHandler (EventHandlerCallRef myHandler, EventRef event, void *userData); diff --git a/mac_build.sit b/mac_build.sit index 2c11078aa1da5089ff71c6537ce1d195f28bed7b..92a50d27c3f6796bb0878885a4ed0ed08b70fdf4 100644 GIT binary patch delta 11386 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 G^M3&8d_2DZ delta 11361 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