You can find information about existing projects upgrading in the article Upgrade project.
class_nameso 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.
OnMouseLeaveevent 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.
IsVisiblefrom CREATE_PARAMS structure as they were redundant and can be completely replaced by
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 &nsargument to constructors of CPackageEntity, CPackageComponent, CPackageControl, CPackageListItem, CPackageForm, CPackageRenderer, and CPackageStyle base package classes.
const EXPORT_PREFIX_TYPE state_prefix_typeindicating 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_typeargument to CPropertyEnum and CPropertyEnumState class which handles export of enumeration type properties.
getPanel()methods to StatusBar widget.
OutlineMaskyou 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).
DesignDPIcontaining 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.
bool setActiveDialogBox(IDialogBox *value)to form's interface IForm and it's basic implementation in CForm class.
ControlSetCaptureKeyboard()method of helper class CNotifier. This argument is the control getting keyboard capture.
ControlKillCaptureKeyboard()method of helper class CNotifier. This argument is the control losing keyboard capture.
ControlSetCaptureMouse()method of helper class CNotifier. This argument is the control getting mouse capture.
ControlKillCaptureMouse()method of helper class CNotifier. This argument is the control losing mouse capture.
ControlSetFocus()method of helper class CNotifier. This argument is the control getting keyboard focus.
ControlKillFocus()method of helper class CNotifier. This argument is the control losing keyboard focus.
ControlSetModal()method of helper class CNotifier. This argument is the control getting modal state.
ControlKillModal()method of helper class CNotifier. This argument is the control losing modal state.
MouseHoverControl()method of helper class CNotifier. This argument is the control below mouse pointer.
MouseLeaveControl()method of helper class CNotifier. This argument is the control was below mouse pointer.
ControlDeactivate()to helper class CNotifier for sending notification about control activation and deactivation.
ControlDeactivateDialogBox()to helper class CNotifier for sending notification about activation and deactivation of dialog box.
ControlHide()to helper class CNotifier for sending notification about control becoming visible and invisible.
ControlDisable()to helper class CNotifier for sending notification about control becoming enabled and disabled.
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.
NotifyOnDialogBoxDeactivate()to IComponentService and its default implementataion class CComponentService. Also corresponding events
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_boxto 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_boxto 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.
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.
UseDialogBoxhas 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
OnApplyto 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.
listenerto 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.
listenerto 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.
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 *paramsin 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_prefixargument) use EXPORT_PREFIX_TYPE enumeration value. Most probably
eptNamespaceParentyou need everywhere.
eptNamespaceParentyou need everywhere.
eptNonestate prefix type from now on.
Instead of removed
CleanupOnControlDetach() method of IFormService use its
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
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
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.