Qt4 Port Completion for RiverWare 6.4 / Analysis, May 2013
Phil Weinstein, CADSWES, edit 5-15-2013
These two appendices provide details for this overview:
The remaining major widgets to be ported are Q3ListViews in about ten (10) DbDmi dialogs. Some additional analysis and guidance from Bill will be helpful. On quickly reviewing this list of dialogs and lists, Bill concludes that all can be done using simpler (item-based) QTreeWidgets; it will not be necessary to implement model-view classes.
In general, each list can be ported within 2 to 3 days. Much of this time is for testing, and some setup will be needed to test the GUIs for the database applications (in particular, HDB). A more precise estimate could be made after a better analysis of these dialogs, but it seems to be about two weeks (10 days) of work. (revised).
These include Q3MainWindows (fairly simple being that we aren't using docked child windows), Q3PopupMenus, Q3ToolBars, Q3Frames, Q3GroupBoxes, Q3WidgetStacks, Q3ButtonGroups, Q3ActionGroups, Q3TextEdits, Q3PtrLists, and a few other classes. The porting of only a few of these involve behaviors needing testing.
See the analysis document above. The main part of this process involves disabling the Qt compatibility library for individual .cpp files, removing the resulting compilation errors, and running to look for warnings about incorrect Qt signal/slot connections. It's difficult to confidently estimate this work precisely, but I'm attempting an estimate by counting the files needing to be processed and the number of items in these files based on a representative subset of Qt3 compatibility methods.
There are about 200 .cpp files needing to be processed, with an average of about 15 items per file among the representative set of Qt3 compatibility methods (so maybe twice that number will need processing). Based on the substantially complete processing of the QtSCT files recently completed, about "15 files per day" may be about right. After that, we may need another week to address other issues, including changing the build to link without the Qt compatibility library:
Remaining Qt3 widget instances in RiverWare 6.4 / edit 5-13-2013 (1) MAJOR QT3 WIDGETS: LISTS (all in DbDmi) ................. 11 (2) MINOR QT3 ENTITIES (subclasses and instances) ........... 62 (3) OTHER SIGNIFICANT QT3 USES .............................. 15 ============================ (1) MAJOR QT3 WIDGETS: LISTS (all in DbDmi) ============================ Seven DbDmi dialogs which need to be ported. Bill should provide some analysis and guidance for this work: (1) DbDmi/DatasetMgrDlgWidgets.ui: Q3ListView _datasetListView (2) DbDmi/DbDmiMgr.hpp: Q3ListView _listview (3) DbDmi/DbDmiImpExpDlgWidgets.ui: Q3ListView _objListview (4) DbDmi/HdbMetaDataDlgWidgets.ui: Q3ListView _metaDataListView (5) DbDmi/HdbModelRunIdDlgWidgets.ui: Q3ListView _mridListView (6) DbDmi/NameMapDlgWidgets.ui: GenListView _pairListView (7) DbDmi/NameMapMgrDlgWidgets.ui: Q3ListView _nameMapListView The disposition of this dialog (with two lists) needs careful consideration: (8) DbDmi/DssDatasetDlgWidgets.ui: GenListView _pairListView (9) DbDmi/DssDatasetDlgWidgets.ui: GenListView _partsListView This dialog (with two lists) has been functionally replaced with a Qt4-implemented interface: (10) DbDmi/DbDmiDlgWidgets.ui: GenListView _datasetListView (11) DbDmi/DbDmiDlgWidgets.ui: GenListView _pairListView Related Qt3 List Item Subclasses for the DbDmi dialogs listed above: DbDmi/DatasetDlg.Cfg.hpp: class DatasetDlg::ConfigFrame::ListViewItem DbDmi/DatasetMgrDlg.hpp: class DatasetMgrDlg::ListViewItem DbDmi/DbDmiDlg.hpp: class DbDmiDlg::DatasetViewItem DbDmi/DbDmiDlg.hpp: class DbDmiDlg::DatasetViewItem::Child DbDmi/DbDmiDlg.hpp: class DbDmiDlg::DatasetViewItem::DragObj DbDmi/DbDmiDlg.hpp: class DbDmiDlg::PairViewItem DbDmi/DbDmiDlg.hpp: class DbDmiDlg::PairViewItem::Child DbDmi/DbDmiDlg.hpp: class DbDmiDlg::PairViewItem::DragObj DbDmi/DbDmiImpExpDlg.hpp: class DbDmiImpExpDlg::ObjViewItem DbDmi/DssDatasetDlg.hpp: class DssDatasetDlg::ListViewItem DbDmi/DssDatasetDlg.hpp: class DssDatasetDlg::ListViewItem::Child DbDmi/HdbMetaDataDlg.hpp: class HdbMetaDataDlg::ListViewItem DbDmi/NameMapDlg.hpp: class NameMapDlg::ListViewItem DbDmi/NameMapDlg.hpp: class NameMapDlg::ListViewItem::Child DbDmi/NameMapMgrDlg.hpp: class NameMapMgrDlg::ListViewItem ====================== (2) MINOR QT3 ENTITIES (SUBCLASSES and INSTANCES) ====================== Note: Q3MainWindow widgets not having docked child windows are not difficult to port. DbDmi/DatasetMgrDlg.hpp: class DatasetMgrDlg : public Q3MainWindow DbDmi/DbDmiDlg.hpp: class DbDmiDlg : public Q3MainWindow DbDmi/DssDatasetDlg.hpp: class DssDatasetDlg : public Q3MainWindow DbDmi/HdbDatasetDlg.hpp: class HdbDatasetDlg : public Q3MainWindow DbDmi/NameMapDlg.hpp: class NameMapDlg : public Q3MainWindow DbDmi/NameMapMgrDlg.hpp: class NameMapMgrDlg : public Q3MainWindow DbDmi/DatasetDlg.Cfg.hpp: Q3PopupMenu _unitsMenu DbDmi/DatasetMgr.hpp: Q3PtrList<Dataset> _deletedList DbDmi/DatasetMgrDlg.hpp: Q3PopupMenu _datasetMenu DbDmi/DatasetMgrDlgWidgets.ui: Q3MainWindow DatasetMgrDlgWidgets DbDmi/DatasetMgrDlgWidgets.ui: Q3ToolBar _toolbar DbDmi/DbDmiDlg.hpp: Q3PopupMenu _addPairMenu DbDmi/DbDmiDlg.hpp: Q3PopupMenu _sdtMenu DbDmi/DbDmiDlgWidgets.ui: Q3Frame _dmiCfgFrame DbDmi/DbDmiDlgWidgets.ui: Q3GroupBox _datasetGroup DbDmi/DbDmiDlgWidgets.ui: Q3GroupBox _pairGroup DbDmi/DbDmiDlgWidgets.ui: Q3MainWindow DbDmiDlgWidgets DbDmi/DbDmiImpExpDlg.hpp: Q3PopupMenu _itemMenu DbDmi/DbDmiMgr.hpp: Q3PtrList<DlgBase> _delDlgList DbDmi/DbDmiMgr.hpp: Q3PtrList<EditInfo<T>> _delEditList DbDmi/DbDmiMgr.hpp: Q3PtrList<T> _delObjList DbDmi/DssDatasetDlg.hpp: Q3PopupMenu _pairMenu DbDmi/DssDatasetDlgWidgets.ui: Q3MainWindow DssDatasetDlgWidgets DbDmi/HdbDatasetDlgWidgets.ui: Q3ButtonGroup _modelRunIdGroup DbDmi/HdbDatasetDlgWidgets.ui: Q3ButtonGroup _tableTypeGroup DbDmi/HdbDatasetDlgWidgets.ui: Q3GroupBox _realTableBox DbDmi/HdbDatasetDlgWidgets.ui: Q3MainWindow HdbDatasetDlgWidgets DbDmi/HdbDatasetDlgWidgets.ui: Q3WidgetStack _tableTypeWidgetStack DbDmi/HdbModelRunIdEditDlg.hpp: Q3PopupMenu _sePopupMenu DbDmi/HdbModelRunIdEditDlgWidgets.ui: Q3DateTimeEdit _runDtEdit DbDmi/HdbModelRunIdEditDlgWidgets.ui: Q3TextEdit _commentTextEdit DbDmi/NameMapDlgWidgets.ui: Q3MainWindow NameMapDlgWidgets DbDmi/NameMapMgr.hpp: Q3PtrList<NameMap> _deletedList DbDmi/NameMapMgrDlg.hpp: Q3PopupMenu _nameMapMenu DbDmi/NameMapMgrDlgWidgets.ui: Q3MainWindow NameMapMgrDlgWidgets DbDmi/NameMapMgrDlgWidgets.ui: Q3ToolBar _toolBar Q3GUI/ImpExpWorkspaceDlg.hpp: Q3ButtonGroup _annoImportButtonGroup Q3GUI/MultiObjMethSelector.hpp: Q3ActionGroup _testActionGroup_design Q3GUI/PlotDialog.hpp: Q3ActionGroup _exportGroup Q3GUI/PlotDialog.hpp: Q3ActionGroup _similarPlotGroup Q3GUI/PlotDialog.hpp: Q3ActionGroup _printGroup Q3GUI/PlotDialog.hpp: Q3ActionGroup _zoomInGroup Q3GUI/PlotDialog.hpp: Q3ActionGroup _moveGroup Q3GUI/PlotDialog.hpp: Q3ActionGroup _zoomOutGroup Q3GUI/ScenarioMgrDlg.hpp: Q3TextEdit _baselineCommentsEdit Q3GUI/ScenarioMgrDlg.hpp: Q3TextEdit _commentsEdit Q3GUI/SlotTimeseriesRangeQtDlg.hpp: Q3ButtonGroup _colsGroupBox Q3GUI/SlotTimeseriesRangeQtDlg.hpp: Q3GroupBox _timeseriesGroupBox Q3GUI/TimeStepSelPanel.hpp: Q3WidgetStack _sideControlStack QtAccounting/AccountSelectGroupBox.hpp: AccountSelectGroupBox : Q3GroupBox QtAccounting/AcctSubordinationViewerDlg.hpp: Q3ButtonGroup _modeButtonGroup QtAccounting/ObjAcctSumSel.hpp: Q3GroupBox _acctSlotTypeGroupBox QtAccounting/ObjAcctSumSel.hpp: Q3ButtonGroup _columnModeButtonGroup QtAccounting/ObjAcctSumSel.hpp: Q3ButtonGroup _acctTypeButGroup QtAccounting/OpenAccountDlg.hpp: Q3GroupBox _timePropertiesBox QtAccounting/OpenAccountDlg.hpp: Q3GroupBox _pthruPropertiesBox QtRun/SyncControlDlg.hpp: Q3GroupBox _timeIntervalGroupBox QtSCT/SctTimestepAggCfgDlg.hpp: Q3ButtonGroup _aggMethodButtonGroup QtUtils/SlotListPanel.hpp: Q3WidgetStack _orderWidStack ============================== (3) OTHER SIGNIFICANT QT3 USES ============================== DbDmi/DatasetMgrDlg.cpp: Q3PtrList<ListViewItem> delItemList; DbDmi/NameMapMgrDlg.cpp: Q3PtrList<ListViewItem> delItemList; QtSCT/SctAggregationDef.cpp: Q3PtrList<TstepAgg> aggList; Modules using Q3FileDialog: (1) DbDmi/DbDmiImpExpDlg.cpp (2) DbDmi/DbDmiMgr.Diag.cpp (3) DbDmi/DssDatasetDlg.cpp (4) Q3GUI/DiagMgrDlg.cpp (5) Q3GUI/DiagOutputWidget.cpp (6) Q3GUI/ExportImageDlg.cpp (derived subclass) (7) Q3GUI/GusOperation.cpp (8) Q3GUI/ImpExpWorkspaceDlg.cpp (derived subclass) (9) Q3GUI/LoadSaveMgr.cpp (10) Q3GUI/SlotQtDlg.cpp (11) QtSCT/SctDialog.Handlers.cpp (12) QtSCT/SctDialog.cpp ---
This presents an estimate of the number of C++ files containing code using Qt3 compatibility methods, and -- roughly -- the total number of items in those files. This was done by heuristically searching RiverWare source for a representative subset of those methods.
Summary:
I would guess that there are maybe twice as many actual calls to such methods, but the number of files to be processed (about 200) is pretty accurate.
Notes:
Analysis Count Details:
Sample Qt3 compatibility method call | call count | |
1 | QAction construction | 654 |
2 | QHBoxLayout and QVBoxLayout construction |
117 |
3 | QPushButton construction | 134 |
4 | QLabel construction | 131 |
5 | QLineEdit construction | 21 |
6 | QComboBox construction | 27 |
7 | QSpinBox construction | 2 |
8 | QFrame construction | 63 |
9 | QWidget construction | 22 |
10 | QButton setPixmap() | 100 |
11 | QAction activated() signal connection | 828 |
12 | QAction isOn() | 228 |
13 | QAction setToggleAction() | 110 |
14 | setShown() | 221 |
15 | setActiveWindow() | 152 |
16 | QComboBox *urrentItem() | 129 |
17 | close (bool) | 62 |
Total call count: | 2991 |
File List -- RiverWare .cpp files (198) containing calls to Qt3 compatibility methods:
DbDmi/DatasetCfgWidget.cpp
DbDmi/DatasetDlg.Btn.cpp
DbDmi/DatasetDlg.Cfg.cpp
DbDmi/DatasetDlg.Name.cpp
DbDmi/DbDmiDlg.cpp
DbDmi/DbDmiEditDlg.Delegate.cpp
DbDmi/DbDmiEditDlg.cpp
DbDmi/DbDmiImpExpDlg.cpp
DbDmi/DbDmiMgr.Diag.cpp
DbDmi/DssDataTypesDlg.cpp
DbDmi/DssDatasetDlg.cpp
DbDmi/ExcelDatasetDlg.cpp
DbDmi/HdbModelRunIdEditDlg.cpp
DbDmi/NameMapDlg.cpp
Q3GUI/AboutDlg.cpp
Q3GUI/AccountGroupDlg.cpp
Q3GUI/AcctOrderPanel.cpp
Q3GUI/AcctOrderTreeWidget.cpp
Q3GUI/AcctOrderTreeWidgetItem.cpp
Q3GUI/AdjustSlotValsDlg.cpp
Q3GUI/AnnoGroupEditor.cpp
Q3GUI/AnnoGroupMgrDlg.cpp
Q3GUI/AxisDlg.cpp
Q3GUI/BaseQtDlg.cpp
Q3GUI/BaseQtMainWin.cpp
Q3GUI/ChartDlg.cpp
Q3GUI/ColorChooser.cpp
Q3GUI/ConfigSlotsDlg.cpp
Q3GUI/CurveDlg.cpp
Q3GUI/DiagCfgDlg.Panel.cpp
Q3GUI/DiagCfgDlg.cpp
Q3GUI/DiagMgrDlg.cpp
Q3GUI/DiagMsgDataModel.cpp
Q3GUI/DiagOutputColorLegend.cpp
Q3GUI/DiagOutputDlgMgr.cpp
Q3GUI/DiagOutputDockWindow.cpp
Q3GUI/DiagOutputMenuItems.cpp
Q3GUI/DiagOutputQMainWindow.cpp
Q3GUI/DiagOutputWidget.cpp
Q3GUI/DmiMenuItems.cpp
Q3GUI/ExportImageDlg.cpp
Q3GUI/FileInfoDlg.cpp
Q3GUI/FileTypeAssocMgrDlg.cpp
Q3GUI/FloatValueEditor.cpp
Q3GUI/GeoCanvasConfigDlg.cpp
Q3GUI/GreenBookConfigPanel.cpp
Q3GUI/GridDlg.cpp
Q3GUI/GusDialog.cpp
Q3GUI/GusFilter.cpp
Q3GUI/GusFilterControl.cpp
Q3GUI/GusOptionDisplayControl.cpp
Q3GUI/GusPanel.Account.cpp
Q3GUI/GusPanel.SimObj.cpp
Q3GUI/GusPanel.cpp
Q3GUI/GusSelector.cpp
Q3GUI/ImpExpWorkspaceDlg.cpp
Q3GUI/LinkEditorDlg.cpp
Q3GUI/LinkGroupDlg.cpp
Q3GUI/ListSlotDlg.cpp
Q3GUI/LoadSaveMgr.cpp
Q3GUI/MarkerDlg.cpp
Q3GUI/ModelReportConfigDlg.cpp
Q3GUI/ModelReportSettingTree.cpp
Q3GUI/MultiObjMethObjListView.cpp
Q3GUI/MultiObjMethSelConfirmDlg.cpp
Q3GUI/MultiObjMethSelector.cpp
Q3GUI/NoteGroupMgrDlg.cpp
Q3GUI/NumDisplayAttribsPanel.cpp
Q3GUI/ObjectGroupDlg.cpp
Q3GUI/OpenObjectDlg.cpp
Q3GUI/OutputConfigDlg.cpp
Q3GUI/OutputManager.cpp
Q3GUI/PeriodTimeSelector.cpp
Q3GUI/PeriodicSlotCfg.cpp
Q3GUI/PlotDialog.cpp
Q3GUI/PlotDialog.qt.cpp
Q3GUI/PlotDlgSettings.cpp
Q3GUI/PlotPageLayoutButtons.cpp
Q3GUI/PlotPageSelPanel.cpp
Q3GUI/PropagateDlg.cpp
Q3GUI/QGui.cpp
Q3GUI/RwNoticeBox.cpp
Q3GUI/RwQtUtils.cpp
Q3GUI/ScalarSlotDlg.cpp
Q3GUI/ScenarioMgrDlg.cpp
Q3GUI/ScenarioMgrWids.cpp
Q3GUI/ScenarioSandboxDlg.cpp
Q3GUI/ScenarioSlotTreeWidget.cpp
Q3GUI/SimilarPlotsDlg.cpp
Q3GUI/SlotConfigQtDlg.cpp
Q3GUI/SlotDataTableModel.cpp
Q3GUI/SlotPlot.cpp
Q3GUI/SlotQtDlg.cpp
Q3GUI/SlotScaleSliderPanel.cpp
Q3GUI/SlotSetOutputConfigDlg.cpp
Q3GUI/SlotTimeseriesRangeQtDlg.cpp
Q3GUI/SnapMgrObjListView.cpp
Q3GUI/SnapMgrSlotListView.cpp
Q3GUI/SnapshotMgrDlg.cpp
Q3GUI/StatTableSlotDlg.cpp
Q3GUI/SubbasinMgrDlg.cpp
Q3GUI/SupplyGroupDlg.cpp
Q3GUI/TimeStepSelListView.cpp
Q3GUI/TimeStepSelPanel.cpp
Q3GUI/UnitConvertDlg.cpp
Q3GUI/Workspace.cpp
Q3GUI/WorkspaceTreeWidget.cpp
QtAccounting/AccountMgrDlg.cpp
QtAccounting/AccountSelectGroupBox.cpp
QtAccounting/AccountingSysConfigDlg.cpp
QtAccounting/AcctCellColorLegend.cpp
QtAccounting/AcctSubordinationViewerDlg.cpp
QtAccounting/ExchangeCfgDlg.cpp
QtAccounting/ExchangeMgrDlg.cpp
QtAccounting/ObjAcctSumSaveDlg.cpp
QtAccounting/ObjAcctSumSel.cpp
QtAccounting/OpenAccountDlg.cpp
QtAccounting/QtAcctGuiMgr.cpp
QtAccounting/QtAcctUtils.cpp
QtAccounting/SupplyEditor.cpp
QtAccounting/SupplyMgrDlg.cpp
QtAccounting/SupplyNameFormatDlg.cpp
QtDmi/DmiEditorDlg.cpp
QtDmi/DmiHandlerDlg.cpp
QtDmi/DmiMgrDlg.cpp
QtDmi/DmiParamDlg.cpp
QtDmi/DmiParamTreeView.cpp
QtRpl/RowOToggles.cpp
QtRpl/RplAnalysisDlg.cpp
QtRpl/RplBaseDlg.cpp
QtRpl/RplBlockDlg.cpp
QtRpl/RplDisplaySettingsDlg.cpp
QtRpl/RplDlgMgr.cpp
QtRpl/RplDocConfigDlg.cpp
QtRpl/RplExpressionMenu.cpp
QtRpl/RplFrame.cpp
QtRpl/RplFunctionDlg.cpp
QtRpl/RplGroupDlg.cpp
QtRpl/RplObjView.cpp
QtRpl/RplPaletteDlg.cpp
QtRpl/RplPolicyMenu.cpp
QtRpl/RplSearchReplaceDlg.cpp
QtRpl/RplSetDlg.cpp
QtRpl/RplTypeComboBox.cpp
QtRun/DistribPanel.cpp
QtRun/MrmDmiTreeView.cpp
QtRun/MrmPolicyTreeView.cpp
QtRun/MrmRunTreeView.cpp
QtRun/MultiRunControlDlg.cpp
QtRun/MultiRunEditDlg.cpp
QtRun/QtOptParamSubDlg.cpp
QtRun/QtRunControlDlg.cpp
QtRun/QtRunStatusDlg.cpp
QtRun/QtRunSyncDlg.cpp
QtRun/QtSimParamDlg.cpp
QtRun/SimObjDispatchStateButton.cpp
QtRun/SyncControlDlg.cpp
QtRun/USACEMethodsDetailsWidget.cpp
QtSCT/SctDialog.StatusBar.cpp
QtSCT/SctDialog.cpp
QtSCT/SctSetSumFuncDlg.cpp
QtSCT/SctTimestepAggCfgDlg.cpp
QtUtils/BgImageConfigDlg.cpp
QtUtils/BoilerTreeView.cpp
QtUtils/CustomTimeRangeEditorDlg.cpp
QtUtils/DataSelectionStatusFrame.cpp
QtUtils/DisplayCompressPanel.cpp
QtUtils/ExprSlotTreeInspectorDlg.cpp
QtUtils/FindSlotsWithInputsDlg.cpp
QtUtils/GenListView.Item.cpp
QtUtils/GenListView.cpp
QtUtils/GriddedObjDataEditDlg.cpp
QtUtils/GriddedObjDataTable.cpp
QtUtils/MassBalSumDependPanel.cpp
QtUtils/MassBalSummaryDlg.cpp
QtUtils/ObjCoordMgrDlg.cpp
QtUtils/ObjCoordMgrTable.cpp
QtUtils/PartialDateTimeEditor.cpp
QtUtils/RunButtonFrame.cpp
QtUtils/RunParamFrame.cpp
QtUtils/RwGraphicsScene.cpp
QtUtils/RwGraphicsView.cpp
QtUtils/SaveModelConfirmDlg.cpp
QtUtils/SlotIdPanel.cpp
QtUtils/SlotListPanel.cpp
QtUtils/SlotQTreeWidget.cpp
QtUtils/TimestepComboBox.cpp
QtUtils/UnitSchemeMgrDlg.cpp
QtUtils/WorkspaceGfxScene.cpp
Sim/PeriodicSlot.DMI.cpp
Sim/RootFilter.cpp
Sim/RootSel.tab.cpp
Sim/ScalarSlot.DMI.cpp
Sim/SelectionPartBase.cpp
Sim/SeriesSlot.DMI.cpp
Sim/SimWS.cpp
Sim/Slot.cpp
Sim/TableSlot.DMI.cpp
---