# Curve demo 1

    import numpy as np
    from qtpy.QtCore import QSize, Qt
    from qtpy.QtGui import QBrush, QFont, QPainter, QPen
    from qtpy.QtWidgets import QFrame

    from qwt import QwtPlotCurve, QwtPlotItem, QwtScaleMap, QwtSymbol
    from qwt.tests import utils

    class CurveDemo1(QFrame):
        def __init__(self, *args):
            QFrame.__init__(self, *args)

            self.xMap = QwtScaleMap()
            self.xMap.setScaleInterval(-0.5, 10.5)
            self.yMap = QwtScaleMap()
            self.yMap.setScaleInterval(-1.1, 1.1)

            # frame style
            self.setFrameStyle(QFrame.Box | QFrame.Raised)
            self.setLineWidth(2)
            self.setMidLineWidth(3)

            # calculate values
            self.x = np.arange(0, 10.0, 10.0 / 27)
            self.y = np.sin(self.x) * np.cos(2 * self.x)

            # make curves with different styles
            self.curves = []
            self.titles = []
            # curve 1
            self.titles.append("Style: Sticks, Symbol: Ellipse")
            curve = QwtPlotCurve()
            curve.setPen(QPen(Qt.red))
            curve.setStyle(QwtPlotCurve.Sticks)
            curve.setSymbol(
                QwtSymbol(QwtSymbol.Ellipse, QBrush(Qt.yellow), QPen(Qt.blue), QSize(5, 5))
            )
            self.curves.append(curve)
            # curve 2
            self.titles.append("Style: Lines, Symbol: None")
            curve = QwtPlotCurve()
            curve.setPen(QPen(Qt.darkBlue))
            curve.setStyle(QwtPlotCurve.Lines)
            self.curves.append(curve)
            # curve 3
            self.titles.append("Style: Lines, Symbol: None, Antialiased")
            curve = QwtPlotCurve()
            curve.setPen(QPen(Qt.darkBlue))
            curve.setStyle(QwtPlotCurve.Lines)
            curve.setRenderHint(QwtPlotItem.RenderAntialiased)
            self.curves.append(curve)
            # curve 4
            self.titles.append("Style: Steps, Symbol: None")
            curve = QwtPlotCurve()
            curve.setPen(QPen(Qt.darkCyan))
            curve.setStyle(QwtPlotCurve.Steps)
            self.curves.append(curve)
            # curve 5
            self.titles.append("Style: NoCurve, Symbol: XCross")
            curve = QwtPlotCurve()
            curve.setStyle(QwtPlotCurve.NoCurve)
            curve.setSymbol(
                QwtSymbol(QwtSymbol.XCross, QBrush(), QPen(Qt.darkMagenta), QSize(5, 5))
            )
            self.curves.append(curve)

            # attach data, using Numeric
            for curve in self.curves:
                curve.setData(self.x, self.y)

        def shiftDown(self, rect, offset):
            rect.translate(0, offset)

        def paintEvent(self, event):
            QFrame.paintEvent(self, event)
            painter = QPainter(self)
            painter.setClipRect(self.contentsRect())
            self.drawContents(painter)

        def drawContents(self, painter):
            # draw curves
            r = self.contentsRect()
            dy = int(r.height() / len(self.curves))
            r.setHeight(dy)
            for curve in self.curves:
                self.xMap.setPaintInterval(r.left(), r.right())
                self.yMap.setPaintInterval(r.top(), r.bottom())
                painter.setRenderHint(
                    QPainter.Antialiasing,
                    curve.testRenderHint(QwtPlotItem.RenderAntialiased),
                )
                curve.draw(painter, self.xMap, self.yMap, r)
                self.shiftDown(r, dy)
            # draw titles
            r = self.contentsRect()
            r.setHeight(dy)
            painter.setFont(QFont("Helvetica", 8))
            painter.setPen(Qt.black)
            for title in self.titles:
                painter.drawText(
                    0,
                    r.top(),
                    r.width(),
                    painter.fontMetrics().height(),
                    Qt.AlignTop | Qt.AlignHCenter,
                    title,
                )
                self.shiftDown(r, dy)

    def test_curvedemo1():
        """Curve demo 1"""
        utils.test_widget(CurveDemo1, size=(300, 600), options=False)

    if __name__ == "__main__":
        test_curvedemo1()