/* * Copyright (c) 2015, RPTU Kaiserslautern-Landau * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of the copyright holder nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Authors: * Janik Schlemminger * Robert Gernhardt * Matthias Jung * Derek Christ * Iron Prando da Silva */ #ifndef TRACEPLOT_H #define TRACEPLOT_H #include "markerplotitem.h" #include "queryeditor.h" #include "tracenavigator.h" #include "traceplotitem.h" #include "util/togglecollapsedaction.h" #include #include #include #include #include #include #include #include #include #include class TracePlotMouseLabel; class CustomLabelScaleDraw; class CommentModel; class TracePlotLineDataSource; /* A plot that plots all phases and transactions of a trace file * Y Axis : Bank0,...,Bank7,Trans,CC * X Axis : Time * */ class TracePlot : public QwtPlot { Q_OBJECT public: TracePlot(QWidget* parent = NULL); void init(TraceNavigator* navigator, QScrollBar* scrollBar, TracePlotLineDataSource* tracePlotLineDataSource, CommentModel* commentModel); Timespan GetCurrentTimespan(); traceTime ZoomLevel() const; void setZoomLevel(traceTime newZoomLevel); CustomLabelScaleDraw* getCustomLabelScaleDraw() const; const TraceDrawingProperties& getDrawingProperties() const; public Q_SLOTS: void currentTraceTimeChanged(); void selectedTransactionsChanged(); void commentsChanged(); void verticalScrollbarChanged(int value); void updateScrollbar(); void recreateCollapseButtons(); void updateToggleCollapsedAction(); Q_SIGNALS: void tracePlotZoomChanged(); void tracePlotLinesChanged(); void colorGroupingChanged(ColorGrouping colorgrouping); private Q_SLOTS: void on_executeQuery(); void on_selectNextRefresh(); void on_selectNextActivate(); void on_selectNextPrecharge(); void on_selectNextCommand(); // void on_selectNextActb(); // void on_selectNextPreb(); // void on_selectNextRefb(); void on_colorGroupingPhase(); void on_colorGroupingTransaction(); void on_colorGroupingThread(); void on_colorGroupingRainbowTransaction(); void on_goToTransaction(); void on_goToPhase(); void on_deselectAll(); void on_insertComment(); void on_goToTime(); void on_exportToPDF(); void on_toggleCollapsedState(); private: bool isInitialized; TraceNavigator* navigator; TraceDrawingProperties drawingProperties; TracePlotItem* tracePlotItem; QwtPlotZoneItem* zoomZone; std::vector> transactions; QueryEditor* queryEditor; QMenu* contextMenu; QScrollBar* scrollBar; CustomLabelScaleDraw* customLabelScaleDraw; CommentModel* commentModel; TracePlotLineDataSource* tracePlotLineDataSource; void setUpTracePlotItem(); void setUpDrawingProperties(); void setUpGrid(); void setUpAxis(); void setUpZoom(); void setUpQueryEditor(); void setUpActions(); void setUpContextMenu(); void connectNavigatorQ_SIGNALS(); void getAndDrawComments(); ToggleCollapsedAction::CollapsedState getCollapsedState() const; void collapseOrExpandAllRanks(ToggleCollapsedAction::CollapseAction collapseAction); /* zooming * */ traceTime zoomLevel; constexpr static int minZoomClks = 10; constexpr static int maxZoomClks = 2000; constexpr static int GridVisiblityClks = 100; constexpr static int textVisibilityClks = 200; traceTime minZoomLevel, maxZoomLevel, textVisibilityZoomLevel; constexpr static double zoomFactor = 0.8; void zoomIn(traceTime zoomCenter); void zoomOut(traceTime zoomCenter); void exitZoomMode(); void enterZoomMode(); /* keyboard an mouse events * */ bool eventFilter(QObject* object, QEvent* event); QAction* goToTime; QAction* goToTransaction; QAction* goToPhase; QAction* showQueryEditor; QAction* insertComment; QAction* deselectAll; QAction* selectNextRefresh; QAction* selectNextActivate; QAction* selectNextPrecharge; QAction* selectNextCommand; // QAction *selectNextActb; // QAction *selectNextPreb; // QAction *selectNextRefb; QAction* setColorGroupingPhase; QAction* setColorGroupingTransaction; QAction* setColorGroupingThread; QAction* setColorGroupingRainbowTransaction; QAction* exportToPdf; ToggleCollapsedAction* toggleCollapsedState; QMenu* dependenciesSubMenu; QAction* disabledDependencies; QAction* selectedDependencies; QAction* allDependencies; QAction* switchDrawDependencyTextsOption; TracePlotMouseLabel* mouseLabel; void openContextMenu(const QPoint& pos, const QPoint& mouseDown); QPoint contextMenuMouseDown; void SelectTransaction(int x, int y) const; void SelectComment(int x) const; // const std::vector> hoveredComments(traceTime time) const; Timespan hoveredTimespan(int x) const; void keyPressEvent(QKeyEvent* keyPressedEvent); void keyReleaseEvent(QKeyEvent* keyReleasedEvent); struct KeyPressData { bool ctrlPressed, shiftPressed; KeyPressData() : ctrlPressed(false), shiftPressed(false) {} }; struct MouseDownData { traceTime mouseDownTime; Timespan zoomSpan; int mouseDownX; bool mouseIsDownForDragging; bool mouseIsDownForZooming; MouseDownData() : mouseDownTime(0), mouseDownX(0), mouseIsDownForDragging(false), mouseIsDownForZooming(false) { } }; MouseDownData mouseDownData; KeyPressData keyPressData; }; #endif // TRACEPLOT_H