The last one. Please have a look at the changes in Spacing.C, especially at 
the #if 0 clause.

This patch also fixes an undetected bug (custom document spacing was broken).

There are still some float values in lyxlayout.C (parsep, labelbottomsep, 
bottomsep, topsep, itemsep and parskip). I didn't change them because they 
are not used by the frontends.

OK?

Regards,
Jürgen

Index: ParagraphParameters.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ParagraphParameters.C,v
retrieving revision 1.44
diff -u -r1.44 ParagraphParameters.C
--- ParagraphParameters.C	5 Oct 2004 12:56:20 -0000	1.44
+++ ParagraphParameters.C	5 Jan 2005 21:17:03 -0000
@@ -223,7 +223,7 @@
 			} else if (tmp == "other") {
 				lex.next();
 				spacing(Spacing(Spacing::Other,
-						 lex.getFloat()));
+						 lex.getString()));
 			} else {
 				lex.printError("Unknown spacing token: '$$Token'");
 			}
Index: Spacing.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/Spacing.C,v
retrieving revision 1.37
diff -u -r1.37 Spacing.C
--- Spacing.C	16 Sep 2004 20:37:33 -0000	1.37
+++ Spacing.C	5 Jan 2005 21:17:03 -0000
@@ -12,12 +12,15 @@
 #include <config.h>
 
 #include "Spacing.h"
+#include "support/lstrings.h"
+#include "support/tostr.h"
 
 #include <sstream>
 #include <string>
 
+using lyx::support::strToDbl;
+
 using std::ios;
-using std::istringstream;
 using std::ostream;
 using std::ostringstream;
 using std::string;
@@ -26,24 +29,37 @@
 string const Spacing::spacing_string[]
 	= {"single", "onehalf", "double", "other"};
 
-float Spacing::getValue() const
+
+string const Spacing::getValueAsString() const
 {
 	switch (space) {
 	case Default: // nothing special should happen with this...
-	case Single: return 1.0;
-	case Onehalf: return 1.25;
-	case Double: return 1.667;
+	case Single: return "1.0";
+	case Onehalf: return "1.25";
+	case Double: return "1.667";
 	case Other: return value;
 	}
-	return 1.0;
+	return "1.0";
+}
+
+
+double Spacing::getValue() const
+{
+	return strToDbl(getValueAsString());
 }
 
 
 void Spacing::set(Spacing::Space sp, float val)
 {
+	set(sp, tostr(val));
+}
+
+
+void Spacing::set(Spacing::Space sp, string const & val)
+{
 	space = sp;
 	if (sp == Other) {
-		switch (int(val * 1000 + 0.5)) {
+		switch (int(strToDbl(val) * 1000 + 0.5)) {
 		case 1000: space = Single; break;
 		case 1250: space = Onehalf; break;
 		case 1667: space = Double; break;
@@ -53,15 +69,6 @@
 }
 
 
-void Spacing::set(Spacing::Space sp, string const & val)
-{
-	float fval = 0.0;
-	istringstream istr(val);
-	istr >> fval;
-	set(sp, fval);
-}
-
-
 void Spacing::writeFile(ostream & os, bool para) const
 {
 	if (space == Default) return;
@@ -69,10 +76,16 @@
 	string cmd = para ? "\\paragraph_spacing " : "\\spacing ";
 
 	if (getSpace() == Spacing::Other) {
+		#if 0
 		os.setf(ios::showpoint|ios::fixed);
 		os.precision(2);
 		os << cmd << spacing_string[getSpace()]
 		   << ' ' << getValue() << "\n";
+		#else
+		// should be sufficient, no?
+		os << cmd << spacing_string[getSpace()]
+		   << ' ' << getValueAsString() << "\n";
+		#endif
 	} else {
 		os << cmd << spacing_string[getSpace()] << "\n";
 	}
@@ -93,7 +106,7 @@
 	{
 		ostringstream ost;
 		ost << "\\begin{spacing}{"
-		    << getValue() << '}';
+		    << getValueAsString() << '}';
 		return ost.str();
 	}
 	}
Index: Spacing.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/Spacing.h,v
retrieving revision 1.27
diff -u -r1.27 Spacing.h
--- Spacing.h	25 Jul 2004 12:59:12 -0000	1.27
+++ Spacing.h	5 Jan 2005 21:17:03 -0000
@@ -33,7 +33,7 @@
 		Default
 	};
 	///
-	Spacing() : space(Default), value(1.0) {}
+	Spacing() : space(Default), value("1.0") {}
 	///
 	Spacing(Spacing::Space sp, float val = 1.0) {
 		set(sp, val);
@@ -46,13 +46,15 @@
 		return space == Default;
 	}
 	///
-	float getValue() const;
+	std::string const getValueAsString() const;
+	///
+	double getValue() const;
 	///
 	Spacing::Space getSpace() const { return space; }
 	///
 	void set(Spacing::Space sp, float val = 1.0);
 	///
-	void set(Spacing::Space sp, std::string const & val) ;
+	void set(Spacing::Space sp, std::string const & val);
 	///
 	void writeFile(std::ostream &, bool para = false) const;
 	///
@@ -64,7 +66,7 @@
 	///
 	Space space;
 	///
-	float value;
+	std::string value;
 	/// names of line spacing
 	static std::string const spacing_string[];
 };
@@ -75,7 +77,7 @@
 bool operator==(Spacing const & a, Spacing const & b)
 {
 	return a.getSpace() == b.getSpace()
-		&& a.getValue() == b.getValue();
+		&& a.getValueAsString() == b.getValueAsString();
 }
 
 ///
Index: bufferparams.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/bufferparams.C,v
retrieving revision 1.92
diff -u -r1.92 bufferparams.C
--- bufferparams.C	5 Jan 2005 20:21:24 -0000	1.92
+++ bufferparams.C	5 Jan 2005 21:17:06 -0000
@@ -263,6 +263,7 @@
 	translator.addPair("single", Spacing::Single);
 	translator.addPair("onehalf", Spacing::Onehalf);
 	translator.addPair("double", Spacing::Double);
+	translator.addPair("other", Spacing::Other);
 	return translator;
 }
 
@@ -583,7 +584,7 @@
 	} else if (token == "\\spacing") {
 		string nspacing;
 		lex >> nspacing;
-		float tmp_val = 0.0;
+		string tmp_val;
 		if (nspacing == "other") {
 			lex >> tmp_val;
 		}
Index: lyxlayout.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxlayout.C,v
retrieving revision 1.24
diff -u -r1.24 lyxlayout.C
--- lyxlayout.C	25 Nov 2003 17:23:33 -0000	1.24
+++ lyxlayout.C	5 Jan 2005 21:17:07 -0000
@@ -785,7 +785,7 @@
 		break;
 	case ST_OTHER:
 		lexrc.next();
-		spacing.set(Spacing::Other, lexrc.getFloat());
+		spacing.set(Spacing::Other, lexrc.getString());
 		break;
 	}
 }
Index: rowpainter.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/rowpainter.C,v
retrieving revision 1.137
diff -u -r1.137 rowpainter.C
--- rowpainter.C	30 Nov 2004 01:59:36 -0000	1.137
+++ rowpainter.C	5 Jan 2005 21:17:09 -0000
@@ -509,7 +509,7 @@
 			// the top.
 			if (layout->counter == "chapter") {
 				if (buffer.params().secnumdepth >= 0) {
-					float spacing_val = 1.0;
+					double spacing_val = 1.0;
 					if (!parparams.spacing().isDefault()) {
 						spacing_val = parparams.spacing().getValue();
 					} else {
@@ -550,7 +550,7 @@
 		LyXFont font = getLabelFont();
 		if (!par_.getLabelstring().empty()) {
 			string const str = par_.getLabelstring();
-			float spacing_val = 1.0;
+			double spacing_val = 1.0;
 			if (!parparams.spacing().isDefault()) {
 				spacing_val = parparams.spacing().getValue();
 			} else {
Index: text.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text.C,v
retrieving revision 1.588
diff -u -r1.588 text.C
--- text.C	30 Nov 2004 01:59:37 -0000	1.588
+++ text.C	5 Jan 2005 21:17:13 -0000
@@ -2134,7 +2134,7 @@
 			os << _("Double");
 			break;
 		case Spacing::Other:
-			os << _("Other (") << spacing.getValue() << ')';
+			os << _("Other (") << spacing.getValueAsString() << ')';
 			break;
 		case Spacing::Default:
 			// should never happen, do nothing
Index: text3.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text3.C,v
retrieving revision 1.276
diff -u -r1.276 text3.C
--- text3.C	4 Jan 2005 09:18:48 -0000	1.276
+++ text3.C	5 Jan 2005 21:17:16 -0000
@@ -753,15 +753,15 @@
 	case LFUN_PARAGRAPH_SPACING: {
 		Paragraph & par = cur.paragraph();
 		Spacing::Space cur_spacing = par.params().spacing().getSpace();
-		float cur_value = 1.0;
+		string cur_value = "1.0";
 		if (cur_spacing == Spacing::Other)
-			cur_value = par.params().spacing().getValue();
+			cur_value = par.params().spacing().getValueAsString();
 
 		istringstream is(cmd.argument);
 		string tmp;
 		is >> tmp;
 		Spacing::Space new_spacing = cur_spacing;
-		float new_value = cur_value;
+		string new_value = cur_value;
 		if (tmp.empty()) {
 			lyxerr << "Missing argument to `paragraph-spacing'"
 			       << endl;
@@ -773,10 +773,10 @@
 			new_spacing = Spacing::Double;
 		} else if (tmp == "other") {
 			new_spacing = Spacing::Other;
-			float tmpval = 0.0;
+			string tmpval = "0.0";
 			is >> tmpval;
 			lyxerr << "new_value = " << tmpval << endl;
-			if (tmpval != 0.0)
+			if (tmpval != "0.0")
 				new_value = tmpval;
 		} else if (tmp == "default") {
 			new_spacing = Spacing::Default;
Index: frontends/qt2/QDocument.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QDocument.C,v
retrieving revision 1.76
diff -u -r1.76 QDocument.C
--- frontends/qt2/QDocument.C	3 Dec 2004 11:02:06 -0000	1.76
+++ frontends/qt2/QDocument.C	5 Jan 2005 21:17:19 -0000
@@ -316,9 +316,7 @@
 		break;
 	case 3:
 		params.spacing().set(Spacing::Other,
-				   dialog_->textLayoutModule->
-				   lspacingLE->text().toFloat()
-				   );
+			fromqstr(dialog_->textLayoutModule->lspacingLE->text()));
 		break;
 	}
 
@@ -567,9 +565,9 @@
 	dialog_->textLayoutModule->lspacingCO->setCurrentItem(nitem);
 	if (params.spacing().getSpace() == Spacing::Other) {
 		dialog_->textLayoutModule->lspacingLE->setText(
-			toqstr(tostr(params.spacing().getValue())));
-		dialog_->setLSpacing(3);
+			toqstr(params.spacing().getValueAsString()));	
 	}
+	dialog_->setLSpacing(nitem);
 
 	if (params.paragraph_separation
 	    == BufferParams::PARSEP_INDENT) {
Index: frontends/qt2/QParagraph.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QParagraph.C,v
retrieving revision 1.35
diff -u -r1.35 QParagraph.C
--- frontends/qt2/QParagraph.C	20 May 2004 09:36:27 -0000	1.35
+++ frontends/qt2/QParagraph.C	5 Jan 2005 21:17:19 -0000
@@ -172,8 +172,7 @@
 	}
 	dialog_->linespacing->setCurrentItem(linespacing);
 	if (space.getSpace() == Spacing::Other) {
-		string const sp = tostr(space.getValue());
-		dialog_->linespacingValue->setText(toqstr(sp));
+		dialog_->linespacingValue->setText(toqstr(space.getValueAsString()));
 		dialog_->linespacingValue->setEnabled(true);
 	} else {
 		dialog_->linespacingValue->setText("");
Index: frontends/xforms/FormDocument.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/FormDocument.C,v
retrieving revision 1.174
diff -u -r1.174 FormDocument.C
--- frontends/xforms/FormDocument.C	5 Oct 2004 10:11:40 -0000	1.174
+++ frontends/xforms/FormDocument.C	5 Jan 2005 21:17:23 -0000
@@ -1173,7 +1173,7 @@
 
 	bool const spacing_input = pos == 4;
 	setEnabled(class_->input_spacing, spacing_input);
-	string const input = spacing_input ? tostr(params.spacing().getValue()) : string();
+	string const input = spacing_input ? params.spacing().getValueAsString() : string();
 	fl_set_input(class_->input_spacing, input.c_str());
 }
 
Index: frontends/xforms/FormParagraph.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/FormParagraph.C,v
retrieving revision 1.102
diff -u -r1.102 FormParagraph.C
--- frontends/xforms/FormParagraph.C	19 May 2004 15:11:35 -0000	1.102
+++ frontends/xforms/FormParagraph.C	5 Jan 2005 21:17:24 -0000
@@ -266,8 +266,8 @@
 	bool const spacing_other = space.getSpace() == Spacing::Other;
 	setEnabled(dialog_->input_linespacing, spacing_other);
 	if (spacing_other) {
-		string const sp = tostr(space.getValue());
-		fl_set_input(dialog_->input_linespacing, sp.c_str());
+		fl_set_input(dialog_->input_linespacing, 
+			space.getValueAsString().c_str());
 	} else {
 		fl_set_input(dialog_->input_linespacing, "");
 	}
Index: tex2lyx/Spacing.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/tex2lyx/Spacing.h,v
retrieving revision 1.4
diff -u -r1.4 Spacing.h
--- tex2lyx/Spacing.h	8 Oct 2003 11:31:51 -0000	1.4
+++ tex2lyx/Spacing.h	5 Jan 2005 21:17:25 -0000
@@ -16,6 +16,8 @@
 #ifndef SPACING_H
 #define SPACING_H
 
+#include <string>
+
 class Spacing {
 public:
 	///
@@ -26,8 +28,10 @@
 		Other,
 		Default
 	};
-
+	///
 	void set(Spacing::Space, float = 1.0) {}
+	///
+	void set(Spacing::Space sp, std::string const & val) {}
 };
 
 #endif // NOT SPACING_H

Reply via email to