Specification for the mGNCS-compliant Widget Components

Terms

  • MiniGUI new control set (mGNCS). The new control set not only realizes multiple customizable and extensible control classes, but also realizes resources management function, and object-oriented encapsulation for other common functions, such as main window, dialog box and menu etc.

  • Style. Symbol used for controlling window or control basic look and feel and behavior.

    • Control style of the new control set, only used for control properties that cannot be modified dynamically, such as if the progress bar is vertical or horizontal can be realized with style. In the realization of all the controls, use of style shall be reduced as much as possible.

    • Besides system global styles such as WS_ and WS_EX_ etc. are reserved, the control styles defined by MiniGUI intrinsic control set are not used in the new control set. Control styles in the new control set will be defined again.

    • In the new control set, control no longer has extension style.

  • Property. Control property is a newly added concept, which is used for the control features that can be dynamically set (such as caret location in the edit box) or dynamically changed (such as list item number in the list box). mGNCS provides uniform interface (getProperty/setProperty) to get or set property of control.

  • Renderer. In mGNCS, it refers to the drawing method set of controlling the main window or control look and feel, the full name is “look and feel renderer”, generally referred to as “renderer” in short.

    • In the new control set, each visible control will have its own renderer. In order to distinguish from renderers introduced by MiniGUI 3.0, we refer to the renderers of MiniGUI 3.0 as “global renderer”, and the renderers introduced by the new control set is referred to as “control renderer”:

    • The global renderer acts on the main window, old control set and system components of the new control set (such as non client area elements such as border, title bar and scroll bar etc.).

    • Control renderer only acts on the client area drawing of each control of the new control set.

  • Window class name. In order to distinguish from the name of control class, we refer to the class name used by MiniGUI for child window as “window class name”. For example, control class name of static box is mStatic, while the window class name of static box is static_.

  • Event. In the traditional programming mode of MiniGUI, there exist two concepts, message and notification; they have their own effect, but for application developers, the nature of notification is the same as that of the message. Therefore, mGNCS abstracts the message and notification as event. Looking from the angle of application developers, each event correspond to an event handler.

Interface Naming Norm of the New Control Set

Interface naming of the new control set is usually related to the name of class, therefore, in the later norm description, the all lower case letter mode, all capital letter mode, lower case and capital letter mixture mode and capital letter abbrev mode of the class name are represented by <classname>, <CLASSNAME>, <ClassName>, and <CLSNM>.

  • Class name (refers to containing method, which is structure of function pointer). Although the new control adopts C language to realize, because OOP idea is adopted, the mode of capital letter and lower case letter mixture is adopted to represent the name of “class”, and lower case letter m is used as prefix, such as mWidget and corresponding mWidgetClass.

  • General structure. Use all capital letter modes similar to MiniGUI interface to name, and use NCS<CLSNM>_ as the prefix.

  • Naming rules for functions and parameters

    • The new control set newly adds global general function, and uses nc as the function name prefix. Afterwards, it is the verb object phrase describing the function function, and the method of capital letter and lower case letter mixture is used to name, such as ncsCreateWindow.

    • Function interface facing the control developers, the first parameter shall be mWidget* or corresponding child class type pointer.

    • Method naming of the control class: verb object phrase, word link writing, except the first word, the first letter of other words is capital letter, such as void (*moveContent) (mWidget *) .

    • Naming norm for the message callback function in control class is: on<MessageName> ,such as void (*onSetFocus) (mWidget *) .

    • Parameter sequence and engagement of control message: according to the message criteria defined by MiniGUI, define its sequence and name.

    • Naming norm for control renderer interface is: <className>Renderer.

    • Internal function parameter engagement of renderer interface: the first is mWidget* or corresponding child class type pointer, and the second parameter is generally HDC .

    • In the new control set, for the functions equivalent to C++ member function, pointer variable representing the object is named as self , while the class pointer that the object corresponds to is _class .

    • For the parameter names in the function interface, Java JDK style is adopted to name (the first word is all lower case letter, and afterwords, they are all capital letter and lower case letter mixture), and Hungarian naming method is no longer used.

    • Read only pointer parameter type and returned value type must use const key word for modification.

  • Window class name. In order to avoid confliction with the window class name of the old control set, the new control set uses under line (_) as the suffix of window class name, such as static_ . The reason for not using prefix is to try to avoid hash conflict under the algorithm of existing MiniGUI core management window class code. For the C language macro name of window class name, NCSCTRL_ is used as prefix, such as NCSCTRL_STATIC .

It needs to be noted that because we adopt C language to realize rule-oriented feature similar to C++ language. In order to avoid unnecessary errors, we need to obey the naming norm as grammar norm, the purpose is:

  • Simplify programming through all kinds of macros.

  • Convenient for fixing programming mode through macro, according to fixed programming mode, it is easy to read and realize and not easy to make mistakes.

  • Generation and index of compiled documents.

  • Reduce study time of the developers to the maximum extent.

Defining Rule for the Class Name and Its Identifier

The table below gives the class name, corresponding window class name and their abbrevs

Class name

C class name

Window classname

Class name abbrev CLSNM

Remark

Super class

mObject

-

OBJ

Non control class, the most foundational class in NCS class hierarchical relations

List item basic class

mItem

-

ITEM

Non control class, used to state the foundation class of list item

List item manager

mItemManager

-

ITMMNG

Non control class, used to manage the method class of list item set

Column information class

mListColumn

-

LSTCLM

Non control class, describes column information class

Row list item class

mListItem

-

LSTITM

Non control class, manages list item set in a row

Component basic class

mComponent

-

CMPT

Non control class

Invisible component basic class

mInvsbComp

-

IVCMPT

Non control class

Timer

mTimer

-

TIMER

Non control class

Control basic class

mWidget

widget_

WIDGET

Static box

mStatic

static_

STATIC

Image box

mImage

image_

IMAGE

Rectangular box

mRect

rect_

RECT

Led label

mLEDLabel

ledlabel_

LEDLBL

Group box

mGroupBox

groupbox_

GRPBOX

Button group

mButtonGroup

buttongroup_

BTNGRP

Button

mButton

button_

BUTTON

Check button

mCheckButton

checkbutton_

CHKBTN

Single selection button

mRadioButton

radiobutton_

RDOBTN

Panel

mPanel

panel_

PANEL

Combination box

mCombobox

combobox_

CMBOX

Main window

mMainWnd

mainwnd_

MNWND

Dialog box

mDialogBox

dialogbox_

DLGBOX

Scrollable basic class

mScrollWidget

scrollwidget_

SWGT

Container

mContainer

container_

CTNR

Property page

mPage

page_

PAGE

List basic class

mItemView

itemview_

ITEMV

List type

mListView

listview_

LISTV

Icon type

mIconView

iconview_

ICONV

Scroll type

mScrollView

scrollview_

SCRLV

List box

mListBox

listbox_

LSTBOX

Progress bar

mProgressBar

progressbar_

PRGBAR

Property sheet

mPropSheet

propsheet_

PRPSHT

Slider basic class

mSlider

slider_

SLIDER

Slide bar

mTackBar

trackbar_

TRKBAR

Spinner basic class

mSpinner

spinner_

SPNR

Spin box

mSpinBox

spinbox_

SPNBOX

Separator

mSeperator

seperator_

SPRTR

Month calendar

mMonthCalendar

monthcalendar_

CDR

Animation

mAnimation

animation_

ANMT

Tool bar

mToolBar

toolbar_

TLBAR

Scroll bar

mScrollBar

scrollbar_

SCRLBR

Edit box basic class

mEdit

edit_

EDIT

Single line edit box

mSLEdit

sledit_

SLEDIT

Multi line edit box

mMLEdit

mledit_

MLEDIT

Naming rule for the identifier is as below:

  • Window class name identifier. In order to avoid confliction with the identifier of the old control set, the new control set uses NCSCTRL_<CLASSNAME> as the window class name identifier.

  • Control style identifier. In order to avoid confliction with the style name of the old control set, the new control set uses NCSS_<CLSNM>_ as the prefix of the style identifier.

  • Control property identifier. The new control set uses NCSP_<CLSNM>_ as the prefix of control property identifier.

  • Control notification code identifier. In order to avoid confliction with the notification code name of the old control set, the new control set uses NCSN_<CLSNM>_ as the prefix of control notification identifier.

  • Class specific data identifier. The new control set uses NCSSPEC_<CLSNM>_ as the identifier prefix of class specific data, and specific data of mObject class uses NCSSPEC_OBJ_ as the prefix.

  • Parameter of class method and symbol and status used by the returned value etc. The new control set uses NCSF_<CLSNM>_ as the prefix of this identifier.

  • Return value identifier of function interface and class method. The new control set uses NCSE_<CLSNM>_ as the prefix of the identifier.

  • Other identifiers. Besides the above identifiers, identifiers of other types are determined with reference to the above method.

Defining Rule of Control Style Identifier

In the new control set, number of control styles shall be kept to the minimum, and the value range of the control style is 0x00000000 ~ 0x0000FFFF, so as to avoid confusion with the window style defined by MiniGUI.

Defining Rule of Control Property Identifier

Rule of control property identifier:

  1. In the direct inheritance relation, value of property identifier cannot be repeated, that is, property identifier of the child class cannot cover the property identifier of the parent class and its ancestor.

  2. In the collateral inheritance relation, property identifier can be repeated, that is, property identifier of a control class can be repeated with the property identifier of its brother control class.

In technology, enumeration type of C language is utilized to define the property identifier. For the property identifier prefixes of the controls, see the table above.

  1. In the property identifier enumeration variable of each control, the last item is defined as NCSP_<CLSNAM>_MAX .

  2. Property identifier of each control is defined from the value of the maximum property identifier of its parent class plus one.

  3. Define each property by sequence by utilizing the feature of enumeration being able to plus one automatically.

For example:

// mWidget
enum mWidgetProp {
    NCSP_WIDGET_RDR,
    NCSP_WIDGET_MAX
};

// mStatic
enum mStaticProp {
    NCSP_STATIC_HALIGN = NCSP_WIDGET_MAX + 1,
    NCSP_STATIC_VALIGN,
    NCSP_STATIC_MAX
};

Defining Rule of Control Notification Code

Rule for control notification code is similar to the rule for property identifier. But it needs to be noted that in mGNCS, 0 cannot be used as the notification code.

Function Library and Head File of the New Control Set

Although mGNCS is introduced in the process of developing miniStudio, it can be used singularly as a component in MiniGUI 3.0. Therefore, we manage the new control set as a component of MiniGUI, and name it mGNCS. Name of the function library is libmgncs, and the current edition is 1.0.0. The head file is stored under mGNCS/ directory of the system head file path, and the main head file name is mGNCS.h.

Current mGNCS defines a lot of universal controls, and in the near future, we will form extension control set aiming at specific field based on the current mGNCS. Then, an independent function library will be formed, and it is named by adopting libmgncs4*, and the head file will be still stored under mgncs/ directory of the system head file path.


<< Public Structures and Definitions of mGNCS | Table of Contents

Last updated