Juergen Spitzmueller wrote:
> The heading styles (koma <-> standard classes) on screen are not
> changed on class change, even though the buffer is changed.

Still there (and I don't have a clue)

> - URGENT: on class change, qt-lyx (still) crashes if the document contains
> a environment which is unknown in the new class (e.g. chapter in article).
> I.e., there is something fishy in ControlDocument::ClassApply() (see the
> FIXME). Please help!

Fixed!

Seems that I need always three shots ;-)
Please apply this patch and forget about the former 2.

Verbindlichsten Dank,
Jürgen.
Index: src/frontends/controllers/ChangeLog
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/controllers/ChangeLog,v
retrieving revision 1.247
diff -u -r1.247 ChangeLog
--- src/frontends/controllers/ChangeLog	2002/11/06 08:56:26	1.247
+++ src/frontends/controllers/ChangeLog	2002/11/07 14:47:02
@@ -1,3 +1,8 @@
+2002-11-07  Juergen Spitzmueller <[EMAIL PROTECTED]>
+
+	* ControlDocument.C: (SaveAsDefault) make it work.
+	fix buffer update on class change
+
 2002-11-06  Angus Leeming  <[EMAIL PROTECTED]>
 
 	* biblio.C: clean-up of the code. No change in functionality.
Index: src/frontends/controllers/ControlDocument.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/controllers/ControlDocument.C,v
retrieving revision 1.4
diff -u -r1.4 ControlDocument.C
--- src/frontends/controllers/ControlDocument.C	2002/10/21 17:38:08	1.4
+++ src/frontends/controllers/ControlDocument.C	2002/11/07 14:47:03
@@ -72,14 +72,15 @@
 
 	// FIXME: do we need to use return value from classApply() here? (Lgb)
 	classApply();
-	lv_.view()->redoCurrentBuffer();
 
 	view().apply();
 	buffer()->params = *bp_;
+	
+	lv_.view()->redoCurrentBuffer();
 
 	buffer()->markDirty();
 
-	lv_.message(_("Document Settings Applied"));
+	lv_.message(_("Document settings applied"));
 }
 
 
@@ -107,14 +108,17 @@
 
 bool ControlDocument::classApply()
 {
-	BufferParams & params = lv_.buffer()->params;
-	unsigned int const old_class = bp_->textclass;
+	BufferParams & params = buffer()->params;
+	unsigned int const old_class = params.textclass;
+	unsigned int const new_class = bp_->textclass;
+
 	// exit if nothing changes
-	if (params.textclass == old_class)
-		return true;
+	if (new_class == old_class) {
+		 return true;
+	}
 
 	// try to load new_class
-	if (!textclasslist[params.textclass].load()) {
+	if (!textclasslist[new_class].load()) {
 		// problem changing class
 		// -- warn user (to retain old style)
 		Alert::alert(_("Conversion Errors!"),
@@ -124,9 +128,11 @@
 	}
 
 	// successfully loaded
+	view().apply();
+	buffer()->params = *bp_;
 	lv_.message(_("Converting document to new document class..."));
 	int ret = CutAndPaste::SwitchLayoutsBetweenClasses(
-		old_class, params.textclass,
+		old_class, new_class,
 		&*(lv_.buffer()->paragraphs.begin()),
 		lv_.buffer()->params);
 	if (ret) {
@@ -140,13 +146,17 @@
 		Alert::alert(_("Conversion Errors!"),s,
 			     _("into chosen document class"));
 	}
-	//lv_.view()->redoCurrentBuffer();
 	return true;
 }
 
 
 void ControlDocument::saveAsDefault()
 {
+	if (!Alert::askQuestion(_("Do you want to save the current settings"),
+				_("for the document layout as default?"),
+				_("(they will be valid for any new document)")))
+		return;
+		
 	lv_.buffer()->params.preamble = bp_->preamble;
 
 	string const fname = AddName(AddPath(user_lyxdir, "templates/"),
Index: src/frontends/qt2/ChangeLog
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/ChangeLog,v
retrieving revision 1.267
diff -u -r1.267 ChangeLog
--- src/frontends/qt2/ChangeLog	2002/11/07 00:21:28	1.267
+++ src/frontends/qt2/ChangeLog	2002/11/07 14:47:06
@@ -1,3 +1,13 @@
+2002-11-27  Juergen Spitzmueller  <[EMAIL PROTECTED]>
+
+	* ui/QDocument.ui:
+	* QDocumentDialog.C:
+	* QDocument.[Ch]: 
+	Implement "Save as default" and "Use class defaults"
+	
+	* QDocumentDialog.C: Fix dialog update on class change
+	implement lyxrc.auto_reset_options
+
 2002-11-07  John Levon  <[EMAIL PROTECTED]>
 
  	* QGraphics.[Ch]:
Index: src/frontends/qt2/QDocument.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/QDocument.C,v
retrieving revision 1.19
diff -u -r1.19 QDocument.C
--- src/frontends/qt2/QDocument.C	2002/10/20 01:48:27	1.19
+++ src/frontends/qt2/QDocument.C	2002/11/07 14:47:07
@@ -594,3 +594,21 @@
 	dialog_->marginsModule->footskipLE->setText(
 		tostr(LyXLength(params.footskip).value()).c_str());
 }
+
+
+void QDocument::saveDocDefault()
+{
+	// we have to apply the params first
+	apply();
+	controller().saveAsDefault();
+}
+
+void QDocument::useClassDefaults()
+{
+	BufferParams & params = controller().params();
+
+	params.textclass = dialog_->layoutModule->classCO->currentItem();
+	params.useClassDefaults();
+	update_contents();
+}
+
Index: src/frontends/qt2/QDocument.h
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/QDocument.h,v
retrieving revision 1.11
diff -u -r1.11 QDocument.h
--- src/frontends/qt2/QDocument.h	2002/10/20 01:48:27	1.11
+++ src/frontends/qt2/QDocument.h	2002/11/07 14:47:07
@@ -41,6 +41,10 @@
 	void update_contents();
 	/// build the dialog
 	void build_dialog();
+	/// save as default template
+	void saveDocDefault();
+	/// reset to default params
+	void useClassDefaults();
 	///
 	std::vector<string> lang_;
 };
Index: src/frontends/qt2/QDocumentDialog.C
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/QDocumentDialog.C,v
retrieving revision 1.5
diff -u -r1.5 QDocumentDialog.C
--- src/frontends/qt2/QDocumentDialog.C	2002/10/20 01:48:27	1.5
+++ src/frontends/qt2/QDocumentDialog.C	2002/11/07 14:47:08
@@ -310,8 +310,10 @@
 /*
  * public slot
  */
-void QDocumentDialog::saveDocDefault()
-{}
+void QDocumentDialog::saveDefaultClicked()
+{
+	form_->saveDocDefault();
+}
 
 
 /*
@@ -326,9 +328,9 @@
 /*
  * public slot
  */
-void QDocumentDialog::useClassDefaults()
+void QDocumentDialog::useDefaultsClicked()
 {
-    qWarning( "DocumentDialog::useClassDefaults() not yet implemented!" );
+    form_->useClassDefaults();
 }
 
 
@@ -475,10 +477,23 @@
 
 void QDocumentDialog::classChanged()
 {
-	updateFontsize(form_->controller().textClass().opt_fontsize(),
-		       form_->controller().params().fontsize);
+	unsigned int tc = layoutModule->classCO->currentItem();
 
-	updatePagestyle(form_->controller().textClass().opt_pagestyle(),
-			form_->controller().params().pagestyle);
+	BufferParams & params = form_->controller().params();
+	params.textclass = layoutModule->classCO->currentItem();
 
+	if (lyxrc.auto_reset_options) {
+		params.textclass = tc;
+		params.useClassDefaults();
+		form_->update_contents();
+	} else {
+		// update the params which are needed in any case
+		// (fontsizes, pagestyle)
+		params.textclass = tc;
+		updateFontsize(form_->controller().textClass().opt_fontsize(),
+			params.fontsize);
+
+		updatePagestyle(form_->controller().textClass().opt_pagestyle(),
+			params.pagestyle);
+	}
 }
Index: src/frontends/qt2/QDocumentDialog.h
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/QDocumentDialog.h,v
retrieving revision 1.5
diff -u -r1.5 QDocumentDialog.h
--- src/frontends/qt2/QDocumentDialog.h	2002/10/20 01:48:27	1.5
+++ src/frontends/qt2/QDocumentDialog.h	2002/11/07 14:47:08
@@ -50,9 +50,9 @@
 public slots:
 	void setTitle(int);
 	void change_adaptor();
-	void saveDocDefault();
+	void saveDefaultClicked();
 	void restore();
-	void useClassDefaults();
+	void useDefaultsClicked();
 protected slots:
 	void setLSpacing(int);
 	void setMargins(int);
Index: src/frontends/qt2/ui/QDocumentDialog.ui
===================================================================
RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/ui/QDocumentDialog.ui,v
retrieving revision 1.6
diff -u -r1.6 QDocumentDialog.ui
--- src/frontends/qt2/ui/QDocumentDialog.ui	2002/10/09 08:59:02	1.6
+++ src/frontends/qt2/ui/QDocumentDialog.ui	2002/11/07 14:47:10
@@ -13,7 +13,7 @@
         <rect>
             <x>0</x>
             <y>0</y>
-            <width>468</width>
+            <width>465</width>
             <height>363</height>
         </rect>
     </property>
@@ -66,6 +66,10 @@
                         <name>text</name>
                         <string>Use Class Defaults</string>
                     </property>
+                    <property>
+                        <name>toolTip</name>
+                        <string>Reset default params of the current class</string>
+                    </property>
                 </widget>
                 <widget>
                     <class>QPushButton</class>
@@ -84,6 +88,10 @@
                         <name>text</name>
                         <string>Save as Document Defaults</string>
                     </property>
+                    <property>
+                        <name>toolTip</name>
+                        <string>Save settings as LyX's default template</string>
+                    </property>
                 </widget>
             </hbox>
         </widget>
@@ -265,7 +273,7 @@
 <images>
     <image>
         <name>image0</name>
-        <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1ddec44f503c0ae2a154410f53d0ed20e2bf6bdb656dd6861dd23d9a66591b0587fd1654235ebded6f0edcd53e419d87ae7b1f4f9b8f906d0bfe012317426a70b07bdc2f3ec77f8ed6b89559061a0343d06a124cc105596482585094bc0ae599b04646c9018926491b2205e140c485cace25755c175d0a967b622ff900b8cc9c7d29af594ea722d589167f813aa852ba07d94b9dce296e883fe7bb163f23896753</data>
+        <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
     </image>
 </images>
 <connections>
@@ -281,7 +289,21 @@
         <receiver>QDocumentDialogBase</receiver>
         <slot>setTitle(int)</slot>
     </connection>
+    <connection>
+        <sender>savePB</sender>
+        <signal>clicked()</signal>
+        <receiver>QDocumentDialogBase</receiver>
+        <slot>saveDefaultClicked()</slot>
+    </connection>
+    <connection>
+        <sender>defaultPB</sender>
+        <signal>clicked()</signal>
+        <receiver>QDocumentDialogBase</receiver>
+        <slot>useDefaultsClicked()</slot>
+    </connection>
     <slot access="public">change_adaptor()</slot>
+    <slot access="protected">useDefaultsClicked()</slot>
+    <slot access="protected">saveDefaultClicked()</slot>
     <slot access="public">setTitle(int)</slot>
 </connections>
 </UI>

Reply via email to