| /////////////////////////////////////////////////////////////////////// |
| // 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 TESSERACT_VIEWER_SVMNODE_H__ |
| #define 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 // TESSERACT_VIEWER_SVMNODE_H__ |