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:

(1) Major Qt3 Widgets:

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).

(2) Minor Qt3 Widgets and other Qt3 classes:

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.

(3) Uses of Qt3 Compatibility Methods

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:

Appendix A: Remaining Qt3 Widgets

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

---

Appendix B: Remaining Uses of Qt3 Compatibility Methods

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
QAction construction 654
QHBoxLayout and
QVBoxLayout construction
117
QPushButton construction 134
QLabel construction 131
QLineEdit construction 21
QComboBox construction 27
QSpinBox construction 2
QFrame construction 63
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

---