dia r4122 - in trunk: . objects/UML



Author: hans
Date: Sun Oct 12 15:51:43 2008
New Revision: 4122
URL: http://svn.gnome.org/viewvc/dia?rev=4122&view=rev

Log:
2008-10-12  Hans Breuer  <hans breuer org>

	* objects/UML/actor.c objects/UML/class.[ch]
	  objects/UML/class_dialog.c objects/UML/large_package.c
	  objects/UML/note.c objects/UML/object.c
	  objects/UML/small_package.c objects/UML/usecase.c : configurable
	line-width for UML elements, patch from Pablo Gra\~na



Modified:
   trunk/ChangeLog
   trunk/objects/UML/actor.c
   trunk/objects/UML/class.c
   trunk/objects/UML/class.h
   trunk/objects/UML/class_dialog.c
   trunk/objects/UML/large_package.c
   trunk/objects/UML/note.c
   trunk/objects/UML/object.c
   trunk/objects/UML/small_package.c
   trunk/objects/UML/usecase.c

Modified: trunk/objects/UML/actor.c
==============================================================================
--- trunk/objects/UML/actor.c	(original)
+++ trunk/objects/UML/actor.c	Sun Oct 12 15:51:43 2008
@@ -44,6 +44,7 @@
   Text *text;
   TextAttributes attrs;
 
+  real line_width;
   Color line_color;
   Color fill_color;
 };
@@ -116,6 +117,7 @@
 
 static PropDescription actor_props[] = {
   ELEMENT_COMMON_PROPERTIES,
+  PROP_STD_LINE_WIDTH_OPTIONAL,
   PROP_STD_TEXT_FONT,
   PROP_STD_TEXT_HEIGHT,
   PROP_STD_TEXT_COLOUR_OPTIONAL,
@@ -136,6 +138,7 @@
 
 static PropOffset actor_offsets[] = {
   ELEMENT_COMMON_PROPERTIES_OFFSETS,
+  { PROP_STDNAME_LINE_WIDTH, PROP_STDTYPE_LINE_WIDTH, offsetof(Actor, line_width) },
   {"text",PROP_TYPE_TEXT,offsetof(Actor,text)},
   {"text_font",PROP_TYPE_FONT,offsetof(Actor,attrs.font)},
   {PROP_STDNAME_TEXT_HEIGHT,PROP_STDTYPE_TEXT_HEIGHT,offsetof(Actor,attrs.height)},
@@ -232,7 +235,7 @@
   actor_height = elem->height - actor->text->height;
   
   renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
-  renderer_ops->set_linewidth(renderer, ACTOR_LINEWIDTH);
+  renderer_ops->set_linewidth(renderer, actor->line_width);
   renderer_ops->set_linestyle(renderer, LINESTYLE_SOLID);
 
   r = ACTOR_HEAD(actor_height);
@@ -344,6 +347,7 @@
   elem->width = ACTOR_WIDTH;
   elem->height = ACTOR_HEIGHT;
 
+  actor->line_width = attributes_get_default_linewidth();
   actor->line_color = attributes_get_foreground();
   actor->fill_color = attributes_get_background();
 
@@ -366,7 +370,7 @@
     actor->connections[i].connected = NULL;
   }
   actor->connections[8].flags = CP_FLAGS_MAIN;
-  elem->extra_spacing.border_trans = ACTOR_LINEWIDTH/2.0;
+  elem->extra_spacing.border_trans = actor->line_width/2.0;
   actor_update_data(actor);
 
   for (i=0;i<8;i++) {
@@ -389,8 +393,17 @@
 static DiaObject *
 actor_load(ObjectNode obj_node, int version, const char *filename)
 {
-  return object_load_using_properties(&actor_type,
-                                      obj_node,version,filename);
+  DiaObject *obj = object_load_using_properties(&actor_type,
+                                                obj_node,version,filename);
+  AttributeNode attr;
+  /* For compatibility with previous dia files. If no line_width, use
+   * ACTOR_LINEWIDTH, that was the previous line width.
+   */
+  attr = object_find_attribute(obj_node, "line_width");
+  if (attr == NULL)
+    ((Actor*)obj)->line_width = ACTOR_LINEWIDTH;
+
+  return obj;
 }
 
 

Modified: trunk/objects/UML/class.c
==============================================================================
--- trunk/objects/UML/class.c	(original)
+++ trunk/objects/UML/class.c	Sun Oct 12 15:51:43 2008
@@ -130,6 +130,7 @@
 /** Properties of UMLClass */
 static PropDescription umlclass_props[] = {
   ELEMENT_COMMON_PROPERTIES,
+  PROP_STD_LINE_WIDTH_OPTIONAL,
   /* can't use PROP_STD_TEXT_COLOUR_OPTIONAL cause it has PROP_FLAG_DONT_SAVE. It is designed to fill the Text object - not some subset */
   PROP_STD_TEXT_COLOUR_OPTIONS(PROP_FLAG_VISIBLE|PROP_FLAG_STANDARD|PROP_FLAG_OPTIONAL),
   PROP_STD_LINE_COLOUR_OPTIONAL,
@@ -249,6 +250,7 @@
 static PropOffset umlclass_offsets[] = {
   ELEMENT_COMMON_PROPERTIES_OFFSETS,
 
+  { PROP_STDNAME_LINE_WIDTH, PROP_STDTYPE_LINE_WIDTH, offsetof(UMLClass, line_width) },
   { "text_colour", PROP_TYPE_COLOUR, offsetof(UMLClass, text_color) },
   { "line_colour", PROP_TYPE_COLOUR, offsetof(UMLClass, line_color) },
   { "fill_colour", PROP_TYPE_COLOUR, offsetof(UMLClass, fill_color) },
@@ -818,7 +820,7 @@
 
   if (!umlclass->suppress_attributes) {
     gint i = 0;
-    StartPoint.x += (UMLCLASS_BORDER/2.0 + 0.1);
+    StartPoint.x += (umlclass->line_width/2.0 + 0.1);
     StartPoint.y += 0.1;
 
     list = umlclass->attributes;
@@ -843,7 +845,7 @@
 
       if (attr->class_scope) {
         uml_underline_text(renderer, StartPoint, font, font_height, attstr, line_color, 
-                        UMLCLASS_BORDER, UMLCLASS_UNDERLINEWIDTH );
+                        umlclass->line_width, UMLCLASS_UNDERLINEWIDTH );
       }
 
       if (umlclass->visible_comments && attr->comment != NULL && attr->comment[0] != '\0') {
@@ -911,7 +913,7 @@
     int wrap_pos, last_wrap_pos, ident, wrapping_needed;
     int part_opstr_len = 0, part_opstr_need = 0;
 
-    StartPoint.x += (UMLCLASS_BORDER/2.0 + 0.1);
+    StartPoint.x += (umlclass->line_width/2.0 + 0.1);
     StartPoint.y += 0.1;
 
     list = umlclass->operations;
@@ -982,7 +984,7 @@
           renderer_ops->draw_string(renderer, part_opstr, &StartPoint, ALIGN_LEFT, text_color);
 	  if (op->class_scope) {
 	    uml_underline_text(renderer, StartPoint, font, font_height, part_opstr, line_color, 
-			       UMLCLASS_BORDER, UMLCLASS_UNDERLINEWIDTH );
+			       umlclass->line_width, UMLCLASS_UNDERLINEWIDTH );
 	  }
           last_wrap_pos = wrap_pos;
           wrapsublist = g_list_next( wrapsublist);
@@ -994,7 +996,7 @@
         renderer_ops->draw_string(renderer, opstr, &StartPoint, ALIGN_LEFT, text_color);
 	if (op->class_scope) {
 	  uml_underline_text(renderer, StartPoint, font, font_height, opstr, line_color, 
-			     UMLCLASS_BORDER, UMLCLASS_UNDERLINEWIDTH );
+			     umlclass->line_width, UMLCLASS_UNDERLINEWIDTH );
 	}
       }
 
@@ -1107,7 +1109,7 @@
   assert(renderer != NULL);
 
   renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
-  renderer_ops->set_linewidth(renderer, UMLCLASS_BORDER);
+  renderer_ops->set_linewidth(renderer, umlclass->line_width);
   renderer_ops->set_linestyle(renderer, LINESTYLE_SOLID);
   
   elem = &umlclass->element;
@@ -1785,6 +1787,7 @@
   
   umlclass->stereotype_string = NULL;
   
+  umlclass->line_width = attributes_get_default_linewidth();
   umlclass->text_color = color_black;
   umlclass->line_color = attributes_get_foreground();
   umlclass->fill_color = attributes_get_background();
@@ -1805,7 +1808,7 @@
   umlclass->connections[UMLCLASS_CONNECTIONPOINTS].connected = NULL;
 #endif
 
-  elem->extra_spacing.border_trans = UMLCLASS_BORDER/2.0;
+  elem->extra_spacing.border_trans = umlclass->line_width/2.0;
   umlclass_update_data(umlclass);
 
   for (i=0;i<8;i++) {
@@ -1942,6 +1945,7 @@
   newumlclass->wrap_after_char = umlclass->wrap_after_char;
   newumlclass->comment_line_length = umlclass->comment_line_length;
   newumlclass->comment_tagging = umlclass->comment_tagging;
+  newumlclass->line_width = umlclass->line_width;
   newumlclass->text_color = umlclass->text_color;
   newumlclass->line_color = umlclass->line_color;
   newumlclass->fill_color = umlclass->fill_color;
@@ -2088,6 +2092,8 @@
                    umlclass->comment_line_length);
   data_add_boolean(new_attribute(obj_node, "comment_tagging"),
                    umlclass->comment_tagging);
+  data_add_real(new_attribute(obj_node, "line_width"), 
+		   umlclass->line_width);
   data_add_color(new_attribute(obj_node, "line_color"), 
 		   &umlclass->line_color);
   data_add_color(new_attribute(obj_node, "fill_color"), 
@@ -2221,6 +2227,12 @@
   if (attr_node != NULL)
     umlclass->comment_tagging = data_boolean(attribute_first_data(attr_node));
   
+  /* Loads the line width */
+  umlclass->line_width = UMLCLASS_BORDER;
+  attr_node = object_find_attribute(obj_node, "line_width");
+  if(attr_node != NULL)
+    umlclass->line_width = data_real(attribute_first_data(attr_node));
+
   umlclass->line_color = color_black;
   /* support the old name ... */
   attr_node = object_find_attribute(obj_node, "foreground_color");
@@ -2277,7 +2289,7 @@
 
   umlclass_calculate_data(umlclass);
 
-  elem->extra_spacing.border_trans = UMLCLASS_BORDER/2.0;
+  elem->extra_spacing.border_trans = umlclass->line_width/2.0;
   umlclass_update_data(umlclass);
   
   for (i=0;i<8;i++) {

Modified: trunk/objects/UML/class.h
==============================================================================
--- trunk/objects/UML/class.h	(original)
+++ trunk/objects/UML/class.h	Sun Oct 12 15:51:43 2008
@@ -74,6 +74,7 @@
 
   /* Class info: */
 
+  real line_width;
   real font_height;
   real abstract_font_height;
   real polymorphic_font_height;

Modified: trunk/objects/UML/class_dialog.c
==============================================================================
--- trunk/objects/UML/class_dialog.c	(original)
+++ trunk/objects/UML/class_dialog.c	Sun Oct 12 15:51:43 2008
@@ -79,6 +79,7 @@
   GtkSpinButton *wrap_after_char;  
   GtkSpinButton *comment_line_length;
   GtkToggleButton *comment_tagging;
+  GtkSpinButton *line_width;
   DiaColorSelector *text_color;
   DiaColorSelector *line_color;
   DiaColorSelector *fill_color;
@@ -181,6 +182,7 @@
   int comment_line_length;
   int comment_tagging;
   
+  real line_width;
   Color line_color;
   Color fill_color;
   Color text_color;
@@ -314,6 +316,7 @@
   umlclass->visible_comments = prop_dialog->comments_vis->active;
   umlclass->suppress_attributes = prop_dialog->attr_supp->active;
   umlclass->suppress_operations = prop_dialog->op_supp->active;
+  umlclass->line_width = gtk_spin_button_get_value_as_float(prop_dialog->line_width);
   dia_color_selector_get_color(GTK_WIDGET(prop_dialog->text_color), &umlclass->text_color);
   dia_color_selector_get_color(GTK_WIDGET(prop_dialog->line_color), &umlclass->line_color);
   dia_color_selector_get_color(GTK_WIDGET(prop_dialog->fill_color), &umlclass->fill_color);
@@ -362,6 +365,7 @@
   gtk_toggle_button_set_active(prop_dialog->comments_vis, umlclass->visible_comments);
   gtk_toggle_button_set_active(prop_dialog->attr_supp, umlclass->suppress_attributes);
   gtk_toggle_button_set_active(prop_dialog->op_supp, umlclass->suppress_operations);
+  gtk_spin_button_set_value (prop_dialog->line_width, umlclass->line_width);
   dia_color_selector_set_color(GTK_WIDGET(prop_dialog->text_color), &umlclass->text_color);
   dia_color_selector_set_color(GTK_WIDGET(prop_dialog->line_color), &umlclass->line_color);
   dia_color_selector_set_color(GTK_WIDGET(prop_dialog->fill_color), &umlclass->fill_color);
@@ -534,10 +538,12 @@
   GtkWidget *page_label;
   GtkWidget *label;
   GtkWidget *vbox;
+  GtkWidget *line_width;
   GtkWidget *text_color;
   GtkWidget *fill_color;
   GtkWidget *line_color;
   GtkWidget *table;
+  GtkObject *adj;
 
   prop_dialog = umlclass->properties_dialog;
 
@@ -594,33 +600,42 @@
 
 
 
-  table = gtk_table_new (2, 3, TRUE);
+  table = gtk_table_new (2, 4, TRUE);
   gtk_box_pack_start (GTK_BOX (vbox),
 		      table, FALSE, TRUE, 0);
   /* should probably be refactored too. */
-  label = gtk_label_new(_("Text Color"));
+  label = gtk_label_new(_("Line Width"));
   gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
   gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 2);
+  adj = gtk_adjustment_new(umlclass->line_width, 0.0, G_MAXFLOAT, 0.1, 1.0, 0.0);
+  line_width = gtk_spin_button_new (GTK_ADJUSTMENT(adj), 1.0, 2);
+  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (line_width), TRUE);
+  prop_dialog->line_width = GTK_SPIN_BUTTON(line_width);
+  gtk_table_attach (GTK_TABLE (table), line_width, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 3, 2);
+
+  label = gtk_label_new(_("Text Color"));
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 2);
   text_color = dia_color_selector_new();
   dia_color_selector_set_color(text_color, &umlclass->text_color);
   prop_dialog->text_color = (DiaColorSelector *)text_color;
-  gtk_table_attach (GTK_TABLE (table), text_color, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 3, 2);
+  gtk_table_attach (GTK_TABLE (table), text_color, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 3, 2);
 
   label = gtk_label_new(_("Foreground Color"));
   gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 2);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, 0, 0, 2);
   line_color = dia_color_selector_new();
   dia_color_selector_set_color(line_color, &umlclass->line_color);
   prop_dialog->line_color = (DiaColorSelector *)line_color;
-  gtk_table_attach (GTK_TABLE (table), line_color, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 3, 2);
+  gtk_table_attach (GTK_TABLE (table), line_color, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 3, 2);
   
   label = gtk_label_new(_("Background Color"));
   gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
-  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, 0, 0, 2);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 2);
   fill_color = dia_color_selector_new();
   dia_color_selector_set_color(fill_color, &umlclass->fill_color);
   prop_dialog->fill_color = (DiaColorSelector *)fill_color;
-  gtk_table_attach (GTK_TABLE (table), fill_color, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 3, 2);
+  gtk_table_attach (GTK_TABLE (table), fill_color, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 3, 2);
 
   gtk_widget_show_all (vbox);
   gtk_widget_show (page_label);
@@ -3443,3 +3458,4 @@
   gtk_text_buffer_insert( buffer, &start, text, strlen(text));
 }
 
+

Modified: trunk/objects/UML/large_package.c
==============================================================================
--- trunk/objects/UML/large_package.c	(original)
+++ trunk/objects/UML/large_package.c	Sun Oct 12 15:51:43 2008
@@ -52,6 +52,8 @@
 
   DiaFont *font;
 
+  real line_width;
+
   Color text_color;
   Color line_color;
   Color fill_color;
@@ -60,6 +62,9 @@
   real topheight;
 };
 
+/* The old border width, kept for compatibility with dia files created with
+ * older versions.
+ */
 #define LARGEPACKAGE_BORDERWIDTH 0.1
 #define LARGEPACKAGE_FONTHEIGHT 0.8
 
@@ -123,6 +128,7 @@
 
 static PropDescription largepackage_props[] = {
   ELEMENT_COMMON_PROPERTIES,
+  PROP_STD_LINE_WIDTH_OPTIONAL,
   PROP_STD_LINE_COLOUR_OPTIONAL, 
   PROP_STD_FILL_COLOUR_OPTIONAL, 
   /* can't use PROP_STD_TEXT_COLOUR_OPTIONAL cause it has PROP_FLAG_DONT_SAVE. It is designed to fill the Text object - not some subset */
@@ -145,6 +151,7 @@
 
 static PropOffset largepackage_offsets[] = {
   ELEMENT_COMMON_PROPERTIES_OFFSETS,
+  { PROP_STDNAME_LINE_WIDTH, PROP_STDTYPE_LINE_WIDTH, offsetof(LargePackage, line_width) },
   {"line_colour",PROP_TYPE_COLOUR,offsetof(LargePackage,line_color)},
   {"fill_colour",PROP_TYPE_COLOUR,offsetof(LargePackage,fill_color)},
   {"text_colour",PROP_TYPE_COLOUR,offsetof(LargePackage,text_color)},
@@ -231,7 +238,7 @@
   h = elem->height;
   
   renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
-  renderer_ops->set_linewidth(renderer, LARGEPACKAGE_BORDERWIDTH);
+  renderer_ops->set_linewidth(renderer, pkg->line_width);
   renderer_ops->set_linestyle(renderer, LINESTYLE_SOLID);
 
 
@@ -347,6 +354,7 @@
   elem->width = 4.0;
   elem->height = 4.0;
   
+  pkg->line_width = attributes_get_default_linewidth();
   pkg->text_color = color_black;
   pkg->line_color = attributes_get_foreground();
   pkg->fill_color = attributes_get_background();
@@ -366,7 +374,7 @@
     pkg->connections[i].connected = NULL;
   }
   pkg->connections[8].flags = CP_FLAGS_MAIN;
-  pkg->element.extra_spacing.border_trans = LARGEPACKAGE_BORDERWIDTH/2.0;
+  pkg->element.extra_spacing.border_trans = pkg->line_width/2.0;
   largepackage_update_data(pkg);
 
   *handle1 = NULL;
@@ -388,11 +396,17 @@
 static DiaObject *
 largepackage_load(ObjectNode obj_node, int version, const char *filename)
 {
-  return object_load_using_properties(&largepackage_type,
-                                      obj_node,version,filename);
-}
-
-
+  DiaObject *obj = object_load_using_properties(&largepackage_type,
+                                                obj_node,version,filename);
+  AttributeNode attr;
+  /* For compatibility with previous dia files. If no line_width, use
+   * LARGEPACKAGE_BORDERWIDTH, that was the previous line width.
+   */
+  attr = object_find_attribute(obj_node, "line_width");
+  if (attr == NULL)
+    ((LargePackage*)obj)->line_width = LARGEPACKAGE_BORDERWIDTH;
 
+  return obj;
+}
 
 

Modified: trunk/objects/UML/note.c
==============================================================================
--- trunk/objects/UML/note.c	(original)
+++ trunk/objects/UML/note.c	Sun Oct 12 15:51:43 2008
@@ -45,12 +45,12 @@
   Text *text;
   TextAttributes attrs;
 
+  real line_width;
   Color line_color;
   Color fill_color;
 };
 
 #define NOTE_BORDERWIDTH 0.1
-#define NOTE_CORNERWIDTH 0.05
 #define NOTE_CORNER 0.6
 #define NOTE_MARGIN_X 0.3
 #define NOTE_MARGIN_Y 0.3
@@ -115,6 +115,7 @@
 
 static PropDescription note_props[] = {
   ELEMENT_COMMON_PROPERTIES,
+  PROP_STD_LINE_WIDTH_OPTIONAL,
   PROP_STD_LINE_COLOUR_OPTIONAL, 
   PROP_STD_FILL_COLOUR_OPTIONAL, 
   PROP_STD_TEXT_FONT,
@@ -135,6 +136,7 @@
 
 static PropOffset note_offsets[] = {
   ELEMENT_COMMON_PROPERTIES_OFFSETS,
+  { PROP_STDNAME_LINE_WIDTH, PROP_STDTYPE_LINE_WIDTH, offsetof(Note, line_width)},
   {"line_colour",PROP_TYPE_COLOUR,offsetof(Note,line_color)},
   {"fill_colour",PROP_TYPE_COLOUR,offsetof(Note,fill_color)},
   {"text",PROP_TYPE_TEXT,offsetof(Note,text)},
@@ -221,7 +223,7 @@
   h = elem->height;
   
   renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
-  renderer_ops->set_linewidth(renderer, NOTE_BORDERWIDTH);
+  renderer_ops->set_linewidth(renderer, note->line_width);
   renderer_ops->set_linestyle(renderer, LINESTYLE_SOLID);
 
   poly[0].x = x;
@@ -247,7 +249,7 @@
   poly[1].y = y + NOTE_CORNER;
   poly[2] = poly[2];
  
-  renderer_ops->set_linewidth(renderer, NOTE_CORNERWIDTH);
+  renderer_ops->set_linewidth(renderer, note->line_width / 2);
   renderer_ops->draw_polyline(renderer, 
 			   poly, 3,
 			   &note->line_color);
@@ -269,8 +271,8 @@
     note->text->height*note->text->numlines + NOTE_MARGIN_Y + NOTE_CORNER;
 
   p = elem->corner;
-  p.x += NOTE_BORDERWIDTH/2.0 + NOTE_MARGIN_X;
-  p.y += NOTE_BORDERWIDTH/2.0 + NOTE_CORNER + note->text->ascent;
+  p.x += note->line_width/2.0 + NOTE_MARGIN_X;
+  p.y += note->line_width/2.0 + NOTE_CORNER + note->text->ascent;
   text_set_position(note->text, &p);
 
   /* Update connections: */
@@ -305,13 +307,14 @@
 
   elem->corner = *startpoint;
 
+  note->line_width = attributes_get_default_linewidth();
   note->line_color = attributes_get_foreground();
   note->fill_color = attributes_get_background();
 
   font = dia_font_new_from_style (DIA_FONT_MONOSPACE, 0.8);
   p = *startpoint;
-  p.x += NOTE_BORDERWIDTH/2.0 + NOTE_MARGIN_X;
-  p.y += NOTE_BORDERWIDTH/2.0 + NOTE_CORNER + dia_font_ascent("A",font, 0.8);
+  p.x += note->line_width/2.0 + NOTE_MARGIN_X;
+  p.y += note->line_width/2.0 + NOTE_CORNER + dia_font_ascent("A",font, 0.8);
   
   note->text = new_text("", font, 0.8, &p, &color_black, ALIGN_LEFT);
   dia_font_unref(font);
@@ -327,7 +330,7 @@
   }
   note->connections[NUM_CONNECTIONS-1].flags = CP_FLAGS_MAIN;
 
-  elem->extra_spacing.border_trans = NOTE_BORDERWIDTH/2.0;
+  elem->extra_spacing.border_trans = note->line_width/2.0;
   note_update_data(note);
 
   for (i=0;i<8;i++) {
@@ -350,11 +353,17 @@
 static DiaObject *
 note_load(ObjectNode obj_node, int version, const char *filename)
 {
-  return object_load_using_properties(&note_type,
-                                      obj_node,version,filename);
-}
-
-
+  DiaObject * obj = object_load_using_properties(&note_type,
+                                                 obj_node,version,filename);
+  AttributeNode attr;
+  /* For compatibility with previous dia files. If no line_width, use
+   * NOTE_BORDERWIDTH, that was the previous line width.
+   */
+  attr = object_find_attribute(obj_node, "line_width");
+  if (attr == NULL)
+    ((Note*)obj)->line_width = NOTE_BORDERWIDTH;
 
+  return obj;
+}
 
 

Modified: trunk/objects/UML/object.c
==============================================================================
--- trunk/objects/UML/object.c	(original)
+++ trunk/objects/UML/object.c	Sun Oct 12 15:51:43 2008
@@ -52,6 +52,7 @@
   char *exstate;  /* used for explicit state */
   Text *attributes;
 
+  real line_width;
   Color text_color;
   Color line_color;
   Color fill_color;
@@ -68,7 +69,6 @@
 
 #define OBJET_BORDERWIDTH 0.1
 #define OBJET_ACTIVEBORDERWIDTH 0.2
-#define OBJET_LINEWIDTH 0.05
 #define OBJET_MARGIN_X 0.5
 #define OBJET_MARGIN_Y 0.5
 #define OBJET_MARGIN_M 0.4
@@ -143,6 +143,7 @@
 
 static PropDescription objet_props[] = {
   ELEMENT_COMMON_PROPERTIES,
+  PROP_STD_LINE_WIDTH_OPTIONAL,
   /* can't use PROP_STD_TEXT_COLOUR_OPTIONAL cause it has PROP_FLAG_DONT_SAVE. It is designed to fill the Text object - not some subset */
   PROP_STD_TEXT_COLOUR_OPTIONS(PROP_FLAG_VISIBLE|PROP_FLAG_STANDARD|PROP_FLAG_OPTIONAL),
   PROP_STD_LINE_COLOUR_OPTIONAL, 
@@ -175,6 +176,7 @@
 
 static PropOffset objet_offsets[] = {
   ELEMENT_COMMON_PROPERTIES_OFFSETS,
+  { PROP_STDNAME_LINE_WIDTH, PROP_STDTYPE_LINE_WIDTH, offsetof(Objet, line_width) },
   { "text_colour",PROP_TYPE_COLOUR,offsetof(Objet, text_color) },
   { "line_colour",PROP_TYPE_COLOUR,offsetof(Objet, line_color) },
   { "fill_colour",PROP_TYPE_COLOUR,offsetof(Objet, fill_color) },
@@ -269,7 +271,7 @@
   w = elem->width;
   h = elem->height;
   
-  bw = (ob->is_active) ? OBJET_ACTIVEBORDERWIDTH: OBJET_BORDERWIDTH;
+  bw = (ob->is_active) ? OBJET_ACTIVEBORDERWIDTH: ob->line_width;
 
   renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
   renderer_ops->set_linewidth(renderer, bw);
@@ -327,7 +329,7 @@
   p2.x = p1.x + text_get_max_width(ob->text);
   p2.y = p1.y;
   
-  renderer_ops->set_linewidth(renderer, OBJET_LINEWIDTH);
+  renderer_ops->set_linewidth(renderer, ob->line_width/2);
     
   for (i=0; i<ob->text->numlines; i++) { 
     p1.x = x + (w - text_get_line_width(ob->text, i))/2;
@@ -451,6 +453,7 @@
   elem->corner = *startpoint;
 
   ob->text_color = color_black;
+  ob->line_width = attributes_get_default_linewidth();
   ob->line_color = attributes_get_foreground();
   ob->fill_color = attributes_get_background();
 
@@ -481,7 +484,7 @@
     ob->connections[i].connected = NULL;
   }
   ob->connections[8].flags = CP_FLAGS_MAIN;
-  elem->extra_spacing.border_trans = OBJET_BORDERWIDTH/2.0;
+  elem->extra_spacing.border_trans = ob->line_width/2.0;
   objet_update_data(ob);
 
   for (i=0;i<8;i++) {
@@ -511,8 +514,17 @@
 static DiaObject *
 objet_load(ObjectNode obj_node, int version, const char *filename)
 {
-  return object_load_using_properties(&objet_type,
-                                      obj_node,version,filename);
+  DiaObject * obj = object_load_using_properties(&objet_type,
+                                                 obj_node,version,filename);
+  AttributeNode attr;
+  /* For compatibility with previous dia files. If no line_width, use
+   * OBJET_BORDERWIDTH, that was the previous line width.
+   */
+  attr = object_find_attribute(obj_node, "line_width");
+  if (attr == NULL)
+    ((Objet*)obj)->line_width = OBJET_BORDERWIDTH;
+
+  return obj;
 }
 
 

Modified: trunk/objects/UML/small_package.c
==============================================================================
--- trunk/objects/UML/small_package.c	(original)
+++ trunk/objects/UML/small_package.c	Sun Oct 12 15:51:43 2008
@@ -50,10 +50,14 @@
   char *st_stereotype;
   TextAttributes attrs;
 
+  real line_width;
   Color line_color;
   Color fill_color;
 };
 
+/* The old border width, kept for compatibility with dia files created with
+ * older versions.
+ */
 #define SMALLPACKAGE_BORDERWIDTH 0.1
 #define SMALLPACKAGE_TOPHEIGHT 0.9
 #define SMALLPACKAGE_TOPWIDTH 1.5
@@ -120,6 +124,7 @@
 
 static PropDescription smallpackage_props[] = {
   ELEMENT_COMMON_PROPERTIES,
+  PROP_STD_LINE_WIDTH_OPTIONAL,
   PROP_STD_LINE_COLOUR_OPTIONAL, 
   PROP_STD_FILL_COLOUR_OPTIONAL, 
   { "stereotype", PROP_TYPE_STRING, PROP_FLAG_VISIBLE,
@@ -142,6 +147,7 @@
 
 static PropOffset smallpackage_offsets[] = {
   ELEMENT_COMMON_PROPERTIES_OFFSETS,
+  { PROP_STDNAME_LINE_WIDTH, PROP_STDTYPE_LINE_WIDTH, offsetof(SmallPackage, line_width) },
   {"line_colour", PROP_TYPE_COLOUR, offsetof(SmallPackage, line_color) },
   {"fill_colour", PROP_TYPE_COLOUR, offsetof(SmallPackage, fill_color) },
   {"stereotype", PROP_TYPE_STRING, offsetof(SmallPackage , stereotype) },
@@ -240,10 +246,9 @@
   h = elem->height;
   
   renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
-  renderer_ops->set_linewidth(renderer, SMALLPACKAGE_BORDERWIDTH);
+  renderer_ops->set_linewidth(renderer, pkg->line_width);
   renderer_ops->set_linestyle(renderer, LINESTYLE_SOLID);
 
-
   p1.x = x; p1.y = y;
   p2.x = x+w; p2.y = y+h;
 
@@ -364,7 +369,9 @@
     pkg->connections[i].connected = NULL;
   }
   pkg->connections[8].flags = CP_FLAGS_MAIN;
-  elem->extra_spacing.border_trans = SMALLPACKAGE_BORDERWIDTH/2.0;
+  pkg->line_width = attributes_get_default_linewidth();
+
+  elem->extra_spacing.border_trans = pkg->line_width/2.0;
 
   pkg->line_color = attributes_get_foreground();
   pkg->fill_color = attributes_get_background();
@@ -396,12 +403,17 @@
 static DiaObject *
 smallpackage_load(ObjectNode obj_node, int version, const char *filename)
 {
-  return object_load_using_properties(&smallpackage_type,
-                                      obj_node,version,filename);
-}
-
-
-
+  DiaObject *obj = object_load_using_properties(&smallpackage_type,
+                                                obj_node,version,filename);
+  AttributeNode attr;
+  /* For compatibility with previous dia files. If no line_width, use
+   * SMALLPACKAGE_BORDERWIDTH, that was the previous line width.
+   */
+  attr = object_find_attribute(obj_node, "line_width");
+  if (attr == NULL)
+    ((SmallPackage*)obj)->line_width = SMALLPACKAGE_BORDERWIDTH;
 
+  return obj;
+}
 
 

Modified: trunk/objects/UML/usecase.c
==============================================================================
--- trunk/objects/UML/usecase.c	(original)
+++ trunk/objects/UML/usecase.c	Sun Oct 12 15:51:43 2008
@@ -50,6 +50,7 @@
   int collaboration;
   TextAttributes attrs;
 
+  real line_width;
   Color line_color;
   Color fill_color;
 };
@@ -128,6 +129,7 @@
 
 static PropDescription usecase_props[] = {
   ELEMENT_COMMON_PROPERTIES,
+  PROP_STD_LINE_WIDTH_OPTIONAL,
   PROP_STD_LINE_COLOUR_OPTIONAL, 
   PROP_STD_FILL_COLOUR_OPTIONAL, 
   { "text_outside", PROP_TYPE_BOOL, PROP_FLAG_VISIBLE,
@@ -153,6 +155,7 @@
 
 static PropOffset usecase_offsets[] = {
   ELEMENT_COMMON_PROPERTIES_OFFSETS,
+  {PROP_STDNAME_LINE_WIDTH, PROP_STDTYPE_LINE_WIDTH, offsetof(Usecase, line_width)},
   {"line_colour", PROP_TYPE_COLOUR, offsetof(Usecase, line_color) },
   {"fill_colour", PROP_TYPE_COLOUR, offsetof(Usecase, fill_color) },
   {"text_outside", PROP_TYPE_BOOL, offsetof(Usecase, text_outside) },
@@ -263,7 +266,7 @@
 
 
   renderer_ops->set_fillstyle(renderer, FILLSTYLE_SOLID);
-  renderer_ops->set_linewidth(renderer, USECASE_LINEWIDTH);
+  renderer_ops->set_linewidth(renderer, usecase->line_width);
 
   if (usecase->collaboration)
 	  renderer_ops->set_linestyle(renderer, LINESTYLE_DASHED);
@@ -322,7 +325,7 @@
 
   elem->width = r.x;
   elem->height = r.y;
-  extra->border_trans = USECASE_LINEWIDTH / 2.0;
+  extra->border_trans = usecase->line_width / 2.0;
 
   if (usecase->text_outside) { 
 	  elem->width = MAX(elem->width, w);
@@ -417,6 +420,7 @@
   elem->width = USECASE_WIDTH;
   elem->height = USECASE_HEIGHT;
 
+  usecase->line_width = attributes_get_default_linewidth();
   usecase->line_color = attributes_get_foreground();
   usecase->fill_color = attributes_get_background();
 
@@ -461,9 +465,19 @@
 static DiaObject *
 usecase_load(ObjectNode obj_node, int version, const char *filename)
 {
-  return object_load_using_properties(&usecase_type,
-                                      obj_node,version,filename);
+  DiaObject *obj = object_load_using_properties(&usecase_type,
+                                                obj_node,version,filename);
+  AttributeNode attr;
+  /* For compatibility with previous dia files. If no line_width, use
+   * USECASE_LINEWIDTH, that was the previous line width.
+   */
+  attr = object_find_attribute(obj_node, "line_width");
+  if (attr == NULL)
+    ((Usecase*)obj)->line_width = USECASE_LINEWIDTH;
+
+  return obj;
 }
 
 
 
+



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]