/////////////////////////////////////////////////////////////////////// // File: svmnode.h // description_: ScrollView Menu Node // Author: Joern Wanke // Created: Thu Nov 29 2007 // // (C) Copyright 2007, Google Inc. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // /////////////////////////////////////////////////////////////////////// // // A SVMenuNode is an entity which contains the mapping from a menu entry on // the server side to the corresponding associated commands on the client. // It is designed to be a tree structure with a root node, which can then be // used to generate the appropriate messages to the server to display the // menu structure there. // A SVMenuNode can both be used in the context_ of popup menus as well as // menu bars. #ifndef THIRD_PARTY_TESSERACT_VIEWER_SVMNODE_H__ #define THIRD_PARTY_TESSERACT_VIEWER_SVMNODE_H__ class ScrollView; class SVMenuNode { public: // Creating the (empty) root menu node. SVMenuNode(); // Destructor for every node. ~SVMenuNode(); // Create a new sub menu node with just a caption. This is used to create // nodes which act as parent nodes to other nodes (e.g. submenus). SVMenuNode* AddChild(const char* txt); // Create a "normal" menu node which is associated with a command event. void AddChild(const char* txt, int command_event); // Create a flag menu node. void AddChild(const char* txt, int command_event, int tv); // Create a menu node with an associated value (which might be changed // through the gui). void AddChild(const char* txt, int command_event, const char* val); // Create a menu node with an associated value and description_. void AddChild(const char* txt, int command_event, const char* val, const char* desc); // Build a menu structure for the server and send the necessary messages. // Should be called on the root node. If menu_bar is true, a menu_bar menu // is built (e.g. on top of the window), if it is false a popup menu is // built which gets shown by right clicking on the window. void BuildMenu(ScrollView *sv, bool menu_bar = true); private: // Constructor holding the actual node data. SVMenuNode(int command_event, const char* txt, int tv, bool check_box_entry, const char* val, const char* desc); // Adds a new menu node to the current node. void AddChild(SVMenuNode* svmn); // The parent node of this node. SVMenuNode* parent_; // The first child of this node. SVMenuNode* child_; // The next "sibling" of this node (e.g. same parent). SVMenuNode* next_; // Whether this menu node actually is a flag. bool is_check_box_entry_; // The command event associated with a specific menu node. Should be unique. int cmd_event_; // The caption associated with a specific menu node. char* text_; // The value of the flag (if this menu node is a flag). bool toggle_value_; // The value of the menu node. (optional) const char* value_; // A description_ of the value. (optional) const char* description_; }; #endif // THIRD_PARTY_TESSERACT_VIEWER_SVMNODE_H__