Index: InsetMathMacro.C
===================================================================
--- InsetMathMacro.C	(Revision 17273)
+++ InsetMathMacro.C	(Arbeitskopie)
@@ -33,6 +33,43 @@
 using std::vector;
 
 
+auto_ptr<InsetBase> MathMacroArgumentValue::doClone() const 
+{
+  return auto_ptr<InsetBase>(new MathMacroArgumentValue(*this));
+}
+
+
+MathMacroArgumentValue::MathMacroArgumentValue( MathArray *value ) 
+: InsetMathDim(), value_( value )
+{
+}
+
+
+MathMacroArgumentValue::MathMacroArgumentValue( const MathMacroArgumentValue &x )
+: InsetMathDim(), value_(x.value_)
+{
+}
+
+
+bool MathMacroArgumentValue::metrics(MetricsInfo & mi, Dimension & dim) const 
+{
+  value_->metrics(mi, dim);
+  metricsMarkers2(dim);
+	if (dim_ == dim)
+		return false;
+	dim_ = dim;
+	return true;
+}
+
+
+void MathMacroArgumentValue::draw(PainterInfo &pi, int x, int y) const 
+{
+  value_->draw(pi, x, y);
+}
+
+
+
+
 MathMacro::MathMacro(docstring const & name, int numargs)
 	: InsetMathNest(numargs), name_(name)
 {}
@@ -63,24 +100,14 @@
 {
 	if (!MacroTable::globalMacros().has(name())) {
 		mathed_string_dim(mi.base.font, "Unknown: " + name(), dim);
-	} else if (editing(mi.base.bv)) {
-		// FIXME UNICODE
-		asArray(MacroTable::globalMacros().get(name()).def(), tmpl_);
-		LyXFont font = mi.base.font;
-		augmentFont(font, from_ascii("lyxtex"));
-		tmpl_.metrics(mi, dim);
-		// FIXME UNICODE
-		dim.wid += mathed_string_width(font, name()) + 10;
-		// FIXME UNICODE
-		int ww = mathed_string_width(font, from_ascii("#1: "));
-		for (idx_type i = 0; i < nargs(); ++i) {
-			MathArray const & c = cell(i);
-			c.metrics(mi);
-			dim.wid  = max(dim.wid, c.width() + ww);
-			dim.des += c.height() + 10;
-		}
 	} else {
-		MacroTable::globalMacros().get(name()).expand(cells_, expanded_);
+    // create MathMacroArgumentValue object pointing to the cells of the macro
+    vector<MathArray> values( nargs() );
+    for( unsigned i=0; i<nargs(); i++ ) {
+      MathMacroArgumentValue value( (MathArray*)&cells_[i] );
+      values[i].insert( 0, MathAtom( value.clone().release() ) );
+    }
+		MacroTable::globalMacros().get(name()).expand(values, expanded_);
 		expanded_.metrics(mi, dim);
 	}
 	metricsMarkers2(dim);
@@ -96,26 +123,6 @@
 	if (!MacroTable::globalMacros().has(name())) {
 		// FIXME UNICODE
 		drawStrRed(pi, x, y, "Unknown: " + name());
-	} else if (editing(pi.base.bv)) {
-		LyXFont font = pi.base.font;
-		augmentFont(font, from_ascii("lyxtex"));
-		int h = y - dim_.ascent() + 2 + tmpl_.ascent();
-		pi.pain.text(x + 3, h, name(), font);
-		int const w = mathed_string_width(font, name());
-		tmpl_.draw(pi, x + w + 12, h);
-		h += tmpl_.descent();
-		Dimension ldim;
-		string t = "#1: ";
-		mathed_string_dim(font, name(), ldim);
-		for (idx_type i = 0; i < nargs(); ++i) {
-			MathArray const & c = cell(i);
-			h += max(c.ascent(), ldim.asc) + 5;
-			c.draw(pi, x + ldim.wid, h);
-			char_type str[] = { '#', '1', ':', '\0' };
-			str[1] += static_cast<char_type>(i);
-			pi.pain.text(x + 3, h, str, font);
-			h += max(c.descent(), ldim.des) + 5;
-		}
 	} else {
 		expanded_.draw(pi, x, y);
 	}
Index: InsetMathMacro.h
===================================================================
--- InsetMathMacro.h	(Revision 17273)
+++ InsetMathMacro.h	(Arbeitskopie)
@@ -20,8 +20,25 @@
 
 
 namespace lyx {
-
-
+  
+  /// This class is the value of a macro argument, technically 
+  /// a wrapper of the cells of MathMacro.
+  class MathMacroArgumentValue : public InsetMathDim {
+  public:
+    ///
+    MathMacroArgumentValue( MathArray *value );
+    ///
+    MathMacroArgumentValue( const MathMacroArgumentValue & );
+    ///
+    bool metrics(MetricsInfo & mi, Dimension & dim) const;
+    ///
+    void draw(PainterInfo &, int x, int y) const;
+    
+  private:
+    virtual std::auto_ptr<InsetBase> doClone() const;
+    MathArray *value_;
+  };
+    
 /// This class contains the data for a macro.
 class MathMacro : public InsetMathNest {
 public:
