File: mforms.h

package info (click to toggle)
mysql-workbench 6.3.8%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 113,932 kB
  • ctags: 87,814
  • sloc: ansic: 955,521; cpp: 427,465; python: 59,728; yacc: 59,129; xml: 54,204; sql: 7,091; objc: 965; makefile: 638; sh: 613; java: 237; perl: 30; ruby: 6; php: 1
file content (162 lines) | stat: -rw-r--r-- 6,277 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/* 
 * Copyright (c) 2008, 2014, 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 as
 * published by the Free Software Foundation; version 2 of the
 * License.
 * 
 * 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 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 Mac OS X. 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/treenodeview.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/webbrowser.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/record_grid.h>

#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace mforms
{
  class MFORMS_EXPORT ControlFactory
  {
  private:
    int _created;
    int _destroyed;
  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;
    WebBrowserImplPtrs _webbrowser_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:
    
    TreeNodeViewImplPtrs _treenodeview_impl;
    FindPanelImplPtrs _findpanel_impl;

    ControlFactory();
    ~ControlFactory();

    static ControlFactory *get_instance();
    
    void check_impl();
    void shutdown();

    void instance_created();
    void instance_destroyed();
  };
};

#endif