summaryrefslogtreecommitdiffstats
path: root/dist/changes-3.0.0
diff options
context:
space:
mode:
Diffstat (limited to 'dist/changes-3.0.0')
-rw-r--r--dist/changes-3.0.0720
1 files changed, 720 insertions, 0 deletions
diff --git a/dist/changes-3.0.0 b/dist/changes-3.0.0
new file mode 100644
index 0000000000..819bc0c306
--- /dev/null
+++ b/dist/changes-3.0.0
@@ -0,0 +1,720 @@
+Qt 3.0 adds a wide range of major new features as well as substantial
+improvements over the Qt 2.x series. Some internals have undergone
+major redesign and new classes and methods have been added.
+
+The Qt version 3.x series is not binary compatible with the 2.x
+series. This means programs compiled with Qt version 2.x must be
+recompiled to work with Qt 3.0.
+
+In addition to the traditional Qt platforms Linux, Unix and the
+various flavours of MS-Windows. Qt 3.0 for the first time introduces a
+native port to MacOS X. Like all Qt versions, Qt/Mac is source
+compatible with the other editions and follows closely the platform's
+native look and feel guidelines.
+
+We have tried to keep the API of Qt 3.0 as compatible as possible with
+the Qt 2.x series. For most applications, only minor changes will be
+needed to compile and run them successfully using Qt 3.0.
+
+One of the major new features that has been added in the 3.0 release
+is a module allowing you to easily work with databases. The API is
+platform independent and database neutral. This module is seamlessly
+integrated into Qt Designer, greatly simplifying the process of
+building database applications and using data aware widgets.
+
+Other major new features include a plugin architecture to extend Qt's
+functionality, for styles, text encodings, image formats and database
+drivers. The Unicode support of Qt 2.x has been greatly enhanced, it
+now includes full support for scripts written from right to left
+(e.g. Arabic and Hebrew) and also provides improved support for Asian
+languages.
+
+Many new classes have been added to the Qt Library. Amongst them are
+classes that provide a docking architecture (QDockArea/QDockWindow), a
+powerful rich text editor (QTextEdit), a class to store and access
+application settings (QSettings) and a class to create and communicate
+with processes (QProcess).
+
+Apart from the changes in the library itself a lot has been done to
+make the development of Qt applications with Qt 3.0 even easier than
+before. Two new applications have been added: Qt Linguist is a tool to
+help you translate your application into different languages; Qt
+Assistant is an easy to use help browser for the Qt documentation that
+supports bookmarks and can search by keyword.
+
+Another change concerns the Qt build system, which has been reworked
+to make it a lot easier to port Qt to new platforms. You can use this
+platform independent build system - called qmake - for your own
+applications.
+
+And last but not least we hope you will enjoy the revisited and widely
+extended documentation.
+
+
+Qt/Embedded
+----------
+
+Qt/Embedded 3.0 provides the same features as Qt 3.0, but currently
+lacks some of the memory optimizations and fine-tuning capabilities of
+Qt/Embedded 2.3.x. We will add these in the upcoming maintainance
+releases.
+
+If you develop a new product based on Qt/Embedded, we recommend
+switching to 3.0 because of the greatly improved functionality.
+However, if you are planning a release within the next two months and
+require memory optimizations not available with Qt/Embedded 3.0, we
+suggest using Qt/Embedded 2.3.x.
+
+
+The Qt Library
+========================================
+
+A large number of new features has been added to Qt 3.0. The following
+list gives an overview of the most important new and changed aspects
+of the Qt library.
+
+
+Database support
+----------------
+
+One of the major new features in Qt 3.0 is the SQL module that
+provides cross-platform access to SQL databases, making database
+application programming with Qt seamless and portable. The API, built
+with standard SQL, is database-neutral and software development is
+independent of the underlying database.
+
+A collection of tightly focused C++ classes are provided to give the
+programmer direct access to SQL databases. Developers can send raw SQL
+to the database server or have the Qt SQL classes generate SQL queries
+automatically. Drivers for Oracle, PostgreSQL, MySQL and ODBC are
+available and writing new drivers is straightforward.
+
+Tying the results of SQL queries to GUI components is fully supported
+by Qt's SQL widgets. These classes include a tabular data widget
+(for spreadsheet-like data presentation with in-place editing), a
+form-based data browser (which provides data navigation and edit
+functions) and a form-based data viewer (which provides read-only
+forms). This framework can be extended by using custom field editors,
+allowing for example, a data table to use custom widgets for in-place
+editing. The SQL module fully supports Qt's signals/slots mechanism,
+making it easy for developers to include their own data validation and
+auditing code.
+
+Qt Designer fully supports Qt's SQL module. All SQL widgets can be
+laid out within Qt Designer, and relationships can be established
+between controls visually. Many interactions can be defined purely in
+terms of Qt's signals/slots mechanism directly in Qt Designer.
+
+
+Explicit linking and plugins
+-------------------------
+
+The QLibrary class provides a platform independent wrapper for runtime
+loading of shared libraries.
+
+Specialized classes that make it possible to extend Qt's functionality
+with plugins: QStylePlugin for user interface styles, QTextCodecPlugin
+for text encodings, QImageFormatPlugin for image formats and
+QSqlDriverPlugin for database drivers.
+
+It is possible to remove unused components from the Qt library, and
+easy to extend any application with 3rd party styles, database drivers
+or text codecs.
+
+Qt Designer supports custom widgets in plugins, and will use the
+widgets both when designing and previewing forms (QWidgetPlugin).
+
+
+Rich text engine and editor
+---------------------------
+
+The rich text engine originally introduced in Qt 2.0 has been further
+optimized and extended to support editing. It allows editing formatted
+text with different fonts, colors, paragraph styles, tables and
+images. The editor supports different word wrap modes, command-based
+undo/redo, multiple selections, drag and drop, and many other
+features. The engine is highly optimized for proccesing and displaying
+large documents quickly and efficiently.
+
+
+Unicode
+-------
+
+Apart from the rich text engine, another new feature of Qt 3.0 that
+relates to text handling is the greatly improved Unicode support. Qt
+3.0 includes an implementation of the bidirectional algorithm (BiDi)
+as defined in the Unicode standard and a shaping engine for Arabic,
+which gives full native language support to Arabic and Hebrew speaking
+people. At the same time the support for Asian languages has been
+greatly enhanced.
+
+The support is almost transparent for the developer using Qt to
+develop their applications. This means that developers who developed
+applications using Qt 2.x will automatically gain the full support for
+these languages when switching to Qt 3.0. Developers can rely on their
+application to work for people using writing systems different from
+Latin1, without having to worry about the complexities involved with
+these scripts, as Qt takes care of this automatically.
+
+
+Docked and Floating Windows
+---------------------------
+
+Qt 3.0 introduces the concept of dock windows and dock areas. Dock
+windows are widgets, that can be attached to, and detached from, dock
+areas. The most common kind of dock window is a tool bar. Any number of
+dock windows may be placed in a dock area. A main window can have dock
+areas, for example, QMainWindow provides four dock areas (top, left,
+bottom, right) by default. The user can freely move dock windows and
+place them at a convenient place in a dock area, or drag them out of
+the application and have them float freely as top level windows in
+their own right. Dock windows can also be minimized or hidden.
+
+For developers, dock windows behave just like ordinary widgets. QToolbar
+for example is now a specialized subclass of a dock window. The API
+of QMainWindow and QToolBar is source compatible with Qt 2.x, so
+existing code which uses these classes will continue to work.
+
+
+Regular Expressions
+-------------------
+
+Qt has always provided regular expression support, but that support
+was pretty much limited to what was required in common GUI control
+elements such as file dialogs. Qt 3.0 introduces a new regular
+expression engine that supports most of Perl's regex features and is
+Unicode based. The most useful additions are support for parentheses
+(capturing and non-capturing) and backreferences.
+
+
+Storing application settings
+----------------------------
+
+Most programs will need to store some settings between runs, for
+example, user selected fonts, colors and other preferences, or a list
+of recently used files. The new QSettings class provides a platform
+independent way to achieve this goal. The API makes it easy to store
+and retrieve most of the basic data types used in Qt (such as basic
+C++ types, strings, lists, colors, etc). The class uses the registry
+on the Windows platform and traditional resource files on Unix.
+
+
+Creating and controlling other processes
+----------------------------------------
+
+QProcess is a class that allows you to start other programs from
+within a Qt application in a platform independent manner. It gives you
+full control over the started program. For example you can redirect
+the input and output of console applications.
+
+
+Accessibility
+---------------
+
+Accessibility means making software usable and accessible to a wide
+range of users, including those with disabilities. In Qt 3.0, most
+widgets provide accessibility information for assistive tools that can
+be used by a wide range of disabled users. Qt standard widgets like
+buttons or range controls are fully supported. Support for complex
+widgets, like e.g. QListView, is in development. Existing applications
+that make use of standard widgets will become accessible just by using
+Qt 3.0.
+
+Qt uses the Active Accessibility infrastructure on Windows, and needs
+the MSAA SDK, which is part of most platform SDKs. With improving
+standardization of accessibility on other platforms, Qt will support
+assistive technologies on other systems too.
+
+
+XML Improvements
+----------------
+
+The XML framework introduced in Qt 2.2 has been vastly improved. Qt
+2.2 already supported level 1 of the Document Object Model (DOM), a
+W3C standard for accessing and modifying XML documents. Qt 3.0 has
+added support for DOM Level 2 and XML namespaces.
+
+The XML parser has been extended to allow incremental parsing of XML
+documents. This allows you to start parsing the document directly
+after the first parts of the data have arrived, and to continue
+whenever new data is available. This is especially useful if the XML
+document is read from a slow source, e.g. over the network, as it
+allows the application to start working on the data at a very early
+stage.
+
+
+SVG support
+-----------
+
+SVG is a W3C standard for "Scalable Vector Graphics". Qt 3.0's SVG
+support means that QPicture can optionally generate and import static
+SVG documents. All the SVG features that have an equivalent in
+QPainter are supported.
+
+
+Multihead support
+-----------------
+
+Many professional applications, such as DTP and CAD software, are able
+to display data on two or more monitors. In Qt 3.0 the QDesktopWidget
+class provides the application with runtime information about the
+number and geometry of the desktops on the different monitors and such
+allows applications to efficiently use a multi-monitor setup.
+
+The virtual desktop of Windows 98 and 2000 is supported, as well as
+the traditional multi-screen and the newer Xinerama multihead setups
+on X11.
+
+
+X11 specific enhancements
+-------------------------
+
+Qt 3.0 now complies with the NET WM Specification, recently adopted
+by KDE 2.0. This allows easy integration and proper execution with
+desktop environments that support the NET WM specification.
+
+The font handling on X11 has undergone major changes. QFont no longer
+has a one-to-one relation with window system fonts. QFont is now a
+logical font that can load multiple window system fonts to simplify
+Unicode text display. This completely removes the burden of
+changing/setting fonts for a specific locale/language from the
+programmer. For end-users, any font can be used in any locale. For
+example, a user in Norway will be able to see Korean text without
+having to set their locale to Korean.
+
+Qt 3.0 also supports the new render extension recently added to
+XFree86. This adds support for anti-aliased text and pixmaps with
+alpha channel (semi transparency) on the systems that support the
+rendering extension (at the moment XFree 4.0.3 and later).
+
+
+Printing
+--------
+
+Printing support has been enhanced on all platforms. The QPrinter
+class now supports setting a virtual resolution for the painting
+process. This makes WYSIWYG printing trivial, and also allows you to
+take full advantage of the high resolution of a printer when painting
+on it.
+
+The postscript driver built into Qt and used on Unix has been greatly
+enhanced. It supports the embedding of true/open type and type1 fonts
+into the document, and can correctly handle and display Unicode.
+Support for fonts built into the printer has been enhanced and Qt now
+knows about the most common printer fonts used for Asian languages.
+
+
+Networking
+-----------
+
+A new class QHttp provides a simple interface for HTTP downloads and
+uploads.
+
+
+Compatibility with the Standard Template Library (STL)
+------------------------------------------------------
+
+Support for the C++ Standard Template Library has been added to the Qt
+Template Library (QTL). The QTL classes now contain appropriate copy
+constructors and typedefs so that they can be freely mixed with other
+STL containers and algorithms. In addition, new member functions have
+been added to QTL template classes which correspond to STL-style
+naming conventions (e.g., push_back()).
+
+
+Qt Designer
+========================================
+
+Qt Designer was a pure dialog editor in Qt 2.2 but has now been
+extended to provide the full functionality of a GUI design tool.
+
+This includes the ability to lay out main windows with menus and
+toolbars. Actions can be edited within Qt Designer and then plugged
+into toolbars and menu bars via drag and drop. Splitters can now be
+used in a way similar to layouts to group widgets horizontally or
+vertically.
+
+In Qt 2.2, many of the dialogs created by Qt Designer had to be
+subclassed to implement functionality beyond the predefined signal and
+slot connections. Whilst the subclassing approach is still fully
+supported, Qt Designer now offers an alternative: a plugin for editing
+code. The editor offers features such as syntax highlighting,
+completion, parentheses matching and incremental search.
+
+The functionality of Qt Designer can now be extended via plugins.
+Using Qt Designer's interface or by implementing one of the provided
+interfaces in a plugin, a two way communication between plugin and Qt
+Designer can be established. This functionality is used to implement
+plugins for custom widgets, so that they can be used as real widgets
+inside the designer.
+
+Basic support for project management has been added. This allows you
+to read and edit *.pro files, add and remove files to/from the project
+and do some global operations on the project. You can now open the
+project file and have one-click access to all the *.ui forms in the
+project.
+
+In addition to generating code via uic, Qt Designer now supports the
+dynamic creation of widgets directly from XML user interface
+description files (*.ui files) at runtime. This eliminates the need of
+recompiling your application when the GUI changes, and could be used
+to enable your customers to do their own customizations. Technically,
+the feature is provided by a new class, QWidgetFactory in the
+UI-library.
+
+
+Qt Linguist
+========================================
+
+Qt Linguist is a GUI utility to support translating the user-visible
+text in applications written with Qt. It comes with two command-line
+tools: lupdate and lrelease.
+
+Translation of a Qt application is a three-step process:
+
+ 1) Run lupdate to extract user-visible text from the C++ source
+ code of the Qt application, resulting in a translation source file
+ (a *.ts file).
+ 2) Provide translations for the source texts in the *.ts file using
+ Qt Linguist.
+ 3) Run lrelease to obtain a light-weight message file (a *.qm file)
+ from the *.ts file, which provides very fast lookup for released
+ applications.
+
+Qt Linguist is a tool suitable for use by translators. Each
+user-visible (source) text is characterized by the text itself, a
+context (usually the name of the C++ class containing the text), and
+an optional comment to help the translator. The C++ class name will
+usually be the name of the relevant dialog, and the comment will often
+contain instructions that describe how to navigate to the relevant
+dialog.
+
+You can create phrase books for Qt Linguist to provide common
+translations to help ensure consistency and to speed up the
+translation process. Whenever a translator navigates to a new text to
+translate, Qt Linguist uses an intelligent algorithm to provide a list
+of possible translations: the list is composed of relevant text from
+any open phrase books and also from identical or similar text that has
+already been translated.
+
+Once a translation is complete it can be marked as "done"; such
+translations are included in the *.qm file. Text that has not been
+"done" is included in the *.qm file in its original form. Although Qt
+Linguist is a GUI application with dock windows and mouse control,
+toolbars, etc., it has a full set of keyboard shortcuts to make
+translation as fast and efficient as possible.
+
+When the Qt application that you're developing evolves (e.g. from
+version 1.0 to version 1.1), the utility lupdate merges the source
+texts from the new version with the previous translation source file,
+reusing existing translations. In some typical cases, lupdate may
+suggest translations. These translations are marked as unfinished, so
+you can easily find and check them.
+
+
+Qt Assistant
+========================================
+
+Due to the positive feedback we received about the help system built
+into Qt Designer, we decided to offer this part as a separate
+application called Qt Assistant. Qt Assistant can be used to browse
+the Qt class documentation as well as the manuals for Qt Designer and
+Qt Linguist. It offers index searching, a contents overview, bookmarks
+history and incremental search. Qt Assistant is used by both Qt
+Designer and Qt Linguist for browsing their help documentation.
+
+
+qmake
+========================================
+
+qmake is a cross-platform make utility that makes it possible to build
+the Qt library and Qt-based applications on various target platforms
+from one single project description. It is the C++ successor of
+'tmake' which required Perl.
+
+qmake offers additional functionallity that is difficult to reproduce
+in tmake. Qt uses qmake in its build system and we have released it as
+free software.
+
+
+
+Detailed changes
+=============
+
+Qt 3.0 went through 6 beta releases. These are the detailed changes
+since Beta 6 only. For other changes, please see the changes notes
+of the respective beta releases.
+
+
+Qt 3.0 final is not binary compatible with Beta6; any programs linked
+against Beta6 must be recompiled.
+
+Below you will find a description of general changes in the Qt
+Library, Qt Designer and Qt Assistant. Followed by a detailed list of
+changes in the API.
+
+****************************************************************************
+* General *
+****************************************************************************
+
+****************************************************************************
+* Library *
+****************************************************************************
+
+- QApplication
+ make sure we process deferred deletes before leaving the event
+ loop. This fixes some ocassions of memory leaks on exit.
+ win32: some improvements for modality and dockwindow handling
+ x11 only: read non-gui QSettings when running without GUI.
+
+
+- QCheckListItem
+ Make the checkboxes respect the AlignCenter flag. Also make
+ the boxes look better in case they are not placed in the first
+ column.
+
+- QComboBox
+ if we have a currentItem and then we set the combobox to be
+ editable then set the text in the lineedit to be of the
+ current item.
+
+- QCommonStyle
+ QToolButton: spacing between a toolbutton's icon and its label.
+ QProgressBar: text color fixed.
+
+- QCursor
+ added the What's This? cursor to the collection.
+
+- QDataTable
+ fixed broken context menus.
+
+- QDate
+ fixed addMonth() overflow.
+
+- QDesktopWidget
+ win32 only: works now also for cases where the card handles
+ multiple monitors and GetSystemMetrics returns a single screen
+ only.
+
+- QDomAttr
+ fixed a memory leak in setNodeValue()
+
+- QDomNodeMap
+ added count() as a Qt-style alias for length()
+
+- QDragObject
+ default to the middle of the pixmap as a hot spot, this looks
+ nicer.
+
+- QFileDialog (internal dialog)
+ make viewMode() return the correct value even after the dialog
+ is finished. Fixed getOpenFileName and getSaveFileName for
+ non-existant directories. Make sure that when it's in
+ directory mode that the filters reflect this, and change the
+ label from file name to directory.
+ win32 only: Improved modality when using the native file
+ dialog.
+
+- QFont
+ x11 only: speed up fontloading with even more clever
+ caching. Make sure we can match scaled bitmap fonts by
+ default. Do not load a backup font for a script that is not
+ default. Make sure the pixel size is correct, even for fonts
+ that are unavailable. Try even harder to find a fontname that
+ is not understood. Some RENDER performance optimizations.
+
+- QFontDialog
+ make sure the content is set up correctly when initializing
+ the dialog.
+
+- QGLWidget
+ IRIX only: fixed reparent/resize bug, QGLContext::setContext()
+ is incredibly sensitive on different X servers.
+
+- QHeader
+ fixed missing updates on height resp. width changes like the
+ occur when changing the application font.
+
+- QIconView
+ fixed updates of non-auto-arranged views.
+
+- QImage
+ no gamma correction by default.
+ x11 only: some alignment issue with the alpha masked fixed.
+
+- QIODevice
+ fixed return value of QIODevice::readLine() for sequential
+ access.
+
+- QKeyEvent
+ win32 only: generate Direction_R/L events for bidirectional
+ input.
+
+- QLabel
+ handle setPixmap( *pixmap() ) gracefully. Apply the WordBreak
+ alignment flag to both plaintext and richtext. Improved alignment of
+ richtext labels. Removed some sizepolicy magic, QLabel now
+ works fine with Preferred/Preferred in all modes.
+
+- QLineEdit
+ fixed a crash when doing undo and a validator is set. Emit
+ textChanged() also if the text changed because of undo or redo.
+
+- QListBox
+ fixed RMB context-menu offset.
+
+- QListView
+ do not start renaming an item is CTRL or SHIFT is
+ pressed. Start renaming on mouse release, not mouse press, so
+ click + click + move on the same item does not start a rename
+ operation.
+
+- QMainWindow
+ show dock-menu also when clicking on the menubar.
+
+- QPainter
+ win32 only: improved printing performance through printer font
+ caching.
+ boundingRect(): ignore 0-width in the constrain rectangle.
+
+- QPicture
+ added overload for load() that takes a QIODevice.
+
+- QPrintDialog (internal dialog)
+ fixed enabling of the first page and last page labels.
+
+- QPrinter
+ win32 only: make setColorMode() work, some unicode fixes. Make
+ collate the default. Enable the collate checkbox without
+ losing the page selection if you want to print multiple
+ pages. Make the collateCopies property work that it knows
+ checks/unchecks the collate checkbox in the printing
+ dialog. Make settings also work when the print dialog is not
+ shown at all.
+
+- QProcess
+ added a new communication mode that duplicates stderr to
+ stdout (i.e. the equivalent of the shell's 2>&1).
+
+- QPSPrinter (unix)
+ fixed collate.
+
+- QRangeControl
+ simplified code.
+
+- QRichText
+ Propagate WhiteSpaceMode to subitems with
+ WhiteSpaceModeNormal. Hide DisplayModeNone
+ items without additional newline. Fixed links inside non-left
+ aligned tables. Fixed some bidi layout problems. Fixed last
+ line layout in right-aligned paragraphs. For plain text,
+ always use the palette's text color.
+
+- QScrollView
+ safer destruction.
+
+- QSettings
+ win32 only: fixed a dead lock situation when writing
+ to LOCAL_MACHINE, but reading from CURRENT_USER.
+
+- QSGIStyle
+ fixed drawing of checkable menu items.
+
+- QSimpleRichText
+ use the specified default font.
+
+- QSlider
+ optimized drawing in the new style engine.
+
+- QString
+ QString::replace() with a regular expression requires a
+ QRegExp object, passing a plain string will cause a compile
+ error.
+
+- QStyleSheet
+ additional parameter 'whitespacemode' for
+ QStyleSheet::convertFromPlainText(). Support for superscript
+ ('sup') and subscript ( 'sub' ).
+
+- QTabBar
+ react properly on runtime font changes, less flicker.
+
+- QTable
+ take the pixmap of a header section into account when
+ adjusting the size.
+
+- QTabWidget
+ use the embedded tabbar as focus proxy.
+
+- QThread
+ win32 only: possible crash with the thread dictionary fixed.
+
+- QValidator
+ In Q{Int,Double}Validator, consider '-' as Invalid rather than
+ Intermediate if bottom() >= 0.
+
+- QWidget
+ made showFullScreen() multihead aware.
+ win32 only: Better size and position restoring when switching
+ between fullscreen, maximized and minimized.
+ x11 only: improvements to XIM, overthespot works correctly
+ now.
+
+- QWorkspace
+ smarter placement of the minimize button when there is no
+ maximize button. Make titlebars of tool windows a bit smaller.
+ Improved styleability. Do not maximize a widget that has a
+ maximum size that is smaller than the workspace.
+
+
+
+****************************************************************************
+* Other *
+****************************************************************************
+
+- moc
+ fixed generation of uncompilable code in conjunction with
+ Q_ENUMS and signal/slots.
+
+- unicode
+ allow keyboard switching of paragraph directionality.
+
+- installation
+ install $QTDIR/doc/html/ instead of $QTDIR/doc/
+ install Qt Designer templates as well.
+
+- improved build on
+ HP-UX with cc.
+ Solaris 8 with gcc 3.0.1.
+ AIX with xlC and aCC.
+
+- inputmethods
+ x11 only: do not reset the input context on focus changes.
+
+- uic
+ smaller improvements, handle additional form signals.
+
+- Qt Designer
+ make it possible to add new signals to a form without
+ subclassing. Minor fixes.
+
+- Qt Assistant
+ fixed Shift-LMB selection bug. Fixed new window and window
+ restoration on restart.
+
+- Qt Linguist
+ change fourth parameter of QApplication::translate() from bool
+ to enum type. This affects MOC (new revision) and lupdate (new
+ syntax to parse). Change Qt Linguist's XML file format (.ts)
+ to be consistent with QApplication:<defaultcodec> (rather than
+ <codec>) to match QApp::defaultCodec(); encoding="UTF-8"
+ (rather than utf8="true") to match QApp::translate(). Fixed
+ window decoration on restart. Use 'finished', 'unfinished' and
+ 'unresolved' instead of the (!), (?) symbols on printouts.
+
+- QMsDev
+ merge "Add UIC" and "New Dialog". Better user interface and
+ general cleanup. Wwrite (and merge) qmake pro file with active
+ project. Load qmake pro files into Visual Studio.
+
+