home *** CD-ROM | disk | FTP | other *** search
- //----------------------------------------------------------------------------
- // ObjectWindows
- // (C) Copyright 1994 by Borland International, All Rights Reserved
- //
- // Base OLE UI dialog class definitions
- //----------------------------------------------------------------------------
- #if !defined(OWL_OLEDLG_H)
- #define OWL_OLEDLG_H
-
- #if !defined(OWL_OPENSAVE_H)
- # include <owl/opensave.h>
- #endif
- #if !defined(OWL_CONTROL_H)
- # include <owl/control.h>
- #endif
- #if !defined(OWL_GDIOBJEC_H)
- # include <owl/gdiobjec.h>
- #endif
- #if !defined(OCF_OCVIEW_H)
- # include <ocf/ocview.h>
- #endif
-
- #include <owl/oledlg.rh>
- class _OWLCLASS TWindow;
- class _OWLCLASS TEdit;
- class _OWLCLASS TStatic;
- class _OWLCLASS TButton;
- class _OWLCLASS TRadioButton;
- class _OWLCLASS TCheckBox;
- class _OWLCLASS TListBox;
-
- //
- // Constants
- //
- const int MaxLinkTypes = 8; // Max # of link types
- const int MaxPathLen = 256; // Max length of file name
- const int MaxKeyLen = 256; // Max lenght of reg. key
- const int LoadStringLen = 256; // Default length buffer for LoadStrings
- const int MaxLabelLen = 40; // Max length of icon label
- const int MaxUnknownLen = 100; // Max Length of UnknownType string
- const int CLSIDStringLen = 39; // Length of string CLSID
- const int GenericBufferLen= 1024; // Generic scratch buffer length
- const int cxIconPad = 12; // x-padding in TIconListBox
- const int cyIconPad = 4; // y-padding in TIconListBox
- const int LinkTypeLen = 20; // Hold "Automatic" or "Manual"
- const int LinksListCols = 3; // Number of Column in Edit Links Dlg
- const int PrefixSize = 8; // Used for Chopping text
- const int MaxFormatEtc = 20; // Max. # of FormatEtc
- const int HiMetricPerInch = 2540;
- extern const char ClsIdStr[]; // "\\CLSID" Helpful when RegDB-searching
-
- //
- // Clipboard Format Strings
- //
- #if !defined(CF_EMBEDSOURCE)
- # define CF_EMBEDSOURCE "Embed Source"
- #endif
- #if !defined(CF_EMBEDDEDOBJECT)
- # define CF_EMBEDDEDOBJECT "Embedded Object"
- #endif
- #if !defined(CF_LINKSOURCE)
- # define CF_LINKSOURCE "Link Source"
- #endif
- #if !defined(CF_CUSTOMLINKSOURCE)
- # define CF_CUSTOMLINKSOURCE "Custom Link Source"
- #endif
- #if !defined(CF_OBJECTDESCRIPTOR)
- # define CF_OBJECTDESCRIPTOR "Object Descriptor"
- #endif
- #if !defined(CF_LINKSRCDESCRIPTOR)
- # define CF_LINKSRCDESCRIPTOR "Link Source Descriptor"
- #endif
- #if !defined(CF_OWNERLINK)
- # define CF_OWNERLINK "OwnerLink"
- #endif
- #if !defined(CF_FILENAME)
- # define CF_FILENAME "FileName"
- #endif
- #if !defined(NEXTCBVIEWER)
- # define NEXTCBVIEWER "NextCBViewer"
- #endif
-
- //
- // Forward referenced classes
- //
- class _OWLCLASS TIconListBox;
-
- //
- //
- // Class TOleDialog
- // ----- ----------
- // Base class of OLE dialogs
- //
- class _USERCLASS TOleDialog : public TDialog {
- public:
- TOleDialog(TWindow* parent,
- TResId templateId,
- const char far *title = 0,
- TModule *module = 0);
-
- //
- // Disable modeless usage
- //
- HWND DoCreate() { return 0; }
-
- //
- // Force derive class to redefine
- //
- int DoExecute() = 0;
-
- protected:
- void SetupWindow();
- void CleanupWindow();
-
- //
- // Event handlers to allow proper cleanup prior to closing the dialog
- //
- void CmOk();
- virtual bool OleDlgOk() = 0;
-
- //
- // To Enable/Show or Disable/Hide a control
- //
- void Activate(TWindow*, bool);
-
- //
- // OLE 2.0 Wrappers to simplify Dlg. management
- // [Based on OLESTD, OLE2UI, BOleService etc.]
- //
- HGLOBAL GetIconFromClass(REFCLSID clsid, const char far* label, bool useType);
- HGLOBAL GetIconFromFile(const char far* path, bool useFile);
- HGLOBAL FillObjectDescriptorFromData(LPDATAOBJECT dataObject,
- LPSTGMEDIUM medium,
- CLIPFORMAT FAR *cfFmt);
- HGLOBAL GetObjectDescriptorData(CLSID clsid, DWORD dwDrawAspect,
- SIZEL sizel, POINTL pointl,
- DWORD dwStatus,
- LPSTR lpszFullUserTypeName,
- LPSTR lpszSrcOfCopy);
- uint GetAuxUserType(REFCLSID clsid, WORD auxUserType,
- char far* lpszAuxUserType, int len,
- HKEY hkey);
- uint GetUserTypeOfClass(REFCLSID clsid, char far* lpszUserStr,
- uint len);
- HGLOBAL GetData(LPDATAOBJECT dataObj, CLIPFORMAT cfFormat,
- DVTARGETDEVICE FAR *targetDevice, DWORD aspect,
- LPSTGMEDIUM medium);
-
- //
- // Helper routines shared by OLE Dialogs
- //
- HFILE DoesFileExist(const char* filename, OFSTRUCT& ofs);
- char far* PtrToNthField(char far*, int nField, char chDelim);
- int ErrorWithFile(uint strId, const char* fileName,
- uint mbFlags = MB_OK);
- void OpenFileError(uint errCode, const char* fileName);
- bool BrowseDlg(char* file, char* initialDir, uint filterId,
- uint32 flags);
- int PopupMessage(uint idMsg, uint idTitle, uint mbFlags);
- int GetTextWSize(TDC &dc, char far* lpsz);
- char far* ChopText(TWindow&, int widdth, char far* str);
- char far* AnsiPrev(const char far* start, const char far* current);
- char far* AnsiNext(const char far* current);
-
- //
- // Near versions of few helpers from above [used in MEDIUM model]
- //
- #if defined(BI_DATA_NEAR)
- char* ChopText(TWindow&, int width, char* str);
- char* AnsiPrev(const char* start, const char* current);
- char* AnsiNext(const char* current);
- #endif
-
- //
- // Clipboard formats
- //
- static uint16 cfObjectDescriptor;
- static uint16 cfLinkSrcDescriptor;
- static uint16 cfEmbedSource;
- static uint16 cfEmbeddedObject;
- static uint16 cfLinkSource;
- static uint16 cfOwnerLink;
- static uint16 cfFileName;
- static bool cfInit;
-
- //
- // Non-bold font for static controls
- //
- TFont* Font;
-
- //
- // Dialog's title
- //
- const char far* ODTitle;
-
- DECLARE_RESPONSE_TABLE(TOleDialog);
- };
-
-
- //
- // Class TIconImage
- // ----- ----------
- // Simple control which displays an OLE Icon [which is really a metafile
- // with embedded icon and label].
- //
- class TIconImage : public TControl {
- public:
- TIconImage(TWindow* parent, int resourceId, TModule* module = 0);
-
- void GetWindowClass(WNDCLASS& wndclass);
- char far* GetClassName();
-
- bool SetMetaPict(HGLOBAL hMetaPict, bool deleteOld = false);
- HGLOBAL GetMetaPict() const { return MetaPict; }
-
- protected:
- void EvPaint();
- bool EvEraseBkgnd(HDC);
-
- private:
- HGLOBAL MetaPict;
-
- DECLARE_RESPONSE_TABLE(TIconImage);
- };
-
-
- //
- // Indices of the predefined bitmap used by TResultImage
- //
- const uint riNone = 0xffff;
- const uint riPaste = 0;
- const uint riEmbed = 1;
- const uint riEmbedIcon = 2;
- const uint riLink = 3;
- const uint riLinkIcon = 4;
-
-
- //
- // Class TResultImage
- // ----- ------------
- // Control which simply displays a bitmap leaving one of the colors as
- // transparent. Can also only display part of the bitmap if the latter
- // is a *bitmap of smaller bitmaps*.
- //
- class _USERCLASS TResultImage : public TControl {
- public:
- TResultImage(TWindow* parent, int resourceId, TModule* module = 0);
- ~TResultImage();
-
- void GetWindowClass(WNDCLASS& wndclass);
- char far* GetClassName();
-
- void SetBitmap(TResId resId, TColor transparent = TColor::Black,
- uint numRows = 0, uint index = 0,
- TAutoDelete = AutoDelete);
- void SetBitmapIndex(uint);
-
- protected:
- void EvPaint();
- void SetupWindow();
-
- TBitmap *Bitmap;
- bool ShouldDelete;
- uint NumRows, CurIndex, CX, CY;
- TColor ClearColor;
-
- DECLARE_RESPONSE_TABLE(TResultImage);
- };
-
-
- //
- // Class TOleMetaPict
- // ----- ------------
- // Helper class providing methods to manipulate an OLE Icon [which is
- // really a metafile with embedded icon, label and icon source info]
- //
- class _USERCLASS TOleMetaPict {
- public:
- TOleMetaPict(HICON hIcon, char far* lpszLabel, TAutoDelete = AutoDelete);
- TOleMetaPict(HGLOBAL metaPict, TAutoDelete = NoAutoDelete);
- ~TOleMetaPict();
-
- //
- // Conversion operator to underlying/native type
- //
- operator HGLOBAL() const { return MetaPict; }
-
- bool Draw(TDC &dc, TRect &rect, bool IconOnly) const;
- int ExtractLabel(char far* label, uint32* wrap=0) const;
- HICON ExtractIcon(HINSTANCE) const;
- bool ExtractIconSource(char far* source, uint& index) const;
- static bool Free(HGLOBAL& metaPict);
-
- protected:
- HGLOBAL MetaPict;
- bool ShouldDelete;
- };
-
-
- //
- // ChangeIcon Data Flags
- //
- enum TChangeIconFlags {
- ciShowHelp = 0x0001,
- ciSelectCurrent = 0x0002,
- ciSelectDefault = 0x0004,
- ciSelectFromFile= 0x0008,
- ciUseIconExe = 0x0010,
- };
-
-
- //
- // Class TChangeIconDlg
- // ----- --------------
- //
- class _USERCLASS TChangeIconDlg : public TOleDialog {
- public:
- class _USERCLASS TData {
- public:
- TData();
- uint32 Flags; // Data Flags
- HGLOBAL MetaPict; // *The* image
- CLSID ClsId; // Class for Default Icon
- char IconExe[MaxPathLen]; // File to extract icon from
- };
-
- TChangeIconDlg(TWindow* parent,
- TData& data,
- TResId templateId = 0,
- const char far* title = 0,
- TModule* module = 0);
- ~TChangeIconDlg();
- int DoExecute();
-
- protected:
- void SetupWindow();
- void CleanupWindow();
- bool OleDlgOk();
-
- void SetIcon(TStatic&, HICON);
-
- uint FillIconList(const char*);
- void UpdateResultIcon(TChangeIconFlags);
-
- void CurrentClicked();
- void DefaultClicked();
- void FromFileClicked();
-
- void LabelKillFocus();
- void FileNameNotification(uint);
- void IconListSetFocus();
- void IconListSelChange();
- void IconListDblClk();
- void BrowseClicked();
-
- TData& Data;
-
- TStatic* CurrentIcon;
- TStatic* DefaultIcon;
- TRadioButton* Current;
- TRadioButton* Default;
- TRadioButton* FromFile;
-
- TEdit* FileName;
- TIconListBox* IconList;
-
- TEdit* Label;
- TStatic* ResultIcon;
- TStatic* ResultLabel;
-
- TButton* Help;
- TButton* Browse;
-
- private:
- //
- // Used internally to keep track of dialog's state
- //
- class _USERCLASS THelper {
- public:
- THelper();
-
- uint32 Flags;
- HICON CurIcon;
- char Label[MaxLabelLen+1];
- char File[MaxPathLen];
- uint IconIndex;
-
- HICON DefIcon;
- char DefIconFile[MaxPathLen];
- uint DefIconIndex;
- };
-
- THelper& Helper;
-
- DECLARE_RESPONSE_TABLE(TChangeIconDlg);
- };
-
-
- //
- // Enumerations used to populate Flags member of TInsertObjectDlg::TData
- //
- enum TInsertObjectFlags {
- ioShowHelp = 0x0001,
- ioSelectCreateNew = 0x0002,
- ioSelectCreateFromFile= 0x0004,
- ioCheckLink = 0x0008,
- ioCheckDisplayAsIcon = 0x0010,
- ioDisableLink = 0x0100,
- ioVerifyServerExist = 0x0200,
- ioDisableDisplayAsIcon= 0x0400
- };
-
-
- //
- // Class TInsertObjectDlg
- // ----- ----------------
- //
- class _USERCLASS TInsertObjectDlg : public TOleDialog {
- public:
- //
- // Class TData (InsertObject Data)
- // ----- ----- ------------- -----
- //
- class _USERCLASS TData {
- public:
- TData();
- uint32 Flags;
- CLSID ClsId;
- char far* FileName;
- LPCLSID lpClsIdExclude;
- uint cClsIdExclude;
- HGLOBAL MetaPict;
- };
-
- TInsertObjectDlg(TWindow* parent,
- TOcInitInfo &initInfo,
- TData *insObj = 0,
- TResId templateId = 0,
- const char far* title = 0,
- TModule* module = 0);
- ~TInsertObjectDlg();
- int DoExecute();
-
- protected:
- bool EvInitDialog(HWND);
- void CleanupWindow();
- bool OleDlgOk();
-
- int FillClassList();
- bool ToggleObjectSource(TInsertObjectFlags);
- void UpdateClassType(bool);
- void UpdateClassIcon();
- void SetInsertObjectResults();
- bool ValidateInsertFile(bool showErr=true);
- bool GetCurrentCLSID(CLSID&);
-
- //
- // Response Methods
- //
- void CreateNewClicked();
- void CreateFromFileClicked();
- void BrowseFileClicked();
- void LinkToFileClicked();
- void DisplayAsIconClicked();
- void ChangeIconClicked();
- void ObjectListChanged();
- void ObjectListDoubleClicked();
- void FileNameChanged();
- void FileNameKillFocus();
-
- TOcInitInfo& InitInfo;
- TData* Data;
-
- TCheckBox* DisplayAsIcon;
- TButton* ChangeIcon;
- TButton* Browse;
- TCheckBox* Link;
- TStatic* File;
- TStatic* FileType;
- TEdit* FileName;
- TListBox* ObjectList;
- TStatic* ObjectType;
- TStatic* ResultText;
- TResultImage* ResultImage;
- TIconImage* IconImage;
- TButton* Help;
- TButton* Ok;
- TRadioButton* CreateNew;
- TRadioButton* CreateFromFile;
-
- private:
- bool GetDefaultInsertObjectData();
-
- //
- // Class THelper
- // ----- -------
- // Used internally to keep track of dialog's state
- //
- class _USERCLASS THelper {
- public:
- THelper();
-
- uint32 Flags;
- CLSID ClsId;
- char FileName[MaxPathLen];
- bool FileSelected;
- bool AsIconNew;
- bool AsIconFile;
- bool FileDirty;
- bool FileValid;
- uint ErrCode;
- HGLOBAL MetaPict;
- };
-
- THelper& Helper;
- bool DeleteData;
-
- static OLECHAR DynamicScopePath[MaxPathLen];
- static CLSID DynamicScopeClsid;
-
- DECLARE_RESPONSE_TABLE(TInsertObjectDlg);
- };
-
-
- //
- // Enumeration flags for Flags member of TConvertDlg::TData
- //
- enum TConvertFlags {
- cvShowHelpButton = 0x0001,
- cvSetConvertDefault = 0x0002,
- cvSetActivateDefault = 0x0004,
- cvSelectConvertTo = 0x0008,
- cvSelectActivateAs = 0x0010,
- cvDisableDisplayAsIcon= 0x0020,
- cvDisableActivateAs = 0x0040
- };
-
-
- //
- // Class TConvertDlg
- // ----- -----------
- //
- class _USERCLASS TConvertDlg : public TOleDialog {
- public:
- //
- // Class TData
- // ----- -----
- //
- class _USERCLASS TData {
- public:
- TData(TOcPart& ocpart);
-
- uint32 Flags;
- CLSID ClsId;
- CLSID ClsIdConvertDefault;
- CLSID ClsIdActivateDefault;
- CLSID ClsIdNew;
- uint32 dvAspect;
- WORD wFormat;
- bool fIsLinkedObject;
- HGLOBAL MetaPict;
- LPSTR lpszUserType;
- bool fObjectsIconChanged;
- LPSTR lpszDefLabel;
- uint ClsIdExclude;
- LPCLSID lpClsIdExclude;
- };
-
- TConvertDlg(TWindow* parent, TData& data, TResId templateId = 0,
- const char far* title = 0, TModule* module = 0);
- ~TConvertDlg();
-
- void SetupWindow();
- void CleanupWindow();
-
- protected:
- uint FillClassList();
- void UpdateClassIcon();
- bool IsValidClassID(CLSID);
- void SetConvertResults();
- bool FormatIncluded(char* str, WORD wFormat);
-
- TStatic* ObjectType;
- TListBox* ConvertList;
- TListBox* ActivateList;
-
- TCheckBox* DisplayAsIcon;
- TStatic* ResultText;
- TStatic* ResultIcon;
- TStatic* IconLabel1;
- TStatic* IconLabel2;
-
- TRadioButton* ConvertTo;
- TRadioButton* ActivateAs;
- TButton* ChangeIcon;
-
- TButton* Help;
-
- TData& Data;
- private:
- //
- // Class used internally to keep track of dialog state
- //
- class _USERCLASS THelper {
- public:
- THelper(){ memset(this, 0, sizeof(THelper)); }
-
- uint32 Flags;
- TListBox* VisibleList;
- TListBox* InvisibleList;
- CLSID ClsId;
- DWORD dvAspect;
- bool fCustomIcon;
- uint IconIndex;
- LPSTR lpszIconSource;
- LPSTR lpszCurrentObject;
- LPSTR lpszConvertDefault;
- LPSTR lpszActivateDefault;
- };
- THelper& Helper;
-
- DECLARE_RESPONSE_TABLE(TConvertDlg);
- };
-
- //
- // Enumerations used to populate Flags member of TPasteSpecialDlg::TData
- //
- enum TPasteSpecialFlags {
- psShowHelp = 0x0001,
- psSelectPaste = 0x0002,
- psSelectPasteLink = 0x0004,
- psCheckDisplayAsIcon = 0x0008,
- psDisableDisplayAsIcon= 0x0010
- };
-
- //
- //
- //
- enum TOleUIPasteFlag {
- pfPasteOnly = 0,
- pfLinkType1 = 1,
- pfLinkType2 = 2,
- pfLinkType3 = 4,
- pfLinkType4 = 8,
- pfLinkType5 = 16,
- pfLinkType6 = 32,
- pfLinkType7 = 64,
- pfLinkType8 = 128,
- pfPaste = 512,
- pfLinkAnyType = 1024,
- pfEnableIcon = 2048
- };
-
- //
- // Class TPasteSpecialDlg
- // ----- ----------------
- //
- class _USERCLASS TPasteSpecialDlg : public TOleDialog {
-
- public:
- class _USERCLASS TPasteEntry;
-
- //
- // Class TData (TPasteSpecialDlg Data)
- // ----- ----- ----------------- -----
- //
- class _USERCLASS TData {
- public:
- TData();
- uint32 Flags;
- LPDATAOBJECT lpSrcDataObj;
- TPasteEntry FAR* ArrayPasteEntries;
- int cPasteEntries;
- uint far* ArrayLinkTypes;
- int cLinkTypes;
- LPCLSID lpClsIdExclude;
- uint cClsIdExclude;
- int SelectedIndex;
- bool fLink;
- HGLOBAL MetaPict;
- SIZEL SizeL;
- };
-
- protected:
- //
- // Class TPasteEntry
- // ----- -----------
- //
- class _USERCLASS TPasteEntry {
- public:
- TPasteEntry();
-
- FORMATETC fmtetc;
- LPCSTR lpstrFormatName;
- LPCSTR lpstrResultText;
- DWORD dwFlags;
- DWORD dwScratchSpace;
- };
-
- //
- // Class TPasteListItemData
- // ----- ------------------
- //
- class _USERCLASS TPasteListItemData {
- public:
- TPasteListItemData();
-
- int nPasteEntriesIndex;
- bool fCntrEnableIcon;
- };
-
- public:
- TPasteSpecialDlg(TWindow* parent,
- TOcInitInfo &initInfo,
- TData *data = 0,
- TResId templateId = 0,
- const char far* title = 0,
- TModule* module = 0);
- ~TPasteSpecialDlg();
-
- int DoExecute();
-
- protected:
- bool EvInitDialog(HWND);
- void CleanupWindow();
- bool OleDlgOk();
-
- bool GetDefaultPasteSpecialData();
-
- bool TogglePasteType(TPasteSpecialFlags);
- void ChangeListSelection();
- void EnableDisplayAsIcon();
- void ToggleDisplayAsIcon();
- void SetPasteSpecialHelpResults();
-
- bool FillPasteList();
- bool FillPasteLinkList();
- bool AddPasteListItem(TListBox&, bool, int, const char far*);
- void FreeListData(TListBox&);
-
- bool HasPercentS(const char far*);
-
- void MarkPasteEntryList(LPDATAOBJECT lpSrcDataObj,
- TPasteEntry far* lpPriorityList,
- int cEntries);
-
- void EvDrawClipboard();
- void EvChangeCBChain(HWND hwndRemoved, HWND hwndNext);
-
- void ChangeIconClicked();
- void PasteClicked();
- void PasteLinkClicked();
- void DisplayAsIconClicked();
-
- void DisplayListSelChange();
- void DisplayListDblClk();
-
- TCheckBox* DisplayAsIcon;
- TButton* ChangeIcon;
- TRadioButton* Paste;
- TRadioButton* PasteLink;
- TResultImage* ResultImage;
- TIconImage* IconImage;
- TListBox* DisplayList;
- TListBox* PasteList;
- TListBox* PasteLinkList;
- TStatic* ResultText;
- TStatic* SourceText;
- TButton* Help;
-
- TOcInitInfo &InitInfo;
- TData *Data;
-
- private:
- //
- // Used internally to keep track of dialog's state
- //
- struct _USERCLASS THelper {
- public:
- THelper();
-
- uint32 Flags;
- int PasteListCurSel;
- int PasteLinkListCurSel;
- int SelectedIndex;
- bool Link;
- char UnknownType[MaxUnknownLen];
- char UnknownSource[MaxUnknownLen];
- char AppName[MaxKeyLen];
-
- CLSID ClsIdOD;
- SIZEL SizeLOD;
-
- char far* FullUserTypeNameOD;
- char far* SourceOfDataOD;
- bool SrcAspectIconOD;
- bool SrcOnlyIconicOD;
- HGLOBAL MetaPictOD;
- HGLOBAL ObjDesc;
-
- CLSID ClsIdLSD;
- SIZEL SizeLLSD;
-
- char far* FullUserTypeNameLSD;
- char far* SourceOfDataLSD;
- bool SrcAspectIconLSD;
- bool SrcOnlyIconicLSD;
- HGLOBAL MetaPictLSD;
- HGLOBAL LinkSrcDesc;
-
- bool ClipboardChanged;
- };
-
- THelper& Helper;
-
- //
- // Used internally if no TData* is specified
- //
- bool DeleteData;
- TPasteEntry *pOleUIEntries;
- TOcFormatInfo* pBOleEntries;
- uint *pBOleLinkEntries;
-
- DECLARE_RESPONSE_TABLE(TPasteSpecialDlg);
- };
-
-
- #if !defined(LPOLEUILINKCONTAINER)
-
- // IOleUILinkContainer Interface
- // -----------------------------
- // This interface must be implemented by container applications that
- // want to use the EditLinks dialog. the EditLinks dialog calls back
- // to the container app to perform the OLE functions to manipulate
- // the links within the container. The OWL Edit Links Dialog uses
- // Bolero's implementation of this interface.
- //
-
- #define LPOLEUILINKCONTAINER IOleUILinkContainer FAR*
-
- #undef INTERFACE
- #define INTERFACE IOleUILinkContainer
-
- DECLARE_INTERFACE_(IOleUILinkContainer, IUnknown)
- {
- //*** IUnknown methods ***/
- STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef) (THIS) PURE;
- STDMETHOD_(ULONG,Release) (THIS) PURE;
-
- STDMETHOD_(DWORD,GetNextLink) (THIS_ DWORD dwLink) PURE;
- STDMETHOD(SetLinkUpdateOptions) (THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;
- STDMETHOD(GetLinkUpdateOptions) (THIS_ DWORD dwLink, DWORD FAR* lpdwUpdateOpt) PURE;
- STDMETHOD(SetLinkSource) (THIS_
- DWORD dwLink,
- LPSTR lpszDisplayName,
- ULONG lenFileName,
- ULONG FAR* pchEaten,
- BOOL fValidateSource) PURE;
- STDMETHOD(GetLinkSource) (THIS_
- DWORD dwLink,
- LPSTR FAR* lplpszDisplayName,
- ULONG FAR* lplenFileName,
- LPSTR FAR* lplpszFullLinkType,
- LPSTR FAR* lplpszShortLinkType,
- BOOL FAR* lpfSourceAvailable,
- BOOL FAR* lpfIsSelected) PURE;
- STDMETHOD(OpenLinkSource) (THIS_ DWORD dwLink) PURE;
- STDMETHOD(UpdateLink) (THIS_
- DWORD dwLink,
- BOOL fErrorMessage,
- BOOL fErrorAction) PURE;
- STDMETHOD(CancelLink) (THIS_ DWORD dwLink) PURE;
- };
-
- #endif // !defined LPOLEUILINKCONTAINER
-
- //
- // Enumeration used to populate dwFlags member of TEditLinksDlg::TData
- //
- enum TEditLinksFlags {
- elShowHelp = 0x0001,
- elDisableUpdateNow = 0x0002,
- elDisableOpenSource = 0x0004,
- elDisableChangeSource= 0x0008,
- elDisableCancelLink = 0x0010
- };
-
- //
- // Class TEditLinksDlg
- // ----- -------------
- //
- class _USERCLASS TEditLinksDlg : public TOleDialog {
- public:
- //
- // Class TEditLinksDlg::TData
- // ----- --------------------
- // Class used to pass in the necessary information to the
- // EditLinks dialog.
- //
- class _USERCLASS TData {
- public:
- TData(const TOcView&);
- ~TData();
- uint32 dwFlags;
- LPOLEUILINKCONTAINER lpOleUILinkContainer;
- };
-
- TEditLinksDlg(TWindow* parent,
- const TOcView& ocView,
- TResId templateId = 0,
- const char far* title = 0,
- TModule* module = 0);
- ~TEditLinksDlg();
- int DoExecute();
- bool OleDlgOk() {return true;}
-
- protected:
- bool EvInitDialog(HWND);
- void DrawLinksListEntry(DRAWITEMSTRUCT far&);
-
- void EvMeasureItem(uint, MEASUREITEMSTRUCT far&);
- void EvDrawItem(uint, DRAWITEMSTRUCT far&);
- LRESULT EvCompareItem(uint, COMPAREITEMSTRUCT far&);
- void EvDeleteItem(uint, DELETEITEMSTRUCT far&);
-
- void ChangeSourceClicked();
- void AutomaticClicked();
- void ManualClicked();
- void BreakLinkClicked();
- void UpdateNowClicked();
- void OpenSourceClicked();
-
- private:
- //
- // Used internally to store information about a particular link
- //
- class _USERCLASS TLinkInfo {
- public:
- TLinkInfo(DWORD);
- ~TLinkInfo();
-
- uint32 dwLink;
- char* lpszDisplayName;
- char* lpszItemName;
- char* lpszShortFileName;
- char* lpszShortLinkType;
- char* lpszFullLinkType;
- char* lpszAMX;
- uint32 clenFileName;
- bool fSourceAvailable;
- bool fIsAuto;
- bool fIsMarked;
- bool fDontFree;
- bool fIsSelected;
- };
-
- //
- // Used internally to keep track of dialog's state
- //
- class _USERCLASS THelper {
- public:
- THelper();
-
- bool fClose;
- int *rgIndex;
- int cSelItems;
- bool fItemsExist;
- char szClose[50];
- };
-
- //
- // Class TChgSrcFileOpenDlg
- // ----- ------------------
- // This customized version of the FileOpen dialog performs
- // validation on the file name entered. It is used when the
- // user decides to change the source of a Link.
- //
- class _USERCLASS TChgSrcFileOpenDlg : public TFileOpenDialog {
- public:
- //
- // Class TChgSrcData
- // ----- -----------
- //
- class _USERCLASS TChgSrcData {
- public:
- TChgSrcData(TLinkInfo far*, TEditLinksDlg::TData&);
-
- TEditLinksDlg::TLinkInfo far* lpLI;
- TEditLinksDlg::TData& Data;
- bool fValidLink;
- char* lpszFrom;
- char* lpszTo;
- };
-
- TChgSrcFileOpenDlg(TWindow* parent,
- TData& data,
- TChgSrcData& chgSrcData,
- TResId templateId = 0,
- const char far* title = 0,
- TModule* module = 0);
- ~TChgSrcFileOpenDlg();
-
- protected:
- void SetupWindow();
-
- TChgSrcData& ChgSrcData;
-
- private:
- //
- // Class THelper
- // ----- -------
- //
- class _USERCLASS THelper {
- public:
- THelper() { memset(this, 0, sizeof(THelper)); }
-
- bool fValidLink;
- char szFileName[MaxPathLen];
- char szItemName[MaxPathLen];
- bool bFileNameStored;
- bool bItemNameStored;
- char szEdit[MaxPathLen];
- LPSTR lpszFrom;
- LPSTR lpszTo;
- };
- THelper& Helper;
- };
-
- protected:
- bool Container_ChangeSource();
- HRESULT Container_AutomaticManual(bool fAutoMan);
- HRESULT Container_UpdateNow();
- HRESULT Container_OpenSource();
-
- int AddLinkLBItem(TLinkInfo* lpLinkInfo, bool sel);
- void UpdateLinkLBItem(int nIndex, bool bSelect);
- void ChangeAllLinks(char* from, char* to);
- bool ChangeSource(char* file,
- TChgSrcFileOpenDlg::TChgSrcData&,
- uint);
- void BreakString(TLinkInfo*);
- HRESULT CancelLink();
-
- int GetSelectedItems(int* &);
- void InitControls();
-
- void DiffPrefix(const char*, const char*, char* &, char* &);
- int LoadLinkLB();
- void RefreshLinkLB();
- int LBPad() const;
-
- TListBox* LinksList;
- TButton* UpdateBtn;
- TButton* OpenBtn;
- TButton* ChangeBtn;
- TButton* BreakLinkBtn;
- TButton* Help;
- TButton* Cancel;
- TRadioButton* Automatic;
- TRadioButton* Manual;
- TStatic* LinkSource;
- TStatic* LinkType;
-
- int nColPos[LinksListCols];
- int nMaxCharWidth, nHeightLine;
- TData* Data;
-
- private:
- THelper& Helper;
-
- DECLARE_RESPONSE_TABLE(TEditLinksDlg);
- };
-
- //----------------------------------------------------------------------------
- // Inlines
- //
-
- //
- //
- //
- inline HGLOBAL
- TOleDialog::GetIconFromClass(REFCLSID clsid, const char far* label, bool useType)
- {
- return ::OleGetIconOfClass(clsid, OleStr(const_cast<char far*>(label)), useType);
- }
-
- //
- //
- //
- inline HGLOBAL
- TOleDialog::GetIconFromFile(const char far* path, bool useFile)
- {
- return ::OleGetIconOfFile(OleStr(const_cast<char far*>(path)), useFile);
- }
-
- //
- //
- //
- inline char far*
- TOleDialog::AnsiPrev(const char far* start, const char far* current)
- {
- return ::AnsiPrev(start, current);
- }
-
- //
- //
- //
- inline char far*
- TOleDialog::AnsiNext(const char far* current)
- {
- return ::AnsiNext(current);
- }
-
- #if defined(BI_DATA_NEAR)
-
- //
- //
- //
- inline char*
- TOleDialog::AnsiPrev(const char* start, const char* current)
- {
- char far* str = ::AnsiPrev(start, current);
- CHECK(HIWORD(str) == HIWORD(start));
- return (char*)(LOWORD(str));
- }
-
- //
- //
- //
- inline char*
- TOleDialog::AnsiNext(const char* current)
- {
- char far* str = ::AnsiNext(current);
- CHECK(HIWORD(str) == HIWORD(current));
- return (char*)(LOWORD(str));
- }
-
- //
- //
- //
- inline char*
- TOleDialog::ChopText(TWindow& win, int width, char* str)
- {
- char far* lpstr = str;
- char far* result = ChopText(win, width, lpstr);
- CHECK(HIWORD(result) == HIWORD(lpstr));
- return (char*)(LOWORD(result));
- }
- #endif // BI_DATA_NEAR
-
- //
- //
- //
- inline char far*
- TResultImage::GetClassName()
- {
- return RESULTIMAGE_CLSNAME;
- }
-
- //
- //
- //
- inline char far*
- TIconImage::GetClassName()
- {
- return ICONIMAGE_CLSNAME;
- }
-
- //
- //
- //
- inline HCURSOR
- HourGlassOn()
- {
- HCURSOR oldCursor = ::SetCursor(::LoadCursor(0, IDC_WAIT));
- ShowCursor(TRUE);
- return oldCursor;
- }
-
- //
- //
- //
- inline void
- HourGlassOff(HCURSOR hCursor)
- {
- ShowCursor(FALSE);
- SetCursor(hCursor);
- }
-
- //
- // Slight variation of strncpy() which guarantees a NULL-terminated
- // destination - Returns 0 if the 'maxLen' is only 1.
- //
- inline char far*
- strcpyn(char far* dest, const char far* src, size_t maxLen)
- {
- PRECONDITION(!IsBadWritePtr(dest, maxLen));
- dest[maxLen-1] = 0;
- return (maxLen > 1) ? strncpy(dest, src, maxLen-1) : 0;
- }
-
- #if defined(BI_DATA_NEAR)
- inline char*
- strcpyn(char* dest, const char* src, size_t maxlen)
- {
- char far *lpDest = dest;
- char far *lpResult = strcpyn(dest, src, maxlen);
- CHECK(HIWORD(lpResult) == HIWORD(lpDest));
- return (char*)(LOWORD(lpResult));
- }
- #endif
-
- //
- // Initialize FORMATETC structure
- //
- inline void
- InitFormatEtc(FORMATETC &fmt, CLIPFORMAT cf, DWORD tymed, LONG lindex = -1,
- DWORD dwAspect = DVASPECT_CONTENT,
- DVTARGETDEVICE FAR* ptd = 0)
- {
- fmt.cfFormat = cf;
- fmt.dwAspect = dwAspect;
- fmt.ptd = ptd;
- fmt.tymed = tymed;
- fmt.lindex = lindex;
- }
-
- #endif // __USER_OLEDLG_H
-