// SPDX-FileCopyrightText: 2003 Dominique Devriese <devriese@kde.org>
// SPDX-FileCopyrightText: 1999-2003 Ilya Baran <ibaran@mit.edu>
// SPDX-License-Identifier: GPL-2.0-or-later


// this is a collection of definitions we need from KSeg.  It includes
// code from defs.H and G_drawstyle.H.  Thanks to Ilya Baran for
// making KSeg GPL, so there are no license probs or whatever..
// Send comments and/or bug reports to: ibaran@mit.edu

#ifndef DEFS_H
#define DEFS_H

#include <stdio.h>
#include <stdlib.h>
#include <qglobal.h>

using namespace std;

#define DRAW_MAX 5000 // maximum coordinate.  assumes you have a screen resolution less than this.

#define BIG (1e+37)
#define SMALL (1e-10)

inline int ROUND(double x) { return ((int)(x + 0.5)); }
inline int SIGN(double x) { return (x < 0) ? -1 : 1; }
inline int INTRAND(int a, int b) { return qMin(a, b) + rand() % abs(a - b); }
#define SQR(x) ((x) * (x))
#define CUBE(x) ((x) * (x) * (x))
#define QUAD(x) (((x) * (x)) * ((x) * (x)))

enum G_Type
{
  G_POINT = 1,
  G_SEGMENT = 2,
  G_RAY = 4,
  G_LINE = 8,
  G_CIRCLE = 16,
  G_ARC = 32,
  G_POLYGON = 64,
  G_CIRCLEINTERIOR = 128,
  G_ARCSECTOR = 256,
  G_ARCSEGMENT = 512,
  //non-primitive geometric types now:
  G_LOCUS = 1024,
  G_MEASURE = 2048,
  G_CALCULATE = 4096,
  G_ANNOTATION = 8192,
  //fake type for scripting:
  G_LOOP = 16384,
  //compound types now:
  G_STRAIGHT = G_SEGMENT | G_LINE | G_RAY,
  G_CURVE = G_STRAIGHT | G_ARC | G_CIRCLE,
  G_FILLED = G_POLYGON | G_CIRCLEINTERIOR | G_ARCSECTOR | G_ARCSEGMENT,
  G_GEOMETRIC = G_POINT | G_CURVE | G_FILLED | G_LOCUS,
  G_VALUE = G_MEASURE | G_CALCULATE,
  G_TEXT = G_VALUE | G_ANNOTATION,
  G_ANY = G_GEOMETRIC | G_TEXT | G_LOOP
};

enum G_AnyType
{
  G_TRANSLATED,
  G_ROTATED,
  G_SCALED,
  G_REFLECTED
};

#define IS_TRANSFORM(x) ((x) == G_TRANSLATED || (x) == G_ROTATED || (x) == G_SCALED || (x) == G_REFLECTED)

enum G_PointType
{
  G_FREE_POINT = G_REFLECTED + 1,
  G_CONSTRAINED_POINT,
  G_INTERSECTION_POINT,
  G_INTERSECTION2_POINT,
  G_MID_POINT
};

enum G_SegmentType
{
  G_ENDPOINTS_SEGMENT = G_REFLECTED + 1
};

enum G_RayType
{
  G_TWOPOINTS_RAY = G_REFLECTED + 1,
  G_BISECTOR_RAY
};

enum G_LineType
{
  G_TWOPOINTS_LINE = G_REFLECTED + 1,
  G_PARALLEL_LINE,
  G_PERPENDICULAR_LINE
};

enum G_CircleType
{
  G_CENTERPOINT_CIRCLE = G_REFLECTED + 1,
  G_CENTERRADIUS_CIRCLE
};

enum G_ArcType
{
  G_THREEPOINTS_ARC = G_REFLECTED + 1
};

enum G_FilledType
{
  G_DEFAULT_FILLED = G_REFLECTED + 1
};

enum G_LocusType
{
  G_OBJECT_LOCUS = G_REFLECTED + 1
};

enum G_MeasureType
{
  G_DISTANCE_MEASURE,
  G_LENGTH_MEASURE,
  G_RADIUS_MEASURE,
  G_ANGLE_MEASURE,
  G_RATIO_MEASURE,
  G_SLOPE_MEASURE,
  G_AREA_MEASURE
};

enum G_CalculateType
{
  G_REGULAR_CALCULATE
};


enum MenuIDs
{
  ID_NEW_SEGMENT = 1,
  ID_NEW_MIDPOINT,
  ID_NEW_LINE,
  ID_NEW_PERPENDICULAR,
  ID_NEW_RAY,
  ID_NEW_BISECTOR,
  ID_NEW_CIRCLE,
  ID_NEW_INTERSECTION,
  ID_NEW_ARC,
  ID_NEW_LOCUS,
  ID_NEW_ARCSECTOR,
  ID_NEW_ARCSEGMENT,
  ID_NEW_CIRCLEINTERIOR,
  ID_NEW_POLYGON,

  ID_EDIT_UNDO,
  ID_EDIT_REDO,
  ID_EDIT_DELETE,
  ID_EDIT_TOGGLELABELS,
  ID_EDIT_SHOWLABELS,
  ID_EDIT_HIDELABELS,
  ID_EDIT_CHANGELABEL,
  ID_EDIT_HIDE,
  ID_EDIT_SHOWHIDDEN,
  ID_EDIT_COLOR,
  ID_EDIT_POINTSTYLE,
  ID_EDIT_LINESTYLE,
  ID_EDIT_FONT,
  ID_EDIT_CHANGE_NUMBER_OF_SAMPLES,
  ID_EDIT_PREFERENCES,

  ID_EDIT_COLOR_BLACK,
  ID_EDIT_COLOR_GRAY,
  ID_EDIT_COLOR_RED,
  ID_EDIT_COLOR_GREEN,
  ID_EDIT_COLOR_BLUE,
  ID_EDIT_COLOR_YELLOW,
  ID_EDIT_COLOR_PURPLE,
  ID_EDIT_COLOR_CYAN,
  ID_EDIT_COLOR_OTHER,

  ID_EDIT_POINTSTYLE_LARGECIRCLE,
  ID_EDIT_POINTSTYLE_MEDIUMCIRCLE,
  ID_EDIT_POINTSTYLE_SMALLCIRCLE,

  ID_EDIT_LINESTYLE_SOLID,
  ID_EDIT_LINESTYLE_DASHED,
  ID_EDIT_LINESTYLE_DOTTED,
  ID_EDIT_LINESTYLE_THIN,
  ID_EDIT_LINESTYLE_NORMAL,
  ID_EDIT_LINESTYLE_THICK,

  ID_EDIT_FONT_10,
  ID_EDIT_FONT_12,
  ID_EDIT_FONT_14,
  ID_EDIT_FONT_20,
  ID_EDIT_FONT_30,
  ID_EDIT_FONT_FONT,

  ID_MEASURE_DISTANCE,
  ID_MEASURE_LENGTH,
  ID_MEASURE_RADIUS,
  ID_MEASURE_ANGLE,
  ID_MEASURE_RATIO,
  ID_MEASURE_SLOPE,
  ID_MEASURE_AREA,
  ID_MEASURE_CALCULATE,

  ID_TRANSFORM_CHOOSE_VECTOR,
  ID_TRANSFORM_CHOOSE_MIRROR,
  ID_TRANSFORM_CHOOSE_CENTER,
  ID_TRANSFORM_CHOOSE_RATIO,
  ID_TRANSFORM_CHOOSE_ANGLE,
  ID_TRANSFORM_CLEAR_CHOSEN,
  ID_TRANSFORM_TRANSLATE,
  ID_TRANSFORM_ROTATE,
  ID_TRANSFORM_REFLECT,
  ID_TRANSFORM_SCALE,

  ID_CONSTRUCTION_MAKE_NORMAL,
  ID_CONSTRUCTION_MAKE_GIVEN,
  ID_CONSTRUCTION_MAKE_FINAL,
  ID_CONSTRUCTION_MAKE_INITIAL,
  ID_CONSTRUCTION_RECURSE,

  ID_PLAY_QUICKPLAY,

  ID_QUICKPLAY_SET_DIRECTORY,

  ID_FILE_RECENTLIST_START //should be the last entry
};

#endif //DEFS_H


/*
 *  KSeg
 *  SPDX-FileCopyrightText: 1999-2003 Ilya Baran <ibaran@mit.edu>
 *
 *  SPDX-License-Identifier: GPL-2.0-or-later
 *
 *  Send comments and/or bug reports to:
 *                 ibaran@mit.edu
 */


#ifndef G_DRAWSTYLE_H
#define G_DRAWSTYLE_H

enum PointStyle
{
  ANY = 0,
  SMALL_CIRCLE,
  MEDIUM_CIRCLE,
  LARGE_CIRCLE
};

#endif //G_DRAWSTYLE_H
