Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Fox toolkit
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Cross-platform widget toolkit}} {{Infobox software | name = FOX toolkit | logo = Foxlogo small.jpg | logo size = 200px | screenshot = | caption = FOX applications | developer = Jeroen van der Zijp, FOX community | latest_release_version = 1.6.58 | latest_release_date = {{Start date and age|2024|05|13|br=yes}} | latest preview version = 1.7.86 | latest preview date = {{Start date and age|2024|08|15|br=yes}} | programming language = [[C++]] | operating_system = [[Cross-platform]] | genre = Development Library | license = [[GNU Lesser General Public License]] with License Addendum allowing static linking<ref>{{Cite web|title=FOX Library License|url=http://fox-toolkit.org/license.html|access-date=2024-09-01|website=fox-toolkit.org}}</ref> | website = {{URL|http://fox-toolkit.org/}} }} The '''FOX toolkit''' is an [[open-source software|open-source]], [[cross-platform]] [[widget toolkit]], i.e. a library of basic elements for building a [[graphical user interface]] (GUI). FOX stands for Free Objects for X. It features a hard-wired [[Windows 95]]βstyle [[Skin (computing)|theme]] available for both [[Microsoft Windows]] itself as well as the [[X Window System]] (which is used on many [[Unix|UNIX]] and [[UNIX-like]] operating systems).<ref>[http://freshmeat.net/articles/gui-toolkits-for-the-x-window-system FOX Toolkit], GUI Toolkits for The X Window System, by Leslie Polzer, 27 Jul 2003, freshmeat.net</ref> The FOX toolkit has been released under the [[GNU Lesser General Public Licence]]. Development began 1997 by Jeroen van der Zijp while he was affiliated at CFDRC. Since then, Jeroen van der Zijp maintains the core library and test applications, with the help of user community. The FOX toolkit is written in [[C++]], with [[language binding]]s available for [[Python (programming language)|Python]], [[Ruby (programming language)|Ruby]] and [[Eiffel (programming language)|Eiffel]]. The FOX [[source code]] distribution supports building with many different (commercial and free) C++ compilers. ==Cross-platform compatibility== [[File:FOX hello screenshot.PNG|thumb|FOX toolkit]] FOX differentiates itself in the following way from other cross-platform toolkits: * [[Tk (framework)|Tk]] is a cross-platform toolkit but does not have all of the widgets that FOX considers desirable. * [[Qt (framework)|Qt]] up to version 4.5 used to have a licensing model that required a commercial license in some cases where FOX would not. * [[wxWidgets]] promotes the use of native widgets on each supported platform. * [[FLTK]] is a fast, low-footprint library that supports rapid application development, and requires less code to use, but lacks advanced widgets. All of these toolkits have some support for programming natively on the [[classic Mac OS]] and/or [[macOS]] platforms, which FOX currently does not support.{{citation needed|date=October 2012}} FOX uses a technique similar to the [[Swing (Java)|Java Swing]]-style approach to display a graphical user interface to the screen, using only graphical primitives available on that platform, as opposed to the original Java [[Abstract Window Toolkit|AWT]]-style approach which used native widgets. This means that applications will have a similar [[look and feel]] across platforms. In theory, porting FOX to a new platform should also be easier than implementing support for native widgets. On the downside, it usually means that FOX applications will look and feel different from native applications for those platforms, which some users may find confusing. Also, certain native platform features may not be available immediately, such as comprehensive printing support or internationalized input handling, because they will need to be re-implemented in a cross-platform way before they can be used in FOX. Some applications, like [[Xfe|Xfe File Manager]], allow changing the color scheme to better integrate with the system's theme colors.<ref>{{Cite web|url=http://roland65.free.fr/xfe/index.php?page=features|title=XFE Homepage}}</ref> On [[Arch Linux]], an app called FOX Control Panel is available to change the color scheme of all FOX applications system-wide. It ships with the main FOX Toolkit package. ==Messaging system== FOX offers a transparent bi-directional messaging system. Each widget sends its message to a certain target. Each message is composed by a selector that identifies its kind and an id that is unique and provided by the widget's enumeration. The advantage is that each widget can call a target widget's method in a transparent manner, even if the method does not exist. Vice versa, in the implementation of the individual message handler, since the sender is known, the target can also dispatch a message to the sender. This is a particularly important feature in component oriented software, where components may be written by different people, or even different organizations. The FOX messaging system simplifies the GUI update strategy: during widget update, the widgets can ask from their targets to update them. This means that a command message does not also have to explicitly update any widgets as it is typical. In case an application implements N command messages each updating M widgets, then M*N updates must be executed and at most M*N messages must be implemented. On the other hand, if widgets request for update, only N command messages and at most M update messages are implemented. This strategy separates the GUI update from data changes, making the GUI a real-time reflection of the underlying data structures. == Internals == === Dependencies === Under hood it depends on the cross-platform libraries, which include the following:<ref>{{Cite web|title=Installation instructions|url=http://fox-toolkit.org/install.html|access-date=2021-08-04|website=fox-toolkit.org}}</ref> * [[OpenGL|Open GL]] * [[OpenGL Utility Library]] * [[libjpeg]] * [[libpng]] * [[LibTIFF]] * [[zlib]] (lz) * [[bzip2]] for file compression ==Hello World== The following example creates a FOX application and a dialog with a button on C++: <syntaxhighlight lang="cpp"> #include "fx.h" int main(int argc, char *argv[]) { FXApp application("Hello", "FoxTest"); application.init(argc, argv); FXMainWindow *main=new FXMainWindow(&application, "Hello", NULL, NULL, DECOR_ALL); new FXButton(main, "&Hello, World!", NULL, &application, FXApp::ID_QUIT); application.create(); main->show(PLACEMENT_SCREEN); return application.run(); } </syntaxhighlight> It is also possible to create dialogs with [[Python (programming language)|Python]] 2.2 and [[Ruby (programming language)|Ruby]]: ''FXPy'' <syntaxhighlight lang="python"> #!/usr/bin/env python3 from FXPy.fox import * import sys def runme(): app = FXApp("Hello", "Test") app.init(sys.argv) main = FXMainWindow(app, "Hello", None, None, DECOR_ALL) button = FXButton(main, "&Hello, World!", None, app, FXApp.ID_QUIT) app.create() main.show(PLACEMENT_SCREEN) app.run() if __name__ == "__main__": runme() </syntaxhighlight> ''FXRuby'' <syntaxhighlight lang="ruby"> require 'fox16' include Fox application = FXApp.new("Hello", "FoxTest") main = FXMainWindow.new(application, "Hi", nil, nil, DECOR_ALL) FXButton.new(main, "&Hello, World!", nil, application, FXApp::ID_QUIT, LAYOUT_FILL_X | BUTTON_TOOLBAR | FRAME_RAISED | FRAME_THICK) application.create() main.show(PLACEMENT_SCREEN) application.run() </syntaxhighlight> ==Software built on FOX== * CFD-View β a post-processing developed by ESI Group * Abaqus/CAE β the pre- and post- processor of the [[Abaqus]] finite element suite<ref>{{cite web | url = http://www.simulia.com/products/products_legal_fox.html | title = Abaqus FEA / Version 6.7 Open Source Programs | access-date = 2007-12-09 | archive-url = https://web.archive.org/web/20071109141309/http://www.simulia.com/products/products_legal_fox.html | archive-date = 2007-11-09 | url-status = dead}}</ref> * bdStudio β an accurate and easy-to-use visualization tool for complex real time aerospace simulations developed by SAIC * [[Intel]] Modular Test Architecture (IMTA) * PVRShaman β a free shader-development studio from [[Imagination Technologies]] * LinkCAD β a commercial format-conversion application for various CAD formats * TMP Vision and SLIM β designed to meet the needs of complex FEA models * [[Kerkythea]] β a multimethod render system * [[Acronis True Image]] and other [[Acronis]] products<ref>{{cite web | url = http://www.acronis.com/homecomputing/support/licensing/ | title = Acronis licensing information | access-date = 2007-12-08}}</ref> * Goggles Music Manager β a music collection manager and player * [[xfe]] β a graphical file manager for the [[X Window System]] * TnFOX β a fork of the FOX library * [[Simulation of Urban MObility|SUMO]] (Simulation of Urban MObility) β a traffic simulator with a GUI editor ==See also== {{Portal|Free and open-source software}} * [[FLTK]] β a light, cross-platform, non-native widget toolkit * [[fpGUI]] β a cross-platform GUI toolkit with a Visual Form Designer and a custom help document reader * [[GTK]] β a widget toolkit used by [[GNOME]] applications * [[gtkmm]] β the official C++ interface to GTK * [[IUP (software)|IUP]] β a multi-platform toolkit for building native graphical user interfaces * [[Juce]] * [[Qt (framework)|Qt]] β a widget toolkit used by [[KDE]] * [[Ultimate++]] * [[Widget toolkit]] * [[wxWidgets]] β a cross-platform open-source C++ widget library, wrapping native widget toolkits * [[List of widget toolkits]] ==References== {{Reflist}} ==External links== * {{Official website}} {{Widget toolkits}} [[Category:Widget toolkits]] [[Category:Free software programmed in C++]] [[Category:Software using the GNU Lesser General Public License]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Citation needed
(
edit
)
Template:Cite web
(
edit
)
Template:Infobox
(
edit
)
Template:Infobox software
(
edit
)
Template:Main other
(
edit
)
Template:Official website
(
edit
)
Template:Portal
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Template other
(
edit
)
Template:Widget toolkits
(
edit
)