1 /** 2 * UGENE - Integrated Bioinformatics Tools. 3 * Copyright (C) 2008-2021 UniPro <ugene@unipro.ru> 4 * http://ugene.net 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 9 * of the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 19 * MA 02110-1301, USA. 20 */ 21 22 #ifndef _U2_MSA_EDITOR_DATA_LIST_H_ 23 #define _U2_MSA_EDITOR_DATA_LIST_H_ 24 25 #include <QLabel> 26 #include <QPushButton> 27 28 #include <U2Core/BackgroundTaskRunner.h> 29 #include <U2Core/MultipleSequenceAlignment.h> 30 #include <U2Core/Task.h> 31 32 #include "MaEditorNameList.h" 33 #include "MsaUpdatedWidgetInterface.h" 34 35 namespace U2 { 36 37 class CreateDistanceMatrixTask; 38 class MSADistanceMatrix; 39 class MaUtilsWidget; 40 class Task; 41 42 class SimilarityStatisticsSettings : public UpdatedWidgetSettings { 43 public: SimilarityStatisticsSettings()44 SimilarityStatisticsSettings() 45 : usePercents(false), excludeGaps(false) { 46 } 47 QString algoId; // selected algorithm 48 bool usePercents; 49 bool excludeGaps; 50 }; 51 52 class MsaEditorSimilarityColumn : public MaEditorNameList, public UpdatedWidgetInterface { 53 friend class GTUtilsMSAEditorSequenceArea; 54 Q_OBJECT 55 public: 56 MsaEditorSimilarityColumn(MsaEditorWgt *ui, QScrollBar *nhBar, const SimilarityStatisticsSettings *_settings); 57 virtual ~MsaEditorSimilarityColumn(); 58 59 void setSettings(const UpdatedWidgetSettings *_settings); 60 61 void cancelPendingTasks(); 62 getSettings()63 const UpdatedWidgetSettings &getSettings() const { 64 return curSettings; 65 } getWidget()66 QWidget *getWidget() { 67 return this; 68 } updateWidget()69 void updateWidget() { 70 updateDistanceMatrix(); 71 } 72 QString getHeaderText() const; 73 getState()74 DataState getState() { 75 return state; 76 } 77 setMatrix(MSADistanceMatrix * _matrix)78 void setMatrix(MSADistanceMatrix *_matrix) { 79 matrix = _matrix; 80 } 81 82 QString getTextForRow(int maRowIndex) override; 83 84 protected: 85 QString getSeqName(int s); 86 void updateScrollBar(); 87 88 signals: 89 void si_dataStateChanged(DataState newState); 90 private slots: 91 92 void onAlignmentChanged(const MultipleSequenceAlignment &maBefore, const MaModificationInfo &modInfo); 93 void sl_createMatrixTaskFinished(Task *); 94 95 private: 96 void updateDistanceMatrix(); 97 98 MSADistanceMatrix *matrix; 99 SimilarityStatisticsSettings newSettings; 100 SimilarityStatisticsSettings curSettings; 101 102 BackgroundTaskRunner<MSADistanceMatrix *> createDistanceMatrixTaskRunner; 103 104 DataState state; 105 bool autoUpdate; 106 }; 107 108 class CreateDistanceMatrixTask : public BackgroundTask<MSADistanceMatrix *> { 109 Q_OBJECT 110 public: 111 CreateDistanceMatrixTask(const SimilarityStatisticsSettings &_s); 112 113 virtual void prepare(); 114 getResult()115 MSADistanceMatrix *getResult() const { 116 return resMatrix; 117 } 118 119 QList<Task *> onSubTaskFinished(Task *subTask); 120 121 private: 122 SimilarityStatisticsSettings s; 123 QString resultText; 124 MSADistanceMatrix *resMatrix; 125 }; 126 127 class MsaEditorAlignmentDependentWidget : public QWidget { 128 Q_OBJECT 129 public: 130 MsaEditorAlignmentDependentWidget(UpdatedWidgetInterface *_contentWidget); 131 132 void setSettings(const UpdatedWidgetSettings *_settings); 133 void cancelPendingTasks(); getDataState()134 const DataState &getDataState() const { 135 return state; 136 } getSettings()137 const UpdatedWidgetSettings *getSettings() const { 138 return settings; 139 } 140 141 private slots: 142 void sl_onAlignmentChanged(const MultipleAlignment &maBefore, const MaModificationInfo &modInfo); 143 void sl_onUpdateButonPressed(); 144 void sl_onDataStateChanged(DataState newState); 145 void sl_onFontChanged(const QFont &); 146 147 private: 148 void createWidgetUI(); 149 void createHeaderWidget(); 150 151 MaUtilsWidget *headerWidget; 152 QLabel statusBar; 153 QLabel nameWidget; 154 QPushButton updateButton; 155 UpdatedWidgetInterface *contentWidget; 156 const UpdatedWidgetSettings *settings; 157 DataState state; 158 QWidget *updateBar; 159 160 bool automaticUpdating; 161 162 QString DataIsOutdatedMessage; 163 QString DataIsValidMessage; 164 QString DataIsBeingUpdatedMessage; 165 }; 166 } // namespace U2 167 168 #endif 169