library/forms/mforms/mforms.h (91 lines of code) (raw):

/* * Copyright (c) 2008, 2019, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2.0, * as published by the Free Software Foundation. * * This program is designed to work with certain software (including * but not limited to OpenSSL) that is licensed under separate terms, as * designated in a particular file or component or in included license * documentation. The authors of MySQL hereby grant you an additional * permission to link the program and your derivative works with the * separately licensed software that they have either included with * the program or referenced in the documentation. * This program 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 General Public License, version 2.0, for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #pragma once /*! \mainpage MForms - mini forms library * * \anchor MForms * * \section Introduction * MForms is a small GUI toolkit library written for use in the "a href="http://wb.mysql.com""MySQL Workbench"/a" * project. It is small and cross-platform, * while providing access to fully native controls (through .NET in Windows, GTK in Linux and Cocoa in MacOSX). * It is not meant to be a full-fledged control library, but instead a light-weight and simple library that allows * writing simple forms that will work in any supported platform. It is used by Workbench in some specific parts where * the UI requirements are not very complex, such as in wizards, simple confirmation dialogs and the Administrator * feature. * The library is written in C++, but a Python wrapper is available, making it possible to easily write cross-platform * plugins * with simple to moderately complex GUIs. * * \section Layouting * Because each platform has widgets of different sizes, with different layout characteristics, * using absolute coordinates and sizes for layouting would not work very well. A dialog written * in Windows containing text and a couple of buttons could look fine in the OS where it was written in, * but would look cluttered and probably too small on macOS. To work around that, MForms uses dynamic * layouting containers instead of static coordinates to place and size controls, similar to what GTK uses. * Basically, there are several types of containers where you can place one or more controls inside, each * having a specific layouting behavior. * \li Form - A top level window which can contain a single control (usually another container). * The window will be sized automatically to fit its contents, but can also be set to a size by hand. * \li Box - A container that can be filled with one or more controls in a vertical or horizontal layout. * Each child control can be set to either use only the minimal space required by it or to fill up all space available * in the box in the direction of the layout. In the direction perpendicular to the layout (ie vertical * in a horizontal box and vice-versa), the smallest possible size that can accommodate all child controls * will be applied to all its contents. * \li Table - A container that can organize one or more controls in a grid. You may set the number of rows * and columns in the table and place your controls in specific cells of that grid. * \li ScrollView - A container that can contain a single other control and will add scrollbars if the contents don't * fit the available space. * */ #include "mforms/view.h" #include "mforms/form.h" #include "mforms/button.h" #include "mforms/checkbox.h" #include "mforms/textentry.h" #include "mforms/textbox.h" #include "mforms/label.h" #include "mforms/selector.h" #include "mforms/listbox.h" #include "mforms/tabview.h" #include "mforms/box.h" #include "mforms/panel.h" #include "mforms/filechooser.h" #include "mforms/radiobutton.h" #include "mforms/imagebox.h" #include "mforms/progressbar.h" #include "mforms/table.h" #include "mforms/scrollpanel.h" #include "mforms/treeview.h" #include "mforms/wizard.h" #include "mforms/drawbox.h" #include "mforms/tabswitcher.h" #include "mforms/app.h" #include "mforms/appview.h" #include "mforms/utilities.h" #include "mforms/uistyle.h" #include "mforms/appview.h" #include "mforms/sectionbox.h" #include "mforms/widgets.h" #include "mforms/menu.h" #include "mforms/splitter.h" #include "mforms/popup.h" #include "mforms/code_editor.h" #include "mforms/menubar.h" #include "mforms/toolbar.h" #include "mforms/hypertext.h" #include "mforms/popover.h" #include "mforms/fs_object_selector.h" #include "mforms/simpleform.h" #include "mforms/find_panel.h" #include "mforms/native.h" #include "mforms/canvas.h" #include "mforms/gridview.h" #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace mforms { class MFORMS_EXPORT ControlFactory { public: ViewImplPtrs _view_impl; FormImplPtrs _form_impl; BoxImplPtrs _box_impl; ButtonImplPtrs _button_impl; CheckBoxImplPtrs _checkbox_impl; TextEntryImplPtrs _textentry_impl; TextBoxImplPtrs _textbox_impl; LabelImplPtrs _label_impl; SelectorImplPtrs _selector_impl; ListBoxImplPtrs _listbox_impl; TabViewImplPtrs _tabview_impl; PanelImplPtrs _panel_impl; FileChooserImplPtrs _filechooser_impl; RadioButtonImplPtrs _radio_impl; ImageBoxImplPtrs _imagebox_impl; ProgressBarImplPtrs _progressbar_impl; TableImplPtrs _table_impl; ScrollPanelImplPtrs _spanel_impl; WizardImplPtrs _wizard_impl; DrawBoxImplPtrs _drawbox_impl; MenuImplPtrs _menu_impl; SplitterImplPtrs _splitter_impl; PopupImplPtrs _popup_impl; CodeEditorImplPtrs _code_editor_impl; MenuItemImplPtrs _menu_item_impl; ToolBarImplPtrs _tool_bar_impl; HyperTextImplPtrs _hypertext_impl; PopoverImplPtrs _popover_impl; CanvasImplPtrs _canvas_impl; AppImplPtrs _app_impl; AppViewImplPtrs _app_view_impl; UtilitiesImplPtrs _utilities_impl; public: TreeViewImplPtrs _treeview_impl; FindPanelImplPtrs _findpanel_impl; ControlFactory(); ~ControlFactory(); static ControlFactory *get_instance(); void check_impl(); void shutdown(); }; }; #endif