#include "xcddraw.h" int highlight_box_size = 4; void PointObject::drawSelected() { XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, x - pix_hoffset - highlight_box_size/2, y - pix_voffset - highlight_box_size/2, highlight_box_size + highlight_box_size, highlight_box_size + highlight_box_size); } void PointObjectList::drawSelected( selectflag_t selectedflag) { assert(selectedflag == SELECT_EDGE_START_POINT || selectedflag == SELECT_EDGE_END_POINT || selectedflag == SELECT_EDGE_INNER_POINT || selectedflag == SELECT_EDGE); if (selectedflag == SELECT_EDGE_START_POINT) { if (this->get_prev() == NULL) elm->drawSelected(); return; } if (selectedflag == SELECT_EDGE_END_POINT) { if (this->get_next() == NULL) elm->drawSelected(); else this->get_next()->drawSelected(selectedflag); return; } if (selectedflag == SELECT_EDGE) { elm->drawSelected(); if (this->get_next()) this->get_next()->drawSelected(selectedflag); } if (selectedflag == SELECT_EDGE_INNER_POINT) { if (this->get_next() && this->get_prev()) { if (elm->get_selected_flag() == SELECT_EDGE_INNER_POINT) { elm->drawSelected(); return; } } if (this->get_next()) this->get_next()->drawSelected(selectedflag); } } void EdgeLabelObject::drawSelected(selectflag_t selectedflag) { assert( selectedflag == SELECT_EDGE_LABEL || selectedflag == SELECT_EDGE); int width = XTextWidth(label_font,this->get_val(),strlen(this->get_val())); //this->get_text_width(); int height = label_font->ascent + label_font->descent; XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x() - pix_hoffset - highlight_box_size, this->get_y() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x() - pix_hoffset - highlight_box_size, this->get_y() - pix_voffset - height - highlight_box_size, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x() - pix_hoffset + width, this->get_y() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x() - pix_hoffset + width, this->get_y() - pix_voffset - height - highlight_box_size, highlight_box_size, highlight_box_size); } void Rectangle::drawSelected(selectflag_t selectedflag) { assert( selectedflag == SELECT_VERTEX_NAME || selectedflag == SELECT_VERTEX); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset - highlight_box_size, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset - highlight_box_size, this->get_y1() + 20 - pix_voffset - highlight_box_size, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset, this->get_y2() - pix_voffset - 40 - highlight_box_size, highlight_box_size, highlight_box_size); } void Circle::drawSelected(selectflag_t selectedflag) { assert( selectedflag == SELECT_VERTEX_NAME || selectedflag == SELECT_VERTEX); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() + 10 - pix_hoffset - highlight_box_size, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() + 10 - pix_hoffset - highlight_box_size, this->get_y1() + 20 - pix_voffset - highlight_box_size, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - 10 - pix_hoffset, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - 10 - pix_hoffset, this->get_y1() + 20 - pix_voffset - highlight_box_size, highlight_box_size, highlight_box_size); } void TRectangle::drawSelected(selectflag_t selectedflag) { assert( selectedflag == SELECT_VERTEX_NAME || selectedflag == SELECT_VERTEX); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset - highlight_box_size, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset - highlight_box_size, this->get_y1() + 20 - pix_voffset - highlight_box_size, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset, this->get_y2() - pix_voffset - 40 - highlight_box_size, highlight_box_size, highlight_box_size); } void ERectangle::drawSelected(selectflag_t selectedflag) { assert( selectedflag == SELECT_VERTEX_NAME || selectedflag == SELECT_VERTEX); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset - highlight_box_size, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset - highlight_box_size, this->get_y1() + 20 - pix_voffset - highlight_box_size, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset, this->get_y2() - pix_voffset - 40 - highlight_box_size, highlight_box_size, highlight_box_size); } void Hexagon::drawSelected(selectflag_t selectedflag) { assert( selectedflag == SELECT_VERTEX_NAME || selectedflag == SELECT_VERTEX); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset - highlight_box_size, this->get_y2() - pix_voffset - 20 - highlight_box_size/2, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset + 15 - highlight_box_size, this->get_y1() + 20 - pix_voffset - highlight_box_size, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset + 15 - highlight_box_size, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset - 15, this->get_y1() - pix_voffset + 20 - highlight_box_size, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset, this->get_y2() - pix_voffset - 20 - highlight_box_size/2, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset - 15, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); } void HexagonRect::drawSelected(selectflag_t selectedflag) { assert( selectedflag == SELECT_VERTEX_NAME || selectedflag == SELECT_VERTEX); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset - highlight_box_size, this->get_y2() - pix_voffset - 20 - highlight_box_size/2, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset + 15 - highlight_box_size, this->get_y1() + 20 - pix_voffset - highlight_box_size, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x1() - pix_hoffset + 15 - highlight_box_size, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset - 15, this->get_y1() - pix_voffset + 20 - highlight_box_size, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset, this->get_y2() - pix_voffset - 20 - highlight_box_size/2, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, this->get_x2() - pix_hoffset - 15, this->get_y2() - pix_voffset, highlight_box_size, highlight_box_size); } void VertexObject::drawSelected(selectflag_t selectedflag) { assert( selectedflag == SELECT_VERTEX_NAME || selectedflag == SELECT_VERTEX); static char pname[1024]; pname[0] = '\0'; if (this->no_parameters()) { assert(this->get_name()); this->get_name()-> get_parameterized_name(parassignstore,pname); pname[strlen(pname) - 2] = '\0'; } else { if (this->get_template_name()) /* template instance */ this->get_template_name()-> get_parameterized_name(parassignstore,pname); else /* template */ this->get_name()-> get_parameterized_name(parassignstore,pname); } int len = strlen(pname); if (len) { int width = XTextWidth(class_font,pname,len); int height = class_font->ascent + class_font->descent; XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, name_x - pix_hoffset - highlight_box_size, name_y - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, name_x - pix_hoffset - highlight_box_size, name_y - pix_voffset - height - highlight_box_size, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, name_x - pix_hoffset + width, name_y - pix_voffset, highlight_box_size, highlight_box_size); XFillRectangle(XtDisplay(draw_area), XtWindow(draw_area), xorgc, name_x - pix_hoffset + width, name_y - pix_voffset - height - highlight_box_size, highlight_box_size, highlight_box_size); } if (selectedflag == SELECT_VERTEX) this->get_box()->drawSelected(selectedflag); } void EdgeObject::drawSelected(selectflag_t selectedflag) { assert(selectedflag == SELECT_EDGE_START_POINT || selectedflag == SELECT_EDGE_END_POINT || selectedflag == SELECT_EDGE_INNER_POINT || selectedflag == SELECT_EDGE); assert(points); points->drawSelected(selectedflag); } void ConstructionEdge::drawSelected(selectflag_t selectedflag) { assert(selectedflag == SELECT_EDGE_START_POINT || selectedflag == SELECT_EDGE_END_POINT || selectedflag == SELECT_EDGE_INNER_POINT || selectedflag == SELECT_EDGE || selectedflag == SELECT_EDGE_LABEL); if (selectedflag == SELECT_EDGE_LABEL) edge_label->drawSelected(selectedflag); else { if (selectedflag == SELECT_EDGE) edge_label->drawSelected(selectedflag); this->get_points()->drawSelected(selectedflag); } } void EdgeObject::unSelect() { assert(points); this->drawSelected(this->get_selected_flag()); if (this->get_selected_flag() == SELECT_EDGE_INNER_POINT) points->unSelect(); this->set_selected_flag(NOT_SELECTED); } void PointObjectList::unSelect() { if (elm->get_selected_flag() == SELECT_EDGE_INNER_POINT) { elm->set_selected_flag(NOT_SELECTED); } else if (this->get_next()) this->get_next()->unSelect(); }