--- class_dialog.c.old	Mon Jan 28 00:01:56 2002
+++ class_dialog.c	Sun Jan 27 23:09:02 2002
@@ -1114,6 +1114,7 @@
   gtk_widget_set_sensitive(GTK_WIDGET(prop_dialog->op_visible), val);
   gtk_widget_set_sensitive(GTK_WIDGET(prop_dialog->op_class_scope), val);
   gtk_widget_set_sensitive(GTK_WIDGET(prop_dialog->op_abstract), val);
+  gtk_widget_set_sensitive(GTK_WIDGET(prop_dialog->op_constant), val);
 
   gtk_widget_set_sensitive(prop_dialog->param_new_button, val);
   gtk_widget_set_sensitive(prop_dialog->param_delete_button, val);
@@ -1139,6 +1140,7 @@
 			      (gint)op->visibility);
   gtk_toggle_button_set_active(prop_dialog->op_class_scope, op->class_scope);
   gtk_toggle_button_set_active(prop_dialog->op_abstract, op->abstract);
+  gtk_toggle_button_set_active(prop_dialog->op_constant, op->constant);
 
   gtk_list_clear_items(prop_dialog->parameters_list, 0, -1);
   prop_dialog->current_param = NULL;
@@ -1166,6 +1168,7 @@
   gtk_entry_set_text(prop_dialog->op_type, "");
   gtk_toggle_button_set_active(prop_dialog->op_class_scope, FALSE);
   gtk_toggle_button_set_active(prop_dialog->op_abstract, FALSE);
+  gtk_toggle_button_set_active(prop_dialog->op_constant, FALSE);
 
   gtk_list_clear_items(prop_dialog->parameters_list, 0, -1);
   prop_dialog->current_param = NULL;
@@ -1194,6 +1197,7 @@
     
   op->class_scope = prop_dialog->op_class_scope->active;
   op->abstract = prop_dialog->op_abstract->active;
+  op->constant = prop_dialog->op_constant->active;
 }
 
 static void
@@ -1526,6 +1530,7 @@
   GtkWidget *vbox3;
   GtkWidget *entry;
   GtkWidget *checkbox;
+  GtkWidget *checkbox2;
   GtkWidget *scrolled_win;
   GtkWidget *button;
   GtkWidget *list;
@@ -1688,7 +1693,12 @@
   hbox2 = gtk_hbox_new(FALSE, 5);
   checkbox = gtk_check_button_new_with_label(_("abstract"));
   prop_dialog->op_abstract = GTK_TOGGLE_BUTTON(checkbox);
+
+  checkbox2 = gtk_check_button_new_with_label(_("constant"));
+  prop_dialog->op_constant = GTK_TOGGLE_BUTTON(checkbox2);
+
   gtk_box_pack_start (GTK_BOX (hbox2), checkbox, TRUE, TRUE, 0);
+  gtk_box_pack_start (GTK_BOX (hbox2), checkbox2, TRUE, TRUE, 0);
   gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, TRUE, 0);
 
   
--- olclass.h	Fri Feb  2 15:44:22 2001
+++ class.h	Sat Jan 26 20:08:00 2002
@@ -118,7 +118,8 @@
   GtkOptionMenu *op_visible_button;
   GtkToggleButton *op_class_scope;
   GtkToggleButton *op_abstract;
-  
+  GtkToggleButton *op_constant;  
+
   GtkList *parameters_list;
   GtkListItem *current_param;
   GtkEntry *param_name;
--- oluml.c	Sat Jan 26 19:50:34 2002
+++ uml.c	Sun Jan 27 23:53:24 2002
@@ -154,6 +154,8 @@
   if (operation->type != NULL) {
     len += 2 + strlen(operation->type);
   }
+  if(operation->constant != 0)
+    len += 6;
   
   /* generate string: */
   str = g_malloc(sizeof(char)*(len+1));
@@ -191,8 +193,11 @@
     strcat(str, operation->type);
   }
 
+  if (operation->constant != 0) {
+    strcat(str, " const");
+  }
+
   assert(strlen(str)==len);
-  
   return str;
 }
 
@@ -292,6 +297,7 @@
   newop->visibility = op->visibility;
   newop->abstract = op->abstract;
   newop->class_scope = op->class_scope;
+  newop->constant = op->constant;
 
   newop->left_connection = op->left_connection;
   newop->right_connection = op->right_connection;
@@ -411,6 +417,8 @@
   op->type = NULL;
   op->visibility = UML_PUBLIC;
   op->abstract = FALSE;
+  op->constant = FALSE;
+
   op->class_scope = FALSE;
   op->parameters = NULL;
 
@@ -485,6 +493,8 @@
 		op->visibility);
   data_add_boolean(composite_add_attribute(composite, "abstract"),
 		   op->abstract);
+  data_add_boolean(composite_add_attribute(composite, "constant"),
+		   op->constant);
   data_add_boolean(composite_add_attribute(composite, "class_scope"),
 		   op->class_scope);
   
@@ -597,6 +607,11 @@
   if (attr_node != NULL)
     op->abstract =  data_boolean( attribute_first_data(attr_node) );
   
+  op->constant = FALSE;
+  attr_node = composite_find_attribute(composite, "constant");
+  if (attr_node != NULL)
+    op->constant =  data_boolean( attribute_first_data(attr_node) );
+
   op->class_scope = FALSE;
   attr_node = composite_find_attribute(composite, "class_scope");
   if (attr_node != NULL)
--- oluml.h	Sat Jan 26 19:49:38 2002
+++ uml.h	Sat Jan 26 19:49:18 2002
@@ -57,6 +57,7 @@
   char *type; /* Return type, NULL => No return type */
   UMLVisibility visibility;
   int abstract;
+  int constant; /* Do not modify the object */
   int class_scope;
   GList *parameters; /* List of UMLParameter */
 
