Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef COURSEWORK_H
- #define COURSEWORK_H
- #include <gtk/gtk.h>
- // координаты левого верхнего угла прямоугольника,в котором будет нарисовано дерево
- #define TREEOFFSETX 10
- #define TREEOFFSETY 70
- // координаты левого верхнего угла прямоугольника, в котором будет нарисован массив
- #define LINEOFFSETX 20
- #define LINEOFFSETY 300
- // на сколько вверх и вниз будут выдвигаться элементы массива при обменах
- #define RISE 30
- // сколько должно быть точек в пути при горизонтальном и вертикальном перемещении объекта
- #define VCOUNT 10
- #define HCOUNT 20
- // отступ относительно верха окна для текста о текущем действии
- #define CENTERTEXTOFFSETY 20
- #define CENTERTEXTHEADER "Текущее действие:"
- // на каком расстоянии от текста нужно рисовать тень
- #define SHADOWOFFSET -1
- // настройки для рисования легенды:
- // отступ, на котором будет рисоватся легенда, относительно правого края
- #define LEGENDOFFSETX 5
- // положение легенды относительно верха окна
- #define LEGENDY 60
- // координаты левого верхнего угла прямоугольника, в котором будет рисоваться легенда
- #define LEGENDINNEROFFSETX 10
- #define LEGENDINNEROFFSETY 10
- // ширина легенды
- #define LEGENDWIDTH 290
- // высота, которая отводится под заголовок в легенде
- #define LEGENDHEADERHEIGHT 20
- #define LEGENDHEADER "Легенда"
- // радиус окружности / половина ширины прямоугольника элемента массива и дерева
- #define RAD 14
- // расстояние между элементами в массиве и на последнем уровне дерева
- #define GAP 0
- // количество элементов в массивах
- #define N 26
- // массив будет заполнятся случайными значениями из диапазона 0..MOD-1
- #define MOD 100
- // количество состояний, в которых может находится каждый элемент
- #define STATECNT 9
- // задержки между событиями:
- // между перемещениями элементов
- #define MOVEDELAY 10
- // после отрисовки объектов
- #define REDRAWDELAY 300
- // промежутки между вызовом визуализатора и некоторыми фазами сортировки
- #define SORTDELAY 400
- // ширина и высота окна
- #define WIDTH 800
- #define HEIGHT 360
- typedef struct elpath elpath;
- typedef struct element element;
- typedef struct action action;
- typedef enum elstate elstate;
- typedef enum actiontype actiontype;
- typedef union actionparameter actionparameter;
- // возможные состояния вершин
- enum elstate
- {
- normal,
- inplace,
- inheap,
- processed,
- active,
- activeinplace,
- activeinheap,
- activeproc,
- activeinterval
- };
- // варианты действий для визуализатора: подождать, обменять два элемента, поменять состояние элемента и сменить название фазы сортировки
- enum actiontype
- {
- acsleep,
- acswap,
- acchangestate,
- acchangephase
- };
- // параметры для каждого из действий: сколько ждать, какие элементы менять, какое состояние какому элементу установить и номер фазы
- union actionparameter
- {
- int time;
- struct
- {
- int id1,id2;
- } swap;
- struct
- {
- int id;
- elstate state;
- } chgst;
- int phase;
- };
- // структура, содержащая информацию о номере элемента, который нужно перемещать и по какой траектории двигать его в массиве и в дереве
- struct elpath
- {
- GList *linecurve,*treecurve;
- int elnum;
- };
- // элемент это совокупность точки в дереве и массиве, значения, по которому идёт сортировка и состояния, в котором он находится
- struct element
- {
- GdkPoint linecoord,treecoord;
- int value;
- elstate state;
- };
- // структура, описывающая действия для визуализатора
- struct action
- {
- actiontype type;
- actionparameter param;
- };
- void init_gc();
- void init_sort();
- void init_legend();
- void draw_element(GtkWidget *w,GdkDrawable *d, element *e);
- void draw_text_in_center(gchar * text, GtkWidget *w, GdkDrawable *d, GdkGC *gc, gint xc, gint yc);
- void draw_text_in_center_y(gchar * text, GtkWidget *w, GdkDrawable *d, GdkGC *gc, gint x, gint yc);
- void draw_legend();
- void startmoving(elpath *p1,elpath *p2);
- void swap(int idx1,int idx2);
- void swapvis(int idx1,int idx2);
- void displayphasetxt();
- void genline(GdkPoint s, GdkPoint t,int cnt,GList ** l);
- void insertswap(int idx1,int idx2);
- void insertchangestate(int idx,elstate newstate);
- void insertsleep(int t);
- void insertchangephase(int np);
- void sort(int *array);
- void quicksort(int n,int *a,int offset);
- GdkPoint getlinecoord(int n);
- GdkPoint gettreecoord(int n,int maxh);
- elpath makepath(gint idx,GdkPoint listb,GdkPoint liste, gint dy, gint listc1, gint listc2,gint listc3,GdkPoint treep1,GdkPoint treep2, gint treec);
- gboolean move(elpath* p);
- gboolean expose_event(GtkWidget *w,GdkEvent *e, gpointer data);
- gboolean delete_event(GtkWidget *w,GdkEvent *e, gpointer data);
- gboolean visualize(gpointer data);
- #endif
Advertisement
Add Comment
Please, Sign In to add comment