| /////////////////////////////////////////////////////////////////////// |
| // File: varabled.cpp |
| // Description: Variables Editor |
| // Author: Joern Wanke |
| // Created: Wed Jul 18 10:05:01 PDT 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. |
| // |
| /////////////////////////////////////////////////////////////////////// |
| // |
| // The variables editor is used to edit all the variables used within |
| // tesseract from the ui. |
| #ifndef GRAPHICS_DISABLED |
| #ifndef VARABLED_H |
| #define VARABLED_H |
| |
| #include "elst.h" |
| #include "scrollview.h" |
| #include "varable.h" |
| #include "tesseractclass.h" |
| |
| class SVMenuNode; |
| |
| // A list of all possible variable types used. |
| enum VarType { |
| VT_INTEGER, |
| VT_BOOLEAN, |
| VT_STRING, |
| VT_DOUBLE |
| }; |
| |
| // A rather hackish helper structure which can take any kind of variable input |
| // (defined by VarType) and do a couple of common operations on them, like |
| // comparisond or getting its value. It is used in the context of the |
| // VariablesEditor as a bridge from the internal tesseract variables to the |
| // ones displayed by the ScrollView server. |
| class VariableContent : public ELIST_LINK { |
| public: |
| // Compare two VC objects by their name. |
| static int Compare(const void* v1, const void* v2); |
| |
| // Gets a VC object identified by its ID. |
| static VariableContent* GetVariableContentById(int id); |
| |
| // Constructors for the various VarTypes. |
| VariableContent() { |
| } |
| VariableContent(STRING_VARIABLE* it); |
| VariableContent(INT_VARIABLE* it); |
| VariableContent(BOOL_VARIABLE* it); |
| VariableContent(double_VARIABLE* it); |
| |
| |
| // Getters and Setters. |
| void SetValue(const char* val); |
| const char* GetValue() const; |
| const char* GetName() const; |
| const char* GetDescription() const; |
| |
| int GetId() { return my_id_; } |
| bool HasChanged() { return changed_; } |
| |
| private: |
| // The unique ID of this VC object. |
| int my_id_; |
| // Whether the variable was changed_ and thus needs to be rewritten. |
| bool changed_; |
| // The actual vartype of this VC object. |
| VarType var_type_; |
| |
| STRING_VARIABLE* sIt; |
| INT_VARIABLE* iIt; |
| BOOL_VARIABLE* bIt; |
| double_VARIABLE* dIt; |
| }; |
| |
| ELISTIZEH(VariableContent) |
| |
| // The variables editor enables the user to edit all the variables used within |
| // tesseract. It can be invoked on its own, but is supposed to be invoked by |
| // the program editor. |
| class VariablesEditor : public SVEventHandler { |
| public: |
| // Integrate the variables editor as popupmenu into the existing scrollview |
| // window (usually the pg editor). If sv == null, create a new empty |
| // empty window and attach the variables editor to that window (ugly). |
| VariablesEditor(const tesseract::Tesseract*, ScrollView* sv = NULL); |
| |
| // Event listener. Waits for SVET_POPUP events and processes them. |
| void Notify(const SVEvent* sve); |
| |
| private: |
| // Gets the up to the first 3 prefixes from s (split by _). |
| // For example, tesseract_foo_bar will be split into tesseract,foo and bar. |
| void GetPrefixes(const char* s, STRING* level_one, |
| STRING* level_two, STRING* level_three); |
| |
| // Gets the first n words (split by _) and puts them in t. |
| // For example, tesseract_foo_bar with N=2 will yield tesseract_foo_. |
| void GetFirstWords(const char *s, // source string |
| int n, // number of words |
| char *t); // target string |
| |
| // Find all editable variables used within tesseract and create a |
| // SVMenuNode tree from it. |
| SVMenuNode *BuildListOfAllLeaves(); |
| |
| // Write all (changed_) variables to a config file. |
| void WriteVars(char* filename, bool changes_only); |
| |
| ScrollView* sv_window_; |
| }; |
| |
| #endif |
| #endif |