/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this software; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, * USA. */ // // TXMenu.h // // A TXMenu consists of multiple entries which can be added one at a time. // Each entry consists of some text, and has an associated integer identifier. // A callback is made when a menu entry is selected. // #ifndef __TXMENU_H__ #define __TXMENU_H__ #include "TXWindow.h" // TXMenuCallback's menuSelect() method is called when a particular menu entry // is selected. The id argument identifies the menu entry. class TXMenu; class TXMenuCallback { public: virtual void menuSelect(long id, TXMenu* menu)=0; }; class TXMenu : public TXWindow, public TXEventHandler { public: TXMenu(Display* dpy_, TXMenuCallback* cb=0, int width=1, int height=1, TXWindow* parent_=0); virtual ~TXMenu(); // addEntry() adds an entry to the end of the menu with the given text and // identifier. void addEntry(const char* text, long id); // check() sets whether the given menu entry should have a tick next to it. void check(long id, bool checked); private: int entryHeight(int i); virtual void handleEvent(TXWindow* w, XEvent* ev); void paint(); GC gc; TXMenuCallback* cb; enum { maxEntries = 64 }; char* text[maxEntries]; long id[maxEntries]; bool checked[maxEntries]; int nEntries; int highlight; }; #endif