24#include "config_auto.h"
27#ifndef GRAPHICS_DISABLED
44#define VARDIR "configs/"
45#define MAX_ITEMS_IN_SUBMENU 30
51static std::map<int, ParamContent*> vcMap;
52static int nrParams = 0;
53static int writeCommands[2];
97void ParamsEditor::GetFirstWords(
102 int full_length = strlen(s);
104 const char *next_word = s;
106 while ((n > 0) && reqd_len < full_length) {
107 reqd_len += strcspn(next_word,
"_") + 1;
108 next_word += reqd_len;
111 strncpy(t, s, reqd_len);
122 return "ERROR: ParamContent::GetName()";
144 if (
STRING(*(
sIt)).
string() !=
nullptr) {
163 std::stringstream stream(val);
165 stream.imbue(std::locale::classic());
176void ParamsEditor::GetPrefixes(
const char* s,
STRING* level_one,
179 std::unique_ptr<char[]> p(
new char[1024]);
180 GetFirstWords(s, 1, p.get());
181 *level_one = p.get();
182 GetFirstWords(s, 2, p.get());
183 *level_two = p.get();
184 GetFirstWords(s, 3, p.get());
185 *level_three = p.get();
200 ParamContent_LIST vclist;
201 ParamContent_IT vc_it(&vclist);
204 std::map<const char*, int> amount;
208 int num_iterations = (tess->
params() ==
nullptr) ? 1 : 2;
209 for (v = 0; v < num_iterations; ++v) {
211 for (i = 0; i < vec->
int_params.size(); ++i) {
226 for (vc_it.mark_cycle_pt(); !vc_it.cycled_list(); vc_it.forward()) {
232 GetPrefixes(vc->
GetName(), &tag, &tag2, &tag3);
243 vc_it.move_to_first();
244 for (vc_it.mark_cycle_pt(); !vc_it.cycled_list(); vc_it.forward()) {
249 GetPrefixes(vc->
GetName(), &tag, &tag2, &tag3);
251 if (amount[tag.
string()] == 1) {
257 (amount[tag2.
string()] <= 1)) {
275 WriteParams(param,
false);
276 }
else if (sve->
command_id == writeCommands[1]) {
277 WriteParams(param,
true);
294 const char* name =
"ParamEditorMAIN";
295 sv =
new ScrollView(name, 1, 1, 200, 200, 300, 200);
303 SVMenuNode* svMenuRoot = BuildListOfAllLeaves(tess);
308 paramfile +=
"edited";
312 writeCommands[0] = nrParams+1;
313 std_menu->
AddChild(
"All Parameters", writeCommands[0],
314 paramfile.
string(),
"Config file name?");
316 writeCommands[1] = nrParams+2;
317 std_menu->
AddChild (
"changed_ Parameters Only", writeCommands[1],
318 paramfile.
string(),
"Config file name?");
325void ParamsEditor::WriteParams(
char *filename,
330 if ((fp = fopen (filename,
"rb")) !=
nullptr) {
332 sprintf (msg_str,
"Overwrite file " "%s" "? (Y/N)", filename);
340 fp = fopen (filename,
"wb");
343 "Can't write to file "
349 for (
auto& iter : vcMap) {
352 fprintf(fp,
"%-25s %-12s # %s\n",
#define MAX_ITEMS_IN_SUBMENU
#define ELISTIZE(CLASSNAME)
tesseract::ParamsVectors * GlobalParams()
tesseract::StringParam * sIt
const char * GetDescription() const
static ParamContent * GetParamContentById(int id)
const char * GetName() const
tesseract::DoubleParam * dIt
static int Compare(const void *v1, const void *v2)
tesseract::IntParam * iIt
void SetValue(const char *val)
tesseract::BoolParam * bIt
void Notify(const SVEvent *sve) override
ParamsEditor(tesseract::Tesseract *, ScrollView *sv=nullptr)
GenericVector< IntParam * > int_params
GenericVector< DoubleParam * > double_params
GenericVector< BoolParam * > bool_params
GenericVector< StringParam * > string_params
const char * name_str() const
const char * info_str() const
void set_value(int32_t value)
void set_value(bool value)
void set_value(const STRING &value)
const char * string() const
void set_value(double value)
void add_str_int(const char *str, int number)
void add_str_double(const char *str, double number)
const char * string() const
int ShowYesNoDialog(const char *msg)
void AddMessage(const char *format,...)
SVMenuNode * AddChild(const char *txt)
void BuildMenu(ScrollView *sv, bool menu_bar=true)