File:  [RetroPC.NET] / np2 / macosx / Attic / screenopt.cpp
Revision 1.2: download - view: text, annotated - select for diffs
Sat Oct 25 04:19:58 2003 JST (22 years ago) by tk800
Branches: MAIN
CVS tags: HEAD
Add opening

/*
 *  screenopt.cpp
 *  np2
 *
 *  Created by tk800 on Fri Oct 24 2003.
 *
 */

#include	"compiler.h"
#include	"np2.h"
#include	"sysmng.h"
#include	"pccore.h"
#include	"iocore.h"
#include	"scrndraw.h"
#include	"palettes.h"
#include	"configure.h"
#include	"dialogutils.h"

#define	getControlValue(a)		GetControl32BitValue(getControlRefByID(a,0,screenWin))
#define	setControlValue(a,b)	SetControl32BitValue(getControlRefByID(a,0,screenWin),b)

#define	kMaxNumTabs 3
enum {kTabMasterSig = 'ScrT',kTabMasterID = 1000,kTabPaneSig= 'ScTb'};

static WindowRef	screenWin;
static UInt16 lastPaneSelected = 1;	// static, to keep track of it long term (in a more complex application
                                        // you might store this in a data structure in the window refCon)                                            


static void setFieldValue(UInt32 type) {
    ControlRef	conRef;
    Str255		title;
    SInt32		value;
    
    value = getControlValue(type); 
    if (type == 'RPAd') {
        value -= 31;
    }
    NumToString(value, title);
    conRef = getControlRefByID(type, 1, screenWin);
	SetControlData(conRef, kControlNoPart, kControlStaticTextTextTag, *title, title+1);
    Draw1Control(conRef);
}

static void setReverseStatus(void) {
    if (getControlValue('LCDy')) {
        ActivateControl(getControlRefByID('rvrs', 0, screenWin));
    }
    else {
        DeactivateControl(getControlRefByID('rvrs', 0, screenWin));
    }
}

static void initScreenWindow(void) {
    setControlValue('LCDy', np2cfg.LCD_MODE & 1);
    setReverseStatus();
    setControlValue('rvrs', np2cfg.LCD_MODE & 2?1:0);
    setControlValue('uskr', np2cfg.skipline);
    setControlValue('rati', np2cfg.skiplight);
    setFieldValue('rati');
    
    setControlValue('GDCl', np2cfg.uPD72020 + 1);
    setControlValue('GrCh', (np2cfg.grcg & 3) + 1);
    setControlValue('16cl', np2cfg.color16);
    
    setControlValue('tram', np2cfg.wait[0]);
    setFieldValue('tram');
    setControlValue('vram', np2cfg.wait[2]);
    setFieldValue('vram');
    setControlValue('crgc', np2cfg.wait[4]);
    setFieldValue('crgc');
    setControlValue('RPAd', np2cfg.realpal);
    setFieldValue('RPAd');
    
}

static pascal OSStatus cfWinproc(EventHandlerCallRef myHandler, EventRef event, void* userData) {
    OSStatus	err = eventNotHandledErr;
    HICommand	cmd;
    SINT32	val;
	UInt8	value[6];
	UInt8	b;
	UInt8	update;
	int		renewal;

    if (GetEventClass(event)==kEventClassCommand && GetEventKind(event)==kEventCommandProcess ) {
        GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &cmd);
        switch (cmd.commandID)
        {
            case 'LCDy':
                setReverseStatus();
                break;
                
            case 'rati':
            case 'tram':
            case 'vram':
            case 'crgc':
            case 'RPAd':
                setFieldValue(cmd.commandID);
                break;

            case kHICommandOK:
                renewal = 0;
                val=getControlValue('uskr');
				if (np2cfg.skipline != val) {
					np2cfg.skipline = val;
					renewal = 1;
				}
                val=getControlValue('rati');
                if (val != np2cfg.skiplight);
				if (renewal) {
					pal_makeskiptable();
				}
                val=getControlValue('LCDy') | getControlValue('rvrs') << 1;
				if (np2cfg.LCD_MODE != val) {
					np2cfg.LCD_MODE = val;
					pal_makelcdpal();
					renewal = 1;
				}
				if (renewal) {
					sysmng_update(SYS_UPDATECFG);
					scrndraw_redraw();
				}

                update = 0;
                val=getControlValue('GDCl')-1;
				if (np2cfg.uPD72020 != val) {
					np2cfg.uPD72020 = val;
					update |= SYS_UPDATECFG;
					gdc_restorekacmode();
					gdcs.grphdisp |= GDCSCRN_ALLDRAW2;
				}
                val=getControlValue('GrCh')-1;
				if (np2cfg.grcg != val) {
					np2cfg.grcg = val;
					update |= SYS_UPDATECFG;
					gdcs.grphdisp |= GDCSCRN_ALLDRAW2;
				}
                val=getControlValue('16cl');
				if (np2cfg.color16 != val) {
					np2cfg.color16 = val;
					update |= SYS_UPDATECFG;
				}
    
                value[0]=getControlValue('tram');
				if (value[0]) {
					value[1] = 1;
				}
                value[2]=getControlValue('vram');
				if (value[0]) {
					value[3] = 1;
				}
                value[4]=getControlValue('crgc');
				if (value[0]) {
					value[5] = 1;
				}
				for (b=0; b<6; b++) {
					if (np2cfg.wait[b] != value[b]) {
						np2cfg.wait[b] = value[b];
						update |= SYS_UPDATECFG;
					}
				}
                val=getControlValue('RPAd');
                if (val != np2cfg.realpal) {
                    np2cfg.realpal = val;
					update |= SYS_UPDATECFG;
                }
                
                sysmng_update(update);
                endLoop(screenWin);
                err=noErr;
                break;
                
            case kHICommandCancel:
                endLoop(screenWin);
                err=noErr;
                break;
        }
    }

	(void)myHandler;
	(void)userData;
    return err;
}

static pascal OSStatus PrefsTabEventHandlerProc( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData )
{
    WindowRef theWindow = (WindowRef)inUserData;  // get the windowRef, passed around as userData    
    short ret;
    ret = changeTab(theWindow, lastPaneSelected);
    if (ret) {
        lastPaneSelected = ret;
    }
    return( eventNotHandledErr );
}

static void makeNibWindow (IBNibRef nibRef) {
    OSStatus	err;
    
    err = CreateWindowFromNib(nibRef, CFSTR("ScreenDialog"), &screenWin);
    if (err == noErr) {
        initScreenWindow();
        SetInitialTabState(screenWin, lastPaneSelected, kMaxNumTabs);
        EventTypeSpec	tabControlEvents[] ={ { kEventClassControl, kEventControlHit }};
        InstallControlEventHandler( getControlRefByID(kTabMasterSig,kTabMasterID,screenWin),  PrefsTabEventHandlerProc , GetEventTypeCount(tabControlEvents), tabControlEvents, screenWin, NULL );
        EventTypeSpec	list[]={ { kEventClassCommand, kEventCommandProcess },};
        EventHandlerRef	ref;
        InstallWindowEventHandler (screenWin, NewEventHandlerUPP(cfWinproc), GetEventTypeCount(list), list, (void *)screenWin, &ref);
        ShowSheetWindow(screenWin, hWndMain);
        
        err=RunAppModalLoopForWindow(screenWin);
    }
    return;
}

void initScreenOpt( void ) {
    OSStatus	err;
    IBNibRef	nibRef;

    err = CreateNibReference(CFSTR("np2"), &nibRef);
    if (err ==noErr ) {
        makeNibWindow (nibRef);
        DisposeNibReference ( nibRef);
    }
    else {
         return;
    }
}
                             

RetroPC.NET-CVS <cvs@retropc.net>