RiverWare Qt4 Port Completion
RiverWare Qt4 Port Completion -- Status: January 2010

Author: Phil Weinstein, CADSWES
Status: Ready for review (2).
Edit: 1-9-2010 (b)

Updates:

Sections:

(0) Overview
 
(1) Major High Level Tasks in the Qt4 Port
(1.1) Converting all "Qt Designer" built UI files from Qt3 to Qt4.
(1.2) Replacing all uses of Qt3 classes (widgets, etc) with Qt4 classes.
(1.3) Removing all uses of Qt3-compatibility methods in Qt4 classes.
 
(2) Some RiverWare 5.2 Enumerations
(2.1) RiverWare Qt3 and Qt4 Designer UI Files
(2.2) Dialogs in Qt3 Designer UI Files
(2.3) Dialogs in Qt4 Designer UI Files
(2.4) Dialogs defined in C++ code (not UI files).
(2.5) RiverWare uses of Q3Table
(2.6) RiverWare uses of Q3ListView
(2.7) RiverWare uses of QTableView / QTableWidget (Qt4 Tables)
(2.8) RiverWare uses of QTreeView / QTreeWidget (Qt4 Lists)

(0) Overview

The last few RiverWare releases (5.0, 5.1 and 5.2) have been built with Qt version 4 (4.3 or 4.4) with use of the "Qt3 Compatibility Library". Graphical user interface (GUI) modules in RiverWare are now implemented using a mix of Qt4 widgets and Qt3 widgets (adapted for use with Qt4). To complete the Qt4 port, we need to recode all uses of Qt3 widgets to use instead Qt4 widgets. Benefits of completing the Qt4 port include improved user interface capabilities, performance, and ease of maintenance. Also, it will be important for all Qt3 to be removed from RiverWare before we can move to Qt 5 further down the road. (Plans for Qt 5 have not been announced. Qt is currently at version 4.6).

The major high-level tasks in the Qt4 port completion are:

  1. Converting all "Qt Designer" built UI files from Qt3 to Qt4.
  2. Replacing all uses of Qt3 classes (widgets, etc.) with Qt4 classes.
  3. Removing all uses of Qt3-compatibility methods in Qt4 classes.

Qt 5? ... There doesn't seem to be any statement on the Trolltech / Nokia websites about Qt 5. Here is an informal comment about Qt 5 made by Qt Labs staff 2.5 years ago:

From the Qt Labs Blog:
Reply from Andreas on June 06, 2007

We have no plans to release Qt 5; it's not even on the roadmap. What is on the plan is 4.4 and 4.5, so you can rely on Qt 4 as a stable, yet innovative Qt platform, as we do both minor and patch releases quite often. I personally hope we'll do 4.4, 4.5, 4.6, 4.7, and more. If we ever do release Qt 5, it will be nowhere close to as big a change as what Qt 4 was compared to Qt 3. Now, we don't actually need a Qt 5 release any time soon. There's so much fantastic stuff we and you can do using Qt 4. I firmly believe we'll release plenty of minor versions of Qt 4 before we venture into the Qt 5 area. In fact, all the Widgets On The Canvas work we've done so far is done using unmodified Qt 4.3.

(1) Major High Level Tasks in the Qt4 Port

(1.1) Converting all "Qt Designer" built UI files from Qt3 to Qt4.

Qt Designer is a GUI building program supporting the definition and lay out of widgets for Qt dialogs and other GUI components. Designer maintains widget layout definitions in "UI" (.ui) files. Qt3 and Qt4 UI files have incompatible formats, and Qt4 Designer cannot directly read Qt3 Designer UI files. However, Qt4 provides a "uic3" (UI compiler) tool which has these two capabilities:

  1. "uic3" can be used as part of the automated "make" process to generate C++ code from Qt3 UI files (using the Qt3 Compatibility Library). This is currently done in the RiverWare "make".
  2. "uic3" can be used to convert Qt3 UI files to Qt4 UI files.

The latter capability of "uic3" will be used to convert RiverWare's Qt3 UI files to Qt4 UI files. The process is not entirely automatic. [But see following note]. Hand recoding is required for all custom Qt signal handlers (Qt "slots") defined within the Qt3 UI file. Qt4 Designer doesn't support custom Qt slots. Those Qt slots -- and the signal connections made to them -- need to be written in our C++ code. Also, icons defined in Qt3 UI files need to be handled differently.

[If custom-slots IS actually a problem in Qt4 UI files -- which it doesn't seem to be -- see prior note] ... a reasonable initial step in the Qt3 to Qt4 UI file porting process is the removal of all Qt slots (signal handlers) and signal/slot "connections" from the Qt3 UI files, and recoding them in the each module's C++ code. Careful testing will be necessary for this step because "missing connections" will result in the absence of a feature rather than an observable bug. (Solaris is a preferable platform for this particular work because run-time Qt signal/slot connection errors are reported to the system console -- and we don't see those on Windows).

Note that both uses of Qt4 "uic3" generate both Qt3 and Qt4 widgets. Additional porting described in the next section will be required for most Qt3 to Qt4 translated UI files. That work can make use of Qt4 Designer to replace the remaining Qt3 widgets with Qt4 widgets. (And of course, supporting C++ code will also need to be changed to use the new Qt4 widgets).

Read more in this Trolltech document:

Section (2.0) lists all of the Qt3 and Qt4 UI files in RiverWare 5.2.

(1.2) Replacing all uses of Qt3 classes (widgets, etc) with Qt4 classes.

All uses of the Qt3 Compatibility Library in Qt 4 need to be removed. This applies to both converted UI files and to our own C++ code. In UI files, this can be done mostly in Qt4 Designer -- though it is sometimes convenient to (carefully) directly edit the UI files (which are XML). Conveniently, the names of all Qt3 classes (in the Qt3 Compatibility Library) start with "Q3", e.g. Q3PopupMenu or Q3ListView.

Major tasks include:

Progress on the subsequent step will be made easier when all Qt3 compatibility classes (whose names start with "Q3") have been removed from all C++ header files. But the goal, of course, is to remove references to those classes in all RiverWare code.

(1.3) Removing all uses of Qt3-compatibility methods in Qt4 classes.

Many of the Qt4 classes include also "Qt3 support members" (generally, C++ methods). (See, for example, the Qt4 QMenu class). Many of these are overridden methods, e.g. constructors with many initialization parameters -- those have generally been removed from Qt4. Once the prior step of removing all Qt3 classes form RiverWare header files has been completed, it will be useful to enable or disable availability of the Qt3 Compatibility Library for individual source files -- instead of having that library enabled for the entire build. [This is controlled with the QT3_SUPPORT symbol].

(2) Some RiverWare 5.2 Enumerations

Summary Counts:

    Count      Entity  

Qt3 Widget Count

    
91   Qt3 Designer UI Files      
27   Qt4 Designer UI Files      
91   Dialogs defined in Qt3 Designer UI Files   248  
25   Dialogs defined in Qt4 Designer UI Files   0  
68   Dialogs defined in C++ code   337  

Other Sections Below:

(2.5) RiverWare uses of Q3Table
(2.6) RiverWare uses of Q3ListView
(2.7) RiverWare uses of QTableView / QTableWidget (Qt4 Tables)
(2.8) RiverWare uses of QTreeView / QTreeWidget (Qt4 Lists)

(2.1) RiverWare Qt3 and Qt4 Designer UI Files

Note [1-6-2010]: Not all of these are used in the RiverWare build. Some of these modules were ported to Qt4 (w/ Qt3 compatibility support) by dropping the UI file. Those UI files are currently indicated with a strikeout. (So far, just four have been found -- but there are probably others).

RiverWare Qt3 Designer UI Files
Count: 91
RiverWare Qt4 Designer UI Files
Count: 27
3.3   DbDmi/DatasetMgrDlgBase.ui
3.3   DbDmi/DbDmiDlgBase.ui
3.3   DbDmi/DbDmiEditDlgBase.ui
3.3   DbDmi/DbDmiImpExpDlgBase.ui
3.3   DbDmi/DssDatasetDlgBase.ui
3.3   DbDmi/HdbDatasetDlgBase.ui
3.3   DbDmi/HdbMetaDataDlgBase.ui
3.3   DbDmi/HdbModelRunIdDlgBase.ui
3.3   DbDmi/HdbModelRunIdEditDlgBase.ui
3.3   DbDmi/LoginDlgBase.ui
3.3   DbDmi/NameMapDlgBase.ui
3.3   DbDmi/NameMapMgrDlgBase.ui
4.0   DbDmi/DbDmiImpExpConfirm.ui
4.0   DbDmi/DmiInvocationMgr.ui
4.0   DbDmi/ExcelDatasetDlg.ui
3.3   Q3GUI/AccountGroupDlgBase.ui
3.3   Q3GUI/AdjustSlotValsDlgBase.ui
3.0   Q3GUI/AnnualDayIntervalEditBase.ui
3.3   Q3GUI/AxisDlgBase.ui
3.3   Q3GUI/CanvasConfigDlgBase.ui
3.3   Q3GUI/ConfigSlotsDlgBase.ui
3.3   Q3GUI/CurveDlgBase.ui
3.3   Q3GUI/DiagImpExpDlgBase.ui
3.3   Q3GUI/DiagMgrDlgBase.ui
3.3   Q3GUI/DisplayGroupDlgBase.ui
3.3   Q3GUI/FileInfoDlgBase.ui
3.0   Q3GUI/FloatValueEditorBase.ui
3.3   Q3GUI/GridDlgBase.ui
3.3   Q3GUI/LinkEditorDlgBase.ui
3.3   Q3GUI/LinkGroupDlgBase.ui
3.3   Q3GUI/ListSlotDlgBase.ui
3.3   Q3GUI/LoadFileConfirmDlgBase.ui
3.3   Q3GUI/LocatorDlgBase.ui
3.3   Q3GUI/MarkerDlgBase.ui
3.0   Q3GUI/MarkerMgrDlgBase.ui
3.3   Q3GUI/ObjectGroupDlgBase.ui
3.3   Q3GUI/OpenObjectDlgBase.ui
3.3   Q3GUI/OutputManagerBase.ui
3.3   Q3GUI/PeriodTimeSelectorBase.ui
3.1   Q3GUI/PeriodicSlotCfgBase.ui
3.3   Q3GUI/PlotDlgSettingsBase.ui
3.1   Q3GUI/PlotMembershipDlgBase.ui
3.0   Q3GUI/PlotOpenDlgBase.ui
3.0   Q3GUI/PlotSaveAsDlgBase.ui
3.0   Q3GUI/PlotTitleDlgBase.ui
3.0   Q3GUI/PropagateDlgBase.ui
3.3   Q3GUI/ScenarioMgrDlgBase.ui
3.3   Q3GUI/ScenarioTabForm.ui
3.3   Q3GUI/SlotListDlgBase.ui
3.1   Q3GUI/SpecifyDimsDlgBase.ui
3.3   Q3GUI/StatSlotFilterDlgBase.ui
3.3   Q3GUI/StatTableSlotDlgBase.ui
3.3   Q3GUI/SupplyGroupDlgBase.ui
3.3   Q3GUI/TablePlotColsDlgBase.ui
3.3   Q3GUI/WorkspaceBase.ui
4.0   Q3GUI/AddSlotNotesWidgets.ui
4.0   Q3GUI/FileTypeAssocMgrDlgWidgets.ui
4.0   Q3GUI/GreenBookConfigPanelWidgets.ui
4.0   Q3GUI/NoteGroupMgrDlgWidgets.ui
4.0   Q3GUI/OutputConfigWidgets.ui
4.0   Q3GUI/RplParamDlgWidgets.ui
3.3   QtAccounting/AccountingSystemConfigBase.ui
3.1   QtAccounting/AutoPassThroughAcctDlgBase.ui
3.3   QtAccounting/ExchangeCfgDlgBase.ui
3.3   QtAccounting/ExchangeMgrDlgBase.ui
3.3   QtAccounting/QtAcctMgrDlgBase.ui
3.3   QtAccounting/QtSplyMgrDlgBase.ui
3.3   QtAccounting/SupplyEditorBase.ui
4.0   QtAccounting/DataObjExchBuilderWidgets.ui
3.3   QtDmi/DmiEditorDlgBase.ui
3.3   QtDmi/DmiHandlerDlgBase.ui
3.3   QtDmi/DmiMgrDlgBase.ui
3.3   QtDmi/DmiParamDlgBase.ui
3.1   QtDmi/ListCellDlgBase.ui
3.1   QtDmi/MinMaxCellDlgBase.ui
3.1   QtDmi/RadioBtnDlgBase.ui
 
3.3   QtRpl/RplAnalysisDlgBase.ui
3.3   QtRpl/RplArgEditDlgBase.ui
3.3   QtRpl/RplImportDlgBase.ui
3.3   QtRpl/RplLayoutDlgBase.ui
3.3   QtRpl/RplPaletteDlgBase.ui
3.3   QtRpl/RplPrintDlgBase.ui
3.3   QtRpl/RplSearchDlgBase.ui
3.3   QtRpl/RplSearchReplaceDlgBase.ui
4.0   QtRpl/RplBlockDlgWidgets.ui
4.0   QtRpl/RplDebuggerDlgWidgets.ui
4.0   QtRpl/RplDocConfigDlgWidgets.ui
4.0   QtRpl/RplDocConfigPanelWidgets.ui
4.0   QtRpl/RplFunctionDlgWidgets.ui
4.0   QtRpl/RplGroupDlgWidgets.ui
4.0   QtRpl/RplSetDlgWidgets.ui
3.3   QtRun/MultiRunControlDlgBase.ui
3.3   QtRun/MultiRunEditDlgBase.ui
3.3   QtRun/OptParamDlgBase.ui
3.3   QtRun/OptParamSubDlgBase.ui
3.3   QtRun/ResumeRunDlgBase.ui
3.3   QtRun/RunControlDlgBase.ui
3.3   QtRun/RunStatusDlgBase.ui
3.3   QtRun/RunSyncDlgBase.ui
3.3   QtRun/SimParamDlgBase.ui
3.3   QtRun/movebuttonpanel.ui
 
3.1   QtSCT/SctColorDlgBase.ui
3.3   QtSCT/SctConfigDlgBase.ui
3.3   QtSCT/SctFindSlotDialogBase.ui
3.1   QtSCT/SctLabelFnDlgBase.ui
3.1   QtSCT/SctTimestepAggCfgDlgBase.ui
4.0   QtSCT/SctClipboardExportDlgWidgets.ui
3.3   QtUtils/MessageListBoxBase.ui
3.3   QtUtils/SyncHeaderTestBase.ui
4.0   QtUtils/BgImageConfigPanelWidgets.ui
4.0   QtUtils/ClipboardImportDlgWidgets.ui
4.0   QtUtils/CloseAllDialogsWidgets.ui
4.0   QtUtils/DescriptDisplayWidgets.ui
4.0   QtUtils/FindSlotsWithInputsWidgets.ui
4.0   QtUtils/GeoRefCoordEditorWidgets.ui
4.0   QtUtils/ModelPeriodInfoPanelWidgets.ui
4.0   QtUtils/ReportGenDlgWidgets.ui (mockup)
4.0   QtUtils/SlotIdPanelWidgets.ui

(2.2) Dialogs in Qt3 Designer UI Files

  Q3 Widget Count
1  Q3ButtonGroup 45
2  Q3DateTimeEdit 5
3  Q3Frame 44
4  Q3GroupBox 90
5  Q3ListBox 3
6  Q3ListView 36
7  Q3ProgressBar 2
8  Q3TextEdit 8
9  Q3ToolBar 12
10  Q3WidgetStack 3
  total:  248
   

The table below enumerates the 91 RiverWare dialogs defined in Qt3 Designer UI files.

When translated with the Qt4 (version 4.4.3) uic3 tool, the generated C++ code contains 10 Qt3 Compatibility widget classes (whose names start with "Q3").

The table to the left shows the numbers of all of those Qt3 widgets in the C++ code generated from all 91 dialog Qt3 Designer UI files.

Note that, in certain cases, additional widgets are introduced into these dialogs in the C++ integration code. Those are generally Qt4 widgets, but some are still Qt3. In some cases, the UI file provides a container widget into which a complicated widget is placed, e.g. a QTreeWidget or subclass instance.

Note: [Q3] column = number of Q3 widgets, after translation with Qt 4.4 uic3. The counts don't include the dialog box itself (in the case of dialog boxes derived from Q3MainWindow).
Eight (8) orange rows are for UI files which are not part of the build.

Qt3 Dialog UI Source File
Q3
  Class Name Dialog Type
DbDmi
  DatasetMgrDlgBase.ui:
2
  class DatasetMgrDlgBase : Q3MainWindow
  DbDmiDlgBase.ui:
3
  class DbDmiDlgBase : Q3MainWindow
  DbDmiEditDlgBase.ui:
3
  class DbDmiEditDlgBase : Q3MainWindow
  DbDmiImpExpDlgBase.ui:
1
  class DbDmiImpExpDlg : QDialog
  DssDatasetDlgBase.ui:
0
  class DssDatasetDlgBase : Q3MainWindow
  HdbDatasetDlgBase.ui:
4
  class HdbDatasetDlgBase : Q3MainWindow
  HdbMetaDataDlgBase.ui:
1
  class HdbMetaDataDlgBase : QDialog
  HdbModelRunIdDlgBase.ui:
1
  class HdbModelRunIdDlgBase : QDialog
  HdbModelRunIdEditDlgBase.ui:
2
  class HdbModelRunIdEditDlgBase : QDialog
  LoginDlgBase.ui:
0
  class LoginDlgBase : QDialog
  NameMapDlgBase.ui:
0
  class NameMapDlgBase : Q3MainWindow
  NameMapMgrDlgBase.ui:
2
  class NameMapMgrDlgBase : Q3MainWindow
Q3GUI
  AccountGroupDlgBase.ui:
5
  class AccountGroupDlgBase : QDialog
  AdjustSlotValsDlgBase.ui:
0
  class AdjustSlotValsDlg : QDialog
  AnnualDayIntervalEditBase.ui:
0
  class AnnualDayIntervalEditBase : QDialog
  AxisDlgBase.ui:
8
  class AxisDlgBase : QDialog
  CanvasConfigDlgBase.ui:
3
  class CanvasConfigDlgBase : QDialog
  ConfigSlotsDlgBase.ui:
7
  class ConfigSlotsDlgBase : QDialog
  CurveDlgBase.ui:
7
  class CurveDlgBase : QDialog
  DiagImpExpDlgBase.ui:
4
  class DiagImpExpDlgBase : QDialog
  DiagMgrDlgBase.ui:
2
  class DiagMgrDlgBase : Q3MainWindow
  DisplayGroupDlgBase.ui:
0
  class DisplayGroupDlgBase : Q3MainWindow
  FileInfoDlgBase.ui:
4
  class FileInfoDlgBase : QDialog
  FloatValueEditorBase.ui:
0
  class FloatValueEditorBase : QDialog
  GridDlgBase.ui:
12
  class GridDlgBase : QDialog
  LinkEditorDlgBase.ui:
4
  class LinkEditorDlgBase : QDialog
  LinkGroupDlgBase.ui:
6
  class LinkGroupDlgBase : QDialog
  ListSlotDlgBase.ui:
2
  class ListSlotDlgBase : Q3MainWindow
  LoadFileConfirmDlgBase.ui:
1
  class LoadFileConfirmDlgBase : QDialog
  LocatorDlgBase.ui:
 
  class LocatorDlgBase : QDialog
  MarkerDlgBase.ui:
8
  class MarkerDlgBase : QDialog
  MarkerMgrDlgBase.ui:
1
  class MarkerMgrDlgBase : QDialog
  ObjectGroupDlgBase.ui:
5
  class ObjectGroupDlgBase : QDialog
  OpenObjectDlgBase.ui:
 
  class OpenObjectDlg : Q3MainWindow
  OutputManagerBase.ui:
2
  class OutputManagerBase : Q3MainWindow
  PeriodTimeSelectorBase.ui:
4
  class PeriodTimeSelectorBase : QDialog
  PeriodicSlotCfgBase.ui:
5
  class PeriodicSlotCfgBase : QDialog
  PlotDlgSettingsBase.ui:
5
  class PlotDlgSettingsBase : QDialog
  PlotMembershipDlgBase.ui:
1
  class PlotMembershipDlgBase : QDialog
  PlotOpenDlgBase.ui:
1
  class PlotOpenDlgBase : QDialog
  PlotSaveAsDlgBase.ui:
1
  class PlotSaveAsDlgBase : QDialog
  PlotTitleDlgBase.ui:
0
  class PlotTitleDlgBase : QDialog
  PropagateDlgBase.ui:
1
  class PropagateDlgBase : QDialog
  ScenarioMgrDlgBase.ui:
6
  class ScenarioMgrBase : Q3MainWindow
  ScenarioTabForm.ui:
 
  class ScenarioTabForm : QWidget
  SlotListDlgBase.ui:
1
  class SlotListDlg : Q3MainWindow
  SpecifyDimsDlgBase.ui:
0
  class SpecifyDimsDlgBase : QDialog
  StatSlotFilterDlgBase.ui:
2
  class StatSlotFilterDlgBase : QDialog
  StatTableSlotDlgBase.ui:
 
  class StatTableSlotDlgBase : Q3MainWindow
  SupplyGroupDlgBase.ui:
3
  class SupplyGroupDlgBase : QDialog
  TablePlotColsDlgBase.ui:
4
  class TablePlotColsDlgBase : QDialog
  WorkspaceBase.ui:
 
  class WorkspaceBase : Q3MainWindow
QtAccounting
  AccountingSystemConfigBase.ui:
7
  class AccountingSystemConfigBase : QDialog
  AutoPassThroughAcctDlgBase.ui:
3
  class AutoPassThroughAcctDlgBase : QDialog
  ExchangeCfgDlgBase.ui:
5
  class ExchangeCfgDlgBase : Q3MainWindow
  ExchangeMgrDlgBase.ui:
1
  class ExchangeMgrDlgBase : Q3MainWindow
  QtAcctMgrDlgBase.ui:
8
  class QtAcctMgrDlgBase : Q3MainWindow
  QtSplyMgrDlgBase.ui:
8
  class QtSplyMgrDlgBase : Q3MainWindow
  QtSplyMgrDlgBase_new.ui:
 
  class QtSplyMgrDlgBase : Q3MainWindow
  SupplyEditorBase.ui:
4
  class SupplyEditorBase : QDialog
QtDmi
  DmiEditorDlgBase.ui:
3
  class DmiEditorDlg : Q3MainWindow
  DmiHandlerDlgBase.ui:
1
  class DmiHandlerDlgBase : QDialog
  DmiMgrDlgBase.ui:
2
  class DmiMgrDlg : Q3MainWindow
  DmiParamDlgBase.ui:
2
  class DmiParamDlg : Q3MainWindow
  ListCellDlgBase.ui:
2
  class ListCellDlg : Q3MainWindow
  MinMaxCellDlgBase.ui:
0
  class MinMaxCellDlg : Q3MainWindow
  RadioBtnDlgBase.ui:
1
  class RadioBtnDlgBase : QDialog
QtRpl
  RplAnalysisDlgBase.ui:
5
  class RplAnalysisDlgBase : Q3MainWindow
  RplArgEditDlgBase.ui:
0
  class RplArgEditDlgBase : QDialog
  RplImportDlgBase.ui:
1
  class RplImportDlgBase : QDialog
  RplLayoutDlgBase.ui:
11
  class RplLayoutDlgBase : Q3MainWindow
  RplPaletteDlgBase.ui:
14
  class RplPaletteDlgBase : Q3MainWindow
  RplPrintDlgBase.ui:
2
  class RplPrintDlgBase : QDialog
  RplSearchDlgBase.ui:
1
  class RplSearchDlgBase : Q3MainWindow
  RplSearchReplaceDlgBase.ui:
1
  class RplSearchReplaceDlgBase : Q3MainWindow
QtRun
  MultiRunControlDlgBase.ui:
3
  class MultiRunControlDlg : Q3MainWindow
  MultiRunEditDlgBase.ui:
11
  class MultiRunEditDlg : Q3MainWindow
  OptParamDlgBase.ui:
0
  class QtOptParamDlg : QDialog
  OptParamSubDlgBase.ui:
3
  class OptParamSubDlgBase : QDialog
  ResumeRunDlgBase.ui:
1
  class QtResumeRunDlg : QDialog
  RunControlDlgBase.ui:
2
  class RunControlDlg : Q3MainWindow
  RunStatusDlgBase.ui:
4
  class RunStatusDlg : QDialog
  RunSyncDlgBase.ui:
2
  class RunSyncDlg : QDialog
  SimParamDlgBase.ui:
1
  class QtSimParamDlg : QDialog
QtSCT
  SctColorDlgBase.ui:
 
  class SctColorDlgBase : QDialog
  SctConfigDlgBase.ui:
2
  class SctConfigDlgBase : QDialog
  SctFindSlotDialogBase.ui:
1
  class SctFindSlotDialogBase : QDialog
  SctLabelFnDlgBase.ui:
1
  class SctLabelFnDlgBase : QDialog
  SctTimestepAggCfgDlgBase.ui:
0
  class SctTimestepAggCfgDlgBase : QDialog
QtUtils
  MessageListBoxBase.ui:
1
  class MessageListBoxBase : QDialog
  SyncHeaderTestBase.ui:
 
  class SyncHeaderTestBase : QDialog

(2.3) Dialogs in Qt4 Designer UI Files

This section shows two tables:

With the exception of one anomaly which will be addressed, these dialogs and other widgets don't contain Qt3 widgets. (They contain only Qt4 widgets).

Qt4 Dialog UI Source File   Class Name Dialog Type
DbDmi
  DbDmiImpExpConfirm.ui   class DbDmiImpExpConfirm : QDialog
  DmiInvocationMgr.ui   class DmiInvocationMgr : QMainWindow
  ExcelDatasetDlg.ui   class ExcelDatasetDlgWidgets : QMainWindow
Q3GUI      
  AddSlotNotesWidgets.ui   class AddSlotNotesWidgets : QDialog
  FileTypeAssocMgrDlgWidgets.ui   class FileTypeAssocMgrDlgWidgets : QMainWindow
  NoteGroupMgrDlgWidgets.ui   class NoteGroupMgrDlgWidgets : QMainWindow
  OutputConfigWidgets.ui   class OutputConfigWidgets : QMainWindow
  RplParamDlgWidgets.ui   class RplParamDlgWidgets : QDialog
QtAccounting
  DataObjExchBuilderWidgets.ui   class DataObjExchBuilderWidgets : QDialog
QtRpl
  RplBlockDlgWidgets.ui   class RplBlockDlgWidgets : QMainWindow
  RplDebuggerDlgWidgets.ui   class RplDebuggerDlgWidgets : QMainWindow
  RplDocConfigDlgWidgets.ui   class RplDocConfigDlgWidgets : QMainWindow
  RplFunctionDlgWidgets.ui   class RplFunctionDlgWidgets : QMainWindow
  RplGroupDlgWidgets.ui   class RplGroupDlgWidgets : QMainWindow
  RplSetDlgWidgets.ui   class RplSetDlgWidgets : QMainWindow
QtSCT
  SctClipboardExportDlgWidgets.ui   class SctClipboardExportDlgWidgets : QDialog
QtUtils
  FindSlotsWithInputsWidgets.ui   class FindSlotsWithInputsWidgets : QDialog
  ReportGenDlgWidgets.ui   class RiverWareModelSummaryDlgWidgets : Q3MainWindow

The following table lists QWidgets defined in Qt4 Designer UI files other than dialogs. These are either "panels" used within possibly-multiple dialogs or the majority of the widget content of a single dialog. In the latter case, the distinction of these not being "dialogs" is not very significant -- that is, they are essentially "dialogs".

Qt4 Dialog UI Source File   Class Name Widget Type
Q3GUI
  GreenBookConfigPanelWidgets.ui   class GreenBookConfigPanelWidgets : QWidget
QtRpl
  RplDocConfigPanelWidgets.ui   class RplDocConfigPanelWidgets : QFrame
QtUtils
  BgImageConfigPanelWidgets.ui   class BgImageConfigPanelWidgets : QFrame
  ClipboardImportDlgWidgets.ui   class ClipboardImportDlgWidgets : QWidget
  CloseAllDialogsWidgets.ui   class CloseAllDialogsWidgets : QWidget
  DescriptDisplayWidgets.ui   class DescriptDisplayWidgets : QWidget
  GeoRefCoordEditorWidgets.ui   class GeoRefCoordEditorWidgets : QFrame
  ModelPeriodInfoPanelWidgets.ui   class ModelPeriodInfoPanelWidgets : QWidget
  SlotIdPanelWidgets.ui   class SlotIdPanelWidgets : QWidget

(2.4) Dialogs defined in C++ code (not UI files).

  Q3 Widget Count

1

Q3ActionGroup 6
2 Q3ButtonGroup 5
3 Q3CheckListItem 1
4 Q3Frame 85
5 Q3Grid 1
6 Q3GridLayout 22
7 Q3GroupBox 5
8 Q3HBoxLayout 80
9 Q3ListBox 1
10 Q3ListView 11
11 Q3ListViewItem 1
12 Q3PopupMenu 38
13 Q3TextEdit 1
14 Q3VBox 1
15 Q3VBoxLayout 74
16 Q3ValueList<> 1
17 Q3WidgetStack 4
  total:  337
   

The table below enumerates the 68 RiverWare dialogs defined in C++ files (rather than in UI files).

Our dialogs implemented directly in C++ contain 17 Qt3 Compatibility widget classes (whose names start with "Q3").

The table to the left shows the numbers of all of those Qt3 widgets in the 68 dialog C++ files. For expediency, these counts to not include subclasses of Qt3 widgets -- which is significant in terms of complexity in the cases of Q3Table and Q3ListView. See also the enumerations of those occurances in these two sections:

(2.5) RiverWare uses of Q3Table
(2.6) RiverWare uses of Q3ListView

 

Note: [Q3] column = number of Q3 widgets, after translation with Qt 4.4 uic3. The counts don't include the dialog box itself (in the case of dialog boxes derived from Q3MainWindow).

Qt3 Dialog C++ (header) File
Q3
  Class Name Dialog Type
DbDmi
  DatasetSelectorDlg.hpp: 0   class DatasetSelectorDlg : QDialog
  DbDmiImpExpConfirmDlg.hpp: 0   class DbDmiImpExpConfirmDlg : QDialog
  DmiInvocationMgrDlg.hpp: 0   class DmiInvocationMgrDlg : QMainWindow
  ExcelDatasetDlg.hpp: 0   class ExcelDatasetDlg : QMainWindow
Q3GUI
  AboutDlg.hpp: 1   class AboutDlg : QDialog
  AddSlotNotesDlg.hpp: 0   class AddSlotNotesDlg : QDialog
  AnnoGroupEditor.hpp: 12   class AnnoGroupEditor : Q3MainWindow
  AnnoGroupMgrDlg.hpp: 9   class AnnoGroupMgrDlg : Q3MainWindow
  BaseQ3MainWin.hpp: 0   class BaseQ3MainWin : Q3MainWindow
  BaseQtDlg.hpp: 0   class BaseQtDlg : QDialog
  BaseQtMainWin.hpp: 0   class BaseQtMainWin : QMainWindow
  ColorChooser.hpp: 9   class ColorChooser : QDialog
  DiagCfgDlg.hpp: 3   class DiagCfgDlg : Q3MainWindow
  DiagOutputColorLegend.hpp: 1   class DiagOutputColorLegend : QDialog
  DiagOutputQMainWindow.hpp: 0   class DiagOutputQMainWindow : Q3MainWindow
  FileTypeAssocMgrDlg.hpp: 0   class FileTypeAssocMgrDlg : QMainWindow
  GreenBookConfigDlg.hpp: 0   class GreenBookConfigDlg : QMainWindow
  GusDialog.hpp: 10   class GusDialog : QDialog
  ListSlotDlg.hpp: 0   class ListSlotBaseDlg : BaseQ3MainWin
  LocatorDlg.hpp: 0   class LocatorDlg : QMainWindow
  MultiObjMethSelConfirmDlg.hpp: 11   class MultiObjMethSelConfirmDlg : QDialog
  MultiObjMethSelector.hpp: 16   class MultiObjMethSelector : Q3MainWindow
  NoteEditDlg.hpp: 0   class NoteEditDlg : QDialog
  NoteEditDlgNew.hpp: 0   class NoteEditDlg : QDialog
  NoteGroupEditDlg.hpp: 0   class NoteGroupEditDlg : QDialog
  NoteGroupMgrDlg.hpp: 0   class NoteGroupMgrDlg : QMainWindow
  OpenObjectDlg.hpp: 11   class OpenObjectDlg : BaseQtMainWin
  OutputConfig.hpp: 1   class OutputConfig : QMainWindow
  PlotDialog.hpp: 5   class PlotDialog : BaseQtMainWin
  RplParamDlg.hpp: 0   class RplParamDlg : QDialog
  RwNoticeBox.hpp: 7   class RwNoticeBox : QDialog
  ScalarSlotDlg.hpp: 7   class ScalarSlotDlg : BaseQtMainWin
  ScenarioMgrDlg.hpp: 5   class ScenarioMgrDlg : BaseQ3MainWin
  SimObjPaletteDlg.hpp: 2   class SimObjPaletteDlg : QDialog
  SlotQtDlg.hpp: 29   class SlotQtDlg : BaseQtMainWin
  SnapshotMgrDlg.hpp: 23   class SnapshotMgrDlg : Q3MainWindow GusListener
  StatTableSlotDlg.hpp: 8   class StatTableSlotDlg : BaseQtMainWin
  SubbasinMgrDlg.hpp: 18   class SubbasinMgrDlg : Q3MainWindow
  UnitConvertDlg.hpp: 18   class UnitConvertDlg : Q3MainWindow
  Workspace.hpp: 2   class Workspace : BaseQtMainWin
QtAccounting
  AcctCellColorLegend.hpp: 2   class AcctCellColorLegend : QDialog
  AcctSubordinationViewerDlg.hpp: 11   class AcctSubordinationViewerDlg : Q3MainWindow
  DataObjExchBuilderDlg.hpp: 0   class DataObjExchBuilderDlg : QDialog
  ObjAcctSumSaveDlg.hpp: 9   class ObjAcctSumSaveDlg : QDialog
  OpenAccountDlg.hpp: 23   class OpenAccountDlg : BaseQtMainWin
QtDmi
  DmiMgrDlg.hpp: 3   class DmiMgrDlg::ProgressDialog : QDialog
QtRpl
  RplBaseDlg.hpp: 0   class RplBaseDlg : BaseQtMainWin
  RplBlockSelectorDlg.hpp: 5   class RplBlockSelectorDlg : QDialog
  RplCommentDlg.hpp: 0   class RplCommentDlg : QDialog
  RplDebuggerDlg.hpp: 0   class RplDebuggerDlg : QMainWindow
  RplDocConfigDlg.hpp: 0   class RplDocConfigDlg : QMainWindow
QtRun
  DmiSelectorDlg.hpp: 0   class DmiSelectorDlg : QDialog
  QtDispatchDetailDlg.hpp: 2   class QtDispatchDetailDlg : Q3MainWindow
  QtRunAnalysisDlg.hpp: 43   class QtRunAnalysisDlg : Q3MainWindow
  RunAnalRulesGridCellLegend.hpp: 10   class RunAnalRulesGridCellLegend : QDialog
  RunAnalSimGridCellLegend.hpp: 9   class RunAnalSimGridCellLegend : QDialog
  SyncControlDlg.hpp: 5   class SyncControlDlg : QDialog
QtSCT
  SctClipboardExportDlg.hpp: 0   class SctClipboardExportDlg : QDialog
  SctDialog.hpp: 2   class SctDialog : BaseQtMainWin
QtUtils
  BgImageConfigDlg.hpp: 0   class BgImageConfigDlg : QDialog
  ClipboardImportDlg.hpp: 0   class ClipboardImportDlg : QDialog
  CloseAllDialogsDlg.hpp: 0   class CloseAllDialogsDlg : QDialog
  DlgGeometryMgr.hpp: 0   class DlgGeomMgrTestWindow : QMainWindow
  FindSlotsWithInputsDlg.hpp: 0   class FindSlotsWithInputsDlg : QDialog
  GeoRefCoordEditorDlg.hpp: 0   class GeoRefCoordEditorDlg : QMainWindow
  SaveModelConfirmDlg.hpp: 5   class SaveModelConfirmDlg : QDialog
Total Q3 Widgets:   337      

(2.5) RiverWare uses of Q3Table

There are far fewer Q3Tables in RiverWare than Q3ListViews (see next section). See the tables below.

The Q3Tables for the Open Slot Dialogs (for Series and Table Slots) and for the SCT have a common base class (SlotDataQTable), and are quite complicated. These should be ported to the model-based QTableView (not QTableWidget) with a QAbstractTableModel subclass (to support an item-less implementation) and QItemDelegate (to support custom cell drawing). See our implementation for the Qt4 Run Analysis Dialog "grid" table classes: RunAnalGridQTableView, RunAnalGridQItemDelegate, and RunAnalGridQTableModel.

Q3Table Subclasses:

Q3GUI:
  StatTableSlotDlg.hpp : StatTableSlotDlg::SlotTable : Q3Table  (with items)
  SlotDataQTable.hpp : SlotDataQTable : Q3Table  (itemless)
  SlotQDlgTable.hpp : SlotQDlgTable : SlotDataQTable
  SctQTable.hpp : SctQTable : SlotDataQTable

Q3Table Direct Instances:

Q3GUI:
  RowColLabelEditor.hpp: Q3Table*  _labelTable;

(2.6) RiverWare uses of Q3ListView

See the two tables in this section: (1) Q3ListView Subclasses, and (2) Q3ListView Direct Instances. Generally, each of the subclasses have only one or two clients, with one or two instances each, so both of these types of items (subclasses and direct instances) have about the same level of complexity in porting. Those that implement flat lists (not multiple-level treeviews), and which have a relatively small number of items (e.g. not rows for series timesteps) can be replaced with either of these two widgets:

  1. Our new general Qt4 list widget: RwQListView (a Qt4 QTreeWidget) -- used by either subclassing or instantiating.
  2. For Slots, our new SlotListPanel, containing an RwQListView instance.

Also, our general Qt4 widget utilities module may be useful: RwQt4Utils.

Q3ListView Subclasses:

Q3GUI:
  AcctOrderListView.hpp : AcctOrderListView : Q3ListView
  DiagOutputListView.hpp : DiagOutputListView : Q3ListView
  DisplayGroupListView.hpp : DisplayGroupListView : Q3ListView
  DragDropSimListView.hpp : DragDropSimListView : Q3ListView
  GusListView.hpp : GusListView : Q3ListView
  SlotQListView.hpp : SlotQListView : Q3ListView
  SnapMgrObjListView.hpp : SnapMgrObjListView : Q3ListView
  SnapMgrSlotListView.hpp : SnapMgrSlotListView : Q3ListView
  SubbasinMgrListView.hpp : SubbasinMgrListView : Q3ListView
  TimeStepSelListView.hpp : TimeStepSelListView : Q3ListView
  WorkspaceListView.hpp : WorkspaceListView : Q3ListView
QtAccounting:
  AcctSubordListView.hpp : AcctSubordListView : Q3ListView
  ExchBalanceKeyListView.hpp : ExchBalanceKeyListView : Q3ListView
  UnitsListView.hpp : UnitsListView : Q3ListView
QtRpl:
  RplListView.hpp : RplListView : Q3ListView
QtRun:
  DispatchInfoListView.hpp : DispatchInfoListView : Q3ListView
  DmiListView.hpp : DmiListView : Q3ListView
  QtMultiRunEditDlg.hpp : QtMultiRunEditDlg::IterListView : Q3ListView
  RulesEffectsListView.hpp : RulesEffectsListView : Q3ListView
QtUtils:
  GenListView.hpp : GenListView : Q3ListView

Q3ListView Direct Instances:

DbDmi:
  DbDmiMgr.hpp: Q3ListView* _listview;
  DatasetMgrDlgBase.ui: Q3ListView* _datasetListView;
  DbDmiImpExpDlgBase.ui: Q3ListView* _objListview;
  HdbMetaDataDlgBase.ui: Q3ListView* _metaDataListView;
  HdbModelRunIdDlgBase.ui: Q3ListView* _mridListView;
  NameMapMgrDlgBase.ui: Q3ListView* _nameMapListView;
Q3GUI:
  AnnoGroupEditor.hpp: Q3ListView* _annoItemListView;
  AnnoGroupEditor.hpp: Q3ListView* _slotListView;
  AnnoGroupMgrDlg.hpp: Q3ListView* _groupListView;
  DiagCfgDlg.Panel.hpp: Q3ListView* _catListView;
  OpenObjectDlg.hpp: Q3ListView* _methodsListView;
  OpenObjectDlg.hpp: Q3ListView* _accountsListView;
  RestoreListState.hpp: Q3ListView* _listView;
  ScenarioMgrDlg.hpp: Q3ListView* _slotList;
  ConfigSlotsDlgBase.ui: Q3ListView* _slotSelectListView;
  FileInfoDlgBase.ui: Q3ListView* _saveList;
  LinkEditorDlgBase.ui: Q3ListView* _srcListView;
  LinkEditorDlgBase.ui: Q3ListView* _destListView;
  MarkerMgrDlgBase.ui: Q3ListView* _listView;
  PlotMembershipDlgBase.ui: Q3ListView* _listView;
  PropagateDlgBase.ui: Q3ListView* _listview;
  SlotListDlgBase.ui: Q3ListView* _slotListView;
QtAccounting:
  OpenAccountDlg.hpp: Q3ListView* _methodsListView;
  OpenAccountDlg.hpp: Q3ListView* _supplyListView;
  OpenAccountDlg.hpp: Q3ListView* _demandListView;
  AccountingSystemConfigBase.ui: Q3ListView* _waterOwnerList;
  AccountingSystemConfigBase.ui: Q3ListView* _waterTypeList;
  AccountingSystemConfigBase.ui: Q3ListView* _releaseTypeList;
  AccountingSystemConfigBase.ui: Q3ListView* _destinationTypeList;
  ExchangeCfgDlgBase.ui: Q3ListView* _paySourceListView;
  ExchangeCfgDlgBase.ui: Q3ListView* _exchangeListView;
  QtAcctMgrDlgBase.ui: Q3ListView* _accountsListView;
  QtSplyMgrDlgBase.ui: Q3ListView* _suppliesListView;
QtDmi:
  DmiEditorDlgBase.ui: Q3ListView* _listview;
  DmiHandlerDlgBase.ui: Q3ListView* _msgListView;
  DmiMgrDlgBase.ui: Q3ListView* _listview;
  DmiParamDlgBase.ui: Q3ListView* _listview;
  ListCellDlgBase.ui: Q3ListView* _listview;
QtRpl:
  RplBlockSelectorDlg.hpp: Q3ListView* _setListView;
  RplAnalysisDlgBase.ui: Q3ListView* _groupsListView;
  RplAnalysisDlgBase.ui: Q3ListView* _descListView;
  RplAnalysisDlgBase.ui: Q3ListView* _ascListView;
  RplImportDlgBase.ui: Q3ListView* _importListView;
  RplLayoutDlgBase.ui: Q3ListView* _breaksListView;
  RplPaletteDlgBase.ui: Q3ListView* _userDefinedListView;
  RplPaletteDlgBase.ui: Q3ListView* _predefinedListView;
  RplSearchReplaceDlgBase.ui: Q3ListView* _searchResultsListView;
QtRun:
  MultiRunControlDlgBase.ui: Q3ListView* _configListView;
  OptParamSubDlgBase.ui: Q3ListView* _paramListView;

(2.7) RiverWare uses of QTableView / QTableWidget (Qt4 Tables)

The following tables list the Qt4 QTableViews and QTableWidgets currently implemented in RiverWare (5.2).

QTableView / QTableWidget Subclasses (Qt4 Tables):

QtRun:
  RunAnalGridQTableView.hpp : RunAnalGridQTableView : QTableView  (itemless)

QTableView / QTableWidget Direct Instances (Qt4 Tables):

DbDmi:
  DbDmiImpExpConfirm.ui: QTableWidget*  _objTable;
QtUtils:
  ClipboardImportDlgWidgets.ui: QTableWidget*  _clipboardDataTable;
QtRun:
  DistribPanel.hpp: QTableWidget*  _hostTable;
  DistribPanel.hpp: QTableWidget*  _envTable;

(2.8) RiverWare uses of QTreeView / QTreeWidget (Qt4 Lists)

The following tables list the Qt4 QTreeViews and QTreeWidgets currently implemented in RiverWare (5.2).

QTreeView / QTreeWidget Subclasses (Qt4 Lists):

Q3GUI:
  FileTypeAssocTreeWidget.hpp : FileTypeAssocTreeWidget : QTreeWidget
  GreenBookConfigPanel.hpp : GreenBookConfigPanel::SlotTree : QTreeWidget
  PlotPageSelPanel.hpp : PlotPageSelTreeView : QTreeWidget
QtRpl:
  RplObjView.hpp : RplObjView : QTreeView  (itemless)
QtUtils:
  GeoRefCoordEditorDlg.hpp : GeoRefCoordEditorPanel::TreeWidget : QTreeWidget
  RwQListView.hpp : RwQListView : QTreeWidget

QTreeView / QTreeWidget Direct Instances (Qt4 Lists):

DbDmi:
  DatasetSelectorDlg.hpp: QTreeWidget*  _treeWidget;
  DmiInvocationMgr.ui: QTreeWidget*  _treeWidget;
Q3GUI:
  ListSlotDlg.hpp: QTreeWidget*  _listBox;
  OutputManager.hpp: QTreeWidget*  _outputDeviceList;
  AddSlotNotesWidgets.ui: QTreeWidget*  _slotTreeWidget;
  NoteGroupMgrDlgWidgets.ui: QTreeWidget*  _groupTreeWidget;
  NoteGroupMgrDlgWidgets.ui: QTreeWidget*  _noteTreeWidget;
  NoteGroupMgrDlgWidgets.ui: QTreeWidget*  _slotTreeWidget;
  OutputConfigWidgets.ui: QTreeWidget*  _listSnapshots;
QtAccounting:
  DataObjExchBuilderWidgets.ui: QTreeWidget*  _borrowList;
  DataObjExchBuilderWidgets.ui: QTreeWidget*  _paybackList;
QtRpl:
  RplDebuggerDlgWidgets.ui: QTreeWidget*  _callStackTreeWidget;
  RplDebuggerDlgWidgets.ui: QTreeWidget*  _breakpointsTreeWidget;

--- (end) ---