806{
807 int gridColour = 0xEAEAEA;
808 int bgColour = 0xFFFFFF;
809 int labelColour = 0x000000;
810 if (m_darkTheme) {
811 bgColour = 0x303030;
812 gridColour = 0x3D3D3D;
813 labelColour = 0xA0A0A0;
814 }
815 if (m_hideGrid) gridColour = Chart::Transparent;
816
817 XYChart* chartDir = new XYChart(std::max(400, m_chartViewerSize.GetWidth()), std::max(300, m_chartViewerSize.GetHeight()), bgColour);
818
819 wxString title = m_pgPropChartTitle->GetValueAsString();
820 int titleSize = 0;
821 if (!title.IsEmpty()) {
822 chartDir->addTitle(title, "arial.ttf", 12, labelColour);
823 titleSize = 12;
824 }
825
826 LegendBox* box = nullptr;
827 if (m_showLeg) {
828 box = chartDir->addLegend(0, 0, false, "arial.ttf", 10);
829 box->setBackground(Chart::Transparent, Chart::Transparent);
830 box->setPos(m_pgPropMarginsLeft->GetValue().GetLong(), m_pgPropMarginsUp->GetValue().GetLong() + titleSize);
831 box->setFontColor(labelColour);
832 box->setLineStyleKey();
833 }
834 m_firstPlot = true;
835 CalcXYLimits(m_treeCtrl->GetRootItem(), chartDir);
836 m_firstPlot = true;
837 UpdateAllPlotsCharDir(m_treeCtrl->GetRootItem(), chartDir);
838
839
840 wxString xLabel = m_pgPropXLabel->GetValueAsString();
841 if (xLabel == _("auto")) xLabel = m_sugestXLabel;
842 wxString yLabel = m_pgPropYLabel->GetValueAsString();
843 if (yLabel == _("auto")) yLabel = m_sugestYLabel + GetUnitFromMagText(m_sugestYLabel);
844 int xLabelSize = 10, yLabelSize = 10;
845
846 if (xLabel.IsEmpty()) xLabelSize = 0;
847 if (yLabel.IsEmpty()) yLabelSize = 0;
848
849 chartDir->setPlotArea(
850 yLabelSize + m_pgPropMarginsLeft->GetValue().GetLong(),
851 titleSize + m_legendHeight + m_pgPropMarginsUp->GetValue().GetLong(),
852 chartDir->getWidth() - m_pgPropMarginsRight->GetValue().GetLong() - m_pgPropMarginsLeft->GetValue().GetLong() - yLabelSize,
853 chartDir->getHeight() - m_pgPropMarginsBot->GetValue().GetLong() - m_pgPropMarginsUp->GetValue().GetLong() - m_legendHeight - titleSize - xLabelSize,
854 bgColour, -1, -1, gridColour, gridColour);
855 chartDir->setClipping();
856
857
858 double xMin = 0, xMax = 0, yMin = 0, yMax = 0;
859 if (m_forceAxisLimits) {
860 xMin = m_pgPropXMin->GetValue().GetDouble();
861 xMax = m_pgPropXMax->GetValue().GetDouble();
862 yMin = m_pgPropYMin->GetValue().GetDouble();
863 yMax = m_pgPropYMax->GetValue().GetDouble();
864 }
865 else {
866
867 xMin = m_xMin;
868
869
870 xMax = m_xMax;
871 yMin = m_yMin - 0.05 * (m_yMax - m_yMin);
872 yMax = m_yMax + 0.05 * (m_yMax - m_yMin);
873 m_pgPropXMin->SetValue(xMin);
874 m_pgPropXMax->SetValue(xMax);
875 m_pgPropYMin->SetValue(yMin);
876 m_pgPropYMax->SetValue(yMax);
877 }
878 m_chartViewerDir->setFullRange("x", xMin, xMax);
879 m_chartViewerDir->setFullRange("y", yMin, yMax);
880
881
882 double viewPortStartTime = m_chartViewerDir->getValueAtViewPort("x", m_chartViewerDir->getViewPortLeft());
883 double viewPortEndTime = m_chartViewerDir->getValueAtViewPort("x", m_chartViewerDir->getViewPortLeft() + m_chartViewerDir->getViewPortWidth());
884
885 chartDir->xAxis()->setTickDensity(20);
886 chartDir->xAxis()->setLinearScale(viewPortStartTime, viewPortEndTime);
887 chartDir->xAxis()->setLabelFormat(wxString::Format("{value|2~%c}", DotOrComma()));
888 chartDir->xAxis()->setColors(labelColour, labelColour);
889 chartDir->xAxis()->setTitle(xLabel, "arial.ttf", 10, labelColour);
890
891 chartDir->yAxis()->setLabelFormat(wxString::Format("{value|2~%c}", DotOrComma()));
892 chartDir->yAxis()->setColors(labelColour, labelColour);
893 chartDir->yAxis()->setTitle(yLabel, "arial.ttf", 10, labelColour);
894 m_chartViewerDir->syncLinearAxisWithViewPort("y", chartDir->yAxis());
895
896 if (m_showCoords) {
897 DrawTrackLine(chartDir);
898 }
899
900 if (m_chartViewerDir->getChart() != nullptr)
901 {
902 delete m_chartViewerDir->getChart();
903 }
904
905 m_chartViewerDir->setChart(chartDir);
906
907 if (m_showLeg && box != nullptr) {
908 if (std::abs(m_legendHeight - box->getHeight()) > 1) {
909 m_legendHeight = box->getHeight();
910 DrawChartDir();
911 }
912 }
913}