mirror of
https://github.com/fltk/fltk.git
synced 2026-02-06 00:01:57 +08:00
Remove $Id$ tags, update URL's, and more
- remove obsolete svn '$Id$' tags from all source files - update .fl files and generated files accordingly - replace 'http://www.fltk.org' URL's with 'https://...' - replace bug report URL 'str.php' with 'bugs.php' - remove trailing whitespace - fix other whitespace errors flagged by Git - add and/or fix missing or wrong standard headers - convert tabs to spaces in all source files The only relevant code changes are in the fluid/ folder where some .fl files and other source files were used to generate the '$Id' headers and footers.
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Tiny OpenGL v3 + glut demo program for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
// Copyright 1998-2015 by Bill Spitzak and others.
|
||||
@@ -9,11 +7,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -32,13 +30,13 @@
|
||||
// Globals
|
||||
// Real programs don't use globals :-D
|
||||
// Data would normally be read from files
|
||||
GLfloat vertices[] = { -1.0f,0.0f,0.0f,
|
||||
GLfloat vertices[] = { -1.0f,0.0f,0.0f,
|
||||
0.0f,1.0f,0.0f,
|
||||
0.0f,0.0f,0.0f };
|
||||
GLfloat colours[] = { 1.0f, 0.0f, 0.0f,
|
||||
GLfloat colours[] = { 1.0f, 0.0f, 0.0f,
|
||||
0.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f };
|
||||
GLfloat vertices2[] = { 0.0f,0.0f,0.0f,
|
||||
GLfloat vertices2[] = { 0.0f,0.0f,0.0f,
|
||||
0.0f,-1.0f,0.0f,
|
||||
1.0f,0.0f,0.0f };
|
||||
|
||||
@@ -52,7 +50,7 @@ void printShaderInfoLog(GLint shader)
|
||||
{
|
||||
int infoLogLen = 0;
|
||||
GLchar *infoLog;
|
||||
|
||||
|
||||
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLen);
|
||||
if (infoLogLen > 0)
|
||||
{
|
||||
@@ -68,35 +66,35 @@ void printShaderInfoLog(GLint shader)
|
||||
void init(void)
|
||||
{
|
||||
// Would load objects from file here - but using globals in this example
|
||||
|
||||
|
||||
// Allocate Vertex Array Objects
|
||||
glGenVertexArrays(2, &vertexArrayObjID[0]);
|
||||
// Setup first Vertex Array Object
|
||||
glBindVertexArray(vertexArrayObjID[0]);
|
||||
glGenBuffers(2, vertexBufferObjID);
|
||||
|
||||
|
||||
// VBO for vertex data
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObjID[0]);
|
||||
glBufferData(GL_ARRAY_BUFFER, 9*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
|
||||
glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0);
|
||||
glEnableVertexAttribArray(0);
|
||||
|
||||
|
||||
// VBO for colour data
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObjID[1]);
|
||||
glBufferData(GL_ARRAY_BUFFER, 9*sizeof(GLfloat), colours, GL_STATIC_DRAW);
|
||||
glVertexAttribPointer((GLuint)1, 3, GL_FLOAT, GL_FALSE, 0, 0);
|
||||
glEnableVertexAttribArray(1);
|
||||
|
||||
|
||||
// Setup second Vertex Array Object
|
||||
glBindVertexArray(vertexArrayObjID[1]);
|
||||
glGenBuffers(1, &vertexBufferObjID[2]);
|
||||
|
||||
|
||||
// VBO for vertex data
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObjID[2]);
|
||||
glBufferData(GL_ARRAY_BUFFER, 9*sizeof(GLfloat), vertices2, GL_STATIC_DRAW);
|
||||
glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0);
|
||||
glEnableVertexAttribArray(0);
|
||||
|
||||
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
|
||||
@@ -105,10 +103,10 @@ void initShaders(void)
|
||||
{
|
||||
GLuint p, f, v;
|
||||
glClearColor (1.0, 1.0, 1.0, 0.0);
|
||||
|
||||
|
||||
v = glCreateShader(GL_VERTEX_SHADER);
|
||||
f = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
|
||||
|
||||
#ifdef __APPLE__
|
||||
#define SHADING_LANG_VERS "140"
|
||||
#else
|
||||
@@ -124,7 +122,7 @@ void initShaders(void)
|
||||
ex_Color = in_Color;\
|
||||
gl_Position = vec4(in_Position, 1.0);\
|
||||
}";
|
||||
|
||||
|
||||
const char *ff = "#version "SHADING_LANG_VERS"\n\
|
||||
precision highp float;\
|
||||
in vec3 ex_Color;\
|
||||
@@ -133,12 +131,12 @@ void initShaders(void)
|
||||
{\
|
||||
out_Color = vec4(ex_Color,1.0);\
|
||||
}";
|
||||
|
||||
|
||||
glShaderSource(v, 1, &vv,NULL);
|
||||
glShaderSource(f, 1, &ff,NULL);
|
||||
|
||||
|
||||
GLint compiled;
|
||||
|
||||
|
||||
glCompileShader(v);
|
||||
glGetShaderiv(v, GL_COMPILE_STATUS, &compiled);
|
||||
if (!compiled)
|
||||
@@ -146,7 +144,7 @@ void initShaders(void)
|
||||
fprintf(stderr, "Vertex shader not compiled.\n");
|
||||
printShaderInfoLog(v);
|
||||
}
|
||||
|
||||
|
||||
glCompileShader(f);
|
||||
glGetShaderiv(f, GL_COMPILE_STATUS, &compiled);
|
||||
if (!compiled)
|
||||
@@ -154,9 +152,9 @@ void initShaders(void)
|
||||
fprintf(stderr, "Fragment shader not compiled.\n");
|
||||
printShaderInfoLog(f);
|
||||
}
|
||||
|
||||
|
||||
p = glCreateProgram();
|
||||
|
||||
|
||||
glAttachShader(p,v);
|
||||
glAttachShader(p,f);
|
||||
glBindAttribLocation(p,0, "in_Position");
|
||||
@@ -180,13 +178,13 @@ void display(void)
|
||||
{
|
||||
// clear the screen
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
glBindVertexArray(vertexArrayObjID[0]); // First VAO
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3); // draw first object
|
||||
|
||||
glBindVertexArray(vertexArrayObjID[1]); // select second VAO
|
||||
|
||||
glBindVertexArray(vertexArrayObjID[0]); // First VAO
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3); // draw first object
|
||||
|
||||
glBindVertexArray(vertexArrayObjID[1]); // select second VAO
|
||||
glVertexAttrib3f((GLuint)1, 1.0, 0.0, 0.0); // set constant color attribute
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3); // draw second object
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3); // draw second object
|
||||
}
|
||||
|
||||
int fullscreen = 0;
|
||||
@@ -218,7 +216,3 @@ int main (int argc, char* argv[])
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Tiny OpenGL v3 demo program for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
// Copyright 1998-2018 by Bill Spitzak and others.
|
||||
@@ -9,11 +7,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <stdarg.h>
|
||||
@@ -86,17 +84,17 @@ public:
|
||||
glCompileShader(vs);
|
||||
glGetShaderiv(vs, GL_COMPILE_STATUS, &err);
|
||||
if (err != GL_TRUE) {
|
||||
glGetShaderInfoLog(vs, sizeof(CLOG), &length, CLOG);
|
||||
add_output("vs ShaderInfoLog=%s\n",CLOG);
|
||||
}
|
||||
glGetShaderInfoLog(vs, sizeof(CLOG), &length, CLOG);
|
||||
add_output("vs ShaderInfoLog=%s\n",CLOG);
|
||||
}
|
||||
fs = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
glShaderSource(fs, 1, &fss, NULL);
|
||||
glCompileShader(fs);
|
||||
glGetShaderiv(fs, GL_COMPILE_STATUS, &err);
|
||||
if (err != GL_TRUE) {
|
||||
glGetShaderInfoLog(fs, sizeof(CLOG), &length, CLOG);
|
||||
add_output("fs ShaderInfoLog=%s\n",CLOG);
|
||||
}
|
||||
glGetShaderInfoLog(fs, sizeof(CLOG), &length, CLOG);
|
||||
add_output("fs ShaderInfoLog=%s\n",CLOG);
|
||||
}
|
||||
// Attach the shaders
|
||||
shaderProgram = glCreateProgram();
|
||||
glAttachShader(shaderProgram, vs);
|
||||
@@ -121,11 +119,11 @@ public:
|
||||
0.5,-0.5,0.0,1.0, 1.0,1.0,1.0,1.0};
|
||||
glGenVertexArrays(1, &vertexArrayObject);
|
||||
glBindVertexArray(vertexArrayObject);
|
||||
|
||||
|
||||
glGenBuffers(1, &vertexBuffer);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
|
||||
glBufferData(GL_ARRAY_BUFFER, 4*8*sizeof(GLfloat), vertexData, GL_STATIC_DRAW);
|
||||
|
||||
|
||||
glEnableVertexAttribArray((GLuint)positionAttribute);
|
||||
glEnableVertexAttribArray((GLuint)colourAttribute );
|
||||
glVertexAttribPointer((GLuint)positionAttribute, 4, GL_FLOAT, GL_FALSE, 8*sizeof(GLfloat), 0);
|
||||
@@ -157,7 +155,7 @@ public:
|
||||
if (gl_version_major < 3) add_output("\nThis platform does not support OpenGL V3\n\n");
|
||||
redraw();
|
||||
}
|
||||
|
||||
|
||||
if (event == FL_PUSH && gl_version_major >= 3) {
|
||||
static float factor = 1.1;
|
||||
GLfloat data[4];
|
||||
@@ -229,7 +227,3 @@ int main(int argc, char **argv)
|
||||
Fl::run();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ FLTK EXAMPLE PROGRAMS
|
||||
misused or hard to document
|
||||
|
||||
o Demonstrate code that are FAQs on the newsgroup forum.
|
||||
(such as how to use threads, callbacks, etc)
|
||||
(such as how to use threads, callbacks, etc)
|
||||
|
||||
o Example code should be short, but not at the expense of clarity.
|
||||
|
||||
@@ -119,5 +119,7 @@ DISCLAIMER
|
||||
|
||||
BUGS
|
||||
|
||||
If you find a bug, please report it through the fltk STR form at
|
||||
https://www.fltk.org/str.php
|
||||
If you find a bug, please report it to the FLTK team. For more
|
||||
information on how to do this see this page:
|
||||
|
||||
https://www.fltk.org/bugs.php
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Simple Fl_Browser widget example. - erco 07/26/2019
|
||||
// Simple Fl_Browser widget example. - erco 07/26/2019
|
||||
//
|
||||
// Copyright 2019 Greg Ercolano.
|
||||
// Copyright 1998-2016 by Bill Spitzak and others.
|
||||
@@ -10,11 +8,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <FL/Fl.H>
|
||||
@@ -38,7 +36,7 @@ void MultiBrowserCallback(Fl_Widget *w, void *data) {
|
||||
Fl_Multi_Browser *brow = (Fl_Multi_Browser*)w;
|
||||
// Multi browser can have many items selected, so print all selected
|
||||
for ( int t=1; t<=brow->size(); t++ )
|
||||
if ( brow->selected(t) )
|
||||
if ( brow->selected(t) )
|
||||
printf("[multi browser] item %d selected: %s\n", t, brow->text(t));
|
||||
printf("\n");
|
||||
}
|
||||
@@ -51,7 +49,7 @@ int main(int argc, char *argv[]) {
|
||||
{
|
||||
// Create Hold Browser
|
||||
Fl_Hold_Browser *brow = new Fl_Hold_Browser(10, 10, win->w()-20, 80, "Hold");
|
||||
brow->callback(HoldBrowserCallback); // callback for hold browser
|
||||
brow->callback(HoldBrowserCallback); // callback for hold browser
|
||||
// Add some items
|
||||
brow->add("One");
|
||||
brow->add("Two");
|
||||
@@ -63,7 +61,7 @@ int main(int argc, char *argv[]) {
|
||||
{
|
||||
// Create Multi Browser
|
||||
Fl_Multi_Browser *brow = new Fl_Multi_Browser(10, 120, win->w()-20, 80, "Multi");
|
||||
brow->callback(MultiBrowserCallback); // callback for multi browser
|
||||
brow->callback(MultiBrowserCallback); // callback for multi browser
|
||||
// Add some items
|
||||
brow->add("Aaa");
|
||||
brow->add("Bbb");
|
||||
@@ -79,7 +77,3 @@ int main(int argc, char *argv[]) {
|
||||
win->show(argc, argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Clipboard display test application for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
// Copyright 1998-2014 by Bill Spitzak and others.
|
||||
@@ -9,11 +7,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <FL/Fl_Window.H>
|
||||
@@ -56,9 +54,9 @@ public:
|
||||
fl_color(FL_LIGHT2);
|
||||
const int side = 4, side2 = 2*side;
|
||||
for (int j=Y; j<Y+H; j+=side) {
|
||||
for (int i=X + (j-Y)%side2; i<X+W; i+=side2) {
|
||||
fl_rectf(i,j,side,side);
|
||||
}
|
||||
for (int i=X + (j-Y)%side2; i<X+W; i+=side2) {
|
||||
fl_rectf(i,j,side,side);
|
||||
}
|
||||
}
|
||||
fl_pop_clip();
|
||||
fl_pop_clip();
|
||||
@@ -160,7 +158,3 @@ int main(int argc, char **argv)
|
||||
Fl_Image::RGB_scaling(FL_RGB_SCALING_BILINEAR); // set bilinear image scaling method
|
||||
return Fl::run();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Demonstrate deriving a class with draggable children.
|
||||
//
|
||||
// Copyright 2017 by Bill Spitzak and others.
|
||||
@@ -9,11 +7,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
// K Dmitrij <kdiman@...> wrote on Wed, 26 Jul 2017 19:54:12 +0000 in
|
||||
@@ -99,70 +97,70 @@ public:
|
||||
switch (e) {
|
||||
|
||||
case FL_PUSH: {
|
||||
if (Fl::event_button() == FL_RIGHT_MOUSE) {
|
||||
if (Fl::belowmouse()->parent() == this) {
|
||||
drag_widget = Fl::belowmouse();
|
||||
if (Fl::event_button() == FL_RIGHT_MOUSE) {
|
||||
if (Fl::belowmouse()->parent() == this) {
|
||||
drag_widget = Fl::belowmouse();
|
||||
|
||||
// save pointer offsets relative to drag_widget's x/y position
|
||||
xoff = Fl::event_x() - drag_widget->x();
|
||||
yoff = Fl::event_y() - drag_widget->y();
|
||||
// save pointer offsets relative to drag_widget's x/y position
|
||||
xoff = Fl::event_x() - drag_widget->x();
|
||||
yoff = Fl::event_y() - drag_widget->y();
|
||||
|
||||
top_level(drag_widget); // raise to top for visible feedback
|
||||
redraw();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
top_level(drag_widget); // raise to top for visible feedback
|
||||
redraw();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case FL_DRAG: {
|
||||
if (!drag_widget)
|
||||
break;
|
||||
if (!drag_widget)
|
||||
break;
|
||||
|
||||
int nX = Fl::event_x() - xoff; // new x coordinate
|
||||
int nY = Fl::event_y() - yoff; // new y coordinate
|
||||
int nX = Fl::event_x() - xoff; // new x coordinate
|
||||
int nY = Fl::event_y() - yoff; // new y coordinate
|
||||
|
||||
int bbx = Fl::box_dx(box()); // left and right border width
|
||||
int bby = Fl::box_dy(box()); // top and bottom border width
|
||||
int bbx = Fl::box_dx(box()); // left and right border width
|
||||
int bby = Fl::box_dy(box()); // top and bottom border width
|
||||
|
||||
// keep the widget inside its parent's borders
|
||||
// keep the widget inside its parent's borders
|
||||
|
||||
if (nX < x() + bbx) {
|
||||
nX = x() + bbx;
|
||||
} else if (nX + drag_widget->w() > x() + w() - bbx) {
|
||||
nX = x() + w() - drag_widget->w() - bbx;
|
||||
}
|
||||
if (nX < x() + bbx) {
|
||||
nX = x() + bbx;
|
||||
} else if (nX + drag_widget->w() > x() + w() - bbx) {
|
||||
nX = x() + w() - drag_widget->w() - bbx;
|
||||
}
|
||||
|
||||
if (nY < y() + bby) {
|
||||
nY = y() + bby;
|
||||
} else if (nY + drag_widget->h() > y() + h() - bby) {
|
||||
nY = y() + h() - drag_widget->h() - bby;
|
||||
}
|
||||
if (nY < y() + bby) {
|
||||
nY = y() + bby;
|
||||
} else if (nY + drag_widget->h() > y() + h() - bby) {
|
||||
nY = y() + h() - drag_widget->h() - bby;
|
||||
}
|
||||
|
||||
drag_widget->position(nX, nY); // set the new position
|
||||
redraw();
|
||||
return 1;
|
||||
drag_widget->position(nX, nY); // set the new position
|
||||
redraw();
|
||||
return 1;
|
||||
}
|
||||
|
||||
case FL_RELEASE: {
|
||||
if (drag_widget && Fl::event_button() == FL_RIGHT_MOUSE) {
|
||||
if (drag_widget && Fl::event_button() == FL_RIGHT_MOUSE) {
|
||||
|
||||
// Optional: restore the original widget order in the group.
|
||||
// Remove the next statement (or comment it out) if not desired.
|
||||
insert(*drag_widget, drag_index);
|
||||
// Optional: restore the original widget order in the group.
|
||||
// Remove the next statement (or comment it out) if not desired.
|
||||
insert(*drag_widget, drag_index);
|
||||
|
||||
init_sizes(); // save widget positions for later resizing
|
||||
drag_widget = 0;
|
||||
redraw();
|
||||
if (parent())
|
||||
parent()->redraw();
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
init_sizes(); // save widget positions for later resizing
|
||||
drag_widget = 0;
|
||||
redraw();
|
||||
if (parent())
|
||||
parent()->redraw();
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
break;
|
||||
} // switch(e)
|
||||
|
||||
return Fl_Group::handle(e);
|
||||
@@ -189,11 +187,11 @@ void button_cb(Fl_Widget *w, void *v) {
|
||||
|
||||
// tooltips:
|
||||
|
||||
const char *tt_drag = "Drag this DraggableGroup and/or its child groups and squares. "
|
||||
"Use the right mouse button (MB3) to drag objects.";
|
||||
const char *tt_group = "You can drag this Fl_Group, but not its children (squares).";
|
||||
const char *tt_drag = "Drag this DraggableGroup and/or its child groups and squares. "
|
||||
"Use the right mouse button (MB3) to drag objects.";
|
||||
const char *tt_group = "You can drag this Fl_Group, but not its children (squares).";
|
||||
const char *tt_button = "You can drag this button with the right mouse button "
|
||||
"and you can click it with the left mouse button.";
|
||||
"and you can click it with the left mouse button.";
|
||||
|
||||
// main program:
|
||||
|
||||
@@ -270,7 +268,3 @@ int main() {
|
||||
|
||||
return Fl::run();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Library version test program for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
// Copyright 1998-2017 by Bill Spitzak and others.
|
||||
@@ -9,11 +7,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <FL/Fl.H>
|
||||
@@ -78,7 +76,3 @@ int main(int argc, char **argv) {
|
||||
window->show(argc, argv);
|
||||
return Fl::run();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// How to use popen() and Fl::add_fd() - erco 10/04/04
|
||||
// Originally from erco's cheat sheet, permission by author.
|
||||
//
|
||||
@@ -16,11 +14,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <FL/Fl.H>
|
||||
@@ -28,16 +26,16 @@
|
||||
#include <FL/Fl_Multi_Browser.H>
|
||||
|
||||
#ifdef _WIN32
|
||||
# define PING_CMD "ping -n 10 localhost" // 'slow command' under windows
|
||||
# define PING_CMD "ping -n 10 localhost" // 'slow command' under windows
|
||||
# ifdef _MSC_VER
|
||||
# define popen _popen
|
||||
# define pclose _pclose
|
||||
# else /*_MSC_VER*/
|
||||
# include <unistd.h> // non-MS win32 compilers (untested)
|
||||
# include <unistd.h> // non-MS win32 compilers (untested)
|
||||
# endif /*_MSC_VER*/
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# define PING_CMD "ping -i 2 -c 10 localhost" // 'slow command' under unix
|
||||
# define PING_CMD "ping -i 2 -c 10 localhost" // 'slow command' under unix
|
||||
#endif
|
||||
|
||||
// GLOBALS
|
||||
@@ -49,28 +47,24 @@ FILE *G_fp = NULL;
|
||||
void HandleFD(FL_SOCKET fd, void *data) {
|
||||
Fl_Multi_Browser *brow = (Fl_Multi_Browser*)data;
|
||||
char s[1024];
|
||||
if ( fgets(s, 1023, G_fp) == NULL ) { // read the line of data
|
||||
Fl::remove_fd(fileno(G_fp)); // command ended? disconnect callback
|
||||
pclose(G_fp); // close the descriptor
|
||||
brow->add(""); brow->add("<<DONE>>"); // append msg indicating command finished
|
||||
if ( fgets(s, 1023, G_fp) == NULL ) { // read the line of data
|
||||
Fl::remove_fd(fileno(G_fp)); // command ended? disconnect callback
|
||||
pclose(G_fp); // close the descriptor
|
||||
brow->add(""); brow->add("<<DONE>>"); // append msg indicating command finished
|
||||
return;
|
||||
}
|
||||
brow->add(s); // line of data read? append to widget
|
||||
brow->add(s); // line of data read? append to widget
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
Fl_Window win(600,600);
|
||||
Fl_Multi_Browser brow(10,10,580,580);
|
||||
if ( ( G_fp = popen(PING_CMD, "r") ) == NULL ) { // start the external unix command
|
||||
if ( ( G_fp = popen(PING_CMD, "r") ) == NULL ) { // start the external unix command
|
||||
perror("popen failed");
|
||||
return(1);
|
||||
}
|
||||
Fl::add_fd(fileno(G_fp), HandleFD, (void*)&brow); // setup a callback for the popen()ed descriptor
|
||||
Fl::add_fd(fileno(G_fp), HandleFD, (void*)&brow); // setup a callback for the popen()ed descriptor
|
||||
win.resizable(brow);
|
||||
win.show(argc, argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Demonstrate creating an Fl_Browser with icons - Greg Ercolano 10/07/09 (STR#1739)
|
||||
//
|
||||
// Shows how one can add icons to items in a browser.
|
||||
@@ -12,12 +10,12 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
//
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Double_Window.H>
|
||||
#include <FL/Fl_Browser.H>
|
||||
@@ -147,7 +145,7 @@ public:
|
||||
|
||||
// See which icon the user picked
|
||||
Fl_Image *i = 0;
|
||||
if ( strcmp(ch->text(), "None" ) == 0 ) { i = 0; }
|
||||
if ( strcmp(ch->text(), "None" ) == 0 ) { i = 0; }
|
||||
else if ( strcmp(ch->text(), "Small" ) == 0 ) { i = mb->sml_icon; }
|
||||
else if ( strcmp(ch->text(), "Medium") == 0 ) { i = mb->med_icon; }
|
||||
else if ( strcmp(ch->text(), "Large" ) == 0 ) { i = mb->big_icon; }
|
||||
@@ -179,8 +177,4 @@ int main() {
|
||||
w->end();
|
||||
w->show();
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
}
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// A simple demo of 'drag and drop' with FLTK.
|
||||
// Originally from erco's cheat sheet, permission by author.
|
||||
// Inspired by Michael Sephton's original example posted on fltk.general.
|
||||
@@ -17,11 +15,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -45,10 +43,10 @@ public:
|
||||
switch ( event ) {
|
||||
case FL_PUSH: { // do 'copy/dnd' when someone clicks on box
|
||||
const char *msg = "It works!";
|
||||
Fl::copy(msg,strlen(msg),0);
|
||||
Fl::dnd();
|
||||
ret = 1;
|
||||
break;
|
||||
Fl::copy(msg,strlen(msg),0);
|
||||
Fl::dnd();
|
||||
ret = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return(ret);
|
||||
@@ -70,55 +68,55 @@ public:
|
||||
int ret = Fl_Box::handle(event);
|
||||
int len;
|
||||
switch ( event ) {
|
||||
case FL_DND_ENTER: // return(1) for this event to 'accept' dnd
|
||||
label("ENTER"); // visible only if you stop the mouse at the widget's border
|
||||
fprintf(stderr, "FL_DND_ENTER\n");
|
||||
dnd_inside = 1; // status: inside the widget, accept drop
|
||||
ret = 1;
|
||||
break;
|
||||
case FL_DND_DRAG: // return(1) for this event to 'accept' dnd
|
||||
label("drop\nhere");
|
||||
fprintf(stderr, "FL_DND_DRAG\n");
|
||||
ret = 1;
|
||||
break;
|
||||
case FL_DND_RELEASE: // return(1) for this event to 'accept' the payload (drop)
|
||||
fprintf(stderr, "FL_DND_RELEASE\n");
|
||||
if (dnd_inside) {
|
||||
ret = 1; // return(1) and expect FL_PASTE event to follow
|
||||
label("RELEASE");
|
||||
} else {
|
||||
ret = 0; // return(0) to reject the DND payload (drop)
|
||||
label("DND\nREJECTED!");
|
||||
}
|
||||
break;
|
||||
case FL_DND_ENTER: // return(1) for this event to 'accept' dnd
|
||||
label("ENTER"); // visible only if you stop the mouse at the widget's border
|
||||
fprintf(stderr, "FL_DND_ENTER\n");
|
||||
dnd_inside = 1; // status: inside the widget, accept drop
|
||||
ret = 1;
|
||||
break;
|
||||
case FL_DND_DRAG: // return(1) for this event to 'accept' dnd
|
||||
label("drop\nhere");
|
||||
fprintf(stderr, "FL_DND_DRAG\n");
|
||||
ret = 1;
|
||||
break;
|
||||
case FL_DND_RELEASE: // return(1) for this event to 'accept' the payload (drop)
|
||||
fprintf(stderr, "FL_DND_RELEASE\n");
|
||||
if (dnd_inside) {
|
||||
ret = 1; // return(1) and expect FL_PASTE event to follow
|
||||
label("RELEASE");
|
||||
} else {
|
||||
ret = 0; // return(0) to reject the DND payload (drop)
|
||||
label("DND\nREJECTED!");
|
||||
}
|
||||
break;
|
||||
case FL_PASTE: // handle actual drop (paste) operation
|
||||
fprintf(stderr, "FL_PASTE\n");
|
||||
copy_label(Fl::event_text());
|
||||
fprintf(stderr, "Pasted '%s'\n", Fl::event_text());
|
||||
fprintf(stderr, "FL_PASTE\n");
|
||||
copy_label(Fl::event_text());
|
||||
fprintf(stderr, "Pasted '%s'\n", Fl::event_text());
|
||||
|
||||
// Don't pop up dialog windows in FL_DND_* or FL_PASTE event handling
|
||||
// resulting from DND operations. This may hang or even crash the
|
||||
// application on *some* platforms. Use a short timer to delay the
|
||||
// message display after the event processing is completed.
|
||||
// Don't pop up dialog windows in FL_DND_* or FL_PASTE event handling
|
||||
// resulting from DND operations. This may hang or even crash the
|
||||
// application on *some* platforms. Use a short timer to delay the
|
||||
// message display after the event processing is completed.
|
||||
|
||||
delete[] dnd_text; // don't leak (just in case)
|
||||
dnd_text = 0;
|
||||
delete[] dnd_text; // don't leak (just in case)
|
||||
dnd_text = 0;
|
||||
|
||||
len = Fl::event_length();
|
||||
if (len && Fl::event_text()) {
|
||||
dnd_text = new char[len + 1];
|
||||
memcpy(dnd_text, Fl::event_text(), len);
|
||||
dnd_text[len] = '\0';
|
||||
Fl::add_timeout(0.001, timer_cb, this); // delay message popup
|
||||
}
|
||||
ret = 1;
|
||||
break;
|
||||
case FL_DND_LEAVE: // not strictly necessary to return(1) for this event
|
||||
label("..to\nhere"); // reset label
|
||||
fprintf(stderr, "FL_DND_LEAVE\n");
|
||||
dnd_inside = 0; // status: mouse is outside, don't accept drop
|
||||
ret = 1; // return(1) anyway..
|
||||
break;
|
||||
len = Fl::event_length();
|
||||
if (len && Fl::event_text()) {
|
||||
dnd_text = new char[len + 1];
|
||||
memcpy(dnd_text, Fl::event_text(), len);
|
||||
dnd_text[len] = '\0';
|
||||
Fl::add_timeout(0.001, timer_cb, this); // delay message popup
|
||||
}
|
||||
ret = 1;
|
||||
break;
|
||||
case FL_DND_LEAVE: // not strictly necessary to return(1) for this event
|
||||
label("..to\nhere"); // reset label
|
||||
fprintf(stderr, "FL_DND_LEAVE\n");
|
||||
dnd_inside = 0; // status: mouse is outside, don't accept drop
|
||||
ret = 1; // return(1) anyway..
|
||||
break;
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
@@ -152,7 +150,3 @@ int main(int argc, char **argv) {
|
||||
win_b.show();
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Demonstrate how to draw an 'X' in fltk
|
||||
//
|
||||
// Create a custom widget that draws an 'X' to the corners of the window,
|
||||
@@ -14,11 +12,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <FL/Fl.H>
|
||||
@@ -31,7 +29,7 @@ public:
|
||||
}
|
||||
void draw() {
|
||||
// Draw background - a white filled rectangle
|
||||
fl_color(FL_WHITE); fl_rectf(x(),y(),w(),h());
|
||||
fl_color(FL_WHITE); fl_rectf(x(),y(),w(),h());
|
||||
// Draw black 'X' over base widget's background
|
||||
fl_color(FL_BLACK);
|
||||
int x1 = x(), y1 = y();
|
||||
@@ -42,13 +40,9 @@ public:
|
||||
};
|
||||
int main() {
|
||||
Fl_Double_Window win(200,200,"Draw X");
|
||||
DrawX draw_x(10, 10, win.w()-20, win.h()-20); // put our widget 10 pixels within window edges
|
||||
draw_x.color(FL_WHITE); // make widget's background white
|
||||
DrawX draw_x(10, 10, win.w()-20, win.h()-20); // put our widget 10 pixels within window edges
|
||||
draw_x.color(FL_WHITE); // make widget's background white
|
||||
win.resizable(draw_x);
|
||||
win.show();
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "$Id$"
|
||||
//
|
||||
// vim: autoindent tabstop=2 shiftwidth=2 expandtab softtabstop=2 filetype=cpp
|
||||
//
|
||||
// How to use Fl_Multi_Label to make menu items with images and labels.
|
||||
@@ -10,11 +10,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Double_Window.H>
|
||||
@@ -200,7 +200,3 @@ int main() {
|
||||
win->show();
|
||||
return Fl::run();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// How to parse command line arguments - Duncan Gibson 2010-10-23
|
||||
// First posted in http://www.fltk.org/newsgroups.php?gfltk.general+v:31449
|
||||
// First posted in https://www.fltk.org/newsgroups.php?gfltk.general+v:31449
|
||||
//
|
||||
// Shows how to decode additional command line arguments using Fl::args()
|
||||
// on top of the "standard" options used by the toolkit itself.
|
||||
@@ -17,11 +15,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@@ -37,7 +35,7 @@ char *optionString = 0;
|
||||
* If there is a match, 'i' must be incremented by 2 or 1 as appropriate.
|
||||
* If there is no match, Fl::args() will then call Fl::arg() as fallback
|
||||
* to try to match the "standard" FLTK parameters.
|
||||
*
|
||||
*
|
||||
* Returns 2 if argv[i] matches with required parameter in argv[i+1],
|
||||
* returns 1 if argv[i] matches on its own,
|
||||
* returns 0 if argv[i] does not match.
|
||||
@@ -87,7 +85,3 @@ int main(int argc, char** argv)
|
||||
mainWin->show(argc, argv);
|
||||
return Fl::run();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
// vim: autoindent tabstop=8 shiftwidth=2 expandtab softtabstop=2
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Demonstrate keyboard remapping: Force number pad to type numbers even if NumLock off
|
||||
//
|
||||
// DESCRIPTION
|
||||
@@ -31,11 +29,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <FL/Fl.H>
|
||||
@@ -49,7 +47,7 @@ Fl_Check_Button *G_checkbut = 0;
|
||||
// Global event handler: FLTK calls this after event translation. It's up to us
|
||||
// to call Fl::handle_(e,w) to actually deliver the event to the widgets. If we
|
||||
// don't and just return, the event will be dropped. See docs for more.
|
||||
//
|
||||
//
|
||||
int MyHandler(int e, Fl_Window *w) {
|
||||
// Remapping disabled? Early exit..
|
||||
if ( G_checkbut->value() == 0 ) return Fl::handle_(e, w);
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Simple example of how to use an SVG image in an FLTK program.
|
||||
// Assumes fltk was built with --enable-nanosvg.
|
||||
// Simple example of how to use an SVG image in an FLTK program.
|
||||
// Assumes fltk was built with --enable-nanosvg.
|
||||
//
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
//
|
||||
@@ -10,13 +8,13 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <config.h> /* needed only to detect FLTK_USE_NANOSVG */
|
||||
#include <config.h> /* needed only to detect FLTK_USE_NANOSVG */
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Window.H>
|
||||
#include <FL/Fl_Box.H>
|
||||
@@ -30,28 +28,28 @@ const char *svg_logo =
|
||||
"<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->\n"
|
||||
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"
|
||||
"<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n"
|
||||
" width=\"640px\" height=\"480px\" viewBox=\"0 0 640 480\" enable-background=\"new 0 0 640 480\" xml:space=\"preserve\">\n"
|
||||
" width=\"640px\" height=\"480px\" viewBox=\"0 0 640 480\" enable-background=\"new 0 0 640 480\" xml:space=\"preserve\">\n"
|
||||
"<path d=\"M282.658,250.271c0,5.31-1.031,10.156-3.087,14.543c-2.059,4.387-4.984,8.152-8.774,11.293\n"
|
||||
" c-3.793,3.144-8.477,5.58-14.055,7.312c-5.581,1.731-11.836,2.601-18.767,2.601c-9.968,0-18.605-1.572-25.917-4.713\n"
|
||||
" s-13.299-6.986-17.955-11.536l13.812-15.111c4.116,3.684,8.584,6.499,13.405,8.449c4.819,1.95,9.993,2.925,15.518,2.925\n"
|
||||
" c5.525,0,9.856-1.219,12.999-3.656c3.141-2.438,4.712-5.769,4.712-9.993c0-2.056-0.3-3.844-0.894-5.361\n"
|
||||
" c-0.596-1.517-1.653-2.925-3.168-4.226c-1.518-1.3-3.549-2.519-6.093-3.655c-2.546-1.138-5.768-2.301-9.668-3.494\n"
|
||||
" c-6.5-2.056-11.943-4.25-16.33-6.58c-4.387-2.328-7.937-4.9-10.643-7.719c-2.709-2.815-4.659-5.931-5.849-9.343\n"
|
||||
" c-1.193-3.412-1.788-7.23-1.788-11.455c0-5.2,1.082-9.831,3.25-13.893c2.166-4.062,5.144-7.5,8.937-10.318\n"
|
||||
" c3.791-2.815,8.178-4.956,13.162-6.418c4.981-1.462,10.343-2.193,16.086-2.193c8.449,0,15.842,1.247,22.179,3.737\n"
|
||||
" c6.337,2.493,11.997,6.121,16.98,10.887l-12.674,14.624c-7.583-6.281-15.655-9.424-24.21-9.424c-4.875,0-8.721,0.95-11.537,2.844\n"
|
||||
" c-2.818,1.896-4.225,4.578-4.225,8.043c0,1.843,0.297,3.412,0.894,4.712c0.594,1.3,1.65,2.519,3.168,3.656\n"
|
||||
" c1.516,1.137,3.656,2.249,6.418,3.331c2.763,1.084,6.309,2.33,10.643,3.736c5.306,1.734,10.046,3.631,14.218,5.688\n"
|
||||
" c4.169,2.06,7.662,4.524,10.48,7.394c2.815,2.871,4.981,6.174,6.5,9.911C281.898,240.603,282.658,245.071,282.658,250.271z\n"
|
||||
" M335.953,260.833l20.637-90.181h27.46l-32.011,112.604h-33.634l-32.173-112.604h28.598l20.311,90.181H335.953z M437.832,286.019\n"
|
||||
" c-16.357,0-28.896-5.01-37.615-15.03c-8.722-10.019-13.081-24.779-13.081-44.278c0-9.531,1.407-17.98,4.225-25.348\n"
|
||||
" c2.815-7.366,6.688-13.54,11.618-18.524c4.928-4.981,10.668-8.747,17.223-11.293c6.555-2.544,13.568-3.818,21.043-3.818\n"
|
||||
" c8.23,0,15.436,1.3,21.611,3.899c6.174,2.6,11.537,5.959,16.086,10.075l-14.137,14.624c-3.467-3.032-6.906-5.281-10.318-6.744\n"
|
||||
" s-7.393-2.193-11.941-2.193c-4.01,0-7.693,0.731-11.051,2.193s-6.256,3.793-8.691,6.987c-2.438,3.196-4.334,7.287-5.688,12.268\n"
|
||||
" c-1.355,4.984-2.031,10.996-2.031,18.037c0,7.367,0.486,13.567,1.463,18.604c0.975,5.037,2.408,9.1,4.305,12.187\n"
|
||||
" c1.895,3.087,4.307,5.309,7.23,6.662c2.926,1.355,6.338,2.031,10.238,2.031c5.631,0,10.613-1.244,14.947-3.737v-25.186h-14.785\n"
|
||||
" l-2.6-18.849h43.547v55.57c-5.85,3.793-12.297,6.718-19.336,8.774C453.051,284.987,445.631,286.019,437.832,286.019z M523.5,151.5\n"
|
||||
" c0-6.627-5.373-12-12-12h-343c-6.627,0-12,5.373-12,12v150c0,6.627,5.373,12,12,12h343c6.627,0,12-5.373,12-12V151.5z\"/>\n"
|
||||
" c-3.793,3.144-8.477,5.58-14.055,7.312c-5.581,1.731-11.836,2.601-18.767,2.601c-9.968,0-18.605-1.572-25.917-4.713\n"
|
||||
" s-13.299-6.986-17.955-11.536l13.812-15.111c4.116,3.684,8.584,6.499,13.405,8.449c4.819,1.95,9.993,2.925,15.518,2.925\n"
|
||||
" c5.525,0,9.856-1.219,12.999-3.656c3.141-2.438,4.712-5.769,4.712-9.993c0-2.056-0.3-3.844-0.894-5.361\n"
|
||||
" c-0.596-1.517-1.653-2.925-3.168-4.226c-1.518-1.3-3.549-2.519-6.093-3.655c-2.546-1.138-5.768-2.301-9.668-3.494\n"
|
||||
" c-6.5-2.056-11.943-4.25-16.33-6.58c-4.387-2.328-7.937-4.9-10.643-7.719c-2.709-2.815-4.659-5.931-5.849-9.343\n"
|
||||
" c-1.193-3.412-1.788-7.23-1.788-11.455c0-5.2,1.082-9.831,3.25-13.893c2.166-4.062,5.144-7.5,8.937-10.318\n"
|
||||
" c3.791-2.815,8.178-4.956,13.162-6.418c4.981-1.462,10.343-2.193,16.086-2.193c8.449,0,15.842,1.247,22.179,3.737\n"
|
||||
" c6.337,2.493,11.997,6.121,16.98,10.887l-12.674,14.624c-7.583-6.281-15.655-9.424-24.21-9.424c-4.875,0-8.721,0.95-11.537,2.844\n"
|
||||
" c-2.818,1.896-4.225,4.578-4.225,8.043c0,1.843,0.297,3.412,0.894,4.712c0.594,1.3,1.65,2.519,3.168,3.656\n"
|
||||
" c1.516,1.137,3.656,2.249,6.418,3.331c2.763,1.084,6.309,2.33,10.643,3.736c5.306,1.734,10.046,3.631,14.218,5.688\n"
|
||||
" c4.169,2.06,7.662,4.524,10.48,7.394c2.815,2.871,4.981,6.174,6.5,9.911C281.898,240.603,282.658,245.071,282.658,250.271z\n"
|
||||
" M335.953,260.833l20.637-90.181h27.46l-32.011,112.604h-33.634l-32.173-112.604h28.598l20.311,90.181H335.953z M437.832,286.019\n"
|
||||
" c-16.357,0-28.896-5.01-37.615-15.03c-8.722-10.019-13.081-24.779-13.081-44.278c0-9.531,1.407-17.98,4.225-25.348\n"
|
||||
" c2.815-7.366,6.688-13.54,11.618-18.524c4.928-4.981,10.668-8.747,17.223-11.293c6.555-2.544,13.568-3.818,21.043-3.818\n"
|
||||
" c8.23,0,15.436,1.3,21.611,3.899c6.174,2.6,11.537,5.959,16.086,10.075l-14.137,14.624c-3.467-3.032-6.906-5.281-10.318-6.744\n"
|
||||
" s-7.393-2.193-11.941-2.193c-4.01,0-7.693,0.731-11.051,2.193s-6.256,3.793-8.691,6.987c-2.438,3.196-4.334,7.287-5.688,12.268\n"
|
||||
" c-1.355,4.984-2.031,10.996-2.031,18.037c0,7.367,0.486,13.567,1.463,18.604c0.975,5.037,2.408,9.1,4.305,12.187\n"
|
||||
" c1.895,3.087,4.307,5.309,7.23,6.662c2.926,1.355,6.338,2.031,10.238,2.031c5.631,0,10.613-1.244,14.947-3.737v-25.186h-14.785\n"
|
||||
" l-2.6-18.849h43.547v55.57c-5.85,3.793-12.297,6.718-19.336,8.774C453.051,284.987,445.631,286.019,437.832,286.019z M523.5,151.5\n"
|
||||
" c0-6.627-5.373-12-12-12h-343c-6.627,0-12,5.373-12,12v150c0,6.627,5.373,12,12,12h343c6.627,0,12-5.373,12-12V151.5z\"/>\n"
|
||||
"</svg>\n";
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
@@ -68,7 +66,3 @@ int main(int argc, char **argv) {
|
||||
return(Fl::run());
|
||||
#endif
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
//
|
||||
// "$Id$"
|
||||
// Simple example of a button with text over an image
|
||||
// Originally from erco's cheat sheet 10/25/2010, permission by author.
|
||||
//
|
||||
// Simple example of a button with text over an image
|
||||
// Originally from erco's cheat sheet 10/25/2010, permission by author.
|
||||
// This shows how to include an 'inline' image (.xpm)
|
||||
// and have it appear on an Fl_Button. Demonstrates the use of the
|
||||
// FL_ALIGN_IMAGE_BACKDROP align() flag (new in FLTK 1.3.0).
|
||||
//
|
||||
// This shows how to include an 'inline' image (.xpm)
|
||||
// and have it appear on an Fl_Button. Demonstrates the use of the
|
||||
// FL_ALIGN_IMAGE_BACKDROP align() flag (new in FLTK 1.3.0).
|
||||
//
|
||||
// Note that the XPM can just as easily be in an #include file,
|
||||
// but to keep the example self contained, the image (a gray scale
|
||||
// gradient) is included here.
|
||||
// Note that the XPM can just as easily be in an #include file,
|
||||
// but to keep the example self contained, the image (a gray scale
|
||||
// gradient) is included here.
|
||||
//
|
||||
// Copyright 2010 Greg Ercolano.
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
@@ -19,11 +17,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Window.H>
|
||||
@@ -33,12 +31,12 @@
|
||||
/* XPM */
|
||||
static const char * gradient_xpm[] = {
|
||||
"135 20 26 1",
|
||||
"a c #e0e0e0", "b c #dcdcdc", "c c #d8d8d8", "d c #d4d4d4", "e c #d2d2d2",
|
||||
"f c #d0d0d0", "g c #cccccc", "h c #c8c8c8", "i c #c4c4c4", "j c #c2c2c2",
|
||||
"k c #c0c0c0", "l c #bcbcbc", "m c #b8b8b8", "n c #b4b4b4", "o c #b2b2b2",
|
||||
"p c #b0b0b0", "q c #acacac", "r c #a8a8a8", "s c #a4a4a4", "t c #a2a2a2",
|
||||
"u c #a0a0a0", "v c #9c9c9c", "w c #989898", "x c #949494", "y c #929292",
|
||||
"z c #909090",
|
||||
"a c #e0e0e0", "b c #dcdcdc", "c c #d8d8d8", "d c #d4d4d4", "e c #d2d2d2",
|
||||
"f c #d0d0d0", "g c #cccccc", "h c #c8c8c8", "i c #c4c4c4", "j c #c2c2c2",
|
||||
"k c #c0c0c0", "l c #bcbcbc", "m c #b8b8b8", "n c #b4b4b4", "o c #b2b2b2",
|
||||
"p c #b0b0b0", "q c #acacac", "r c #a8a8a8", "s c #a4a4a4", "t c #a2a2a2",
|
||||
"u c #a0a0a0", "v c #9c9c9c", "w c #989898", "x c #949494", "y c #929292",
|
||||
"z c #909090",
|
||||
"aaaaaaaaabbbbbbbbcccccccddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrssss",
|
||||
"aaaaaabbbbbbbbcccccccddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssst",
|
||||
"aaabbbbbbbbcccccccddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssstt",
|
||||
@@ -76,7 +74,3 @@ int main(int argc, char **argv) {
|
||||
win->show(argc,argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
//
|
||||
// "$Id$"
|
||||
// An example of using Fl_Menu_Bar's add() to dynamically create menubars
|
||||
//
|
||||
// An example of using Fl_Menu_Bar's add() to dynamically create menubars
|
||||
// Menu bars can be created several ways. Using add() allows
|
||||
// dynamically creating a menubar using a 'pathname' syntax.
|
||||
// Use if you're creating items dynamically, or if you're making
|
||||
// menubars by hand (as opposed to using fluid), as it's easier
|
||||
// to type and read.
|
||||
//
|
||||
// Menu bars can be created several ways. Using add() allows
|
||||
// dynamically creating a menubar using a 'pathname' syntax.
|
||||
// Use if you're creating items dynamically, or if you're making
|
||||
// menubars by hand (as opposed to using fluid), as it's easier
|
||||
// to type and read.
|
||||
//
|
||||
// In this case we're using one callback for all items,
|
||||
// but you can make unique callbacks for each item if needed.
|
||||
// In this case we're using one callback for all items,
|
||||
// but you can make unique callbacks for each item if needed.
|
||||
//
|
||||
// Copyright 2010 Greg Ercolano.
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
@@ -19,32 +17,32 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h> // fprintf()
|
||||
#include <stdlib.h> // exit()
|
||||
#include <string.h> // strcmp()
|
||||
#include <stdio.h> // fprintf()
|
||||
#include <stdlib.h> // exit()
|
||||
#include <string.h> // strcmp()
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Window.H>
|
||||
#include <FL/Fl_Menu_Bar.H>
|
||||
#include <FL/filename.H> // fl_open_uri()
|
||||
#include <FL/filename.H> // fl_open_uri()
|
||||
|
||||
// This callback is invoked whenever the user clicks an item in the menu bar
|
||||
static void MyMenuCallback(Fl_Widget *w, void *) {
|
||||
Fl_Menu_Bar *bar = (Fl_Menu_Bar*)w; // Get the menubar widget
|
||||
const Fl_Menu_Item *item = bar->mvalue(); // Get the menu item that was picked
|
||||
Fl_Menu_Bar *bar = (Fl_Menu_Bar*)w; // Get the menubar widget
|
||||
const Fl_Menu_Item *item = bar->mvalue(); // Get the menu item that was picked
|
||||
|
||||
char ipath[256]; bar->item_pathname(ipath, sizeof(ipath)); // Get full pathname of picked item
|
||||
char ipath[256]; bar->item_pathname(ipath, sizeof(ipath)); // Get full pathname of picked item
|
||||
|
||||
fprintf(stderr, "callback: You picked '%s'", item->label()); // Print item picked
|
||||
fprintf(stderr, ", item_pathname() is '%s'", ipath); // ..and full pathname
|
||||
fprintf(stderr, "callback: You picked '%s'", item->label()); // Print item picked
|
||||
fprintf(stderr, ", item_pathname() is '%s'", ipath); // ..and full pathname
|
||||
|
||||
if ( item->flags & (FL_MENU_RADIO|FL_MENU_TOGGLE) ) { // Toggle or radio item?
|
||||
fprintf(stderr, ", value is %s", item->value()?"on":"off"); // Print item's value
|
||||
if ( item->flags & (FL_MENU_RADIO|FL_MENU_TOGGLE) ) { // Toggle or radio item?
|
||||
fprintf(stderr, ", value is %s", item->value()?"on":"off"); // Print item's value
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
if ( strcmp(item->label(), "Google") == 0 ) { fl_open_uri("http://google.com/"); }
|
||||
@@ -53,8 +51,8 @@ static void MyMenuCallback(Fl_Widget *w, void *) {
|
||||
|
||||
int main() {
|
||||
Fl::scheme("gtk+");
|
||||
Fl_Window *win = new Fl_Window(400,200, "menubar-simple"); // Create window
|
||||
Fl_Menu_Bar *menu = new Fl_Menu_Bar(0,0,400,25); // Create menubar, items..
|
||||
Fl_Window *win = new Fl_Window(400,200, "menubar-simple"); // Create window
|
||||
Fl_Menu_Bar *menu = new Fl_Menu_Bar(0,0,400,25); // Create menubar, items..
|
||||
menu->add("&File/&Open", "^o", MyMenuCallback);
|
||||
menu->add("&File/&Save", "^s", MyMenuCallback, 0, FL_MENU_DIVIDER);
|
||||
menu->add("&File/&Quit", "^q", MyMenuCallback);
|
||||
@@ -62,23 +60,19 @@ int main() {
|
||||
menu->add("&Edit/&Paste", "^v", MyMenuCallback, 0, FL_MENU_DIVIDER);
|
||||
menu->add("&Edit/Radio 1", 0, MyMenuCallback, 0, FL_MENU_RADIO);
|
||||
menu->add("&Edit/Radio 2", 0, MyMenuCallback, 0, FL_MENU_RADIO|FL_MENU_DIVIDER);
|
||||
menu->add("&Edit/Toggle 1", 0, MyMenuCallback, 0, FL_MENU_TOGGLE); // Default: off
|
||||
menu->add("&Edit/Toggle 2", 0, MyMenuCallback, 0, FL_MENU_TOGGLE); // Default: off
|
||||
menu->add("&Edit/Toggle 3", 0, MyMenuCallback, 0, FL_MENU_TOGGLE|FL_MENU_VALUE); // Default: on
|
||||
menu->add("&Edit/Toggle 1", 0, MyMenuCallback, 0, FL_MENU_TOGGLE); // Default: off
|
||||
menu->add("&Edit/Toggle 2", 0, MyMenuCallback, 0, FL_MENU_TOGGLE); // Default: off
|
||||
menu->add("&Edit/Toggle 3", 0, MyMenuCallback, 0, FL_MENU_TOGGLE|FL_MENU_VALUE); // Default: on
|
||||
menu->add("&Help/Google", 0, MyMenuCallback);
|
||||
|
||||
// Example: show how we can dynamically change the state of item Toggle #2 (turn it 'on')
|
||||
{
|
||||
Fl_Menu_Item *item = (Fl_Menu_Item*)menu->find_item("&Edit/Toggle 2"); // Find item
|
||||
if ( item ) item->set(); // Turn it on
|
||||
else fprintf(stderr, "'Toggle 2' item not found?!\n"); // (optional) Not found? complain!
|
||||
Fl_Menu_Item *item = (Fl_Menu_Item*)menu->find_item("&Edit/Toggle 2"); // Find item
|
||||
if ( item ) item->set(); // Turn it on
|
||||
else fprintf(stderr, "'Toggle 2' item not found?!\n"); // (optional) Not found? complain!
|
||||
}
|
||||
|
||||
win->end();
|
||||
win->show();
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// An example of how to use Fl_Native_File_Chooser to open & save files.
|
||||
// An example of how to use Fl_Native_File_Chooser to open & save files.
|
||||
//
|
||||
// Copyright 2010 Greg Ercolano.
|
||||
// Copyright 1998-2017 by Bill Spitzak and others.
|
||||
@@ -10,16 +8,16 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h> // printf
|
||||
#include <stdlib.h> // exit,malloc
|
||||
#include <string.h> // strerror
|
||||
#include <errno.h> // errno
|
||||
#include <stdio.h> // printf
|
||||
#include <stdlib.h> // exit,malloc
|
||||
#include <string.h> // strerror
|
||||
#include <errno.h> // errno
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Window.H>
|
||||
#include <FL/Fl_Menu_Bar.H>
|
||||
@@ -62,28 +60,28 @@ class Application : public Fl_Window {
|
||||
static void open_cb(Fl_Widget *w, void *v) {
|
||||
Application *app = (Application*)v;
|
||||
app->fc->title("Open");
|
||||
app->fc->type(Fl_Native_File_Chooser::BROWSE_FILE); // only picks files that exist
|
||||
app->fc->type(Fl_Native_File_Chooser::BROWSE_FILE); // only picks files that exist
|
||||
switch ( app->fc->show() ) {
|
||||
case -1: break; // Error
|
||||
case 1: break; // Cancel
|
||||
default: // Choice
|
||||
case -1: break; // Error
|
||||
case 1: break; // Cancel
|
||||
default: // Choice
|
||||
app->fc->preset_file(app->fc->filename());
|
||||
app->open(app->fc->filename());
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Handle a 'Save as' request from the menu
|
||||
static void saveas_cb(Fl_Widget *w, void *v) {
|
||||
Application *app = (Application*)v;
|
||||
app->fc->title("Save As");
|
||||
app->fc->type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); // need this if file doesn't exist yet
|
||||
app->fc->type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); // need this if file doesn't exist yet
|
||||
switch ( app->fc->show() ) {
|
||||
case -1: break; // Error
|
||||
case 1: break; // Cancel
|
||||
default: // Choice
|
||||
case -1: break; // Error
|
||||
case 1: break; // Cancel
|
||||
default: // Choice
|
||||
app->fc->preset_file(app->fc->filename());
|
||||
app->save(app->fc->filename());
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Handle a 'Save' request from the menu
|
||||
@@ -103,9 +101,9 @@ class Application : public Fl_Window {
|
||||
static char *filename = 0;
|
||||
if ( !filename ) {
|
||||
const char *home =
|
||||
fl_getenv("HOME") ? fl_getenv("HOME") : // unix
|
||||
fl_getenv("HOME_PATH") ? fl_getenv("HOME_PATH") : // windows
|
||||
"."; // other
|
||||
fl_getenv("HOME") ? fl_getenv("HOME") : // unix
|
||||
fl_getenv("HOME_PATH") ? fl_getenv("HOME_PATH") : // windows
|
||||
"."; // other
|
||||
filename = (char*)malloc(strlen(home)+20);
|
||||
sprintf(filename, "%s/untitled.txt", home);
|
||||
}
|
||||
@@ -121,16 +119,16 @@ public:
|
||||
menu->add("&File/&Quit", FL_COMMAND+'q', quit_cb);
|
||||
// Describe the demo..
|
||||
Fl_Box *box = new Fl_Box(20,25+20,w()-40,h()-40-25);
|
||||
box->color(45);
|
||||
box->color(45);
|
||||
box->box(FL_FLAT_BOX);
|
||||
box->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE|FL_ALIGN_WRAP);
|
||||
box->label("This demo shows an example of implementing "
|
||||
"common 'File' menu operations like:\n"
|
||||
" File/Open, File/Save, File/Save As\n"
|
||||
"..using the Fl_Native_File_Chooser widget.\n\n"
|
||||
"Note 'Save' and 'Save As' really *does* create files! "
|
||||
"This is to show how behavior differs when "
|
||||
"files exist vs. do not.");
|
||||
"..using the Fl_Native_File_Chooser widget.\n\n"
|
||||
"Note 'Save' and 'Save As' really *does* create files! "
|
||||
"This is to show how behavior differs when "
|
||||
"files exist vs. do not.");
|
||||
box->labelsize(12);
|
||||
// Initialize the file chooser
|
||||
fc = new Fl_Native_File_Chooser();
|
||||
@@ -146,7 +144,3 @@ int main(int argc, char *argv[]) {
|
||||
app->show(argc,argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Simple example of using Fl_Native_File_Chooser.
|
||||
// Simple example of using Fl_Native_File_Chooser.
|
||||
//
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
//
|
||||
@@ -9,19 +7,19 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Window.H>
|
||||
#include <FL/Fl_Menu_Button.H>
|
||||
#include <FL/Fl_Native_File_Chooser.H>
|
||||
#include <FL/fl_message.H>
|
||||
#include <stdlib.h> /* exit() */
|
||||
#include <string.h> /* strcmp() */
|
||||
#include <stdlib.h> /* exit() */
|
||||
#include <string.h> /* strcmp() */
|
||||
|
||||
Fl_Window *G_win = 0;
|
||||
Fl_Menu_Button *G_menu = 0;
|
||||
@@ -30,28 +28,28 @@ Fl_Native_File_Chooser *G_chooser = 0;
|
||||
static void Menu_CB(Fl_Widget*,void*data) {
|
||||
// Handle the popup menu item the user picked..
|
||||
const char *choice = (const char*)data;
|
||||
if ( strcmp(choice, "quit") == 0 ) { // Handle "quit"
|
||||
if ( strcmp(choice, "quit") == 0 ) { // Handle "quit"
|
||||
exit(0);
|
||||
} else if ( strcmp(choice, "open") == 0 ) { // Handle "open"
|
||||
} else if ( strcmp(choice, "open") == 0 ) { // Handle "open"
|
||||
if ( G_chooser == 0 ) {
|
||||
// Create an instance of file chooser we can reuse..
|
||||
G_chooser = new Fl_Native_File_Chooser();
|
||||
G_chooser->directory("."); // directory to start browsing with
|
||||
G_chooser->preset_file("nativefilechooser-simple.cxx"); // file to start with
|
||||
G_chooser->directory("."); // directory to start browsing with
|
||||
G_chooser->preset_file("nativefilechooser-simple.cxx"); // file to start with
|
||||
G_chooser->filter("C++\t*.{cxx,cpp,h,H}\n");
|
||||
G_chooser->type(Fl_Native_File_Chooser::BROWSE_FILE); // only picks files that exist
|
||||
G_chooser->title("Pick a file please.."); // custom title for chooser window
|
||||
G_chooser->type(Fl_Native_File_Chooser::BROWSE_FILE); // only picks files that exist
|
||||
G_chooser->title("Pick a file please.."); // custom title for chooser window
|
||||
}
|
||||
// Show the chooser
|
||||
// This blocks while chooser is open.
|
||||
//
|
||||
switch ( G_chooser->show() ) {
|
||||
case -1: break; // Error
|
||||
case 1: break; // Cancel
|
||||
default: // Choice
|
||||
G_chooser->preset_file(G_chooser->filename());
|
||||
fl_message("You chose: %s", G_chooser->filename());
|
||||
break;
|
||||
case -1: break; // Error
|
||||
case 1: break; // Cancel
|
||||
default: // Choice
|
||||
G_chooser->preset_file(G_chooser->filename());
|
||||
fl_message("You chose: %s", G_chooser->filename());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -71,7 +69,3 @@ int main(int argc, char *argv[]) {
|
||||
G_win->show(argc,argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Demonstrate using the Fl_Progress widget in an application - erco 05/02/2005
|
||||
//
|
||||
// Copyright 2005,2012 Greg Ercolano.
|
||||
@@ -10,11 +8,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -72,7 +70,3 @@ int main() {
|
||||
win.show();
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// shapedwindow example source file for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
// Copyright 1998-2014 by Bill Spitzak and others.
|
||||
@@ -9,11 +7,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems to:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <FL/Fl_Window.H>
|
||||
@@ -119,7 +117,3 @@ int main(int argc, char **argv) {
|
||||
delete win;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Simple Example app using Fl_Simple_Terminal. - erco 10/12/2017
|
||||
//
|
||||
// Copyright 2017 Greg Ercolano.
|
||||
@@ -10,14 +8,14 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <time.h> //START
|
||||
#include <time.h> //START
|
||||
#include <FL/Fl_Double_Window.H>
|
||||
#include <FL/Fl_Box.H>
|
||||
#include <FL/Fl_Simple_Terminal.H>
|
||||
@@ -53,8 +51,4 @@ int main(int argc, char **argv) {
|
||||
G_win->show();
|
||||
Fl::add_timeout(0.5, tick_cb);
|
||||
return Fl::run();
|
||||
} //END
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
} //END
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
//
|
||||
// "$Id$"
|
||||
// Show how FLTK widgets can be parented by Fl_Table. -erco 03/30/2003
|
||||
//
|
||||
// Show how FLTK widgets can be parented by Fl_Table. -erco 03/30/2003
|
||||
// Originally the 'widgettable.cxx' example program that came with
|
||||
// erco's Fl_Table widget. Added to FLTK in 2010.
|
||||
//
|
||||
// Originally the 'widgettable.cxx' example program that came with
|
||||
// erco's Fl_Table widget. Added to FLTK in 2010.
|
||||
//
|
||||
// This demonstrates how to use Fl_Table as a 'container' for FLTK
|
||||
// widgets; one widget per cell. This isn't optimal for large tables,
|
||||
// where it's better to make one instance of a widget, and move it to
|
||||
// where it's needed. For an example of this, see the example program
|
||||
// "table-spreadsheet.cxx".
|
||||
// This demonstrates how to use Fl_Table as a 'container' for FLTK
|
||||
// widgets; one widget per cell. This isn't optimal for large tables,
|
||||
// where it's better to make one instance of a widget, and move it to
|
||||
// where it's needed. For an example of this, see the example program
|
||||
// "table-spreadsheet.cxx".
|
||||
//
|
||||
// Copyright 2010 Greg Ercolano.
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
@@ -19,11 +17,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems to:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -41,8 +39,8 @@ void button_cb(Fl_Widget *w, void*);
|
||||
//
|
||||
class WidgetTable : public Fl_Table {
|
||||
protected:
|
||||
void draw_cell(TableContext context, // table cell drawing
|
||||
int R=0, int C=0, int X=0, int Y=0, int W=0, int H=0);
|
||||
void draw_cell(TableContext context, // table cell drawing
|
||||
int R=0, int C=0, int X=0, int Y=0, int W=0, int H=0);
|
||||
|
||||
public:
|
||||
WidgetTable(int x, int y, int w, int h, const char *l=0) : Fl_Table(x,y,w,h,l) {
|
||||
@@ -57,32 +55,32 @@ public:
|
||||
~WidgetTable() { }
|
||||
|
||||
void SetSize(int newrows, int newcols) {
|
||||
clear(); // clear any previous widgets, if any
|
||||
clear(); // clear any previous widgets, if any
|
||||
rows(newrows);
|
||||
cols(newcols);
|
||||
|
||||
begin(); // start adding widgets to group
|
||||
begin(); // start adding widgets to group
|
||||
{
|
||||
for ( int r = 0; r<newrows; r++ ) {
|
||||
for ( int c = 0; c<newcols; c++ ) {
|
||||
int X,Y,W,H;
|
||||
find_cell(CONTEXT_TABLE, r, c, X, Y, W, H);
|
||||
for ( int c = 0; c<newcols; c++ ) {
|
||||
int X,Y,W,H;
|
||||
find_cell(CONTEXT_TABLE, r, c, X, Y, W, H);
|
||||
|
||||
char s[40];
|
||||
if ( c & 1 ) {
|
||||
// Create the input widgets
|
||||
sprintf(s, "%d.%d", r, c);
|
||||
Fl_Input *in = new Fl_Input(X,Y,W,H);
|
||||
in->value(s);
|
||||
} else {
|
||||
// Create the light buttons
|
||||
sprintf(s, "%d/%d ", r, c);
|
||||
Fl_Light_Button *butt = new Fl_Light_Button(X,Y,W,H,strdup(s));
|
||||
butt->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
|
||||
butt->callback(button_cb, (void*)0);
|
||||
butt->value( ((r+c*2) & 4 ) ? 1 : 0);
|
||||
}
|
||||
}
|
||||
char s[40];
|
||||
if ( c & 1 ) {
|
||||
// Create the input widgets
|
||||
sprintf(s, "%d.%d", r, c);
|
||||
Fl_Input *in = new Fl_Input(X,Y,W,H);
|
||||
in->value(s);
|
||||
} else {
|
||||
// Create the light buttons
|
||||
sprintf(s, "%d/%d ", r, c);
|
||||
Fl_Light_Button *butt = new Fl_Light_Button(X,Y,W,H,strdup(s));
|
||||
butt->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
|
||||
butt->callback(button_cb, (void*)0);
|
||||
butt->value( ((r+c*2) & 4 ) ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
end();
|
||||
@@ -90,35 +88,35 @@ public:
|
||||
};
|
||||
|
||||
// Handle drawing all cells in table
|
||||
void WidgetTable::draw_cell(TableContext context,
|
||||
int R, int C, int X, int Y, int W, int H) {
|
||||
void WidgetTable::draw_cell(TableContext context,
|
||||
int R, int C, int X, int Y, int W, int H) {
|
||||
switch ( context ) {
|
||||
case CONTEXT_STARTPAGE:
|
||||
fl_font(FL_HELVETICA, 12); // font used by all headers
|
||||
fl_font(FL_HELVETICA, 12); // font used by all headers
|
||||
break;
|
||||
|
||||
case CONTEXT_RC_RESIZE: {
|
||||
int X, Y, W, H;
|
||||
int index = 0;
|
||||
for ( int r = 0; r<rows(); r++ ) {
|
||||
for ( int c = 0; c<cols(); c++ ) {
|
||||
if ( index >= children() ) break;
|
||||
find_cell(CONTEXT_TABLE, r, c, X, Y, W, H);
|
||||
child(index++)->resize(X,Y,W,H);
|
||||
}
|
||||
for ( int c = 0; c<cols(); c++ ) {
|
||||
if ( index >= children() ) break;
|
||||
find_cell(CONTEXT_TABLE, r, c, X, Y, W, H);
|
||||
child(index++)->resize(X,Y,W,H);
|
||||
}
|
||||
}
|
||||
init_sizes(); // tell group children resized
|
||||
init_sizes(); // tell group children resized
|
||||
return;
|
||||
}
|
||||
|
||||
case CONTEXT_ROW_HEADER:
|
||||
fl_push_clip(X, Y, W, H);
|
||||
{
|
||||
static char s[40];
|
||||
sprintf(s, "Row %d", R);
|
||||
fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, row_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
|
||||
static char s[40];
|
||||
sprintf(s, "Row %d", R);
|
||||
fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, row_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
@@ -126,17 +124,17 @@ void WidgetTable::draw_cell(TableContext context,
|
||||
case CONTEXT_COL_HEADER:
|
||||
fl_push_clip(X, Y, W, H);
|
||||
{
|
||||
static char s[40];
|
||||
sprintf(s, "Column %d", C);
|
||||
fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, col_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
|
||||
static char s[40];
|
||||
sprintf(s, "Column %d", C);
|
||||
fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, col_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
|
||||
case CONTEXT_CELL:
|
||||
return; // fltk handles drawing the widgets
|
||||
return; // fltk handles drawing the widgets
|
||||
|
||||
default:
|
||||
return;
|
||||
@@ -156,7 +154,3 @@ int main() {
|
||||
win.show();
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Simple example of using Fl_Table - Greg Ercolano 11/29/2010
|
||||
//
|
||||
// Demonstrates the simplest use of Fl_Table possible.
|
||||
@@ -15,24 +13,24 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
//
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Double_Window.H>
|
||||
#include <FL/Fl_Table.H>
|
||||
#include <FL/fl_draw.H>
|
||||
|
||||
#define MAX_ROWS 30
|
||||
#define MAX_COLS 26 // A-Z
|
||||
#define MAX_COLS 26 // A-Z
|
||||
|
||||
// Derive a class from Fl_Table
|
||||
class MyTable : public Fl_Table {
|
||||
|
||||
int data[MAX_ROWS][MAX_COLS]; // data array for cells
|
||||
int data[MAX_ROWS][MAX_COLS]; // data array for cells
|
||||
|
||||
// Draw the row/col headings
|
||||
// Make this a dark thin upbox with the text inside.
|
||||
@@ -43,7 +41,7 @@ class MyTable : public Fl_Table {
|
||||
fl_color(FL_BLACK);
|
||||
fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
|
||||
fl_pop_clip();
|
||||
}
|
||||
}
|
||||
// Draw the cell data
|
||||
// Dark gray text on white background with subtle border
|
||||
//
|
||||
@@ -56,7 +54,7 @@ class MyTable : public Fl_Table {
|
||||
// Draw box border
|
||||
fl_color(color()); fl_rect(X,Y,W,H);
|
||||
fl_pop_clip();
|
||||
}
|
||||
}
|
||||
// Handle drawing table's cells
|
||||
// Fl_Table calls this function to draw each visible cell in the table.
|
||||
// It's up to us to use FLTK's drawing functions to draw the cells the way we want.
|
||||
@@ -66,15 +64,15 @@ class MyTable : public Fl_Table {
|
||||
switch ( context ) {
|
||||
case CONTEXT_STARTPAGE: // before page is drawn..
|
||||
fl_font(FL_HELVETICA, 16); // set the font for our drawing operations
|
||||
return;
|
||||
return;
|
||||
case CONTEXT_COL_HEADER: // Draw column headers
|
||||
sprintf(s,"%c",'A'+COL); // "A", "B", "C", etc.
|
||||
DrawHeader(s,X,Y,W,H);
|
||||
return;
|
||||
return;
|
||||
case CONTEXT_ROW_HEADER: // Draw row headers
|
||||
sprintf(s,"%03d:",ROW); // "001:", "002:", etc
|
||||
DrawHeader(s,X,Y,W,H);
|
||||
return;
|
||||
return;
|
||||
case CONTEXT_CELL: // Draw data in cells
|
||||
sprintf(s,"%d",data[ROW][COL]);
|
||||
DrawData(s,X,Y,W,H);
|
||||
@@ -102,7 +100,7 @@ public:
|
||||
col_header(1); // enable column headers (along top)
|
||||
col_width_all(80); // default width of columns
|
||||
col_resize(1); // enable column resizing
|
||||
end(); // end the Fl_Table group
|
||||
end(); // end the Fl_Table group
|
||||
}
|
||||
~MyTable() { }
|
||||
};
|
||||
@@ -115,7 +113,3 @@ int main(int argc, char **argv) {
|
||||
win.show(argc,argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
//
|
||||
// "$Id$"
|
||||
// table-sort -- An example application using a sortable Fl_Table
|
||||
//
|
||||
// table-sort -- An example application using a sortable Fl_Table
|
||||
//
|
||||
// Originally the 'sortapp.cxx' example program that came with
|
||||
// erco's Fl_Table widget. Added to FLTK in 2010.
|
||||
// Originally the 'sortapp.cxx' example program that came with
|
||||
// erco's Fl_Table widget. Added to FLTK in 2010.
|
||||
//
|
||||
// Example of a non-trivial application that uses Fl_Table
|
||||
// Example of a non-trivial application that uses Fl_Table
|
||||
// with sortable columns. This example is not trying to be simple,
|
||||
// but to demonstrate the complexities of an actual app.
|
||||
//
|
||||
@@ -17,12 +15,12 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
//
|
||||
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Double_Window.H>
|
||||
@@ -147,17 +145,17 @@ void MyTable::draw_sort_arrow(int X,int Y,int W,int H) {
|
||||
|
||||
// Handle drawing all cells in table
|
||||
void MyTable::draw_cell(TableContext context, int R, int C, int X, int Y, int W, int H) {
|
||||
const char *s = "";
|
||||
const char *s = "";
|
||||
if ( R < (int)_rowdata.size() && C < (int)_rowdata[R].cols.size() )
|
||||
s = _rowdata[R].cols[C];
|
||||
s = _rowdata[R].cols[C];
|
||||
switch ( context ) {
|
||||
case CONTEXT_COL_HEADER:
|
||||
fl_push_clip(X,Y,W,H); {
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, FL_BACKGROUND_COLOR);
|
||||
if ( C < 9 ) {
|
||||
fl_font(HEADER_FONTFACE, HEADER_FONTSIZE);
|
||||
fl_font(HEADER_FONTFACE, HEADER_FONTSIZE);
|
||||
fl_color(FL_BLACK);
|
||||
fl_draw(G_header[C], X+2,Y,W,H, FL_ALIGN_LEFT, 0, 0); // +2=pad left
|
||||
fl_draw(G_header[C], X+2,Y,W,H, FL_ALIGN_LEFT, 0, 0); // +2=pad left
|
||||
// Draw sort arrow
|
||||
if ( C == _sort_lastcol ) {
|
||||
draw_sort_arrow(X,Y,W,H);
|
||||
@@ -165,14 +163,14 @@ void MyTable::draw_cell(TableContext context, int R, int C, int X, int Y, int W,
|
||||
}
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
return;
|
||||
case CONTEXT_CELL: {
|
||||
fl_push_clip(X,Y,W,H); {
|
||||
// Bg color
|
||||
Fl_Color bgcolor = row_selected(R) ? selection_color() : FL_WHITE;
|
||||
fl_color(bgcolor); fl_rectf(X,Y,W,H);
|
||||
fl_font(ROW_FONTFACE, ROW_FONTSIZE);
|
||||
fl_color(FL_BLACK); fl_draw(s, X+2,Y,W,H, FL_ALIGN_LEFT); // +2=pad left
|
||||
fl_color(bgcolor); fl_rectf(X,Y,W,H);
|
||||
fl_font(ROW_FONTFACE, ROW_FONTSIZE);
|
||||
fl_color(FL_BLACK); fl_draw(s, X+2,Y,W,H, FL_ALIGN_LEFT); // +2=pad left
|
||||
// Border
|
||||
fl_color(FL_LIGHT2); fl_rect(X,Y,W,H);
|
||||
}
|
||||
@@ -190,7 +188,7 @@ void MyTable::autowidth(int pad) {
|
||||
// Initialize all column widths to header width
|
||||
fl_font(HEADER_FONTFACE, HEADER_FONTSIZE);
|
||||
for ( int c=0; G_header[c]; c++ ) {
|
||||
w=0; fl_measure(G_header[c], w, h, 0); // pixel width of header text
|
||||
w=0; fl_measure(G_header[c], w, h, 0); // pixel width of header text
|
||||
col_width(c, w+pad);
|
||||
}
|
||||
fl_font(ROW_FONTFACE, ROW_FONTSIZE);
|
||||
@@ -233,9 +231,9 @@ void MyTable::load_command(const char *cmd) {
|
||||
if ( (int)rc.size() > cols() ) {
|
||||
cols((int)rc.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
// How many rows we loaded
|
||||
rows((int)_rowdata.size());
|
||||
rows((int)_rowdata.size());
|
||||
// Auto-calculate widths, with 20 pixel padding
|
||||
autowidth(20);
|
||||
}
|
||||
@@ -255,7 +253,7 @@ void MyTable::event_callback2() {
|
||||
if ( Fl::event() == FL_RELEASE && Fl::event_button() == 1 ) {
|
||||
if ( _sort_lastcol == COL ) { // Click same column? Toggle sort
|
||||
_sort_reverse ^= 1;
|
||||
} else { // Click diff column? Up sort
|
||||
} else { // Click diff column? Up sort
|
||||
_sort_reverse = 0;
|
||||
}
|
||||
sort_column(COL, _sort_reverse);
|
||||
@@ -277,15 +275,11 @@ int main() {
|
||||
table.when(FL_WHEN_RELEASE); // handle table events on release
|
||||
table.load_command(DIRCMD); // load table with a directory listing
|
||||
table.row_height_all(18); // height of all rows
|
||||
table.tooltip("Click on column headings to toggle column sorting");
|
||||
table.color(FL_WHITE);
|
||||
table.tooltip("Click on column headings to toggle column sorting");
|
||||
table.color(FL_WHITE);
|
||||
win.end();
|
||||
win.resizable(table);
|
||||
table.resize_window();
|
||||
win.show();
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Simple example of an interactive spreadsheet using Fl_Table.
|
||||
// Uses Mr. Satan's technique of instancing an Fl_Input around.
|
||||
// Modified to test Jean-Marc's mods for keyboard nav and mouse selection.
|
||||
// Simple example of an interactive spreadsheet using Fl_Table.
|
||||
// Uses Mr. Satan's technique of instancing an Fl_Input around.
|
||||
// Modified to test Jean-Marc's mods for keyboard nav and mouse selection.
|
||||
//
|
||||
// Fl_Table[1.00/LGPL] 04/18/03 Mister Satan -- Initial implementation, submitted to erco for Fl_Table
|
||||
// Fl_Table[1.10/LGPL] 05/17/03 Greg Ercolano -- Small mods to follow changes to Fl_Table
|
||||
@@ -17,11 +15,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -36,18 +34,18 @@ const int MAX_COLS = 26;
|
||||
const int MAX_ROWS = 500;
|
||||
|
||||
class Spreadsheet : public Fl_Table {
|
||||
Fl_Int_Input *input; // single instance of Fl_Int_Input widget
|
||||
int values[MAX_ROWS][MAX_COLS]; // array of data for cells
|
||||
int row_edit, col_edit; // row/col being modified
|
||||
int s_left, s_top, s_right, s_bottom; // kb nav + mouse selection
|
||||
Fl_Int_Input *input; // single instance of Fl_Int_Input widget
|
||||
int values[MAX_ROWS][MAX_COLS]; // array of data for cells
|
||||
int row_edit, col_edit; // row/col being modified
|
||||
int s_left, s_top, s_right, s_bottom; // kb nav + mouse selection
|
||||
|
||||
protected:
|
||||
void draw_cell(TableContext context,int=0,int=0,int=0,int=0,int=0,int=0);
|
||||
void event_callback2(); // table's event callback (instance)
|
||||
static void event_callback(Fl_Widget*, void *v) { // table's event callback (static)
|
||||
void event_callback2(); // table's event callback (instance)
|
||||
static void event_callback(Fl_Widget*, void *v) { // table's event callback (static)
|
||||
((Spreadsheet*)v)->event_callback2();
|
||||
}
|
||||
static void input_cb(Fl_Widget*, void* v) { // input widget's callback
|
||||
static void input_cb(Fl_Widget*, void* v) { // input widget's callback
|
||||
((Spreadsheet*)v)->set_value_hide();
|
||||
}
|
||||
|
||||
@@ -59,13 +57,13 @@ public:
|
||||
input = new Fl_Int_Input(W/2,H/2,0,0);
|
||||
input->hide();
|
||||
input->callback(input_cb, (void*)this);
|
||||
input->when(FL_WHEN_ENTER_KEY_ALWAYS); // callback triggered when user hits Enter
|
||||
input->when(FL_WHEN_ENTER_KEY_ALWAYS); // callback triggered when user hits Enter
|
||||
input->maximum_size(5);
|
||||
row_edit = col_edit = 0;
|
||||
s_left = s_top = s_right = s_bottom = 0;
|
||||
for (int c = 0; c < MAX_COLS; c++)
|
||||
for (int r = 0; r < MAX_ROWS; r++)
|
||||
values[r][c] = (r + 2) * (c + 3); // initialize cells
|
||||
values[r][c] = (r + 2) * (c + 3); // initialize cells
|
||||
end();
|
||||
}
|
||||
~Spreadsheet() { }
|
||||
@@ -74,7 +72,7 @@ public:
|
||||
void set_value_hide() {
|
||||
values[row_edit][col_edit] = atoi(input->value());
|
||||
input->hide();
|
||||
window()->cursor(FL_CURSOR_DEFAULT); // XXX: if we don't do this, cursor can disappear!
|
||||
window()->cursor(FL_CURSOR_DEFAULT); // XXX: if we don't do this, cursor can disappear!
|
||||
}
|
||||
// Change number of rows
|
||||
void rows(int val) {
|
||||
@@ -97,130 +95,130 @@ public:
|
||||
// and make the widget 'appear' at the cell's location.
|
||||
//
|
||||
void start_editing(int R, int C) {
|
||||
row_edit = R; // Now editing this row/col
|
||||
row_edit = R; // Now editing this row/col
|
||||
col_edit = C;
|
||||
int X,Y,W,H;
|
||||
find_cell(CONTEXT_CELL, R,C, X,Y,W,H); // Find X/Y/W/H of cell
|
||||
input->resize(X,Y,W,H); // Move Fl_Input widget there
|
||||
char s[30]; sprintf(s, "%d", values[R][C]); // Load input widget with cell's current value
|
||||
find_cell(CONTEXT_CELL, R,C, X,Y,W,H); // Find X/Y/W/H of cell
|
||||
input->resize(X,Y,W,H); // Move Fl_Input widget there
|
||||
char s[30]; sprintf(s, "%d", values[R][C]); // Load input widget with cell's current value
|
||||
input->value(s);
|
||||
input->position(0,strlen(s)); // Select entire input field
|
||||
input->show(); // Show the input widget, now that we've positioned it
|
||||
input->position(0,strlen(s)); // Select entire input field
|
||||
input->show(); // Show the input widget, now that we've positioned it
|
||||
input->take_focus();
|
||||
}
|
||||
// Tell the input widget it's done editing, and to 'hide'
|
||||
void done_editing() {
|
||||
if (input->visible()) { // input widget visible, ie. edit in progress?
|
||||
set_value_hide(); // Transfer its current contents to cell and hide
|
||||
if (input->visible()) { // input widget visible, ie. edit in progress?
|
||||
set_value_hide(); // Transfer its current contents to cell and hide
|
||||
}
|
||||
}
|
||||
// Return the sum of all rows in this column
|
||||
int sum_rows(int C) {
|
||||
int sum = 0;
|
||||
for (int r=0; r<rows()-1; ++r) // -1: don't include cell data in 'totals' column
|
||||
for (int r=0; r<rows()-1; ++r) // -1: don't include cell data in 'totals' column
|
||||
sum += values[r][C];
|
||||
return(sum);
|
||||
}
|
||||
// Return the sum of all cols in this row
|
||||
int sum_cols(int R) {
|
||||
int sum = 0;
|
||||
for (int c=0; c<cols()-1; ++c) // -1: don't include cell data in 'totals' column
|
||||
for (int c=0; c<cols()-1; ++c) // -1: don't include cell data in 'totals' column
|
||||
sum += values[R][c];
|
||||
return(sum);
|
||||
}
|
||||
// Return the sum of all cells in table
|
||||
int sum_all() {
|
||||
int sum = 0;
|
||||
for (int c=0; c<cols()-1; ++c) // -1: don't include cell data in 'totals' column
|
||||
for (int r=0; r<rows()-1; ++r) // -1: ""
|
||||
sum += values[r][c];
|
||||
for (int c=0; c<cols()-1; ++c) // -1: don't include cell data in 'totals' column
|
||||
for (int r=0; r<rows()-1; ++r) // -1: ""
|
||||
sum += values[r][c];
|
||||
return(sum);
|
||||
}
|
||||
};
|
||||
|
||||
// Handle drawing all cells in table
|
||||
void Spreadsheet::draw_cell(TableContext context, int R,int C, int X,int Y,int W,int H) {
|
||||
static char s[30];
|
||||
static char s[30];
|
||||
switch ( context ) {
|
||||
case CONTEXT_STARTPAGE: // table about to redraw
|
||||
case CONTEXT_STARTPAGE: // table about to redraw
|
||||
// Get kb nav + mouse 'selection region' for use below
|
||||
get_selection(s_top, s_left, s_bottom, s_right);
|
||||
break;
|
||||
|
||||
case CONTEXT_COL_HEADER: // table wants us to draw a column heading (C is column)
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // set font for heading to bold
|
||||
fl_push_clip(X,Y,W,H); // clip region for text
|
||||
case CONTEXT_COL_HEADER: // table wants us to draw a column heading (C is column)
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // set font for heading to bold
|
||||
fl_push_clip(X,Y,W,H); // clip region for text
|
||||
{
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, col_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
if (C == cols()-1) { // Last column? show 'TOTAL'
|
||||
fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
|
||||
} else { // Not last column? show column letter
|
||||
sprintf(s, "%c", 'A' + C);
|
||||
fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
|
||||
}
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, col_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
if (C == cols()-1) { // Last column? show 'TOTAL'
|
||||
fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
|
||||
} else { // Not last column? show column letter
|
||||
sprintf(s, "%c", 'A' + C);
|
||||
fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
|
||||
}
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
|
||||
case CONTEXT_ROW_HEADER: // table wants us to draw a row heading (R is row)
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // set font for row heading to bold
|
||||
case CONTEXT_ROW_HEADER: // table wants us to draw a row heading (R is row)
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // set font for row heading to bold
|
||||
fl_push_clip(X,Y,W,H);
|
||||
{
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, row_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
if (R == rows()-1) { // Last row? Show 'Total'
|
||||
fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
|
||||
} else { // Not last row? show row#
|
||||
sprintf(s, "%d", R+1);
|
||||
fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
|
||||
}
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, row_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
if (R == rows()-1) { // Last row? Show 'Total'
|
||||
fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
|
||||
} else { // Not last row? show row#
|
||||
sprintf(s, "%d", R+1);
|
||||
fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
|
||||
}
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
|
||||
case CONTEXT_CELL: { // table wants us to draw a cell
|
||||
case CONTEXT_CELL: { // table wants us to draw a cell
|
||||
if (R == row_edit && C == col_edit && input->visible()) {
|
||||
return; // dont draw for cell with input widget over it
|
||||
return; // dont draw for cell with input widget over it
|
||||
}
|
||||
// Background
|
||||
// Keyboard nav and mouse selection highlighting
|
||||
if (R >= s_top && R <= s_bottom && C >= s_left && C <= s_right) {
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, FL_YELLOW);
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, FL_YELLOW);
|
||||
} else if ( C < cols()-1 && R < rows()-1 ) {
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, FL_WHITE);
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, FL_WHITE);
|
||||
} else {
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, 0xbbddbb00); // money green
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, 0xbbddbb00); // money green
|
||||
}
|
||||
// Text
|
||||
fl_push_clip(X+3, Y+3, W-6, H-6);
|
||||
{
|
||||
fl_color(FL_BLACK);
|
||||
if (C == cols()-1 || R == rows()-1) { // Last row or col? Show total
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // ..in bold font
|
||||
if (C == cols()-1 && R == rows()-1) { // Last row+col? Total all cells
|
||||
sprintf(s, "%d", sum_all());
|
||||
} else if (C == cols()-1) { // Row subtotal
|
||||
sprintf(s, "%d", sum_cols(R));
|
||||
} else if (R == rows()-1) { // Col subtotal
|
||||
sprintf(s, "%d", sum_rows(C));
|
||||
}
|
||||
fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
|
||||
} else { // Not last row or col? Show cell contents
|
||||
fl_font(FL_HELVETICA, 14); // ..in regular font
|
||||
sprintf(s, "%d", values[R][C]);
|
||||
fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
|
||||
}
|
||||
fl_color(FL_BLACK);
|
||||
if (C == cols()-1 || R == rows()-1) { // Last row or col? Show total
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // ..in bold font
|
||||
if (C == cols()-1 && R == rows()-1) { // Last row+col? Total all cells
|
||||
sprintf(s, "%d", sum_all());
|
||||
} else if (C == cols()-1) { // Row subtotal
|
||||
sprintf(s, "%d", sum_cols(R));
|
||||
} else if (R == rows()-1) { // Col subtotal
|
||||
sprintf(s, "%d", sum_rows(C));
|
||||
}
|
||||
fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
|
||||
} else { // Not last row or col? Show cell contents
|
||||
fl_font(FL_HELVETICA, 14); // ..in regular font
|
||||
sprintf(s, "%d", values[R][C]);
|
||||
fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
|
||||
}
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
}
|
||||
|
||||
case CONTEXT_RC_RESIZE: { // table resizing rows or columns
|
||||
case CONTEXT_RC_RESIZE: { // table resizing rows or columns
|
||||
if (!input->visible()) return;
|
||||
find_cell(CONTEXT_TABLE, row_edit, col_edit, X, Y, W, H);
|
||||
if (X==input->x() && Y==input->y() && W==input->w() && H==input->h()) {
|
||||
return; // no change? ignore
|
||||
return; // no change? ignore
|
||||
}
|
||||
input->resize(X,Y,W,H);
|
||||
return;
|
||||
@@ -235,37 +233,37 @@ void Spreadsheet::draw_cell(TableContext context, int R,int C, int X,int Y,int W
|
||||
void Spreadsheet::event_callback2() {
|
||||
int R = callback_row();
|
||||
int C = callback_col();
|
||||
TableContext context = callback_context();
|
||||
TableContext context = callback_context();
|
||||
|
||||
switch ( context ) {
|
||||
case CONTEXT_CELL: { // A table event occurred on a cell
|
||||
switch (Fl::event()) { // see what FLTK event caused it
|
||||
case FL_PUSH: // mouse click?
|
||||
done_editing(); // finish editing previous
|
||||
if (R != rows()-1 && C != cols()-1 ) // only edit cells not in total's columns
|
||||
start_editing(R,C); // start new edit
|
||||
return;
|
||||
case CONTEXT_CELL: { // A table event occurred on a cell
|
||||
switch (Fl::event()) { // see what FLTK event caused it
|
||||
case FL_PUSH: // mouse click?
|
||||
done_editing(); // finish editing previous
|
||||
if (R != rows()-1 && C != cols()-1 ) // only edit cells not in total's columns
|
||||
start_editing(R,C); // start new edit
|
||||
return;
|
||||
|
||||
case FL_KEYBOARD: // key press in table?
|
||||
if ( Fl::event_key() == FL_Escape ) exit(0); // ESC closes app
|
||||
if (C == cols()-1 || R == rows()-1) return; // no editing of totals column
|
||||
done_editing(); // finish any previous editing
|
||||
set_selection(R, C, R, C); // select the current cell
|
||||
start_editing(R,C); // start new edit
|
||||
if (Fl::event() == FL_KEYBOARD && Fl::e_text[0] != '\r') {
|
||||
input->handle(Fl::event()); // pass keypress to input widget
|
||||
}
|
||||
return;
|
||||
case FL_KEYBOARD: // key press in table?
|
||||
if ( Fl::event_key() == FL_Escape ) exit(0); // ESC closes app
|
||||
if (C == cols()-1 || R == rows()-1) return; // no editing of totals column
|
||||
done_editing(); // finish any previous editing
|
||||
set_selection(R, C, R, C); // select the current cell
|
||||
start_editing(R,C); // start new edit
|
||||
if (Fl::event() == FL_KEYBOARD && Fl::e_text[0] != '\r') {
|
||||
input->handle(Fl::event()); // pass keypress to input widget
|
||||
}
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
case CONTEXT_TABLE: // A table event occurred on dead zone in table
|
||||
case CONTEXT_ROW_HEADER: // A table event occurred on row/column header
|
||||
case CONTEXT_TABLE: // A table event occurred on dead zone in table
|
||||
case CONTEXT_ROW_HEADER: // A table event occurred on row/column header
|
||||
case CONTEXT_COL_HEADER:
|
||||
done_editing(); // done editing, hide
|
||||
done_editing(); // done editing, hide
|
||||
return;
|
||||
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@@ -290,7 +288,7 @@ void setrows_cb(Fl_Widget* w, void* v) {
|
||||
}
|
||||
|
||||
int main() {
|
||||
Fl::option(Fl::OPTION_ARROW_FOCUS, 1); // we want arrow keys to navigate table's widgets
|
||||
Fl::option(Fl::OPTION_ARROW_FOCUS, 1); // we want arrow keys to navigate table's widgets
|
||||
Fl_Double_Window *win = new Fl_Double_Window(922, 382, "Fl_Table Spreadsheet with Keyboard Navigation");
|
||||
Spreadsheet* table = new Spreadsheet(20, 20, win->w()-80, win->h()-80);
|
||||
// Table rows
|
||||
@@ -305,7 +303,7 @@ int main() {
|
||||
table->col_resize(1);
|
||||
table->cols(11);
|
||||
table->col_width_all(70);
|
||||
table->set_selection(0,0,0,0); // select top/left cell
|
||||
table->set_selection(0,0,0,0); // select top/left cell
|
||||
|
||||
// Add children to window
|
||||
win->begin();
|
||||
@@ -336,7 +334,3 @@ int main() {
|
||||
|
||||
return Fl::run();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Simple example of an interactive spreadsheet using Fl_Table.
|
||||
// Uses Mr. Satan's technique of instancing an Fl_Input around.
|
||||
// Simple example of an interactive spreadsheet using Fl_Table.
|
||||
// Uses Mr. Satan's technique of instancing an Fl_Input around.
|
||||
//
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
//
|
||||
@@ -10,11 +8,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -28,17 +26,17 @@ const int MAX_COLS = 10;
|
||||
const int MAX_ROWS = 10;
|
||||
|
||||
class Spreadsheet : public Fl_Table {
|
||||
Fl_Int_Input *input; // single instance of Fl_Int_Input widget
|
||||
int values[MAX_ROWS][MAX_COLS]; // array of data for cells
|
||||
int row_edit, col_edit; // row/col being modified
|
||||
Fl_Int_Input *input; // single instance of Fl_Int_Input widget
|
||||
int values[MAX_ROWS][MAX_COLS]; // array of data for cells
|
||||
int row_edit, col_edit; // row/col being modified
|
||||
|
||||
protected:
|
||||
void draw_cell(TableContext context,int=0,int=0,int=0,int=0,int=0,int=0);
|
||||
void event_callback2(); // table's event callback (instance)
|
||||
static void event_callback(Fl_Widget*,void *v) { // table's event callback (static)
|
||||
void event_callback2(); // table's event callback (instance)
|
||||
static void event_callback(Fl_Widget*,void *v) { // table's event callback (static)
|
||||
((Spreadsheet*)v)->event_callback2();
|
||||
}
|
||||
static void input_cb(Fl_Widget*,void* v) { // input widget's callback
|
||||
static void input_cb(Fl_Widget*,void* v) { // input widget's callback
|
||||
((Spreadsheet*)v)->set_value_hide();
|
||||
}
|
||||
|
||||
@@ -50,12 +48,12 @@ public:
|
||||
input = new Fl_Int_Input(W/2,H/2,0,0);
|
||||
input->hide();
|
||||
input->callback(input_cb, (void*)this);
|
||||
input->when(FL_WHEN_ENTER_KEY_ALWAYS); // callback triggered when user hits Enter
|
||||
input->when(FL_WHEN_ENTER_KEY_ALWAYS); // callback triggered when user hits Enter
|
||||
input->maximum_size(5);
|
||||
input->color(FL_YELLOW);
|
||||
for (int c = 0; c < MAX_COLS; c++)
|
||||
for (int r = 0; r < MAX_ROWS; r++)
|
||||
values[r][c] = c + (r*MAX_COLS); // initialize cells
|
||||
values[r][c] = c + (r*MAX_COLS); // initialize cells
|
||||
end();
|
||||
row_edit = col_edit = 0;
|
||||
set_selection(0,0,0,0);
|
||||
@@ -66,129 +64,129 @@ public:
|
||||
void set_value_hide() {
|
||||
values[row_edit][col_edit] = atoi(input->value());
|
||||
input->hide();
|
||||
window()->cursor(FL_CURSOR_DEFAULT); // XXX: if we don't do this, cursor can disappear!
|
||||
window()->cursor(FL_CURSOR_DEFAULT); // XXX: if we don't do this, cursor can disappear!
|
||||
}
|
||||
// Start editing a new cell: move the Fl_Int_Input widget to specified row/column
|
||||
// Preload the widget with the cell's current value,
|
||||
// and make the widget 'appear' at the cell's location.
|
||||
//
|
||||
void start_editing(int R, int C) {
|
||||
row_edit = R; // Now editing this row/col
|
||||
row_edit = R; // Now editing this row/col
|
||||
col_edit = C;
|
||||
set_selection(R,C,R,C); // Clear any previous multicell selection
|
||||
set_selection(R,C,R,C); // Clear any previous multicell selection
|
||||
int X,Y,W,H;
|
||||
find_cell(CONTEXT_CELL, R,C, X,Y,W,H); // Find X/Y/W/H of cell
|
||||
input->resize(X,Y,W,H); // Move Fl_Input widget there
|
||||
char s[30]; sprintf(s, "%d", values[R][C]); // Load input widget with cell's current value
|
||||
find_cell(CONTEXT_CELL, R,C, X,Y,W,H); // Find X/Y/W/H of cell
|
||||
input->resize(X,Y,W,H); // Move Fl_Input widget there
|
||||
char s[30]; sprintf(s, "%d", values[R][C]); // Load input widget with cell's current value
|
||||
input->value(s);
|
||||
input->position(0,strlen(s)); // Select entire input field
|
||||
input->show(); // Show the input widget, now that we've positioned it
|
||||
input->position(0,strlen(s)); // Select entire input field
|
||||
input->show(); // Show the input widget, now that we've positioned it
|
||||
input->take_focus();
|
||||
}
|
||||
// Tell the input widget it's done editing, and to 'hide'
|
||||
void done_editing() {
|
||||
if (input->visible()) { // input widget visible, ie. edit in progress?
|
||||
set_value_hide(); // Transfer its current contents to cell and hide
|
||||
if (input->visible()) { // input widget visible, ie. edit in progress?
|
||||
set_value_hide(); // Transfer its current contents to cell and hide
|
||||
}
|
||||
}
|
||||
// Return the sum of all rows in this column
|
||||
int sum_rows(int C) {
|
||||
int sum = 0;
|
||||
for (int r=0; r<rows()-1; ++r) // -1: don't include cell data in 'totals' column
|
||||
for (int r=0; r<rows()-1; ++r) // -1: don't include cell data in 'totals' column
|
||||
sum += values[r][C];
|
||||
return(sum);
|
||||
}
|
||||
// Return the sum of all cols in this row
|
||||
int sum_cols(int R) {
|
||||
int sum = 0;
|
||||
for (int c=0; c<cols()-1; ++c) // -1: don't include cell data in 'totals' column
|
||||
for (int c=0; c<cols()-1; ++c) // -1: don't include cell data in 'totals' column
|
||||
sum += values[R][c];
|
||||
return(sum);
|
||||
}
|
||||
// Return the sum of all cells in table
|
||||
int sum_all() {
|
||||
int sum = 0;
|
||||
for (int c=0; c<cols()-1; ++c) // -1: don't include cell data in 'totals' column
|
||||
for (int r=0; r<rows()-1; ++r) // -1: ""
|
||||
sum += values[r][c];
|
||||
for (int c=0; c<cols()-1; ++c) // -1: don't include cell data in 'totals' column
|
||||
for (int r=0; r<rows()-1; ++r) // -1: ""
|
||||
sum += values[r][c];
|
||||
return(sum);
|
||||
}
|
||||
};
|
||||
|
||||
// Handle drawing all cells in table
|
||||
void Spreadsheet::draw_cell(TableContext context, int R,int C, int X,int Y,int W,int H) {
|
||||
static char s[30];
|
||||
static char s[30];
|
||||
switch ( context ) {
|
||||
case CONTEXT_STARTPAGE: // table about to redraw
|
||||
case CONTEXT_STARTPAGE: // table about to redraw
|
||||
break;
|
||||
|
||||
case CONTEXT_COL_HEADER: // table wants us to draw a column heading (C is column)
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // set font for heading to bold
|
||||
fl_push_clip(X,Y,W,H); // clip region for text
|
||||
case CONTEXT_COL_HEADER: // table wants us to draw a column heading (C is column)
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // set font for heading to bold
|
||||
fl_push_clip(X,Y,W,H); // clip region for text
|
||||
{
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, col_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
if (C == cols()-1) { // Last column? show 'TOTAL'
|
||||
fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
|
||||
} else { // Not last column? show column letter
|
||||
sprintf(s, "%c", 'A' + C);
|
||||
fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
|
||||
}
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, col_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
if (C == cols()-1) { // Last column? show 'TOTAL'
|
||||
fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
|
||||
} else { // Not last column? show column letter
|
||||
sprintf(s, "%c", 'A' + C);
|
||||
fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
|
||||
}
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
|
||||
case CONTEXT_ROW_HEADER: // table wants us to draw a row heading (R is row)
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // set font for row heading to bold
|
||||
case CONTEXT_ROW_HEADER: // table wants us to draw a row heading (R is row)
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // set font for row heading to bold
|
||||
fl_push_clip(X,Y,W,H);
|
||||
{
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, row_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
if (R == rows()-1) { // Last row? Show 'Total'
|
||||
fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
|
||||
} else { // Not last row? show row#
|
||||
sprintf(s, "%d", R+1);
|
||||
fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
|
||||
}
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, row_header_color());
|
||||
fl_color(FL_BLACK);
|
||||
if (R == rows()-1) { // Last row? Show 'Total'
|
||||
fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
|
||||
} else { // Not last row? show row#
|
||||
sprintf(s, "%d", R+1);
|
||||
fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
|
||||
}
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
|
||||
case CONTEXT_CELL: { // table wants us to draw a cell
|
||||
case CONTEXT_CELL: { // table wants us to draw a cell
|
||||
if (R == row_edit && C == col_edit && input->visible()) {
|
||||
return; // dont draw for cell with input widget over it
|
||||
return; // dont draw for cell with input widget over it
|
||||
}
|
||||
// Background
|
||||
if ( C < cols()-1 && R < rows()-1 ) {
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, is_selected(R,C) ? FL_YELLOW : FL_WHITE);
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, is_selected(R,C) ? FL_YELLOW : FL_WHITE);
|
||||
} else {
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, is_selected(R,C) ? 0xddffdd00 : 0xbbddbb00); // money green
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, is_selected(R,C) ? 0xddffdd00 : 0xbbddbb00); // money green
|
||||
}
|
||||
// Text
|
||||
fl_push_clip(X+3, Y+3, W-6, H-6);
|
||||
{
|
||||
fl_color(FL_BLACK);
|
||||
if (C == cols()-1 || R == rows()-1) { // Last row or col? Show total
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // ..in bold font
|
||||
if (C == cols()-1 && R == rows()-1) { // Last row+col? Total all cells
|
||||
sprintf(s, "%d", sum_all());
|
||||
} else if (C == cols()-1) { // Row subtotal
|
||||
sprintf(s, "%d", sum_cols(R));
|
||||
} else if (R == rows()-1) { // Col subtotal
|
||||
sprintf(s, "%d", sum_rows(C));
|
||||
}
|
||||
fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
|
||||
} else { // Not last row or col? Show cell contents
|
||||
fl_font(FL_HELVETICA, 14); // ..in regular font
|
||||
sprintf(s, "%d", values[R][C]);
|
||||
fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
|
||||
}
|
||||
fl_color(FL_BLACK);
|
||||
if (C == cols()-1 || R == rows()-1) { // Last row or col? Show total
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14); // ..in bold font
|
||||
if (C == cols()-1 && R == rows()-1) { // Last row+col? Total all cells
|
||||
sprintf(s, "%d", sum_all());
|
||||
} else if (C == cols()-1) { // Row subtotal
|
||||
sprintf(s, "%d", sum_cols(R));
|
||||
} else if (R == rows()-1) { // Col subtotal
|
||||
sprintf(s, "%d", sum_rows(C));
|
||||
}
|
||||
fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
|
||||
} else { // Not last row or col? Show cell contents
|
||||
fl_font(FL_HELVETICA, 14); // ..in regular font
|
||||
sprintf(s, "%d", values[R][C]);
|
||||
fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
|
||||
}
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
}
|
||||
|
||||
case CONTEXT_RC_RESIZE: // table resizing rows or columns
|
||||
case CONTEXT_RC_RESIZE: // table resizing rows or columns
|
||||
if ( input->visible() ) {
|
||||
find_cell(CONTEXT_TABLE, row_edit, col_edit, X, Y, W, H);
|
||||
input->resize(X,Y,W,H);
|
||||
@@ -205,43 +203,43 @@ void Spreadsheet::draw_cell(TableContext context, int R,int C, int X,int Y,int W
|
||||
void Spreadsheet::event_callback2() {
|
||||
int R = callback_row();
|
||||
int C = callback_col();
|
||||
TableContext context = callback_context();
|
||||
TableContext context = callback_context();
|
||||
|
||||
switch ( context ) {
|
||||
case CONTEXT_CELL: { // A table event occurred on a cell
|
||||
switch (Fl::event()) { // see what FLTK event caused it
|
||||
case FL_PUSH: // mouse click?
|
||||
done_editing(); // finish editing previous
|
||||
if (R != rows()-1 && C != cols()-1 ) // only edit cells not in total's columns
|
||||
start_editing(R,C); // start new edit
|
||||
return;
|
||||
case CONTEXT_CELL: { // A table event occurred on a cell
|
||||
switch (Fl::event()) { // see what FLTK event caused it
|
||||
case FL_PUSH: // mouse click?
|
||||
done_editing(); // finish editing previous
|
||||
if (R != rows()-1 && C != cols()-1 ) // only edit cells not in total's columns
|
||||
start_editing(R,C); // start new edit
|
||||
return;
|
||||
|
||||
case FL_KEYBOARD: // key press in table?
|
||||
if ( Fl::event_key() == FL_Escape ) exit(0); // ESC closes app
|
||||
done_editing(); // finish any previous editing
|
||||
if (C==cols()-1 || R==rows()-1) return; // no editing of totals column
|
||||
switch ( Fl::e_text[0] ) {
|
||||
case '0': case '1': case '2': case '3': // any of these should start editing new cell
|
||||
case '4': case '5': case '6': case '7':
|
||||
case '8': case '9': case '+': case '-':
|
||||
start_editing(R,C); // start new edit
|
||||
input->handle(Fl::event()); // pass typed char to input
|
||||
break;
|
||||
case '\r': case '\n': // let enter key edit the cell
|
||||
start_editing(R,C); // start new edit
|
||||
break;
|
||||
}
|
||||
return;
|
||||
case FL_KEYBOARD: // key press in table?
|
||||
if ( Fl::event_key() == FL_Escape ) exit(0); // ESC closes app
|
||||
done_editing(); // finish any previous editing
|
||||
if (C==cols()-1 || R==rows()-1) return; // no editing of totals column
|
||||
switch ( Fl::e_text[0] ) {
|
||||
case '0': case '1': case '2': case '3': // any of these should start editing new cell
|
||||
case '4': case '5': case '6': case '7':
|
||||
case '8': case '9': case '+': case '-':
|
||||
start_editing(R,C); // start new edit
|
||||
input->handle(Fl::event()); // pass typed char to input
|
||||
break;
|
||||
case '\r': case '\n': // let enter key edit the cell
|
||||
start_editing(R,C); // start new edit
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
case CONTEXT_TABLE: // A table event occurred on dead zone in table
|
||||
case CONTEXT_ROW_HEADER: // A table event occurred on row/column header
|
||||
case CONTEXT_TABLE: // A table event occurred on dead zone in table
|
||||
case CONTEXT_ROW_HEADER: // A table event occurred on row/column header
|
||||
case CONTEXT_COL_HEADER:
|
||||
done_editing(); // done editing, hide
|
||||
done_editing(); // done editing, hide
|
||||
return;
|
||||
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@@ -250,20 +248,20 @@ void Spreadsheet::event_callback2() {
|
||||
int main() {
|
||||
Fl_Double_Window *win = new Fl_Double_Window(862, 322, "Fl_Table Spreadsheet");
|
||||
Spreadsheet *table = new Spreadsheet(10, 10, win->w()-20, win->h()-20);
|
||||
table->tab_cell_nav(1); // enable tab navigation of table cells (instead of fltk widgets)
|
||||
table->tab_cell_nav(1); // enable tab navigation of table cells (instead of fltk widgets)
|
||||
table->tooltip("Use keyboard to navigate cells:\n"
|
||||
"Arrow keys or Tab/Shift-Tab");
|
||||
// Table rows
|
||||
table->row_header(1);
|
||||
table->row_header_width(70);
|
||||
table->row_resize(1);
|
||||
table->rows(MAX_ROWS+1); // +1: leaves room for 'total row'
|
||||
table->rows(MAX_ROWS+1); // +1: leaves room for 'total row'
|
||||
table->row_height_all(25);
|
||||
// Table cols
|
||||
table->col_header(1);
|
||||
table->col_header_height(25);
|
||||
table->col_resize(1);
|
||||
table->cols(MAX_COLS+1); // +1: leaves room for 'total column'
|
||||
table->cols(MAX_COLS+1); // +1: leaves room for 'total column'
|
||||
table->col_width_all(70);
|
||||
// Show window
|
||||
win->end();
|
||||
@@ -271,7 +269,3 @@ int main() {
|
||||
win->show();
|
||||
return Fl::run();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Example of Fl_Table with keyboard selection navigation - Greg Ercolano 04/14/2012
|
||||
//
|
||||
// Display a 10x10 multiplication table, and allow the user to
|
||||
@@ -18,11 +16,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/fl_draw.H>
|
||||
@@ -36,147 +34,143 @@
|
||||
|
||||
// GLOBALS
|
||||
class MyTable;
|
||||
Fl_Toggle_Button *G_rowselect = 0; // toggle to enable row selection
|
||||
MyTable *G_table = 0; // table widget
|
||||
Fl_Output *G_sum = 0; // displays sum of user's selection
|
||||
Fl_Toggle_Button *G_rowselect = 0; // toggle to enable row selection
|
||||
MyTable *G_table = 0; // table widget
|
||||
Fl_Output *G_sum = 0; // displays sum of user's selection
|
||||
|
||||
class MyTable : public Fl_Table_Row {
|
||||
protected:
|
||||
// Handle drawing all cells in table
|
||||
void draw_cell(TableContext context, int R=0,int C=0, int X=0,int Y=0,int W=0,int H=0) {
|
||||
static char s[30];
|
||||
switch ( context ) {
|
||||
case CONTEXT_COL_HEADER:
|
||||
case CONTEXT_ROW_HEADER:
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14);
|
||||
fl_push_clip(X, Y, W, H);
|
||||
{
|
||||
Fl_Color c = (context==CONTEXT_COL_HEADER) ? col_header_color() : row_header_color();
|
||||
fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, c);
|
||||
fl_color(FL_BLACK);
|
||||
// Draw text for headers
|
||||
sprintf(s, "%d", (context == CONTEXT_COL_HEADER) ? C : R);
|
||||
fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
case CONTEXT_CELL: {
|
||||
// Keyboard nav and mouse selection highlighting
|
||||
int selected = G_rowselect->value() ? row_selected(R) : is_selected(R,C);
|
||||
fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, selected ? FL_YELLOW : FL_WHITE);
|
||||
// Draw text for the cell
|
||||
fl_push_clip(X+3, Y+3, W-6, H-6);
|
||||
{
|
||||
fl_font(FL_HELVETICA, 14);
|
||||
fl_color(FL_BLACK);
|
||||
sprintf(s, "%d", R*C); // factor row + col for data cells
|
||||
fl_draw(s, X+3, Y+3, W-6, H-6, FL_ALIGN_RIGHT);
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
}
|
||||
default:
|
||||
return;
|
||||
}
|
||||
static char s[30];
|
||||
switch ( context ) {
|
||||
case CONTEXT_COL_HEADER:
|
||||
case CONTEXT_ROW_HEADER:
|
||||
fl_font(FL_HELVETICA | FL_BOLD, 14);
|
||||
fl_push_clip(X, Y, W, H);
|
||||
{
|
||||
Fl_Color c = (context==CONTEXT_COL_HEADER) ? col_header_color() : row_header_color();
|
||||
fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, c);
|
||||
fl_color(FL_BLACK);
|
||||
// Draw text for headers
|
||||
sprintf(s, "%d", (context == CONTEXT_COL_HEADER) ? C : R);
|
||||
fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
case CONTEXT_CELL: {
|
||||
// Keyboard nav and mouse selection highlighting
|
||||
int selected = G_rowselect->value() ? row_selected(R) : is_selected(R,C);
|
||||
fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, selected ? FL_YELLOW : FL_WHITE);
|
||||
// Draw text for the cell
|
||||
fl_push_clip(X+3, Y+3, W-6, H-6);
|
||||
{
|
||||
fl_font(FL_HELVETICA, 14);
|
||||
fl_color(FL_BLACK);
|
||||
sprintf(s, "%d", R*C); // factor row + col for data cells
|
||||
fl_draw(s, X+3, Y+3, W-6, H-6, FL_ALIGN_RIGHT);
|
||||
}
|
||||
fl_pop_clip();
|
||||
return;
|
||||
}
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
public:
|
||||
// CTOR
|
||||
MyTable(int x, int y, int w, int h, const char *l=0) : Fl_Table_Row(x,y,w,h,l) {
|
||||
// Row init
|
||||
row_header(1);
|
||||
row_header_width(70);
|
||||
row_resize(1);
|
||||
rows(11);
|
||||
row_height_all(20);
|
||||
// Col init
|
||||
col_header(1);
|
||||
col_header_height(20);
|
||||
col_resize(1);
|
||||
cols(11);
|
||||
col_width_all(70);
|
||||
end(); // Fl_Table derives from Fl_Group, so end() it
|
||||
// Row init
|
||||
row_header(1);
|
||||
row_header_width(70);
|
||||
row_resize(1);
|
||||
rows(11);
|
||||
row_height_all(20);
|
||||
// Col init
|
||||
col_header(1);
|
||||
col_header_height(20);
|
||||
col_resize(1);
|
||||
cols(11);
|
||||
col_width_all(70);
|
||||
end(); // Fl_Table derives from Fl_Group, so end() it
|
||||
}
|
||||
~MyTable() { }
|
||||
// Update the displayed sum value
|
||||
int GetSelectionSum() {
|
||||
int sum = -1;
|
||||
for ( int R=0; R<rows(); R++ ) {
|
||||
for ( int C=0; C<cols(); C++ ) {
|
||||
if ( G_rowselect->value() ? row_selected(R) : is_selected(R,C) ) {
|
||||
if ( sum == -1 ) sum = 0;
|
||||
sum += R*C;
|
||||
}
|
||||
}
|
||||
}
|
||||
return(sum);
|
||||
for ( int C=0; C<cols(); C++ ) {
|
||||
if ( G_rowselect->value() ? row_selected(R) : is_selected(R,C) ) {
|
||||
if ( sum == -1 ) sum = 0;
|
||||
sum += R*C;
|
||||
}
|
||||
}
|
||||
}
|
||||
return(sum);
|
||||
}
|
||||
// Update the "Selection sum:" display
|
||||
void UpdateSum() {
|
||||
static char s[80];
|
||||
int sum = GetSelectionSum();
|
||||
if ( sum == -1 ) { sprintf(s, "(nothing selected)"); G_sum->color(48); }
|
||||
else { sprintf(s, "%d", sum); G_sum->color(FL_WHITE); }
|
||||
// Update only if different (lets one copy/paste from sum)
|
||||
if ( strcmp(s,G_sum->value()))
|
||||
{ G_sum->value(s); G_sum->redraw(); }
|
||||
static char s[80];
|
||||
int sum = GetSelectionSum();
|
||||
if ( sum == -1 ) { sprintf(s, "(nothing selected)"); G_sum->color(48); }
|
||||
else { sprintf(s, "%d", sum); G_sum->color(FL_WHITE); }
|
||||
// Update only if different (lets one copy/paste from sum)
|
||||
if ( strcmp(s,G_sum->value()))
|
||||
{ G_sum->value(s); G_sum->redraw(); }
|
||||
}
|
||||
// Keyboard and mouse events
|
||||
int handle(int e) {
|
||||
int ret = Fl_Table_Row::handle(e);
|
||||
if ( e == FL_KEYBOARD && Fl::event_key() == FL_Escape ) exit(0);
|
||||
if ( e == FL_KEYBOARD && Fl::event_key() == FL_Escape ) exit(0);
|
||||
switch (e) {
|
||||
case FL_PUSH:
|
||||
case FL_RELEASE:
|
||||
case FL_KEYUP:
|
||||
case FL_KEYDOWN:
|
||||
case FL_DRAG: {
|
||||
//ret = 1; // *don't* indicate we 'handled' these, just update ('handling' prevents e.g. tab nav)
|
||||
UpdateSum();
|
||||
redraw();
|
||||
break;
|
||||
}
|
||||
case FL_FOCUS: // tells FLTK we're interested in keyboard events
|
||||
case FL_UNFOCUS:
|
||||
ret = 1;
|
||||
break;
|
||||
}
|
||||
return(ret);
|
||||
case FL_PUSH:
|
||||
case FL_RELEASE:
|
||||
case FL_KEYUP:
|
||||
case FL_KEYDOWN:
|
||||
case FL_DRAG: {
|
||||
//ret = 1; // *don't* indicate we 'handled' these, just update ('handling' prevents e.g. tab nav)
|
||||
UpdateSum();
|
||||
redraw();
|
||||
break;
|
||||
}
|
||||
case FL_FOCUS: // tells FLTK we're interested in keyboard events
|
||||
case FL_UNFOCUS:
|
||||
ret = 1;
|
||||
break;
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
};
|
||||
|
||||
// User changed the 'row select' toggle button
|
||||
void RowSelect_CB(Fl_Widget *w, void*) {
|
||||
w->window()->redraw(); // redraw with changes applied
|
||||
w->window()->redraw(); // redraw with changes applied
|
||||
G_table->UpdateSum();
|
||||
}
|
||||
int main() {
|
||||
Fl::option(Fl::OPTION_ARROW_FOCUS, 0); // disable arrow focus nav (we want arrows to control cells)
|
||||
Fl::option(Fl::OPTION_ARROW_FOCUS, 0); // disable arrow focus nav (we want arrows to control cells)
|
||||
Fl_Double_Window win(862, 312, "table-with-keynav");
|
||||
win.begin();
|
||||
// Create table
|
||||
G_table = new MyTable(10, 30, win.w()-20, win.h()-70, "Times Table");
|
||||
G_table->tooltip("Use mouse or Shift + Arrow Keys to make selections.\n"
|
||||
"Sum of selected values is shown.");
|
||||
// Row select toggle button
|
||||
G_rowselect = new Fl_Toggle_Button(140,10,12,12,"Row selection");
|
||||
G_rowselect->align(FL_ALIGN_LEFT);
|
||||
G_rowselect->value(0);
|
||||
G_rowselect->selection_color(FL_YELLOW);
|
||||
G_rowselect->callback(RowSelect_CB);
|
||||
G_rowselect->tooltip("Click to toggle row vs. row/col selection");
|
||||
// Selection sum display
|
||||
win.end();
|
||||
win.begin();
|
||||
G_sum = new Fl_Output(140,G_table->y()+G_table->h()+10,160,25,"Selection Sum:");
|
||||
G_sum->value("(nothing selected)");
|
||||
G_sum->color(48);
|
||||
G_sum->tooltip("This field shows the sum of the selected cells in the table");
|
||||
// Create table
|
||||
G_table = new MyTable(10, 30, win.w()-20, win.h()-70, "Times Table");
|
||||
G_table->tooltip("Use mouse or Shift + Arrow Keys to make selections.\n"
|
||||
"Sum of selected values is shown.");
|
||||
// Row select toggle button
|
||||
G_rowselect = new Fl_Toggle_Button(140,10,12,12,"Row selection");
|
||||
G_rowselect->align(FL_ALIGN_LEFT);
|
||||
G_rowselect->value(0);
|
||||
G_rowselect->selection_color(FL_YELLOW);
|
||||
G_rowselect->callback(RowSelect_CB);
|
||||
G_rowselect->tooltip("Click to toggle row vs. row/col selection");
|
||||
// Selection sum display
|
||||
win.end();
|
||||
win.begin();
|
||||
G_sum = new Fl_Output(140,G_table->y()+G_table->h()+10,160,25,"Selection Sum:");
|
||||
G_sum->value("(nothing selected)");
|
||||
G_sum->color(48);
|
||||
G_sum->tooltip("This field shows the sum of the selected cells in the table");
|
||||
win.end();
|
||||
win.resizable(G_table);
|
||||
win.show();
|
||||
win.show();
|
||||
return Fl::run();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
//
|
||||
// Demonstrate resizing Fl_Table_Row right column to fit window to avoid appearance of horiz scrollbar
|
||||
//
|
||||
@@ -18,11 +16,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <FL/Fl.H>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Simple Fl_Tabs widget example.
|
||||
// Originally from erco's cheat sheet 06/05/2010, permission by author.
|
||||
// Simple Fl_Tabs widget example.
|
||||
// Originally from erco's cheat sheet 06/05/2010, permission by author.
|
||||
//
|
||||
// Copyright 2010 Greg Ercolano.
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
@@ -11,11 +9,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Window.H>
|
||||
@@ -47,11 +45,11 @@ int main(int argc, char *argv[]) {
|
||||
//
|
||||
Fl_Group *aaa = new Fl_Group(10,35,500-20,200-45,"Aaa");
|
||||
{
|
||||
// Put some different buttons into the group, which will be shown
|
||||
// when the tab is selected.
|
||||
Fl_Button *b1 = new Fl_Button(50, 60,90,25,"Button A1"); b1->color(88+1);
|
||||
Fl_Button *b2 = new Fl_Button(50, 90,90,25,"Button A2"); b2->color(88+2);
|
||||
Fl_Button *b3 = new Fl_Button(50,120,90,25,"Button A3"); b3->color(88+3);
|
||||
// Put some different buttons into the group, which will be shown
|
||||
// when the tab is selected.
|
||||
Fl_Button *b1 = new Fl_Button(50, 60,90,25,"Button A1"); b1->color(88+1);
|
||||
Fl_Button *b2 = new Fl_Button(50, 90,90,25,"Button A2"); b2->color(88+2);
|
||||
Fl_Button *b3 = new Fl_Button(50,120,90,25,"Button A3"); b3->color(88+3);
|
||||
}
|
||||
aaa->end();
|
||||
|
||||
@@ -60,14 +58,14 @@ int main(int argc, char *argv[]) {
|
||||
//
|
||||
Fl_Group *bbb = new Fl_Group(10,35,500-10,200-35,"Bbb");
|
||||
{
|
||||
// Put some different buttons into the group, which will be shown
|
||||
// when the tab is selected.
|
||||
Fl_Button *b1 = new Fl_Button( 50,60,90,25,"Button B1"); b1->color(88+1);
|
||||
Fl_Button *b2 = new Fl_Button(150,60,90,25,"Button B2"); b2->color(88+3);
|
||||
Fl_Button *b3 = new Fl_Button(250,60,90,25,"Button B3"); b3->color(88+5);
|
||||
Fl_Button *b4 = new Fl_Button( 50,90,90,25,"Button B4"); b4->color(88+2);
|
||||
Fl_Button *b5 = new Fl_Button(150,90,90,25,"Button B5"); b5->color(88+4);
|
||||
Fl_Button *b6 = new Fl_Button(250,90,90,25,"Button B6"); b6->color(88+6);
|
||||
// Put some different buttons into the group, which will be shown
|
||||
// when the tab is selected.
|
||||
Fl_Button *b1 = new Fl_Button( 50,60,90,25,"Button B1"); b1->color(88+1);
|
||||
Fl_Button *b2 = new Fl_Button(150,60,90,25,"Button B2"); b2->color(88+3);
|
||||
Fl_Button *b3 = new Fl_Button(250,60,90,25,"Button B3"); b3->color(88+5);
|
||||
Fl_Button *b4 = new Fl_Button( 50,90,90,25,"Button B4"); b4->color(88+2);
|
||||
Fl_Button *b5 = new Fl_Button(150,90,90,25,"Button B5"); b5->color(88+4);
|
||||
Fl_Button *b6 = new Fl_Button(250,90,90,25,"Button B6"); b6->color(88+6);
|
||||
}
|
||||
bbb->end();
|
||||
}
|
||||
@@ -77,7 +75,3 @@ int main(int argc, char *argv[]) {
|
||||
win->show(argc, argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
//
|
||||
// "$Id$"
|
||||
// How to use Fl_Text_Display with colors. -erco 11/09/2010
|
||||
// Originally from erco's cheat sheet, permission by author.
|
||||
//
|
||||
// How to use Fl_Text_Display with colors. -erco 11/09/2010
|
||||
// Originally from erco's cheat sheet, permission by author.
|
||||
// Shows how to use the two Fl_Text_Buffer's needed to manage
|
||||
// the text and style info separately.
|
||||
//
|
||||
// Shows how to use the two Fl_Text_Buffer's needed to manage
|
||||
// the text and style info separately.
|
||||
//
|
||||
// For an example of a color text *editor*, see the 'editor'
|
||||
// example in the test directory.
|
||||
// For an example of a color text *editor*, see the 'editor'
|
||||
// example in the test directory.
|
||||
//
|
||||
// Copyright 2010 Greg Ercolano.
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
@@ -17,11 +15,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Window.H>
|
||||
@@ -38,22 +36,18 @@ int main() {
|
||||
};
|
||||
Fl_Window *win = new Fl_Window(640, 480, "Simple Text Display With Colors");
|
||||
Fl_Text_Display *disp = new Fl_Text_Display(20, 20, 640-40, 480-40);
|
||||
Fl_Text_Buffer *tbuff = new Fl_Text_Buffer(); // text buffer
|
||||
Fl_Text_Buffer *sbuff = new Fl_Text_Buffer(); // style buffer
|
||||
Fl_Text_Buffer *tbuff = new Fl_Text_Buffer(); // text buffer
|
||||
Fl_Text_Buffer *sbuff = new Fl_Text_Buffer(); // style buffer
|
||||
disp->buffer(tbuff);
|
||||
int stable_size = sizeof(stable)/sizeof(stable[0]); // # entries in style table (4)
|
||||
int stable_size = sizeof(stable)/sizeof(stable[0]); // # entries in style table (4)
|
||||
disp->highlight_data(sbuff, stable, stable_size, 'A', 0, 0);
|
||||
// Text
|
||||
tbuff->text("Red Line 1\nYel Line 2\nGrn Line 3\nBlu Line 4\n"
|
||||
"Red Line 5\nYel Line 6\nGrn Line 7\nBlu Line 8\n");
|
||||
"Red Line 5\nYel Line 6\nGrn Line 7\nBlu Line 8\n");
|
||||
// Style for text
|
||||
sbuff->text("AAAAAAAAAA\nBBBBBBBBBB\nCCCCCCCCCC\nDDDDDDDDDD\n"
|
||||
"AAAAAAAAAA\nBBBBBBBBBB\nCCCCCCCCCC\nDDDDDDDDDD\n");
|
||||
"AAAAAAAAAA\nBBBBBBBBBB\nCCCCCCCCCC\nDDDDDDDDDD\n");
|
||||
win->resizable(*disp);
|
||||
win->show();
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
//
|
||||
// "$Id$"
|
||||
// A simple example of Fl_Text_Editor
|
||||
//
|
||||
// A simple example of Fl_Text_Editor
|
||||
// Fl_Text_Editor is unlike other FLTK widgets in that
|
||||
// to work correctly, it must be assigned to an instance of an
|
||||
// Fl_Text_Buffer. The below shows using buffer() to connect
|
||||
// the two classes together.
|
||||
//
|
||||
// Fl_Text_Editor is unlike other FLTK widgets in that
|
||||
// to work correctly, it must be assigned to an instance of an
|
||||
// Fl_Text_Buffer. The below shows using buffer() to connect
|
||||
// the two classes together.
|
||||
//
|
||||
// Note that the example can also be used to demonstrate
|
||||
// Fl_Text_Display; just replace all instances of
|
||||
// Fl_Text_Editor with Fl_Text_Display and rebuild.
|
||||
// Note that the example can also be used to demonstrate
|
||||
// Fl_Text_Display; just replace all instances of
|
||||
// Fl_Text_Editor with Fl_Text_Display and rebuild.
|
||||
//
|
||||
// Copyright 2010 Greg Ercolano.
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
@@ -19,11 +17,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
|
||||
#include <FL/Fl.H>
|
||||
@@ -34,7 +32,7 @@ int main() {
|
||||
Fl_Double_Window *win = new Fl_Double_Window(640, 480, "Simple Fl_Text_Editor");
|
||||
Fl_Text_Buffer *buff = new Fl_Text_Buffer();
|
||||
Fl_Text_Editor *edit = new Fl_Text_Editor(20, 20, 640-40, 480-40);
|
||||
edit->buffer(buff); // attach the text buffer to our editor widget
|
||||
edit->buffer(buff); // attach the text buffer to our editor widget
|
||||
win->resizable(*edit);
|
||||
win->show();
|
||||
buff->text("line 0\nline 1\nline 2\n"
|
||||
@@ -47,7 +45,3 @@ int main() {
|
||||
"line 21\nline 22\nline 23\n");
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// How to use Fl_Text_Editor with dynamic colors. -erco 08/29/2018
|
||||
// Originally posted on fltk.general.
|
||||
//
|
||||
@@ -25,11 +23,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Window.H>
|
||||
@@ -132,7 +130,3 @@ int main() {
|
||||
win->show();
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Fl_Tree as a container of FLTK widgets. - erco 04/15/2012
|
||||
// Fl_Tree as a container of FLTK widgets. - erco 04/15/2012
|
||||
//
|
||||
// Copyright 2010,2012 Greg Ercolano.
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
@@ -10,11 +8,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <FL/Fl.H>
|
||||
@@ -32,18 +30,18 @@ class MyData : public Fl_Group {
|
||||
Fl_Input *fields[MAX_FIELDS];
|
||||
public:
|
||||
MyData(int X,int Y,int W,int H) : Fl_Group(X,Y,W,H) {
|
||||
static unsigned int colors[MAX_FIELDS] = {
|
||||
0xffffdd00, 0xffdddd00, 0xddffff00, 0xddffdd00, 0xddddff00
|
||||
};
|
||||
static unsigned int colors[MAX_FIELDS] = {
|
||||
0xffffdd00, 0xffdddd00, 0xddffff00, 0xddffdd00, 0xddddff00
|
||||
};
|
||||
for ( int t=0; t<MAX_FIELDS; t++ ) {
|
||||
fields[t] = new Fl_Input(X+t*FIELD_WIDTH,Y,FIELD_WIDTH,H);
|
||||
fields[t]->color(Fl_Color(colors[t]));
|
||||
}
|
||||
end();
|
||||
fields[t] = new Fl_Input(X+t*FIELD_WIDTH,Y,FIELD_WIDTH,H);
|
||||
fields[t]->color(Fl_Color(colors[t]));
|
||||
}
|
||||
end();
|
||||
}
|
||||
void SetData(int col, const char *val) {
|
||||
if ( col >= 0 && col < MAX_FIELDS )
|
||||
fields[col]->value(val);
|
||||
fields[col]->value(val);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -53,7 +51,7 @@ int main(int argc, char *argv[]) {
|
||||
{
|
||||
// Create the tree
|
||||
Fl_Tree *tree = new Fl_Tree(10, 10, win->w()-20, win->h()-20);
|
||||
tree->showroot(0); // don't show root of tree
|
||||
tree->showroot(0); // don't show root of tree
|
||||
// Add some regular text nodes
|
||||
tree->add("Foo/Bar/001");
|
||||
tree->add("Foo/Bar/002");
|
||||
@@ -63,20 +61,20 @@ int main(int argc, char *argv[]) {
|
||||
for ( int t=0; t<MAX_ROWS; t++ ) {
|
||||
// Add item to tree
|
||||
static char s[80];
|
||||
sprintf(s, "FLTK Widgets/%d", t);
|
||||
Fl_Tree_Item *item = tree->add(s);
|
||||
// Reconfigure item to be an FLTK widget (MyData)
|
||||
tree->begin();
|
||||
{
|
||||
MyData *data = new MyData(0,0,FIELD_WIDTH*MAX_FIELDS, FIELD_HEIGHT);
|
||||
item->widget(data);
|
||||
// Initialize widget data
|
||||
for ( int c=0; c<MAX_FIELDS; c++ ) {
|
||||
sprintf(s, "%d-%d", t,c);
|
||||
data->SetData(c,s);
|
||||
}
|
||||
}
|
||||
tree->end();
|
||||
sprintf(s, "FLTK Widgets/%d", t);
|
||||
Fl_Tree_Item *item = tree->add(s);
|
||||
// Reconfigure item to be an FLTK widget (MyData)
|
||||
tree->begin();
|
||||
{
|
||||
MyData *data = new MyData(0,0,FIELD_WIDTH*MAX_FIELDS, FIELD_HEIGHT);
|
||||
item->widget(data);
|
||||
// Initialize widget data
|
||||
for ( int c=0; c<MAX_FIELDS; c++ ) {
|
||||
sprintf(s, "%d-%d", t,c);
|
||||
data->SetData(c,s);
|
||||
}
|
||||
}
|
||||
tree->end();
|
||||
}
|
||||
}
|
||||
win->end();
|
||||
@@ -84,7 +82,3 @@ int main(int argc, char *argv[]) {
|
||||
win->show(argc, argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Demonstrate Fl_Tree custom item draw callback. - erco 11/09/2013
|
||||
// Demonstrate Fl_Tree custom item draw callback. - erco 11/09/2013
|
||||
//
|
||||
// Copyright 2013 Greg Ercolano.
|
||||
// Copyright 1998-2016 by Bill Spitzak and others.
|
||||
@@ -10,14 +8,14 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <time.h> /* ctime.. */
|
||||
#include <time.h> /* ctime.. */
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Double_Window.H>
|
||||
#include <FL/Fl_Tree.H>
|
||||
@@ -69,12 +67,12 @@ public:
|
||||
//
|
||||
// Our item's label dimensions
|
||||
int X = label_x(), Y = label_y(),
|
||||
W = label_w(), H = label_h();
|
||||
W = label_w(), H = label_h();
|
||||
// Render background
|
||||
if ( render ) {
|
||||
if ( is_selected() ) { // Selected? Use selectbox() style
|
||||
if ( is_selected() ) { // Selected? Use selectbox() style
|
||||
fl_draw_box(prefs().selectbox(),X,Y,W,H,bg);
|
||||
} else { // Not Selected? use plain filled rectangle
|
||||
} else { // Not Selected? use plain filled rectangle
|
||||
fl_color(bg); fl_rectf(X,Y,W,H);
|
||||
}
|
||||
}
|
||||
@@ -96,25 +94,25 @@ public:
|
||||
}
|
||||
X += 35;
|
||||
// Render the date and time, one over the other
|
||||
fl_font(labelfont(), 8); // small font
|
||||
fl_font(labelfont(), 8); // small font
|
||||
fl_color(fg);
|
||||
const struct tm *tm = GetTimeStruct();
|
||||
char s[80];
|
||||
sprintf(s, "Date: %02d/%02d/%02d", tm->tm_mon+1, tm->tm_mday, tm->tm_year % 100);
|
||||
lw=0, lh=0; fl_measure(s, lw, lh); // get box around text (including white space)
|
||||
lw=0, lh=0; fl_measure(s, lw, lh); // get box around text (including white space)
|
||||
if ( render ) fl_draw(s, X,Y+4,W,H, FL_ALIGN_LEFT|FL_ALIGN_TOP);
|
||||
sprintf(s, "Time: %02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
|
||||
if ( render ) fl_draw(s, X,Y+H/2,W,H/2, FL_ALIGN_LEFT|FL_ALIGN_TOP);
|
||||
int lw2=0, lh2=0; fl_measure(s, lw2, lh2);
|
||||
X += MAX(lw, lw2);
|
||||
return X; // return right most edge of what we've rendered
|
||||
return X; // return right most edge of what we've rendered
|
||||
}
|
||||
};
|
||||
|
||||
// TIMER TO HANDLE DYNAMIC CONTENT IN THE TREE
|
||||
void Timer_CB(void *data) {
|
||||
Fl_Tree *tree = (Fl_Tree*)data;
|
||||
tree->redraw(); // keeps time updated
|
||||
tree->redraw(); // keeps time updated
|
||||
Fl::repeat_timeout(0.2, Timer_CB, data);
|
||||
}
|
||||
|
||||
@@ -125,8 +123,8 @@ int main(int argc, char *argv[]) {
|
||||
{
|
||||
// Create the tree
|
||||
Fl_Tree *tree = new Fl_Tree(0, 0, win->w(), win->h());
|
||||
tree->showroot(0); // don't show root of tree
|
||||
tree->selectmode(FL_TREE_SELECT_MULTI); // multiselect
|
||||
tree->showroot(0); // don't show root of tree
|
||||
tree->selectmode(FL_TREE_SELECT_MULTI); // multiselect
|
||||
|
||||
// Add some items
|
||||
tree->add("Flintstones/Fred");
|
||||
@@ -134,11 +132,11 @@ int main(int argc, char *argv[]) {
|
||||
tree->add("Flintstones/Pebbles");
|
||||
{
|
||||
MyTimeItem *myitem;
|
||||
myitem = new MyTimeItem(tree, "Local"); // create custom item
|
||||
myitem = new MyTimeItem(tree, "Local"); // create custom item
|
||||
myitem->labelsize(20);
|
||||
tree->add("Time Add Item/Local", myitem);
|
||||
|
||||
myitem = new MyTimeItem(tree, "GMT"); // create custom item
|
||||
myitem = new MyTimeItem(tree, "GMT"); // create custom item
|
||||
myitem->labelsize(20);
|
||||
tree->add("Time Add Item/GMT", myitem);
|
||||
}
|
||||
@@ -148,15 +146,15 @@ int main(int argc, char *argv[]) {
|
||||
MyTimeItem *myitem;
|
||||
item = tree->add("Time Replace Item/Local Time");
|
||||
// Replace the 'Local' item with our own
|
||||
myitem = new MyTimeItem(tree, "Local"); // create custom item
|
||||
myitem = new MyTimeItem(tree, "Local"); // create custom item
|
||||
myitem->labelsize(20);
|
||||
item->replace(myitem); // replace normal item with custom
|
||||
item->replace(myitem); // replace normal item with custom
|
||||
|
||||
item = tree->add("Time Replace Item/GMT Time");
|
||||
// Replace the 'GMT' item with our own
|
||||
myitem = new MyTimeItem(tree, "GMT"); // create custom item
|
||||
myitem = new MyTimeItem(tree, "GMT"); // create custom item
|
||||
myitem->labelsize(20);
|
||||
item->replace(myitem); // replace normal item with custom
|
||||
item->replace(myitem); // replace normal item with custom
|
||||
}
|
||||
tree->add("Superjail/Warden");
|
||||
tree->add("Superjail/Jared");
|
||||
@@ -176,7 +174,3 @@ int main(int argc, char *argv[]) {
|
||||
win->show(argc, argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Simple Fl_Tree custom (numeric) sort example. - erco 12/16/2013
|
||||
// Simple Fl_Tree custom (numeric) sort example. - erco 12/16/2013
|
||||
// Demonstrates custom sorting of Fl_Tree items.
|
||||
//
|
||||
// Copyright 2013 Greg Ercolano.
|
||||
@@ -11,15 +9,15 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h> /* qsort(3), srand(3).. */
|
||||
#include <time.h> /* time(2) */
|
||||
#include <stdlib.h> /* qsort(3), srand(3).. */
|
||||
#include <time.h> /* time(2) */
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Double_Window.H>
|
||||
#include <FL/Fl_Tree.H>
|
||||
@@ -29,7 +27,7 @@ Fl_Tree *G_tree = 0;
|
||||
|
||||
// Resort the tree
|
||||
void MySortCallback(Fl_Widget*, void *data) {
|
||||
int dir = int(fl_intptr_t(data)); // forward or reverse
|
||||
int dir = int(fl_intptr_t(data)); // forward or reverse
|
||||
Fl_Tree_Item *i = G_tree->root();
|
||||
// Bubble sort
|
||||
for ( int ax=0; ax<i->children(); ax++ ) {
|
||||
@@ -75,7 +73,3 @@ int main(int argc, char *argv[]) {
|
||||
win->show(argc, argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Fl_Tree as a container of Fl_Table's. - erco 04/25/2012
|
||||
// Fl_Tree as a container of Fl_Table's. - erco 04/25/2012
|
||||
//
|
||||
// Demonstrates how one can make a tree where each item
|
||||
// contains a complex widget.
|
||||
@@ -13,14 +11,14 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <math.h> // powf()
|
||||
#include <math.h> // powf()
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Double_Window.H>
|
||||
#include <FL/Fl_Tree.H>
|
||||
@@ -35,13 +33,13 @@ public:
|
||||
MyTable(int X,int Y,int W,int H,const char *mode) : Fl_Table(X,Y,W,H) {
|
||||
rows(11); row_height_all(20); row_header(1);
|
||||
cols(11); col_width_all(60); col_header(1);
|
||||
col_resize(1); // enable column resizing
|
||||
col_resize(1); // enable column resizing
|
||||
this->mode = mode;
|
||||
end();
|
||||
}
|
||||
void resize(int X,int Y,int W,int H) {
|
||||
if ( W > 718 ) W = 718; // don't exceed 700 in width
|
||||
Fl_Table::resize(X,Y,W,h()); // disallow changes in height
|
||||
if ( W > 718 ) W = 718; // don't exceed 700 in width
|
||||
Fl_Table::resize(X,Y,W,h()); // disallow changes in height
|
||||
}
|
||||
// Handle drawing table's cells
|
||||
// Fl_Table calls this function to draw each visible cell in the table.
|
||||
@@ -52,33 +50,33 @@ public:
|
||||
switch ( context ) {
|
||||
case CONTEXT_STARTPAGE: // before page is drawn..
|
||||
fl_font(FL_HELVETICA, 10); // set the font for our drawing operations
|
||||
return;
|
||||
case CONTEXT_COL_HEADER: // Drawing column/row headers
|
||||
return;
|
||||
case CONTEXT_COL_HEADER: // Drawing column/row headers
|
||||
case CONTEXT_ROW_HEADER: {
|
||||
int val = context==CONTEXT_COL_HEADER ? COL : ROW;
|
||||
int col = context==CONTEXT_COL_HEADER ? col_header_color() : row_header_color();
|
||||
fl_push_clip(X,Y,W,H);
|
||||
if ( strcmp(mode, "SinCos" ) == 0 ) { sprintf(s, "%.2f", ((val/10.0)*PI)); }
|
||||
else sprintf(s,"%d",val);
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, col);
|
||||
fl_color(FL_BLACK);
|
||||
fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
|
||||
if ( strcmp(mode, "SinCos" ) == 0 ) { sprintf(s, "%.2f", ((val/10.0)*PI)); }
|
||||
else sprintf(s,"%d",val);
|
||||
fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, col);
|
||||
fl_color(FL_BLACK);
|
||||
fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
|
||||
fl_pop_clip();
|
||||
return;
|
||||
return;
|
||||
}
|
||||
case CONTEXT_CELL: { // Draw data in cells
|
||||
int col = is_selected(ROW,COL) ? FL_YELLOW : FL_WHITE;
|
||||
fl_push_clip(X,Y,W,H);
|
||||
if ( strcmp(mode, "Addition") == 0 ) { sprintf(s, "%d", ROW+COL); } else
|
||||
if ( strcmp(mode, "Subtract") == 0 ) { sprintf(s, "%d", ROW-COL); } else
|
||||
if ( strcmp(mode, "Multiply") == 0 ) { sprintf(s, "%d", ROW*COL); } else
|
||||
if ( strcmp(mode, "Divide" ) == 0 ) { if ( COL==0 ) sprintf(s, "N/A"); else sprintf(s, "%.2f", (float)ROW/(float)COL); } else
|
||||
if ( strcmp(mode, "Exponent") == 0 ) { sprintf(s, "%g", powf((float)ROW,(float)COL)); } else
|
||||
if ( strcmp(mode, "SinCos" ) == 0 ) { sprintf(s, "%.2f", sin((ROW/10.0)*PI) * cos((COL/10.0)*PI)); } else
|
||||
{ sprintf(s, "???"); }
|
||||
fl_color(col); fl_rectf(X,Y,W,H); // bg
|
||||
fl_color(FL_GRAY0); fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER); // text
|
||||
fl_color(color()); fl_rect(X,Y,W,H); // box
|
||||
if ( strcmp(mode, "Multiply") == 0 ) { sprintf(s, "%d", ROW*COL); } else
|
||||
if ( strcmp(mode, "Divide" ) == 0 ) { if ( COL==0 ) sprintf(s, "N/A"); else sprintf(s, "%.2f", (float)ROW/(float)COL); } else
|
||||
if ( strcmp(mode, "Exponent") == 0 ) { sprintf(s, "%g", powf((float)ROW,(float)COL)); } else
|
||||
if ( strcmp(mode, "SinCos" ) == 0 ) { sprintf(s, "%.2f", sin((ROW/10.0)*PI) * cos((COL/10.0)*PI)); } else
|
||||
{ sprintf(s, "???"); }
|
||||
fl_color(col); fl_rectf(X,Y,W,H); // bg
|
||||
fl_color(FL_GRAY0); fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER); // text
|
||||
fl_color(color()); fl_rect(X,Y,W,H); // box
|
||||
fl_pop_clip();
|
||||
return;
|
||||
}
|
||||
@@ -95,13 +93,13 @@ int main(int argc, char *argv[]) {
|
||||
// Create tree
|
||||
Fl_Tree *tree = new Fl_Tree(10, 10, win->w()-20, win->h()-20);
|
||||
tree->root()->label("Math Tables");
|
||||
tree->item_labelfont(FL_COURIER); // font to use for items
|
||||
tree->linespacing(4); // extra space between items
|
||||
tree->item_labelfont(FL_COURIER); // font to use for items
|
||||
tree->linespacing(4); // extra space between items
|
||||
tree->item_draw_mode(tree->item_draw_mode() |
|
||||
FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET | // draw item with widget() next to it
|
||||
FL_TREE_ITEM_HEIGHT_FROM_WIDGET); // make item height follow table's height
|
||||
tree->selectmode(FL_TREE_SELECT_NONE); // font to use for items
|
||||
tree->widgetmarginleft(12); // space between item and table
|
||||
FL_TREE_ITEM_HEIGHT_FROM_WIDGET); // make item height follow table's height
|
||||
tree->selectmode(FL_TREE_SELECT_NONE); // font to use for items
|
||||
tree->widgetmarginleft(12); // space between item and table
|
||||
tree->connectorstyle(FL_TREE_CONNECTOR_DOTTED);
|
||||
|
||||
// Create tables, assign each a tree item
|
||||
@@ -141,7 +139,3 @@ int main(int argc, char *argv[]) {
|
||||
win->show(argc, argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Simple Fl_Tree widget example. - erco 06/05/2010
|
||||
// Simple Fl_Tree widget example. - erco 06/05/2010
|
||||
//
|
||||
// Copyright 2010 Greg Ercolano.
|
||||
// Copyright 1998-2016 by Bill Spitzak and others.
|
||||
@@ -10,11 +8,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <FL/Fl.H>
|
||||
@@ -60,8 +58,8 @@ int main(int argc, char *argv[]) {
|
||||
{
|
||||
// Create the tree
|
||||
Fl_Tree *tree = new Fl_Tree(10, 10, win->w()-20, win->h()-20);
|
||||
tree->showroot(0); // don't show root of tree
|
||||
tree->callback(TreeCallback); // setup a callback for the tree
|
||||
tree->showroot(0); // don't show root of tree
|
||||
tree->callback(TreeCallback); // setup a callback for the tree
|
||||
|
||||
// Add some items
|
||||
tree->add("Flintstones/Fred");
|
||||
@@ -71,9 +69,9 @@ int main(int argc, char *argv[]) {
|
||||
tree->add("Simpsons/Marge");
|
||||
tree->add("Simpsons/Bart");
|
||||
tree->add("Simpsons/Lisa");
|
||||
tree->add("Pathnames/\\/bin"); // front slashes
|
||||
tree->add("Pathnames/\\/bin"); // front slashes
|
||||
tree->add("Pathnames/\\/usr\\/sbin");
|
||||
tree->add("Pathnames/C:\\\\Program Files"); // backslashes
|
||||
tree->add("Pathnames/C:\\\\Program Files"); // backslashes
|
||||
tree->add("Pathnames/C:\\\\Documents and Settings");
|
||||
|
||||
// Start with some items closed
|
||||
@@ -85,7 +83,3 @@ int main(int argc, char *argv[]) {
|
||||
win->show(argc, argv);
|
||||
return(Fl::run());
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Simple Fl_Wizard widget example.
|
||||
// Originally from erco's cheat sheet 06/05/2010, permission by author.
|
||||
// Simple Fl_Wizard widget example.
|
||||
// Originally from erco's cheat sheet 06/05/2010, permission by author.
|
||||
//
|
||||
// Copyright 2010 Greg Ercolano.
|
||||
// Copyright 1998-2010 by Bill Spitzak and others.
|
||||
@@ -11,11 +9,11 @@
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
// file is missing or damaged, see the license at:
|
||||
//
|
||||
// http://www.fltk.org/COPYING.php
|
||||
// https://www.fltk.org/COPYING.php
|
||||
//
|
||||
// Please report all bugs and problems on the following page:
|
||||
// Please see the following page on how to report bugs and issues:
|
||||
//
|
||||
// http://www.fltk.org/str.php
|
||||
// https://www.fltk.org/bugs.php
|
||||
//
|
||||
#include <stdlib.h>
|
||||
#include <FL/Fl.H>
|
||||
@@ -75,7 +73,3 @@ int main(int argc, char **argv) {
|
||||
G_win->show(argc, argv);
|
||||
return Fl::run();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user