//
// Fl_Help_Dialog dialog for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2021 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file.  If this
// file is missing or damaged, see the license at:
//
//     https://www.fltk.org/COPYING.php
//
// Please see the following page on how to report bugs and issues:
//
//     https://www.fltk.org/bugs.php
//
// ========================================================================
//  DO NOT EDIT FL/Fl_Help_Dialog.H and src/Fl_Help_Dialog.cxx !!!
// ========================================================================
//  Please use fluid to change src/Fl_Help_Dialog.fl interactively
//  and then use fluid to "write code" or edit and use fluid -c .
// ========================================================================
//

// generated by Fast Light User Interface Designer (fluid) version 1.0405

#include "../FL/Fl_Help_Dialog.H"
#include <FL/Fl_Shared_Image.H>
#include "flstring.h"
#include <FL/fl_ask.H>

void Fl_Help_Dialog::cb_back__i(Fl_Button*, void*) {
  if (index_ > 0)
    index_ --;

  if (index_ == 0)
    back_->deactivate();

  forward_->activate();

  int l = line_[index_];

  if (strcmp(view_->filename(), file_[index_]) != 0)
    view_->load(file_[index_]);

  view_->topline(l);
}
void Fl_Help_Dialog::cb_back_(Fl_Button* o, void* v) {
  ((Fl_Help_Dialog*)(o->parent()->parent()->user_data()))->cb_back__i(o,v);
}

void Fl_Help_Dialog::cb_forward__i(Fl_Button*, void*) {
  if (index_ < max_)
    index_ ++;

  if (index_ >= max_)
    forward_->deactivate();

  back_->activate();

  int l = view_->topline();

  if (strcmp(view_->filename(), file_[index_]) != 0)
    view_->load(file_[index_]);

  view_->topline(l);
}
void Fl_Help_Dialog::cb_forward_(Fl_Button* o, void* v) {
  ((Fl_Help_Dialog*)(o->parent()->parent()->user_data()))->cb_forward__i(o,v);
}

void Fl_Help_Dialog::cb_smaller__i(Fl_Button*, void*) {
  if (view_->textsize() > 8)
    view_->textsize(view_->textsize() - 2);

  if (view_->textsize() <= 8)
    smaller_->deactivate();
  larger_->activate();
}
void Fl_Help_Dialog::cb_smaller_(Fl_Button* o, void* v) {
  ((Fl_Help_Dialog*)(o->parent()->parent()->user_data()))->cb_smaller__i(o,v);
}

void Fl_Help_Dialog::cb_larger__i(Fl_Button*, void*) {
  if (view_->textsize() < 18)
    view_->textsize(view_->textsize() + 2);

  if (view_->textsize() >= 18)
    larger_->deactivate();
  smaller_->activate();
}
void Fl_Help_Dialog::cb_larger_(Fl_Button* o, void* v) {
  ((Fl_Help_Dialog*)(o->parent()->parent()->user_data()))->cb_larger__i(o,v);
}

void Fl_Help_Dialog::cb_find__i(Fl_Input*, void*) {
  find_pos_ = view_->find(find_->value(), find_pos_);
}
void Fl_Help_Dialog::cb_find_(Fl_Input* o, void* v) {
  ((Fl_Help_Dialog*)(o->parent()->parent()->parent()->user_data()))->cb_find__i(o,v);
}

void Fl_Help_Dialog::cb_view__i(Fl_Help_View*, void*) {
  if (view_->filename())
  {
    if (view_->changed())
    {
      index_ ++;

      if (index_ >= 100)
      {
        memmove(line_, line_ + 10, sizeof(line_[0]) * 90);
        memmove(file_, file_ + 10, sizeof(file_[0]) * 90);
        index_ -= 10;
      }

      max_ = index_;

      strlcpy(file_[index_], view_->filename(),sizeof(file_[0]));
      line_[index_] = view_->topline();

      if (index_ > 0)
        back_->activate();
      else
        back_->deactivate();

      forward_->deactivate();
      window_->label(view_->title());
    }
    else // if ! view_->changed()
    {
      strlcpy(file_[index_], view_->filename(), sizeof(file_[0]));
      line_[index_] = view_->topline();
    }
  } else { // if ! view_->filename()
    index_ = 0; // hitting an internal page will disable the back/fwd buffer
    file_[index_][0] = 0; // unnamed internal page
    line_[index_] = view_->topline();
    back_->deactivate();
    forward_->deactivate();
  }
}
void Fl_Help_Dialog::cb_view_(Fl_Help_View* o, void* v) {
  ((Fl_Help_Dialog*)(o->parent()->user_data()))->cb_view__i(o,v);
}

Fl_Help_Dialog::Fl_Help_Dialog() {
  { window_ = new Fl_Double_Window(530, 385, "Help Dialog");
    window_->user_data((void*)(this));
    { Fl_Group* o = new Fl_Group(10, 10, 511, 25);
      { back_ = new Fl_Button(10, 10, 25, 25, "@<-");
        back_->tooltip("Show the previous help page.");
        back_->shortcut(0xff51);
        back_->labelcolor((Fl_Color)2);
        back_->callback((Fl_Callback*)cb_back_);
      } // Fl_Button* back_
      { forward_ = new Fl_Button(45, 10, 25, 25, "@->");
        forward_->tooltip("Show the next help page.");
        forward_->shortcut(0xff53);
        forward_->labelcolor((Fl_Color)2);
        forward_->callback((Fl_Callback*)cb_forward_);
      } // Fl_Button* forward_
      { smaller_ = new Fl_Button(80, 10, 25, 25, "F");
        smaller_->tooltip("Make the help text smaller.");
        smaller_->labelfont(1);
        smaller_->labelsize(10);
        smaller_->callback((Fl_Callback*)cb_smaller_);
      } // Fl_Button* smaller_
      { larger_ = new Fl_Button(115, 10, 25, 25, "F");
        larger_->tooltip("Make the help text larger.");
        larger_->labelfont(1);
        larger_->labelsize(16);
        larger_->callback((Fl_Callback*)cb_larger_);
      } // Fl_Button* larger_
      { Fl_Group* o = new Fl_Group(350, 10, 171, 25);
        o->box(FL_DOWN_BOX);
        o->color(FL_BACKGROUND2_COLOR);
        { find_ = new Fl_Input(375, 12, 143, 21, "@search");
          find_->tooltip("find text in document");
          find_->box(FL_FLAT_BOX);
          find_->labelsize(13);
          find_->textfont(4);
          find_->callback((Fl_Callback*)cb_find_);
          find_->when(FL_WHEN_ENTER_KEY_ALWAYS);
        } // Fl_Input* find_
        o->end();
      } // Fl_Group* o
      { Fl_Box* o = new Fl_Box(150, 10, 190, 25);
        Fl_Group::current()->resizable(o);
      } // Fl_Box* o
      o->end();
    } // Fl_Group* o
    { view_ = new Fl_Help_View(10, 45, 510, 330);
      view_->box(FL_DOWN_BOX);
      view_->callback((Fl_Callback*)cb_view_);
      Fl_Group::current()->resizable(view_);
    } // Fl_Help_View* view_
    window_->size_range(260, 150);
    window_->end();
  } // Fl_Double_Window* window_
  back_->deactivate();
  forward_->deactivate();

  index_    = -1;
  max_      = 0;
  find_pos_ = 0;

  fl_register_images();
}

Fl_Help_Dialog::~Fl_Help_Dialog() {
  delete window_;
}

int Fl_Help_Dialog::h() {
  return (window_->h());
}

void Fl_Help_Dialog::hide() {
  window_->hide();
}

int Fl_Help_Dialog::load(const char *f) {
  view_->set_changed();
  int ret = view_->load(f);
  window_->label(view_->title());
  return ret;
}

void Fl_Help_Dialog::position(int xx, int yy) {
  window_->position(xx, yy);
}

void Fl_Help_Dialog::resize(int xx, int yy, int ww, int hh) {
  window_->resize(xx, yy, ww, hh);
}

void Fl_Help_Dialog::show() {
  window_->show();
}

void Fl_Help_Dialog::show(int argc, char **argv) {
  window_->show(argc, argv);
}

void Fl_Help_Dialog::textsize(Fl_Fontsize s) {
  view_->textsize(s);

  if (s <= 8)
    smaller_->deactivate();
  else
    smaller_->activate();

  if (s >= 18)
    larger_->deactivate();
  else
    larger_->activate();
}

Fl_Fontsize Fl_Help_Dialog::textsize() {
  return (view_->textsize());
}

void Fl_Help_Dialog::topline(const char *n) {
  view_->topline(n);
}

void Fl_Help_Dialog::topline(int n) {
  view_->topline(n);
}

void Fl_Help_Dialog::value(const char *f) {
  view_->set_changed();
  view_->value(f);
  window_->label(view_->title());
}

const char * Fl_Help_Dialog::value() const {
  return view_->value();
}

int Fl_Help_Dialog::visible() {
  return (window_->visible());
}

int Fl_Help_Dialog::w() {
  return (window_->w());
}

int Fl_Help_Dialog::x() {
  return (window_->x());
}

int Fl_Help_Dialog::y() {
  return (window_->y());
}
