1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
|
//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 <http://www.gnu.org/licenses/>.
#ifndef SETTINGS_H
#define SETTINGS_H
#include <QColor>
#include <QFont>
#include "globals.h"
#include <QString>
#include "../graph/path.h"
#include "scinot.h"
class DeBruijnNode;
class IntSetting
{
public:
IntSetting(int v, int minimum, int maximum, bool isOn = true) {val = v; min = minimum; max = maximum; on = isOn;}
IntSetting() {val = 0; min = 0; max = 0;}
int val, min, max;
bool on;
operator int() const {return val;}
IntSetting & operator=(int newVal) {val = newVal; return *this;}
bool inRange(int v) const {return v >= min && v <= max;}
};
class FloatSetting
{
public:
FloatSetting(double v, double minimum, double maximum, bool isOn = true) {val = v; min = minimum; max = maximum; on = isOn;}
FloatSetting() {val = 0.0; min = 0.0; max = 0.0;}
double val, min, max;
bool on;
operator double() const {return val;}
FloatSetting & operator=(double newVal) {val = newVal; return *this;}
bool inRange(double v) const {return v >= min && v <= max;}
};
class SciNotSetting
{
public:
SciNotSetting(SciNot v, SciNot minimum, SciNot maximum, bool isOn = true) {val = v; min = minimum; max = maximum; on = isOn;}
SciNotSetting() {val = 0.0; min = 0.0; max = 0.0;}
SciNot val, min, max;
bool on;
operator SciNot() const {return val;}
SciNotSetting & operator=(SciNot newVal) {val = newVal; return *this;}
bool inRange(SciNot v) const {return v >= min && v <= max;}
};
class Settings
{
public:
Settings();
bool doubleMode;
NodeLengthMode nodeLengthMode;
double autoNodeLengthPerMegabase;
FloatSetting manualNodeLengthPerMegabase;
double meanNodeLength;
double minTotalGraphLength;
IntSetting graphLayoutQuality;
bool linearLayout;
FloatSetting minimumNodeLength;
FloatSetting edgeLength;
FloatSetting doubleModeNodeSeparation;
FloatSetting nodeSegmentLength;
FloatSetting componentSeparation;
FloatSetting averageNodeWidth;
FloatSetting depthEffectOnWidth;
FloatSetting depthPower;
FloatSetting edgeWidth;
FloatSetting outlineThickness;
double selectionThickness;
double arrowheadSize;
double arrowheadsInSingleMode;
FloatSetting textOutlineThickness;
int blastRainbowPartsPerQuery;
GraphScope graphScope;
IntSetting nodeDistance;
bool startingNodesExactMatch;
QString startingNodes;
QString blastQueryFilename;
QString unnamedQueryDefaultName;
double minZoom;
double minZoomOnGraphDraw;
double maxZoom;
double maxAutomaticZoom;
double zoomFactor;
double textZoomScaleFactor; // 1.0 = text size constant, regardless of zoom. 0.0 = text size changes exactly with zoom.
double dragStrength;
bool displayNodeCustomLabels;
bool displayNodeNames;
bool displayNodeLengths;
bool displayNodeDepth;
bool displayNodeCsvData;
int displayNodeCsvDataCol;
bool displayBlastHits;
QFont labelFont;
bool textOutline;
bool antialiasing;
bool positionTextNodeCentre;
NodeDragging nodeDragging;
QColor edgeColour;
QColor outlineColour;
QColor selectionColour;
QColor textColour;
QColor textOutlineColour;
NodeColourScheme nodeColourScheme;
QColor uniformPositiveNodeColour;
QColor uniformNegativeNodeColour;
QColor uniformNodeSpecialColour;
IntSetting randomColourPositiveOpacity;
IntSetting randomColourNegativeOpacity;
IntSetting randomColourPositiveSaturation;
IntSetting randomColourNegativeSaturation;
IntSetting randomColourPositiveLightness;
IntSetting randomColourNegativeLightness;
IntSetting contiguitySearchSteps;
QColor contiguousStrandSpecificColour;
QColor contiguousEitherStrandColour;
QColor maybeContiguousColour;
QColor notContiguousColour;
QColor contiguityStartingColour;
QColor noBlastHitsColour;
bool autoDepthValue;
FloatSetting lowDepthValue;
QColor lowDepthColour;
FloatSetting highDepthValue;
QColor highDepthColour;
QColor pathHighlightShadingColour;
QColor pathHighlightOutlineColour;
QColor defaultCustomNodeColour;
//These specify the range of overlaps to look for when Bandage determines
//edge overlaps automatically.
int minAutoFindEdgeOverlap;
int maxAutoFindEdgeOverlap;
//These control how Bandage finds the best path in the graph to represent
//each BLAST query. Some of these settings can be turned on and off and
//therefore have a corresponding bool value.
IntSetting maxHitsForQueryPath;
IntSetting maxQueryPathNodes;
FloatSetting minQueryCoveredByPath;
FloatSetting minQueryCoveredByHits;
FloatSetting minMeanHitIdentity;
SciNotSetting maxEValueProduct;
FloatSetting minLengthPercentage;
FloatSetting maxLengthPercentage;
IntSetting minLengthBaseDiscrepancy;
IntSetting maxLengthBaseDiscrepancy;
//This holds the BLAST search parameters that a user can change before
//running a BLAST search.
QString blastSearchParameters;
//These are the optional BLAST hit filters: whether or not they are used and
//what their values are.
IntSetting blastAlignmentLengthFilter;
FloatSetting blastQueryCoverageFilter;
FloatSetting blastIdentityFilter;
SciNotSetting blastEValueFilter;
FloatSetting blastBitScoreFilter;
//These are used for the 'Depth range' graph scope.
FloatSetting minDepthRange;
FloatSetting maxDepthRange;
};
#endif // SETTINGS_H
|