├── .clang-format ├── .github ├── ISSUE_TEMPLATE │ └── bug_report.md └── workflows │ ├── ci.yml │ ├── coverity.yml │ └── dispatch_coverity.yml ├── .gitignore ├── .remarkrc.yaml ├── .restyled.yaml ├── .stylelintrc.json ├── Development.md ├── LICENSE ├── README.md ├── chartfx-acc ├── LICENSE.txt ├── pom.xml ├── ruleset.xml ├── scripts │ ├── DefaultRestUserPasswords.pwd │ ├── keystore.jks │ ├── keystore.pwd │ └── runClipboard └── src │ ├── main │ ├── java │ │ └── io │ │ │ └── fair_acc │ │ │ └── acc │ │ │ └── ui │ │ │ └── AcquisitionButtonBar.java │ └── resources │ │ ├── DefaultRestUserPasswords.pwd │ │ ├── io │ │ └── fair_acc │ │ │ ├── acc │ │ │ ├── remote │ │ │ │ └── clipboard │ │ │ │ │ └── PM5544_test_signal.png │ │ │ └── ui │ │ │ │ ├── acq_button_medium.css │ │ │ │ ├── acq_button_small.css │ │ │ │ └── icons │ │ │ │ ├── amber_dot.gif │ │ │ │ ├── amber_dot_small.gif │ │ │ │ ├── big_pause1.gif │ │ │ │ ├── big_pause1_p.gif │ │ │ │ ├── magenta_dot_small.gif │ │ │ │ ├── medium_pause2.gif │ │ │ │ ├── medium_pause2_p.gif │ │ │ │ ├── medium_pause2_r.gif │ │ │ │ ├── medium_pause_d.gif │ │ │ │ ├── medium_play1.gif │ │ │ │ ├── medium_play1_p.gif │ │ │ │ ├── medium_play1_r.gif │ │ │ │ ├── medium_play2.gif │ │ │ │ ├── medium_play2_p.gif │ │ │ │ ├── medium_play2_r.gif │ │ │ │ ├── medium_play_d.gif │ │ │ │ ├── medium_playstop1.gif │ │ │ │ ├── medium_playstop1_p.gif │ │ │ │ ├── medium_playstop1_r.gif │ │ │ │ ├── medium_playstop2.gif │ │ │ │ ├── medium_playstop2_p.gif │ │ │ │ ├── medium_playstop2_r.gif │ │ │ │ ├── medium_playstop_d.gif │ │ │ │ ├── medium_stop.gif │ │ │ │ ├── medium_stop_d.gif │ │ │ │ ├── medium_stop_p.gif │ │ │ │ ├── medium_stop_r.gif │ │ │ │ ├── purple_dot.gif │ │ │ │ ├── purple_dot_small.gif │ │ │ │ ├── red_dot.gif │ │ │ │ ├── red_dot_small.gif │ │ │ │ ├── small_forward1.gif │ │ │ │ ├── small_forward1_p.gif │ │ │ │ ├── small_forward1_r.gif │ │ │ │ ├── small_forward2.gif │ │ │ │ ├── small_forward2_p.gif │ │ │ │ ├── small_forward2_r.gif │ │ │ │ ├── small_forward_d.gif │ │ │ │ ├── small_pause1.gif │ │ │ │ ├── small_pause1_p.gif │ │ │ │ ├── small_pause1_r.gif │ │ │ │ ├── small_pause2.gif │ │ │ │ ├── small_pause2_p.gif │ │ │ │ ├── small_pause2_r.gif │ │ │ │ ├── small_pause_d.gif │ │ │ │ ├── small_play1.gif │ │ │ │ ├── small_play1_p.gif │ │ │ │ ├── small_play1_r.gif │ │ │ │ ├── small_play2.gif │ │ │ │ ├── small_play2_p.gif │ │ │ │ ├── small_play2_r.gif │ │ │ │ ├── small_play_d.gif │ │ │ │ ├── small_playstop1.gif │ │ │ │ ├── small_playstop1_p.gif │ │ │ │ ├── small_playstop1_r.gif │ │ │ │ ├── small_playstop2.gif │ │ │ │ ├── small_playstop2_p.gif │ │ │ │ ├── small_playstop2_r.gif │ │ │ │ ├── small_playstop_d.gif │ │ │ │ ├── small_rewind1.gif │ │ │ │ ├── small_rewind1_p.gif │ │ │ │ ├── small_rewind1_r.gif │ │ │ │ ├── small_rewind2.gif │ │ │ │ ├── small_rewind2_p.gif │ │ │ │ ├── small_rewind2_r.gif │ │ │ │ ├── small_rewind_d.gif │ │ │ │ ├── small_stop.gif │ │ │ │ ├── small_stop_d.gif │ │ │ │ ├── small_stop_p.gif │ │ │ │ └── small_stop_r.gif │ │ │ └── chartfx │ │ │ └── acc │ │ │ └── ui │ │ │ └── icons │ │ │ ├── big_pause1_r.gif │ │ │ ├── big_pause2.gif │ │ │ ├── big_pause2_p.gif │ │ │ ├── big_pause2_r.gif │ │ │ ├── big_pause_d.gif │ │ │ ├── big_play1.gif │ │ │ ├── big_play1_p.gif │ │ │ ├── big_play1_r.gif │ │ │ ├── big_play2.gif │ │ │ ├── big_play2_p.gif │ │ │ ├── big_play2_r.gif │ │ │ ├── big_play_d.gif │ │ │ ├── big_playstop1.gif │ │ │ ├── big_playstop1_p.gif │ │ │ ├── big_playstop1_r.gif │ │ │ ├── big_playstop_d.gif │ │ │ ├── big_stop.gif │ │ │ ├── big_stop_d.gif │ │ │ ├── big_stop_p.gif │ │ │ ├── big_stop_r.gif │ │ │ ├── blue_dot.gif │ │ │ ├── blue_dot_small.gif │ │ │ ├── button_prototype.xcf │ │ │ ├── green_dot.gif │ │ │ ├── green_dot_small.gif │ │ │ ├── grey_dot.gif │ │ │ ├── grey_dot_small.gif │ │ │ ├── magenta_dot.gif │ │ │ ├── medium_pause1.gif │ │ │ ├── medium_pause1_p.gif │ │ │ └── medium_pause1_r.gif │ │ ├── keystore.jks │ │ ├── keystore.pwd │ │ ├── localisation │ │ ├── messages_de.properties │ │ └── messages_en.properties │ │ ├── public │ │ ├── img │ │ │ ├── english.png │ │ │ ├── german.png │ │ │ ├── logo_b.png │ │ │ └── logo_w.png │ │ └── main.css │ │ ├── simplelogger.properties │ │ ├── velocity │ │ ├── admin │ │ │ └── admin.vm │ │ ├── clipboard │ │ │ ├── all.vm │ │ │ ├── one_long.vm │ │ │ ├── one_sse.vm │ │ │ └── upload.vm │ │ ├── errors │ │ │ ├── accessDenied.vm │ │ │ ├── notFound.vm │ │ │ └── unauthorised.vm │ │ ├── layout.vm │ │ └── login │ │ │ ├── changePassword.vm │ │ │ └── login.vm │ │ └── velocityconfig │ │ └── velocity_implicit.vm │ └── test │ └── resources │ └── simplelogger.properties ├── chartfx-bench ├── pom.xml └── src │ └── main │ └── java │ └── io │ └── fair_acc │ └── bench │ ├── AggregateDurationMeasure.java │ ├── BenchLevel.java │ ├── DurationMeasure.java │ ├── Measurable.java │ ├── MeasurementRecorder.java │ ├── RecordingDurationMeasure.java │ └── TimeMeasure.java ├── chartfx-chart ├── LICENSE ├── assets │ ├── FAIR_Logo.svg │ ├── GSI_Logo.svg │ ├── chartfx_logo.svg │ ├── error_icon.odg │ ├── error_icon.svg │ ├── info_icon.odg │ ├── info_icon.svg │ ├── warn_icon.odg │ └── warn_icon.svg ├── pom.xml ├── ruleset.xml └── src │ ├── main │ ├── java │ │ └── io │ │ │ └── fair_acc │ │ │ └── chartfx │ │ │ ├── Chart.java │ │ │ ├── XYChart.java │ │ │ ├── axes │ │ │ ├── Axis.java │ │ │ ├── AxisLabelFormatter.java │ │ │ ├── AxisLabelOverlapPolicy.java │ │ │ ├── AxisMode.java │ │ │ ├── AxisTransform.java │ │ │ ├── LogAxisType.java │ │ │ ├── TickUnitSupplier.java │ │ │ └── spi │ │ │ │ ├── AbstractAxis.java │ │ │ │ ├── AbstractAxisParameter.java │ │ │ │ ├── AxisRange.java │ │ │ │ ├── CategoryAxis.java │ │ │ │ ├── ColorGradientAxis.java │ │ │ │ ├── DefaultNumericAxis.java │ │ │ │ ├── LinearAxis.java │ │ │ │ ├── LogarithmicAxis.java │ │ │ │ ├── MetricPrefix.java │ │ │ │ ├── NumericAxis.java │ │ │ │ ├── OscilloscopeAxis.java │ │ │ │ ├── TickMark.java │ │ │ │ ├── format │ │ │ │ ├── AbstractFormatter.java │ │ │ │ ├── DefaultFormatter.java │ │ │ │ ├── DefaultTickUnitSupplier.java │ │ │ │ ├── DefaultTimeFormatter.java │ │ │ │ ├── DefaultTimeTickUnitSupplier.java │ │ │ │ ├── FormatterLabelCache.java │ │ │ │ └── SimpleFormatter.java │ │ │ │ └── transforms │ │ │ │ ├── AbstractAxisTransform.java │ │ │ │ ├── DefaultAxisTransform.java │ │ │ │ ├── LogarithmicAxisTransform.java │ │ │ │ └── LogarithmicTimeAxisTransform.java │ │ │ ├── bench │ │ │ ├── CircularDoubleDataSet2D.java │ │ │ ├── HdrHistogramDataSet.java │ │ │ ├── HdrHistogramRecorder.java │ │ │ ├── LiveDisplayRecorder.java │ │ │ ├── MeasurementRecorders.java │ │ │ └── PercentileAxis.java │ │ │ ├── events │ │ │ └── FxEventProcessor.java │ │ │ ├── legend │ │ │ ├── Legend.java │ │ │ └── spi │ │ │ │ └── DefaultLegend.java │ │ │ ├── marker │ │ │ ├── CachedMarker.java │ │ │ ├── DefaultMarker.java │ │ │ └── Marker.java │ │ │ ├── plugins │ │ │ ├── AbstractDataFormattingPlugin.java │ │ │ ├── AbstractRangeValueIndicator.java │ │ │ ├── AbstractSingleValueIndicator.java │ │ │ ├── AbstractValueIndicator.java │ │ │ ├── BenchPlugin.java │ │ │ ├── ChartOverlay.java │ │ │ ├── ChartPlugin.java │ │ │ ├── ColormapSelector.java │ │ │ ├── CrosshairIndicator.java │ │ │ ├── DataPointTooltip.java │ │ │ ├── EditAxis.java │ │ │ ├── EditDataSet.java │ │ │ ├── MouseEventsHelper.java │ │ │ ├── ParameterMeasurements.java │ │ │ ├── Screenshot.java │ │ │ ├── TableViewer.java │ │ │ ├── UpdateAxisLabels.java │ │ │ ├── ValueIndicator.java │ │ │ ├── XRangeIndicator.java │ │ │ ├── XValueIndicator.java │ │ │ ├── YRangeIndicator.java │ │ │ ├── YValueIndicator.java │ │ │ ├── YWatchValueIndicator.java │ │ │ ├── Zoomer.java │ │ │ └── measurements │ │ │ │ ├── AbstractChartMeasurement.java │ │ │ │ ├── DataSetMeasurements.java │ │ │ │ ├── SimpleMeasurements.java │ │ │ │ ├── TrendingMeasurements.java │ │ │ │ └── utils │ │ │ │ ├── ChartMeasurementSelector.java │ │ │ │ ├── CheckedNumberTextField.java │ │ │ │ ├── CheckedValueField.java │ │ │ │ ├── DataSetSelector.java │ │ │ │ └── ValueIndicatorSelector.java │ │ │ ├── renderer │ │ │ ├── ContourType.java │ │ │ ├── ErrorStyle.java │ │ │ ├── LineStyle.java │ │ │ ├── PolarTickStep.java │ │ │ ├── Renderer.java │ │ │ ├── RendererDataReducer.java │ │ │ ├── datareduction │ │ │ │ ├── DefaultDataReducer.java │ │ │ │ ├── DefaultDataReducer3D.java │ │ │ │ ├── MaxDataReducer.java │ │ │ │ ├── RamanDouglasPeukerDataReducer.java │ │ │ │ ├── ReductionType.java │ │ │ │ └── VisvalingamMaheswariWhyattDataReducer.java │ │ │ └── spi │ │ │ │ ├── AbstractContourDataSetRendererParameter.java │ │ │ │ ├── AbstractErrorDataSetRendererParameter.java │ │ │ │ ├── AbstractMetaDataRendererParameter.java │ │ │ │ ├── AbstractPointReducingRenderer.java │ │ │ │ ├── AbstractRenderer.java │ │ │ │ ├── AbstractRendererXY.java │ │ │ │ ├── AbstractRendererXYZ.java │ │ │ │ ├── BasicDataSetRenderer.java │ │ │ │ ├── CachedDataPoints.java │ │ │ │ ├── ContourDataSetCache.java │ │ │ │ ├── ContourDataSetRenderer.java │ │ │ │ ├── ErrorDataSetRenderer.java │ │ │ │ ├── GridRenderer.java │ │ │ │ ├── HistogramRenderer.java │ │ │ │ ├── HistoryDataSetRenderer.java │ │ │ │ ├── LabelledMarkerRenderer.java │ │ │ │ ├── MetaDataRenderer.java │ │ │ │ ├── MountainRangeRenderer.java │ │ │ │ ├── ReducingLineRenderer.java │ │ │ │ ├── financial │ │ │ │ ├── AbstractFinancialRenderer.java │ │ │ │ ├── CandleStickRenderer.java │ │ │ │ ├── FinancialDataSetNode.java │ │ │ │ ├── FinancialTheme.java │ │ │ │ ├── FootprintRenderer.java │ │ │ │ ├── HighLowRenderer.java │ │ │ │ ├── PositionFinancialRendererPaintAfterEP.java │ │ │ │ └── service │ │ │ │ │ ├── DataSetAware.java │ │ │ │ │ ├── OhlcvRendererEpData.java │ │ │ │ │ ├── PaintBarMarker.java │ │ │ │ │ ├── RendererPaintAfterEP.java │ │ │ │ │ ├── RendererPaintAfterEPAware.java │ │ │ │ │ └── footprint │ │ │ │ │ ├── FootprintRendererAttributes.java │ │ │ │ │ └── NbColumnColorGroup.java │ │ │ │ ├── hexagon │ │ │ │ ├── GridCalculationsHelper.java │ │ │ │ ├── GridDrawer.java │ │ │ │ ├── GridPosition.java │ │ │ │ ├── Hexagon.java │ │ │ │ ├── HexagonCallback.java │ │ │ │ ├── HexagonMap.java │ │ │ │ ├── IHexagonCreator.java │ │ │ │ ├── IPathInfoSupplier.java │ │ │ │ ├── LICENSE │ │ │ │ ├── MapGenerator.java │ │ │ │ ├── NoHexagonFoundException.java │ │ │ │ └── NoPathFoundException.java │ │ │ │ ├── marchingsquares │ │ │ │ ├── Cell.java │ │ │ │ ├── GeneralPath.java │ │ │ │ ├── Grid.java │ │ │ │ ├── MarchingSquares.java │ │ │ │ └── PathGenerator.java │ │ │ │ └── utils │ │ │ │ ├── BezierCurve.java │ │ │ │ ├── ChartIconFactory.java │ │ │ │ ├── ColorGradient.java │ │ │ │ ├── CssToColorHelper.java │ │ │ │ ├── DashPatternStyle.java │ │ │ │ └── FillPatternStyleHelper.java │ │ │ ├── ui │ │ │ ├── BorderedTitledPane.java │ │ │ ├── ChartLayoutAnimator.java │ │ │ ├── HiddenSidesPane.java │ │ │ ├── HiddenSidesPaneSkin.java │ │ │ ├── ObservableDeque.java │ │ │ ├── ProfilerInfoBox.java │ │ │ ├── ResizableCanvas.java │ │ │ ├── SidesPane.java │ │ │ ├── SidesPaneSample.java │ │ │ ├── SidesPaneSkin.java │ │ │ ├── TilingPane.java │ │ │ ├── ToolBarFlowPane.java │ │ │ ├── ToolBarShapeHelper.java │ │ │ ├── css │ │ │ │ ├── AbstractStyleParser.java │ │ │ │ ├── ColorPalette.java │ │ │ │ ├── CssPropertyFactory.java │ │ │ │ ├── DataSetNode.java │ │ │ │ ├── DataSetNodeParameter.java │ │ │ │ ├── DataSetStyleParser.java │ │ │ │ ├── LineStyle.java │ │ │ │ ├── StyleGroup.java │ │ │ │ ├── StyleUtil.java │ │ │ │ └── TextStyle.java │ │ │ ├── geometry │ │ │ │ ├── Corner.java │ │ │ │ └── Side.java │ │ │ └── layout │ │ │ │ ├── ChartPane.java │ │ │ │ ├── FullSizePane.java │ │ │ │ └── TitleLabel.java │ │ │ ├── utils │ │ │ ├── AxisSynchronizer.java │ │ │ ├── DecimalStringConverter.java │ │ │ ├── DragResizerUtil.java │ │ │ ├── FXUtils.java │ │ │ ├── FastDoubleArrayCache.java │ │ │ ├── MasterSlaveAxisSynchronizer.java │ │ │ ├── MemorySizeStringConverter.java │ │ │ ├── MouseUtils.java │ │ │ ├── NumberFormatter.java │ │ │ ├── NumberFormatterImpl.java │ │ │ ├── PaletteQuantizer.java │ │ │ ├── PaletteQuantizerNeuQuant.java │ │ │ ├── PercentageStringConverter.java │ │ │ ├── PeriodicScreenCapture.java │ │ │ ├── PropUtil.java │ │ │ ├── RotatedBounds.java │ │ │ ├── RotatedRegion.java │ │ │ ├── Schubfach.java │ │ │ ├── ScientificNotationStringConverter.java │ │ │ ├── SimplePerformanceMeter.java │ │ │ ├── WritableImageCache.java │ │ │ ├── WriteFxImage.java │ │ │ └── XYChartUtils.java │ │ │ └── viewer │ │ │ ├── DataView.java │ │ │ ├── DataViewWindow.java │ │ │ ├── DataViewer.java │ │ │ └── SquareButton.java │ └── resources │ │ └── io │ │ └── fair_acc │ │ └── chartfx │ │ ├── _financial.scss │ │ ├── _palette.scss │ │ ├── chart-icons.css │ │ ├── chart-icons.scss │ │ ├── chart.css │ │ ├── chart.scss │ │ ├── financial │ │ ├── chart-blackberry.css │ │ ├── chart-dark.css │ │ └── chart.css │ │ ├── fonts │ │ ├── fair-chart-icons.eot │ │ ├── fair-chart-icons.svg │ │ ├── fair-chart-icons.ttf │ │ └── fair-chart-icons.woff │ │ ├── icons │ │ ├── chartfx_logo_b.png │ │ └── chartfx_logo_w.png │ │ ├── images │ │ └── sand.png │ │ ├── plugins │ │ └── editaxis.css │ │ ├── ui │ │ └── titled-border.css │ │ └── viewer │ │ └── DataViewer.css │ └── test │ ├── java │ └── io │ │ └── fair_acc │ │ └── chartfx │ │ ├── ChartTest.java │ │ ├── MemoryLeakTests.java │ │ ├── axes │ │ ├── AxisModeTests.java │ │ └── spi │ │ │ ├── AbstractAxisParameterTests.java │ │ │ ├── AbstractAxisTests.java │ │ │ ├── AxisRangeTests.java │ │ │ ├── DefaultNumericAxisTests.java │ │ │ ├── MetricPrefixTests.java │ │ │ └── OscilloscopeAxisTests.java │ │ ├── legend │ │ └── LegendTests.java │ │ ├── marker │ │ └── DefaultMarkerTests.java │ │ ├── plugins │ │ ├── ChartPluginTest.java │ │ ├── CrosshairIndicatorTest.java │ │ ├── DataPointTooltipAxisFromChartTest.java │ │ ├── DataPointTooltipTest.java │ │ ├── EditAxisTests.java │ │ ├── ReproduceTableViewerBug.java │ │ ├── ScreenshotTest.java │ │ ├── TableViewerTest.java │ │ ├── YWatchValueIndicatorTest.java │ │ └── measurements │ │ │ ├── DataSetMeasurementsTests.java │ │ │ ├── SimpleMeasurementsTests.java │ │ │ └── utils │ │ │ ├── ChartMeasurementSelectorTests.java │ │ │ ├── CheckedValueFieldTests.java │ │ │ ├── DataSetSelectorTests.java │ │ │ └── ValueIndicatorSelectorTests.java │ │ ├── renderer │ │ ├── datareduction │ │ │ ├── DefaultDataReducer3DTests.java │ │ │ └── DefaultDataReducerTests.java │ │ └── spi │ │ │ ├── AbstractContourDataSetRendererParameterTests.java │ │ │ ├── AbstractErrorDataSetRendererParameterTests.java │ │ │ ├── ContourDataSetCacheTests.java │ │ │ ├── ContourDataSetRendererTests.java │ │ │ ├── ErrorDataSetRendererTests.java │ │ │ ├── HistogramRendererTests.java │ │ │ ├── LabelledMarkerRendererTests.java │ │ │ ├── financial │ │ │ ├── CandleStickRendererTest.java │ │ │ ├── FootprintRendererTest.java │ │ │ ├── HighLowRendererTest.java │ │ │ ├── PositionFinancialRendererPaintAfterEPTest.java │ │ │ └── utils │ │ │ │ ├── CalendarUtils.java │ │ │ │ ├── FinancialTestUtils.java │ │ │ │ ├── FootprintRenderedAPIDummyAdapter.java │ │ │ │ ├── Interval.java │ │ │ │ ├── Ohlcv.java │ │ │ │ ├── OhlcvItem.java │ │ │ │ └── PositionFinancialDataSetDummy.java │ │ │ └── utils │ │ │ └── ColorGradientTests.java │ │ ├── ui │ │ ├── BorderedTitledPaneTests.java │ │ ├── MockListObserver.java │ │ ├── ObservableDequeTest.java │ │ ├── ProfilerInfoBoxTests.java │ │ ├── TilingPaneTests.java │ │ ├── css │ │ │ ├── CssPropertyFactoryTest.java │ │ │ └── DataSetStyleParserTest.java │ │ └── utils │ │ │ ├── FuzzyTestImageUtils.java │ │ │ ├── JavaFXInterceptorUtils.java │ │ │ ├── JavaFxInterceptorTests.java │ │ │ ├── SelectiveJavaFxInterceptorTests.java │ │ │ └── TestFx.java │ │ ├── utils │ │ ├── DragResizerUtilTests.java │ │ ├── FXUtilsTests.java │ │ ├── MouseUtilsTests.java │ │ ├── NumberFormatterImplTest.java │ │ ├── SchubfachTest.java │ │ ├── WritableImageCacheTests.java │ │ ├── WriteFxImageBenchmark.java │ │ └── WriteFxImageTests.java │ │ └── viewer │ │ ├── DataViewTests.java │ │ ├── DataViewWindowTests.java │ │ ├── DataViewerTests.java │ │ └── SquareButtonTest.java │ └── resources │ └── simplelogger.properties ├── chartfx-dataset ├── .gitignore ├── LICENSE ├── pom.xml ├── ruleset.xml └── src │ ├── main │ ├── codegen │ │ └── io │ │ │ └── fair_acc │ │ │ └── dataset │ │ │ └── spi │ │ │ └── utils │ │ │ └── MultiArrayProto.java │ └── java │ │ └── io │ │ └── fair_acc │ │ └── dataset │ │ ├── AxisDescription.java │ │ ├── CategoryHistogram.java │ │ ├── DataSet.java │ │ ├── DataSet2D.java │ │ ├── DataSet3D.java │ │ ├── DataSetError.java │ │ ├── DataSetMetaData.java │ │ ├── DefaultNumberFormatter.java │ │ ├── EditConstraints.java │ │ ├── EditableDataSet.java │ │ ├── Formatter.java │ │ ├── GridDataSet.java │ │ ├── Histogram.java │ │ ├── Histogram1D.java │ │ ├── Histogram2D.java │ │ ├── events │ │ ├── BitState.java │ │ ├── ChartBits.java │ │ ├── EventProcessor.java │ │ ├── EventSource.java │ │ ├── StateListener.java │ │ └── ThreadEventProcessor.java │ │ ├── locks │ │ ├── DataSetLock.java │ │ └── DefaultDataSetLock.java │ │ ├── remote │ │ ├── Data.java │ │ ├── DataContainer.java │ │ └── MimeType.java │ │ ├── spi │ │ ├── AbstractDataSet.java │ │ ├── AbstractErrorDataSet.java │ │ ├── AbstractGridDataSet.java │ │ ├── AbstractHistogram.java │ │ ├── AbstractStylable.java │ │ ├── AveragingDataSet.java │ │ ├── CircularDoubleErrorDataSet.java │ │ ├── DataRange.java │ │ ├── DataSetBuilder.java │ │ ├── DefaultAxisDescription.java │ │ ├── DefaultDataSet.java │ │ ├── DefaultErrorDataSet.java │ │ ├── DimReductionDataSet.java │ │ ├── DoubleDataSet.java │ │ ├── DoubleErrorDataSet.java │ │ ├── DoubleGridDataSet.java │ │ ├── FifoDoubleErrorDataSet.java │ │ ├── FloatDataSet.java │ │ ├── FragmentedDataSet.java │ │ ├── Histogram.java │ │ ├── Histogram2.java │ │ ├── LabelledMarker.java │ │ ├── LabelledMarkerDataSet.java │ │ ├── LimitedIndexedTreeDataSet.java │ │ ├── MultiDimDoubleDataSet.java │ │ ├── RollingDataSet.java │ │ ├── TransposedDataSet.java │ │ ├── WrappedDataSet.java │ │ ├── fastutil │ │ │ ├── ArrayUtil.java │ │ │ ├── DoubleArrayList.java │ │ │ ├── FloatArrayList.java │ │ │ └── IntArrayList.java │ │ ├── financial │ │ │ ├── OhlcvDataSet.java │ │ │ └── api │ │ │ │ ├── attrs │ │ │ │ ├── AttributeKey.java │ │ │ │ ├── AttributeModel.java │ │ │ │ ├── AttributeModelAware.java │ │ │ │ └── TypeKey.java │ │ │ │ └── ohlcv │ │ │ │ ├── IOhlcv.java │ │ │ │ ├── IOhlcvItem.java │ │ │ │ └── IOhlcvItemAware.java │ │ └── utils │ │ │ ├── DoublePoint.java │ │ │ ├── DoublePointError.java │ │ │ ├── HashMapHelper.java │ │ │ ├── IntStringMap.java │ │ │ ├── MathUtils.java │ │ │ ├── MultiArray.java │ │ │ ├── ObjectObjectMap.java │ │ │ ├── StringHashMapList.java │ │ │ ├── StringHashMapList2.java │ │ │ ├── StringHashMapList3.java │ │ │ └── Tuple.java │ │ ├── testdata │ │ ├── TestDataSet.java │ │ └── spi │ │ │ ├── AbstractTestFunction.java │ │ │ ├── CosineFunction.java │ │ │ ├── ErrorTestDataSet.java │ │ │ ├── GaussFunction.java │ │ │ ├── RandomDataGenerator.java │ │ │ ├── RandomStepFunction.java │ │ │ ├── RandomWalkFunction.java │ │ │ ├── SincFunction.java │ │ │ ├── SineFunction.java │ │ │ ├── SingleOutlierFunction.java │ │ │ └── TriangleFunction.java │ │ └── utils │ │ ├── AggregateException.java │ │ ├── ArrayCache.java │ │ ├── AssertUtils.java │ │ ├── ByteArrayCache.java │ │ ├── ByteBufferOutputStream.java │ │ ├── Cache.java │ │ ├── CacheCollection.java │ │ ├── CachedDaemonThreadFactory.java │ │ ├── CircularBuffer.java │ │ ├── DataSetStyleBuilder.java │ │ ├── DataSetUtils.java │ │ ├── DataSetUtilsHelper.java │ │ ├── DoubleArrayCache.java │ │ ├── DoubleCircularBuffer.java │ │ ├── DoubleRingBuffer.java │ │ ├── GenericsHelper.java │ │ ├── IndexedStringConsumer.java │ │ ├── LimitedQueue.java │ │ ├── NoDuplicatesList.java │ │ ├── ProcessingProfiler.java │ │ ├── RingBuffer.java │ │ ├── SoftHashMap.java │ │ ├── SoftKeyHashMap.java │ │ ├── StreamUtils.java │ │ ├── StyleBuilder.java │ │ └── trees │ │ ├── AbstractMap.java │ │ ├── AbstractSet.java │ │ ├── IndexedNavigableMap.java │ │ ├── IndexedNavigableSet.java │ │ ├── IndexedTreeMap.java │ │ └── IndexedTreeSet.java │ └── test │ ├── java │ └── io │ │ └── fair_acc │ │ └── dataset │ │ ├── FormatterTests.java │ │ ├── event │ │ └── TestEventSource.java │ │ ├── events │ │ └── BitStateTest.java │ │ ├── locks │ │ ├── DataSetLockStressTest.java │ │ └── DataSetLockTest.java │ │ ├── remote │ │ ├── DataContainerTests.java │ │ ├── DataTests.java │ │ └── MimeTypeTests.java │ │ ├── spi │ │ ├── AveragingDataSetTests.java │ │ ├── CircularDoubleErrorDataSetTests.java │ │ ├── DataRangeTest.java │ │ ├── DataSetBuilderTests.java │ │ ├── DataSetEqualityTests.java │ │ ├── DimReductionDataSetTests.java │ │ ├── DoubleDataSetTests.java │ │ ├── DoubleErrorDataSetTests.java │ │ ├── DoubleGridDataSetTests.java │ │ ├── EditableDataSetTests.java │ │ ├── FifoDoubleErrorDataSetTests.java │ │ ├── FloatDataSetTests.java │ │ ├── GenericDataSetTests.java │ │ ├── HistogramTests.java │ │ ├── MultiDimDoubleDataSetTests.java │ │ ├── TransposedDataSetTest.java │ │ ├── financial │ │ │ ├── OhlcvDataSetTest.java │ │ │ ├── api │ │ │ │ └── attrs │ │ │ │ │ ├── AttributeKeyTest.java │ │ │ │ │ ├── AttributeModelTest.java │ │ │ │ │ └── TypeKeyTest.java │ │ │ └── utils │ │ │ │ ├── FinancialTestUtils.java │ │ │ │ ├── Ohlcv.java │ │ │ │ └── OhlcvItem.java │ │ └── utils │ │ │ └── MultiArrayTest.java │ │ ├── testdata │ │ └── spi │ │ │ └── ErrorTestDataSetTest.java │ │ └── utils │ │ ├── ArrayCacheTests.java │ │ ├── ByteArrayCacheTests.java │ │ ├── ByteBufferOutputStreamTests.java │ │ ├── CacheTests.java │ │ ├── CircularBufferTest.java │ │ ├── DataSetUtilsTest.java │ │ ├── DoubleArrayCacheTests.java │ │ ├── DoubleCircularBufferTests.java │ │ ├── GenericsHelperTests.java │ │ ├── LimitedQueueTests.java │ │ ├── NearlyEqualsTests.java │ │ ├── SoftHashMapTests.java │ │ └── StreamUtilsTest.java │ └── resources │ ├── junit-platform.properties │ └── simplelogger.properties ├── chartfx-generate ├── LICENSE ├── pom.xml └── src │ └── main │ └── java │ └── io │ └── fair_acc │ └── generate │ └── CodeGenerator.java ├── chartfx-math ├── .pmd ├── LICENSE ├── pom.xml ├── ruleset.xml └── src │ ├── main │ ├── codegen │ │ └── io │ │ │ └── fair_acc │ │ │ └── math │ │ │ ├── ArrayMathGen.java │ │ │ ├── MathBaseGen.java │ │ │ └── MathGen.java │ ├── java │ │ └── io │ │ │ └── fair_acc │ │ │ └── math │ │ │ ├── ArrayConversion.java │ │ │ ├── ArrayUtils.java │ │ │ ├── DataSetMath.java │ │ │ ├── MathBaseFast.java │ │ │ ├── MathBasePrecise.java │ │ │ ├── MathDataSet.java │ │ │ ├── MultiDimDataSetMath.java │ │ │ ├── SimpleDataSetEstimators.java │ │ │ ├── Spline.java │ │ │ ├── TRandom.java │ │ │ ├── TRandom1.java │ │ │ ├── TRandom3.java │ │ │ ├── filter │ │ │ ├── FilterType.java │ │ │ ├── fir │ │ │ │ └── FirFilter.java │ │ │ └── iir │ │ │ │ ├── BandPassTransform.java │ │ │ │ ├── BandStopTransform.java │ │ │ │ ├── Bessel.java │ │ │ │ ├── Biquad.java │ │ │ │ ├── Butterworth.java │ │ │ │ ├── Cascade.java │ │ │ │ ├── ChebyshevI.java │ │ │ │ ├── ChebyshevII.java │ │ │ │ ├── ComplexPair.java │ │ │ │ ├── DirectFormAbstract.java │ │ │ │ ├── DirectFormI.java │ │ │ │ ├── DirectFormII.java │ │ │ │ ├── HighPassTransform.java │ │ │ │ ├── LICENSE.txt │ │ │ │ ├── LayoutBase.java │ │ │ │ ├── LowPassTransform.java │ │ │ │ └── PoleZeroPair.java │ │ │ ├── fitter │ │ │ ├── GaussFitting.java │ │ │ ├── LinearRegressionFitter.java │ │ │ ├── NonLinearRegressionFitter.java │ │ │ └── NonLinearRegressionFitter2.java │ │ │ ├── functions │ │ │ ├── AbstractFunction.java │ │ │ ├── AbstractFunction1D.java │ │ │ ├── AbstractFunctionND.java │ │ │ ├── BetaDistributionFunction.java │ │ │ ├── BetaFunction.java │ │ │ ├── BreitWignerFunction.java │ │ │ ├── CauchyLorentzFunction.java │ │ │ ├── CombFunction.java │ │ │ ├── EllipseFunction.java │ │ │ ├── Function.java │ │ │ ├── Function1D.java │ │ │ ├── FunctionND.java │ │ │ ├── GaussianFunction.java │ │ │ ├── HeavisideStepFunction.java │ │ │ ├── LogNormalFunction.java │ │ │ ├── PoissonFunction.java │ │ │ ├── PolynomialFunction.java │ │ │ ├── RandomFunction.java │ │ │ ├── RandomWalkFunction.java │ │ │ ├── SigmoidFunction.java │ │ │ ├── TrigCosineFunction.java │ │ │ ├── TrigSineFunction.java │ │ │ └── TruncatedGaussianFunction.java │ │ │ ├── matrix │ │ │ ├── AbstractMatrix.java │ │ │ ├── CholeskyDecomposition.java │ │ │ ├── EigenvalueDecomposition.java │ │ │ ├── LUDecomposition.java │ │ │ ├── Matrix.java │ │ │ ├── MatrixD.java │ │ │ ├── MatrixFactory.java │ │ │ ├── QRDecomposition.java │ │ │ └── SingularValueDecomposition.java │ │ │ ├── spectra │ │ │ ├── Apodization.java │ │ │ ├── Convolution.java │ │ │ ├── EEMD.java │ │ │ ├── HilbertTransform.java │ │ │ ├── ShortTimeFourierTransform.java │ │ │ ├── SpectrumTools.java │ │ │ ├── TSpectrum.java │ │ │ ├── dtft │ │ │ │ └── DiscreteTimeFourierTransform.java │ │ │ ├── fft │ │ │ │ └── ComplexFFT_1D.java │ │ │ ├── lomb │ │ │ │ └── LombPeriodogram.java │ │ │ └── wavelet │ │ │ │ ├── CDFWavelet.java │ │ │ │ ├── ContinuousWavelet.java │ │ │ │ ├── DaubechiesWavelet.java │ │ │ │ ├── FastWaveletTransform.java │ │ │ │ ├── Lift.java │ │ │ │ ├── MyWavelet.java │ │ │ │ ├── WaveletCoefficients.java │ │ │ │ └── WaveletTransform.java │ │ │ ├── storage │ │ │ ├── DoubleStorage1D.java │ │ │ ├── DoubleStorageND.java │ │ │ └── VoxelArrayND.java │ │ │ └── utils │ │ │ ├── ConcurrencyUtils.java │ │ │ └── UpdateListener.java │ └── resources │ │ └── io │ │ └── fair_acc │ │ └── math │ │ └── spectra │ │ └── data │ │ ├── window_blackman-harris.png │ │ ├── window_blackman-nuttall.png │ │ ├── window_blackman.png │ │ ├── window_flat_top.png │ │ ├── window_hamming.png │ │ ├── window_hann.png │ │ ├── window_nuttall.png │ │ └── window_rectangular.png │ └── test │ ├── java │ └── io │ │ └── fair_acc │ │ └── math │ │ ├── ArrayConversionTests.java │ │ ├── ArrayMathTests.java │ │ ├── ArrayUtilsTests.java │ │ ├── DataSetMathTests.java │ │ ├── FastMathTests.java │ │ ├── MathDataSetTests.java │ │ ├── MultiDimDatasetMathTests.java │ │ ├── SimpleDataSetEstimatorsTest.java │ │ ├── TRandomTests.java │ │ ├── filter │ │ ├── fir │ │ │ └── FirFilterTests.java │ │ └── iir │ │ │ └── IirFilterTests.java │ │ └── spectra │ │ ├── ApodizationTests.java │ │ ├── EEMDTests.java │ │ ├── ShortTimeFourierTransformTest.java │ │ ├── TSpectrumTests.java │ │ ├── dct │ │ ├── DoubleDCT1DTests.java │ │ └── FloatDCT1DTests.java │ │ ├── dht │ │ ├── DoubleDHT1DTests.java │ │ └── FloatDHT1DTests.java │ │ ├── dst │ │ ├── DoubleDST1DTests.java │ │ └── FloatDST1DTests.java │ │ └── fft │ │ ├── DoubleFFT1DTests.java │ │ ├── FloatFFT1DTests.java │ │ └── GeneralFFTTests.java │ └── resources │ └── simplelogger.properties ├── chartfx-report ├── LICENSE └── pom.xml ├── chartfx-samples ├── LICENSE ├── conveyor.conf ├── pom.xml ├── ruleset.xml └── src │ ├── main │ ├── java │ │ └── io │ │ │ └── fair_acc │ │ │ └── sample │ │ │ ├── ChartFxDatasetSamplerProject.java │ │ │ ├── ChartFxFinancialSamplerProject.java │ │ │ ├── ChartFxMathSamplerProject.java │ │ │ ├── ChartFxMiscSamplerProject.java │ │ │ ├── ChartFxSampler.java │ │ │ ├── ChartFxSamplerProject.java │ │ │ ├── LaunchJFX.java │ │ │ ├── chart │ │ │ ├── AxisRangeScalingSample.java │ │ │ ├── CategoryAxisSample.java │ │ │ ├── ChartAnatomySample.java │ │ │ ├── ChartIndicatorSample.java │ │ │ ├── ChartPerformanceGraph.java │ │ │ ├── ChartSample.java │ │ │ ├── ContourChartSample.java │ │ │ ├── CssStylingSample.java │ │ │ ├── CustomColourSchemeSample.java │ │ │ ├── CustomFragmentedRendererSample.java │ │ │ ├── DataViewerSample.java │ │ │ ├── DimReductionDataSetSample.java │ │ │ ├── EditDataSetSample.java │ │ │ ├── ErrorDataSetRendererSample.java │ │ │ ├── ErrorDataSetRendererStylingSample.java │ │ │ ├── FxmlSample.java │ │ │ ├── GridRendererSample.java │ │ │ ├── HexagonSamples.java │ │ │ ├── Histogram2DimSample.java │ │ │ ├── HistogramBasicSample.java │ │ │ ├── HistogramRendererBarSample.java │ │ │ ├── HistogramRendererSample.java │ │ │ ├── HistogramSample.java │ │ │ ├── HistoryDataSetRendererSample.java │ │ │ ├── LabelledMarkerSample.java │ │ │ ├── LogAxisSample.java │ │ │ ├── MetaDataRendererSample.java │ │ │ ├── MountainRangeRendererSample.java │ │ │ ├── MultipleAxesSample.java │ │ │ ├── NotANumberSample.java │ │ │ ├── OscilloscopeAxisSample.java │ │ │ ├── PaddedAutoGrowAxisSample.java │ │ │ ├── PolarPlotSample.java │ │ │ ├── RollingBufferSample.java │ │ │ ├── RollingBufferSortedTreeSample.java │ │ │ ├── RotatedAxisLabelSample.java │ │ │ ├── ScatterAndBubbleRendererSample.java │ │ │ ├── SimpleChartSample.java │ │ │ ├── SimpleInvertedChartSample.java │ │ │ ├── TimeAxisNonLinearSample.java │ │ │ ├── TimeAxisRangeSample.java │ │ │ ├── TimeAxisSample.java │ │ │ ├── TransposedDataSetSample.java │ │ │ ├── ValueIndicatorSample.java │ │ │ ├── VisibilityToggleSample.java │ │ │ ├── WaterfallPerformanceSample.java │ │ │ ├── YWatchValueIndicatorSample.java │ │ │ ├── ZoomerSample.java │ │ │ ├── legacy │ │ │ │ ├── ChartHighUpdateRateSample.java │ │ │ │ ├── ChartPerformanceBenchmark.java │ │ │ │ ├── MultipleAxesLineChart.java │ │ │ │ ├── RollingBufferLegacySample.java │ │ │ │ ├── RollingBufferNewRefSample.java │ │ │ │ └── utils │ │ │ │ │ ├── AbstractTestApplication.java │ │ │ │ │ ├── ChartTestCase.java │ │ │ │ │ ├── JavaFXTestChart.java │ │ │ │ │ └── TestChart.java │ │ │ └── utils │ │ │ │ ├── MidiWaveformSynthesizer.java │ │ │ │ └── TestDataSetSource.java │ │ │ ├── dataset │ │ │ ├── FifoDoubleErrorDataSetSample.java │ │ │ ├── FloatToDoubleBenchmarkSample.java │ │ │ └── legacy │ │ │ │ ├── DoubleDataSet.java │ │ │ │ └── DoubleErrorDataSet.java │ │ │ ├── financial │ │ │ ├── AbstractBasicFinancialApplication.java │ │ │ ├── FinancialAdvancedCandlestickSample.java │ │ │ ├── FinancialCandlestickSample.java │ │ │ ├── FinancialFootprintSample.java │ │ │ ├── FinancialHiLowSample.java │ │ │ ├── FinancialPositionSample.java │ │ │ ├── FinancialRealtimeCandlestickSample.java │ │ │ ├── FinancialRealtimeFootprintSample.java │ │ │ ├── dos │ │ │ │ ├── AbsorptionClusterDO.java │ │ │ │ ├── ArrayIterator.java │ │ │ │ ├── DefaultOHLCV.java │ │ │ │ ├── Interval.java │ │ │ │ ├── OHLCVItem.java │ │ │ │ ├── OHLCVItemExtended.java │ │ │ │ ├── Order.java │ │ │ │ ├── OrderContainer.java │ │ │ │ ├── OrderExpression.java │ │ │ │ ├── Position.java │ │ │ │ ├── PositionContainer.java │ │ │ │ ├── PriceVolumeContainer.java │ │ │ │ └── ResettableIterator.java │ │ │ └── service │ │ │ │ ├── CalendarUtils.java │ │ │ │ ├── ConcurrentDateFormatAccess.java │ │ │ │ ├── OhlcvChangeListener.java │ │ │ │ ├── SCIDByNio.java │ │ │ │ ├── SimpleOhlcvDailyParser.java │ │ │ │ ├── SimpleOhlcvReplayDataSet.java │ │ │ │ ├── StandardTradePlanAttributes.java │ │ │ │ ├── TickDataFinishedException.java │ │ │ │ ├── TickOhlcvDataProvider.java │ │ │ │ ├── addon │ │ │ │ └── AbsorptionConsolidationAddon.java │ │ │ │ ├── consolidate │ │ │ │ ├── AbstractIncrementalOhlcvConsolidation.java │ │ │ │ ├── IncrementalOhlcvConsolidation.java │ │ │ │ ├── OhlcvConsolidationAddon.java │ │ │ │ ├── OhlcvTimeframeConsolidation.java │ │ │ │ ├── RangeBarsIncrementalOhlcvConsolidation.java │ │ │ │ ├── TimePeriodIncrementalOhlcvConsolidation.java │ │ │ │ └── VolumeIncrementalOhlcvConsolidation.java │ │ │ │ ├── execution │ │ │ │ ├── AbstractExecutionPlatform.java │ │ │ │ ├── BacktestExecutionPlatform.java │ │ │ │ ├── BasicOrderExecutionService.java │ │ │ │ ├── ExecutionPlatform.java │ │ │ │ ├── ExecutionPlatformListener.java │ │ │ │ ├── ExecutionResult.java │ │ │ │ └── OrderEvent.java │ │ │ │ ├── footprint │ │ │ │ ├── AbsorptionClusterRendererPaintAfterEP.java │ │ │ │ ├── DiagonalDominantNbColumnColorGroupService.java │ │ │ │ ├── FootprintRenderedAPIAdapter.java │ │ │ │ └── NbColumnColorGroupService.java │ │ │ │ ├── order │ │ │ │ ├── InternalOrderIdGenerator.java │ │ │ │ ├── InternalPositionIdGenerator.java │ │ │ │ ├── PositionFinancialDataSet.java │ │ │ │ ├── ResolveOrderService.java │ │ │ │ └── ResolvePositionService.java │ │ │ │ ├── period │ │ │ │ ├── EodPeriod.java │ │ │ │ ├── IntradayPeriod.java │ │ │ │ └── Period.java │ │ │ │ └── plan │ │ │ │ └── MktOrderListTradePlan.java │ │ │ ├── math │ │ │ ├── ComplexFourierSample.java │ │ │ ├── DataSetAverageSample.java │ │ │ ├── DataSetFilterSample.java │ │ │ ├── DataSetIntegrateDifferentiateSample.java │ │ │ ├── DataSetIntegrationWithLimitsSample.java │ │ │ ├── DataSetSpectrumSample.java │ │ │ ├── EMDSample.java │ │ │ ├── FourierSample.java │ │ │ ├── FrequencyFilterSample.java │ │ │ ├── GaussianFitSample.java │ │ │ ├── IIRFilterSample.java │ │ │ ├── IIRFrequencyFilterSample.java │ │ │ ├── PeakWidthSample.java │ │ │ ├── ShortTimeFourierTransformSample.java │ │ │ ├── TSpectrumSample.java │ │ │ ├── WaveletDenoising.java │ │ │ ├── WaveletScalogram.java │ │ │ └── utils │ │ │ │ └── DemoChart.java │ │ │ └── misc │ │ │ ├── AcqButtonTests.java │ │ │ ├── LimitsSample.java │ │ │ ├── SnowFlakeSample.java │ │ │ └── plugins │ │ │ ├── Snow.java │ │ │ └── SnowFlake.java │ └── resources │ │ ├── META-INF │ │ └── services │ │ │ └── fxsampler.FXSamplerProject │ │ ├── io │ │ └── fair_acc │ │ │ └── sample │ │ │ ├── banner.png │ │ │ ├── chart │ │ │ ├── CustomCss1.css │ │ │ ├── CustomCss2.css │ │ │ ├── FxmlSample.fxml │ │ │ ├── ValueIndicatorSample.css │ │ │ ├── YWatchValueIndicatorSample.css │ │ │ ├── financial │ │ │ │ ├── @ES-[TF1D].csv │ │ │ │ └── NQ-201609-GLOBEX.scid │ │ │ ├── legacy │ │ │ │ ├── RollingBufferLegacy.css │ │ │ │ └── data │ │ │ │ │ ├── ChartPerformanceBenchmark25Hz.csv │ │ │ │ │ ├── ChartPerformanceBenchmark25Hz.png │ │ │ │ │ ├── ChartPerformanceBenchmark2Hz.csv │ │ │ │ │ └── ChartPerformanceBenchmark2Hz.png │ │ │ ├── testdata │ │ │ │ ├── 2007_OECD_population_age_distribution.csv │ │ │ │ ├── 2017_OECD_data.csv │ │ │ │ ├── ChartPerformanceBenchmark25Hz_V11.1.0_JDK11_JFX13.csv │ │ │ │ ├── ChartPerformanceBenchmark25Hz_V11.1.1_JDK11_JFX13.csv │ │ │ │ ├── ChartPerformanceBenchmark25Hz_V11.1.2_JDK11_JFX13.csv │ │ │ │ ├── ChartPerformanceBenchmark25Hz_V8.1.0_JDK8u112.csv │ │ │ │ ├── ChartPerformanceBenchmark25Hz_V8.1.1_JDK8u112.csv │ │ │ │ ├── EU.png │ │ │ │ └── image.txt │ │ │ └── utils │ │ │ │ └── alla-turca.mid │ │ │ ├── icon.png │ │ │ └── math │ │ │ ├── BBQSpectra.dat │ │ │ ├── LongSchottkySIS18.dat │ │ │ ├── betabeat.dat │ │ │ ├── rawDataCPS2.dat │ │ │ └── rawDataLHCInj.dat │ │ └── simplelogger.properties │ └── test │ └── resources │ └── simplelogger.properties ├── codecov.yml ├── config └── hooks │ ├── pre-commit │ └── pre-commit-stub ├── dependency-check-suppressions.xml ├── docs ├── Architecture.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── THPRB028.pdf ├── THPRB028_poster.pdf ├── ThreadSafety.md ├── banner │ ├── banner.png │ └── banner.svg ├── icons │ ├── icon-rounded-1024.png │ ├── icon-rounded-128.png │ ├── icon-rounded-256.png │ ├── icon-rounded-512.png │ ├── icon-rounded-64.png │ ├── icon-rounded.svg │ ├── icon-square-1024.png │ ├── icon-square-128.png │ ├── icon-square-256.png │ ├── icon-square-512.png │ ├── icon-square-64.png │ └── icon-square.svg └── pics │ ├── CategoryAxisSample.png │ ├── ChartAnatomySample.png │ ├── ChartIndicatorSample.png │ ├── ContourChartSample1.png │ ├── ContourChartSample2.png │ ├── DataSetAverageSample.png │ ├── DataSetFilterSample.png │ ├── DataSetIntegrateDifferentiateSample.png │ ├── DataSetSpectrumSample.png │ ├── EditDataSample.png │ ├── ErrorDataSetRendererStylingSample1.png │ ├── ErrorDataSetRendererStylingSample2.png │ ├── FinancialAdvancedCandlestickSample.png │ ├── FinancialCandlestickSample.png │ ├── FinancialHiLowSample.png │ ├── FinancialRealtimeCandlestickSample.png │ ├── FinancialRealtimeFootprintSample.png │ ├── FourierSample.png │ ├── FrequencyFilterSample.png │ ├── GaussianFitSample.png │ ├── GridRendererSample.png │ ├── Histogram2DimSample.png │ ├── HistogramRendererTests.png │ ├── HistogramSample.png │ ├── HistoryDataSetRendererSample.png │ ├── IIRFilterSample.png │ ├── LabelledMarkerSample.png │ ├── LogAxisSample.png │ ├── MetaDataRendererSample2.png │ ├── MountainRangeRendererSample.png │ ├── MultipleAxesSample.png │ ├── PolarPlotSample.png │ ├── RollingBufferSortedTreeSample.png │ ├── ScatterAndBubbleRendererSample1.png │ ├── ScatterAndBubbleRendererSample2.png │ ├── SimpleChartSample.png │ ├── THPRB028_fig2.png │ ├── TimeAxisSample.png │ ├── WaveletScalogram.png │ ├── chartfx-example1.png │ ├── chartfx-performance-test-case.png │ ├── chartfx-performance1.png │ ├── chartfx-performance1a.png │ └── chartfx-performance1b.png ├── formatFiles.sh ├── formatLastCommit.sh ├── pom.xml ├── ruleset.xml └── setupGitHooks.sh /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. Please use the issue feature only for actual bugs. If you have usage questions or are unsure if/how a certain functionality is supported in chart-fx please use the [q&a secton in the discussions feature](https://github.com/fair-acc/chart-fx/discussions/categories/q-a) or our [gitter channel](https://gitter.im/fair-acc/chart). 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior. Ideally the problem can be reproduced in the samples provided with chart-fx or by adapting them slightly. Alternatively provide a minimal working example. 15 | 16 | ``` java 17 | dataSet.recomputeLimits(DIM_X); // please use markdown code formatting for logs and code snippets 18 | ``` 19 | 20 | **Environment:** 21 | - OS: [e.g. Ubuntu 20.04] 22 | - Java version: 23 | - JavaFx version: 24 | - ChartFx version: [master, 11.2.2, ...] 25 | -------------------------------------------------------------------------------- /.github/workflows/dispatch_coverity.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: dispatch_coverity 3 | 4 | on: workflow_dispatch 5 | 6 | jobs: 7 | dispatch_coverity: 8 | name: Dispatch static analysis with coverity 9 | runs-on: ubuntu-18.04 10 | steps: 11 | - name: Dispatch 12 | run: echo "Dispatching Coverity run" -------------------------------------------------------------------------------- /.restyled.yaml: -------------------------------------------------------------------------------- 1 | # Default Restyler Configuration: https://github.com/restyled-io/restyler/blob/main/config/default.yaml 2 | exclude: 3 | - "**/node_modules/**/*" 4 | - "**/vendor/**/*" 5 | 6 | remote_files: [] 7 | 8 | pull_requests: false # Open Restyle PRs? 9 | request_review: none 10 | labels: [] 11 | 12 | comments: false # Leave comments on the original PR linking to the Restyle PR? 13 | 14 | # Set commit statuses on the original PR? 15 | statuses: 16 | # Red status in the case of differences found 17 | differences: true 18 | # Green status in the case of no differences found 19 | no_differences: true 20 | # Red status if we encounter errors restyling 21 | error: true 22 | 23 | ignore_labels: 24 | - restyled-ignore 25 | 26 | restylers_version: stable 27 | 28 | restylers: 29 | - clang-format: 30 | image: 31 | tag: v16 32 | - prettier-markdown 33 | - shellcheck 34 | - whitespace 35 | -------------------------------------------------------------------------------- /Development.md: -------------------------------------------------------------------------------- 1 | # Development Tips for chart-fx 2 | 3 | ## git workflows 4 | 5 | ### Reformat all commits in pull request to adhere to code style 6 | 7 | ``` bash 8 | $ git rebase origin/master --exec=./formatLastCommit.sh 9 | ``` 10 | -------------------------------------------------------------------------------- /chartfx-acc/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | 6 | io.fair-acc 7 | chartfx-parent 8 | ${revision}${sha1}${changelist} 9 | .. 10 | 11 | acc 12 | chartfx-acc 13 | 14 | io.fair_acc.acc 15 | 3.9.0 16 | 9.4.29.v20200521 17 | 1.5.1 18 | 2.0 19 | 4.8.1 20 | 21 | 22 | 23 | Collection of accelerator specific widget and functionalities that directly depend on chart-fx or which no other 24 | suitable place has been identified (yet). 25 | 26 | 27 | 28 | 29 | io.fair-acc 30 | chartfx 31 | ${project.version} 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /chartfx-acc/scripts/DefaultRestUserPasswords.pwd: -------------------------------------------------------------------------------- 1 | # demo password file -- please change for production since these 'password's are not safe!! 2 | admin:$2a$10$h.dl5J86rGH7I8bD9bZeZe:$2a$10$h.dl5J86rGH7I8bD9bZeZeci0pDt0.VwFTGujlnEaZXPf/q7vM5wO:ADMIN: 3 | anonymous:$2a$10$e0MYzXyjpJS7Pd0RVvHwHe:$2a$10$e0MYzXyjpJS7Pd0RVvHwHe1HlCS4bZJ18JuywdEMLT83E1KDmUhCy:READ_WRITE: 4 | alex:$2a$10$rQu1pxN6wCsS.bf6zYObX.:$2a$10$rQu1pxN6wCsS.bf6zYObX.QdkJN85dFpkcrzy1xwWK57ToqpKEVBy:READ_WRITE: 5 | bernd:$2a$10$j2l8uniY45FyKvZLy3ZvaO:$2a$10$j2l8uniY45FyKvZLy3ZvaORFZjPHuGr69Rb/rRCs0W2aPdIfH99pi:READ_ONLY: 6 | zoro:$2a$10$vLiwSkM2/krIqO1eDhGgcu:$2a$10$vLiwSkM2/krIqO1eDhGgcuRv/vJxE8Sh4xePZkBKKZeswP2pTzlAi:ANYONE: 7 | -------------------------------------------------------------------------------- /chartfx-acc/scripts/keystore.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/scripts/keystore.jks -------------------------------------------------------------------------------- /chartfx-acc/scripts/keystore.pwd: -------------------------------------------------------------------------------- 1 | nopassword 2 | -------------------------------------------------------------------------------- /chartfx-acc/scripts/runClipboard: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | java -server -XX:G1HeapRegionSize=32M -Dglass.platform=Monocle -Dmonocle.platform=Headless -Dprism.order=j2d,sw -Dprism.verbose=true -DrestKeyStore=keystore.jks -DrestKeyStorePassword=keystore.pwd -DrestUserPasswordStore=DefaultRestUserPasswords.pwd -jar Clipboard.jar 4 | -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/DefaultRestUserPasswords.pwd: -------------------------------------------------------------------------------- 1 | # demo password file -- please change for production since these 'password's are not safe!! 2 | admin:$2a$10$h.dl5J86rGH7I8bD9bZeZe:$2a$10$h.dl5J86rGH7I8bD9bZeZeci0pDt0.VwFTGujlnEaZXPf/q7vM5wO:ADMIN: 3 | anonymous:$2a$10$e0MYzXyjpJS7Pd0RVvHwHe:$2a$10$e0MYzXyjpJS7Pd0RVvHwHe1HlCS4bZJ18JuywdEMLT83E1KDmUhCy:READ_WRITE: 4 | alex:$2a$10$rQu1pxN6wCsS.bf6zYObX.:$2a$10$rQu1pxN6wCsS.bf6zYObX.QdkJN85dFpkcrzy1xwWK57ToqpKEVBy:READ_WRITE: 5 | bernd:$2a$10$j2l8uniY45FyKvZLy3ZvaO:$2a$10$j2l8uniY45FyKvZLy3ZvaORFZjPHuGr69Rb/rRCs0W2aPdIfH99pi:READ_ONLY: 6 | zoe:$2a$10$vLiwSkM2/krIqO1eDhGgcu:$2a$10$vLiwSkM2/krIqO1eDhGgcuRv/vJxE8Sh4xePZkBKKZeswP2pTzlAi:ANYONE: 7 | -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/remote/clipboard/PM5544_test_signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/remote/clipboard/PM5544_test_signal.png -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/amber_dot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/amber_dot.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/amber_dot_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/amber_dot_small.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/big_pause1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/big_pause1.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/big_pause1_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/big_pause1_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/magenta_dot_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/magenta_dot_small.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_pause2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_pause2.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_pause2_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_pause2_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_pause2_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_pause2_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_pause_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_pause_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play1.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play1_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play1_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play1_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play2.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play2_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play2_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play2_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play2_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_play_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop1.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop1_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop1_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop1_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop2.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop2_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop2_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop2_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop2_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_playstop_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_stop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_stop.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_stop_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_stop_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_stop_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_stop_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_stop_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/medium_stop_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/purple_dot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/purple_dot.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/purple_dot_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/purple_dot_small.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/red_dot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/red_dot.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/red_dot_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/red_dot_small.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward1.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward1_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward1_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward1_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward2.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward2_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward2_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward2_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward2_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_forward_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause1.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause1_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause1_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause1_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause2.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause2_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause2_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause2_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause2_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_pause_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play1.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play1_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play1_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play1_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play2.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play2_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play2_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play2_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play2_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_play_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop1.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop1_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop1_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop1_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop2.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop2_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop2_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop2_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop2_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_playstop_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind1.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind1_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind1_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind1_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind2.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind2_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind2_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind2_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind2_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_rewind_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_stop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_stop.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_stop_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_stop_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_stop_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_stop_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_stop_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/acc/ui/icons/small_stop_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_pause1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_pause1_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_pause2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_pause2.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_pause2_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_pause2_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_pause2_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_pause2_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_pause_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_pause_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play1.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play1_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play1_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play1_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play2.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play2_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play2_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play2_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play2_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_play_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_playstop1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_playstop1.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_playstop1_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_playstop1_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_playstop1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_playstop1_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_playstop_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_playstop_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_stop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_stop.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_stop_d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_stop_d.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_stop_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_stop_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_stop_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/big_stop_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/blue_dot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/blue_dot.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/blue_dot_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/blue_dot_small.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/button_prototype.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/button_prototype.xcf -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/green_dot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/green_dot.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/green_dot_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/green_dot_small.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/grey_dot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/grey_dot.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/grey_dot_small.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/grey_dot_small.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/magenta_dot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/magenta_dot.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/medium_pause1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/medium_pause1.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/medium_pause1_p.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/medium_pause1_p.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/medium_pause1_r.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/io/fair_acc/chartfx/acc/ui/icons/medium_pause1_r.gif -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/keystore.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/keystore.jks -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/keystore.pwd: -------------------------------------------------------------------------------- 1 | nopassword 2 | -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/public/img/english.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/public/img/english.png -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/public/img/german.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/public/img/german.png -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/public/img/logo_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/public/img/logo_b.png -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/public/img/logo_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-acc/src/main/resources/public/img/logo_w.png -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/velocity/admin/admin.vm: -------------------------------------------------------------------------------- 1 | #parse("/velocity/layout.vm") 2 | #@mainLayout() 3 | 4 |

Admin Interface

5 | Users: 6 | 11 |
12 | Direct access: /admin/endpoints 13 | 14 | #end -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/velocity/clipboard/upload.vm: -------------------------------------------------------------------------------- 1 | #parse("/velocity/layout.vm") 2 | #@mainLayout() 3 |
4 | #if($authenticationFailed) 5 |

$msg.get("LOGIN_AUTH_FAILED")

6 | #elseif($authenticationSucceeded) 7 |

$msg.get("LOGIN_AUTH_SUCCEEDED", $currentUser)

8 | #elseif($loggedOut) 9 |

$msg.get("LOGIN_LOGGED_OUT")

10 | #end 11 |

$msg.get("CLIPBOARD_UPLOAD_HEADING")

12 |

$msg.get("CLIPBOARD_UPLOAD_INSTRUCTIONS", "/index")

13 | 14 | 15 | 16 | 17 |
18 | #end 19 | -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/velocity/errors/accessDenied.vm: -------------------------------------------------------------------------------- 1 | #parse("/velocity/layout.vm") 2 | #@mainLayout() 3 |

$msg.get("ERROR_403_ACCESS_DENIED")

4 | #end 5 | -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/velocity/errors/notFound.vm: -------------------------------------------------------------------------------- 1 | #parse("/velocity/layout.vm") 2 | #@mainLayout() 3 |

$msg.get("ERROR_404_NOT_FOUND")

4 | #end 5 | -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/velocity/errors/unauthorised.vm: -------------------------------------------------------------------------------- 1 | #parse("/velocity/layout.vm") 2 | #@mainLayout() 3 |

$msg.get("ERROR_401_UNAUTHORISED")

4 | #end -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/velocity/login/login.vm: -------------------------------------------------------------------------------- 1 | #parse("/velocity/layout.vm") 2 | #@mainLayout() 3 |
4 | #if($authenticationFailed) 5 |

$msg.get("LOGIN_AUTH_FAILED")

6 | #elseif($authenticationSucceeded) 7 |

$msg.get("LOGIN_AUTH_SUCCEEDED", $currentUser)

8 | #elseif($loggedOut) 9 |

$msg.get("LOGIN_LOGGED_OUT")

10 | #end 11 |

$msg.get("LOGIN_HEADING")

12 |

$msg.get("LOGIN_INSTRUCTIONS", "/")
($msg.get("LOGIN_BUTTON_CHANGE_PASSWORD"))

13 | 14 | 15 | 16 | 17 | #if($loginRedirect) 18 | 19 | #end 20 | 21 |
22 | #end 23 | -------------------------------------------------------------------------------- /chartfx-acc/src/main/resources/velocityconfig/velocity_implicit.vm: -------------------------------------------------------------------------------- 1 | #* @implicitly included *# 2 | #* @vtlvariable name="msg" type="io.fair_acc.acc.remote.util.MessageBundle" *# 3 | #* @vtlvariable name="images" type="java.lang.Iterable" *# 4 | #* @vtlvariable name="image" type="io.fair_acc.acc.remote.clipboard.ClipboardData" *# 5 | #* @vtlvariable name="users" type="java.lang.Iterable" *# 6 | #* @vtlvariable name="currentUser" type="java.lang.String" *# 7 | #* @vtlvariable name="currentRoles" type="java.lang.List" *# 8 | #* @vtlvariable name="loggedOut" type="java.lang.String" *# 9 | #* @vtlvariable name="authenticationFailed" type="java.lang.String" *# 10 | #* @vtlvariable name="authenticationSucceeded" type="java.lang.String" *# 11 | #* @vtlvariable name="loginRedirect" type="java.lang.String" *# 12 | -------------------------------------------------------------------------------- /chartfx-bench/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | 6 | io.fair-acc 7 | chartfx-parent 8 | ${revision}${sha1}${changelist} 9 | ../pom.xml 10 | 11 | 12 | bench 13 | chartfx-bench 14 | 15 | 16 | io.fair_acc.bench 17 | 1.8 18 | 1.8 19 | 20 | 21 | 22 | Utilities for benchmarking during live operations. 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /chartfx-bench/src/main/java/io/fair_acc/bench/AggregateDurationMeasure.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.bench; 2 | 3 | /** 4 | * A measure that performs some aggregate function on durations, e.g., min / max / sum / mean 5 | * 6 | * @author ennerf 7 | */ 8 | public interface AggregateDurationMeasure extends DurationMeasure { 9 | /** 10 | * Records the measure determined by all start and stop calls. Resets statistics. 11 | */ 12 | void recordResult(); 13 | 14 | static final AggregateDurationMeasure DISABLED = new AggregateDurationMeasure() { 15 | @Override 16 | public void start() { 17 | // no-op 18 | } 19 | 20 | @Override 21 | public void stop() { 22 | // no-op 23 | } 24 | 25 | @Override 26 | public void recordResult() { 27 | // no-op 28 | } 29 | }; 30 | } 31 | -------------------------------------------------------------------------------- /chartfx-bench/src/main/java/io/fair_acc/bench/BenchLevel.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.bench; 2 | 3 | import java.util.function.IntSupplier; 4 | 5 | /** 6 | * Levels for different types of benchmark information. 7 | * Copied from logging conventions. 8 | * 9 | * @author ennerf 10 | */ 11 | public enum BenchLevel implements IntSupplier { 12 | /** 13 | * Coarse-grained high-level information 14 | */ 15 | Info(400), 16 | 17 | /** 18 | * Information often used for debugging 19 | */ 20 | Debug(500), 21 | 22 | /** 23 | * Used for debugging purposes. Includes the most detailed information 24 | */ 25 | Trace(600); 26 | 27 | BenchLevel(int level) { 28 | this.level = level; 29 | } 30 | 31 | @Override 32 | public int getAsInt() { 33 | return level; 34 | } 35 | 36 | final int level; 37 | } 38 | -------------------------------------------------------------------------------- /chartfx-bench/src/main/java/io/fair_acc/bench/DurationMeasure.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.bench; 2 | 3 | /** 4 | * Determines a duration based on the elapsed time between start and stop. 5 | * May record time. 6 | * 7 | * @author ennerf 8 | */ 9 | public interface DurationMeasure { 10 | /** 11 | * Called when an action begins. Sets the start timestamp. 12 | */ 13 | void start(); 14 | 15 | /** 16 | * Called when an action is done. Records delta from the start timestamp. 17 | */ 18 | void stop(); 19 | 20 | /** 21 | * Calling stop without start is typically an invalid call that may throw an 22 | * error. This method explicitly allows it and simply ignores bad measurements. 23 | * 24 | * @return this 25 | */ 26 | default DurationMeasure ignoreMissingStart() { 27 | return this; 28 | } 29 | 30 | /** 31 | * A default implementation that does nothing and may be eliminated at runtime 32 | */ 33 | static final DurationMeasure DISABLED = new DurationMeasure() { 34 | @Override 35 | public void start() { 36 | // no-op 37 | } 38 | 39 | @Override 40 | public void stop() { 41 | // no-op 42 | } 43 | }; 44 | } 45 | -------------------------------------------------------------------------------- /chartfx-bench/src/main/java/io/fair_acc/bench/Measurable.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.bench; 2 | 3 | /** 4 | * An interface for classes that contain measurable actions 5 | * 6 | * @author ennerf 7 | */ 8 | public interface Measurable { 9 | /** 10 | * @param recorder records benchmark measurements 11 | */ 12 | void setRecorder(MeasurementRecorder recorder); 13 | 14 | /** 15 | * Adds an empty default method for Measurable 16 | * classes where the implementation is optional. 17 | */ 18 | public interface EmptyDefault { 19 | default void setRecorder(MeasurementRecorder recorder){}; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chartfx-chart/assets/error_icon.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/assets/error_icon.odg -------------------------------------------------------------------------------- /chartfx-chart/assets/info_icon.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/assets/info_icon.odg -------------------------------------------------------------------------------- /chartfx-chart/assets/warn_icon.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/assets/warn_icon.odg -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/AxisLabelOverlapPolicy.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.axes; 2 | 3 | public enum AxisLabelOverlapPolicy { 4 | /** 5 | omen-est-omen allow overlap 6 | */ 7 | DO_NOTHING, 8 | /** 9 | make every other label invisible (ie. gain a factor 2 margin 10 | */ 11 | SKIP_ALT, 12 | /** 13 | narrow font where possible 14 | */ 15 | NARROW_FONT, 16 | /** 17 | * shift every second label by one label height/width (N.B. especially useful for category axes 18 | */ 19 | SHIFT_ALT, 20 | /** 21 | * shift every second label by one label height/width (N.B. especially useful for category axes 22 | */ 23 | FORCED_SHIFT_ALT 24 | } 25 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/AxisMode.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.axes; 2 | 3 | /** 4 | * Defines mode of axis-related operations such as zooming or panning. 5 | * 6 | * @author Grzegorz Kruk 7 | */ 8 | public enum AxisMode { 9 | /** 10 | * The operation should be allowed only along the X axis. 11 | */ 12 | X, 13 | /** 14 | * The operation should be allowed only along Y axis. 15 | */ 16 | Y, 17 | 18 | /** 19 | * The operation can be performed on both X and Y axis. 20 | */ 21 | XY; 22 | 23 | /** 24 | * Returns {@code true} for {@link #X} and {@link #XY}, {@code false} for {@link #Y}. 25 | * 26 | * @return {@code true} for {@code X} and {@code XY}, {@code false} for {@code Y}. 27 | */ 28 | public boolean allowsX() { 29 | return this == X || this == XY; 30 | } 31 | 32 | /** 33 | * Returns {@code true} for {@link #Y} and {@link #XY}, {@code false} for {@link #X}. 34 | * 35 | * @return {@code true} for {@code Y} and {@code XY}, {@code false} for {@code X}. 36 | */ 37 | public boolean allowsY() { 38 | return this == Y || this == XY; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/AxisTransform.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.axes; 2 | 3 | /** 4 | * Small interface for defining axis transforms (e.g. logarithmic-base 10, 2, other transforms etc. 5 | * 6 | * @author rstein 7 | */ 8 | public interface AxisTransform { 9 | /** 10 | * default backward transform for affine functions: backward(forward(val)) = forward(backward(val)) = val; 11 | * 12 | * @param val input value 13 | * @return output value 14 | */ 15 | double backward(double val); 16 | 17 | /** 18 | * default forward transform for affine functions: backward(forward(val)) = forward(backward(val)) = val; 19 | * 20 | * @param val input value 21 | * @return output value 22 | */ 23 | double forward(double val); 24 | 25 | double getMaximumRange(); 26 | 27 | double getMinimumRange(); 28 | 29 | double getRoundedMaximumRange(double val); 30 | 31 | double getRoundedMinimumRange(double val); 32 | 33 | void setMaximumRange(double val); 34 | 35 | void setMinimumRange(double val); 36 | } 37 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/LogAxisType.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.axes; 2 | 3 | public enum LogAxisType { 4 | LINEAR_SCALE, 5 | LOG10_SCALE, 6 | DB_SCALE 7 | } 8 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/TickUnitSupplier.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 European Organisation for Nuclear Research (CERN), All Rights Reserved. 3 | */ 4 | 5 | package io.fair_acc.chartfx.axes; 6 | 7 | /** 8 | * Supplier of Axis tick units that is expected to compute a tick unit that is equal or greater than the one given as 9 | * argument. In case the calculated tick labels don't fit on the axis, the {@link #computeTickUnit(double)} method is 10 | * called again with a grater reference unit so that the supplier can calculate next bigger value of the tick unit. 11 | *

12 | * If the {@link #computeTickUnit(double)} returns value that is smaller than the reference unit, the value will be used 13 | * without further checks which may result in tick labels overlapping. 14 | *

15 | * If the {@link #computeTickUnit(double)} returns value smaller than or equal to zero, IllegalArgumentException will be 16 | * thrown at runtime. 17 | * 18 | * @author Grzegorz Kruk 19 | */ 20 | @FunctionalInterface 21 | public interface TickUnitSupplier { 22 | /** 23 | * Should return tick unit that is equal or grater to the given reference tick unit. 24 | * 25 | * @param referenceTickUnit reference tick unit 26 | * @return the computed unit that is equal or grater to the specified one 27 | */ 28 | double computeTickUnit(double referenceTickUnit); 29 | } 30 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/format/FormatterLabelCache.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.axes.spi.format; 2 | 3 | import java.util.WeakHashMap; 4 | 5 | import javafx.util.StringConverter; 6 | 7 | import org.slf4j.Logger; 8 | import org.slf4j.LoggerFactory; 9 | 10 | /** 11 | * Simple cache to keep recurring results of String formatters 12 | * 13 | * @author rstein 14 | */ 15 | public class FormatterLabelCache extends WeakHashMap { 16 | private static final Logger LOGGER = LoggerFactory.getLogger(FormatterLabelCache.class); 17 | 18 | public FormatterLabelCache() { 19 | super(); 20 | } 21 | 22 | public String get(final StringConverter formatter, final Number value) { 23 | return computeIfAbsent(value, formatter::toString); 24 | } 25 | 26 | // @Override 27 | // public String get(Object key) { 28 | // String ret = super.get(key); 29 | // if (ret == null) { 30 | // System.out.println("cache missed"); 31 | // } else { 32 | // System.out.println("cache hit"); 33 | // } 34 | // return ret; 35 | // } 36 | } 37 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/transforms/AbstractAxisTransform.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.axes.spi.transforms; 2 | 3 | import io.fair_acc.chartfx.axes.Axis; 4 | import io.fair_acc.chartfx.axes.AxisTransform; 5 | 6 | /** 7 | * @author rstein 8 | */ 9 | public abstract class AbstractAxisTransform implements AxisTransform { 10 | protected final Axis axis; 11 | protected double rangeMin = -Double.MAX_VALUE; 12 | protected double rangeMax = +Double.MAX_VALUE; 13 | 14 | protected AbstractAxisTransform(final Axis axis) { 15 | this.axis = axis; 16 | axis.minProperty().addListener((ch, o, n) -> rangeMin = n.doubleValue()); 17 | axis.maxProperty().addListener((ch, o, n) -> rangeMax = n.doubleValue()); 18 | } 19 | 20 | @Override 21 | public double getMaximumRange() { 22 | return rangeMax; 23 | } 24 | 25 | @Override 26 | public double getMinimumRange() { 27 | return rangeMin; 28 | } 29 | 30 | @Override 31 | public void setMaximumRange(final double val) { 32 | axis.maxProperty().set(val); 33 | } 34 | 35 | @Override 36 | public void setMinimumRange(final double val) { 37 | axis.minProperty().set(val); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/transforms/DefaultAxisTransform.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.axes.spi.transforms; 2 | 3 | import io.fair_acc.chartfx.axes.Axis; 4 | 5 | /** 6 | * Identity axis transform 7 | * 8 | * @author rstein 9 | */ 10 | public class DefaultAxisTransform extends AbstractAxisTransform { 11 | public DefaultAxisTransform(final Axis axis) { 12 | super(axis); 13 | } 14 | 15 | @Override 16 | public double backward(final double val) { 17 | return val; 18 | } 19 | 20 | @Override 21 | public double forward(final double val) { 22 | return val; 23 | } 24 | 25 | @Override 26 | public double getRoundedMaximumRange(final double max) { 27 | return Math.ceil(max); 28 | } 29 | 30 | @Override 31 | public double getRoundedMinimumRange(final double min) { 32 | return Math.floor(min); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/axes/spi/transforms/LogarithmicTimeAxisTransform.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.axes.spi.transforms; 2 | 3 | import io.fair_acc.chartfx.axes.Axis; 4 | 5 | /** 6 | * @author rstein 7 | */ 8 | public class LogarithmicTimeAxisTransform extends LogarithmicAxisTransform { 9 | public LogarithmicTimeAxisTransform(final Axis axis) { 10 | super(axis); 11 | } 12 | 13 | @Override 14 | public double backward(final double val) { 15 | // return pow(val) + rangeMax; 16 | return pow(val); 17 | } 18 | 19 | @Override 20 | public double forward(final double val) { 21 | // return log(rangeMax - val); 22 | return log(val); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/bench/MeasurementRecorders.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.bench; 2 | 3 | import java.util.concurrent.TimeUnit; 4 | 5 | /** 6 | * Convenience methods for creating commonly used recorders 7 | * 8 | * @author ennerf 9 | */ 10 | public interface MeasurementRecorders { 11 | /** 12 | * A low-overhead hdr histogram recorder that writes an aggregate histogram to disk once a second. 13 | * Check hdrhistogram.org for more information 14 | * 15 | * @param fileName the disk file 16 | * @return recorder 17 | */ 18 | static HdrHistogramRecorder newHdrHistogram(String fileName) { 19 | return HdrHistogramRecorder.createStarted(fileName, 1, TimeUnit.SECONDS); 20 | } 21 | 22 | /** 23 | * A recorder that creates a chart in a new stage and displays measurements in real time 24 | * 25 | * @param title title of the chart 26 | * @return recorder 27 | */ 28 | static LiveDisplayRecorder newLiveDisplay(String title) { 29 | return LiveDisplayRecorder.showInNewStage(title); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/legend/Legend.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.legend; 2 | 3 | import java.util.List; 4 | 5 | import javafx.scene.Node; 6 | 7 | import io.fair_acc.chartfx.renderer.Renderer; 8 | import io.fair_acc.chartfx.ui.geometry.Side; 9 | 10 | public interface Legend { 11 | Node getNode(); 12 | 13 | Side getSide(); 14 | 15 | void setSide(Side side); 16 | 17 | boolean isVertical(); 18 | 19 | void setVertical(boolean value); 20 | 21 | /** 22 | * This is called whenever a series is added or removed and the legend needs to be updated 23 | * 24 | * @param renderers corresponding renderers 25 | */ 26 | default void updateLegend(List renderers) { 27 | updateLegend(renderers, false); 28 | } 29 | 30 | /** 31 | * This is called whenever a series is added or removed and the legend needs to be updated 32 | * 33 | * @param renderers corresponding renderers 34 | * @param forceUpdate {@code true} force update 35 | */ 36 | void updateLegend(List renderers, boolean forceUpdate); 37 | 38 | void drawLegend(); 39 | } 40 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/marker/Marker.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.marker; 2 | 3 | import javafx.scene.canvas.GraphicsContext; 4 | 5 | /** 6 | * @author rstein 7 | */ 8 | public interface Marker { 9 | void draw(GraphicsContext gc, double x, double y, double size); 10 | } 11 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/plugins/MouseEventsHelper.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.plugins; 2 | 3 | import static javafx.scene.input.MouseButton.PRIMARY; 4 | import static javafx.scene.input.MouseButton.SECONDARY; 5 | 6 | import javafx.scene.input.MouseEvent; 7 | 8 | /** 9 | * Utility methods for operating on {@link MouseEvent}s. (Unfortunately, the original by G.Kruk is package scoped) 10 | * 11 | * @author Grzegorz Kruk 12 | * @author braeun 13 | */ 14 | public class MouseEventsHelper { 15 | public static boolean isOnlyCtrlModifierDown(final MouseEvent event) { 16 | return event.isControlDown() && !event.isAltDown() && !event.isMetaDown() && !event.isShiftDown(); 17 | } 18 | 19 | public static boolean isOnlyMiddleButtonDown(final MouseEvent event) { 20 | return event.isMiddleButtonDown() && !event.isPrimaryButtonDown() && !event.isSecondaryButtonDown(); 21 | } 22 | 23 | public static boolean isOnlyPrimaryButtonDown(final MouseEvent event) { 24 | return event.getButton() == PRIMARY && !event.isMiddleButtonDown() && !event.isSecondaryButtonDown(); 25 | } 26 | 27 | public static boolean isOnlySecondaryButtonDown(final MouseEvent event) { 28 | return event.getButton() == SECONDARY && !event.isPrimaryButtonDown() && !event.isMiddleButtonDown(); 29 | } 30 | 31 | public static boolean modifierKeysUp(final MouseEvent event) { 32 | return !event.isAltDown() && !event.isControlDown() && !event.isMetaDown() && !event.isShiftDown(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/plugins/ValueIndicator.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.plugins; 2 | 3 | import javafx.beans.property.DoubleProperty; 4 | 5 | import io.fair_acc.chartfx.axes.Axis; 6 | 7 | public interface ValueIndicator { 8 | /** 9 | * returns the Axis that this indicator is associated with. 10 | * 11 | * @return associated Axis 12 | */ 13 | Axis getAxis(); 14 | 15 | /** 16 | * @return text displayed within or next to the indicator 17 | */ 18 | String getText(); 19 | 20 | /** 21 | * Returns the indicated value. 22 | * 23 | * @return indicated value 24 | */ 25 | double getValue(); 26 | 27 | /** 28 | * 29 | * @param text the new text. If {@code null}, the label will be hidden. 30 | */ 31 | void setText(final String text); 32 | 33 | /** 34 | * Sets the value that should be indicated. 35 | * 36 | * @param newValue value to be indicated 37 | */ 38 | void setValue(double newValue); 39 | 40 | /** 41 | * Value indicated by this plugin. 42 | * 43 | * @return value property 44 | */ 45 | DoubleProperty valueProperty(); 46 | } -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/ContourType.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer; 2 | 3 | public enum ContourType { 4 | CONTOUR, // marching-square based contour plotting algorithm 5 | CONTOUR_FAST, // experimental contour plotting algorithm 6 | CONTOUR_HEXAGON, // hexagon-map based contour plotting algorithm 7 | HEATMAP, // 2D orthogonal projection based plotting algorithm 8 | HEATMAP_HEXAGON // hexagon-based plotting algorithm 9 | } 10 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/ErrorStyle.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer; 2 | 3 | /** 4 | * enum to encode the various error styles that can be drawn by the ErrorDataSetRenderer and HistoryDataSetRenderer 5 | * 6 | * @author rstein 7 | */ 8 | public enum ErrorStyle { 9 | NONE("NONE"), 10 | ERRORBARS("ERRORBARS"), 11 | ERRORSURFACE("ERRORSURFACE"), 12 | ERRORCOMBO("ERRORCOMBO"); 13 | private final String value; 14 | 15 | ErrorStyle(final String value) { 16 | this.value = value; 17 | } 18 | 19 | public String getValue() { 20 | return value; 21 | } 22 | } -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/LineStyle.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer; 2 | 3 | public enum LineStyle { 4 | NONE, 5 | NORMAL, 6 | AREA, 7 | ZERO_ORDER_HOLDER, 8 | STAIR_CASE, // aka. ZERO-ORDER_HOLDER 9 | HISTOGRAM, 10 | HISTOGRAM_FILLED, // similar to area but enclosing histogram style-type bars 11 | BEZIER_CURVE // smooth Bezier-type curve - beware this can be slow for many data points 12 | } 13 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/PolarTickStep.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer; 2 | 3 | public enum PolarTickStep { 4 | FIVE(5), 5 | FIFTEEN(15), 6 | THIRTY(30), 7 | FOURTY_FIVE(45), 8 | SIXTY(60), 9 | NINETY(90); 10 | 11 | private final double value; 12 | 13 | PolarTickStep(final double value) { 14 | this.value = value; 15 | } 16 | 17 | public double get() { 18 | return value; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/datareduction/ReductionType.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.datareduction; 2 | 3 | public enum ReductionType { 4 | MIN, 5 | MAX, 6 | AVERAGE, 7 | DOWN_SAMPLE 8 | } -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/datareduction/VisvalingamMaheswariWhyattDataReducer.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.datareduction; 2 | 3 | /** 4 | * Line generalisation by repeated elimination of the smallest area Visvalingam, Maheswari; Whyatt, J. D. (James Duncan) 5 | * Cartography -- Data processing; Computer science July 1992 https://hydra.hull.ac.uk/resources/hull:8338 6 | * https://bost.ocks.org/mike/simplify/ 7 | * 8 | * 9 | * TODO: flesh out algorithm 10 | * 11 | */ 12 | public class VisvalingamMaheswariWhyattDataReducer { 13 | } 14 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/FinancialTheme.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.financial; 2 | 3 | import javafx.css.PseudoClass; 4 | 5 | import io.fair_acc.chartfx.Chart; 6 | 7 | /** 8 | * A port of the string-ified themes to CSS pseudo classes 9 | * 10 | * @author ennerf 11 | */ 12 | public enum FinancialTheme { 13 | Default, // no pseudo classes 14 | Classic("classic"), 15 | Clearlook("clearlook"), 16 | Sand("sand"), 17 | Blackberry("blackberry"), 18 | Dark("dark"); 19 | 20 | private FinancialTheme() { 21 | this.pseudoClass = null; 22 | } 23 | 24 | private FinancialTheme(String name) { 25 | this.pseudoClass = PseudoClass.getPseudoClass("financial-" + name); 26 | } 27 | 28 | public PseudoClass getPseudoClass() { 29 | return pseudoClass; 30 | } 31 | 32 | public void applyPseudoClasses(Chart node) { 33 | for (var palette : values) { 34 | node.pseudoClassStateChanged(palette.getPseudoClass(), this == palette); 35 | } 36 | } 37 | 38 | private final PseudoClass pseudoClass; 39 | private static final FinancialTheme[] values = values(); 40 | } 41 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/service/DataSetAware.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.financial.service; 2 | 3 | import io.fair_acc.dataset.DataSet; 4 | 5 | /** 6 | * Provides DataSet Aware 7 | */ 8 | public interface DataSetAware { 9 | DataSet getDataSet(); 10 | } 11 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/service/PaintBarMarker.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.financial.service; 2 | 3 | import javafx.scene.paint.Paint; 4 | 5 | /** 6 | * Specific painting/coloring of OHLCV/Candle bars. 7 | * Addon and extension possibilities. 8 | * The PaintBar is know techniques in the trading frameworks and platforms. 9 | */ 10 | public interface PaintBarMarker { 11 | /** 12 | * Provides paint by selected OHLCV item domain object. 13 | * @param data domain object for Renderer Extension Points 14 | * @return paint bar 15 | */ 16 | Paint getPaintBy(OhlcvRendererEpData data); 17 | } 18 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/service/RendererPaintAfterEP.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.financial.service; 2 | 3 | /** 4 | * Extension point service for Renderers 5 | * Placement: Paint After bar painting 6 | */ 7 | @FunctionalInterface 8 | public interface RendererPaintAfterEP { 9 | void paintAfter(OhlcvRendererEpData data); 10 | } 11 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/service/RendererPaintAfterEPAware.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.financial.service; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Provides DataSet Aware 7 | */ 8 | public interface RendererPaintAfterEPAware { 9 | /** 10 | * Inject extension point for Paint after bar. 11 | * 12 | * @param paintAfterEP service 13 | */ 14 | void addPaintAfterEp(RendererPaintAfterEP paintAfterEP); 15 | 16 | /** 17 | * Get Paint after extension points 18 | * 19 | * @return list of the Paint after extension points. 20 | */ 21 | List getPaintAfterEps(); 22 | } 23 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/financial/service/footprint/NbColumnColorGroup.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.financial.service.footprint; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import javafx.scene.paint.Color; 7 | import javafx.scene.text.Font; 8 | 9 | /** 10 | * The domain object provides data for footprint column colors. 11 | * Defines specific colors for each footprint lines by column color services. 12 | */ 13 | public class NbColumnColorGroup { 14 | public Map fontColorMap = new HashMap<>(); 15 | 16 | public static class FontColor { 17 | public final Font bidFont; 18 | public final Color bidColor; 19 | public final Font askFont; 20 | public final Color askColor; 21 | 22 | public FontColor(Font bidFont, Color bidColor, Font askFont, Color askColor) { 23 | this.bidFont = bidFont; 24 | this.bidColor = bidColor; 25 | this.askFont = askFont; 26 | this.askColor = askColor; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/HexagonCallback.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.hexagon; 2 | 3 | public interface HexagonCallback { 4 | void handle(Hexagon hexagon); 5 | } 6 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/IHexagonCreator.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.hexagon; 2 | 3 | import javafx.scene.paint.Color; 4 | 5 | public interface IHexagonCreator { 6 | void createHexagon(int q, int r, Color imagePixelColor, HexagonMap map); 7 | } 8 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/IPathInfoSupplier.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.hexagon; 2 | 3 | public interface IPathInfoSupplier { 4 | int getMovementCost(Hexagon from, Hexagon to); 5 | 6 | boolean isBlockingPath(Hexagon hexagon); 7 | } 8 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Linus Törnkrantz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/NoHexagonFoundException.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.hexagon; 2 | 3 | /** 4 | * This exception is thrown when trying to retrieve a Hexagon from a position where ther is no Hexagon 5 | */ 6 | public class NoHexagonFoundException extends Exception { 7 | private static final long serialVersionUID = -3886480899940588279L; 8 | 9 | public NoHexagonFoundException(String message) { 10 | super(message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/renderer/spi/hexagon/NoPathFoundException.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.hexagon; 2 | 3 | /** 4 | * This exception is thrown when the pathfinding algorithm cannot find any path to the goal 5 | */ 6 | public class NoPathFoundException extends Exception { 7 | private static final long serialVersionUID = 1362775696243612783L; 8 | 9 | public NoPathFoundException(String message) { 10 | super(message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/ui/ResizableCanvas.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.ui; 2 | 3 | import javafx.scene.canvas.Canvas; 4 | 5 | /** 6 | * extended default Canvas class to be embeddable and resizable within a StackPane or Region 7 | * 8 | * @author rstein 9 | */ 10 | public class ResizableCanvas extends Canvas { 11 | public ResizableCanvas() { 12 | super(); 13 | } 14 | 15 | @Override 16 | public boolean isResizable() { 17 | return true; 18 | } 19 | 20 | @Override 21 | public double maxHeight(final double width) { 22 | return Double.MAX_VALUE; 23 | } 24 | 25 | @Override 26 | public double maxWidth(final double height) { 27 | return Double.MAX_VALUE; 28 | } 29 | 30 | @Override 31 | public double minHeight(final double width) { 32 | return 1; 33 | } 34 | 35 | @Override 36 | public double minWidth(final double height) { 37 | return 1; 38 | } 39 | 40 | @Override 41 | public double prefHeight(final double width) { 42 | return getHeight(); 43 | } 44 | 45 | @Override 46 | public double prefWidth(final double height) { 47 | return this.getWidth(); 48 | } 49 | 50 | @Override 51 | public void resize(final double w, final double h) { 52 | super.resize(w, h); 53 | setWidth(w); 54 | setHeight(h); 55 | // System.err.println("canvas resize to = " + String.format("%fx%f", 56 | // getWidth(), getHeight())); 57 | } 58 | } -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/ui/css/ColorPalette.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.ui.css; 2 | 3 | import javafx.css.PseudoClass; 4 | import javafx.scene.Node; 5 | 6 | /** 7 | * Built-in color palettes that apply pseudo classes. 8 | * 9 | * @author ennerf 10 | */ 11 | public enum ColorPalette { 12 | DEFAULT, 13 | MISC("misc"), 14 | ADOBE("adobe"), 15 | DELL("dell"), 16 | EQUIDISTANT("equidistant"), 17 | TUNEVIEWER("tuneviewer"), 18 | MATLAB_LIGHT("matlab-light"), 19 | MATLAB_DARK("matlab-dark"), 20 | MODENA("modena"), 21 | ATLANTAFX("atlantafx"); 22 | 23 | private ColorPalette() { 24 | this.pseudoClass = null; 25 | } 26 | 27 | private ColorPalette(String name) { 28 | this.pseudoClass = PseudoClass.getPseudoClass("palette-" + name); 29 | } 30 | 31 | public PseudoClass getPseudoClass() { 32 | return pseudoClass; 33 | } 34 | 35 | public void applyPseudoClasses(Node node) { 36 | for (var palette : values) { 37 | node.pseudoClassStateChanged(palette.getPseudoClass(), this == palette); 38 | } 39 | } 40 | 41 | private final PseudoClass pseudoClass; 42 | private static final ColorPalette[] values = values(); 43 | } 44 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/ui/css/LineStyle.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.ui.css; 2 | 3 | import javafx.beans.property.LongProperty; 4 | import javafx.beans.property.ReadOnlyLongProperty; 5 | import javafx.beans.property.SimpleLongProperty; 6 | import javafx.scene.shape.Line; 7 | 8 | /** 9 | * @author ennerf 10 | */ 11 | public class LineStyle extends Line implements StyleUtil.StyleNode { 12 | public LineStyle(String... styles) { 13 | StyleUtil.styleNode(this, styles); 14 | StyleUtil.forEachStyleProp(this, StyleUtil.incrementOnChange(changeCounter)); 15 | } 16 | 17 | @Override 18 | public String toString() { 19 | return StyleUtil.toStyleString(this); 20 | } 21 | 22 | public ReadOnlyLongProperty changeCounterProperty() { 23 | return changeCounter; 24 | } 25 | 26 | private final LongProperty changeCounter = new SimpleLongProperty(0); 27 | } 28 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/ui/css/TextStyle.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.ui.css; 2 | 3 | import javafx.beans.property.LongProperty; 4 | import javafx.beans.property.ReadOnlyLongProperty; 5 | import javafx.beans.property.SimpleLongProperty; 6 | import javafx.scene.text.Text; 7 | 8 | /** 9 | * @author ennerf 10 | */ 11 | public class TextStyle extends Text implements StyleUtil.StyleNode { 12 | public TextStyle(String... styles) { 13 | StyleUtil.styleNode(this, styles); 14 | StyleUtil.forEachStyleProp(this, StyleUtil.incrementOnChange(changeCounter)); 15 | } 16 | 17 | protected void incrementChangeCounter() { 18 | changeCounter.set(changeCounter.get() + 1); 19 | } 20 | 21 | @Override 22 | public String toString() { 23 | return StyleUtil.toStyleString(this); 24 | } 25 | 26 | public ReadOnlyLongProperty changeCounterProperty() { 27 | return changeCounter; 28 | } 29 | 30 | private final LongProperty changeCounter = new SimpleLongProperty(0); 31 | } 32 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/ui/geometry/Corner.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.ui.geometry; 2 | 3 | /** 4 | * Enum for which edge of a rectangle something should be. @see also Side 5 | * 6 | * @author rstein 7 | */ 8 | public enum Corner { 9 | /** 10 | * Represents top-left edge of a rectangle. 11 | */ 12 | TOP_LEFT, 13 | 14 | /** 15 | * Represents top-right edge of a rectangle. 16 | */ 17 | TOP_RIGHT, 18 | 19 | /** 20 | * Represents bottom-left edge of a rectangle. 21 | */ 22 | BOTTOM_LEFT, 23 | 24 | /** 25 | * Represents top-right edge of a rectangle. 26 | */ 27 | BOTTOM_RIGHT 28 | } 29 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/utils/FastDoubleArrayCache.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.utils; 2 | 3 | import io.fair_acc.math.ArrayUtils; 4 | 5 | /** 6 | * A highly efficient cache for temporary arrays that 7 | * only gets accessed by a single thread. 8 | * 9 | * @author ennerf 10 | */ 11 | public class FastDoubleArrayCache { 12 | public FastDoubleArrayCache(int maxArrays) { 13 | cache = new double[maxArrays][]; 14 | } 15 | 16 | public void trim() { 17 | for (int i = 0; i < cache.length; i++) { 18 | cache[i] = ArrayUtils.clearIfLarger(cache[i], lastRequestedSize); 19 | } 20 | } 21 | 22 | public double[] getArray(int index, int minSize) { 23 | return cache[index] = ArrayUtils.resizeMin(cache[index], lastRequestedSize = minSize); 24 | } 25 | 26 | int lastRequestedSize; 27 | private final double[][] cache; 28 | } 29 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/utils/NumberFormatter.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.utils; 2 | 3 | public interface NumberFormatter { 4 | int getDecimalPlaces(); 5 | 6 | boolean isExponentialForm(); 7 | 8 | NumberFormatter setExponentialForm(boolean state); 9 | 10 | NumberFormatter setDecimalPlaces(int precision); 11 | 12 | String toString(double val); 13 | } 14 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/java/io/fair_acc/chartfx/utils/PaletteQuantizer.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.utils; 2 | 3 | public interface PaletteQuantizer { 4 | int[] getColor(int i); 5 | 6 | int getColorCount(); 7 | 8 | int getTransparentIndex(); 9 | 10 | int lookup(int r, int g, int b); 11 | 12 | int lookup(int r, int g, int b, int a); 13 | } -------------------------------------------------------------------------------- /chartfx-chart/src/main/resources/io/fair_acc/chartfx/financial/chart-blackberry.css: -------------------------------------------------------------------------------- 1 | .axis-label { 2 | -fx-fill: #f5f5f5; 3 | -fx-axis-label-alignment: center; 4 | } 5 | 6 | .value-watch-indicator-label { 7 | -fx-background-color: transparent; 8 | -fx-border-color: transparent; 9 | -fx-border-radius: 0; 10 | -fx-font-size: 11; 11 | -fx-font-weight: bold; 12 | -fx-text-fill: white; 13 | -fx-text-alignment: center; 14 | -fx-padding: 2 4 1 8; 15 | } 16 | 17 | .value-watch-indicator-line { 18 | -fx-stroke-width: 1; 19 | -fx-stroke: #696969; 20 | -fx-stroke-dash-array: 8; 21 | } 22 | 23 | .value-watch-indicator-marker { 24 | -fx-stroke-width: 0.5; 25 | -fx-stroke: black; 26 | -fx-fill: #ce0614; 27 | } 28 | 29 | .price-value-watch-indicator-marker { 30 | -fx-stroke-width: 0.5; 31 | -fx-stroke: black; 32 | -fx-fill: #3bdacd; 33 | } 34 | 35 | .range-indicator-label { 36 | -fx-background-color: transparent; 37 | -fx-border-color: transparent; 38 | -fx-border-radius: 0; 39 | -fx-font-size: 12; 40 | -fx-font-weight: bold; 41 | -fx-text-fill: white; 42 | -fx-text-alignment: center; 43 | -fx-padding: 1 2 1 2; 44 | } 45 | 46 | .range-indicator-rect { 47 | -fx-stroke: transparent; 48 | -fx-fill: #9c1d1d70; 49 | } 50 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/resources/io/fair_acc/chartfx/financial/chart-dark.css: -------------------------------------------------------------------------------- 1 | .axis-label { 2 | -fx-fill: #c2c2c2ff; 3 | -fx-axis-label-alignment: center; 4 | } 5 | 6 | .value-watch-indicator-label { 7 | -fx-background-color: transparent; 8 | -fx-border-color: transparent; 9 | -fx-border-radius: 0; 10 | -fx-font-size: 11; 11 | -fx-font-weight: bold; 12 | -fx-text-fill: white; 13 | -fx-text-alignment: center; 14 | -fx-padding: 2 4 1 8; 15 | } 16 | 17 | .value-watch-indicator-line { 18 | -fx-stroke-width: 1; 19 | -fx-stroke: #a8a8a8; 20 | -fx-stroke-dash-array: 8; 21 | } 22 | 23 | .value-watch-indicator-marker { 24 | -fx-stroke-width: 0.5; 25 | -fx-stroke: black; 26 | -fx-fill: #ce0614; 27 | } 28 | 29 | .price-value-watch-indicator-marker { 30 | -fx-stroke-width: 0.5; 31 | -fx-stroke: black; 32 | -fx-fill: #3bdacd; 33 | } 34 | 35 | .range-indicator-label { 36 | -fx-background-color: transparent; 37 | -fx-border-color: transparent; 38 | -fx-border-radius: 0; 39 | -fx-font-size: 12; 40 | -fx-font-weight: bold; 41 | -fx-text-fill: white; 42 | -fx-text-alignment: center; 43 | -fx-padding: 1 2 1 2; 44 | } 45 | 46 | .range-indicator-rect { 47 | -fx-stroke: transparent; 48 | -fx-fill: #9c1d1d70; 49 | } 50 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/resources/io/fair_acc/chartfx/financial/chart.css: -------------------------------------------------------------------------------- 1 | .value-watch-indicator-label { 2 | -fx-background-color: transparent; 3 | -fx-border-color: transparent; 4 | -fx-border-radius: 0; 5 | -fx-font-size: 11; 6 | -fx-font-weight: bold; 7 | -fx-text-fill: white; 8 | -fx-text-alignment: center; 9 | -fx-padding: 2.5 4 1 8; 10 | } 11 | 12 | .value-watch-indicator-line { 13 | -fx-stroke-width: 1; 14 | -fx-stroke: black; 15 | -fx-stroke-dash-array: 8; 16 | } 17 | 18 | .value-watch-indicator-marker { 19 | -fx-stroke-width: 0.5; 20 | -fx-stroke: black; 21 | -fx-fill: #ce0614; 22 | } 23 | 24 | .price-value-watch-indicator-marker { 25 | -fx-stroke-width: 0.5; 26 | -fx-stroke: black; 27 | -fx-fill: #78015b; 28 | } 29 | 30 | .range-indicator-label { 31 | -fx-background-color: transparent; 32 | -fx-border-color: transparent; 33 | -fx-border-radius: 0; 34 | -fx-font-size: 12; 35 | -fx-font-weight: bold; 36 | -fx-text-fill: white; 37 | -fx-text-alignment: center; 38 | -fx-padding: 1 2 1 2; 39 | } 40 | 41 | .range-indicator-rect { 42 | -fx-stroke: transparent; 43 | -fx-fill: #9c1d1d70; 44 | } 45 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.eot -------------------------------------------------------------------------------- /chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.ttf -------------------------------------------------------------------------------- /chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/fonts/fair-chart-icons.woff -------------------------------------------------------------------------------- /chartfx-chart/src/main/resources/io/fair_acc/chartfx/icons/chartfx_logo_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/icons/chartfx_logo_b.png -------------------------------------------------------------------------------- /chartfx-chart/src/main/resources/io/fair_acc/chartfx/icons/chartfx_logo_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/icons/chartfx_logo_w.png -------------------------------------------------------------------------------- /chartfx-chart/src/main/resources/io/fair_acc/chartfx/images/sand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-chart/src/main/resources/io/fair_acc/chartfx/images/sand.png -------------------------------------------------------------------------------- /chartfx-chart/src/main/resources/io/fair_acc/chartfx/plugins/editaxis.css: -------------------------------------------------------------------------------- 1 | .root { 2 | -icons-color: rgb(61, 114, 144); 3 | -fx-font-size: 10px; 4 | } 5 | 6 | .glyph-icon { 7 | -fx-text-fill: -icons-color; 8 | -fx-fill: -icons-color; 9 | -glyph-size: 48px; 10 | } 11 | 12 | .glyph-icon:hover { 13 | -fx-effect: dropshadow(three-pass-box, rgba(0, 0, 0, 0.2), 4, 0, 0, 0); 14 | } 15 | 16 | .bluesky-icon { 17 | -glyph-name: "CLOUD"; 18 | -icons-color: blue; 19 | -fx-fill: linear-gradient(-icons-color 0%, derive(-icons-color, 100%) 30%, derive(blueviolet, 30%) 85%); 20 | } 21 | 22 | .axis-editor-view-pane { 23 | -fx-background-color: blue; 24 | } 25 | 26 | .enlargeButton { 27 | -fx-icon: bluesky-icon; 28 | -fx-background-color: red; 29 | -fx-shape: "M1344 800v64q0 14-9 23t-23 9h-832q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h832q14 0 23 9t9 23zm128 448v-832q0-66-47-113t-113-47h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113zm128-832v832q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z"; 30 | } 31 | 32 | .icons:hover { 33 | -fx-effect: dropshadow(three-pass-box, derive(-icons-color, 0%), 0.01em, 0, 0, 0); 34 | } 35 | -------------------------------------------------------------------------------- /chartfx-chart/src/main/resources/io/fair_acc/chartfx/ui/titled-border.css: -------------------------------------------------------------------------------- 1 | .bordered-titled-title { 2 | -fx-padding: 0 2 0 2; 3 | -fx-font-size: 14px; 4 | -fx-background-color: -fx-background; 5 | -fx-translate-y: -9; 6 | -fx-translate-x: +4; 7 | } 8 | 9 | .bordered-titled-border { 10 | -fx-content-display: top; 11 | -fx-border-insets: 8 5 5 5; 12 | -fx-border-color: black; 13 | -fx-border-width: 1; 14 | } 15 | 16 | .bordered-titled-content { 17 | -fx-padding: 10 5 5 5; 18 | } 19 | -------------------------------------------------------------------------------- /chartfx-chart/src/test/java/io/fair_acc/chartfx/axes/AxisModeTests.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.axes; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertFalse; 4 | import static org.junit.jupiter.api.Assertions.assertTrue; 5 | 6 | import org.junit.jupiter.api.Test; 7 | 8 | /** 9 | * @author rstein 10 | */ 11 | public class AxisModeTests { 12 | @Test 13 | public void axisModeTests() { 14 | assertTrue(AxisMode.X.allowsX()); 15 | assertFalse(AxisMode.X.allowsY()); 16 | 17 | assertFalse(AxisMode.Y.allowsX()); 18 | assertTrue(AxisMode.Y.allowsY()); 19 | 20 | assertTrue(AxisMode.XY.allowsX()); 21 | assertTrue(AxisMode.XY.allowsY()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /chartfx-chart/src/test/java/io/fair_acc/chartfx/marker/DefaultMarkerTests.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.marker; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; 4 | import static org.junit.jupiter.api.Assertions.assertEquals; 5 | import static org.junit.jupiter.api.Assertions.assertThrows; 6 | 7 | import javafx.scene.canvas.Canvas; 8 | import javafx.scene.canvas.GraphicsContext; 9 | 10 | import org.junit.jupiter.api.Test; 11 | 12 | /** 13 | * @author rstein 14 | */ 15 | public class DefaultMarkerTests { 16 | @Test 17 | public void defaultMarkerTests() { 18 | Canvas canvas = new Canvas(); 19 | GraphicsContext gc = canvas.getGraphicsContext2D(); 20 | 21 | for (Marker marker : DefaultMarker.values()) { 22 | assertDoesNotThrow(() -> marker.draw(gc, 0, 0, 20)); 23 | 24 | assertEquals(marker, DefaultMarker.get(marker.toString())); 25 | } 26 | 27 | assertThrows(IllegalArgumentException.class, () -> DefaultMarker.get(null)); 28 | assertThrows(IllegalArgumentException.class, () -> DefaultMarker.get("unknown marker name ObeyDoo")); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/utils/Interval.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.financial.utils; 2 | 3 | public class Interval { 4 | public T from; 5 | public T to; 6 | 7 | public Interval(T from, T to) { 8 | this.from = from; 9 | this.to = to; 10 | } 11 | 12 | @Override 13 | public int hashCode() { 14 | final int prime = 31; 15 | int result = 1; 16 | result = prime * result + ((from == null) ? 0 : from.hashCode()); 17 | result = prime * result + ((to == null) ? 0 : to.hashCode()); 18 | return result; 19 | } 20 | 21 | @Override 22 | public boolean equals(Object obj) { 23 | if (this == obj) 24 | return true; 25 | if (obj == null) 26 | return false; 27 | if (getClass() != obj.getClass()) 28 | return false; 29 | Interval other = (Interval) obj; 30 | if (from == null) { 31 | if (other.from != null) 32 | return false; 33 | } else if (!from.equals(other.from)) 34 | return false; 35 | if (to == null) { 36 | return other.to == null; 37 | } else 38 | return to.equals(other.to); 39 | } 40 | 41 | @Override 42 | public String toString() { 43 | return "Interval [from=" + from + ", to=" + to + "]"; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /chartfx-chart/src/test/java/io/fair_acc/chartfx/renderer/spi/financial/utils/Ohlcv.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.renderer.spi.financial.utils; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Iterator; 5 | import java.util.List; 6 | 7 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeModel; 8 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcv; 9 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcvItem; 10 | 11 | public class Ohlcv implements IOhlcv { 12 | final List items = new ArrayList<>(); 13 | 14 | @Override 15 | public IOhlcvItem getOhlcvItem(int index) { 16 | return items.get(index); 17 | } 18 | 19 | public Ohlcv addOhlcvItem(IOhlcvItem ohlcvItem) { 20 | items.add(ohlcvItem); 21 | return this; 22 | } 23 | 24 | // just for unit tests 25 | public List getItems() { 26 | return items; 27 | } 28 | 29 | @Override 30 | public int size() { 31 | return items.size(); 32 | } 33 | 34 | public void clear() { 35 | items.clear(); 36 | } 37 | 38 | @Override 39 | public AttributeModel getAddon() { 40 | throw new IllegalStateException("Not supported!"); 41 | } 42 | 43 | @Override 44 | public AttributeModel getAddonOrCreate() { 45 | throw new IllegalStateException("Not supported!"); 46 | } 47 | 48 | @Override 49 | public Iterator iterator() { 50 | return items.iterator(); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /chartfx-chart/src/test/java/io/fair_acc/chartfx/ui/ObservableDequeTest.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.ui; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; 4 | 5 | import java.util.ArrayDeque; 6 | import java.util.Arrays; 7 | 8 | import org.junit.jupiter.api.BeforeEach; 9 | import org.junit.jupiter.api.Test; 10 | 11 | /** 12 | * Based on javafx.base/src/test/java/test/javafx/collections/ObservableListTest.java 13 | * 14 | * @author Alexander Krimm 15 | */ 16 | class ObservableDequeTest { 17 | private ObservableDeque deque; 18 | private MockListObserver mlo; 19 | 20 | @BeforeEach 21 | public void setUp() throws Exception { 22 | deque = new ObservableDeque<>(new ArrayDeque<>()); 23 | mlo = new MockListObserver<>(); 24 | deque.addListener(mlo); 25 | deque.add(1); 26 | deque.addAll(1, 3); 27 | mlo.clear(); 28 | } 29 | 30 | @Test 31 | public void setupCorrect() { 32 | assertEquals(deque.size(), 3); 33 | assertEquals(deque.get(2), 3); 34 | assertEquals(deque.get(0), 1); 35 | } 36 | 37 | @Test 38 | public void testClear() { 39 | assertEquals(deque.size(), 3); 40 | deque.clear(); 41 | mlo.check1AddRemove(deque, Arrays.asList(1, 1, 3), 0, 0); 42 | assertEquals(deque.size(), 0); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /chartfx-chart/src/test/java/io/fair_acc/chartfx/ui/utils/TestFx.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.ui.utils; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.ElementType; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | import org.junit.jupiter.api.Tag; 10 | import org.junit.jupiter.api.Test; 11 | 12 | /** 13 | * extension of JUnits @Test annotation to indicate that a particular test should be explicitly executed within the JavaFX thread. 14 | * See also {@link JavaFXInterceptorUtils.SelectiveJavaFxInterceptor } 15 | * @author rstein 16 | * 17 | */ 18 | @Target({ ElementType.ANNOTATION_TYPE, ElementType.METHOD }) 19 | @Retention(RetentionPolicy.RUNTIME) 20 | @Documented 21 | @Test 22 | @Tag("TestWithinJavaFX") 23 | public @interface TestFx { 24 | } 25 | -------------------------------------------------------------------------------- /chartfx-chart/src/test/java/io/fair_acc/chartfx/utils/SchubfachTest.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.chartfx.utils; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | 5 | import org.junit.jupiter.api.Test; 6 | 7 | import io.fair_acc.chartfx.utils.Schubfach.DecomposedDouble; 8 | 9 | /** 10 | * @author Florian Enner 11 | * @since 08 Mär 2023 12 | */ 13 | class SchubfachTest { 14 | @Test 15 | void testDecomposition() { 16 | // Initial normalized decomp 17 | var one = assertResultEquals(10000000000000000L, 1, Schubfach.decomposeDouble(1.0)); 18 | var two = assertResultEquals(20000000000000000L, 1, Schubfach.decomposeDouble(2.0)); 19 | var hal = assertResultEquals(50000000000000000L, 0, Schubfach.decomposeDouble(0.5)); 20 | 21 | // Shifted to the same exponent 22 | int maxExp = Math.max(one.getExponent(), Math.max(two.getExponent(), hal.getExponent())); 23 | assertResultEquals(10000000000000000L, 1, one.shiftExponentTo(maxExp)); 24 | assertResultEquals(20000000000000000L, 1, two.shiftExponentTo(maxExp)); 25 | assertResultEquals(5000000000000000L, 1, hal.shiftExponentTo(maxExp)); 26 | } 27 | 28 | static DecomposedDouble assertResultEquals(long significand, int exponent, DecomposedDouble value) { 29 | assertEquals(significand, value.getSignificand(), "significand"); 30 | assertEquals(exponent, value.getExponent(), "exponent"); 31 | return value; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /chartfx-dataset/.gitignore: -------------------------------------------------------------------------------- 1 | /*.hprof 2 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/CategoryHistogram.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset; 2 | 3 | // for library loggers 4 | // import org.slf4j.Logger; 5 | // import org.slf4j.LoggerFactory; 6 | 7 | // for application loggers 8 | // import io.fair_acc.cs.co.ap.common.gui.elements.logger.AppLogger; 9 | 10 | /** 11 | * @deprecated Work in Progress, don't use yet 12 | * @author Alexander Krimm 13 | */ 14 | @Deprecated 15 | public interface CategoryHistogram extends Histogram { 16 | /** 17 | * Increment bin with name with by 1. if x is less than the low-edge of the first bin, the Underflow bin is 18 | * incremented if x is equal to or greater than the upper edge of last bin, the Overflow bin is incremented 19 | * 20 | * @param name name to be added 21 | * @return corresponding bin number which has its content incremented by w 22 | */ 23 | default int fill(final String name) { 24 | return fill(name, 1.0); 25 | } 26 | 27 | /** 28 | * Increment bin with name with a weight w. if x is less than the low-edge of the first bin, the Underflow bin is 29 | * incremented if x is equal to or greater than the upper edge of last bin, the Overflow bin is incremented 30 | * 31 | * @param name name to be added 32 | * @param w weight for given name 33 | * @return corresponding bin number which has its content incremented by w 34 | */ 35 | int fill(final String name, double w); 36 | } 37 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/DataSet3D.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset; 2 | 3 | /** 4 | * A DataSet extension used to represent 3-dimensional data points. 5 | * This class only contains convenience methods to make 6 | * 7 | * @author gkruk 8 | * @author rstein 9 | */ 10 | public interface DataSet3D extends GridDataSet { 11 | /** 12 | * Returns Z coordinate for the specified data point. 13 | * This is a convenience interface not used by chartfx internally. 14 | * Always returns the first non grid coordinate, so for dim > 3 it is not actually Z. 15 | * 16 | * @param xIndex index of X coordinate 17 | * @param yIndex index of Y coordinate 18 | * @return Z coordinate 19 | */ 20 | default double getZ(int xIndex, int yIndex) { 21 | return this.get(getNGrid(), xIndex, yIndex); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/DataSetMetaData.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset; 2 | 3 | import java.util.List; 4 | import java.util.Map; 5 | 6 | /** 7 | * Interface for defining common measurement meta data tags 8 | * 9 | * @author rstein 10 | */ 11 | public interface DataSetMetaData { 12 | String TAG_OVERSHOOT = "over-range"; 13 | String TAG_UNDERSHOOT = "under-range"; 14 | String TAG_GAIN_RANGE = "gain-range"; 15 | 16 | List getErrorList(); 17 | 18 | List getInfoList(); 19 | 20 | Map getMetaInfo(); 21 | 22 | List getWarningList(); 23 | } 24 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/EditableDataSet.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset; 2 | 3 | /** 4 | * @author rstein 5 | */ 6 | public interface EditableDataSet extends DataSet { 7 | /** 8 | * add point to the data set 9 | * 10 | * @param index data point index at which the new data point should be added 11 | * @param newValue new data point coordinate 12 | * @return itself (fluent design) 13 | */ 14 | EditableDataSet add(final int index, final double... newValue); 15 | 16 | /** 17 | * 18 | * @return edit constraints for data set 19 | */ 20 | EditConstraints getEditConstraints(); 21 | 22 | /** 23 | * remove point from data set 24 | * 25 | * @param index data point which should be removed 26 | * @return itself (fluent design) 27 | */ 28 | EditableDataSet remove(final int index); 29 | 30 | /** 31 | * modify point in the the data set 32 | * 33 | * @param index data point index at which the new data point should be added 34 | * @param newValue new data point coordinate 35 | * @return itself (fluent design) 36 | */ 37 | EditableDataSet set(final int index, final double... newValue); 38 | 39 | /** 40 | * 41 | * @param constraints new edit constraints 42 | * @return itself (fluent design) 43 | */ 44 | EditableDataSet setEditConstraints(final EditConstraints constraints); 45 | 46 | /** 47 | * @param name the new data set name 48 | * @return itself (fluent design) 49 | */ 50 | EditableDataSet setName(final String name); 51 | } 52 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/events/EventProcessor.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.events; 2 | 3 | public interface EventProcessor { 4 | void addAction(BitState obj, Runnable action); 5 | } 6 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/events/StateListener.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.events; 2 | 3 | /** 4 | * @author ennerf 5 | */ 6 | @FunctionalInterface 7 | public interface StateListener { 8 | /** 9 | * @param source where the update came from 10 | * @param bits changed or set bits 11 | */ 12 | void accept(BitState source, int bits); 13 | 14 | // Compatible with InvalidationListener, but no JavaFX dependency 15 | @FunctionalInterface 16 | public interface OnInvalidateSetter { 17 | public void set(Object observable); 18 | } 19 | 20 | @FunctionalInterface 21 | public interface OnChangeSetter { 22 | public void set(Object observable, Object oldValue, Object newValue); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/AbstractStylable.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi; 2 | 3 | import io.fair_acc.dataset.DataSet; 4 | 5 | /** 6 | * Class to define CSS-based style features N.B. needed for DataSet and rendering styling 7 | * 8 | * @author rstein 9 | * 10 | * @param java generics handling of DataSet for derived classes (needed for fluent design) 11 | */ 12 | public abstract class AbstractStylable implements DataSet { 13 | private static final long serialVersionUID = 1L; 14 | private String style = ""; 15 | 16 | AbstractStylable() { 17 | super(); 18 | } 19 | 20 | /** 21 | * A string representation of the CSS style associated with this specific {@code Node}. This is analogous to the 22 | * "style" attribute of an HTML element. Note that, like the HTML style attribute, this variable contains style 23 | * properties and values and not the selector portion of a style rule. 24 | */ 25 | @Override 26 | public String getStyle() { 27 | return style; 28 | } 29 | 30 | @SuppressWarnings("unchecked") 31 | protected D getThis() { 32 | return (D) this; 33 | } 34 | 35 | @Override 36 | public D setStyle(final String style) { 37 | this.style = style; 38 | return getThis(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/fastutil/ArrayUtil.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.fastutil; 2 | 3 | /** 4 | * Utilities for shading fastutil lists. 5 | */ 6 | class ArrayUtil { 7 | /** 8 | * Ensures that a range given by its first (inclusive) and last (exclusive) elements fits an array of given length. 9 | * 10 | *

This method may be used whenever an array range check is needed. 11 | * 12 | * @param arrayLength an array length. 13 | * @param from a start index (inclusive). 14 | * @param to an end index (inclusive). 15 | * @throws IllegalArgumentException if {@code from} is greater than {@code to}. 16 | * @throws ArrayIndexOutOfBoundsException if {@code from} or {@code to} are greater than {@code arrayLength} or negative. 17 | */ 18 | public static void ensureFromTo(final int arrayLength, final int from, final int to) { 19 | if (from < 0) 20 | throw new ArrayIndexOutOfBoundsException("Start index (" + from + ") is negative"); 21 | if (from > to) 22 | throw new IllegalArgumentException("Start index (" + from + ") is greater than end index (" + to + ")"); 23 | if (to > arrayLength) 24 | throw new ArrayIndexOutOfBoundsException("End index (" + to + ") is greater than array length (" + arrayLength + ")"); 25 | } 26 | 27 | public static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; 28 | } 29 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/attrs/AttributeKey.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.financial.api.attrs; 2 | 3 | public class AttributeKey extends TypeKey { 4 | protected AttributeKey(Class type, String name) { 5 | super(type, name); 6 | } 7 | 8 | public static AttributeKey create(Class type, String name) { 9 | return new AttributeKey(type, name); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/attrs/AttributeModelAware.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.financial.api.attrs; 2 | 3 | /** 4 | * Provides access to Domain Objects Extensions 5 | * Common dynamic extension of API to transmit additional (addon) data. 6 | */ 7 | public interface AttributeModelAware { 8 | /** 9 | * @return OHLCV addon. If not available, null is return. 10 | */ 11 | AttributeModel getAddon(); 12 | 13 | /** 14 | * @return OHLCV Item addon. If not available, create it. 15 | */ 16 | AttributeModel getAddonOrCreate(); 17 | } 18 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/attrs/TypeKey.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.financial.api.attrs; 2 | 3 | public abstract class TypeKey implements Comparable> { 4 | private final Class type; 5 | private final String name; 6 | 7 | protected TypeKey(Class type, String name) { 8 | this.type = type; 9 | this.name = name; 10 | } 11 | 12 | public Class getType() { 13 | return type; 14 | } 15 | 16 | public String getName() { 17 | return name; 18 | } 19 | 20 | @Override 21 | public boolean equals(Object obj) { 22 | if (obj == this) { 23 | return true; 24 | } 25 | if (!(obj instanceof TypeKey) ) { 26 | return false; 27 | } 28 | TypeKey other = (TypeKey) obj; 29 | /* equality is defined only by name */ 30 | return getName().equals(other.getName()); 31 | } 32 | 33 | @Override 34 | public int hashCode() { 35 | int _hashCode = 17; 36 | _hashCode += getName().hashCode(); 37 | return _hashCode; 38 | } 39 | 40 | @Override 41 | public String toString() { 42 | return getName(); 43 | } 44 | 45 | @Override 46 | public int compareTo(TypeKey typeKey) { 47 | return this.toString().compareTo(typeKey.toString()); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/ohlcv/IOhlcv.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.financial.api.ohlcv; 2 | 3 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeModel; 4 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeModelAware; 5 | 6 | /** 7 | * Domain Object implements this API for providing of OHLCV information data. 8 | */ 9 | public interface IOhlcv extends Iterable, AttributeModelAware { 10 | /** 11 | * @param index index of the ohlcv item 12 | * @return provides ohlcv item 13 | */ 14 | IOhlcvItem getOhlcvItem(int index); 15 | 16 | /** 17 | * @return count of actual available items 18 | */ 19 | int size(); 20 | 21 | /** 22 | * @return OHLCV addon. If not available, null is return. 23 | */ 24 | AttributeModel getAddon(); 25 | 26 | /** 27 | * @return OHLCV Item addon. If not available, create it. 28 | */ 29 | AttributeModel getAddonOrCreate(); 30 | } 31 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/ohlcv/IOhlcvItem.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.financial.api.ohlcv; 2 | 3 | import java.util.Date; 4 | 5 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeModel; 6 | 7 | /** 8 | * OHLCV Item data. Basic API Domain object for standard visualization processing. 9 | */ 10 | public interface IOhlcvItem { 11 | /** 12 | * @return get timestamp of this ohlcv item 13 | */ 14 | Date getTimeStamp(); 15 | 16 | /** 17 | * @return get instrument open value 18 | */ 19 | double getOpen(); 20 | 21 | /** 22 | * @return get instrument high value 23 | */ 24 | double getHigh(); 25 | 26 | /** 27 | * @return get instrument low value 28 | */ 29 | double getLow(); 30 | 31 | /** 32 | * @return get instrument close value 33 | */ 34 | double getClose(); 35 | 36 | /** 37 | * @return get instrument volume information (Up/Down Tick together) 38 | */ 39 | double getVolume(); 40 | 41 | /** 42 | * @return get instrument OI (Open interest) 43 | */ 44 | double getOpenInterest(); 45 | 46 | /** 47 | * @return OHLCV Item addon. If not available, null is return. 48 | */ 49 | AttributeModel getAddon(); 50 | 51 | /** 52 | * @return OHLCV Item addon. If not available, create it. 53 | */ 54 | AttributeModel getAddonOrCreate(); 55 | } 56 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/financial/api/ohlcv/IOhlcvItemAware.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.financial.api.ohlcv; 2 | 3 | /** 4 | * Provides access to addons and extensions for OHLCV based datasets. 5 | */ 6 | public interface IOhlcvItemAware { 7 | /** 8 | * Provides OHLCV domain object with extensions 9 | * @param index to the dataset/domain structure 10 | * @return the filled ohlcv item 11 | */ 12 | IOhlcvItem getItem(int index); 13 | 14 | /** 15 | * Provides the last available item in the OHLC/V structure 16 | * @return the last filled ohlcv item 17 | */ 18 | IOhlcvItem getLastItem(); 19 | } 20 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/utils/DoublePoint.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.utils; 2 | 3 | /** 4 | * @author rstein 5 | */ 6 | public class DoublePoint extends Tuple { 7 | /** 8 | * default constructor (zero coordinates) 9 | */ 10 | public DoublePoint() { 11 | super(0.0, 0.0); 12 | } 13 | 14 | /** 15 | * @param x coordinate 16 | * @param y coordinate 17 | */ 18 | public DoublePoint(final Double x, final Double y) { 19 | super(x, y); 20 | } 21 | 22 | /** 23 | * @return the x coordinate 24 | */ 25 | public Double getX() { 26 | return x; 27 | } 28 | 29 | /** 30 | * @return the y coordinate 31 | */ 32 | public Double getY() { 33 | return y; 34 | } 35 | 36 | /** 37 | * @param newX the x coordinate to set 38 | * @param newY the Y coordinate to set 39 | */ 40 | public void set(final double newX, final double newY) { 41 | x = newX; 42 | y = newY; 43 | } 44 | 45 | @Override 46 | public String toString() { 47 | return "DoublePoint [" + x + ", " + y + "]"; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/spi/utils/Tuple.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.utils; 2 | 3 | /** 4 | * @author rstein 5 | * @param the x coordinate (usually a Number but may be also a String etc.) 6 | * @param the y coordinate (usually a Number but may be also a String etc.) 7 | */ 8 | public class Tuple { 9 | protected transient X x; 10 | protected transient Y y; 11 | 12 | /** 13 | * 14 | * @param x the x coordinate (usually a Number but may be also a String etc.) 15 | * @param y the y coordinate (usually a Number but may be also a String etc.) 16 | */ 17 | public Tuple(final X x, final Y y) { 18 | this.x = x; 19 | this.y = y; 20 | } 21 | 22 | /** 23 | * 24 | * @return the x coordinate 25 | */ 26 | public X getXValue() { 27 | return x; 28 | } 29 | 30 | /** 31 | * 32 | * @return the y coordinate 33 | */ 34 | public Y getYValue() { 35 | return y; 36 | } 37 | 38 | @Override 39 | public String toString() { 40 | return "Tuple [" + this.x + ", " + this.y + "]"; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/TestDataSet.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.testdata; 2 | 3 | import io.fair_acc.dataset.DataSet2D; 4 | 5 | /** 6 | * Standard interface for test data set 7 | * 8 | * @author rstein 9 | * @param generics for fluent design 10 | */ 11 | public interface TestDataSet> extends DataSet2D { 12 | /** 13 | * generate test data set 14 | * 15 | * @param count number of bins 16 | * @return the generated array 17 | */ 18 | double[] generateX(final int count); 19 | 20 | /** 21 | * generate test data set 22 | * 23 | * @param count number of bins 24 | * @return the generated array 25 | */ 26 | double[] generateY(final int count); 27 | 28 | /** 29 | * generate a new set of numbers 30 | * 31 | * @return itself (fluent design) 32 | */ 33 | D update(); 34 | } 35 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/spi/RandomStepFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.testdata.spi; 2 | 3 | import java.util.SplittableRandom; 4 | 5 | /** 6 | * abstract error data set for graphical testing purposes this implementation generates a random step function 7 | * 8 | * @author rstein 9 | */ 10 | public class RandomStepFunction extends AbstractTestFunction { 11 | private static final long serialVersionUID = -5338037806123143152L; 12 | protected static SplittableRandom rnd = new SplittableRandom(System.currentTimeMillis()); 13 | 14 | /** 15 | * 16 | * @param name data set name 17 | * @param count number of samples 18 | */ 19 | public RandomStepFunction(final String name, final int count) { 20 | super(name, count); 21 | } 22 | 23 | @Override 24 | public double[] generateY(final int count) { 25 | final double[] retVal = new double[count]; 26 | final long step = RandomStepFunction.rnd.nextInt(count); 27 | for (int i = 0; i < count; i++) { 28 | retVal[i] = i < step ? 0.0 : 1.0; 29 | } 30 | return retVal; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/spi/RandomWalkFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.testdata.spi; 2 | 3 | /** 4 | * abstract error data set for graphical testing purposes this implementation generates a random walk (Brownian noise) 5 | * function. 6 | * 7 | * @author rstein 8 | */ 9 | public class RandomWalkFunction extends AbstractTestFunction { 10 | private static final long serialVersionUID = 5274313670852663800L; 11 | 12 | /** 13 | * 14 | * @param name data set name 15 | * @param count number of samples 16 | */ 17 | public RandomWalkFunction(final String name, final int count) { 18 | super(name, count); 19 | } 20 | 21 | @Override 22 | public double[] generateY(final int count) { 23 | return RandomDataGenerator.generateDoubleArray(0, 0.01, count); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/spi/SincFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.testdata.spi; 2 | 3 | /** 4 | * abstract error data set for graphical testing purposes this implementation generates a sinc function 5 | * 6 | * @author rstein 7 | */ 8 | public class SincFunction extends AbstractTestFunction { 9 | private static final long serialVersionUID = 8401471155758562066L; 10 | 11 | /** 12 | * 13 | * @param name data set name 14 | * @param count number of samples 15 | */ 16 | public SincFunction(final String name, final int count) { 17 | super(name, count); 18 | } 19 | 20 | @Override 21 | public double[] generateY(final int count) { 22 | final double[] retVal = new double[count]; 23 | for (int i = 0; i < count; i++) { 24 | final double x = i / (0.05 * count); 25 | 26 | if (x == 0) { 27 | retVal[i] = 1.0; 28 | } else { 29 | retVal[i] = Math.sin(x) / x; 30 | } 31 | } 32 | return retVal; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/spi/SingleOutlierFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.testdata.spi; 2 | 3 | import java.util.SplittableRandom; 4 | 5 | /** 6 | * abstract error data set for graphical testing purposes this implementation generates a function with a single random 7 | * outlier 8 | * 9 | * @author rstein 10 | */ 11 | public class SingleOutlierFunction extends AbstractTestFunction { 12 | private static final long serialVersionUID = -7456808511068971349L; 13 | protected static SplittableRandom rnd = new SplittableRandom(System.currentTimeMillis()); 14 | 15 | /** 16 | * 17 | * @param name data set name 18 | * @param count number of samples 19 | */ 20 | public SingleOutlierFunction(final String name, final int count) { 21 | super(name, count); 22 | } 23 | 24 | @Override 25 | public double[] generateY(final int count) { 26 | final long step = SingleOutlierFunction.rnd.nextInt(count); 27 | final double[] retVal = new double[count]; 28 | for (int i = 0; i < count; i++) { 29 | retVal[i] = i == step ? 1.0 : 0.0; 30 | } 31 | return retVal; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/testdata/spi/TriangleFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.testdata.spi; 2 | 3 | /** 4 | * abstract error data set for graphical testing purposes this implementation generates a triangular function 5 | * 6 | * @author Alexander Krimm 7 | */ 8 | public class TriangleFunction extends AbstractTestFunction { 9 | private static final long serialVersionUID = -3391027911729531271L; 10 | private double offset; 11 | 12 | /** 13 | * Creates a triangular function which rises from zero to one and back. 14 | * 15 | * @param name data set name 16 | * @param count number of samples 17 | */ 18 | public TriangleFunction(final String name, final int count) { 19 | super(name, count); 20 | } 21 | 22 | /** 23 | * Creates a triangular function which rises from offset to offset+1 and back. 24 | * 25 | * @param name data set name 26 | * @param count number of samples 27 | * @param offset offset to zero 28 | */ 29 | public TriangleFunction(final String name, final int count, double offset) { 30 | super(name, count); 31 | this.offset = offset; 32 | update(); 33 | } 34 | 35 | @Override 36 | public double[] generateY(final int count) { 37 | final double[] retVal = new double[count]; 38 | for (int i = 0; i < (count + 1) / 2; i++) { 39 | retVal[i] = offset + ((double) (i * 2)) / count; 40 | retVal[count - 1 - i] = retVal[i]; 41 | } 42 | return retVal; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/utils/CachedDaemonThreadFactory.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.utils; 2 | 3 | import java.util.concurrent.ExecutorService; 4 | import java.util.concurrent.Executors; 5 | import java.util.concurrent.ThreadFactory; 6 | import java.util.concurrent.atomic.AtomicInteger; 7 | 8 | public final class CachedDaemonThreadFactory implements ThreadFactory { 9 | private static final int MAX_THREADS = Math.max(4, Runtime.getRuntime().availableProcessors()); 10 | private static final ThreadFactory DEFAULT_FACTORY = Executors.defaultThreadFactory(); 11 | private static final CachedDaemonThreadFactory SELF = new CachedDaemonThreadFactory(); 12 | private static final ExecutorService COMMON_POOL = Executors.newFixedThreadPool(2 * MAX_THREADS, SELF); 13 | private static final AtomicInteger THREAD_COUNTER = new AtomicInteger(); 14 | 15 | private CachedDaemonThreadFactory() { 16 | // helper class 17 | } 18 | 19 | @Override 20 | public Thread newThread(Runnable r) { 21 | Thread thread = DEFAULT_FACTORY.newThread(r); 22 | THREAD_COUNTER.incrementAndGet(); 23 | thread.setName("daemonised_chartfx_thread_#" + THREAD_COUNTER.intValue()); 24 | thread.setDaemon(true); 25 | return thread; 26 | } 27 | 28 | public static ExecutorService getCommonPool() { 29 | return COMMON_POOL; 30 | } 31 | 32 | public static CachedDaemonThreadFactory getInstance() { 33 | return SELF; 34 | } 35 | 36 | public static int getNumbersOfThreads() { 37 | return MAX_THREADS; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/utils/IndexedStringConsumer.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.utils; 2 | 3 | /** 4 | * @author ennerf 5 | */ 6 | @FunctionalInterface 7 | public interface IndexedStringConsumer { 8 | void accept(int index, String string); 9 | } 10 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/utils/LimitedQueue.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.utils; 2 | 3 | import java.util.LinkedList; 4 | 5 | /** 6 | * @author rstein 7 | * @param generic list element type 8 | */ 9 | public class LimitedQueue extends LinkedList { 10 | private static final long serialVersionUID = 7158175707385120597L; 11 | private int limit; 12 | 13 | /** 14 | * 15 | * @param limit length of queue in terms of number of elements 16 | */ 17 | public LimitedQueue(final int limit) { 18 | if (limit < 1) { 19 | throw new IllegalArgumentException("limit = '" + limit + "'must be >=1 "); 20 | } 21 | this.limit = limit; 22 | } 23 | 24 | @Override 25 | public boolean add(final E o) { 26 | final boolean added = super.add(o); 27 | while (added && size() > limit) { 28 | super.remove(); 29 | } 30 | return added; 31 | } 32 | 33 | /** 34 | * 35 | * @return length of queue in terms of number of elements 36 | */ 37 | public int getLimit() { 38 | return limit; 39 | } 40 | 41 | /** 42 | * 43 | * @param newLimit length of queue in terms of number of elements 44 | * @return newly set limit (if valid) 45 | */ 46 | public int setLimit(final int newLimit) { 47 | if (newLimit < 1) { 48 | throw new IllegalArgumentException("limit = '" + limit + "'must be >=1 "); 49 | } 50 | limit = newLimit; 51 | return limit; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/utils/NoDuplicatesList.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.utils; 2 | 3 | import java.util.Collection; 4 | import java.util.LinkedList; 5 | 6 | /** 7 | * @author unknown 8 | * @param generics 9 | */ 10 | public class NoDuplicatesList extends LinkedList { 11 | private static final long serialVersionUID = -8547667608571765668L; 12 | 13 | @Override 14 | public boolean add(E e) { 15 | if (this.contains(e)) { 16 | return false; 17 | } 18 | return super.add(e); 19 | } 20 | 21 | @Override 22 | public void add(int index, E element) { 23 | if (this.contains(element)) { 24 | return; 25 | } 26 | super.add(index, element); 27 | } 28 | 29 | @Override 30 | public boolean addAll(Collection collection) { 31 | Collection copy = new LinkedList<>(collection); 32 | copy.removeAll(this); 33 | return super.addAll(copy); 34 | } 35 | 36 | @Override 37 | public boolean addAll(int index, Collection collection) { 38 | Collection copy = new LinkedList<>(collection); 39 | copy.removeAll(this); 40 | return super.addAll(index, copy); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /chartfx-dataset/src/main/java/io/fair_acc/dataset/utils/trees/IndexedNavigableSet.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.utils.trees; 2 | 3 | import java.util.NavigableSet; 4 | 5 | /** 6 | * User: Vitaly Sazanovich Date: 08/02/13 Time: 09:56 Email: Vitaly.Sazanovich@gmail.com 7 | * 8 | * @param generics reference 9 | */ 10 | public interface IndexedNavigableSet extends NavigableSet { 11 | /** 12 | * Returns the entry located at the index offset from the beginning of the sorted set 13 | * 14 | * @param index index of the entry 15 | * @return the entry located at the index (@code index) offset from the beginning of the sorted set 16 | * @throws ArrayIndexOutOfBoundsException if the specified index is less than 0 or greater than size-1 17 | */ 18 | E get(int index); 19 | 20 | /** 21 | * Searches the specified tree map for the specified entry using the put algorithm. Calculates its offset from the 22 | * beginning of the sorted map using weights. 23 | * 24 | * @param e the entry 25 | * @return index of the searched entry, if it is contained in the tree map; otherwise a NullPointerException is 26 | * thrown 27 | * @throws NullPointerException if the specified entry is null or does not exist 28 | */ 29 | int getIndex(E e); 30 | } 31 | -------------------------------------------------------------------------------- /chartfx-dataset/src/test/java/io/fair_acc/dataset/event/TestEventSource.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.event; 2 | 3 | import io.fair_acc.dataset.events.BitState; 4 | import io.fair_acc.dataset.events.EventSource; 5 | 6 | /** 7 | * Default event source for testing 8 | * @author rstein 9 | */ 10 | public class TestEventSource implements EventSource { 11 | protected BitState state = BitState.initDirty(this); 12 | 13 | @Override 14 | public BitState getBitState() { 15 | return state; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chartfx-dataset/src/test/java/io/fair_acc/dataset/spi/financial/api/attrs/AttributeKeyTest.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.financial.api.attrs; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | 5 | import java.util.Set; 6 | 7 | import org.junit.jupiter.api.Test; 8 | 9 | public class AttributeKeyTest { 10 | // normal attribute 11 | public static final AttributeKey TEST_ATTR = AttributeKey.create(String.class, "TEST_ATTR"); 12 | 13 | // attribute with generics 14 | @SuppressWarnings({ "unchecked", "rawtypes" }) 15 | public static final AttributeKey> TEST_COUNTER_LISTENERS = AttributeKey.create((Class>) (Class) Set.class, "TEST_COUNTER_LISTENERS"); 16 | 17 | @Test 18 | public void create() { 19 | assertEquals("TEST_COUNTER_LISTENERS", TEST_COUNTER_LISTENERS.getName()); 20 | assertEquals(Set.class, TEST_COUNTER_LISTENERS.getType()); 21 | 22 | assertEquals("TEST_ATTR", TEST_ATTR.getName()); 23 | assertEquals(String.class, TEST_ATTR.getType()); 24 | } 25 | } -------------------------------------------------------------------------------- /chartfx-dataset/src/test/java/io/fair_acc/dataset/spi/financial/api/attrs/TypeKeyTest.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.financial.api.attrs; 2 | 3 | import static org.junit.jupiter.api.Assertions.*; 4 | 5 | import org.junit.jupiter.api.Test; 6 | 7 | class TypeKeyTest { 8 | public static final AttributeKey TEST_ATTR = AttributeKey.create(String.class, "TEST_ATTR"); 9 | 10 | public static final AttributeKey TEST_ATTR_SAME = AttributeKey.create(String.class, "TEST_ATTR"); 11 | 12 | @Test 13 | void testTypeKey() { 14 | assertEquals(String.class, TEST_ATTR.getType()); 15 | } 16 | 17 | @Test 18 | void getName() { 19 | assertEquals("TEST_ATTR", TEST_ATTR.getName()); 20 | } 21 | 22 | @Test 23 | void testEquals() { 24 | assertEquals(TEST_ATTR, TEST_ATTR_SAME); 25 | } 26 | 27 | @Test 28 | void testHashCode() { 29 | assertNotEquals(0, TEST_ATTR.hashCode()); 30 | } 31 | 32 | @Test 33 | void testToString() { 34 | assertNotNull(TEST_ATTR.toString()); 35 | } 36 | 37 | @Test 38 | void compareTo() { 39 | assertEquals(0, TEST_ATTR.compareTo(TEST_ATTR_SAME)); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /chartfx-dataset/src/test/java/io/fair_acc/dataset/spi/financial/utils/FinancialTestUtils.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.financial.utils; 2 | 3 | import java.time.LocalDate; 4 | import java.time.ZoneId; 5 | import java.util.Date; 6 | 7 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcv; 8 | 9 | public class FinancialTestUtils { 10 | public static IOhlcv createTestOhlcv() { 11 | LocalDate date = LocalDate.parse("2020-11-19"); 12 | return new Ohlcv() 13 | .addOhlcvItem(new OhlcvItem(toDate(date.plusDays(1)), 3001.0, 3005.0, 3000.10, 3002.84, 15001.0, 18007.0)) 14 | .addOhlcvItem(new OhlcvItem(toDate(date.plusDays(1)), 3002.0, 3007.0, 3001.35, 3005.64, 16005.0, 19002.0)) 15 | .addOhlcvItem(new OhlcvItem(toDate(date.plusDays(1)), 3003.0, 3009.15, 3002.50, 3008.75, 14004.0, 20005.0)) 16 | .addOhlcvItem(new OhlcvItem(toDate(date.plusDays(1)), 2999.0, 3000.75, 2997.15, 2998.10, 100085.0, 35001.0)) 17 | .addOhlcvItem(new OhlcvItem(toDate(date.plusDays(1)), 2996.0, 2998.0, 2994.10, 2993.50, 135001.0, 64010.0)); 18 | } 19 | 20 | public static Date toDate(LocalDate ldate) { 21 | return Date.from(ldate.atStartOfDay(ZoneId.systemDefault()).toInstant()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /chartfx-dataset/src/test/java/io/fair_acc/dataset/spi/financial/utils/Ohlcv.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.dataset.spi.financial.utils; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Iterator; 5 | import java.util.List; 6 | 7 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeModel; 8 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcv; 9 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcvItem; 10 | 11 | public class Ohlcv implements IOhlcv { 12 | final List items = new ArrayList<>(); 13 | 14 | @Override 15 | public IOhlcvItem getOhlcvItem(int index) { 16 | return items.get(index); 17 | } 18 | 19 | public Ohlcv addOhlcvItem(IOhlcvItem ohlcvItem) { 20 | items.add(ohlcvItem); 21 | return this; 22 | } 23 | 24 | // just for unit tests 25 | public List getItems() { 26 | return items; 27 | } 28 | 29 | @Override 30 | public int size() { 31 | return items.size(); 32 | } 33 | 34 | public void clear() { 35 | items.clear(); 36 | } 37 | 38 | @Override 39 | public AttributeModel getAddon() { 40 | throw new IllegalStateException("Not supported!"); 41 | } 42 | 43 | @Override 44 | public AttributeModel getAddonOrCreate() { 45 | throw new IllegalStateException("Not supported!"); 46 | } 47 | 48 | @Override 49 | public Iterator iterator() { 50 | return items.iterator(); 51 | } 52 | } -------------------------------------------------------------------------------- /chartfx-dataset/src/test/resources/junit-platform.properties: -------------------------------------------------------------------------------- 1 | junit.jupiter.execution.parallel.enabled=false 2 | junit.jupiter.execution.parallel.mode.default = same_thread 3 | junit.jupiter.execution.parallel.mode.classes.default = concurrent 4 | junit.jupiter.execution.parallel.config.strategy=dynamic -------------------------------------------------------------------------------- /chartfx-math/.pmd: -------------------------------------------------------------------------------- 1 | 2 | 3 | Aggregate:Java Main Sources:Java Test Sources: 4 | true 5 | pmd_rules.xml 6 | false 7 | false 8 | true 9 | 10 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/MathBasePrecise.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math; 2 | 3 | /** 4 | * Provide access to basic math routines with improved/guaranteed precision. 5 | * // TODO: implement e.g. using apache commons math's PreciseMath 6 | * 7 | * @author akrimm 8 | * @deprecated not implemented yet 9 | */ 10 | @Deprecated 11 | public class MathBasePrecise extends MathBase { 12 | private MathBasePrecise() { 13 | // static helper class 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/TRandom3.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math; 2 | 3 | public class TRandom3 extends TRandom { 4 | public TRandom3(int seed) { 5 | super(seed); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/filter/FilterType.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.filter; 2 | 3 | public enum FilterType { 4 | LOW_PASS, 5 | HIGH_PASS 6 | } -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/filter/iir/DirectFormAbstract.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | * 17 | * Copyright (c) 2009 by Vinnie Falco 18 | * Copyright (c) 2016 by Bernd Porr 19 | * Copyright (c) 2019 by Ralph J. Steinhagen 20 | */ 21 | 22 | package io.fair_acc.math.filter.iir; 23 | 24 | /** 25 | * Abstract form of the a filter which can have different state variables Direct form I or II is derived from it 26 | */ 27 | public abstract class DirectFormAbstract { 28 | public static final int DIRECT_FORM_I = 0; 29 | 30 | public static final int DIRECT_FORM_II = 1; 31 | 32 | public DirectFormAbstract() { 33 | reset(); 34 | } 35 | 36 | public abstract double process1(double in, Biquad s); 37 | 38 | public abstract void reset(); 39 | } 40 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/functions/BetaDistributionFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.functions; 2 | 3 | import io.fair_acc.math.Math; 4 | 5 | public class BetaDistributionFunction extends AbstractFunction1D implements Function1D { 6 | /** 7 | * initialise the Beta distribution function parameter order: parameter[0] = p (default: 5.0) parameter[1] = q 8 | * (default: 1.0) 9 | * 10 | * @param name function name 11 | */ 12 | public BetaDistributionFunction(final String name) { 13 | this(name, null); 14 | } 15 | 16 | /** 17 | * initialise the Beta distribution function parameter order: parameter[0] = p (default: 5.0) parameter[1] = q 18 | * (default: 1.0) 19 | * 20 | * @param name function name 21 | * @param parameter 0:p 1:q 22 | */ 23 | public BetaDistributionFunction(final String name, final double[] parameter) { 24 | super(name, new double[2]); 25 | setParameterName(0, "p"); 26 | setParameterValue(0, 5.0); 27 | setParameterName(1, "q"); 28 | setParameterValue(1, 1.0); 29 | 30 | if (parameter == null) { 31 | return; 32 | } 33 | 34 | for (int i = 0; i < Math.min(parameter.length, 2); i++) { 35 | setParameterValue(i, parameter[i]); 36 | } 37 | } 38 | 39 | @Override 40 | public double getValue(final double x) { 41 | return Math.betaDist(x, fparameter[0], fparameter[1]); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/functions/BetaFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.functions; 2 | 3 | import io.fair_acc.math.Math; 4 | 5 | public class BetaFunction extends AbstractFunction1D implements Function1D { 6 | /** 7 | * initialise (Euler's) Beta function parameter order: parameter[0] = par (default: 1.0) 8 | * 9 | * @param name function name 10 | */ 11 | public BetaFunction(final String name) { 12 | this(name, null); 13 | } 14 | 15 | /** 16 | * initialise (Euler's) Beta function parameter order: parameter[0] = par (default: 1.0) 17 | * 18 | * @param name function name 19 | * @param parameter 0:par 20 | */ 21 | public BetaFunction(final String name, final double[] parameter) { 22 | super(name, new double[1]); 23 | setParameterName(0, "par"); 24 | setParameterValue(0, 1); 25 | 26 | if (parameter == null) { 27 | return; 28 | } 29 | 30 | for (int i = 0; i < Math.min(parameter.length, 1); i++) { 31 | setParameterValue(i, parameter[i]); 32 | } 33 | } 34 | 35 | @Override 36 | public double getValue(final double x) { 37 | return Math.beta(x, fparameter[0]); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/functions/BreitWignerFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.functions; 2 | 3 | import io.fair_acc.math.Math; 4 | 5 | public class BreitWignerFunction extends AbstractFunction1D implements Function1D { 6 | /** 7 | * initialise the Breit-Wigner distribution function parameter order: parameter[0] = mean (default: 0.0) 8 | * parameter[1] = gamma (default: 1.0) 9 | * 10 | * @param name function name 11 | */ 12 | public BreitWignerFunction(final String name) { 13 | this(name, null); 14 | } 15 | 16 | /** 17 | * initialise the Breit-Wigner distribution function parameter order: parameter[0] = mean (default: 0.0) 18 | * parameter[1] = gamma (default: 1.0) 19 | * 20 | * @param name function name 21 | * @param parameter parameter of function 0: mean: 1: gamma 22 | */ 23 | public BreitWignerFunction(final String name, final double[] parameter) { 24 | super(name, new double[2]); 25 | setParameterName(0, "mean"); 26 | setParameterValue(0, 0); 27 | setParameterName(1, "gamma"); 28 | setParameterValue(1, 1.0); 29 | 30 | if (parameter == null) { 31 | return; 32 | } 33 | 34 | for (int i = 0; i < Math.min(parameter.length, 2); i++) { 35 | setParameterValue(i, parameter[i]); 36 | } 37 | } 38 | 39 | @Override 40 | public double getValue(final double x) { 41 | return Math.breitWigner(x, fparameter[0], fparameter[1]); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/functions/CauchyLorentzFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.functions; 2 | 3 | import io.fair_acc.math.Math; 4 | 5 | public class CauchyLorentzFunction extends AbstractFunction1D implements Function1D { 6 | /** 7 | * initialise the Cauchy-Lorentz distribution function parameter order: parameter[0] = location (default: 0.0) 8 | * parameter[1] = scale (default: 1.0) 9 | * 10 | * @param name function name 11 | */ 12 | public CauchyLorentzFunction(final String name) { 13 | this(name, null); 14 | } 15 | 16 | /** 17 | * initialise the Cauchy-Lorentz distribution function parameter order: parameter[0] = location (default: 0.0) 18 | * parameter[1] = scale (default: 1.0) 19 | * 20 | * @param name function name 21 | * @param parameter parameter 22 | */ 23 | public CauchyLorentzFunction(final String name, final double[] parameter) { 24 | super(name, new double[2]); 25 | setParameterName(0, "location"); 26 | setParameterValue(0, 0); 27 | setParameterName(1, "scale"); 28 | setParameterValue(1, 1.0); 29 | 30 | if (parameter == null) { 31 | return; 32 | } 33 | 34 | for (int i = 0; i < Math.min(parameter.length, 2); i++) { 35 | setParameterValue(i, parameter[i]); 36 | } 37 | } 38 | 39 | @Override 40 | public double getValue(final double x) { 41 | return Math.cauchyDist(x, fparameter[0], fparameter[1]); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/functions/CombFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.functions; 2 | 3 | import io.fair_acc.math.MathBase; 4 | 5 | public class CombFunction extends AbstractFunction1D { 6 | public CombFunction(final String name, final double[] parameter) { 7 | super(name, new double[3]); 8 | // declare parameter names 9 | setParameterName(0, "fundamental"); 10 | setParameterName(1, "scale"); 11 | setParameterName(2, "width"); 12 | 13 | if (parameter == null) { 14 | return; 15 | } 16 | 17 | // assign default values 18 | final int maxIndex = MathBase.min(parameter.length, getParameterCount()); 19 | for (int i = 0; i < maxIndex; i++) { 20 | setParameterValue(i, parameter[i]); 21 | } 22 | } 23 | 24 | @Override 25 | public double getValue(final double x) { 26 | double y = 0.0; 27 | final double fundamental = fparameter[0]; 28 | if (fundamental == 0) { 29 | return 0; 30 | } 31 | for (int i = 1; i < 1024; i++) { 32 | // y += TMath.Gauss(x, i*fundamental, fparameter[2], false); 33 | if (Math.abs(i * fundamental - x) < fparameter[2]) { 34 | y += 1.0; 35 | } 36 | } 37 | 38 | return fparameter[1] * y; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/functions/FunctionND.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.functions; 2 | 3 | /** 4 | * generic n-dimensional function interface 5 | * 6 | * @author rstein 7 | */ 8 | public interface FunctionND extends Function { 9 | /** 10 | * @param x input parameter array 11 | * @return array of function values 12 | */ 13 | double[] getValue(double[] x); 14 | 15 | /** 16 | * @param x input parameter array 17 | * @param i output index 18 | * @return value of function 19 | */ 20 | double getValue(double[] x, int i); 21 | } 22 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/functions/PoissonFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.functions; 2 | 3 | import io.fair_acc.math.Math; 4 | 5 | public class PoissonFunction extends AbstractFunction1D implements Function1D { 6 | /** 7 | * initialise Poisson function parameter order: parameter[0] = par (default: 1.0) 8 | * 9 | * @param name function name 10 | */ 11 | public PoissonFunction(final String name) { 12 | this(name, null); 13 | } 14 | 15 | /** 16 | * initialise Poisson function parameter order: parameter[0] = par (default: 1.0) 17 | * 18 | * @param name function name 19 | * @param parameter function parameter 20 | */ 21 | public PoissonFunction(final String name, final double[] parameter) { 22 | super(name, new double[1]); 23 | setParameterName(0, "par"); 24 | setParameterValue(0, 1); 25 | 26 | if (parameter == null) { 27 | return; 28 | } 29 | 30 | for (int i = 0; i < Math.min(parameter.length, 1); i++) { 31 | setParameterValue(i, parameter[i]); 32 | } 33 | } 34 | 35 | @Override 36 | public double getValue(final double x) { 37 | return Math.poissonI(x, fparameter[0]); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/functions/RandomFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.functions; 2 | 3 | import java.util.Random; 4 | 5 | public class RandomFunction extends AbstractFunction1D implements Function1D { 6 | private static final Random RANDOM = new Random(System.currentTimeMillis()); 7 | private double amplitude = 0.5; 8 | 9 | public RandomFunction(final String name, final double amplitude) { 10 | super(name, 0); 11 | this.amplitude = amplitude; 12 | } 13 | 14 | @Override 15 | public double getValue(final double x) { 16 | return amplitude * RANDOM.nextGaussian(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/functions/RandomWalkFunction.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.functions; 2 | 3 | import java.util.Random; 4 | 5 | public class RandomWalkFunction extends AbstractFunction1D implements Function1D { 6 | private static final Random RANDOM = new Random(System.currentTimeMillis()); 7 | private double fstate = 0.0; 8 | private double fstep = 0.5; 9 | 10 | public RandomWalkFunction(final String name, final double step) { 11 | super(name, 0); 12 | fstep = step; 13 | } 14 | 15 | @Override 16 | public double getValue(final double x) { 17 | fstate += fstep * RANDOM.nextGaussian(); 18 | return fstate; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/matrix/Matrix.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.matrix; 2 | 3 | public interface Matrix extends Cloneable, java.io.Serializable { 4 | void checkMatrixDimensions(Matrix B); 5 | 6 | /** 7 | * @return copy of matrix 8 | */ 9 | Matrix copy(); 10 | 11 | /** 12 | * @param i row index 13 | * @param j column index 14 | * @return value of matrix element 15 | */ 16 | double get(int i, int j); 17 | 18 | /** 19 | * Get column dimension. 20 | * 21 | * @return n, the number of columns. 22 | */ 23 | int getColumnDimension(); 24 | 25 | /** 26 | * Get row dimension 27 | * 28 | * @return m, the number of rows. 29 | */ 30 | int getRowDimension(); 31 | 32 | /** 33 | * @param i row index 34 | * @param j column index 35 | * @param val new value 36 | */ 37 | void set(int i, int j, double val); 38 | } 39 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/storage/VoxelArrayND.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.storage; 2 | 3 | public interface VoxelArrayND { 4 | VoxelArrayND copy(); 5 | 6 | double[] get(int[] index); 7 | 8 | int[] getInverseLocalIndex(int index); 9 | 10 | double[] getLocal(int localIndex); 11 | 12 | int getLocalIndex(int[] index); 13 | 14 | int getLocalStorageDim(); 15 | 16 | int getValueDimension(); 17 | 18 | void initialiseWithValue(double val); 19 | 20 | void set(int[] index, double[] val); 21 | 22 | void setLocal(int localIndex, double[] val); 23 | } 24 | -------------------------------------------------------------------------------- /chartfx-math/src/main/java/io/fair_acc/math/utils/UpdateListener.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.utils; 2 | 3 | public interface UpdateListener { 4 | void Update(Object source); 5 | } 6 | -------------------------------------------------------------------------------- /chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman-harris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman-harris.png -------------------------------------------------------------------------------- /chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman-nuttall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman-nuttall.png -------------------------------------------------------------------------------- /chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_blackman.png -------------------------------------------------------------------------------- /chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_flat_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_flat_top.png -------------------------------------------------------------------------------- /chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_hamming.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_hamming.png -------------------------------------------------------------------------------- /chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_hann.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_hann.png -------------------------------------------------------------------------------- /chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_nuttall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_nuttall.png -------------------------------------------------------------------------------- /chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_rectangular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-math/src/main/resources/io/fair_acc/math/spectra/data/window_rectangular.png -------------------------------------------------------------------------------- /chartfx-math/src/test/java/io/fair_acc/math/spectra/EEMDTests.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.math.spectra; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertArrayEquals; 4 | import static org.junit.jupiter.api.Assertions.assertEquals; 5 | 6 | import org.junit.jupiter.api.Test; 7 | 8 | public class EEMDTests { 9 | @Test 10 | public void extremeTest() { 11 | double[][] spmax = new double[2][10]; 12 | double[][] spmin = new double[2][10]; 13 | 14 | assertEquals(-1, EEMD.extrema(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, spmax, spmin)); 15 | assertArrayEquals(new double[] { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, spmax[0]); 16 | assertArrayEquals(new double[] { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, spmax[1]); 17 | assertArrayEquals(new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, spmin[0]); 18 | assertArrayEquals(new double[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, spmin[1]); 19 | 20 | assertEquals(1, EEMD.extrema(new double[] { 1, 2, 3, 2, 1, 5 }, spmax, spmin)); 21 | assertArrayEquals(new double[] { 2, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, spmax[0]); 22 | assertArrayEquals(new double[] { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, spmax[1]); 23 | assertArrayEquals(new double[] { 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, spmin[0]); 24 | assertArrayEquals(new double[] { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, spmin[1]); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/ChartFxSampler.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample; 2 | 3 | import java.io.File; 4 | import java.nio.file.Path; 5 | import java.util.Arrays; 6 | import java.util.Optional; 7 | 8 | import fxsampler.FXSampler; 9 | 10 | public class ChartFxSampler { 11 | private static boolean debug = Optional.ofNullable(System.getenv("chartfx.debug")) 12 | .map(Boolean::parseBoolean) 13 | .orElse(false); 14 | 15 | public static void main(String[] args) { 16 | if (debug) { 17 | // Debug output for checking classpath 18 | System.out.println("\nJars on ClassPath:"); 19 | String classpath = System.getProperty("java.class.path"); 20 | Arrays.stream(classpath.split(File.pathSeparator)) 21 | .map(String::toString) 22 | .filter(str -> str.endsWith(".jar")) 23 | .map(str -> "* " + str.substring(str.lastIndexOf(File.separatorChar) + 1)) 24 | .sorted() 25 | .forEach(System.out::println); 26 | 27 | // The FX Sampler only searches for jars/classes at and below the working directory 28 | System.out.println("\nworkingDir = " + Path.of(".").toAbsolutePath().normalize() + "\n"); 29 | } 30 | 31 | FXSampler.main(args); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/chart/ChartSample.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.chart; 2 | 3 | import javafx.scene.Node; 4 | import javafx.scene.control.Label; 5 | import javafx.stage.Stage; 6 | 7 | import fxsampler.SampleBase; 8 | 9 | public abstract class ChartSample extends SampleBase { 10 | @Override 11 | public String getSampleName() { 12 | return this.getClass().getSimpleName(); 13 | } 14 | 15 | @Override 16 | public String getProjectVersion() { 17 | return "11.3.0"; 18 | } 19 | 20 | @Override 21 | public Node getPanel(final Stage stage) { 22 | System.out.println("loading sample"); 23 | return getChartPanel(stage); 24 | } 25 | 26 | public Node getChartPanel(final Stage stage) { 27 | System.out.println("loading sample"); 28 | return new Label("Sample hast to override getPanel() or getChartPanel()"); 29 | } 30 | 31 | @Override 32 | public String getJavaDocURL() { 33 | return ""; 34 | } 35 | 36 | @Override 37 | public String getControlStylesheetURL() { 38 | return null; 39 | } 40 | 41 | @Override 42 | public String getSampleSourceURL() { 43 | return ""; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/chart/legacy/ChartHighUpdateRateSample.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.chart.legacy; 2 | 3 | import javafx.application.Application; 4 | import javafx.scene.layout.BorderPane; 5 | 6 | import com.sun.javafx.tk.Toolkit; 7 | 8 | import io.fair_acc.sample.chart.RollingBufferSample; 9 | 10 | /** 11 | * chart-fx stress test for updates at 100 Hz to 1 kHz 12 | * 13 | * @author rstein 14 | */ 15 | public class ChartHighUpdateRateSample extends RollingBufferSample { 16 | static { 17 | N_SAMPLES = 30000; 18 | UPDATE_PERIOD = 1; 19 | BUFFER_CAPACITY = 7500; 20 | } 21 | private static int counter = 0; 22 | 23 | @Override 24 | public BorderPane initComponents() { 25 | BorderPane pane = super.initComponents(); 26 | Toolkit.getToolkit().addSceneTkPulseListener(() -> { 27 | counter = (counter + 1) % 100; 28 | if (counter == 0) { 29 | System.err.println("pulse auto dipole, " 30 | + " auto beam "); 31 | } 32 | }); 33 | 34 | Toolkit.getToolkit().checkFxUserThread(); 35 | return pane; 36 | } 37 | 38 | public static void main(final String[] args) { 39 | Application.launch(args); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/chart/legacy/utils/ChartTestCase.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.chart.legacy.utils; 2 | 3 | import javafx.scene.Node; 4 | 5 | public interface ChartTestCase { 6 | Node getChart(final int nSamples); 7 | 8 | void setNumberOfSamples(final int nSamples); 9 | 10 | void updateDataSet(); 11 | } 12 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/FinancialCandlestickSample.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial; 2 | 3 | import javafx.application.Application; 4 | 5 | import io.fair_acc.chartfx.XYChart; 6 | import io.fair_acc.chartfx.renderer.ErrorStyle; 7 | import io.fair_acc.chartfx.renderer.spi.ErrorDataSetRenderer; 8 | import io.fair_acc.chartfx.renderer.spi.financial.CandleStickRenderer; 9 | import io.fair_acc.dataset.spi.DefaultDataSet; 10 | import io.fair_acc.dataset.spi.financial.OhlcvDataSet; 11 | 12 | /** 13 | * Candlestick Renderer Sample 14 | * 15 | * @author afischer 16 | */ 17 | public class FinancialCandlestickSample extends AbstractBasicFinancialApplication { 18 | protected void prepareRenderers(XYChart chart, OhlcvDataSet ohlcvDataSet, DefaultDataSet indiSet) { 19 | // create and apply renderers 20 | CandleStickRenderer candleStickRenderer = new CandleStickRenderer(); 21 | candleStickRenderer.getDatasets().addAll(ohlcvDataSet); 22 | 23 | ErrorDataSetRenderer avgRenderer = new ErrorDataSetRenderer(); 24 | avgRenderer.setDrawMarker(false); 25 | avgRenderer.setErrorStyle(ErrorStyle.NONE); 26 | avgRenderer.getDatasets().addAll(indiSet); 27 | 28 | chart.getRenderers().clear(); 29 | chart.getRenderers().add(candleStickRenderer); 30 | chart.getRenderers().add(avgRenderer); 31 | } 32 | 33 | /** 34 | * @param args the command line arguments 35 | */ 36 | public static void main(final String[] args) { 37 | Application.launch(args); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/FinancialFootprintSample.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial; 2 | 3 | import io.fair_acc.chartfx.XYChart; 4 | import io.fair_acc.chartfx.renderer.ErrorStyle; 5 | import io.fair_acc.chartfx.renderer.spi.ErrorDataSetRenderer; 6 | import io.fair_acc.chartfx.renderer.spi.financial.CandleStickRenderer; 7 | import io.fair_acc.dataset.spi.DefaultDataSet; 8 | import io.fair_acc.dataset.spi.financial.OhlcvDataSet; 9 | 10 | /** 11 | * Footprint Renderer Sample 12 | * 13 | * @author afischer 14 | */ 15 | public class FinancialFootprintSample extends AbstractBasicFinancialApplication { 16 | protected void prepareRenderers(XYChart chart, OhlcvDataSet ohlcvDataSet, DefaultDataSet indiSet) { 17 | // create and apply renderers 18 | CandleStickRenderer candleStickRenderer = new CandleStickRenderer(); 19 | candleStickRenderer.getDatasets().addAll(ohlcvDataSet); 20 | 21 | ErrorDataSetRenderer avgRenderer = new ErrorDataSetRenderer(); 22 | avgRenderer.setDrawMarker(false); 23 | avgRenderer.setErrorStyle(ErrorStyle.NONE); 24 | avgRenderer.getDatasets().addAll(indiSet); 25 | 26 | chart.getRenderers().clear(); 27 | chart.getRenderers().add(candleStickRenderer); 28 | chart.getRenderers().add(avgRenderer); 29 | } 30 | 31 | /** 32 | * @param args the command line arguments 33 | */ 34 | public static void main(final String[] args) { 35 | launch(args); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/FinancialHiLowSample.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial; 2 | 3 | import io.fair_acc.chartfx.XYChart; 4 | import io.fair_acc.chartfx.renderer.ErrorStyle; 5 | import io.fair_acc.chartfx.renderer.spi.ErrorDataSetRenderer; 6 | import io.fair_acc.chartfx.renderer.spi.financial.HighLowRenderer; 7 | import io.fair_acc.dataset.spi.DefaultDataSet; 8 | import io.fair_acc.dataset.spi.financial.OhlcvDataSet; 9 | 10 | /** 11 | * OHLC (HiLo) Renderer Sample 12 | * 13 | * @author afischer 14 | */ 15 | public class FinancialHiLowSample extends AbstractBasicFinancialApplication { 16 | protected void prepareRenderers(XYChart chart, OhlcvDataSet ohlcvDataSet, DefaultDataSet indiSet) { 17 | // create and apply renderers 18 | HighLowRenderer highLowRenderer = new HighLowRenderer(); 19 | highLowRenderer.getDatasets().addAll(ohlcvDataSet); 20 | 21 | ErrorDataSetRenderer avgRenderer = new ErrorDataSetRenderer(); 22 | avgRenderer.setDrawMarker(false); 23 | avgRenderer.setErrorStyle(ErrorStyle.NONE); 24 | avgRenderer.getDatasets().addAll(indiSet); 25 | 26 | chart.getRenderers().clear(); 27 | chart.getRenderers().add(highLowRenderer); 28 | chart.getRenderers().add(avgRenderer); 29 | } 30 | 31 | /** 32 | * @param args the command line arguments 33 | */ 34 | public static void main(final String[] args) { 35 | launch(args); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/dos/AbsorptionClusterDO.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.dos; 2 | 3 | import java.util.LinkedHashSet; 4 | import java.util.Set; 5 | 6 | public class AbsorptionClusterDO { 7 | // ordered from bottom to top 8 | private final Set> bidClusters = new LinkedHashSet<>(); 9 | // ordered from top to bottom 10 | private final Set> askClusters = new LinkedHashSet<>(); 11 | 12 | public void addBidCluster(Interval cluster) { 13 | bidClusters.add(cluster); 14 | } 15 | 16 | public void addAskCluster(Interval cluster) { 17 | askClusters.add(cluster); 18 | } 19 | 20 | public Set> getBidClusters() { 21 | return bidClusters; 22 | } 23 | 24 | public Set> getAskClusters() { 25 | return askClusters; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/dos/Interval.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.dos; 2 | 3 | public class Interval { 4 | public T from; 5 | public T to; 6 | 7 | public Interval(T from, T to) { 8 | this.from = from; 9 | this.to = to; 10 | } 11 | 12 | @Override 13 | public int hashCode() { 14 | final int prime = 31; 15 | int result = 1; 16 | result = prime * result + ((from == null) ? 0 : from.hashCode()); 17 | result = prime * result + ((to == null) ? 0 : to.hashCode()); 18 | return result; 19 | } 20 | 21 | @Override 22 | public boolean equals(Object obj) { 23 | if (this == obj) 24 | return true; 25 | if (obj == null) 26 | return false; 27 | if (getClass() != obj.getClass()) 28 | return false; 29 | Interval other = (Interval) obj; 30 | if (from == null) { 31 | if (other.from != null) 32 | return false; 33 | } else if (!from.equals(other.from)) 34 | return false; 35 | if (to == null) { 36 | return other.to == null; 37 | } else 38 | return to.equals(other.to); 39 | } 40 | 41 | @Override 42 | public String toString() { 43 | return "Interval [from=" + from + ", to=" + to + "]"; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/dos/ResettableIterator.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.dos; 2 | 3 | import java.util.Iterator; 4 | 5 | /** 6 | * Defines an iterator that can be reset back to an initial state. 7 | *

8 | * This interface allows an iterator to be repeatedly reused. 9 | * 10 | * @param the type to iterate over 11 | * @version $Id: ResettableIterator.java 1543263 2013-11-19 00:47:55Z ggregory $ 12 | * @since 3.0 13 | */ 14 | public interface ResettableIterator extends Iterator { 15 | /** 16 | * Resets the iterator back to the position at which the iterator 17 | * was created. 18 | */ 19 | void reset(); 20 | } 21 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/OhlcvChangeListener.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service; 2 | 3 | import io.fair_acc.dataset.spi.financial.api.ohlcv.IOhlcvItem; 4 | 5 | /** 6 | * OHLCV Listener about structure changes. 7 | */ 8 | public interface OhlcvChangeListener { 9 | /** 10 | * Notification event about new ohlcv item changed 11 | * @param ohlcvItem new or changed ohlcv item 12 | * @exception Exception if the processing failed 13 | */ 14 | void tickEvent(IOhlcvItem ohlcvItem) throws Exception; 15 | } 16 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/StandardTradePlanAttributes.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service; 2 | 3 | import io.fair_acc.dataset.spi.financial.api.attrs.AttributeKey; 4 | import io.fair_acc.sample.financial.dos.OrderContainer; 5 | import io.fair_acc.sample.financial.dos.PositionContainer; 6 | 7 | public class StandardTradePlanAttributes { 8 | /** 9 | * The performed trading orders 10 | */ 11 | public static final AttributeKey ORDERS = AttributeKey.create(OrderContainer.class, "ORDERS"); 12 | 13 | /** 14 | * The opened/closed trading positions 15 | */ 16 | public static final AttributeKey POSITIONS = AttributeKey.create(PositionContainer.class, "POSITIONS"); 17 | 18 | /** 19 | * The trading asset identification - this symbol will be traded by execution platform 20 | * The more providers are supported, this one is main for trading. 21 | */ 22 | public static final AttributeKey ASSET_NAME = AttributeKey.create(String.class, "ASSET_NAME"); 23 | 24 | /** 25 | * The account ID 26 | */ 27 | public static final AttributeKey ACCOUNT_ID = AttributeKey.create(String.class, "ACCOUNT_ID"); 28 | 29 | private StandardTradePlanAttributes() { 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/TickDataFinishedException.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service; 2 | 3 | public class TickDataFinishedException extends Exception { 4 | private static final long serialVersionUID = 5241232871349317846L; 5 | 6 | public TickDataFinishedException(String message) { 7 | super(message); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/TickOhlcvDataProvider.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service; 2 | 3 | import java.io.IOException; 4 | 5 | import io.fair_acc.sample.financial.dos.OHLCVItem; 6 | 7 | /** 8 | * Provides actual tick data 9 | */ 10 | public interface TickOhlcvDataProvider { 11 | /** 12 | * Every get() returns tick ohlcv item. If it is replay mode - the boundary is reached the TickDataFinishedException is thrown. 13 | * If the realtime mode is used - never-end loop is used. The thread waits to next data. 14 | * @return provides tick ohlcv data 15 | * @throws TickDataFinishedException if the data are reached the boundary 16 | * @throws IOException - the data are not reachable 17 | */ 18 | OHLCVItem get() throws TickDataFinishedException, IOException; 19 | } 20 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/consolidate/IncrementalOhlcvConsolidation.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service.consolidate; 2 | 3 | import io.fair_acc.sample.financial.dos.DefaultOHLCV; 4 | import io.fair_acc.sample.financial.dos.OHLCVItem; 5 | import io.fair_acc.sample.financial.service.period.IntradayPeriod; 6 | 7 | public interface IncrementalOhlcvConsolidation { 8 | /** 9 | * Base method for incremental consolidation process 10 | * @param ohlcv existed consolidated ohlcv structure 11 | * @param incrementItem tick actual ohlcv item 12 | * @return consolidated signal 13 | */ 14 | DefaultOHLCV consolidate(DefaultOHLCV ohlcv, OHLCVItem incrementItem); 15 | 16 | /** 17 | * @return provides information about consolidation settings period 18 | */ 19 | IntradayPeriod getPeriod(); 20 | } 21 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/consolidate/OhlcvConsolidationAddon.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service.consolidate; 2 | 3 | import io.fair_acc.sample.financial.dos.DefaultOHLCV; 4 | import io.fair_acc.sample.financial.dos.OHLCVItem; 5 | 6 | public interface OhlcvConsolidationAddon { 7 | /** 8 | * Base method for addon calculation process 9 | * @param ohlcv existed ohlcv structure 10 | * @param incrementItem incremental ohlc item 11 | * @return enhanced signal 12 | */ 13 | DefaultOHLCV consolidationUpdateAddon(DefaultOHLCV ohlcv, OHLCVItem incrementItem); 14 | 15 | /** 16 | * Base method for addon calculation process 17 | * @param ohlcv existed ohlcv structure 18 | * @param incrementItem incremental ohlc item 19 | * @return enhanced signal 20 | */ 21 | DefaultOHLCV consolidationAdditionAddon(DefaultOHLCV ohlcv, OHLCVItem incrementItem); 22 | 23 | /** 24 | * @return true = addon needs recalculation per tick in the consolidation process, 25 | * false = the computation is processing by new tick which create new bar. It means 26 | * in the end of previous closed bar - on close of bar. 27 | */ 28 | boolean isDynamic(); 29 | } 30 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/execution/ExecutionPlatform.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service.execution; 2 | 3 | import io.fair_acc.sample.financial.dos.Order; 4 | 5 | public interface ExecutionPlatform { 6 | /** 7 | * Execute the trading order 8 | * 9 | * @param order Order 10 | * @return result 11 | */ 12 | ExecutionResult performOrder(Order order); 13 | 14 | /** 15 | * Cancel the trading order 16 | * 17 | * @param orderId int 18 | * @return result 19 | */ 20 | ExecutionResult cancelOrder(int orderId); 21 | 22 | /** 23 | * Cancel the trading order 24 | * 25 | * @param order instance 26 | * @return result 27 | */ 28 | ExecutionResult cancelOrder(Order order); 29 | 30 | /** 31 | * Add the listener of execution platform 32 | * 33 | * @param listener ExecutionPlatformListener 34 | */ 35 | void addExecutionPlatformListener(ExecutionPlatformListener listener); 36 | 37 | /** 38 | * Remove the listener of execution platform 39 | * 40 | * @param listener ExecutionPlatformListener 41 | */ 42 | void removeExecutionPlatformListener(ExecutionPlatformListener listener); 43 | } 44 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/execution/ExecutionPlatformListener.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service.execution; 2 | 3 | import java.util.EventListener; 4 | 5 | public interface ExecutionPlatformListener extends EventListener { 6 | /** 7 | * The order was filled 8 | * 9 | * @param event OrderEvent 10 | */ 11 | void orderFilled(OrderEvent event); 12 | 13 | /** 14 | * The order was cancelled 15 | * 16 | * @param event OrderEvent 17 | */ 18 | void orderCancelled(OrderEvent event); 19 | } 20 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/execution/ExecutionResult.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service.execution; 2 | 3 | import io.fair_acc.sample.financial.dos.Order; 4 | 5 | public class ExecutionResult { 6 | public enum ExecutionResultEnum { 7 | OK, 8 | ERROR, 9 | CANCEL 10 | } 11 | 12 | private final Order order; 13 | private ExecutionResultEnum result; 14 | private String errorMessage; 15 | 16 | public ExecutionResult(Order order) { 17 | this(ExecutionResultEnum.OK, order); 18 | } 19 | 20 | public ExecutionResult(ExecutionResultEnum resultEnum, Order order) { 21 | this.order = order; 22 | setResult(resultEnum); 23 | } 24 | 25 | public Order getOrder() { 26 | return order; 27 | } 28 | 29 | public String getErrorMessage() { 30 | return errorMessage; 31 | } 32 | 33 | public void setErrorMessage(String errorMessage) { 34 | this.errorMessage = errorMessage; 35 | } 36 | 37 | public ExecutionResultEnum getResult() { 38 | return result; 39 | } 40 | 41 | public void setResult(ExecutionResultEnum result) { 42 | this.result = result; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/execution/OrderEvent.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service.execution; 2 | 3 | import java.util.EventObject; 4 | 5 | import io.fair_acc.sample.financial.dos.Order; 6 | 7 | public class OrderEvent extends EventObject { 8 | private static final long serialVersionUID = 3995883467037156877L; 9 | 10 | private final Order order; 11 | 12 | public OrderEvent(Object source, Order order) { 13 | super(source); 14 | this.order = order; 15 | } 16 | 17 | public Order getOrder() { 18 | return order; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/footprint/NbColumnColorGroupService.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service.footprint; 2 | 3 | import io.fair_acc.chartfx.renderer.spi.financial.service.footprint.NbColumnColorGroup; 4 | import io.fair_acc.sample.financial.dos.PriceVolumeContainer; 5 | 6 | /** 7 | * Calculate color group settings for each bid/ask volume in each level price 8 | */ 9 | public interface NbColumnColorGroupService { 10 | /** 11 | * Calculate color group settings for each bid/ask volume in each level price 12 | * @param priceVolumeContainer which has to be painted 13 | * @return the result with column color group data result 14 | */ 15 | NbColumnColorGroup calculate(PriceVolumeContainer priceVolumeContainer); 16 | } 17 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/order/InternalOrderIdGenerator.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service.order; 2 | 3 | public class InternalOrderIdGenerator { 4 | private static final ThreadLocal generator = new ThreadLocal() { 5 | @Override 6 | protected Integer initialValue() { 7 | return 0; 8 | } 9 | }; 10 | 11 | public static Integer generateId() { 12 | generator.set(generator.get() + 1); 13 | return generator.get(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/order/InternalPositionIdGenerator.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service.order; 2 | 3 | public class InternalPositionIdGenerator { 4 | private static final ThreadLocal generator = ThreadLocal.withInitial(() -> 0); 5 | 6 | public static Integer generateId() { 7 | generator.set(generator.get() + 1); 8 | return generator.get(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/period/EodPeriod.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service.period; 2 | 3 | /** 4 | * End-of-Day Periods Domain object 5 | * 6 | * @author afischer 7 | */ 8 | public class EodPeriod extends Period { 9 | public static final EodPeriod DAILY = new EodPeriod(); 10 | 11 | public enum PeriodEnum { 12 | DAILY, 13 | WEEKLY, 14 | MONTHLY 15 | } 16 | 17 | private final PeriodEnum period; 18 | 19 | public EodPeriod() { 20 | this(PeriodEnum.DAILY); 21 | } 22 | 23 | public EodPeriod(PeriodEnum period) { 24 | this.period = period; 25 | } 26 | 27 | public PeriodEnum getPeriod() { 28 | return period; 29 | } 30 | 31 | @Override 32 | public long getMillis() { 33 | switch (period) { 34 | case DAILY: 35 | return 24 * 60 * 60 * 1000; 36 | case WEEKLY: 37 | return 7 * 24 * 60 * 60 * 1000; 38 | case MONTHLY: 39 | return 2592000000L; 40 | default: 41 | throw new IllegalArgumentException("The method getMillis() is not supported for this type of period: " + this); 42 | } 43 | } 44 | 45 | @Override 46 | public String toString() { 47 | return period.toString(); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/java/io/fair_acc/sample/financial/service/period/Period.java: -------------------------------------------------------------------------------- 1 | package io.fair_acc.sample.financial.service.period; 2 | 3 | public abstract class Period { 4 | public enum PeriodType { 5 | EOD, 6 | INTRA 7 | } 8 | 9 | private final PeriodType type; 10 | 11 | public Period(PeriodType type) { 12 | this.type = type; 13 | } 14 | 15 | public Period() { 16 | this(PeriodType.EOD); 17 | } 18 | 19 | /** 20 | * @return common type of the time period 21 | */ 22 | public PeriodType getType() { 23 | return type; 24 | } 25 | 26 | /** 27 | * @return get period in millis 28 | */ 29 | public abstract long getMillis(); 30 | 31 | @Override 32 | public int hashCode() { 33 | final int prime = 31; 34 | int result = 1; 35 | result = prime * result + ((type == null) ? 0 : type.hashCode()); 36 | return result; 37 | } 38 | 39 | @Override 40 | public boolean equals(Object obj) { 41 | if (this == obj) 42 | return true; 43 | if (obj == null) 44 | return false; 45 | if (getClass() != obj.getClass()) 46 | return false; 47 | Period other = (Period) obj; 48 | return type == other.type; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/META-INF/services/fxsampler.FXSamplerProject: -------------------------------------------------------------------------------- 1 | io.fair_acc.sample.ChartFxSamplerProject 2 | io.fair_acc.sample.ChartFxMathSamplerProject 3 | io.fair_acc.sample.ChartFxFinancialSamplerProject 4 | io.fair_acc.sample.ChartFxMiscSamplerProject 5 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/banner.png -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/chart/CustomCss1.css: -------------------------------------------------------------------------------- 1 | .chart-crosshair-path { 2 | -fx-stroke-width: 3; 3 | -fx-stroke: green; 4 | } 5 | 6 | .chart-zoom-rect { 7 | -fx-fill: lime; 8 | -fx-stroke: pink; 9 | -fx-stroke-type: inside; 10 | -fx-stroke-width: 5; 11 | -fx-opacity: 0.1; 12 | } 13 | 14 | .chart-datapoint-tooltip-label { 15 | -fx-background-color: purple; 16 | -fx-border-color: black; 17 | -fx-border-radius: 9; 18 | -fx-font-size: 22; 19 | -fx-font-weight: lighter; 20 | -fx-text-alignment: left; 21 | } 22 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/chart/CustomCss2.css: -------------------------------------------------------------------------------- 1 | .chart-crosshair-path { 2 | -fx-stroke-width: 3; 3 | -fx-stroke: orange; 4 | } 5 | 6 | .chart-major-grid-lines { 7 | -fx-stroke: derive(red, -10%); 8 | -fx-stroke-dash-array: 1.5, 2.5; 9 | -fx-stroke-width: 0.5; 10 | -fx-grid-on-top: true; 11 | } 12 | 13 | .axis-label { 14 | -fx-stroke: blue; 15 | -fx-axis-label-alignment: right; 16 | -fx-font-family: "Times New Roman"; 17 | } 18 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/chart/ValueIndicatorSample.css: -------------------------------------------------------------------------------- 1 | .x-value-indicator-line0 { 2 | -fx-stroke-width: 4; 3 | -fx-stroke: red; 4 | -fx-stroke-dash-array: 8; 5 | } 6 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/chart/YWatchValueIndicatorSample.css: -------------------------------------------------------------------------------- 1 | .valA-value-watch-indicator-marker { 2 | -fx-stroke-width: 0.5; 3 | -fx-stroke: black; 4 | -fx-fill: #78015b; 5 | } 6 | 7 | .valB-value-watch-indicator-marker { 8 | -fx-stroke-width: 0.5; 9 | -fx-stroke: black; 10 | -fx-fill: green; 11 | } 12 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/chart/financial/NQ-201609-GLOBEX.scid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/financial/NQ-201609-GLOBEX.scid -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/RollingBufferLegacy.css: -------------------------------------------------------------------------------- 1 | .chart-line-symbol { 2 | -fx-shape: ""; 3 | } 4 | 5 | .chart-line-symbol { 6 | -fx-background-insets: 0, 0; 7 | -fx-background-radius: 0; 8 | -fx-padding: 0; 9 | -fx-shape: ""; 10 | -fx-background-color: transparent; 11 | } 12 | 13 | .chart-series-line { 14 | -fx-stroke-width: 1.5px; 15 | -fx-effect: null; 16 | } 17 | 18 | .default-color0.chart-series-line { 19 | -fx-stroke: #0000c8; 20 | } 21 | 22 | .default-color1.chart-series-line { 23 | -fx-stroke: #c80000; 24 | } 25 | 26 | .default-color2.chart-series-line { 27 | -fx-stroke: #00c800; 28 | } 29 | 30 | .default-color0.chart-line-symbol { 31 | -fx-background-color: #0000c8, white; 32 | } 33 | 34 | .default-color1.chart-line-symbol { 35 | -fx-background-color: #c80000, white; 36 | } 37 | 38 | .default-color2.chart-line-symbol { 39 | -fx-background-color: #00c800, white; 40 | } 41 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/data/ChartPerformanceBenchmark25Hz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/data/ChartPerformanceBenchmark25Hz.png -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/data/ChartPerformanceBenchmark2Hz.csv: -------------------------------------------------------------------------------- 1 | # JavaFX Chart,new Chart (ErrorDataSetRenderer),new Chart (ReducingLineRenderer),,,, 2 | # X,Y,X,Y,X,Y, 3 | 10000.000000,47.290954,1000000.000000,33.983683,900000.000000,39.820995, 4 | 5000.000000,33.047188,900000.000000,46.941989,800000.000000,60.037898, 5 | 4000.000000,24.810113,800000.000000,52.897618,700000.000000,47.323796, 6 | 3000.000000,19.315507,700000.000000,39.176174,600000.000000,50.793981, 7 | 2000.000000,14.132313,600000.000000,32.529530,500000.000000,49.415321, 8 | 1000.000000,9.356243,500000.000000,28.966534,400000.000000,33.684677, 9 | 500.000000,10.188517,400000.000000,33.265944,300000.000000,45.049130, 10 | 100.000000,9.436126,300000.000000,35.139491,200000.000000,33.405787, 11 | ,,200000.000000,29.100013,100000.000000,20.513644, 12 | ,,100000.000000,18.799078,50000.000000,16.189995, 13 | ,,50000.000000,13.579958,40000.000000,13.308956, 14 | ,,40000.000000,14.274627,30000.000000,11.653522, 15 | ,,30000.000000,11.370320,20000.000000,11.002520, 16 | ,,20000.000000,12.233456,10000.000000,8.081661, 17 | ,,10000.000000,9.258133,5000.000000,8.095744, 18 | ,,5000.000000,7.006405,4000.000000,7.891423, 19 | ,,4000.000000,6.570112,3000.000000,7.343850, 20 | ,,3000.000000,6.308637,2000.000000,7.605479, 21 | ,,2000.000000,11.535793,1000.000000,7.391776, 22 | ,,1000.000000,6.320327,500.000000,8.079306, 23 | ,,500.000000,6.224253,100.000000,6.011448, 24 | ,,100.000000,6.059982,,, 25 | -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/data/ChartPerformanceBenchmark2Hz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/legacy/data/ChartPerformanceBenchmark2Hz.png -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/chart/testdata/EU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/testdata/EU.png -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/chart/utils/alla-turca.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/chart/utils/alla-turca.mid -------------------------------------------------------------------------------- /chartfx-samples/src/main/resources/io/fair_acc/sample/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/chartfx-samples/src/main/resources/io/fair_acc/sample/icon.png -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | ignore: 2 | - "*/src/test/**/*" 3 | - "chartfx-samples/**/*" 4 | -------------------------------------------------------------------------------- /config/hooks/pre-commit-stub: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # stub pre-commit hook 4 | # just a runner for the real pre-commit script 5 | # if script cannot be found, exit without error 6 | # (to not block local commits) 7 | 8 | set -e 9 | 10 | REPO_ROOT_DIR="$(git rev-parse --show-toplevel)" 11 | PRE_COMMIT_SCRIPT="${REPO_ROOT_DIR}/config/hooks/pre-commit" 12 | 13 | if [ -f $PRE_COMMIT_SCRIPT ]; then 14 | source $PRE_COMMIT_SCRIPT 15 | fi -------------------------------------------------------------------------------- /dependency-check-suppressions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | ^pkg:maven/pl\.edu\.icm/JLargeArrays@.*$ 8 | cpe:/a:gitlab:gitlab 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/THPRB028.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/THPRB028.pdf -------------------------------------------------------------------------------- /docs/THPRB028_poster.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/THPRB028_poster.pdf -------------------------------------------------------------------------------- /docs/banner/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/banner/banner.png -------------------------------------------------------------------------------- /docs/icons/icon-rounded-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-rounded-1024.png -------------------------------------------------------------------------------- /docs/icons/icon-rounded-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-rounded-128.png -------------------------------------------------------------------------------- /docs/icons/icon-rounded-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-rounded-256.png -------------------------------------------------------------------------------- /docs/icons/icon-rounded-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-rounded-512.png -------------------------------------------------------------------------------- /docs/icons/icon-rounded-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-rounded-64.png -------------------------------------------------------------------------------- /docs/icons/icon-square-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-square-1024.png -------------------------------------------------------------------------------- /docs/icons/icon-square-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-square-128.png -------------------------------------------------------------------------------- /docs/icons/icon-square-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-square-256.png -------------------------------------------------------------------------------- /docs/icons/icon-square-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-square-512.png -------------------------------------------------------------------------------- /docs/icons/icon-square-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/icons/icon-square-64.png -------------------------------------------------------------------------------- /docs/pics/CategoryAxisSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/CategoryAxisSample.png -------------------------------------------------------------------------------- /docs/pics/ChartAnatomySample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ChartAnatomySample.png -------------------------------------------------------------------------------- /docs/pics/ChartIndicatorSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ChartIndicatorSample.png -------------------------------------------------------------------------------- /docs/pics/ContourChartSample1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ContourChartSample1.png -------------------------------------------------------------------------------- /docs/pics/ContourChartSample2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ContourChartSample2.png -------------------------------------------------------------------------------- /docs/pics/DataSetAverageSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/DataSetAverageSample.png -------------------------------------------------------------------------------- /docs/pics/DataSetFilterSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/DataSetFilterSample.png -------------------------------------------------------------------------------- /docs/pics/DataSetIntegrateDifferentiateSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/DataSetIntegrateDifferentiateSample.png -------------------------------------------------------------------------------- /docs/pics/DataSetSpectrumSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/DataSetSpectrumSample.png -------------------------------------------------------------------------------- /docs/pics/EditDataSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/EditDataSample.png -------------------------------------------------------------------------------- /docs/pics/ErrorDataSetRendererStylingSample1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ErrorDataSetRendererStylingSample1.png -------------------------------------------------------------------------------- /docs/pics/ErrorDataSetRendererStylingSample2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ErrorDataSetRendererStylingSample2.png -------------------------------------------------------------------------------- /docs/pics/FinancialAdvancedCandlestickSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FinancialAdvancedCandlestickSample.png -------------------------------------------------------------------------------- /docs/pics/FinancialCandlestickSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FinancialCandlestickSample.png -------------------------------------------------------------------------------- /docs/pics/FinancialHiLowSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FinancialHiLowSample.png -------------------------------------------------------------------------------- /docs/pics/FinancialRealtimeCandlestickSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FinancialRealtimeCandlestickSample.png -------------------------------------------------------------------------------- /docs/pics/FinancialRealtimeFootprintSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FinancialRealtimeFootprintSample.png -------------------------------------------------------------------------------- /docs/pics/FourierSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FourierSample.png -------------------------------------------------------------------------------- /docs/pics/FrequencyFilterSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/FrequencyFilterSample.png -------------------------------------------------------------------------------- /docs/pics/GaussianFitSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/GaussianFitSample.png -------------------------------------------------------------------------------- /docs/pics/GridRendererSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/GridRendererSample.png -------------------------------------------------------------------------------- /docs/pics/Histogram2DimSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/Histogram2DimSample.png -------------------------------------------------------------------------------- /docs/pics/HistogramRendererTests.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/HistogramRendererTests.png -------------------------------------------------------------------------------- /docs/pics/HistogramSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/HistogramSample.png -------------------------------------------------------------------------------- /docs/pics/HistoryDataSetRendererSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/HistoryDataSetRendererSample.png -------------------------------------------------------------------------------- /docs/pics/IIRFilterSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/IIRFilterSample.png -------------------------------------------------------------------------------- /docs/pics/LabelledMarkerSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/LabelledMarkerSample.png -------------------------------------------------------------------------------- /docs/pics/LogAxisSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/LogAxisSample.png -------------------------------------------------------------------------------- /docs/pics/MetaDataRendererSample2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/MetaDataRendererSample2.png -------------------------------------------------------------------------------- /docs/pics/MountainRangeRendererSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/MountainRangeRendererSample.png -------------------------------------------------------------------------------- /docs/pics/MultipleAxesSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/MultipleAxesSample.png -------------------------------------------------------------------------------- /docs/pics/PolarPlotSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/PolarPlotSample.png -------------------------------------------------------------------------------- /docs/pics/RollingBufferSortedTreeSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/RollingBufferSortedTreeSample.png -------------------------------------------------------------------------------- /docs/pics/ScatterAndBubbleRendererSample1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ScatterAndBubbleRendererSample1.png -------------------------------------------------------------------------------- /docs/pics/ScatterAndBubbleRendererSample2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/ScatterAndBubbleRendererSample2.png -------------------------------------------------------------------------------- /docs/pics/SimpleChartSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/SimpleChartSample.png -------------------------------------------------------------------------------- /docs/pics/THPRB028_fig2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/THPRB028_fig2.png -------------------------------------------------------------------------------- /docs/pics/TimeAxisSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/TimeAxisSample.png -------------------------------------------------------------------------------- /docs/pics/WaveletScalogram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/WaveletScalogram.png -------------------------------------------------------------------------------- /docs/pics/chartfx-example1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/chartfx-example1.png -------------------------------------------------------------------------------- /docs/pics/chartfx-performance-test-case.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/chartfx-performance-test-case.png -------------------------------------------------------------------------------- /docs/pics/chartfx-performance1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/chartfx-performance1.png -------------------------------------------------------------------------------- /docs/pics/chartfx-performance1a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/chartfx-performance1a.png -------------------------------------------------------------------------------- /docs/pics/chartfx-performance1b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fair-acc/chart-fx/8878b813e21effdb37f5618cc061c80ad71420a0/docs/pics/chartfx-performance1b.png -------------------------------------------------------------------------------- /setupGitHooks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # git config core.hooksPath $PWD/config/hooks 3 | # safe fall-back for older git versions 4 | ln -s -r ./config/hooks/pre* -t ./.git/hooks/ 5 | --------------------------------------------------------------------------------