1998-03-28 05:44:41 +03:00
|
|
|
|
/* -*- 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.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
// prefwutils.h
|
|
|
|
|
// Various utilities used by preference window
|
|
|
|
|
// They are apart from Prefw, so that our file size is manageable
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "MoreMixedMode.h"
|
|
|
|
|
|
|
|
|
|
#include <LTable.h>
|
1998-06-23 05:36:59 +04:00
|
|
|
|
#include <LGAEditField.h>
|
1998-03-28 05:44:41 +03:00
|
|
|
|
|
|
|
|
|
class CValidEditField;
|
|
|
|
|
class LArrowControl;
|
|
|
|
|
class CApplicationIconInfo;
|
|
|
|
|
class CPrefHelpersContain;
|
|
|
|
|
class CMimeMapper;
|
|
|
|
|
class CStr255;
|
|
|
|
|
|
|
|
|
|
/********************************************************************************
|
|
|
|
|
* Classes
|
|
|
|
|
********************************************************************************/
|
|
|
|
|
|
|
|
|
|
//======================================
|
|
|
|
|
class CFilePicker
|
|
|
|
|
//======================================
|
|
|
|
|
: public LView
|
|
|
|
|
, public LListener
|
|
|
|
|
, public LBroadcaster
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
enum { class_ID = 'fpck' }; // illegal, needs one UC char.- jrm
|
|
|
|
|
|
|
|
|
|
enum PickEnum { Folders = 0, Applications, TextFiles,
|
|
|
|
|
ImageFiles, MailFiles, AnyFile };
|
|
|
|
|
|
|
|
|
|
CFilePicker( LStream* inStream );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void ListenToMessage( MessageT inMessage, void* ioParam );
|
|
|
|
|
|
|
|
|
|
void SetFSSpec( const FSSpec& fileSpec, Boolean touchSetFlag = true );
|
|
|
|
|
const FSSpec& GetFSSpec() const { return fCurrentValue; }
|
|
|
|
|
|
|
|
|
|
void SetPickType( CFilePicker::PickEnum pickTypes ) { fPickTypes = pickTypes; }
|
|
|
|
|
void SetCaptionForPath( LCaption* captionToSet, const FSSpec& folderSpec );
|
|
|
|
|
CStr255 FSSpecToPathName( const FSSpec& spec );
|
|
|
|
|
|
|
|
|
|
Boolean WasSet() const { return fSet; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static Boolean DoCustomGetFile( StandardFileReply& spec,
|
|
|
|
|
CFilePicker::PickEnum fileType,
|
|
|
|
|
Boolean inited );
|
|
|
|
|
static Boolean DoCustomPutFile( StandardFileReply& spec,
|
|
|
|
|
const CStr255& prompt,
|
|
|
|
|
Boolean inited );
|
|
|
|
|
protected:
|
|
|
|
|
struct PickClosure
|
|
|
|
|
{
|
|
|
|
|
StandardFileReply* reply;
|
|
|
|
|
Boolean inited;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
enum EPaneIDs {
|
|
|
|
|
kPathNameCaption = 1,
|
|
|
|
|
kBrowseButton = 2
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
virtual void FinishCreateSelf();
|
|
|
|
|
|
|
|
|
|
static pascal short SetCurrDirHook( short item, DialogPtr dialog, void* data );
|
|
|
|
|
PROCDECL( static, SetCurrDirHook )
|
|
|
|
|
static pascal short DirectoryHook( short item, DialogPtr dialog, void* data );
|
|
|
|
|
PROCDECL( static, DirectoryHook )
|
|
|
|
|
|
|
|
|
|
static pascal Boolean OnlyFoldersFileFilter( CInfoPBPtr pBlock, void* data );
|
|
|
|
|
static pascal Boolean IsMailFileFilter( CInfoPBPtr pBlock, void* data );
|
|
|
|
|
PROCDECL( static, OnlyFoldersFileFilter )
|
|
|
|
|
PROCDECL( static, IsMailFileFilter )
|
|
|
|
|
|
|
|
|
|
static void SetButtonTitle( Handle buttonHdl, CStr255& name, const Rect& buttonRect );
|
|
|
|
|
|
|
|
|
|
static CStr255 sPrevName;
|
|
|
|
|
static Boolean sResult;
|
|
|
|
|
static Boolean sUseDefault;
|
|
|
|
|
|
|
|
|
|
FSSpec fCurrentValue;
|
|
|
|
|
LControl* fBrowseButton;
|
|
|
|
|
LCaption* fPathName;
|
|
|
|
|
Boolean fSet;
|
|
|
|
|
PickEnum fPickTypes;
|
|
|
|
|
}; // class CFilePicker
|
|
|
|
|
|
|
|
|
|
// COtherSizeDialog.cp <- double-click + Command-D to see class implementation
|
|
|
|
|
//
|
|
|
|
|
// This is a PowerPlant dialog box to handle the Other<65> command in the Size
|
|
|
|
|
// menu.
|
|
|
|
|
|
|
|
|
|
class LEditField;
|
|
|
|
|
|
|
|
|
|
class COtherSizeDialog: public LDialogBox, public LBroadcaster
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
enum { class_ID = 'OFnt' };
|
|
|
|
|
COtherSizeDialog( LStream* inStream );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void SetValue( Int32 inFontSize );
|
|
|
|
|
virtual Int32 GetValue() const;
|
|
|
|
|
|
|
|
|
|
void SetReference( LControl* which );
|
|
|
|
|
|
|
|
|
|
virtual void ListenToMessage( MessageT inMessage, void* ioParam );
|
|
|
|
|
|
|
|
|
|
LControl* fRef;
|
|
|
|
|
protected:
|
|
|
|
|
virtual void FinishCreateSelf();
|
|
|
|
|
LEditField* mSizeField;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class LArrowGroup: public LView, public LListener
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
LArrowGroup( LStream* inStream );
|
|
|
|
|
|
|
|
|
|
void ListenToMessage( MessageT message, void* ioParam );
|
|
|
|
|
|
|
|
|
|
void SetValue( Int32 value );
|
|
|
|
|
Int32 GetValue() const { return fValue; }
|
|
|
|
|
|
|
|
|
|
void SetMaxValue( Int32 value );
|
|
|
|
|
void SetMinValue( Int32 value );
|
|
|
|
|
void SetStringID(ResIDT stringID);
|
|
|
|
|
protected:
|
|
|
|
|
void BuildControls();
|
|
|
|
|
|
|
|
|
|
Int32 fValue;
|
|
|
|
|
Int32 fMinValue;
|
|
|
|
|
Int32 fMaxValue;
|
|
|
|
|
ResIDT fStringID;
|
|
|
|
|
LCaption* fSize;
|
|
|
|
|
LArrowControl* fArrows;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
|
* class CColorButton
|
|
|
|
|
* Just a button that pops up a color wheel when pressed
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
class CColorButton: public LButton
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
enum { class_ID = 'pcol' };
|
|
|
|
|
// <20><> constructors
|
|
|
|
|
CColorButton( LStream* inStream );
|
|
|
|
|
|
|
|
|
|
// <20><> colors
|
|
|
|
|
void SetColor( const RGBColor& color ) { fColor = color; }
|
|
|
|
|
RGBColor GetColor() { return fColor; }
|
|
|
|
|
|
|
|
|
|
// <20><> control overrides
|
|
|
|
|
virtual void HotSpotResult( short inHotSpot );
|
|
|
|
|
virtual void DrawGraphic( ResIDT inGraphicID );
|
|
|
|
|
protected:
|
|
|
|
|
RGBColor fColor;
|
|
|
|
|
Boolean fInside;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
#include "PopupBox.h"
|
|
|
|
|
class FileIconsLister: public StdPopup {
|
|
|
|
|
public:
|
|
|
|
|
FileIconsLister (CGAPopupMenu * target);
|
|
|
|
|
virtual ~FileIconsLister();
|
|
|
|
|
CStr255 GetText (short item);
|
|
|
|
|
void SetIconList(CApplicationIconInfo *);
|
|
|
|
|
short GetCount();
|
|
|
|
|
private:
|
|
|
|
|
CApplicationIconInfo * fIcons;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
|
* class PrefCellInfo
|
|
|
|
|
* All the information needed to draw a cell. This is what the table stores
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
class PrefCellInfo
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
PrefCellInfo();
|
|
|
|
|
PrefCellInfo(CMimeMapper* mapper, CApplicationIconInfo* iconInfo);
|
|
|
|
|
|
|
|
|
|
CMimeMapper* fMapper; // The mapper from the preference MIME list
|
|
|
|
|
CApplicationIconInfo* fIconInfo; // Information about icon to draw
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
|
// CApplicationList
|
|
|
|
|
// Application list is a list that contains information about
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
|
struct BNDLIds
|
|
|
|
|
{ // Utility structure for bundle parsing
|
|
|
|
|
Int16 localID;
|
|
|
|
|
Int16 resID;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class CApplicationList : public LArray
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
// <20><> constructors
|
|
|
|
|
CApplicationList();
|
|
|
|
|
virtual ~CApplicationList();
|
|
|
|
|
|
|
|
|
|
// <20><> access
|
|
|
|
|
// Gets information specified by the mapper
|
|
|
|
|
CApplicationIconInfo* GetAppInfo(OSType appSig, CMimeMapper* mapper = NULL);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
// Creates application icon info for an app with a given signature
|
|
|
|
|
CApplicationIconInfo* CreateNewEntry(OSType appSig, CMimeMapper* mapper = NULL);
|
|
|
|
|
// Creates application icon info for an app with given specs
|
|
|
|
|
CApplicationIconInfo* AppInfoFromFileSpec(OSType appSig, FSSpec appSpec);
|
|
|
|
|
void GetResourcePointers(Handle bundle,
|
|
|
|
|
BNDLIds* &iconOffset, BNDLIds * &frefOffset,
|
|
|
|
|
short& numOfIcons, short & numOfFrefs);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
|
* class CMimeTable
|
|
|
|
|
* A container view that contains all the CMimeInfo views. Here we are
|
|
|
|
|
* faking a list view. This view expands so that it contains all of its
|
|
|
|
|
* subviews.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
#define msg_LaunchRadio 300 // Launch option changed
|
|
|
|
|
#define msg_BrowseApp 301 // Pick a new application
|
|
|
|
|
#define msg_FileTypePopup 302 // New file type picked
|
|
|
|
|
//msg_EditField // User typed in a field
|
|
|
|
|
#define msg_NewMimeType 303 // New Mime type
|
|
|
|
|
#define msg_NewMimeTypeOK 305 // Sent by newMimeType dialog window
|
|
|
|
|
//#define msg_ClearCell 306
|
|
|
|
|
#define msg_EditMimeType 307 // Edit Mime type
|
|
|
|
|
#define msg_DeleteMimeType 308 // Delete Mime type
|
|
|
|
|
#define msg_PluginPopup 309 // Pick a plug-in
|
|
|
|
|
|
|
|
|
|
class CMimeTable : public LTable, public LCommander
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
// <20><> Constructors/destructors/access
|
|
|
|
|
|
|
|
|
|
CMimeTable(LStream *inStream);
|
|
|
|
|
void FinishCreateSelf();
|
|
|
|
|
void BindCellToApplication(TableIndexT row, CMimeMapper * mapper);
|
|
|
|
|
CApplicationIconInfo* GetAppInfo(CMimeMapper* mapper);
|
|
|
|
|
|
|
|
|
|
// <20><> access
|
|
|
|
|
void SetContainer( CPrefHelpersContain* container) { fContainer = container; }
|
|
|
|
|
void GetCellInfo(PrefCellInfo& cellInfo, int row);
|
|
|
|
|
void FreeMappers();
|
|
|
|
|
|
|
|
|
|
// <20><> Cell selection
|
|
|
|
|
virtual void DrawCell( const TableCellT& inCell );
|
|
|
|
|
|
|
|
|
|
// Drawing
|
|
|
|
|
virtual void DrawSelf();
|
|
|
|
|
virtual void HiliteCell(const TableCellT &inCell);
|
|
|
|
|
virtual void UnhiliteCell(const TableCellT &inCell);
|
|
|
|
|
void ScrollCellIntoFrame(const TableCellT& inCell);
|
|
|
|
|
|
|
|
|
|
// Events
|
|
|
|
|
virtual Boolean HandleKeyPress(const EventRecord &inKeyEvent);
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
CApplicationList fApplList; // List of application and their icons
|
|
|
|
|
CPrefHelpersContain* fContainer; // Containing view
|
|
|
|
|
Handle fNetscapeIcon; // Icon for Netscape
|
|
|
|
|
Handle fPluginIcon; // Icon for plug-ins
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
|
// CFileType holds information about a single file type
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
|
class CFileType
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
CFileType( OSType iconSig );
|
|
|
|
|
CFileType( OSType iconSig, Handle icon ) {fIcon = icon; fIconSig = iconSig;}
|
|
|
|
|
~CFileType();
|
|
|
|
|
|
|
|
|
|
static void ClearDefaults(); // Does class globals memory cleanup
|
|
|
|
|
static void InitializeDefaults(); // Initializes default values
|
|
|
|
|
|
|
|
|
|
static Handle sDefaultDocIcon;
|
|
|
|
|
|
|
|
|
|
Handle fIcon; // Really an icon suite
|
|
|
|
|
OSType fIconSig;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
|
// CApplicationIconInfo
|
|
|
|
|
// holds all icon information about an application
|
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
|
class CApplicationIconInfo
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
// <20><><EFBFBD>constructors/destructors
|
|
|
|
|
// Call me when application has not been found
|
|
|
|
|
CApplicationIconInfo( OSType appSig );
|
|
|
|
|
// Call me when app was found
|
|
|
|
|
CApplicationIconInfo( OSType appSig, Handle appIcon,
|
|
|
|
|
LArray* documentIcons, Boolean handlesAE );
|
|
|
|
|
|
|
|
|
|
~CApplicationIconInfo();
|
|
|
|
|
// <20><> access
|
|
|
|
|
CFileType* GetFileType( int i ); // Gets file type by the index
|
|
|
|
|
int GetFileTypeArraySize(); // Gets number of file types
|
|
|
|
|
// <20><> misc
|
|
|
|
|
static void InitializeDefaults(); // Initializes default values
|
|
|
|
|
static void ClearDefaults(); // Does class globals memory cleanup
|
|
|
|
|
|
|
|
|
|
static Handle sDefaultAppIcon; // Defaults, in case that application is not found
|
|
|
|
|
Handle fApplicationIcon; // Handle of application icons (iconSuite)
|
|
|
|
|
LArray* fDocumentIcons; // List of CFileType objects
|
|
|
|
|
Boolean fHandlesAE; // Does it handle apple events
|
|
|
|
|
OSType fAppSig; // Signature of the application
|
|
|
|
|
Boolean fApplicationFound; // Was application found on my disk?
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
static LArray* sDocumentIcons; // ditto
|
|
|
|
|
static Boolean sHandlesAE; // ditto
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
|
* Class LFocusEditField
|
|
|
|
|
* ----------------------
|
|
|
|
|
* Just like an LListBox, except that it will send messages on
|
|
|
|
|
* a single click. Used in the Document Encoding Dialog Box.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
class LFocusEditField : public LEditField , public LBroadcaster{
|
|
|
|
|
public:
|
|
|
|
|
enum { class_ID = 'Fedi' };
|
|
|
|
|
|
|
|
|
|
LFocusEditField(
|
|
|
|
|
const LFocusEditField &inOriginal);
|
|
|
|
|
LFocusEditField(
|
|
|
|
|
LStream *inStream);
|
|
|
|
|
virtual ~LFocusEditField();
|
|
|
|
|
LFocusBox* GetFocusBox();
|
|
|
|
|
|
|
|
|
|
Int16 GetReturnMessage() { return mReturnMessage; }
|
|
|
|
|
virtual void SetReturnMessage(Int16 inMessage)
|
|
|
|
|
{ mReturnMessage = inMessage;}
|
|
|
|
|
virtual Boolean HandleKeyPress( const EventRecord &inKeyEvent);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
Int16 mReturnMessage;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
LFocusBox *mFocusBox;
|
|
|
|
|
|
|
|
|
|
virtual void BeTarget();
|
|
|
|
|
virtual void DontBeTarget();
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
|
* Class OneClickLListBox
|
|
|
|
|
* ----------------------
|
|
|
|
|
* Just like an LListBox, except that it will send messages on
|
|
|
|
|
* a single click. Used in the Document Encoding Dialog Box.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
class OneClickLListBox : public LListBox
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
OneClickLListBox(LStream * inStream);
|
|
|
|
|
|
|
|
|
|
Int16 GetSingleClickMessage() { return mSingleClickMessage; }
|
|
|
|
|
virtual void SetSingleClickMessage(Int16 inMessage)
|
|
|
|
|
{ mSingleClickMessage = inMessage;}
|
|
|
|
|
virtual void ClickSelf(const SMouseDownEvent &inMouseDown);
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
Int16 mSingleClickMessage;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
|
* Class OneRowLListBox
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
class OneRowLListBox : public OneClickLListBox
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
enum { class_ID = 'ocLB' };
|
|
|
|
|
OneRowLListBox(LStream * inStream);
|
|
|
|
|
virtual Boolean HandleKeyPress(const EventRecord &inKeyEvent);
|
|
|
|
|
|
|
|
|
|
virtual Int16 GetRows();
|
|
|
|
|
virtual void AddRow(Int32 rowNum, char* data, Int16 datalen);
|
|
|
|
|
virtual void RemoveRow(Int32 rowNum);
|
|
|
|
|
virtual void GetCell(Int32 rowNum, char* data, Int16* datalen);
|
|
|
|
|
virtual void SetCell(Int32 rowNum, char* data, Int16 datalen);
|
|
|
|
|
};
|