summaryrefslogtreecommitdiff
path: root/rhtvision/include/tv/menuview.h
diff options
context:
space:
mode:
Diffstat (limited to 'rhtvision/include/tv/menuview.h')
-rw-r--r--rhtvision/include/tv/menuview.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/rhtvision/include/tv/menuview.h b/rhtvision/include/tv/menuview.h
new file mode 100644
index 0000000..73ba7fb
--- /dev/null
+++ b/rhtvision/include/tv/menuview.h
@@ -0,0 +1,137 @@
+/*
+ * Turbo Vision - Version 2.0
+ *
+ * Copyright (c) 1994 by Borland International
+ * All Rights Reserved.
+ *
+
+Modified by Robert H”hne to be used for RHIDE.
+Modified by Salvador E. Tropea to enhance functionality.
+
+ *
+ *
+ */
+
+/* ---------------------------------------------------------------------- */
+/* class TMenuView */
+/* */
+/* Palette layout */
+/* 1 = Normal text */
+/* 2 = Disabled text */
+/* 3 = Shortcut text */
+/* 4 = Normal selection */
+/* 5 = Disabled selection */
+/* 6 = Shortcut selection */
+/* ---------------------------------------------------------------------- */
+
+#if defined( Uses_TMenuView ) && !defined( __TMenuView )
+#define __TMenuView
+
+class TRect;
+class TMenu;
+struct TEvent;
+
+class TMenuView : public TView
+{
+
+public:
+
+ TMenuView( const TRect& bounds, TMenu *aMenu, TMenuView *aParent );
+ TMenuView( const TRect& bounds );
+
+ void setBounds( const TRect& bounds );
+ virtual ushort execute();
+ TMenuItem *findItem( char ch );
+ virtual TRect getItemRect( TMenuItem *item );
+ virtual ushort getHelpCtx();
+ virtual TPalette& getPalette() const;
+ virtual void handleEvent( TEvent& event );
+ TMenuItem *hotKey( ushort keyCode );
+ TMenuView *newSubView( const TRect& bounds,
+ TMenu *aMenu,
+ TMenuView *aParentMenu
+ );
+ // SET: Looks like some users really likes the original behavior of
+ // having 1 space around menu items. As it reduces the number of menues
+ // we can have. I added a conditional way to control it. The code is in
+ // TMenuBar, when you create a menu bar (or chanBounds it) the Bar
+ // calculates the length of the items and if they are greater than size.x
+ // enters in the compatMenu mode. "Norberto Alfredo Bensa (Beto)"
+ // <norberto.bensa@abaconet.com.ar> sent me an uncoditional patch that I used
+ // as base. This variable is 0 by default (TMenuView constructor)
+ char compactMenu;
+
+protected:
+
+ TMenuView *parentMenu;
+ TMenu *menu;
+ TMenuItem *current;
+
+ // SET: Added to make the code easier to read and to implement some
+ // alternatives.
+ Boolean keyToItem(TEvent &event);
+ Boolean keyToHotKey(TEvent &event);
+
+private:
+
+ void nextItem();
+ void prevItem();
+ void trackKey( Boolean findNext );
+ Boolean mouseInOwner( TEvent& e );
+ Boolean mouseInMenus( TEvent& e );
+ void trackMouse( TEvent& e );
+ TMenuView *topMenu();
+ Boolean updateMenu( TMenu *menu );
+ void do_a_select( TEvent& );
+ TMenuItem *findHotKey( TMenuItem *p, ushort keyCode );
+#if !defined( NO_STREAM )
+private:
+
+ virtual const char *streamableName() const
+ { return name; }
+ static void writeMenu( opstream&, TMenu * );
+ static TMenu *readMenu( ipstream& );
+
+protected:
+
+ TMenuView( StreamableInit );
+ virtual void write( opstream& );
+ virtual void *read( ipstream& );
+
+public:
+
+ static const char * const name;
+ static TStreamable *build();
+#endif // NO_STREAM
+};
+
+#if !defined( NO_STREAM )
+inline ipstream& operator >> ( ipstream& is, TMenuView& cl )
+ { return is >> (TStreamable&)cl; }
+inline ipstream& operator >> ( ipstream& is, TMenuView*& cl )
+ { return is >> (void *&)cl; }
+
+inline opstream& operator << ( opstream& os, TMenuView& cl )
+ { return os << (TStreamable&)cl; }
+inline opstream& operator << ( opstream& os, TMenuView* cl )
+ { return os << (TStreamable *)cl; }
+#endif // NO_STREAM
+
+inline TMenuView::TMenuView( const TRect& bounds,
+ TMenu *aMenu,
+ TMenuView *aParent
+ ) :
+ TView(bounds), compactMenu ( 0 ), parentMenu( aParent ), menu( aMenu ),
+ current( 0 )
+{
+ eventMask |= evBroadcast;
+}
+
+inline TMenuView::TMenuView( const TRect& bounds ) :
+ TView(bounds), compactMenu(0), parentMenu(0), menu(0), current(0)
+{
+ eventMask |= evBroadcast;
+}
+
+#endif // Uses_TMenuView
+