7 #include "CallbackGatherXThetaValuesFunctions.h" 8 #include "CmdMediator.h" 10 #include "CurveConnectAs.h" 11 #include "CurveStyle.h" 12 #include "EngaugeAssert.h" 13 #include "GeometryModel.h" 14 #include "GeometryWindow.h" 16 #include "MainWindow.h" 17 #include <QApplication> 19 #include <QItemSelectionModel> 20 #include <QTextStream> 21 #include "WindowTable.h" 26 const QString TokenName (QObject::tr (
"CurveName:"));
27 const QString TokenFunctionArea (QObject::tr (
"FunctionArea:"));
28 const QString TokenPolygonArea (QObject::tr (
"PolygonArea:"));
29 const QString TokenX (QObject::tr (
"X"));
30 const QString TokenY (QObject::tr (
"Y"));
31 const QString TokenIndex (QObject::tr (
"Index"));
32 const QString TokenDistanceGraph (QObject::tr (
"Distance"));
33 const QString TokenDistancePercent (QObject::tr (
"Percent"));
39 setAllowedAreas (Qt::AllDockWidgetAreas);
40 setWindowTitle (tr (
"Geometry Window"));
41 setStatusTip (tr (
"Geometry Window"));
42 setWhatsThis (tr (
"Geometry Window\n\n" 43 "This table displays the following geometry data for the currently selected curve:\n\n" 44 "Function area = Area under the curve if it is a function\n\n" 45 "Polygon area = Area inside the curve if it is a relation. This value is only correct " 46 "if none of the curve lines intersect each other\n\n" 47 "X = X coordinate of each point\n\n" 48 "Y = Y coordinate of each point\n\n" 49 "Index = Point number\n\n" 50 "Distance = Distance along the curve in forward or backward direction, in either graph units " 51 "or as a percentage\n\n" 52 "If drag-and-drop is disabled, a rectangular set of cells may be selected by clicking and dragging. Otherwise, if " 53 "drag-and-drop is enabled, a rectangular set of cells may be selected using Click then Shift+Click, since click and drag " 54 "starts the dragging operation. Drag-and-drop mode is set in the Main Window settings"));
56 createWidgets (mainWindow);
61 GeometryWindow::~GeometryWindow()
68 resizeTable (NUM_HEADER_ROWS);
71 for (
int row = 0; row < NUM_HEADER_ROWS - 1; row++) {
72 m_model->setItem (row, COLUMN_HEADER_VALUE,
new QStandardItem (
""));
78 LOG4CPP_INFO_S ((*mainCat)) <<
"GeometryWindow::closeEvent";
85 return COLUMN_BODY_POINT_IDENTIFIERS;
88 void GeometryWindow::createWidgets (
MainWindow *mainWindow)
93 connect (m_view, SIGNAL (signalTableStatusChange ()),
94 mainWindow, SLOT (slotTableStatusChange ()));
101 LOG4CPP_INFO_S ((*mainCat)) <<
"GeometryWindow::doCopy";
105 if (!text.isEmpty ()) {
108 QApplication::clipboard ()->setText (text);
113 void GeometryWindow::initializeHeader ()
115 LOG4CPP_INFO_S ((*mainCat)) <<
"GeometryWindow::initializeHeader";
117 resizeTable (NUM_HEADER_ROWS);
119 m_model->setItem (HEADER_ROW_NAME, COLUMN_HEADER_LABEL,
new QStandardItem (TokenName));
120 m_model->setItem (HEADER_ROW_FUNC_AREA, COLUMN_HEADER_LABEL,
new QStandardItem (TokenFunctionArea));
121 m_model->setItem (HEADER_ROW_POLY_AREA, COLUMN_HEADER_LABEL,
new QStandardItem (TokenPolygonArea));
122 m_model->setItem (HEADER_ROW_COLUMN_NAMES, COLUMN_BODY_X,
new QStandardItem (TokenX));
123 m_model->setItem (HEADER_ROW_COLUMN_NAMES, COLUMN_BODY_Y,
new QStandardItem (TokenY));
124 m_model->setItem (HEADER_ROW_COLUMN_NAMES, COLUMN_BODY_INDEX,
new QStandardItem (TokenIndex));
125 m_model->setItem (HEADER_ROW_COLUMN_NAMES, COLUMN_BODY_DISTANCE_GRAPH_FORWARD,
new QStandardItem (TokenDistanceGraph));
126 m_model->setItem (HEADER_ROW_COLUMN_NAMES, COLUMN_BODY_DISTANCE_PERCENT_FORWARD,
new QStandardItem (TokenDistancePercent));
127 m_model->setItem (HEADER_ROW_COLUMN_NAMES, COLUMN_BODY_DISTANCE_GRAPH_BACKWARD,
new QStandardItem (TokenDistanceGraph));
128 m_model->setItem (HEADER_ROW_COLUMN_NAMES, COLUMN_BODY_DISTANCE_PERCENT_BACKWARD,
new QStandardItem (TokenDistancePercent));
131 void GeometryWindow::loadStrategies ()
133 LOG4CPP_INFO_S ((*mainCat)) <<
"GeometryWindow::loadStrategies";
136 void GeometryWindow::resizeTable (
int rowCount)
138 LOG4CPP_INFO_S ((*mainCat)) <<
"GeometryWindow::resizeTable";
142 m_model->setRowCount (rowCount);
143 m_model->setColumnCount (NUM_BODY_COLUMNS);
157 void GeometryWindow::unselectAll ()
159 QItemSelectionModel *selectionModel = m_view->selectionModel ();
161 selectionModel->clearSelection ();
166 const QString &curveSelected,
169 LOG4CPP_INFO_S ((*mainCat)) <<
"GeometryWindow::update";
179 ENGAUGE_CHECK_PTR (curve);
181 const Points points = curve->
points();
183 QString funcArea, polyArea;
184 QVector<QString> x, y, distanceGraphForward, distancePercentForward, distanceGraphBackward, distancePercentBackward;
197 distanceGraphForward,
198 distancePercentForward,
199 distanceGraphBackward,
200 distancePercentBackward);
203 resizeTable (NUM_HEADER_ROWS + points.count());
205 m_model->setItem (HEADER_ROW_NAME, COLUMN_HEADER_VALUE,
new QStandardItem (curveSelected));
206 m_model->setItem (HEADER_ROW_FUNC_AREA, COLUMN_HEADER_VALUE,
new QStandardItem (funcArea));
207 m_model->setItem (HEADER_ROW_POLY_AREA, COLUMN_HEADER_VALUE,
new QStandardItem (polyArea));
209 if (transformation.transformIsDefined()) {
211 int row = NUM_HEADER_ROWS;
213 for (; index < points.count(); row++, index++) {
215 const Point &point = points.at (index);
218 transformation.transformScreenToRawGraph (point.
posScreen (),
221 m_model->setItem (row, COLUMN_BODY_X,
new QStandardItem (x [index]));
222 m_model->setItem (row, COLUMN_BODY_Y,
new QStandardItem (y [index]));
223 m_model->setItem (row, COLUMN_BODY_INDEX,
new QStandardItem (QString::number (index + 1)));
224 m_model->setItem (row, COLUMN_BODY_DISTANCE_GRAPH_FORWARD,
new QStandardItem (distanceGraphForward [index]));
225 m_model->setItem (row, COLUMN_BODY_DISTANCE_PERCENT_FORWARD,
new QStandardItem (distancePercentForward [index]));
226 m_model->setItem (row, COLUMN_BODY_DISTANCE_GRAPH_BACKWARD,
new QStandardItem (distanceGraphBackward [index]));
227 m_model->setItem (row, COLUMN_BODY_DISTANCE_PERCENT_BACKWARD,
new QStandardItem (distancePercentBackward [index]));
228 m_model->setItem (row, COLUMN_BODY_POINT_IDENTIFIERS,
new QStandardItem (point.
identifier()));
236 m_view->setColumnHidden (COLUMN_BODY_POINT_IDENTIFIERS,
true);
241 return dynamic_cast<QTableView*
> (m_view);
CurveStyle curveStyle(const QString &curveName) const
CurveStyle in specified curve.
CurveConnectAs curveConnectAs() const
Get method for connect type.
void setCurrentPointIdentifier(const QString &pointIdentifier)
Set the point identifier to be highlighted. Value is empty for no highlighting.
virtual void closeEvent(QCloseEvent *event)
Catch close event so corresponding menu item in MainWindow can be updated accordingly.
virtual QTableView * view() const
QTableView-based class used by child class.
Dockable widget abstract base class.
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
DocumentModelGeneral modelGeneral() const
Get method for DocumentModelGeneral.
void slotPointHoverEnter(QString)
Highlight the row for the specified point.
Class that represents one digitized point. The screen-to-graph coordinate transformation is always ex...
QPointF posScreen() const
Accessor for screen position.
virtual void update(const CmdMediator &cmdMediator, const MainWindowModel &modelMainWindow, const QString &curveSelected, const Transformation &transformation)
Populate the table with the specified Curve.
const Points points() const
Return a shallow copy of the Points.
QString selectionAsText(ExportDelimiter delimiter) const
Convert the selection into exportable text which is good for text editors.
QString identifier() const
Unique identifier for a specific Point.
void slotPointHoverLeave(QString)
Unhighlight the row for the specified point.
virtual void doCopy()
Copy the current selection to the clipboard.
void setDelimiter(ExportDelimiter delimiter)
Save output delimiter.
Model for DlgSettingsMainWindow.
LineStyle lineStyle() const
Get method for LineStyle.
GeometryWindow(MainWindow *mainWindow)
Single constructor. Parent is needed or else this widget cannot be redocked after being undocked...
void signalGeometryWindowClosed()
Signal that this QDockWidget was just closed.
static int columnBodyPointIdentifiers()
Hidden column that has the point identifiers.
Container for LineStyle and PointStyle for one Curve.
Table view class with support for both drag-and-drop and copy-and-paste.
Container for one set of digitized Points.
bool dragDropExport() const
Get method for drag and drop export.
void calculateGeometry(const Points &points, const DocumentModelCoords &modelCoords, const DocumentModelGeneral &modelGeneral, const MainWindowModel &modelMainWindow, const Transformation &transformation, CurveConnectAs connectAs, QString &funcArea, QString &polyArea, QVector< QString > &x, QVector< QString > &y, QVector< QString > &distanceGraphForward, QVector< QString > &distancePercentForward, QVector< QString > &distanceGraphBackward, QVector< QString > &distancePercentBackward) const
Calculate geometry parameters.
DocumentModelExportFormat modelExport() const
Get method for DocumentModelExportFormat.
Model that adds row highlighting according to the currently select point identifier.
CurveStyles modelCurveStyles() const
Get method for CurveStyles.
DocumentModelCoords modelCoords() const
Get method for DocumentModelCoords.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
virtual void clear()
Clear stale information.