//Copyright 2017 Ryan Wick //This file is part of Bandage //Bandage is free software: you can redistribute it and/or modify //it under the terms of the GNU General Public License as published by //the Free Software Foundation, either version 3 of the License, or //(at your option) any later version. //Bandage is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //GNU General Public License for more details. //You should have received a copy of the GNU General Public License //along with Bandage. If not, see . #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include #include "../program/globals.h" #include #include "../ogdf/energybased/FMMMLayout.h" class GraphicsViewZoom; class MyGraphicsScene; class DeBruijnNode; class DeBruijnEdge; class BlastSearchDialog; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QString fileToLoadOnStartup = "", bool drawGraphAfterLoad = false); ~MainWindow(); private: Ui::MainWindow *ui; MyGraphicsScene * m_scene; GraphicsViewZoom * m_graphicsViewZoom; double m_previousZoomSpinBoxValue; QThread * m_layoutThread; ogdf::FMMMLayout * m_fmmm; QString m_imageFilter; QString m_fileToLoadOnStartup; bool m_drawGraphAfterLoad; UiState m_uiState; BlastSearchDialog * m_blastSearchDialog; bool m_alreadyShown; void cleanUp(); void displayGraphDetails(); void clearGraphDetails(); void resetScene(); void layoutGraph(); void addGraphicsItemsToScene(); void zoomToFitRect(QRectF rect); void zoomToFitScene(); void setZoomSpinBoxStep(); void getSelectedNodeInfo(int & selectedNodeCount, QString & selectedNodeCountText, QString & selectedNodeListText, QString & selectedNodeLengthText, QString &selectedNodeDepthText); QString getSelectedEdgeListText(); std::vector getNodesFromLineEdit(QLineEdit * lineEdit, bool exactMatch, std::vector * nodesNotInGraph = 0); void setSceneRectangle(); void loadGraph2(GraphFileType graphFileType, QString filename); void setInfoTexts(); void setUiState(UiState uiState); void selectBasedOnContiguity(ContiguityStatus contiguityStatus); void setWidgetsFromSettings(); QString getDefaultImageFileName(); void setNodeColourSchemeComboBox(NodeColourScheme nodeColourScheme); void setGraphScopeComboBox(GraphScope graphScope); void setupBlastQueryComboBox(); bool checkForImageSave(); QString convertGraphFileTypeToString(GraphFileType graphFileType); void setSelectedNodesWidgetsVisibility(bool visible); void setSelectedEdgesWidgetsVisibility(bool visible); void setStartingNodesWidgetVisibility(bool visible); void setNodeDistanceWidgetVisibility(bool visible); void setDepthRangeWidgetVisibility(bool visible); static QByteArray makeStringUrlSafe(QByteArray s); void removeGraphicsItemNodes(const std::vector * nodes, bool reverseComplement); void removeGraphicsItemEdges(const std::vector * edges, bool reverseComplement); void removeAllGraphicsEdgesFromNode(DeBruijnNode * node, bool reverseComplement); std::vector addComplementaryNodes(std::vector nodes); private slots: void loadGraph(QString fullFileName = ""); void loadCSV(QString fullFileNAme = ""); void selectionChanged(); void graphScopeChanged(); void drawGraph(); void zoomSpinBoxChanged(); void zoomedWithMouseWheel(); void copySelectedSequencesToClipboardActionTriggered(); void copySelectedSequencesToClipboard(); void saveSelectedSequencesToFileActionTriggered(); void saveSelectedSequencesToFile(); void copySelectedPathToClipboard(); void saveSelectedPathToFile(); void switchColourScheme(); void determineContiguityFromSelectedNode(); void saveImageCurrentView(); void saveImageEntireScene(); void setTextDisplaySettings(); void fontButtonPressed(); void setNodeCustomColour(); void setNodeCustomLabel(); void hideNodes(); void openSettingsDialog(); void openAboutDialog(); void selectUserSpecifiedNodes(); void graphLayoutFinished(); void openBlastSearchDialog(); void blastChanged(); void blastQueryChanged(); void showHidePanels(); void graphLayoutCancelled(); void bringSelectedNodesToFront(); void selectNodesWithBlastHits(); void selectNodesWithDeadEnds(); void selectAll(); void selectNone(); void invertSelection(); void zoomToSelection(); void selectContiguous(); void selectMaybeContiguous(); void selectNotContiguous(); void openBandageUrl(); void nodeDistanceChanged(); void depthRangeChanged(); void afterMainWindowShow(); void startingNodesExactMatchChanged(); void openPathSpecifyDialog(); void nodeWidthChanged(); void saveEntireGraphToFasta(); void saveEntireGraphToFastaOnlyPositiveNodes(); void saveEntireGraphToGfa(); void saveVisibleGraphToGfa(); void webBlastSelectedNodes(); void removeSelection(); void duplicateSelectedNodes(); void mergeSelectedNodes(); void mergeAllPossible(); void cleanUpAllBlast(); void changeNodeName(); void changeNodeDepth(); void openGraphInfoDialog(); protected: void showEvent(QShowEvent *ev); signals: void windowLoaded(); }; #endif // MAINWINDOW_H