/* -*- 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. */ #ifndef __H_CDateView #define __H_CDateView #pragma once /*====================================================================================== DESCRIPTION: Implements a view for display and input of a date. Formats the date as the user has it set up in their Date & Time control panel. To use this class, you must include the following PP classes: LGAEditField LCaption LButton MODIFICATIONS: Date Person Description ---- ------ ----------- ======================================================================================*/ /*====================================================================================*/ #pragma mark INCLUDE FILES /*====================================================================================*/ #include #include #include class CDateField; /*====================================================================================*/ #pragma mark TYPEDEFS /*====================================================================================*/ /*====================================================================================*/ #pragma mark CONSTANTS /*====================================================================================*/ /*====================================================================================*/ #pragma mark CLASS DECLARATIONS /*====================================================================================*/ #pragma mark - class CDateView : public LView, public LListener, public LBroadcaster { public: enum { // Pane IDs paneID_DateField1 = 'DAT1' , paneID_DateField2 = 'DAT2' , paneID_DateField3 = 'DAT3' , paneID_Separator1 = 'SEP1' , paneID_Separator2 = 'SEP2' , paneID_UpButton = 'BTNU' , paneID_DownButton = 'BTND' }; // Stream creator method enum { class_ID = 'DaTe' }; static void RegisterDateClasses(void); CDateView(LStream *inStream); virtual ~CDateView(void); // Start public interface ---------------------------------------------------------- enum { cMinViewYear = 1920, cMaxViewYear = 2019 }; Boolean IsValidDate(Int16 inYear, UInt8 inMonth, UInt8 inDay); void GetDate(Int16 *outYear, UInt8 *outMonth, UInt8 *outDay); Boolean SetDate(Int16 inYear, UInt8 inMonth, UInt8 inDay); void SetToToday(void); enum { eYearField = 1, eMonthField = 2, eDayField = 3 }; void SelectDateField(Int16 inField); void Select(void); Boolean ContainsTarget(void); // Boradcasting messages enum { msg_DateViewChanged = 9109221 /*this*/ }; // End public interface ------------------------------------------------------------ protected: // Overriden methods virtual void FinishCreateSelf(void); virtual void ListenToMessage(MessageT inMessage, void *ioParam = nil); void DoKeyArrow(Boolean inClickUpArrow); void DoClickArrow(Boolean inClickUpArrow); enum { eShowArrows = true, eHideArrows = false }; void ShowHideArrows(Boolean inShow); // static EKeyStatus DateFieldFilter(const EventRecord &inKeyEvent, Int16 inKeyPosition = 0); static EKeyStatus DateFieldFilter(TEHandle inMacTEH, Char16 inKeyCode, Char16& ioCharCode, SInt16 inModifiers); static void SetDateString(LEditField *inField, UInt8 inValue, UInt8 inLeadingChar); static void ShowHideArrow(LPane *inArrow, Boolean inShow); private: void CreateDateFields(UInt8 inLeadingDayChar, UInt8 inLeadingMonthChar, UInt8 inSeparatingChar); protected: // Instance variables ========================================================== UInt8 mDayPosition; // Position of the day in the view (1..3) UInt8 mMonthPosition; // Position of the month in the view (1..3) UInt8 mYearPosition; // Position of the year in the view (1..3) Rect mFrameRect; CDateField *mDayField; CDateField *mMonthField; CDateField *mYearField; }; #pragma mark - class CDateField : public LGAEditField { public: enum { class_ID = 'DaFd' }; CDateField(LStream *inStream); virtual void SetDescriptor(ConstStr255Param inDescriptor); UInt8 GetLeadingChar(void) const { return mLeadingChar; } void SetLeadingChar(UInt8 inChar) { mLeadingChar = inChar; } // Boradcasting messages enum { msg_HideDateArrows = 780954, msg_ShowDateArrows = 780955, msg_UserChangedText = 780956 }; protected: // Overriden methods virtual void ClickSelf(const SMouseDownEvent &inMouseDown); virtual void FindCommandStatus(CommandT inCommand, Boolean &outEnabled, Boolean &outUsesMark, Char16 &outMark, Str255 outName); virtual Boolean HandleKeyPress(const EventRecord &inKeyEvent); virtual void AdjustCursorSelf(Point inPortPt, const EventRecord &inMacEvent); virtual void BeTarget(void); virtual void DontBeTarget(void); virtual void UserChangedText(void); // Instance variables ========================================================== UInt8 mLeadingChar; // Character to use for leading number when }; #endif // __H_CDateView