diff options
| -rw-r--r-- | CHANGES | 3 | ||||
| -rw-r--r-- | FL/Fl_Input_Choice.H | 128 | ||||
| -rw-r--r-- | documentation/Fl_Input_Choice.html | 100 | ||||
| -rw-r--r-- | documentation/fltk.book | 3 | ||||
| -rw-r--r-- | documentation/index.html | 6 | ||||
| -rw-r--r-- | documentation/input_choice.jpg | bin | 0 -> 5320 bytes | |||
| -rw-r--r-- | documentation/preface.html | 4 | ||||
| -rw-r--r-- | documentation/widgets.html | 2 | ||||
| -rw-r--r-- | fluid/Fl_Menu_Type.cxx | 2 | ||||
| -rw-r--r-- | fluid/Fl_Type.h | 18 | ||||
| -rw-r--r-- | fluid/factory.cxx | 2 | ||||
| -rw-r--r-- | test/Makefile | 8 | ||||
| -rw-r--r-- | test/demo.menu | 1 | ||||
| -rw-r--r-- | test/input_choice.cxx | 57 |
14 files changed, 324 insertions, 10 deletions
@@ -1,6 +1,9 @@ CHANGES IN FLTK 1.1.7 - Documentation fixes (STR #648, STR #692) + - Added Greg Ercolano's simple Fl_Input_Choice widget + which is a combination of the Fl_Input and + Fl_Menu_Button widgets (STR #650) - Fl_Multiline_Input now scrolls the full height of the widget instead of 5 lines when the user presses PageUp or PageDown (STR #727) diff --git a/FL/Fl_Input_Choice.H b/FL/Fl_Input_Choice.H new file mode 100644 index 000000000..2b7d1424e --- /dev/null +++ b/FL/Fl_Input_Choice.H @@ -0,0 +1,128 @@ +// +// "$Id$" +// +// An input/chooser widget. +// ______________ ____ +// | || __ | +// | input area || \/ | +// |______________||____| +// +// Copyright 1998-2005 by Bill Spitzak and others. +// Copyright 2004 by Greg Ercolano. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems to "fltk-bugs@fltk.org". +// + +#ifndef Fl_Input_Choice_H +#define Fl_Input_Choice_H + +#include <FL/Fl.H> +#include <FL/Fl_Input.H> +#include <FL/Fl_Menu_Button.H> +#include <FL/fl_draw.H> + +class Fl_Input_Choice : public Fl_Group { + // Private class to handle slightly 'special' behavior of menu button + class InputMenuButton : public Fl_Menu_Button { + void draw() { + draw_box(FL_UP_BOX, color()); + fl_color(active_r() ? labelcolor() : fl_inactive(labelcolor())); + int xc = x()+w()/2, yc=y()+h()/2; + fl_polygon(xc-5,yc-3,xc+5,yc-3,xc,yc+3); + if (Fl::focus() == this) draw_focus(); + } + public: + InputMenuButton(int x,int y,int w,int h,const char*l=0) : + Fl_Menu_Button(x,y,w,h,l) { box(FL_UP_BOX); } + }; + + Fl_Input *inp_; + InputMenuButton *menu_; + + static void menu_cb(Fl_Widget*, void *data) { + Fl_Input_Choice *o=(Fl_Input_Choice *)data; + o->inp_->value(o->menu_->text()); + o->do_callback(); + } + + static void inp_cb(Fl_Widget*, void *data) { + Fl_Input_Choice *o=(Fl_Input_Choice *)data; + o->do_callback(); + } + + // Custom resize behavior -- input stretches, menu button doesn't + inline int inp_x() { return(x() + Fl::box_dx(box())); } + inline int inp_y() { return(y() + Fl::box_dy(box())); } + inline int inp_w() { return(w() - Fl::box_dw(box()) - 20); } + inline int inp_h() { return(h() - Fl::box_dh(box())); } + + inline int menu_x() { return(x() + w() - 20 - Fl::box_dx(box())); } + inline int menu_y() { return(y() + Fl::box_dy(box()) + (Fl::scheme()?1:0)); } + inline int menu_w() { return(20); } + inline int menu_h() { return(h() - Fl::box_dh(box()) - (Fl::scheme()?1:0)); } + +public: + Fl_Input_Choice (int x,int y,int w,int h,const char*l=0) : Fl_Group(x,y,w,h,l) { + Fl_Group::box(FL_DOWN_BOX); + align(FL_ALIGN_LEFT); // default like Fl_Input + inp_ = new Fl_Input(inp_x(), inp_y(), + inp_w(), inp_h()); + inp_->callback(inp_cb, (void*)this); + inp_->box(FL_FLAT_BOX); // cosmetic + menu_ = new InputMenuButton(menu_x(), menu_y(), + menu_w(), menu_h()); + menu_->callback(menu_cb, (void*)this); + menu_->box(FL_FLAT_BOX); // cosmetic + end(); + } + void add(const char *s) { + menu_->add(s); + } + void clear() { + menu_->clear(); + } + const Fl_Menu_Item *menu() { + return (menu_->menu()); + } + void menu(const Fl_Menu_Item *m) { + menu_->menu(m); + } + void resize(int X, int Y, int W, int H) { + Fl_Group::resize(X,Y,W,H); + inp_->resize(inp_x(), inp_y(), inp_w(), inp_h()); + menu_->resize(menu_x(), menu_y(), menu_w(), menu_h()); + } + const char* value() const { + return(inp_->value()); + } + void value(const char *val) { + inp_->value(val); + } + void value(int val) { + menu_->value(val); + inp_->value(menu_->text(val)); + } + Fl_Menu_Button *menubutton() { return menu_; } + Fl_Input *input() { return inp_; } +}; + +#endif // !Fl_Input_Choice_H + +// +// End of "$Id$". +// diff --git a/documentation/Fl_Input_Choice.html b/documentation/Fl_Input_Choice.html new file mode 100644 index 000000000..b941e3447 --- /dev/null +++ b/documentation/Fl_Input_Choice.html @@ -0,0 +1,100 @@ +<HTML> +<BODY> + +<!-- NEW PAGE --> + +<H2><A name=Fl_Input_Choice>class Fl_Input_Choice</A></H2> + +<HR> + +<H3>Class Hierarchy</H3> + +<UL><PRE> +<A href=Fl_Group.html#Fl_Group>Fl_Group</A> + | + +----<B>Fl_Input_Choice</B> + | + +----<A href=Fl_Input.html#Fl_Input>Fl_Input</A> + <A href=Fl_Menu_Button.html#Fl_Menu_Button>Fl_Menu_Button</A> +</PRE></UL> + +<H3>Include Files</H3> + +<UL><PRE> +#include <FL/Fl_Input_Choice.H> +</PRE></UL> + +<P align='center'> +<IMG SRC='input_choice.jpg'><BR> +<I>Plastic and normal Fl::scheme()s.</I> +</P> + +<H3>Description</H3> +<P>A combination of the input widget and a menu button. +The user can either type into the input area, or use the +menu button chooser on the right, which loads the input area +with predefined text. Normally it is drawn with an inset box +and a white background. +<P> +The application can directly access both the input and menu +widgets directly, using the <A HREF=#Fl_Input_Choice.menubutton>menubutton()</A> +and <A HREF=#Fl_Input_Choice.input>input()</A> accessor methods. + +<H3>Methods</H3> +<CENTER> +<TABLE width=90% summary="Fl_Input_Choice methods."><TR><TD align=left valign=top> +<UL TYPE=DISC> + <LI><A href='#Fl_Input_Choice.Fl_Input_Choice'>Fl_Input_Choice</A></LI> + <LI><A href='#Fl_Input_Choice.~Fl_Input_Choice'>~Fl_Input_Choice</A></LI> + <LI><A href='#Fl_Input_Choice.add'>add</A></LI> + <LI><A href='#Fl_Input_Choice.clear'>clear</A></LI> + <LI><A href='#Fl_Input_Choice.input'>input</A></LI> + <LI><A href='#Fl_Input_Choice.menu'>menu</A></LI> + <LI><A href='#Fl_Input_Choice.menubutton'>menubutton</A></LI> + <LI><A href='#Fl_Input_Choice.value'>value</A></LI> +</TD></TR></TABLE> +</CENTER> + +<H4><A name="Fl_Input_Choice.Fl_Input_Choice">Fl_Input_Choice::Fl_Input_Choice(int x, int y, int w, +int h, const char *label = 0)</A></H4> + +<P>Creates a new <TT>Fl_Input_Choice</TT> widget using the given position, size, +and label string. + +<H4><A name="Fl_Input_Choice.~Fl_Input_Choice">virtual Fl_Input_Choice::~Fl_Input_Choice()</A></H4> + +<P>Destroys the widget and any value associated with it. + +<h4><a name='#Fl_Input_Choice.add'>void Fl_Input_Choice::add(const char *s)</a></h4> + +<p>Adds an item to the menu.</p> + +<h4><a name='#Fl_Input_Choice.clear'>void Fl_Input_Choice::clear()</a></h4> + +<p>Removes all items from the menu.</p> + +<H4><A name="Fl_Input_Choice.input">Fl_Input *Fl_Input_Choice::input()</A></H4> + +<p>Returns a reference to the internal <tt>Fl_Input</tt> widget.</p> + +<h4><a name='#Fl_Input_Choice.menu'>void Fl_Input_Choice::menu(const Fl_Menu_Item *m)<br> +const Fl_Menu_Item *menu()</A></h4> + +<p>Gets or sets the <tt>Fl_Menu_Item</tt> array used for the menu.</p> + +<H4><A name="Fl_Input_Choice.menubutton">Fl_Menu_Button *Fl_Input_Choice::menubutton()</A></H4> + +<P>Returns a reference to the internal <tt>Fl_Menu_Button</tt> widget. + +<H4><A name="Fl_Input_Choice.value">void Fl_Input_Choice::value(const char *s)<br> +void Fl_Input_Choice::value(int v)<br> +const char *Fl_Input_Choice::value() const</A></H4> + +<P>Sets or returns the input widget's current contents. The +second form sets the contents using the index into the menu +which you can set as an integer. Setting the value effectively +'chooses' this menu item, and sets it as the new input text, +deleting the previous text.</p> + +</BODY> +</HTML> diff --git a/documentation/fltk.book b/documentation/fltk.book index 50915a6b9..2dd70f748 100644 --- a/documentation/fltk.book +++ b/documentation/fltk.book @@ -1,5 +1,5 @@ #HTMLDOC 1.8.20 --t pdf13 -f fltk.pdf --book --toclevels 2 --no-numbered --toctitle "Table of Contents" --title --titleimage FL.gif --linkstyle underline --size Universal --left 1.00in --right 0.50in --top 0.50in --bottom 0.50in --header .t. --footer h.1 --tocheader .t. --tocfooter ..i --duplex --portrait --color --no-pscommands --no-xrxcomments --compression=9 --jpeg=50 --fontsize 11.0 --fontspacing 1.2 --headingfont Helvetica --bodyfont Times --headfootsize 11.0 --headfootfont Helvetica --charset 8859-1 --links --no-truetype --pagemode outline --pagelayout single --firstpage c1 --pageeffect none --pageduration 10 --effectduration 1.0 --no-encryption --permissions all --owner-password "" --user-password "" --browserwidth 680 +-t pdf13 -f fltk.pdf --book --toclevels 2 --no-numbered --toctitle "Table of Contents" --title --titleimage FL.gif --linkstyle underline --size Universal --left 1.00in --right 0.50in --top 0.50in --bottom 0.50in --header .t. --footer h.1 --tocheader .t. --tocfooter ..i --duplex --portrait --color --no-pscommands --no-xrxcomments --compression=9 --jpeg=50 --no-embedfonts --fontsize 11.0 --fontspacing 1.2 --headingfont Helvetica --bodyfont Times --headfootsize 11.0 --headfootfont Helvetica --charset 8859-1 --links --no-truetype --pagemode outline --pagelayout single --firstpage c1 --pageeffect none --pageduration 10 --effectduration 1.0 --no-encryption --permissions all --owner-password "" --user-password "" --browserwidth 680 preface.html intro.html basics.html @@ -44,6 +44,7 @@ Fl_Hold_Browser.html Fl_Image.html Fl_Input.html Fl_Input_.html +Fl_Input_Choice.html Fl_Int_Input.html Fl_JPEG_Image.html Fl_Light_Button.html diff --git a/documentation/index.html b/documentation/index.html index 2853526ba..489623036 100644 --- a/documentation/index.html +++ b/documentation/index.html @@ -1,7 +1,7 @@ <HTML> <HEAD> <META NAME="robots" CONTENT="noindex"> - <TITLE>FLTK 1.1.6 Programming Manual</TITLE> + <TITLE>FLTK 1.1.7 Programming Manual</TITLE> </HEAD> <BODY> @@ -10,8 +10,8 @@ <TD VALIGN="MIDDLE"> <IMG SRC="FL.gif" WIDTH="200" HEIGHT="100" ALIGN="ABSMIDDLE" ALT="FL"></TD> <TD ALIGN="CENTER" VALIGN="MIDDLE"> - <H1>FLTK 1.1.6 Programming Manual</H1> - <P>Revision 6 by Michael Sweet, Craig P. Earls, and Bill Spitzak<BR> + <H1>FLTK 1.1.7 Programming Manual</H1> + <P>Revision 7 by Michael Sweet, Craig P. Earls, and Bill Spitzak<BR> Copyright 1998-2004 by Bill Spitzak and others.</P> </TD> </TR> diff --git a/documentation/input_choice.jpg b/documentation/input_choice.jpg Binary files differnew file mode 100644 index 000000000..7f7b93f85 --- /dev/null +++ b/documentation/input_choice.jpg diff --git a/documentation/preface.html b/documentation/preface.html index a53e8899d..42ec42b52 100644 --- a/documentation/preface.html +++ b/documentation/preface.html @@ -3,14 +3,14 @@ <META CONTENT="Written by Michael Sweet, Craig P. Earls, and Bill Spitzak" NAME="Author"> <META CONTENT="Copyright 1998-2004 by Bill Spitzak and Others." NAME="Copyright"> <META CONTENT="Revision 6" NAME="DocNumber"> - <TITLE>FLTK 1.1.6 Programming Manual</TITLE> + <TITLE>FLTK 1.1.7 Programming Manual</TITLE> </HEAD> <BODY> <H1 ALIGN="RIGHT"><A NAME="preface">Preface</A></H1> <P>This manual describes the Fast Light Tool Kit ("FLTK") -version 1.1.6, a C++ Graphical User Interface +version 1.1.7, a C++ Graphical User Interface ("GUI") toolkit for UNIX, Microsoft Windows and MacOS. Each of the chapters in this manual is designed as a tutorial for using FLTK, while the appendices provide a convenient reference diff --git a/documentation/widgets.html b/documentation/widgets.html index d0c1967e4..d101330c6 100644 --- a/documentation/widgets.html +++ b/documentation/widgets.html @@ -45,6 +45,7 @@ description of the <TT>fl_</TT> functions, see <A HREF="Fl_Image.html">Fl_Image</A><BR> <A HREF="Fl_Input_.html">Fl_Input_</A><BR> <A HREF="Fl_Input.html">Fl_Input</A><BR> +<A HREF="Fl_Input_Choice.html">Fl_Input_Choice</A><BR> <A HREF="Fl_Int_Input.html">Fl_Int_Input</A><BR> <A HREF="Fl_JPEG_Image.html">Fl_JPEG_Image</A><BR> <A HREF="Fl_Light_Button.html">Fl_Light_Button</A><BR> @@ -161,6 +162,7 @@ description of the <TT>fl_</TT> functions, see <LI><A HREF="Fl_File_Chooser.html#Fl_File_Chooser">Fl_File_Chooser</A> <LI><A HREF="Fl_Help_Dialog.html#Fl_Help_Dialog">Fl_Help_Dialog</A> <LI><A HREF="Fl_Help_View.html#Fl_Help_View">Fl_Help_View</A> + <LI><A HREF="Fl_Input_Choice.html">Fl_Input_Choice</A> <LI><A HREF="Fl_Pack.html#Fl_Pack">Fl_Pack</A> <LI><A HREF="Fl_Scroll.html#Fl_Scroll">Fl_Scroll</A> <LI><A HREF="Fl_Tabs.html#Fl_Tabs">Fl_Tabs</A> diff --git a/fluid/Fl_Menu_Type.cxx b/fluid/Fl_Menu_Type.cxx index 08d109916..954aa5051 100644 --- a/fluid/Fl_Menu_Type.cxx +++ b/fluid/Fl_Menu_Type.cxx @@ -419,6 +419,8 @@ Fl_Menu_Item dummymenu[] = {{"CHOICE"},{0}}; Fl_Choice_Type Fl_Choice_type; +Fl_Input_Choice_Type Fl_Input_Choice_type; + //////////////////////////////////////////////////////////////// Fl_Menu_Bar_Type Fl_Menu_Bar_type; diff --git a/fluid/Fl_Type.h b/fluid/Fl_Type.h index 1a732ad2e..cc0c246cb 100644 --- a/fluid/Fl_Type.h +++ b/fluid/Fl_Type.h @@ -1,5 +1,5 @@ // -// "$Id: Fl_Type.h,v 1.5.2.11.2.13 2004/04/11 04:38:55 easysw Exp $" +// "$Id$" // // Widget type header file for the Fast Light Tool Kit (FLTK). // @@ -549,6 +549,20 @@ public: int pixmapID() { return 15; } }; +#include <FL/Fl_Input_Choice.H> +class Fl_Input_Choice_Type : public Fl_Menu_Type { +public: + virtual const char *type_name() {return "Fl_Input_Choice";} + Fl_Widget *widget(int X,int Y,int W,int H) { + Fl_Input_Choice *myo = new Fl_Input_Choice(X,Y,W,H,"input choice:"); + myo->menu(dummymenu); + myo->value("input"); + return myo; + } + Fl_Widget_Type *_make() {return new Fl_Input_Choice_Type();} + int pixmapID() { return 15; } +}; + #include <FL/Fl_Menu_Bar.H> class Fl_Menu_Bar_Type : public Fl_Menu_Type { public: @@ -599,5 +613,5 @@ int storestring(const char *n, const char * & p, int nostrip=0); extern int include_H_from_C; // -// End of "$Id: Fl_Type.h,v 1.5.2.11.2.13 2004/04/11 04:38:55 easysw Exp $". +// End of "$Id$". // diff --git a/fluid/factory.cxx b/fluid/factory.cxx index 995c93182..efba7d6de 100644 --- a/fluid/factory.cxx +++ b/fluid/factory.cxx @@ -690,6 +690,7 @@ extern class Fl_Pack_Type Fl_Pack_type; extern class Fl_Tabs_Type Fl_Tabs_type; extern class Fl_Scroll_Type Fl_Scroll_type; extern class Fl_Tile_Type Fl_Tile_type; +extern class Fl_Input_Choice_Type Fl_Input_Choice_type; extern class Fl_Choice_Type Fl_Choice_type; extern class Fl_Menu_Bar_Type Fl_Menu_Bar_type; extern class Fl_Menu_Button_Type Fl_Menu_Button_type; @@ -753,6 +754,7 @@ Fl_Menu_Item New_Menu[] = { {0,0,cb,(void*)&Fl_Menu_Bar_type}, {0,0,cb,(void*)&Fl_Menu_Button_type}, {0,0,cb,(void*)&Fl_Choice_type}, + {0,0,cb,(void*)&Fl_Input_Choice_type}, {0,0,cb, (void*)&Fl_Submenu_type}, {0,0,cb, (void*)&Fl_Menu_Item_type}, {0}, diff --git a/test/Makefile b/test/Makefile index 3c7d74bb4..ead8a4753 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,5 +1,5 @@ # -# "$Id: Makefile,v 1.19.2.7.2.42 2004/08/26 22:24:24 matthiaswm Exp $" +# "$Id$" # # Test/example program makefile for the Fast Light Tool Kit (FLTK). # @@ -61,6 +61,7 @@ CPPFILES =\ image.cxx \ inactive.cxx \ input.cxx \ + input_choice.cxx \ keyboard.cxx \ label.cxx \ line_style.cxx \ @@ -118,6 +119,7 @@ ALL = \ image$(EXEEXT) \ inactive$(EXEEXT) \ input$(EXEEXT) \ + input_choice$(EXEEXT) \ keyboard$(EXEEXT) \ label$(EXEEXT) \ line_style$(EXEEXT) \ @@ -259,6 +261,8 @@ inactive.cxx: inactive.fl input$(EXEEXT): input.o +input_choice$(EXEEXT): input_choice.o + keyboard$(EXEEXT): keyboard_ui.o keyboard.o echo Linking $@... $(CXX) -I.. $(CXXFLAGS) -o $@ keyboard.o keyboard_ui.o $(LINKFLTK) $(LDLIBS) @@ -376,5 +380,5 @@ shape$(EXEEXT): shape.o # -# End of "$Id: Makefile,v 1.19.2.7.2.42 2004/08/26 22:24:24 matthiaswm Exp $". +# End of "$Id$". # diff --git a/test/demo.menu b/test/demo.menu index 75417d01f..a8678a08b 100644 --- a/test/demo.menu +++ b/test/demo.menu @@ -65,6 +65,7 @@ @o:File Chooser:file_chooser @o:Fonts:fonts @o:HelpDialog:help + @o:Input Choice:input_choice @o:Preferences:preferences @o:Threading:threads @o:XForms Emulation:forms diff --git a/test/input_choice.cxx b/test/input_choice.cxx new file mode 100644 index 000000000..45a50916b --- /dev/null +++ b/test/input_choice.cxx @@ -0,0 +1,57 @@ +// Test program for Fl_Input_Choice +// +// Copyright 1998-2004 by Bill Spitzak and others. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// + +#include <stdio.h> +#include <FL/Fl_Button.H> +#include <FL/Fl_Window.H> +#include <FL/Fl_Input_Choice.H> + +void buttcb(Fl_Widget*,void*data) { + Fl_Input_Choice *in=(Fl_Input_Choice *)data; + static int flag = 1; + flag ^= 1; + if ( flag ) in->activate(); + else in->deactivate(); +} + +void input_choice_cb(Fl_Widget*,void*data) { + Fl_Input_Choice *in=(Fl_Input_Choice *)data; + fprintf(stderr, "Value='%s'\n", (const char*)in->value()); +} + +int main(int argc, char **argv) { + Fl::scheme("plastic"); // optional + Fl_Window win(300, 200); + + Fl_Input_Choice in(40,40,100,28,"Test"); + in.callback(input_choice_cb, (void*)&in); + in.add("one"); + in.add("two"); + in.add("three"); + in.value(1); + + Fl_Button onoff(40,150,200,28,"Activate/Deactivate"); + onoff.callback(buttcb, (void*)&in); + + win.end(); + win.resizable(win); + win.show(argc, argv); + return Fl::run(); +} |
