home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / lib / mac / UserInterface / CPatternButtonPopup.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  8.3 KB  |  287 lines

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2.  *
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "NPL"); you may not use this file except in
  5.  * compliance with the NPL.  You may obtain a copy of the NPL at
  6.  * http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the NPL is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
  10.  * for the specific language governing rights and limitations under the
  11.  * NPL.
  12.  *
  13.  * The Initial Developer of this code under the NPL is Netscape
  14.  * Communications Corporation.  Portions created by Netscape are
  15.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  16.  * Reserved.
  17.  */
  18.  
  19. #ifndef CPatternButtonPopup_H
  20. #define CPatternButtonPopup_H
  21. #pragma once
  22.  
  23. // Includes
  24.  
  25. #include "CPatternButton.h"
  26.  
  27. #include "MPaneEnablerPolicy.h"
  28.  
  29. // Forward declarations
  30.  
  31. class LMenu;
  32.  
  33. // Class declaration
  34.  
  35. class CPatternButtonPopup : public CPatternButton
  36. {
  37.                   
  38. public:
  39.     enum { class_ID = 'PbPu' };
  40.                         
  41.     typedef CPatternButton super;
  42.                             
  43.     class CValueRangeException { };
  44.     class CAttemptToSetDisabledValueException { };
  45.                                 
  46.                         // Ñ Construction/destruction
  47.                         
  48.                         CPatternButtonPopup(LStream* inStream);
  49.     virtual             ~CPatternButtonPopup();
  50.                         
  51.                         // Ñ Menu factory methods
  52.                         
  53.     virtual LMenu*        GetMenu() const;
  54.     virtual void        SetMenu(LMenu* inMenu);
  55.     virtual void        AdoptMenu(LMenu* inMenuToAdopt);
  56.     virtual Boolean        OwnsMenu() const;
  57.     
  58.                         // Ñ Value mutators
  59.                         
  60.     virtual    void        SetValue(Int32 inValue);
  61.     virtual    void        SetPopupMinMaxValues();
  62.     
  63.                         // Ñ Property accessors
  64.                         
  65.     UInt32                GetTicksBeforeDisplayingPopup() const;
  66.     void                SetTicksBeforeDisplayingPopup(UInt32 inTicksBeforeDisplayingPopup);
  67.     
  68.     Int32                GetQuickClickValueOrCommand() const;
  69.     void                SetQuickClickValueOrCommand(Int32 inQuickClickValueOrCommand);
  70.  
  71.     Boolean                QuickClickIsCommandBased() const;
  72.     void                SetQuickClickIsCommandBased(Boolean inQuickClickIsCommandBase);
  73.     
  74.     Boolean                MenuIsResourceBased() const;
  75.     void                SetMenuIsResourceBased(Boolean inResourceBasedMenu);
  76.     
  77.     Boolean                MarkCurrentItem() const;
  78.     void                SetMarkCurrentItem(Boolean inMarkCurrentItem);
  79.     
  80.     Uint8                GetMarkCharacter() const;
  81.     void                SetMarkCharacter(Uint8 inMarkCharacter);
  82.     
  83.     Boolean                PopdownBehavior() const;
  84.     void                SetPopdownBehavior(Boolean inPopdownBehavior);
  85.     
  86. protected:
  87.     virtual void        FinishCreateSelf();
  88.     
  89.                         // Ñ Menu factory methods
  90.     
  91.     virtual void        MakeNewMenu();
  92.     virtual void        EliminatePreviousMenu();
  93.  
  94.                         // Ñ Tracking
  95.  
  96.     virtual    Boolean        TrackHotSpot(
  97.                                                 Int16        inHotSpot,
  98.                                                 Point        inPoint,
  99.                                                 Int16        inModifiers);
  100.     virtual    void        HandlePopupMenuSelect(
  101.                                                 Point        inPopupLoc,
  102.                                                 Int16        inCurrentItem,
  103.                                                 Int16&        outMenuID,
  104.                                                 Int16&        outMenuItem);
  105.     virtual void        HotSpotResult(Int16 inHotSpot);
  106.  
  107.                         // Ñ Miscellaneous
  108.  
  109.     virtual Boolean        OKToSendCommand(Int32 inCommand);
  110.     virtual    void        BroadcastValueMessage();
  111.     virtual void        AdjustMenuContents();
  112.     virtual    void        SetupCurrentMenuItem(
  113.                                                 MenuHandle    inMenuH,
  114.                                                 Int16        inCurrentItem);
  115.     virtual    void        GetPopupMenuPosition(Point& outPopupLoc);
  116.  
  117.                         // Ñ "Template" methods (or hooks)
  118.                         
  119.     virtual void        HandleQuickClick();
  120.     virtual Boolean        HandleNewValue(Int32 inNewValue);
  121.     
  122.     virtual void        HandleEnablingPolicy();
  123.  
  124. private:
  125.     LMenu*                mMenu;
  126.  
  127.     ResIDT                mPopupMenuID;
  128.     ResIDT                mPopupTextTraitsID;
  129.     Int32                mInitialCurrentItem;
  130.     Uint32                mTicksBeforeDisplayingPopup;
  131.     Int32                mQuickClickValueOrCommand;
  132.     Boolean                mQuickClickIsCommandBased;
  133.     Boolean                mResourceBasedMenu;
  134.     Boolean                mPopdownBehavior;
  135.     Boolean                mMarkCurrentItem;        
  136.     Uint8                mMarkCharacter;
  137.     Boolean                mDetachResource;
  138.  
  139.     Boolean                mOwnsMenu;
  140.     Boolean                mPopUpMenuSelectWasCalled;
  141. };
  142.  
  143. // Inline methods
  144.  
  145. // ---------------------------------------------------------------------------
  146. //        Ñ GetTicksBeforeDisplayingPopup
  147. // ---------------------------------------------------------------------------
  148.                         
  149. inline UInt32
  150. CPatternButtonPopup::GetTicksBeforeDisplayingPopup() const
  151. {
  152.     return mTicksBeforeDisplayingPopup;                            
  153. }
  154.  
  155. // ---------------------------------------------------------------------------
  156. //        Ñ SetTicksBeforeDisplayingPopup
  157. // ---------------------------------------------------------------------------
  158.     
  159. inline void
  160. CPatternButtonPopup::SetTicksBeforeDisplayingPopup(UInt32 inTicksBeforeDisplayingPopup)
  161. {
  162.     mTicksBeforeDisplayingPopup = inTicksBeforeDisplayingPopup;
  163. }
  164.  
  165. // ---------------------------------------------------------------------------
  166. //        Ñ GetQuickClickValueOrCommand
  167. // ---------------------------------------------------------------------------
  168.  
  169. inline Int32
  170. CPatternButtonPopup::GetQuickClickValueOrCommand() const
  171. {
  172.     return mQuickClickValueOrCommand;                            
  173. }
  174.  
  175. // ---------------------------------------------------------------------------
  176. //        Ñ SetQuickClickValueOrCommand
  177. // ---------------------------------------------------------------------------
  178.     
  179. inline void
  180. CPatternButtonPopup::SetQuickClickValueOrCommand(Int32 inQuickClickValueOrCommand)
  181. {
  182.     mQuickClickValueOrCommand = inQuickClickValueOrCommand;
  183. }
  184.  
  185. // ---------------------------------------------------------------------------
  186. //        Ñ QuickClickIsCommandBased
  187. // ---------------------------------------------------------------------------
  188.     
  189. inline Boolean
  190. CPatternButtonPopup::QuickClickIsCommandBased() const
  191. {
  192.     return mQuickClickIsCommandBased;
  193. }
  194.  
  195. // ---------------------------------------------------------------------------
  196. //        Ñ SetQuickClickIsCommandBased
  197. // ---------------------------------------------------------------------------
  198.     
  199. inline void
  200. CPatternButtonPopup::SetQuickClickIsCommandBased(Boolean inQuickClickIsCommandBase)
  201. {
  202.     mQuickClickIsCommandBased = inQuickClickIsCommandBase;
  203. }
  204.  
  205. // ---------------------------------------------------------------------------
  206. //        Ñ MenuIsResourceBased
  207. // ---------------------------------------------------------------------------
  208.  
  209. inline Boolean
  210. CPatternButtonPopup::MenuIsResourceBased() const
  211. {
  212.     return mResourceBasedMenu;
  213. }
  214.  
  215. // ---------------------------------------------------------------------------
  216. //        Ñ SetMenuIsResourceBased
  217. // ---------------------------------------------------------------------------
  218.     
  219. inline void
  220. CPatternButtonPopup::SetMenuIsResourceBased(Boolean inResourceBasedMenu)
  221. {
  222.     mResourceBasedMenu = inResourceBasedMenu;
  223. }
  224.  
  225. // ---------------------------------------------------------------------------
  226. //        Ñ MarkCurrentItem
  227. // ---------------------------------------------------------------------------
  228.     
  229. inline Boolean
  230. CPatternButtonPopup::MarkCurrentItem() const
  231. {
  232.     return mMarkCurrentItem;
  233. }
  234.  
  235. // ---------------------------------------------------------------------------
  236. //        Ñ SetMarkCurrentItem
  237. // ---------------------------------------------------------------------------
  238.     
  239. inline void
  240. CPatternButtonPopup::SetMarkCurrentItem(Boolean inMarkCurrentItem)
  241. {
  242.     mMarkCurrentItem = inMarkCurrentItem;
  243. }
  244.  
  245. // ---------------------------------------------------------------------------
  246. //        Ñ PopdownBehavior
  247. // ---------------------------------------------------------------------------
  248.  
  249. inline Boolean
  250. CPatternButtonPopup::PopdownBehavior() const
  251. {
  252.     return mPopdownBehavior;
  253. }
  254.  
  255. // ---------------------------------------------------------------------------
  256. //        Ñ SetPopdownBehavior
  257. // ---------------------------------------------------------------------------
  258.     
  259. inline void
  260. CPatternButtonPopup::SetPopdownBehavior(
  261.     Boolean inPopdownBehavior)
  262. {
  263.     mPopdownBehavior = inPopdownBehavior;
  264. }
  265.  
  266. // ---------------------------------------------------------------------------
  267. //        Ñ GetMarkCharacter
  268. // ---------------------------------------------------------------------------
  269.     
  270. inline Uint8
  271. CPatternButtonPopup::GetMarkCharacter() const
  272. {
  273.     return mMarkCharacter;
  274. }
  275.  
  276. // ---------------------------------------------------------------------------
  277. //        Ñ SetMarkCharacter
  278. // ---------------------------------------------------------------------------
  279.  
  280. inline void
  281. CPatternButtonPopup::SetMarkCharacter(Uint8 inMarkCharacter)
  282. {
  283.     mMarkCharacter = inMarkCharacter;
  284. }
  285.  
  286. #endif
  287.