You can find information about existing projects upgrading in the article Upgrade project.
class_name
so you can set your form class name. By default it has the same value as the Name property you give your form in the Form Builder.OnMouseLeave
event was not called when detaching control from form in CForm class.UpdateHoveredControl()
method of form implementation in CForm class has been adjusted.Execute()
method show search/replace interface in non-modal mode. It was shown in modal mode before.[]
to get pixel data when constant image was drawing in Image widget.CleanupOnControlDetach()
from form service interface IFormService and its default implementation in CFormService class.IsMaximized
, IsMinimized
, and IsVisible
from CREATE_PARAMS structure as they were redundant and can be completely replaced by State
member.CopyStringToClipboard()
of IWindow is no longer return a string and its result cannot be used for pasting.CopyStringToClipboard()
of IForm is no longer return a string and its result cannot be used for pasting.OnPasteString()
of IWindowListener was added which is called when pasting string becomes available after paste request. Implementations of this method then call corresponding PasteString notifications and events to distribute the event to paste initiaded widget.NitifyOnPasteString()
was added to IFormService and corresponding implementations.OnPasteString()
was added to IForm.NitifyOnPasteString()
was added to IControlService and corresponding implementations.OnPasteString()
was added to IControl.NitifyOnPasteString()
was added to IBuiltInControl and corresponding implementations.getDesciption()
of interface IPackageEntity and all derived interfaces and implementing classes has been renamed to getDescription
(added missing letter r).Clear()
to ValueListEditor widget.setNamespace()
to IPackageEntity interface and its implementations. It is used to overwrite namespace when creating form prototype header file in Form Builder if it is requested in settings.getNamespace()
to CPackageEntity class.getStatePrefixType()
to IPropertyState interface and its implementations to read assigned at construction state prefix generation type.getStatePrefix()
to IPropertyState interface and its implementations to read assigned at construction state additional prefix.const String &ns
argument to constructors of CPackageEntity, CPackageComponent, CPackageControl, CPackageListItem, CPackageForm, CPackageRenderer, and CPackageStyle base package classes.const EXPORT_PREFIX_TYPE state_prefix_type
indicating how prefix for state name should be generated. It is added before argument const String &state_prefix
.Prefix()
which generates prefix depending on arguments.const EXPORT_PREFIX_TYPE prefix_type
argument to CPropertyEnum and CPropertyEnumState class which handles export of enumeration type properties.getPanel()
methods to StatusBar widget.OutlineMask
you may use to draw outline for your widgets if they are being managed by Form Builder and initially(when no content is set) aren't visible(there is nothing to draw).DesignDPI
containing default DPI value being used to design widgets.void(*OnDialogBoxActivate)(IForm *sender, IDialogBox *control);
and void(*OnDialogBoxDeactivate)(IForm *sender, IDialogBox *control);
in form's interface IForm and it's basic implementation in CForm class. Also corresponding notifications void NotifyOnDialogBoxActivate(IDialogBox *control)
and void NotifyOnDialogBoxDeactivate(IDialogBox *control)
were added to form's service interface IFormService and it's basic implementation in CFormService.IDialogBox *getActiveDialogBox()
and bool setActiveDialogBox(IDialogBox *value)
to form's interface IForm and it's basic implementation in CForm class.IControl *control
to ControlSetCaptureKeyboard()
method of helper class CNotifier. This argument is the control getting keyboard capture.IControl *control
to ControlKillCaptureKeyboard()
method of helper class CNotifier. This argument is the control losing keyboard capture.IControl *control
to ControlSetCaptureMouse()
method of helper class CNotifier. This argument is the control getting mouse capture.IControl *control
to ControlKillCaptureMouse()
method of helper class CNotifier. This argument is the control losing mouse capture.IControl *control
to ControlSetFocus()
method of helper class CNotifier. This argument is the control getting keyboard focus.IControl *control
to ControlKillFocus()
method of helper class CNotifier. This argument is the control losing keyboard focus.IControl *control
to ControlSetModal()
method of helper class CNotifier. This argument is the control getting modal state.IControl *control
to ControlKillModal()
method of helper class CNotifier. This argument is the control losing modal state.IControl *control
to MouseHoverControl()
method of helper class CNotifier. This argument is the control below mouse pointer.IControl *control
to MouseLeaveControl()
method of helper class CNotifier. This argument is the control was below mouse pointer.ControlActivate()
and ControlDeactivate()
to helper class CNotifier for sending notification about control activation and deactivation.ControlActivateDialogBox()
and ControlDeactivateDialogBox()
to helper class CNotifier for sending notification about activation and deactivation of dialog box.ControlShow()
and ControlHide()
to helper class CNotifier for sending notification about control becoming visible and invisible.ControlEnable()
and ControlDisable()
to helper class CNotifier for sending notification about control becoming enabled and disabled.ProcessControlDisable()
, ProcessControlHide()
, and ProcessControlDetach()
to form interface IFormService and its default implementation in CFormService class. These methods process form state update during disabling, hiding, and detaching control belonging to a form. Corresponding calls have also been implemented in control's base implementation in CControl class.NotifyOnDialogBoxActivate()
and NotifyOnDialogBoxDeactivate()
to IComponentService and its default implementataion class CComponentService. Also corresponding events OnDialogBoxActivate()
and OnDialogBoxDeactivate()
where added to IComponent and its default implementataion class CComponent.isDialogBox()
to IPackageControl interface and its base implementation in CPackageControl class.const String &dialog_box
to methods Export()
of IEvent and IEventList interfaces and all theirs implementation. This argument contains dialog box class name when exporting as dialog box prototype in Form Builder and empty string otherwise.const String &dialog_box
to methods Export()
of IPackageComponent and IPackageControl interfaces and all theirs implementation. This argument contains dialog box class name when exporting as dialog box prototype in Form Builder and empty string otherwise.isStaticTabOrder()
and setter setStaticTabOrder()
to IControl interface and its implementation in CControl class. This new property is used to prevent changing control and its children tab order automatically when adding it to a form and is used by modal dialog boxes.UseDialogBox
has been added to ColorDialog, FindDialog, and ReplaceDialog widgets. The property allows to control how widget should be used: as dialog box or regular form(by default). Also event OnApply
to notify about successful close of modal form or dialog box was added to ColorDialog widget.ReleaseModal()
method to IForm and form default implementation in CForm to handle passing modal state between controls.isUseDialogBoxes()
method to IApplication indicating whether application should try to use forms in form of dialog boxes instead or regular standalone ones.setListener()
method and get by getListener()
method of widget class/interface. Listener is used to get notifications about certain actions of widget and is used by widget parents.listener
to IPackageComponent and its implementations to provide ability to receive notifications about some actions performed by package components. This feature is widely used in Form Builder. Also the interface IPackageComponentListener describing the listener should be used was added.listener
to IPackageControl and its implementations to provide ability to receive notifications about some actions performed by package controls. This feature is widely used in Form Builder. Also the interface IPackageControlListener describing the listener should be used was added.isGlobal()
to IApplication interface and all its implementations. Method is being used to indicate whether the application object controls entire application and automatically finish it when all forms and windows are closed.bool Save(const String &filename, ITexture *texture, const void *options)
method of the Android CPicture class.isWindowSupported()
into IRenderer interface and corresponding implementation classes.getMinFilter()
, getMagFilter()
, setMinFilter()
, and setMagFilter()
into ITexture interface and corresponding implementation classes to control minifying and magnification filtering modes.setModalControl()
of CForm, which is an implementation of IForm, now can handle changes of modal control automatically. It means untill you pass nullptr as an argument value, previous modal control will become modal again(if there is one). If you want to clear history of modal controls, you have to pass nullptr as argument.CREATE_PARAMS *params
in CForm constructor can be used to overwrite default window creation parameters.Create()
of the IPackageComponent if pass nullptr instead of one or both of the arguments. If both arguments are nullptr, then package also will not be informed about component creation.Create()
of the IPackageControl if pass nullptr instead of one or both of the arguments. If both arguments are nullptr, then package also will not be informed about control creation.Create()
of the IPackageListItem if pass nullptr instead of the argument.SearchFiles()
of CFileSystem class of Android platform can now also search directories if regular file system is used(not assets).Due to minor changes in classes describing package base entities you have to add following changes in you custom events, custom properties and package entities(components, controls, list items, forms, renderers, and styles):
const String &state_prefix
argument) use EXPORT_PREFIX_TYPE enumeration value. Most probably eptNamespaceParent
you need everywhere.eptNamespaceParent
you need everywhere.getNamespace()
method instead.Prefix()
method instead.eptNone
state prefix type from now on.
Instead of removed CleanupOnControlDetach()
method of IFormService use its ProcessControlDetach()
method.
If you have your own components or controls with custom implementation of Export()
method of IPackageComponent or IPackageControl, you should add and take into consideration new argument const String &dialog_box
containing class name of dialog box when exporting as dialog box in Form Builder. You may need to change exporting logic a little depending on whether exporting is being done to dialog box or regular form prototype(but most probably no changes will be required except for adding one more argument to Export()
method.
For all your custom widgets which create list items and child widgets via CreateListItem()
method of IPackageComponent and IPackageControl or CreateChild()
method of IPackageControl, you should add one more argument, which is a listener, as described in the interfaces. When listener is provided, use its methods for notification of caller about successful creation of list item or child control. Also add check if item and child arguments are not empty before writing values to them. From now on they can be and will be empty in some cases. If your widget shows any modal form before creation list item or child widget(for example, to select list item type to be created and set its default properties) it is also recommended to implement this custom form as dialog box and use dialog box when Application->isUseDialogBoxes()
returns true. See more about dialog boxes here.
As the output directories for the core and packages have been changed, you have to change settings for your projects accordingly. The change is related to Library Directories property of your projects. In previous releases it should have pointed to the directories inside the directory where you unpacked downloaded framework source code. For example, for Debug project configuration and x64 project platform it was like C:\Nitisa-8.0.2\x64\Debug assuming you had unpacked the downloaded file into C:\Nitisa-8.0.2 directory. Starting from these release the library directory is C:\Nitisa-9.0.0\bin\Windows\x64\Debug. Where C:\Nitisa-9.0.0 is a folder with unpacked framework source code. bin is predefined name for output binaries of Nitisa projects. Windows means target OS. In case of Android OS it should be Android, and so on. x64 is a project target platform and Debug is a project target configuration.
If you are using Nitisa extension for Visual Studio and want to migrate your old projects to it, you need to change library path to $(ALLUSERSPROFILE)\Nitisa\9.0.0\Windows\x64\Debug. Where $(ALLUSERSPROFILE) is predefined Visual Studio macros expanding usually to C:\ProgramData directory. After it the Nitisa is the directory called the same as the framework name and the 9.0.0 is the farmework version. Meaning of the other folders you know from previous paragraph. Additionally you have to change include pathes. As you might know in standalone installation they are like C:\Nitisa-9.0.0 and C:\Nitisa-9.0.0\Packages. In case of extension they should be $(MSBuildExtensionsPath)\Nitisa\9.0.0 and $(MSBuildExtensionsPath)\Nitisa\9.0.0\Packages respectfully.
In your own built-in controls you have to add NotifyOnPasteString()
method as described in IBuiltInControl interface and either left it empty just returning false or implement corresponding string pasting feature if your built-in control supports one.
Whereever you call window's or form's CopyStringFromClipboard()
method, change its implementation as it now returns bool value instead of string. Perform actual pasting as described below.
In your own controls supporting copy-pasting you have to add NotifyOnPasteString()
method to control's service accordingly to IControlService interface and implement pasting string passed in parameter there. If you use built-in controls supporting the feature you may redirect that notification to it by calling it's corresponding method(has the same name).
Wherever you use KEY enumeration codes keyBack, keyCapital, keyScroll, keyOem1, keyOem2, keyOem3, keyOem4, keyOem5, keyOem6, keyOem7 rename them to keyBackspace, keyCapsLock, keyScrollLock, keySemicolon, keySlash, keyTilde, keyLeftBracket, keyBackSlash, keyRightBracket, keyApostrophe respectfully.
Instead of removed IsMaximized
, IsMinimized
, and IsVisible
members from CREATE_PARAMS structure use its State
member. For maximized window use wsMaximized state; for minimized window use wsMinimized state; for invisible window use wsHidden state.
As all platform dependent header files have been removed from include parts of all header files you have to include them into your own header or source files if you are using platform dependent functions/types/ and so on. For example, if you have #include "Standard/Platform/Windows/Window.h"
in you source file and you are using some Windows functions there, you have to add #include <Windows.h>
as well now.