Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
CPrefsWindow.cp
/* |
A window that provides the user interface for editing preferences. |
Created 29 Jan 1996 by EGH |
Copyright © 1996, Apple Computer, Inc. All rights reserved. |
*/ |
#include <QuickTimeComponents.h> |
#include <String_Utils.h> |
#include "CKeyFilters.h" |
#include "CUtils.h" |
#include "CPrefsWindow.h" |
// ========= |
// constants |
const PaneIDT Button_Okay = 'okay'; |
const PaneIDT Button_Cancel = 'canc'; |
const PaneIDT Button_Compression = 'comp'; |
const PaneIDT Caption_Compression = 'coms'; |
const PaneIDT Edit_Width = 'widt'; |
const PaneIDT Edit_Height = 'heig'; |
const PaneIDT Edit_TileSuffix = 'tile'; |
const PaneIDT Edit_MovieSuffix = 'move'; |
const PaneIDT Check_ReplaceFiles = 'dele'; |
const PaneIDT Edit_Pan = 'pan '; |
const PaneIDT Edit_Tilt = 'tilt'; |
const PaneIDT Edit_Zoom = 'zoom'; |
// ========= |
//static |
CPrefsWindow *CPrefsWindow::CreatePrefsWindowWindowStream( |
LStream *inStream) |
{ |
return new CPrefsWindow(inStream); |
} |
CPrefsWindow::CPrefsWindow( |
LStream *inStream) : |
LDialogBox(inStream) |
{ |
mPrefsHdl = gApp->GetPreferences(); |
ThrowIfNil_(mPrefsHdl); |
mSpatialQuality = (*mPrefsHdl)->spatialQuality; |
mDepth = (*mPrefsHdl)->depth; |
mCodec = (*mPrefsHdl)->codec; |
} |
CPrefsWindow::~CPrefsWindow() |
{ |
} |
void CPrefsWindow::FinishCreateSelf() |
{ |
LDialogBox::FinishCreateSelf(); |
AddAttachment(new LUndoer); // for the edits |
SetValueForPaneID(Edit_Width, (*mPrefsHdl)->width); |
SetValueForPaneID(Edit_Height, (*mPrefsHdl)->height); |
LPane *pane = FindPaneByID(Edit_TileSuffix); |
if (pane != nil) |
{ |
pane->SetDescriptor((*mPrefsHdl)->tileSuffix); |
} |
pane = FindPaneByID(Edit_MovieSuffix); |
if (pane != nil) |
{ |
pane->SetDescriptor((*mPrefsHdl)->movieSuffix); |
} |
Str255 valueStr; |
LEditField *edit = (LEditField *)FindPaneByID(Edit_Pan); |
if (edit != nil) |
{ |
edit->SetKeyFilter(CKeyFilters::RealNumberFieldPositive); |
FixedToStr((*mPrefsHdl)->pan, valueStr); |
edit->SetDescriptor(valueStr); |
} |
edit = (LEditField *)FindPaneByID(Edit_Tilt); |
if (edit != nil) |
{ |
edit->SetKeyFilter(CKeyFilters::RealNumberField); |
FixedToStr((*mPrefsHdl)->tilt, valueStr); |
edit->SetDescriptor(valueStr); |
} |
edit = (LEditField *)FindPaneByID(Edit_Zoom); |
if (edit != nil) |
{ |
edit->SetKeyFilter(CKeyFilters::RealNumberFieldPositive); |
FixedToStr((*mPrefsHdl)->zoom, valueStr); |
edit->SetDescriptor(valueStr); |
} |
// find and listen to the buttons |
LButton *button; |
button = (LButton *)FindPaneByID(Button_Okay); |
ThrowIfNil_(button); |
button->AddListener(this); |
button = (LButton *)FindPaneByID(Button_Cancel); |
ThrowIfNil_(button); |
button->AddListener(this); |
button = (LButton *)FindPaneByID(Button_Compression); |
ThrowIfNil_(button); |
button->AddListener(this); |
LStdCheckBox *check = (LStdCheckBox *)FindPaneByID(Check_ReplaceFiles); |
ThrowIfNil_(check); |
check->SetValue((*mPrefsHdl)->replaceFiles); |
SetCompressionText(FindPaneByID(Caption_Compression), mCodec, mSpatialQuality); |
} |
/* CPrefsWindow::ListenToMessage |
Listen in on what is happening in the user interface. |
*/ |
void CPrefsWindow::ListenToMessage( |
MessageT inMessage, |
void *ioParam) |
{ |
switch (inMessage) |
{ |
case Button_Okay: |
{ |
(*mPrefsHdl)->codec = mCodec; |
(*mPrefsHdl)->depth = mDepth; |
(*mPrefsHdl)->spatialQuality = mSpatialQuality; |
LPane *pane; |
pane = FindPaneByID(Edit_TileSuffix); |
if (pane != nil) |
pane->GetDescriptor((*mPrefsHdl)->tileSuffix); |
pane = FindPaneByID(Edit_MovieSuffix); |
if (pane != nil) |
pane->GetDescriptor((*mPrefsHdl)->movieSuffix); |
Str255 valueStr; |
pane = FindPaneByID(Edit_Pan); |
if (pane != nil) |
{ |
pane->GetDescriptor(valueStr); |
(*mPrefsHdl)->pan = StrToFixed(valueStr); |
} |
pane = FindPaneByID(Edit_Tilt); |
if (pane != nil) |
{ |
pane->GetDescriptor(valueStr); |
(*mPrefsHdl)->tilt = StrToFixed(valueStr); |
} |
pane = FindPaneByID(Edit_Zoom); |
if (pane != nil) |
{ |
pane->GetDescriptor(valueStr); |
(*mPrefsHdl)->zoom = StrToFixed(valueStr); |
} |
(*mPrefsHdl)->width = GetValueForPaneID(Edit_Width); |
(*mPrefsHdl)->height = GetValueForPaneID(Edit_Height); |
(*mPrefsHdl)->replaceFiles = GetValueForPaneID(Check_ReplaceFiles) != 0; |
// fall through |
} |
case Button_Cancel: |
delete this; |
break; |
case Button_Compression: |
{ |
ComponentInstance ci = |
::OpenDefaultComponent(StandardCompressionType, StandardCompressionSubType); |
ThrowIfNil_(ci); |
try |
{ |
ComponentResult result; |
SCSpatialSettings ss; |
ss.codecType = mCodec; |
ss.spatialQuality = mSpatialQuality; |
ss.depth = mDepth; |
ss.codec = nil; |
result = ::SCSetInfo(ci, scSpatialSettingsType, &ss); |
ThrowIf_(result < 0); |
result = ::SCRequestImageSettings(ci); |
ThrowIf_(result < 0); |
if (result != scUserCancelled) |
{ |
result = ::SCGetInfo(ci, scSpatialSettingsType, &ss); |
ThrowIf_(result < 0); |
mCodec = ss.codecType; |
mSpatialQuality = ss.spatialQuality; |
mDepth = ss.depth; |
SetCompressionText(FindPaneByID(Caption_Compression), mCodec, mSpatialQuality); |
} |
} |
catch (ExceptionCode inErr) |
{ |
::CloseComponent(ci); |
ReportError(inErr, err_ErrorSettingCompression); |
} |
::CloseComponent(ci); |
break; |
} |
default: |
LDialogBox::ListenToMessage(inMessage, ioParam); |
} |
} |
void CPrefsWindow::FindCommandStatus( |
CommandT inCommand, |
Boolean &outEnabled, |
Boolean &outUsesMark, |
Char16 &outMark, |
Str255 outName) |
{ |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14