From 4724650dcc5e5f2291564d809d66bb588d21ddb9 Mon Sep 17 00:00:00 2001 From: vsr Date: Fri, 12 Feb 2016 16:40:51 +0300 Subject: [PATCH] Merge relevant changes from V8_0_0_BR branch --- SalomeJOBMANAGERConfig.cmake.in | 48 ++++++++++++------------ doc/conf.py.in | 2 +- src/genericgui/BL_Buttons.cxx | 5 +++ src/genericgui/BL_Buttons.hxx | 6 ++- src/genericgui/BL_CreateJobWizard.cxx | 4 ++ src/genericgui/BL_CreateJobWizard.hxx | 11 ++++-- src/genericgui/BL_GenericGui.cxx | 8 ++++ src/genericgui/BL_GenericGui.hxx | 9 ++++- src/genericgui/BL_JobTab.cxx | 8 ++++ src/genericgui/BL_JobTab.hxx | 11 +++++- src/genericgui/BL_JobsManager_QT.cxx | 16 +++++++- src/genericgui/BL_JobsManager_QT.hxx | 11 ++++-- src/genericgui/BL_JobsTable.cxx | 3 ++ src/genericgui/BL_JobsTable.hxx | 5 ++- src/genericgui/BL_QModelManager.cxx | 2 + src/genericgui/BL_QModelManager.hxx | 9 +++-- src/genericgui/BL_Summary.cxx | 4 ++ src/genericgui/BL_Summary.hxx | 8 +++- src/genericgui/JM_EditSalomeResource.cxx | 14 +++++++ src/genericgui/JM_EditSalomeResource.hxx | 12 +++++- src/genericgui/JM_ResourceCatalog.cxx | 5 +++ src/genericgui/JM_ResourceCatalog.hxx | 7 +++- src/genericgui/JM_SalomeResource.cxx | 8 ++++ src/genericgui/JM_SalomeResource.hxx | 6 ++- src/salomegui/BL_SalomeGui.cxx | 3 ++ src/standalone/main.cxx | 4 +- src/wrappers/BL_MainWindows_Qt.cxx | 5 +++ src/wrappers/BL_MainWindows_Qt.hxx | 4 ++ src/wrappers/BL_MainWindows_SALOME.cxx | 7 ++++ src/wrappers/BL_MainWindows_SALOME.hxx | 8 ++-- src/wrappers/BL_MainWindows_Wrap.hxx | 8 +++- 31 files changed, 206 insertions(+), 55 deletions(-) diff --git a/SalomeJOBMANAGERConfig.cmake.in b/SalomeJOBMANAGERConfig.cmake.in index 7dc52f3..e3f5afc 100644 --- a/SalomeJOBMANAGERConfig.cmake.in +++ b/SalomeJOBMANAGERConfig.cmake.in @@ -53,32 +53,34 @@ SET(SALOME_JOBMANAGER_BUILD_DOC @SALOME_BUILD_DOC@) # Level 1 prerequisites: SET_AND_CHECK(GUI_ROOT_DIR_EXP "@PACKAGE_GUI_ROOT_DIR@") -# For all prerequisites, load the corresponding targets if the package was used +# For all prerequisites, load the corresponding targets if the package was used # in CONFIG mode. This ensures dependent projects link correctly # without having to set LD_LIBRARY_PATH: -SET(_PREREQ @_PREREQ_LIST@) -SET(_PREREQ_CONFIG_DIR @_PREREQ_DIR_LIST@) -SET(_PREREQ_COMPONENTS "@_PREREQ_COMPO_LIST@") -LIST(LENGTH _PREREQ_CONFIG_DIR _list_len) -IF(NOT _list_len EQUAL 0) +SET(_PREREQ_@PROJECT_NAME@ @_PREREQ_LIST@) +SET(_PREREQ_@PROJECT_NAME@_CONFIG_DIR @_PREREQ_DIR_LIST@) +SET(_PREREQ_@PROJECT_NAME@_COMPONENTS "@_PREREQ_COMPO_LIST@") +LIST(LENGTH _PREREQ_@PROJECT_NAME@_CONFIG_DIR _list_len_@PROJECT_NAME@) +IF(NOT _list_len_@PROJECT_NAME@ EQUAL 0) # Another CMake stupidity - FOREACH(... RANGE r) generates r+1 numbers ... - MATH(EXPR _range "${_list_len}-1") - FOREACH(_p RANGE ${_range}) - LIST(GET _PREREQ ${_p} _pkg ) - LIST(GET _PREREQ_CONFIG_DIR ${_p} _pkg_dir) - LIST(GET _PREREQ_COMPONENTS ${_p} _pkg_compo) - MESSAGE(STATUS "===> Reloading targets from ${_pkg} ...") - IF(NOT _pkg_compo) - FIND_PACKAGE(${_pkg} REQUIRED NO_MODULE - PATHS "${_pkg_dir}" - NO_DEFAULT_PATH) - ELSE() - STRING(REPLACE "," ";" _compo_lst "${_pkg_compo}") - MESSAGE(STATUS "===> (components: ${_pkg_compo})") - FIND_PACKAGE(${_pkg} REQUIRED NO_MODULE - COMPONENTS ${_compo_lst} - PATHS "${_pkg_dir}" - NO_DEFAULT_PATH) + MATH(EXPR _range_@PROJECT_NAME@ "${_list_len_@PROJECT_NAME@}-1") + FOREACH(_p_@PROJECT_NAME@ RANGE ${_range_@PROJECT_NAME@}) + LIST(GET _PREREQ_@PROJECT_NAME@ ${_p_@PROJECT_NAME@} _pkg_@PROJECT_NAME@ ) + LIST(GET _PREREQ_@PROJECT_NAME@_CONFIG_DIR ${_p_@PROJECT_NAME@} _pkg_dir_@PROJECT_NAME@) + LIST(GET _PREREQ_@PROJECT_NAME@_COMPONENTS ${_p_@PROJECT_NAME@} _pkg_compo_@PROJECT_NAME@) + IF(NOT OMIT_DETECT_PACKAGE_${_pkg_@PROJECT_NAME@}) + MESSAGE(STATUS "===> Reloading targets from ${_pkg_@PROJECT_NAME@} ...") + IF(NOT _pkg_compo_@PROJECT_NAME@) + FIND_PACKAGE(${_pkg_@PROJECT_NAME@} REQUIRED NO_MODULE + PATHS "${_pkg_dir_@PROJECT_NAME@}" + NO_DEFAULT_PATH) + ELSE() + STRING(REPLACE "," ";" _compo_lst_@PROJECT_NAME@ "${_pkg_compo_@PROJECT_NAME@}") + MESSAGE(STATUS "===> (components: ${_pkg_compo_@PROJECT_NAME@})") + FIND_PACKAGE(${_pkg_@PROJECT_NAME@} REQUIRED NO_MODULE + COMPONENTS ${_compo_lst_@PROJECT_NAME@} + PATHS "${_pkg_dir_@PROJECT_NAME@}" + NO_DEFAULT_PATH) + ENDIF() ENDIF() ENDFOREACH() ENDIF() diff --git a/doc/conf.py.in b/doc/conf.py.in index 9569f9d..d2d19d3 100644 --- a/doc/conf.py.in +++ b/doc/conf.py.in @@ -95,7 +95,7 @@ pygments_style = 'sphinx' # The theme to use for HTML and HTML Help pages. Major themes that come with # Sphinx are currently 'default' and 'sphinxdoc'. -html_theme = 'default' +html_theme = '@SPHINX_THEME@' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". diff --git a/src/genericgui/BL_Buttons.cxx b/src/genericgui/BL_Buttons.cxx index 39218c3..bbfdd7f 100644 --- a/src/genericgui/BL_Buttons.cxx +++ b/src/genericgui/BL_Buttons.cxx @@ -19,6 +19,11 @@ #include "BL_Buttons.hxx" +#include +#include +#include +#include + BL::Buttons::Buttons(QWidget * parent) : QWidget(parent) { DEBTRACE("Creating BL::Buttons"); diff --git a/src/genericgui/BL_Buttons.hxx b/src/genericgui/BL_Buttons.hxx index 6329422..fc33b23 100644 --- a/src/genericgui/BL_Buttons.hxx +++ b/src/genericgui/BL_Buttons.hxx @@ -20,10 +20,12 @@ #ifndef _BL_BUTTONS_HXX_ #define _BL_BUTTONS_HXX_ -#include - #include "BL_Traces.hxx" +#include + +class QPushButton; + namespace BL { class Buttons: public QWidget diff --git a/src/genericgui/BL_CreateJobWizard.cxx b/src/genericgui/BL_CreateJobWizard.cxx index 0367950..3006cee 100644 --- a/src/genericgui/BL_CreateJobWizard.cxx +++ b/src/genericgui/BL_CreateJobWizard.cxx @@ -19,6 +19,10 @@ #include "BL_CreateJobWizard.hxx" #include "BL_JobsManager_QT.hxx" + +#include +#include + #ifndef WNT #include #include diff --git a/src/genericgui/BL_CreateJobWizard.hxx b/src/genericgui/BL_CreateJobWizard.hxx index ee6a34a..6245773 100644 --- a/src/genericgui/BL_CreateJobWizard.hxx +++ b/src/genericgui/BL_CreateJobWizard.hxx @@ -20,22 +20,27 @@ #ifndef _BL_CREATEJOBWIZARD_HXX_ #define _BL_CREATEJOBWIZARD_HXX_ -#include - #include "BL_Traces.hxx" #include "BL_SALOMEServices.hxx" #include "JM_ResourceCatalog.hxx" +#include +#include #include #include +class QGridLayout; +class QLabel; +class QLineEdit; +class QListWidget; + namespace Ui { class ResourceRequirementsWizardPage; class FilesWizardPage; class AdvancedParametersWizardPage; } -namespace BL{ +namespace BL { class JobsManager_QT; class JobNamePage; diff --git a/src/genericgui/BL_GenericGui.cxx b/src/genericgui/BL_GenericGui.cxx index 2f773be..2ddc632 100644 --- a/src/genericgui/BL_GenericGui.cxx +++ b/src/genericgui/BL_GenericGui.cxx @@ -19,6 +19,14 @@ #include "BL_GenericGui.hxx" +#include +#include +#include +#include +#include +#include +#include + #ifdef WNT #undef ERROR #endif diff --git a/src/genericgui/BL_GenericGui.hxx b/src/genericgui/BL_GenericGui.hxx index 5130302..e7a9a92 100644 --- a/src/genericgui/BL_GenericGui.hxx +++ b/src/genericgui/BL_GenericGui.hxx @@ -20,8 +20,6 @@ #ifndef _BL_GENERICGUI_HXX_ #define _BL_GENERICGUI_HXX_ -#include - #include "BL_GenericGuiDefines.hxx" #include "BL_Traces.hxx" @@ -38,6 +36,13 @@ #include "BL_Summary.hxx" #include "JM_ResourceCatalog.hxx" +#include + +class QAction; +class QDockWidget; +class QMainWindow; +class QModelIndex; + namespace BL { class BL_GenericGui_EXPORT GenericGui: public QObject diff --git a/src/genericgui/BL_JobTab.cxx b/src/genericgui/BL_JobTab.cxx index c92f5c9..08f962a 100644 --- a/src/genericgui/BL_JobTab.cxx +++ b/src/genericgui/BL_JobTab.cxx @@ -20,6 +20,14 @@ #include "BL_JobTab.hxx" #include "BL_Traces.hxx" +#include +#include +#include +#include +#include +#include +#include + #ifdef WNT #undef ERROR #endif diff --git a/src/genericgui/BL_JobTab.hxx b/src/genericgui/BL_JobTab.hxx index 46e8a81..f6933f6 100644 --- a/src/genericgui/BL_JobTab.hxx +++ b/src/genericgui/BL_JobTab.hxx @@ -20,10 +20,17 @@ #ifndef _BL_JOBTAB_HXX_ #define _BL_JOBTAB_HXX_ -#include - #include "BL_JobsManager_QT.hxx" +#include + +class QFormLayout; +class QLabel; +class QListWidget; +class QModelIndex; +class QStandardItem; +class QStandardItemModel; + namespace BL { class JobTab: public QTabWidget diff --git a/src/genericgui/BL_JobsManager_QT.cxx b/src/genericgui/BL_JobsManager_QT.cxx index d2f3e01..4b20741 100644 --- a/src/genericgui/BL_JobsManager_QT.cxx +++ b/src/genericgui/BL_JobsManager_QT.cxx @@ -19,6 +19,18 @@ #include "BL_JobsManager_QT.hxx" #include "BL_GenericGui.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include using namespace std; @@ -132,8 +144,8 @@ BL::JobsManager_QT::save_jobs_button() filters << "XML files (*.xml)" << "Any files (*)"; dialog.setFileMode(QFileDialog::AnyFile); - dialog.setFilters(filters); - dialog.selectFilter("(*.xml)"); + dialog.setNameFilters(filters); + dialog.selectNameFilter("(*.xml)"); dialog.setDefaultSuffix("xml"); dialog.setConfirmOverwrite(true); dialog.setAcceptMode(QFileDialog::AcceptSave); diff --git a/src/genericgui/BL_JobsManager_QT.hxx b/src/genericgui/BL_JobsManager_QT.hxx index c2155ca..97c4508 100644 --- a/src/genericgui/BL_JobsManager_QT.hxx +++ b/src/genericgui/BL_JobsManager_QT.hxx @@ -20,17 +20,22 @@ #ifndef _BL_JOBSMANAGER_QT_HXX_ #define _BL_JOBSMANAGER_QT_HXX_ -#include - #include "BL_Traces.hxx" #include "BL_JobsManager.hxx" #include "BL_CreateJobWizard.hxx" #include "BL_JobsManager.hxx" #include "BL_QModelManager.hxx" +#include +#include #include -namespace BL{ +class QPushButton; +class QTextEdit; +class QTimer; + +namespace BL +{ class JobManagerEvent : public QEvent { diff --git a/src/genericgui/BL_JobsTable.cxx b/src/genericgui/BL_JobsTable.cxx index 1579a39..c5e9b4c 100644 --- a/src/genericgui/BL_JobsTable.cxx +++ b/src/genericgui/BL_JobsTable.cxx @@ -21,6 +21,9 @@ #include "BL_Traces.hxx" #include "BL_GenericGui.hxx" +#include +#include + BL::JobsTable::JobsTable(QWidget *parent) : QTableView(parent) { DEBTRACE("Creating BL::JobsTable"); diff --git a/src/genericgui/BL_JobsTable.hxx b/src/genericgui/BL_JobsTable.hxx index 23875e2..e48f2b7 100644 --- a/src/genericgui/BL_JobsTable.hxx +++ b/src/genericgui/BL_JobsTable.hxx @@ -20,7 +20,10 @@ #ifndef _BL_JOBSTABLE_HXX_ #define _BL_JOBSTABLE_HXX_ -#include +#include + +class QItemSelection; +class QModelIndex; namespace BL { diff --git a/src/genericgui/BL_QModelManager.cxx b/src/genericgui/BL_QModelManager.cxx index 3eeda35..c7b3884 100644 --- a/src/genericgui/BL_QModelManager.cxx +++ b/src/genericgui/BL_QModelManager.cxx @@ -20,6 +20,8 @@ #include "BL_QModelManager.hxx" #include "BL_JobsManager_QT.hxx" +#include + #ifdef WNT #undef ERROR #endif diff --git a/src/genericgui/BL_QModelManager.hxx b/src/genericgui/BL_QModelManager.hxx index 7b93e0b..7c6fd61 100644 --- a/src/genericgui/BL_QModelManager.hxx +++ b/src/genericgui/BL_QModelManager.hxx @@ -20,11 +20,14 @@ #ifndef _BL_QMODELMANAGER_HXX_ #define _BL_QMODELMANAGER_HXX_ -#include - #include "BL_Job.hxx" -namespace BL{ +#include + +class QStandardItemModel; + +namespace BL +{ class JobsManager_QT; class QModelManager: public QObject diff --git a/src/genericgui/BL_Summary.cxx b/src/genericgui/BL_Summary.cxx index cc87af3..86776f4 100644 --- a/src/genericgui/BL_Summary.cxx +++ b/src/genericgui/BL_Summary.cxx @@ -20,6 +20,10 @@ #include "BL_Summary.hxx" #include "BL_Traces.hxx" +#include +#include +#include + BL::Summary::Summary(QWidget *parent, BL::JobsManager_QT * jobs_manager) : QWidget(parent) { DEBTRACE("Creating BL::Summary"); diff --git a/src/genericgui/BL_Summary.hxx b/src/genericgui/BL_Summary.hxx index 1128508..90aa048 100644 --- a/src/genericgui/BL_Summary.hxx +++ b/src/genericgui/BL_Summary.hxx @@ -20,9 +20,15 @@ #ifndef _BL_SUMMARY_HXX_ #define _BL_SUMMARY_HXX_ -#include #include "BL_JobsManager_QT.hxx" +#include + +class QLabel; +class QModelIndex; +class QStandardItem; +class QStandardItemModel; + namespace BL { class Summary: public QWidget diff --git a/src/genericgui/JM_EditSalomeResource.cxx b/src/genericgui/JM_EditSalomeResource.cxx index edc568e..bbbbd4d 100644 --- a/src/genericgui/JM_EditSalomeResource.cxx +++ b/src/genericgui/JM_EditSalomeResource.cxx @@ -20,6 +20,20 @@ #include "JM_EditSalomeResource.hxx" #include "BL_Traces.hxx" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + using namespace std; JM::EditSalomeResource::EditSalomeResource(QWidget *parent, BL::SALOMEServices * salome_services, diff --git a/src/genericgui/JM_EditSalomeResource.hxx b/src/genericgui/JM_EditSalomeResource.hxx index f80b51d..9a83a75 100644 --- a/src/genericgui/JM_EditSalomeResource.hxx +++ b/src/genericgui/JM_EditSalomeResource.hxx @@ -20,10 +20,18 @@ #ifndef _JM_EDITSALOMERESOURCE_HXX_ #define _JM_EDITSALOMERESOURCE_HXX_ -#include -#include #include "BL_SALOMEServices.hxx" +#include +#include + +class QCheckBox; +class QComboBox; +class QLineEdit; +class QListWidget; +class QPushButton; +class QSpinBox; + namespace JM { class EditSalomeResource: public QDialog diff --git a/src/genericgui/JM_ResourceCatalog.cxx b/src/genericgui/JM_ResourceCatalog.cxx index 4d2ded9..766e947 100644 --- a/src/genericgui/JM_ResourceCatalog.cxx +++ b/src/genericgui/JM_ResourceCatalog.cxx @@ -22,6 +22,11 @@ #include "JM_SalomeResource.hxx" #include "JM_EditSalomeResource.hxx" +#include +#include +#include +#include + JM::ResourceCatalog::ResourceCatalog(QWidget *parent, BL::SALOMEServices * salome_services, bool batch_only) : QWidget(parent), _batch_only(batch_only) diff --git a/src/genericgui/JM_ResourceCatalog.hxx b/src/genericgui/JM_ResourceCatalog.hxx index 9acce25..a9bff6d 100644 --- a/src/genericgui/JM_ResourceCatalog.hxx +++ b/src/genericgui/JM_ResourceCatalog.hxx @@ -20,13 +20,16 @@ #ifndef _JM_RESOURCECATALOG_HXX_ #define _JM_RESOURCECATALOG_HXX_ -#include - #include "BL_SALOMEServices.hxx" +#include #include #include +class QListWidget; +class QListWidgetItem; +class QPushButton; + namespace JM { class ResourceCatalog: public QWidget diff --git a/src/genericgui/JM_SalomeResource.cxx b/src/genericgui/JM_SalomeResource.cxx index 43398b9..84a3531 100644 --- a/src/genericgui/JM_SalomeResource.cxx +++ b/src/genericgui/JM_SalomeResource.cxx @@ -20,6 +20,14 @@ #include "JM_SalomeResource.hxx" #include "BL_Traces.hxx" +#include +#include +#include +#include +#include +#include +#include + JM::SalomeResource::SalomeResource(QWidget *parent, BL::SALOMEServices * salome_services, const std::string & resource_name) : QDialog(parent) { diff --git a/src/genericgui/JM_SalomeResource.hxx b/src/genericgui/JM_SalomeResource.hxx index 62f26d3..de9a633 100644 --- a/src/genericgui/JM_SalomeResource.hxx +++ b/src/genericgui/JM_SalomeResource.hxx @@ -20,11 +20,15 @@ #ifndef _JM_SALOMERESOURCE_HXX_ #define _JM_SALOMERESOURCE_HXX_ -#include #include "BL_SALOMEServices.hxx" +#include #include +class QCheckBox; +class QLineEdit; +class QListWidget; + namespace JM { class SalomeResource: public QDialog diff --git a/src/salomegui/BL_SalomeGui.cxx b/src/salomegui/BL_SalomeGui.cxx index 91e2609..5cd5d3d 100644 --- a/src/salomegui/BL_SalomeGui.cxx +++ b/src/salomegui/BL_SalomeGui.cxx @@ -20,6 +20,9 @@ #include "BL_SalomeGui.hxx" #include "JOBMANAGER_version.h" +#include +#include + BL::SalomeGui::SalomeGui() : MainWindows_SALOME("JobManager") { DEBTRACE("Creating BL::SalomeGui"); diff --git a/src/standalone/main.cxx b/src/standalone/main.cxx index 94960f5..0e7d089 100644 --- a/src/standalone/main.cxx +++ b/src/standalone/main.cxx @@ -17,10 +17,12 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include #include "BL_GenericGui.hxx" #include "BL_MainWindows_Qt.hxx" +#include +#include + int main(int argc, char *argv[]) { QApplication app(argc, argv); diff --git a/src/wrappers/BL_MainWindows_Qt.cxx b/src/wrappers/BL_MainWindows_Qt.cxx index 86a0403..0fdcca9 100644 --- a/src/wrappers/BL_MainWindows_Qt.cxx +++ b/src/wrappers/BL_MainWindows_Qt.cxx @@ -19,6 +19,11 @@ #include "BL_MainWindows_Qt.hxx" +#include +#include +#include +#include + BL::MainWindows_Qt::MainWindows_Qt(QMainWindow * main_window) { DEBTRACE("Creating BL::MainWindows_Qt"); diff --git a/src/wrappers/BL_MainWindows_Qt.hxx b/src/wrappers/BL_MainWindows_Qt.hxx index 4604a9c..c85e635 100644 --- a/src/wrappers/BL_MainWindows_Qt.hxx +++ b/src/wrappers/BL_MainWindows_Qt.hxx @@ -32,8 +32,12 @@ #endif #include "BL_MainWindows_Wrap.hxx" + +#include #include +class QMenu; + namespace BL { class BL_Wrappers_Qt_EXPORT MainWindows_Qt : public MainWindows_Wrap, public QObject diff --git a/src/wrappers/BL_MainWindows_SALOME.cxx b/src/wrappers/BL_MainWindows_SALOME.cxx index 2486601..ae46cea 100644 --- a/src/wrappers/BL_MainWindows_SALOME.cxx +++ b/src/wrappers/BL_MainWindows_SALOME.cxx @@ -18,7 +18,14 @@ // #include "BL_MainWindows_SALOME.hxx" + +#include #include +#include +#include +#include + +#include BL::MainWindows_SALOME::MainWindows_SALOME(const QString & module_name) : SalomeApp_Module(module_name) diff --git a/src/wrappers/BL_MainWindows_SALOME.hxx b/src/wrappers/BL_MainWindows_SALOME.hxx index 22cc0c2..39b15bf 100644 --- a/src/wrappers/BL_MainWindows_SALOME.hxx +++ b/src/wrappers/BL_MainWindows_SALOME.hxx @@ -33,13 +33,11 @@ #include "BL_MainWindows_Wrap.hxx" -#include #include -#include -#include -#include -#include +class SalomeApp_Application; +class SUIT_ViewManager; +class SUIT_ViewWindow; namespace BL { diff --git a/src/wrappers/BL_MainWindows_Wrap.hxx b/src/wrappers/BL_MainWindows_Wrap.hxx index f00efd2..d70d2f7 100644 --- a/src/wrappers/BL_MainWindows_Wrap.hxx +++ b/src/wrappers/BL_MainWindows_Wrap.hxx @@ -21,9 +21,15 @@ #ifndef _BL_MAINWINDOWS_WRAP_HXX_ #define _BL_MAINWINDOWS_WRAP_HXX_ -#include #include "BL_Traces.hxx" +#include + +class QAction; +class QIcon; +class QMainWindow; +class QObject; + namespace BL { class MainWindows_Wrap -- 2.30.2