Add some test options to test/editor.cxx.

These options are not enabled by default, but you can enable them by
defining macro DEV_TEST. This adds buttons to toggle wrap mode,
scrollbar positions, and to increase or decrease the window size (width).

Note: this can be used to test STR #3272 and the fixes in a follow-up
commit.

Note: same changes as r11204 in branch-1.3.


git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11207 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Albrecht Schlosser 2016-02-22 17:21:17 +00:00
parent 1b5fd476b9
commit f54863db44

View File

@ -5,7 +5,7 @@
//
// This program is described in Chapter 4 of the FLTK Programmer's Guide.
//
// Copyright 1998-2014 by Bill Spitzak and others.
// Copyright 1998-2016 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
@ -51,6 +51,12 @@ char filename[FL_PATH_MAX] = "";
char title[FL_PATH_MAX];
Fl_Text_Buffer *textbuf = 0;
// width of line number display, if enabled
const int line_num_width = 75;
// #define DEV_TEST // uncomment this line ...
// ... to enable additional test features for developers,
// particularly to test Fl_Text_Display and/or Fl_Text_Editor.
// Syntax highlighting stuff...
#define TS 14 // default editor textsize
@ -411,7 +417,6 @@ style_update(int pos, // I - Position of update
free(style);
}
// Editor window functions and class...
void save_cb();
void saveas_cb();
@ -432,6 +437,20 @@ class EditorWindow : public Fl_Double_Window {
Fl_Return_Button *replace_next;
Fl_Button *replace_cancel;
#ifdef DEV_TEST
Fl_Button *plus; // increase width
Fl_Button *minus; // decrease width
Fl_Button *vscroll; // toggle vert. scrollbar left/right
Fl_Button *hscroll; // toggle hor. scrollbar top/bottom
Fl_Button *lnum; // toggle line number display
Fl_Button *wrap; // toggle wrap mode
#endif // DEV_TEST
int wrap_mode;
int line_numbers;
Fl_Text_Editor *editor;
char search[256];
};
@ -456,12 +475,89 @@ EditorWindow::EditorWindow(int w, int h, const char* t) : Fl_Double_Window(w, h,
replace_dlg->set_non_modal();
editor = 0;
*search = (char)0;
wrap_mode = 0;
line_numbers = 0;
}
EditorWindow::~EditorWindow() {
delete replace_dlg;
}
#ifdef DEV_TEST
void resize_cb(Fl_Widget *b, void *v) {
Fl_Window *w = b->window();
int dw = (int)(long)v;
const int fac = 16; // factor
const int num = 1; // loop count
dw *= fac;
for (int i=0; i<num; i++) {
w->resize(w->x(), w->y(), w->w()+dw, w->h());
}
}
void scroll_cb(Fl_Widget *b, void *v) {
EditorWindow *ew = (EditorWindow*)b->parent();
Fl_Text_Editor *ed = ew->editor;
int n = (int)(long)v;
int align = ed->scrollbar_align();
switch(n) {
case 1: // vscroll
if (align & FL_ALIGN_LEFT) {
align &= ~FL_ALIGN_LEFT;
align |= FL_ALIGN_RIGHT;
} else {
align &= ~FL_ALIGN_RIGHT;
align |= FL_ALIGN_LEFT;
}
break;
case 2: // hscroll
if (align & FL_ALIGN_TOP) {
align &= ~FL_ALIGN_TOP;
align |= FL_ALIGN_BOTTOM;
} else {
align &= ~FL_ALIGN_BOTTOM;
align |= FL_ALIGN_TOP;
}
break;
default:
break;
}
ed->scrollbar_align(align);
ed->resize(ed->x(),ed->y(),ed->w(),ed->h());
ed->redraw();
}
void wrap_cb(Fl_Widget *w, void* v) {
EditorWindow* ew = (EditorWindow*)v;
Fl_Text_Editor *ed = (Fl_Text_Editor*)ew->editor;
ew->wrap_mode = 1 - ew->wrap_mode;
if (ew->wrap_mode)
ed->wrap_mode(Fl_Text_Display::WRAP_AT_BOUNDS, 0);
else
ed->wrap_mode(Fl_Text_Display::WRAP_NONE, 0);
ew->redraw();
}
void lnum_cb(Fl_Widget *w, void* v) {
EditorWindow* ew = (EditorWindow*)v;
Fl_Text_Editor *ed = (Fl_Text_Editor*)ew->editor;
ew->line_numbers = 1 - ew->line_numbers;
if (ew->line_numbers) {
ed->linenumber_width(line_num_width); // enable
ed->linenumber_size(ed->textsize());
} else {
ed->linenumber_width(0); // disable
}
ew->redraw();
}
#endif // DEV_TEST
int check_save(void) {
if (!changed) return 1;
@ -523,11 +619,12 @@ void linenumbers_cb(Fl_Widget *w, void* v) {
Fl_Menu_Bar* m = (Fl_Menu_Bar*)w;
const Fl_Menu_Item* i = m->mvalue();
if ( i->value() ) {
e->editor->linenumber_width(50); // enable
e->editor->linenumber_width(line_num_width); // enable
e->editor->linenumber_size(e->editor->textsize());
} else {
e->editor->linenumber_width(0); // disable
}
e->line_numbers = (i->value()?1:0);
e->redraw();
}
@ -539,6 +636,7 @@ void wordwrap_cb(Fl_Widget *w, void* v) {
e->editor->wrap_mode(Fl_Text_Display::WRAP_AT_BOUNDS, 0);
else
e->editor->wrap_mode(Fl_Text_Display::WRAP_NONE, 0);
e->wrap_mode = (i->value()?1:0);
e->redraw();
}
@ -795,7 +893,12 @@ Fl_Menu_Item menuitems[] = {
};
Fl_Window* new_view() {
#ifdef DEV_TEST
EditorWindow* w = new EditorWindow(660, 500, title);
#else
EditorWindow* w = new EditorWindow(660, 400, title);
#endif // DEV_TEST
w->begin();
Fl_Menu_Bar* m = new Fl_Menu_Bar(0, 0, 660, 30);
m->copy(menuitems, w);
@ -807,8 +910,40 @@ Fl_Window* new_view() {
w->editor->highlight_data(stylebuf, styletable,
sizeof(styletable) / sizeof(styletable[0]),
'A', style_unfinished_cb, 0);
#ifdef DEV_TEST
w->minus = new Fl_Button(60, 410, 120, 30, "&-");
w->minus->labelsize(20);
w->minus->labelfont(FL_BOLD);
w->minus->callback(resize_cb,(void *)(-1));
w->plus = new Fl_Button(60, 450, 120, 30, "&+");
w->plus->labelsize(20);
w->plus->labelfont(FL_BOLD);
w->plus->callback(resize_cb,(void *)1);
w->vscroll = new Fl_Button(220, 410, 120, 30, "&vscroll");
w->vscroll->labelsize(16);
w->vscroll->callback(scroll_cb,(void *)1);
w->hscroll = new Fl_Button(220, 450, 120, 30, "&hscroll");
w->hscroll->labelsize(16);
w->hscroll->callback(scroll_cb,(void *)2);
w->lnum = new Fl_Button(380, 410, 120, 30, "&line #");
w->lnum->labelsize(16);
w->lnum->callback(lnum_cb,(void *)w);
w->wrap = new Fl_Button(380, 450, 120, 30, "&wrap");
w->wrap->labelsize(16);
w->wrap->callback(wrap_cb,(void *)w);
#endif // DEV_TEST
w->end();
w->resizable(w->editor);
w->size_range(300,200);
w->callback((Fl_Callback *)close_cb, w);
textbuf->add_modify_callback(style_update, w->editor);