diff --git a/FL/Fl_Help_Dialog.H b/FL/Fl_Help_Dialog.H index bfcb2517f..934386cc7 100644 --- a/FL/Fl_Help_Dialog.H +++ b/FL/Fl_Help_Dialog.H @@ -79,6 +79,8 @@ public: uchar textsize(); void topline(const char *n); void topline(int n); + void value(const char *f); + const char * value() const; int visible(); int w(); int x(); diff --git a/src/Fl_Help_Dialog.cxx b/src/Fl_Help_Dialog.cxx index 0795d784d..6e2b83d23 100644 --- a/src/Fl_Help_Dialog.cxx +++ b/src/Fl_Help_Dialog.cxx @@ -32,34 +32,43 @@ #include 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; + 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()); } - - max_ = index_; - - strlcpy(file_[index_], view_->filename(),sizeof(file_[0])); + 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(); - - if (index_ > 0) - back_->activate(); - else - back_->deactivate(); - + back_->deactivate(); forward_->deactivate(); - window_->label(view_->title()); -} -else if (view_->filename()) -{ - strlcpy(file_[index_], view_->filename(), sizeof(file_[0])); - line_[index_] = view_->topline(); }; } void Fl_Help_Dialog::cb_view_(Fl_Help_View* o, void* v) { @@ -281,6 +290,16 @@ 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()); } diff --git a/src/Fl_Help_Dialog.fl b/src/Fl_Help_Dialog.fl index 311d69c26..ddf680764 100644 --- a/src/Fl_Help_Dialog.fl +++ b/src/Fl_Help_Dialog.fl @@ -42,41 +42,49 @@ class FL_EXPORT Fl_Help_Dialog {open decl {int line_[100];} {} decl {char file_[100][256];} {} decl {int find_pos_;} {} - Function {Fl_Help_Dialog()} {open - } { + Function {Fl_Help_Dialog()} {} { Fl_Window window_ { - label {Help Dialog} open selected + label {Help Dialog} open private xywh {398 65 530 385} type Double resizable size_range {260 150 0 0} visible } { Fl_Group view_ { - callback {if (view_->changed()) + callback {if (view_->filename()) { - index_ ++; - - if (index_ >= 100) + if (view_->changed()) { - memmove(line_, line_ + 10, sizeof(line_[0]) * 90); - memmove(file_, file_ + 10, sizeof(file_[0]) * 90); - index_ -= 10; + 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()); } - - max_ = index_; - - strlcpy(file_[index_], view_->filename(),sizeof(file_[0])); + 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(); - - if (index_ > 0) - back_->activate(); - else - back_->deactivate(); - + back_->deactivate(); forward_->deactivate(); - window_->label(view_->title()); -} -else if (view_->filename()) -{ - strlcpy(file_[index_], view_->filename(), sizeof(file_[0])); - line_[index_] = view_->topline(); }} open private xywh {10 10 510 330} box DOWN_BOX selection_color 15 resizable code0 {\#include } @@ -226,6 +234,16 @@ else } { code {view_->topline(n);} {} } + Function {value(const char *f)} {return_type void + } { + code {view_->set_changed(); +view_->value(f); +window_->label(view_->title());} {} + } + Function {value() const} {selected return_type {const char *} + } { + code {return view_->value();} {} + } Function {visible()} {return_type int } { code {return (window_->visible());} {}