TweetFollow Us on Twitter

MACINTOSH C
MACINTOSH C: A Hobbyist's Guide To Programming the Mac OS in C
Version 2.3

© 2000 K. J. Bricknell

Go to Contents

(Chapter 14)

MORE ON CONTROLS

A link to the associated demonstration program listing is at the bottom of this page



Introduction

Chapter 7 - Introduction to Controls introduced the subject of controls and addressed the basic controls (push buttons, checkboxes, radio buttons, scroll bars, and pop-up menu buttons), primary group boxes (test title variant) and user panes. This chapter revisits group boxes and user panes and addresses the many remaining controls, all but one of which were introduced with Mac OS 8 and the Appearance Manager.

The controls addressed in this chapter are as follows:

Bevel button Image well Tab Edit text Slider
Group boxes Clock Progress indicator Little arrows Disclosure triangle
Picture Icon Window header Placard Static text field
Separator line Pop-up arrow Radio Group Asynchronous arrows User pane
Scrolling text box (introduced with Mac OS 8.5)

The one remaining control (the list box) will be addressed at Chapter 20 - Lists and Custom List Definition Functions.

The progress indicator will be described in this chapter and the indeterminate variant demonstrated in the associated demonstration program. However, because the use of the determinate variant is ordinarily associated with the matter of scanning for a Command-period event, the demonstration of that particular variant has been held over to the demonstation program associated with Chapter 23 - Miscellany.

Preamble - Review of Control Basics

Recall from Chapter 7 that:

  • Control definition functions (CDEFs) determine the appearance and behaviour of controls.

  • Two new features introduced with Mac OS 8 and the Appearance Manager were embedding and latency. Embedding hierarchies have implications for drawing order and hit testing.

  • Another feature introduced with Mac OS 8 and the Appearance Manager was read and write access to the various attributes of a control. Each piece of information that a particular CDEF allows access to is referenced by a control data tag. Control data tag constants are passed in the inTagName parameter of the getter and setter functions SetControlData and GetControlData.

  • FindControl is used to determine whether a mouse-down event occurred in a control and, if so, which control. FindControl returns a control part code identifying the part of the control in which the mouse-down occurred. kControlNoPart (0) is returned if the mouse-down occurred where no enabled control exists. TrackControl or HandleControlClick are used to handle user interaction with a control as long as the user holds the mouse button down. These two functions return kControlNoPart if the cursor is outside the control or control part when the mouse button is released or the relevant control part code if the user releases the mouse button while the cursor is still inside the control or control part.

  • The font for any control can be set independently of the system or window font.

  • The pop-up menu button differs from the other basic controls in that the control's initial, minimum, and maximum values do not actually represent initial, minimum and maximum values as such. For example, the minimum value field of the 'CNTL' resource for a pop-up button is used to specify the resource ID of the 'MENU' resource utilised by the control.
The use of the initial, minimum, and maximum fields for purposes other than control values as such also applies to most of the controls addressed in this chapter.

More on Embedding

As stated at Chapter 8 - Dialogs and Alerts, if the kDialogFlagsUseControlHierarchy feature bit is set in a dialog's 'dlgx' resource, the Dialog Manager creates a root control in the dialog box and establishes an embedding hierarchy.

The Dialog Manager uses AutoEmbedControl to position dialog items in an embedding hierarchy based on both visual containment and the order of the items in the item list. As items are added to a dialog box during creation, controls that already exist in the window will be containers for new controls if they both visually contain the control and are themselves embedder controls. For this reason, you should place the largest embedder controls at the beginning of the item list. As an example, the Dialog Manager will automatically embed radio buttons in a group box if, firstly, the radio buttons visually "fit" inside the group box and, secondly, the group box precedes the radio buttons in the item list.

Control Descriptions

In the following, those control types and constants introduced with Mac OS 8.5 appear in dark blue or on a dark blue background.

Bevel Buttons

A bevel button is a rectangular control with a bevelled edge which can include text, an icon, a picture, or a combination of text and an icon or picture. Bevel buttons mimic the behaviour of other button types: they can behave like push buttons; in sets, they can behave like radio buttons or checkboxes; if a menu is attached, they behave like pop-up menu buttons. Typical bevel buttons are shown at Fig 1.

(Typical Bevel Buttons)

Variants and Control Definition IDs

The bevel button CDEF resource ID is 2. The six available variants and their control definition IDs are as follows:

Variant Var Code Control Definition ID
With small (2 pixel wide) bevel. (Pop-up menu, if any, below.) 0 32 kControlBevelButtonSmallBevelProc
With medium (3 pixel wide) bevel. (Pop-up menu, if any, below.) 1 33 kControlBevelButtonNormalBevelProc
With large (4 pixel wide) bevel. (Pop-up menu, if any, below.) 2 34 kControlBevelButtonLargeBevelProc
With small (2 pixel wide) bevel. Pop-up menu on right. 4 36 KControlBevelButtonSmallBevelProc +
kControlBevelButtonMenuOnRight
With medium (3 pixel wide) bevel. Pop-up menu, if any, on right. 5 37 KControlBevelButtonNormalBevelProc +
kControlBevelButtonMenuOnRight
With large (4 pixel wide) bevel. Pop-up menu, if any, on right. 6 38 KControlBevelButtonLargeBevelProc +
kControlBevelButtonMenuOnRight

For bevel buttons containing text, if the constant kControlUsesOwningWindowsFontVariant is added to the variation code, the text will appear in the window's font.

Control Values

The following lists the initial, minimum, and maximum value settings for bevel buttons:

Control Value Content
Initial If you wish to attach a menu, the menu ID. If no menu, 0.
Minimum High byte specifies behaviour (see Bevel Button Behaviour Constants, and Bevel Button Menu Constants, below).
Low byte specifies content type (see Bevel Button and Image Well Content Type Constants, below).
Maximum Resource ID of bevel button's content if resource-based.

Note that bevel buttons have two values: the value of the bevel button and, if a menu has been attached, the value of the menu.

Bevel Button Behaviour Constants

The following bevel button behaviour constants apply to the high byte of a bevel button's minimum value. For bevel buttons created programmatically using NewControl, these constants are passed in the high byte of the minimumValue parameter.

Constant Value Description
kControlBehaviorPushbutton 0 The bevel button pops up after being clicked.
This constant is used when push button behaviour is required.
kControlBehaviorToggles 0x0100 The bevel button toggles state automatically when clicked.
This constant is used when checkbox or radio button behaviour is required.
kControlBehaviorSticky 0x0200 Once clicked, the bevel button stays down until your application sets the control's value to 0. This behaviour is useful in tool palettes.
kControlBehaviorOffsetContents 0x8000 Bevel button contents are offset (one pixel down and to the right) when button is pressed. (Some users consider that this behaviour gives a bevel button a more realistic "feel".)

Bevel Button Menu Constants

The following bevel button menu constants apply to the high byte of a bevel button's minimum value. For bevel buttons created programmatically using NewControl, these constants are passed in the high byte of the minimumValue parameter.

Constant Value Description
kControlBehaviorCommandMenu 0x2000 If this bit is set, the menu contains commands, not choices, and should not be marked with a checkmark. If this bit is set, it overrides the kControlBehaviorMultiValueMenu bit.
kControlBehaviorMultiValueMenu 0x4000 If this bit is set, the menus are multi-valued. The bevel button does not maintain the menu value as it normally would (requiring that only one item is selected at a time). This allows the user to toggle entries in a menu and have multiple items checked. In this mode, the menu value accessed using GetControlData with the kControlBevelButtonMenuValueTagwill return the value of the last menu item selected.

Bevel Button and Image Well Content Type Constants

The following bevel button and image well content type constants apply to the low byte of a bevel button's minimum value. For bevel buttons created programmatically using NewControl, these constants are passed in the low byte of the minimumValue parameter.

You can also use these constants in the contentType field of the bevel button and image well content structure (see below). You can then pass a pointer to this structure in the inBuffer parameter of GetControlData and SetControlData to get and set the resource ID (for resource-based content) or handle (for handle-based content) of a colour icon, icon suite, or picture in a bevel button.

Note that resource-based content is owned by the control, while handle-based content is owned by you. The control definition function will not dispose of handle-based content. If you replace handle-based content with resource-based content on the ßy, you must dispose of the handle properly to avoid a memory leak.

Constant Value Description
kControlContentTextOnly 0 Content type is text only. This constant is passed in the contentType field of the bevel button and image well content structure if the content is text only. The variation code kControlUsesOwningWindowsFontVariant applies when text content is used.
kControlContentIconSuiteRes 1 Content type uses an icon suite resource ID. The resource ID of the icon suite resource you wish to display should be in the resID field of the bevel button and image well content structure.
kControlContentCIconRes 2 The resource ID of the colour icon resource you wish to display should be in the resID field of the bevel button and image well content structure.
kControlContentPictRes 3 Content type is a picture resource ID. The resource ID of the picture resource you wish to display should be in the resID field of the bevel button and image well content structure.
kControlContentIconSuiteHandle 129 Content type is an icon suite handle. The handle of the icon suite you wish to display should be in the iconSuite field of the bevel button and image well content structure.
kControlContentCIconHandle 130 Content type uses a colour icon handle. The handle of the colour icon you wish to display should be in the cIconHandle field of the bevel button and image well content structure.
kControlContentPictHandle 131 Content type uses a picture handle. The handle of the picture you wish to display should be in the picture field of the bevel button and image well content structure.
kControlContentIconRef 132 Reserved.

Control Data Tag Constant - Content Type

The control data tag constant relevant to content type in bevel buttons is as follows:

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlBevelButtonContentTag Gets or sets a bevel button's content type for drawing. (See Bevel Button and Image Well Content Type Constants, above. See also The Bevel Button and Image Well Structure, below.)

Data type returned or set: ControlButtonContentInfo structure

Bevel Button Alignment and Placement Constants, and Associated Control Data Tag Constants

By calling SetControlData with certain control data tag constants, and with certain constants passed in the inData parameter, you can specify the alignment of icon suites, colour icons, pictures, and text in a bevel button, and you can specify the placement of text in relation to an icon suite, colour icon, or picture. By calling GetControlData with these constants you can also ascertain alignment and placement.

Bevel Button Graphic Alignment Constants

The following constants are used to specify the alignment of icon suites, colour icons, and pictures.

Constant Value Description
kControlBevelButtonAlignSysDirection -1 Bevel button graphic is aligned according to the system default script direction (only left or right).
kControlBevelButtonAlignCenter 0 Graphic is aligned centre.
kControlBevelButtonAlignLeft 1 Graphic is aligned left.
kControlBevelButtonAlignRight 2 Graphic is aligned right.
kControlBevelButtonAlignTop 3 Graphic is aligned top.
kControlBevelButtonAlignBottom 4 Graphic is aligned bottom.
kControlBevelButtonAlignTopLeft 5 Graphic is aligned top left.
kControlBevelButtonAlignBottomLeft 6 Graphic is aligned bottom left.
kControlBevelButtonAlignTopRight 7 Graphic is aligned top right.
kControlBevelButtonAlignBottomRight 8 Graphic is aligned bottom right.

Bevel Button Text Alignment Constants

The following constants are used to specify the alignment of text.

Constant Value Description
kControlBevelButtonAlignTextSysDirection 0 Text is aligned according to the current script direction (left or right).
kControlBevelButtonAlignTextCenter 1 Text is aligned centre.
kControlBevelButtonAlignTextFlushRight -1 Text is aligned flush right.
kControlBevelButtonAlignTextFlushLeft -2 Text is aligned flush left.

Bevel Button Text Placement Constants

The following constants are used to specify the placement of text in relation to an icon suite, colour icon, or picture.

Constant Value Description
kControlBevelButtonPlaceSysDirection -1 Text is placed according to the system default script direction.
kControlBevelButtonPlaceNormally 0 Text is centred.
kControlBevelButtonPlaceToRightOfGraphic 1 Text is placed to the right of the graphic.
kControlBevelButtonPlaceToLeftOfGraphic 2 Text is placed to the left of the graphic.
kControlBevelButtonPlaceBelowGraphic 3 Text is placed below the graphic.
kControlBevelButtonPlaceAboveGraphic 4 Text is placed above the graphic.

Control Data Tag Constants - Alignment and Placement

The control data tag constants relevant to the alignment and placement of graphics and text in bevel buttons are as follows:

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlBevelButtonTextAlignTag Gets or sets the alignment of text in a bevel button. (See Bevel Button Text Alignment Constants, above.)

Data type returned or set: ControlButtonTextAlignment

kControlBevelButtonGraphicAlignTag Gets or sets the alignment of graphics in a bevel button in relation to any text the button may contain. (See Bevel Button Graphic Alignment Constants.)

Data type returned or set: ControlButtonGraphicAlignment

kControlBevelButtonTextPlaceTag Gets or sets the placement of a bevel button's text. (See Bevel Button Text Placement Constants, above.)

Data type returned or set: ControlButtonTextPlacement

kControlBevelButtonTextOffsetTag Gets or sets the number of pixels that text is offset in a bevel button from the button's left or right edge. This is used with left, right, or system justification, but it is ignored when the text is centre aligned.

Data type returned or set: SInt16

kControlBevelButtonGraphicOffsetTag Gets or sets the horizontal and vertical amounts that a graphic element contained in a bevel button is offset from the button's edges. This value is ignored when the graphic is specified to be centred on the button.

Data type returned or set: Point

The Bevel Button and Image Well Content Structure

As previously stated, you can use bevel button and image well content type constants in the contentType field of the bevel button and image well content structure and you can then pass a pointer to this structure in the inBuffer parameter of GetControlData and SetControlData. The bevel button and image well content structure is as follows:

     struct ControlButtonContentInfo 
     {
       ControlContentType contentType;
       union 
       {
         Sint16       resID;
         CIconHandle  cIconHandle;
         Handle       iconSuite;
         Handle       iconRef;
         PicHandle    picture;
       } u;
     };
     typedef struct ControlButtonContentInfo ControlButtonContentInfo;
     typedef ControlButtonContentInfo *ControlButtonContentInfoPtr;

Field Descriptions

contentType Specifies the bevel button or image well content type and whether the content is text-only, resource-based, or handle-based. (See Bevel Button and Image Well Content Type Constants, above.) The value specified in the contentType field determines which of the other fields in the structure are used.
resID If the content type specified in the contentType field is kControlContentIconSuiteRes, kControlContentCIconRes, or kControlContentPictRes, this field contains the resource ID of a picture, colour icon, or icon suite resource.
cIconHandle If the content type specified in the contentType field is kControlContentCIconHandle, this field contains a handle to a colour icon.
iconSuite If the content type specified in the contentType field is kControlContentIconSuiteHandle, this field contains a handle to an icon suite.
iconRef Reserved.
picture If the content type specified in the contentType field is kControlContentPictHandle, this field contains a handle to a picture.

Other Control Data Tag Constants

The remaining control data tag constants relevant to bevel buttons are as follows:

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlBevelButtonCenterPopUpGlyphTag Gets or sets the position of the pop-up arrow in a bevel button when a pop-up menu is attached.

Data type returned or set: Boolean. If true, glyph is vertically centred on the right; if false, glyph is on the bottom right.

kControlBevelButtonTransformTag Gets or sets a transform that is added to the standard transform of a bevel button. See the Icons section at Chapter 13 - Offscreen Graphics Worlds, Pictures, Cursors, and Icons.)

Data type returned or set: IconTransformType

kControlBevelButtonMenuValueTag Gets the menu value for a bevel button with an attached menu. (See "Bevel Button Menu Constants, above.)

Data type returned or set: SInt16

kControlBevelButtonMenuHandleTag Gets the menu handle for a bevel button with an attached menu.

Data type returned or set: MenuHandle

kControlBevelButtonLastMenuTag Gets the menu ID of the last menu selected in the submenu or main menu.

Data type returned or set: Boolean

kControlBevelButtonMenuDelayTag Gets or sets the delay (in number of ticks) before the menu is displayed.

Data type returned or set: SInt32

kControlBevelButtonScaleIconTag Gets or sets whether, when the proper icon size is unavailable, the icon should be scaled. For use only with icon suites or the IconRef data type.

Data type returned or set: Boolean. If true, indicates that if an icon of the ideal size is not available a larger or smaller icon should be scaled. If false, no scaling should occur; instead, a smaller icon should be drawn or a larger icon clipped.

With regard to the kControlBevelButtonMenuDelayTag constant, setting a delay before the menu is displayed in a bevel button with sticky behaviour is useful for providing option sets in tool palettes. You can set up the bevel button so that:

  • If the user clicks it once, it simply turns on the function represented by the button.

  • If the user presses it for longer than the user-set double-click time, it displays a pop-up menu which offers further options for that function.

Control Part Codes

The following control part codes are relevant to bevel buttons:

Constant Value Description
kControlNoPart 0 For bevel buttons with a menu attached, this part code indicates that either the mouse was released outside the bevel button and menu or that the button was disabled.
kControlMenuPart 2 For bevel buttons with a menu attached, this part code indicates that the event occurred in a menu item of the bevel button.
kControlButtonPart 10 For bevel buttons with a menu attached, this part code indicates that the event occurred in the button but not in the attached menu.

Bevel Button States

Bevel buttons can exist in five active states and two disabled states. The active states are off, pressed (was off), on, pressed (was on), and mixed. The mixed state is used, where appropriate, when the bevel button is behaving as a checkbox or radio button. Disabled bevel buttons can be shown as off or on.

Under platinum appearance, both pressed states look the same, but this may change in future themes.



Image Wells

Image wells are used to display non-text visual content, such as icons or pictures. They have a two-pixel-wide rectangular frame and have a recessed appearance with a white background fill. Image wells are controlled in much the same way as bevel buttons, but with fewer options and states. They should not be used in place of push buttons or bevel buttons. Typical image wells are shown at Fig 2.

(Image wells)

Variants and Control Definition IDs

The image well CDEF resource ID is 11. The two available variants and their control definition IDs are as follows:

Variant Var Code Control Definition ID
Image well. 0 176 kControlImageWellProc
Image well with autotracking. 1 177 kControlImageWellAutoTrackProc

Future versions will support drag-and-drop functionality.

Control Values

Control Value Content
Initial Resource ID of image well's content ('cicn', 'PICT' or icon suite).
Minimum Content type. (See Bevel Button and Image Well Content Type Constants, above.) After the image well is created, reset to 0.
Maximum Ignored. Reset to 2 after creation.

Bevel Button and Image Well Content Type Constants and The Bevel Button and Image Well Content Structure

The bevel button and image well content type constants (see Bevel Buttons, above) apply to an image well's minimum value. For image wells created programmatically using NewControl, these constants are passed in the minimumValue parameter.

You can also use these constants in the contentType field of the bevel button and image well content structure (see Bevel Buttons, above). You can then pass a pointer to this structure in the inBuffer parameter of GetControlData and SetControlData to get and set the resource ID (for resource-based content) or handle (for handle-based content) of a colour icon, icon suite, or picture in an image well.

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlImageWellContentTag Gets or sets the content for an image well. (See The Bevel Button and Image Well Content Structure, above.)

Data type returned or set: ControlButtonContentInfo structure

kControlImageWellTransformTag Gets or sets a transform that is added to the standard transform of an image well. (See the Icons section at Chapter 13 - Offscreen Graphics Worlds, Pictures, Cursors, and Icons.)

Data type returned or set: IconTransformType

Control Part Codes

Constant Value Description
kControlImageWellPart 26 Event occurred in an image well.



Tab Control (Embedding Control)

The tab control is an embedding control which provides a convenient way to present information in a multi-page format. The tab control is distinguished by the visual appearance of folder tabs. The user selects the desired "page" by clicking the appropriate tab, which highlights and displays its page.

The tab control supports one row of tabs running along the top (see Fig 3). You specify the names and icons that label the tabs.

(Tab control)

The appearance of the content area of a tab control (also known as a pane) depends on where it is used. In a control panel, the sides of the pane should be tucked under the edge of the content region by one pixel. In a modal dialog box, the left and right sides of the pane should be inset two pixels from the edge of the dialog box's content region. This small distinction helps emphasise the fact that the tab is part of a dialog box. (See Fig 3.)

Controls such as push buttons, radio buttons, scroll bars, etc., may be used within a tab control, and should be embedded within an individual pane. Controls whose effect is intended to be global (that is, their setting are intended to affect all the panes in a set of tabs) should be located outside the tab control. It is important that you make such distinctions unambiguous to the user through clear, specific labelling and placement.

The tab information ('tab#') resource is used to provide the tab names and icon suite IDs.

Variants and Control Definition IDs

The tab control CDEF resource ID is 8. The two available variants and their control definition ID are follows:

Variant Var Code Control Definition ID
Normal tab control. 0 128 kControlTabLargeProc
Small tab control. 1 129 kControlTabSmallProc

Control Values

Control Value Content
Initial Resource ID of the 'tab#' resource you are using to hold tab information. Reset to the minimum setting after creation. A value of 0 indicates not to read a 'tab#' resource. (See The Tab Information Structure, below.)
Minimum Ignored. Reset to 1 after creation.
Maximum Ignored. Reset to the number of individual tabs in the tab control after creation.

Control Data Tag Constants

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlTabContentRectTag Gets the content rectangle of a tab control.

Data type returned or set: Rect

kControlTabEnabledFlagTag Enables or disables a single tab in a tab control.

Data type returned or set: Boolean; if true, enabled; if false, disabled.

kControlTabInfoTag Gets or sets information for a tab in a tab control. (See The Tab Information Structure, below.)

Data type returned or set: ControlTabInfoRec

The Tab Information Structure

If you are not creating a tab control with a 'tab#' resource, you can call SetControlMaximum to set the number of tabs in a tab control and then call SetControlData with the kControlTabInfoTag to set the information for an individual tab in a tab control. The tab information structure passed in the SetControlData call is as follows:

     struct ControlTabInfoRec
     {
       SInt16  version;
       SInt16  iconSuiteID;
       Str255  name;
     };

Field Descriptions

version A signed 16-bit integer indicating the version of the tab information structure. The only currently available version value is 0.
iconSuiteID A signed 16-bit integer indicating the ID of an icon suite to be used for the tab label. Pass 0 for no icon.
name A string specifying the title to be used for the tab label.

The Tab Information Resource

You can use a tab information resource to specify the icon suite ID and name of each tab in a tab control. A tab information resource is a resource of type 'tab#'. All tab information resources must have resource ID numbers greater than 127. The Control Manager uses the information you specify to provide additional information to the corresponding tab control. Fig 4 shows the structure of a compiled 'tab#' resource.

('tab#' resource)

The following describes the fields of a compiled 'tab#' resource and one of its tab information entries:

Field Description
VERSION NUMBER An integer specifying the version of the resource.
NUMBER OF ENTRIES An integer that specifies the number of tab information entries in the resource.
ICON SUITE ID Icon suite resource ID.
TAB NAME A variable-length string indicating the tab name.



Edit Text

Edit text controls are rectangular areas in which the user enters text or modifies existing text. Edit text controls supports keyboard focus and a password entry variant is available. Fig 5 shows a typical edit text control.

(Edit text field)

Edit text controls can have an application-defined key filter function attached to filter key strokes or modify them on return.

Variants and Control Definition IDs

The edit text field CDEF resource ID is 17. The three available variants and their control definition IDs are as follows:

Variant Var Code Control Definition ID
Editable text control for windows. This control maintains its own TEHandle. 0 272 kControlEditTextProc
Editable text control for dialog boxes. This control uses the dialog box common TEHandle. 1 273 kControlEditTextDialogProc
Editable text control for passwords. This control is supported by the Script Manager. Password text can be accessed via the kEditTextPasswordTag constant. (See Control Data Tag Constants, below.) 2 274 kControlEditTextPasswordProc
Edit text control for inline input. This control supports 2-byte script systems. 4 276 kControlEditTextInlineInputProc

Control Values

Control Value Content
Initial Reserved. Set to 0.
Minimum Reserved. Set to 0.
Maximum Reserved. Set to 0.

Control Data Tag Constants

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlEditTextTextTag Gets or sets text in an editable text control.

Data type returned or set: character buffer

kControlEditTextTEHandleTag Gets a handle to a text edit structure.

Data type returned or set: TEHandle

kControlEditTextSelectionTag Gets or sets the selection in an editable text control.

Data type returned or set: ControlEditTextSelectionRec structure. (See The Edit Text Selection Structure, below.)

kControlEditTextPasswordTag Gets clear password text from an editable text control, that is, the text of the actual password typed, not the bullet text.

Data type returned or set: character buffer

kControlKeyFilterTag Gets or sets a key filter function.

Data type returned or set: ControlKeyFilterUPP

kControlEditTextStyleTag Gets or sets the font style.

Data type returned or set: ControlFontStyleRec

KControlEditTextLockedTag Gets or sets whether the text is currently editable.

Data type returned or set: Boolean. If true, text is locked. If false, text is editable

kControlEditTextValidationProcTag Gets or sets a universal procedure pointer to a callback function which can be used to validate editable text after an operation that changes the text, such as a cut or paste.

Data type returned or set: ControlEditTextValidationUPP

Control Part Codes

Constant Value Description
kControlEditTextPart 5 Event occurred in an edit text control.

The Edit Text Selection Structure

You can pass a pointer to the edit text selection structure to GetControlData and SetControlData to access and set the current selection range in an edit text control. An edit text selection structure is of type ControlEditTextSelectionRec:

     struct ControlEditTextSelectionRec 
     {
       SInt16  selStart;
       SInt16  selEnd;
     };
     typedef struct ControlEditTextSelectionRec ControlEditTextSelectionRec;
     typedef ControlEditTextSelectionRec *ControlEditTextSelectionPtr;

Field Descriptions

selStart A signed 16-bit integer indicating the beginning of the edit text selection.
selEnd A signed 16-bit integer indicating the end of the edit text selection.



Sliders

A slider control consists of a slider bar, which displays a range of allowable values, and an indicator, which marks the current setting. The user can drag the indicator to set a new value within the range. Sliders can be horizontal or vertical. The indicator can point in any direction or be nondirectional. Typical sliders are shown at Fig 6.

(Sliders)

A slider can display tick marks to represent increments within the range of values. You can specify the number of tick marks required. If you use tick marks, they are drawn appropriately for the direction of the slider. You should ensure that tick marks are labelled so that they clearly indicate the effect of moving the indicator.

A live feedback variant is available. This variant continually updates the value of the control as the indicator is dragged, as opposed to the standard behaviour of updating the value only when the mouse button is released.

Variants and Control Definition IDs

The slider CDEF resource ID is 3. The ten available variants and their control definition IDs are as follows:

Variant Var Code Control Definition ID
Slider. If the slider is horizontal, the indicator points down, and if the slider is vertical, the indicator points right. 0 48 kControlSliderProc
Slider with live feedback. The value of the control is updated automatically by the Control Manager before your action function is called. If no application-defined action function is supplied, the slider draws ghosted image of the indicator as the user moves it. 1 49 kControlSliderProc +
kControlSliderLiveFeedback
Slider with tick marks. The control rectangle must be large enough to include the tick marks. 2 50 kControlSliderProc +
kControlSliderHasTickMarks
Slider with live feedback and tick marks. 3 51 kControlSliderProc + kControlSliderLiveFeedback +
kControlSliderHasTickMarks
Slider with indicator reversed. . If the slider is horizontal, the indicator points up, and if the slider is vertical, the indicator points left. 4 52 kControlSliderProc +
kControlSliderReverseDirection
Slider with live feedback and indicator reversed. 5 53 kControlSliderProc+ kControlSliderLiveFeedback +
kControlSliderReverseDirection
Slider with tick marks and indicator reversed. 6 54 kControlSliderProc +
kControlSliderHasTickMarks +
kControlSliderReverseDirection
Slider with live feedback, tick marks and indicator reversed. 7 55 kControlSliderProc +
kControlSliderLiveFeedback +
kControlSliderHasTickMarks +
kControlSliderReverseDirection
Slider with a rectangular, non-directional indicator. 8 56 kControlSliderProc +
kControlSliderNonDirectional
Slider with live feedback and a rectangular, non-directional indicator. 9 57 kControlSliderProc +
kControlSliderLiveFeedback +
kControlSliderNonDirectional

Control Values

Control Value Content
Initial Appropriate value between -32768 and 32768. For the tick mark variant, the number of ticks required. Reset to the minimum setting after creation.
Minimum -32768 to 32768.
Maximum -32768 to 32768. When the maximum setting is equal to the minimum setting, the slider is inactive.

Control Part Codes

Constant Value Description
kControlIndicatorPart 129 Event occurred in the indicator.



Group Boxes (Embedding Control)

Group boxes are embedding controls used to associate, isolate, and distinguish groups of related items in a dialog box. You can embed other controls, such as radio groups, checkboxes, and pop-up menu buttons, within group boxes.

Group boxes are defined as either primary or secondary. The main visual distinction between the two types is their border: primary group box border lines are two pixels wide with an etched look; secondary group box borders are one pixel wide.

You can use any of four titling options for the border of a group box. The group box can be untitled or it can have a text title, a pop-up menu title, or a checkbox title. Group boxes with a pop-up menu title are useful for displaying a variety of related settings in a limited space. Group boxes with a checkbox title are useful for indicating that a group of settings may be deactivated by the user.

Secondary group boxes are generally used for nesting and grouping together subsidiary information. Secondary group boxes should not be used in lieu of primary group boxes, since this produces an inconsistent appearance which could confuse users.

Typical group boxes are shown at Fig 7.

(Group boxes)

Variants and Control Definition IDs

The group box CDEF resource ID is 10. The six available variants and their control definition IDs are as follows:

Variant Var Code Control Definition ID
Primary group box, text title. 0 160 kControlGroupBoxTextTitleProc
Primary group box, checkbox title. 1 161 kControlGroupBoxCheckBoxProc
Primary group box, pop-up button title. 2 162 kControlGroupBoxPopupButtonProc
Secondary group box, text title. 4 164 kControlGroupBoxSecondaryTextTitleProc
Secondary group box, checkbox title. 5 165 kControlGroupBoxSecondaryCheckBoxProc
Secondary group box, pop-up button title. 6 166 kControlGroupBoxSecondaryPopupButtonProc

Control Values

Control Value Content
Initial Ignored if group box has text title.
If the group box has a checkbox or pop-up button title, same value as the checkbox or pop-up button.
Minimum Ignored if group box has text title.
If the group box has a checkbox or pop-up button title, same minimum setting as the checkbox or pop-up button.
Maximum Ignored if group box has text title.
If the group box has a checkbox or pop-up button title, same maximum setting as the checkbox or pop-up button.

Control Data Tag Constant

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlGroupBoxMenuHandleTag Gets the menu handle of a group box.

Data type returned or set: MenuHandle

kControlGroupBoxFontStyleTag Gets or sets the font style.

Data type returned or set: ControlFontStyleRec

Control Part Codes

Constant Value Description
kControlNoPart 0 Returned if the group box title is a text title.
If the group box title is a checkbox title or a pop-up menu button title, the user tracked completely out of the control.
kControlButtonPart 10 The group box title is a checkbox title and the check box was hit.
The group box title is a pop-up menu button and the mouse button was released over the button.
kControlMenuPart 2 The group box title is a pop-up menu button and the mouse button was released in the menu.



Clock

Clock controls are a combination of an edit text control and little arrows. The user can change the date and time displayed by using the little arrows or by typing a value into the edit text control. Fig 8 shows a clock control displaying the date.

(Clock control (date))

The clock control supports keyboard navigation and focus. When the clock control has keyboard focus, pressing the up-arrow and down-arrow keys has the same effect as clicking the up and down arrows in the control.

Variants and Control Definition IDs

The clock control CDEF resource ID is 15. The four available variants and their control definition ID are follows:

Variant Var Code Control Definition ID
Clock control displaying hour/minutes. 0 240 kControlClockTimeProc
Clock control displaying hours/minutes/seconds. 1 241 kControlClockTimeSecondsProc
Clock control displaying date/month/year. 2 242 kControlClockDateProc
Clock control displaying month/year. 3 243 kControlClockMonthYearProc

Control Values

Control Value Content
Initial One or more of the clock value flags. (See Clock Value Flag Constants, below.) Reset to 0 after creation.
Minimum Reserved. Set to 0.
Maximum Reserved. Set to 0.

Clock Value Flag Constants

Constant Value Description
kControlClockNoFlags 0 Indicates that clock is editable but does not display the current "live" time.
kControlClockIsDisplayOnly 1 When only this bit is set, the clock is not editable. When this bit and the kControlClockIsLive bit is set, the clock automatically updates on idle (clock will have the current time).
kControlClockIsLive 2 When only this bit is set, the clock automatically updates on idle and any changes to the clock affect the system clock. When this bit and the kControlClockIsDisplayOnly bit is set, the clock automatically updates on idle (clock will have the current time), but is not editable.

Control Data Tag Constant

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlClockLongDateTag Gets or sets the clock control's time or date.

Data type returned or set: LongDateRec structure.

kControlClockFontStyleTag Gets or sets the font style.

Data type returned or set: ControlFontStyleRec

Control Part Codes

Constant Value Description
kControlClockPart 8 Event occurred in a clock control.
kControlClockHourDayPart 9 Event occurred in the part that contains the hour.
kControlClockMinuteMonthPart 10 Event occurred in the part that contains the minute or the month.
kControlClockSecondYearPart 11 Event occurred in the part that contains the second or the year.
kControlClockAMPMPart 12 Event occurred in the part that contains the AM/PM information.



Progress Indicators

Progress indicators are used to indicate that a lengthy operation is in progress. Two types of progress indicators can be used: an indeterminate progress indicator, which shows that an operation is occurring but does not indicate its duration; a determinate progress indicator, which shows how much of the operation has been completed. The two types are shown at Fig 9. Progress indicators are horizontal in orientation.

(Progress indicators)

You might use a determinate progress indicator to, for example, show the progress of a file copying operation. You might use an indeterminate progress indicator to, for example, let the user know that the application is in the process of attempting a communication connection or is waiting to receive data during file transfer. You should consider switching from an indeterminate progress indicator to a determinate one if a process reaches a point where its scope becomes determinable. For example, a remote file transfer may not become determinate until the application has had time to establish a connection and calculate the data transfer rate.

Variants and Control Definition IDs

The progress indicator CDEF resource ID is 5. The one available variant and its control definition ID is follows:

Variant Var Code Control Definition ID
Progress indicator. To make the control determinate or indeterminate, set the kControlProgressBarIndeterminateTag constant. (See Control Data Tag Constant Relevant to Progress Indicators, below.) 0 80 kControlProgressBarProc

Progress Indicator Control Values

Control Value Content
Initial Appropriate value between -32768 and 32768.
Minimum -32768 to 32768.
Maximum -32768 to 32768.

Control Data Tag Constant

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlProgressBarIndeterminateTag Gets or sets whether a progress indicator is determinate or indeterminate.

Data type returned or set: Boolean. If true, switches to an indeterminate progress indicator. If false, switches to an determinate progress indicator.



Little Arrows

Little arrows provide the user with a means of increasing or decreasing values in a series, and consists of two arrows pointing in opposite directions. Little arrows should be accompanied by a label that identifies the content to which the control relates.

If the user clicks the up arrow, the value displayed is incremented by one unit of change. If the user presses the arrow, the value increases or decreases until the user releases the mouse button. While the user presses the arrow, it is highlighted to provide feedback to the user.

The unit of change should depend on the content. If the content area displays years, for example, the increment should be one year. On the other hand, if you used little arrows to control the size of a RAM cache, for example, you might use multiples of 32K as the increment.

Fig 10 shows a little arrows control used in conjunction with a placard and static text controls.

(Little arrows)

Variant and Control Definition ID

The little arrows CDEF resource ID is 6. The one available variant and its control definition ID is as follows:

Variant Var Code Control Definition ID
Little arrows. 0 96 kControlLittleArrowsProc

Control Values

Control Value Content
Initial Appropriate value between -32768 and 32768.
Minimum -32768 and 32768.
Maximum -32768 and 32768.

Control Part Codes

Constant Value Description
kControlUpButtonPart 20 Event occurred in up arrow.
kControlDownButtonPart 21 Event occurred in down arrow.



Disclosure Triangles

Disclosure triangles are controls that allow the display or "disclosure" of information which elaborates on the primary information in a window. Disclosure triangles have two possible values: 0 for collapsed and 1 for expanded.

One usage of the disclosure triangle is to expand a dialog box or control panel. When the user clicks on the disclosure triangle, the triangle rotates downward and the window expands to provide additional information. A further click on the triangle rotates the triangle back to the right and restores the original appearance of the window.

Another usage pertains to list views (see Fig 11). The triangle appears next to the icon of each folder in the window. The user clicks the triangle to expand the view by revealing a list of the contents of the folder without opening it. The triangle rotates downward when the folder is expanded, which tells the user that the view is expanded even in cases when the folder is empty. Clicking the triangle again restores the view to its original (collapsed) state and turns the triangle back to the right.

(Disclosure triangles)

Variants and Control Definition IDs

The disclosure triangle CDEF resource ID is 4. The one available variant and its control definition ID is as follows:

Variant Var Code Control Definition ID
Disclosure triangle. 0 64 kControlTriangleProc
Left-facing disclosure triangle. 1 65 kControlTriangleLeftFacingProc
Auto-tracking disclosure triangle. This variant maintains its last value, so it knows what transition is taking place when a SetControlValue is called on it (expanded to collapsed, or vice versa). (See Control Data Tag Constants, below.) 2 66 kControlTriangleAutoToggleProc
Left-facing, auto-tracking disclosure triangle. 3 67 kControlTriangleLeftFacingAutoToggleProc

Control Values

Control Value Content
Initial 0 (collapsed) or 1 (expanded)
Minimum 0 (collapsed)
Maximum 1 (expanded)

Control Data Tag Constant

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlTriangleLastValueTag Gets or sets the last value of a disclosure triangle. Used primarily for setting up a disclosure triangle properly when using the kControlTriangleAutoToggleProc variant.

Data type returned or set: SInt16

Control Part Codes

Constant Value Description
kControlTrianglePart 4 Event occurred in a disclosure triangle.



Picture

Picture controls display pictures.

Variants and Control Definition IDs

The picture control CDEF resource ID is 19. The two available variants and their control definition IDs are as follows:

Variant Var Code Control Definition ID
Picture control. 0 304 kControlPictureProc
Non-tracking picture control. If hit, immediately returns the control part code kControlNoPart and does not track. 1 305 kControlPictureNoTrackProc

Control Values

Control Value Content
Initial Resource ID of the 'PICT' resource you wish to display. Reset to 0 after creation.
Minimum Reserved. Set to 0.
Maximum Reserved. Set to 0.

Control Part Codes

Constant Value Description
kControlPicturePart 6 Event occurred in a picture control.



Icon

Icon controls display colour icons and icons from an icon suite.

A non-tracking variant is available for use in dialog boxes which have an embedding hierarchy and want an icon. This variant just returns the part hit immediately; it does not actually track the mouse.

Variants and Control Definition IDs

The icon CDEF resource ID is 20. The four available variants and their control definition IDs are as follows:

Variant Var Code Control Definition ID
Icon control. 0 320 kControlIconProc
Non-tracking icon. If hit, immediately returns the control part code kControlIconPart without tracking. 1 321 kControlIconNoTrackProc
Icon suite. 2 322 kControlIconSuiteProc
Non-tracking icon suite. If hit, immediately returns the control part code kControlIconPart without tracking. 3 323 kControlIconSuiteNoTrackProc
Supports all standard types of icon-based content. 4 324 kControlIconRefProc
Supports all standard types of icon-based content. Non-tracking variant. 5 325 kControlIconRefNoTrackProc

Control Values

Control Value Content
Initial Resource ID of the 'cicn', 'ICON', or icon suite resource you wish to display. (The icon suite variant looks for an icon suite. If not found, it looks for a 'cicn' or 'ICON' resource.) Reset to 0 after creation.
Minimum Reserved. Set to 0.
Maximum Reserved. Set to 0.

Control Data Tag Constants

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlIconTransformTag Gets or sets a transform that is added to the standard transform for an icon. (See Chapter 13 - Offscreen Graphics Worlds, Pictures, Cursors, and Icons.)

Data type returned or set: IconTransformType

kControlIconAlignmentTag Gets or sets an icon's position. (See Chapter 13 - Offscreen Graphics Worlds, Pictures, Cursors, and Icons.)

Data type returned or set: IconAlignmentType

kControlIconResourceIDTag Gets or sets the resource ID of the icon to use

Data type returned or set: Sint16

kControlIconContentTag Gets or sets the type of content to be used in an icon control.

Data type returned or set: ControlButtonContentInfo

Control Part Codes

Constant Value Description
kControlIconPart 7 Event occurred in an icon control.



Window Headers (Embedding Control)

Window headers (see Fig 12) are bevelled rectangles which should be located at the top of a window's content region and used to provide information about the window's contents. The outside lines should share the same space as the inside lines of the document window and the scroll bar arrows.

(Window header)

The list view header variant provides the same functionality as the window header, but removes the line which separates a standard window header from the content area.

Variants and Control Definition IDs

The window header CDEF resource ID is 21. The two available variants and their control definition IDs are as follows:

Variant Var Code Control Definition ID
Window header. 0 336 kControlWindowHeaderProc
Window list view header. 1 337 kControlWindowListViewHeaderProc

Control Values

Control Value Content
Initial Reserved. Set to 0.
Minimum Reserved. Set to 0.
Maximum Reserved. Set to 0.



Placard (Embedding Control)

Placards, which are embedding controls, are rectangular controls used as an information display or as background fill for a control area. Typically, placards are used as a small information panel placed at the bottom of a window to the left of the horizontal scroll bar (see Fig 13).

(Placard)

Variants and Control Definition IDs

The placard CDEF resource ID is 14. The one available variant and its control definition ID is as follows:

Variant Var Code Control Definition ID
Placard. 0 224 kControlPlacardProc

Future versions will provide a push button variant.

Control Values

Control Value Content
Initial Reserved. Set to 0.
Minimum Reserved. Set to 0.
Maximum Reserved. Set to 0.



Static Text

Static text controls display static text, that is, text that cannot be changed by the user.

Variant and Control Definition ID

The static text control CDEF resource ID is 18. The one available variant and its control definition ID is as follows:

Variant Var Code Control Definition ID
Static text control. 0 288 kControlStaticTextProc

Control Values

Control Value Content
Initial Reserved. Set to 0.
Minimum Reserved. Set to 0.
Maximum Reserved. Set to 0.

Control Data Tag Constants

Control Data Tag Constant Meaning and Data Type Returned or Set
kControlStaticTextTextTag Gets or sets text in a static text control.

Data type returned or set: character buffer

kControlStaticTextTextHeightTag Gets the height of text in a static text control.

Data type returned or set: SInt16

kControlStaticTextStyleTag Gets or sets the font style.

Data type returned or set: ControlFontStyleRec

kControlStaticTextTruncTag Gets or or sets how text is truncated at the end of a line for a static text control.

Data type returned or set: TruncCode. The value truncEnd indicates that characters are truncated off the end of the string. truncMiddle indicates that characters are truncated from the middle of the string. The default is -1, which indicates that no truncation occurs and, instead, the text is wrapped.



Separator Lines

Separator lines (see Fig 14) are two-pixel-wide vertical or horizontal lines used to visually separate groups of controls. The orientation of the bounding rectangle determines the orientation of the line.

(Separator line)

Variants and Control Definition IDs

The separator line CDEF resource ID is 9. The one available variant and its control definition ID is as follows:

Variant Var Code Control Definition ID
Separator line. 0 144 kControlSeparatorLineProc

Control Values

Control Value Content
Initial Reserved. Set to 0.
Minimum Reserved. Set to 0.
Maximum Reserved. Set to 0.



Pop-up Arrows

The pop-up arrow control simply draws the pop-up glyph.

Variants and Control Definition IDs

The pop-up arrow CDEF resource ID is 12. The eight available variants and their control definition IDs are as follows:

Variant Var Code Control Definition ID
Large, right-facing pop-up arrow. 0 192 kControlPopupArrowEastProc
Large, left-facing pop-up arrow. 1 193 kControlPopupArrowWestProc
Large, up-facing pop-up arrow. 2 194 kControlPopupArrowNorthProc
Large, down-facing pop-up arrow. 3 195 kControlPopupArrowSouthProc
Small, right-facing pop-up arrow. 4 196 kControlPopupArrowSmallEastProc
Small, left-facing pop-up arrow. 5 197 kControlPopupArrowSmallWestProc
Small, up-facing pop-up arrow. 6 198 kControlPopupArrowSmallNorthProc
Small, down-facing pop-up arrow. 7 198 kControlPopupArrowSmallSouthProc

Control Values

Control Value Content
Initial Reserved. Set to 0.
Minimum Reserved. Set to 0.
Maximum Reserved. Set to 0.



Go to Part 2
 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All

Summon your guild and prepare for war in...
Netmarble is making some pretty big moves with their latest update for Seven Knights Idle Adventure, with a bunch of interesting additions. Two new heroes enter the battle, there are events and bosses abound, and perhaps most interesting, a huge... | Read more »
Make the passage of time your plaything...
While some of us are still waiting for a chance to get our hands on Ash Prime - yes, don’t remind me I could currently buy him this month I’m barely hanging on - Digital Extremes has announced its next anticipated Prime Form for Warframe. Starting... | Read more »
If you can find it and fit through the d...
The holy trinity of amazing company names have come together, to release their equally amazing and adorable mobile game, Hamster Inn. Published by HyperBeard Games, and co-developed by Mum Not Proud and Little Sasquatch Studios, it's time to... | Read more »
Amikin Survival opens for pre-orders on...
Join me on the wonderful trip down the inspiration rabbit hole; much as Palworld seemingly “borrowed” many aspects from the hit Pokemon franchise, it is time for the heavily armed animal survival to also spawn some illegitimate children as Helio... | Read more »
PUBG Mobile teams up with global phenome...
Since launching in 2019, SpyxFamily has exploded to damn near catastrophic popularity, so it was only a matter of time before a mobile game snapped up a collaboration. Enter PUBG Mobile. Until May 12th, players will be able to collect a host of... | Read more »
Embark into the frozen tundra of certain...
Chucklefish, developers of hit action-adventure sandbox game Starbound and owner of one of the cutest logos in gaming, has released their roguelike deck-builder Wildfrost. Created alongside developers Gaziter and Deadpan Games, Wildfrost will... | Read more »
MoreFun Studios has announced Season 4,...
Tension has escalated in the ever-volatile world of Arena Breakout, as your old pal Randall Fisher and bosses Fred and Perrero continue to lob insults and explosives at each other, bringing us to a new phase of warfare. Season 4, Into The Fog of... | Read more »
Top Mobile Game Discounts
Every day, we pick out a curated list of the best mobile discounts on the App Store and post them here. This list won't be comprehensive, but it every game on it is recommended. Feel free to check out the coverage we did on them in the links below... | Read more »
Marvel Future Fight celebrates nine year...
Announced alongside an advertising image I can only assume was aimed squarely at myself with the prominent Deadpool and Odin featured on it, Netmarble has revealed their celebrations for the 9th anniversary of Marvel Future Fight. The Countdown... | Read more »
HoYoFair 2024 prepares to showcase over...
To say Genshin Impact took the world by storm when it was released would be an understatement. However, I think the most surprising part of the launch was just how much further it went than gaming. There have been concerts, art shows, massive... | Read more »

Price Scanner via MacPrices.net

You can save $300-$480 on a 14-inch M3 Pro/Ma...
Apple has 14″ M3 Pro and M3 Max MacBook Pros in stock today and available, Certified Refurbished, starting at $1699 and ranging up to $480 off MSRP. Each model features a new outer case, shipping is... Read more
24-inch M1 iMacs available at Apple starting...
Apple has clearance M1 iMacs available in their Certified Refurbished store starting at $1049 and ranging up to $300 off original MSRP. Each iMac is in like-new condition and comes with Apple’s... Read more
Walmart continues to offer $699 13-inch M1 Ma...
Walmart continues to offer new Apple 13″ M1 MacBook Airs (8GB RAM, 256GB SSD) online for $699, $300 off original MSRP, in Space Gray, Silver, and Gold colors. These are new MacBook for sale by... Read more
B&H has 13-inch M2 MacBook Airs with 16GB...
B&H Photo has 13″ MacBook Airs with M2 CPUs, 16GB of memory, and 256GB of storage in stock and on sale for $1099, $100 off Apple’s MSRP for this configuration. Free 1-2 day delivery is available... Read more
14-inch M3 MacBook Pro with 16GB of RAM avail...
Apple has the 14″ M3 MacBook Pro with 16GB of RAM and 1TB of storage, Certified Refurbished, available for $300 off MSRP. Each MacBook Pro features a new outer case, shipping is free, and an Apple 1-... Read more
Apple M2 Mac minis on sale for up to $150 off...
Amazon has Apple’s M2-powered Mac minis in stock and on sale for $100-$150 off MSRP, each including free delivery: – Mac mini M2/256GB SSD: $499, save $100 – Mac mini M2/512GB SSD: $699, save $100 –... Read more
Amazon is offering a $200 discount on 14-inch...
Amazon has 14-inch M3 MacBook Pros in stock and on sale for $200 off MSRP. Shipping is free. Note that Amazon’s stock tends to come and go: – 14″ M3 MacBook Pro (8GB RAM/512GB SSD): $1399.99, $200... Read more
Sunday Sale: 13-inch M3 MacBook Air for $999,...
Several Apple retailers have the new 13″ MacBook Air with an M3 CPU in stock and on sale today for only $999 in Midnight. These are the lowest prices currently available for new 13″ M3 MacBook Airs... Read more
Multiple Apple retailers are offering 13-inch...
Several Apple retailers have 13″ MacBook Airs with M2 CPUs in stock and on sale this weekend starting at only $849 in Space Gray, Silver, Starlight, and Midnight colors. These are the lowest prices... Read more
Roundup of Verizon’s April Apple iPhone Promo...
Verizon is offering a number of iPhone deals for the month of April. Switch, and open a new of service, and you can qualify for a free iPhone 15 or heavy monthly discounts on other models: – 128GB... Read more

Jobs Board

Relationship Banker - *Apple* Valley Financ...
Relationship Banker - Apple Valley Financial Center APPLE VALLEY, Minnesota **Job Description:** At Bank of America, we are guided by a common purpose to help Read more
IN6728 Optometrist- *Apple* Valley, CA- Tar...
Date: Apr 9, 2024 Brand: Target Optical Location: Apple Valley, CA, US, 92308 **Requisition ID:** 824398 At Target Optical, we help people see and look great - and Read more
Medical Assistant - Orthopedics *Apple* Hil...
Medical Assistant - Orthopedics Apple Hill York Location: WellSpan Medical Group, York, PA Schedule: Full Time Sign-On Bonus Eligible Remote/Hybrid Regular Apply Now Read more
*Apple* Systems Administrator - JAMF - Activ...
…**Public Trust/Other Required:** None **Job Family:** Systems Administration **Skills:** Apple Platforms,Computer Servers,Jamf Pro **Experience:** 3 + years of Read more
Liquor Stock Clerk - S. *Apple* St. - Idaho...
Liquor Stock Clerk - S. Apple St. Boise Posting Begin Date: 2023/10/10 Posting End Date: 2024/10/14 Category: Retail Sub Category: Customer Service Work Type: Part Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.