home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
-
- // CCaption.cp
-
- #include "CCaption.h"
- #include <LStream.h>
- #include "PascalString.h"
- #include <TextUtils.h>
- #include <UGraphicsUtilities.h>
-
- ///////////////////////////////////////////////////////////////////
- // constants
- const short booleanStringResID = 901; // resource ID of the boolean strings in macfe.r
-
- ///////////////////////////////////////////////////////////////////
- // CCaption
-
- void CCaption::DrawSelf()
- {
- Rect frame;
- CalcLocalFrameRect(frame);
-
- StColorPenState theColorPenState;
- StColorPenState::Normalize ();
- StTextState theTextState;
-
- Int16 just = UTextTraits::SetPortTextTraits(mTxtrID);
-
- // Ñ Save off the text color as setup by the TextTrait
- RGBColor textColor;
- ::GetForeColor(&textColor);
- ApplyForeAndBackColors();
- ::RGBForeColor(&textColor);
-
- // the following code adapted from LGARadioButton.cp
-
- // Ñ Loop over any devices we might be spanning and handle the drawing
- // appropriately for each devices screen depth
- StDeviceLoop theLoop ( frame );
- Int16 depth;
- while ( theLoop.NextDepth ( depth ))
- {
- if ( depth < 4 ) // Ñ BLACK & WHITE
- {
- if ( !IsEnabled() )
- {
- // Ñ If the caption is dimmed then we use the grayishTextOr
- // transfer mode to draw the text
- ::TextMode ( grayishTextOr );
- }
- }
- else if ( depth >= 4 ) // Ñ COLOR
- {
- if ( !IsEnabled() )
- {
- // Ñ If the control is dimmed then we have to do our own version of the
- // grayishTextOr as it does not appear to work correctly across
- // multiple devices
- RGBColor textColor2 = UGraphicsUtilities::Lighten( &textColor );
- ::TextMode ( srcOr );
- ::RGBForeColor ( &textColor2 );
- }
- }
-
- UTextDrawing::DrawWithJustification((Ptr)&mText[1], mText[0], frame, just);
- }
- }
-
- void CCaption::EnableSelf()
- {
- Draw( nil );
- }
-
- void CCaption::DisableSelf()
- {
- Draw( nil );
- }
-
- ///////////////////////////////////////////////////////////////////
- // CListenerCaption
-
- // Default constructor
- CListenerCaption::CListenerCaption( LStream *inStream ) : labelNum( default_menu_item ),
- CCaption ( inStream )
- {
- }
-
- // Default destructor
- CListenerCaption::~CListenerCaption()
- {
- }
-
- // Change label
- void
- CListenerCaption::ChangeText( const LabelNum& newLabelNum )
- {
- Str255 string;
- ::GetIndString( string, resourceID, newLabelNum );
- // needs check and exception
- SetDescriptor( string );
- labelNum = newLabelNum;
- }
-
- // Return the label num
- LabelNum
- CListenerCaption::GetLabelNum() const
- {
- return labelNum;
- }
-
- // Return the label num
- void
- CListenerCaption::SetLabelNum( const LabelNum& newLabelNum )
- {
- labelNum = newLabelNum;
- }
-
- // Override of the ListenToMessage method
- //
- // *** Needs exceptions
- //
- void
- CListenerCaption::ListenToMessage( MessageT inMessage, void *ioParam)
- {
- if( mMsg_changeText == inMessage )
- {
- LabelNum menuItem = *( static_cast< LabelNum* >( ioParam ) );
- ChangeText( menuItem );
- }
- }
-
- // Needs to be called before using this class
- //
- // *** Needs exceptions
- //
- void
- CListenerCaption::Init( const short strResID, const MessageT& getNew_msg )
- {
- if( getNew_msg )
- mMsg_changeText = getNew_msg;
-
- if( strResID )
- resourceID = strResID;
- }
-