>> Since LyX 1.5 we have no longer a button in the file open dialog to open
>> example files.
>
> ... on Windows.

I don't think so, because the Tutorial stated this (until yesterday) and it was the last time revised for LyX 1.2.x or LyX 1.3.x I think.

> I'm not completely sure, but it looks to me that you could use setSidebarUrls
> with qt 4.3 for this issue:
> http://doc.trolltech.com/4.3/qfiledialog.html#setSidebarUrls

But this would require Qt 4.3.

What about my proposal with the menu? I attached a patch against trunk how to get this. For me this works fine. Opinions?

regards Uwe
Index: lib/ui/stdmenus.inc
===================================================================
--- lib/ui/stdmenus.inc	(revision 21744)
+++ lib/ui/stdmenus.inc	(working copy)
@@ -35,6 +35,7 @@
 		Item "New|N" "buffer-new"
 		Item "New from Template...|m" "buffer-new-template"
 		Item "Open...|O" "file-open"
+		Item "Open Example|l" "file-open-example"
 		Submenu "Open Recent|t" "file_lastfiles"
 		Separator
 		Item "Close|C" "buffer-close"
Index: src/buffer_funcs.cpp
===================================================================
--- src/buffer_funcs.cpp	(revision 21744)
+++ src/buffer_funcs.cpp	(working copy)
@@ -111,6 +111,45 @@
 
 
 // FIXME newFile() should probably be a member method of Application...
+/*Buffer * newFile(string const & filename, string const & examplename,
+		 bool const isNamed)
+{
+	// get a free buffer
+	Buffer * b = theBufferList().newBuffer(filename);
+	BOOST_ASSERT(b);
+
+	FileName tname;
+	// use example_lyxified.lyx as a default example if it exists.
+	if (examplename.empty())
+		tname = libFileSearch("examples", "example_lyxified.lyx");
+	else
+		tname = makeAbsPath(examplename);
+
+	if (!tname.empty()) {
+		if (!b->readFile(tname)) {
+			docstring const file = makeDisplayPath(tname.absFilename(), 50);
+			docstring const text  = bformat(
+				_("The specified document example\n%1$s\ncould not be read."),
+				file);
+			Alert::error(_("Could not read example"), text);
+			theBufferList().release(b);
+			return 0;
+		}
+	}
+
+	if (!isNamed) {
+		b->setUnnamed();
+		b->setFileName(filename);
+	}
+
+	b->setReadonly(false);
+	b->setFullyLoaded(true);
+
+	return b;
+}*/
+
+
+// FIXME newFile() should probably be a member method of Application...
 Buffer * newFile(string const & filename, string const & templatename,
 		 bool const isNamed)
 {
Index: src/buffer_funcs.h
===================================================================
--- src/buffer_funcs.h	(revision 21744)
+++ src/buffer_funcs.h	(working copy)
@@ -29,6 +29,12 @@
  */
 Buffer * checkAndLoadLyXFile(support::FileName const & filename);
 
+/** Make a new file (buffer) with name \c filename based on an example
+ *  named \c examplename
+ */
+/*Buffer * newFile(std::string const & filename, std::string const & examplename,
+		 bool isNamed = false);*/
+
 /** Make a new file (buffer) with name \c filename based on a template
  *  named \c templatename
  */
Index: src/frontends/qt4/GuiPrefs.cpp
===================================================================
--- src/frontends/qt4/GuiPrefs.cpp	(revision 21744)
+++ src/frontends/qt4/GuiPrefs.cpp	(working copy)
@@ -736,6 +736,7 @@
 	: PrefModule(_("Paths"), form, parent)
 {
 	setupUi(this);
+	connect(exampleDirPB, SIGNAL(clicked()), this, SLOT(select_exampledir()));
 	connect(templateDirPB, SIGNAL(clicked()), this, SLOT(select_templatedir()));
 	connect(tempDirPB, SIGNAL(clicked()), this, SLOT(select_tempdir()));
 	connect(backupDirPB, SIGNAL(clicked()), this, SLOT(select_backupdir()));
@@ -743,6 +744,8 @@
 	connect(lyxserverDirPB, SIGNAL(clicked()), this, SLOT(select_lyxpipe()));
 	connect(workingDirED, SIGNAL(textChanged(QString)),
 		this, SIGNAL(changed()));
+	connect(exampleDirPB, SIGNAL(textChanged(QString)),
+		this, SIGNAL(changed()));
 	connect(templateDirED, SIGNAL(textChanged(QString)),
 		this, SIGNAL(changed()));
 	connect(backupDirED, SIGNAL(textChanged(QString)),
@@ -759,6 +762,7 @@
 void PrefPaths::apply(LyXRC & rc) const
 {
 	rc.document_path = internal_path(fromqstr(workingDirED->text()));
+	rc.example_path = internal_path(fromqstr(exampleDirED->text()));
 	rc.template_path = internal_path(fromqstr(templateDirED->text()));
 	rc.backupdir_path = internal_path(fromqstr(backupDirED->text()));
 	rc.tempdir_path = internal_path(fromqstr(tempDirED->text()));
@@ -771,6 +775,7 @@
 void PrefPaths::update(LyXRC const & rc)
 {
 	workingDirED->setText(toqstr(external_path(rc.document_path)));
+	exampleDirED->setText(toqstr(external_path(rc.example_path)));
 	templateDirED->setText(toqstr(external_path(rc.template_path)));
 	backupDirED->setText(toqstr(external_path(rc.backupdir_path)));
 	tempDirED->setText(toqstr(external_path(rc.tempdir_path)));
@@ -780,6 +785,16 @@
 }
 
 
+void PrefPaths::select_exampledir()
+{
+	docstring file(form_->browsedir(
+		from_utf8(internal_path(fromqstr(exampleDirED->text()))),
+		_("Select a document templates directory")));
+	if (!file.empty())
+		exampleDirED->setText(toqstr(file));
+}
+
+
 void PrefPaths::select_templatedir()
 {
 	docstring file(form_->browsedir(
Index: src/frontends/qt4/GuiPrefs.h
===================================================================
--- src/frontends/qt4/GuiPrefs.h	(revision 21744)
+++ src/frontends/qt4/GuiPrefs.h	(working copy)
@@ -197,6 +197,7 @@
 	void update(LyXRC const & rc);
 
 private Q_SLOTS:
+	void select_exampledir();
 	void select_templatedir();
 	void select_tempdir();
 	void select_backupdir();
Index: src/frontends/qt4/ui/PrefPathsUi.ui
===================================================================
--- src/frontends/qt4/ui/PrefPathsUi.ui	(revision 21744)
+++ src/frontends/qt4/ui/PrefPathsUi.ui	(working copy)
@@ -6,31 +6,28 @@
     <x>0</x>
     <y>0</y>
     <width>347</width>
-    <height>227</height>
+    <height>259</height>
    </rect>
   </property>
   <property name="windowTitle" >
    <string/>
   </property>
   <layout class="QGridLayout" >
-   <property name="margin" >
-    <number>9</number>
-   </property>
-   <property name="spacing" >
-    <number>6</number>
-   </property>
-   <item row="3" column="0" >
-    <widget class="QLabel" name="lyxserverDirLA" >
+   <item row="0" column="0" >
+    <widget class="QLabel" name="workingDirLA" >
      <property name="text" >
-      <string>Ly&amp;XServer pipe:</string>
+      <string>&amp;Working directory:</string>
      </property>
      <property name="buddy" >
-      <cstring>lyxserverDirED</cstring>
+      <cstring>workingDirED</cstring>
      </property>
     </widget>
    </item>
-   <item row="1" column="2" >
-    <widget class="QPushButton" name="templateDirPB" >
+   <item row="0" column="1" >
+    <widget class="QLineEdit" name="workingDirED" />
+   </item>
+   <item row="0" column="2" >
+    <widget class="QPushButton" name="workingDirPB" >
      <property name="text" >
       <string>Browse...</string>
      </property>
@@ -39,11 +36,21 @@
      </property>
     </widget>
    </item>
-   <item row="5" column="1" colspan="2" >
-    <widget class="QLineEdit" name="pathPrefixED" />
+   <item row="1" column="0" >
+    <widget class="QLabel" name="templateDirLA" >
+     <property name="text" >
+      <string>&amp;Document templates:</string>
+     </property>
+     <property name="buddy" >
+      <cstring>templateDirED</cstring>
+     </property>
+    </widget>
    </item>
-   <item row="2" column="2" >
-    <widget class="QPushButton" name="backupDirPB" >
+   <item row="1" column="1" >
+    <widget class="QLineEdit" name="templateDirED" />
+   </item>
+   <item row="1" column="2" >
+    <widget class="QPushButton" name="templateDirPB" >
      <property name="text" >
       <string>Browse...</string>
      </property>
@@ -52,24 +59,21 @@
      </property>
     </widget>
    </item>
-   <item row="4" column="2" >
-    <widget class="QPushButton" name="tempDirPB" >
+   <item row="2" column="0" >
+    <widget class="QLabel" name="exampleDirLA" >
      <property name="text" >
-      <string>Browse...</string>
+      <string>&amp;Example files:</string>
      </property>
-     <property name="autoDefault" >
-      <bool>false</bool>
+     <property name="buddy" >
+      <cstring>templateDirED</cstring>
      </property>
     </widget>
    </item>
-   <item row="3" column="1" >
-    <widget class="QLineEdit" name="lyxserverDirED" />
+   <item row="2" column="1" >
+    <widget class="QLineEdit" name="exampleDirED" />
    </item>
-   <item row="1" column="1" >
-    <widget class="QLineEdit" name="templateDirED" />
-   </item>
-   <item row="0" column="2" >
-    <widget class="QPushButton" name="workingDirPB" >
+   <item row="2" column="2" >
+    <widget class="QPushButton" name="exampleDirPB" >
      <property name="text" >
       <string>Browse...</string>
      </property>
@@ -78,43 +82,43 @@
      </property>
     </widget>
    </item>
-   <item row="5" column="0" >
-    <widget class="QLabel" name="pathPrefixLA" >
+   <item row="3" column="0" >
+    <widget class="QLabel" name="backupDirLA" >
      <property name="text" >
-      <string>&amp;PATH prefix:</string>
+      <string>&amp;Backup directory:</string>
      </property>
      <property name="buddy" >
-      <cstring>pathPrefixED</cstring>
+      <cstring>backupDirED</cstring>
      </property>
     </widget>
    </item>
-   <item row="4" column="0" >
-    <widget class="QLabel" name="tempDirLA" >
+   <item row="3" column="1" >
+    <widget class="QLineEdit" name="backupDirED" />
+   </item>
+   <item row="3" column="2" >
+    <widget class="QPushButton" name="backupDirPB" >
      <property name="text" >
-      <string>&amp;Temporary directory:</string>
+      <string>Browse...</string>
      </property>
-     <property name="buddy" >
-      <cstring>tempDirED</cstring>
+     <property name="autoDefault" >
+      <bool>false</bool>
      </property>
     </widget>
    </item>
-   <item row="2" column="0" >
-    <widget class="QLabel" name="backupDirLA" >
+   <item row="4" column="0" >
+    <widget class="QLabel" name="lyxserverDirLA" >
      <property name="text" >
-      <string>&amp;Backup directory:</string>
+      <string>Ly&amp;XServer pipe:</string>
      </property>
      <property name="buddy" >
-      <cstring>backupDirED</cstring>
+      <cstring>lyxserverDirED</cstring>
      </property>
     </widget>
    </item>
-   <item row="2" column="1" >
-    <widget class="QLineEdit" name="backupDirED" />
+   <item row="4" column="1" >
+    <widget class="QLineEdit" name="lyxserverDirED" />
    </item>
-   <item row="0" column="1" >
-    <widget class="QLineEdit" name="workingDirED" />
-   </item>
-   <item row="3" column="2" >
+   <item row="4" column="2" >
     <widget class="QPushButton" name="lyxserverDirPB" >
      <property name="text" >
       <string>Browse...</string>
@@ -124,30 +128,43 @@
      </property>
     </widget>
    </item>
-   <item row="0" column="0" >
-    <widget class="QLabel" name="workingDirLA" >
+   <item row="5" column="0" >
+    <widget class="QLabel" name="tempDirLA" >
      <property name="text" >
-      <string>&amp;Working directory:</string>
+      <string>&amp;Temporary directory:</string>
      </property>
      <property name="buddy" >
-      <cstring>workingDirED</cstring>
+      <cstring>tempDirED</cstring>
      </property>
     </widget>
    </item>
-   <item row="1" column="0" >
-    <widget class="QLabel" name="templateDirLA" >
+   <item row="5" column="1" >
+    <widget class="QLineEdit" name="tempDirED" />
+   </item>
+   <item row="5" column="2" >
+    <widget class="QPushButton" name="tempDirPB" >
      <property name="text" >
-      <string>&amp;Document templates:</string>
+      <string>Browse...</string>
      </property>
+     <property name="autoDefault" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="6" column="0" >
+    <widget class="QLabel" name="pathPrefixLA" >
+     <property name="text" >
+      <string>&amp;PATH prefix:</string>
+     </property>
      <property name="buddy" >
-      <cstring>templateDirED</cstring>
+      <cstring>pathPrefixED</cstring>
      </property>
     </widget>
    </item>
-   <item row="4" column="1" >
-    <widget class="QLineEdit" name="tempDirED" />
+   <item row="6" column="1" colspan="2" >
+    <widget class="QLineEdit" name="pathPrefixED" />
    </item>
-   <item row="6" column="0" colspan="3" >
+   <item row="7" column="0" colspan="3" >
     <spacer>
      <property name="orientation" >
       <enum>Qt::Vertical</enum>
@@ -165,10 +182,6 @@
    </item>
   </layout>
  </widget>
- <pixmapfunction></pixmapfunction>
- <includes>
-  <include location="local" >qt_helpers.h</include>
- </includes>
  <tabstops>
   <tabstop>workingDirED</tabstop>
   <tabstop>workingDirPB</tabstop>
@@ -181,6 +194,9 @@
   <tabstop>tempDirED</tabstop>
   <tabstop>tempDirPB</tabstop>
  </tabstops>
+ <includes>
+  <include location="local" >qt_helpers.h</include>
+ </includes>
  <resources/>
  <connections/>
 </ui>
Index: src/lfuns.h
===================================================================
--- src/lfuns.h	(revision 21744)
+++ src/lfuns.h	(working copy)
@@ -223,6 +223,7 @@
 	LFUN_FILE_INSERT_PLAINTEXT_PARA,// Levon 2001-02-14
 	LFUN_FILE_NEW,                  // for scripting purposes
 	LFUN_FILE_OPEN,
+	LFUN_FILE_OPEN_EXAMPLE,         // uwestoehr 2007-11-23
 	LFUN_PARAGRAPH_UP,              // Asger 1996-10-01
 	// 145
 	LFUN_PARAGRAPH_UP_SELECT,       // Asger 1996-10-01
Index: src/LyX.cpp
===================================================================
--- src/LyX.cpp	(revision 21744)
+++ src/LyX.cpp	(working copy)
@@ -785,6 +785,10 @@
 	lyxrc.tempdir_path = package().temp_dir().absFilename();
 	lyxrc.document_path = package().document_dir().absFilename();
 
+	if (lyxrc.example_path.empty()) {
+		lyxrc.example_path = addPath(package().system_support().absFilename(),
+					      "examples");
+	}
 	if (lyxrc.template_path.empty()) {
 		lyxrc.template_path = addPath(package().system_support().absFilename(),
 					      "templates");
Index: src/LyXAction.cpp
===================================================================
--- src/LyXAction.cpp	(revision 21744)
+++ src/LyXAction.cpp	(working copy)
@@ -171,6 +171,7 @@
 		{ LFUN_FILE_INSERT_PLAINTEXT_PARA, "file-insert-plaintext-para", Noop, Edit },
 		{ LFUN_FILE_NEW, "file-new", NoBuffer, Buffer },
 		{ LFUN_FILE_OPEN, "file-open", NoBuffer, Buffer },
+		{ LFUN_FILE_OPEN_EXAMPLE,"file-open-example", NoBuffer, Buffer },
 		{ LFUN_FLOAT_INSERT, "float-insert", Noop, Edit },
 		{ LFUN_FLOAT_WIDE_INSERT, "float-wide-insert", Noop, Edit },
 		{ LFUN_WRAP_INSERT, "wrap-insert", Noop, Edit },
Index: src/LyXFunc.cpp
===================================================================
--- src/LyXFunc.cpp	(revision 21744)
+++ src/LyXFunc.cpp	(working copy)
@@ -683,6 +683,7 @@
 	case LFUN_HELP_OPEN:
 	case LFUN_FILE_NEW:
 	case LFUN_FILE_OPEN:
+	case LFUN_FILE_OPEN_EXAMPLE:
 	case LFUN_DROP_LAYOUTS_CHOICE:
 	case LFUN_MENU_OPEN:
 	case LFUN_SERVER_GET_NAME:
@@ -919,15 +920,20 @@
 
 		// --- Menus -----------------------------------------------
 		case LFUN_BUFFER_NEW:
-			menuNew(argument, false);
+			menuNew(argument, false, false);
 			updateFlags = Update::None;
 			break;
 
 		case LFUN_BUFFER_NEW_TEMPLATE:
-			menuNew(argument, true);
+			menuNew(argument, true, false);
 			updateFlags = Update::None;
 			break;
 
+		case LFUN_FILE_OPEN_EXAMPLE:
+			menuNew(argument, false, true);
+			updateFlags = Update::None;
+			break;
+
 		case LFUN_BUFFER_CLOSE:
 			closeBuffer();
 			updateFlags = Update::None;
@@ -1947,7 +1953,8 @@
 }
 
 
-void LyXFunc::menuNew(string const & name, bool fromTemplate)
+void LyXFunc::menuNew(string const & name, bool fromTemplate,
+					  bool fromExample)
 {
 	// FIXME: initpath is not used. What to do?
 	string initpath = lyxrc.document_path;
@@ -1974,6 +1981,29 @@
 		}
 	}
 
+	// The example stuff
+	string examplname;
+	if (fromExample) {
+		FileDialog dlg(_("Select example file"));
+		dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
+		dlg.setButton1(_("Examples|#T#t"), from_utf8(lyxrc.example_path));
+
+		FileDialog::Result result =
+			dlg.open(from_utf8(lyxrc.example_path),
+				     FileFilterList(_("LyX Documents (*.lyx)")),
+				     docstring());
+
+		if (result.first == FileDialog::Later)
+			return;
+		if (result.second.empty())
+			return;
+		examplname = to_utf8(result.second);
+
+		Buffer * const b = newFile(filename, examplname, !name.empty());
+		if (b)
+			lyx_view_->setBuffer(b);
+	}
+
 	// The template stuff
 	string templname;
 	if (fromTemplate) {
@@ -1991,11 +2021,12 @@
 		if (result.second.empty())
 			return;
 		templname = to_utf8(result.second);
+
+		Buffer * const b = newFile(filename, templname, !name.empty());
+		if (b)
+			lyx_view_->setBuffer(b);
 	}
 
-	Buffer * const b = newFile(filename, templname, !name.empty());
-	if (b)
-		lyx_view_->setBuffer(b);
 }
 
 
Index: src/LyXFunc.h
===================================================================
--- src/LyXFunc.h	(revision 21744)
+++ src/LyXFunc.h	(working copy)
@@ -122,7 +122,8 @@
 
 	// I think the following should be moved to BufferView. (Asger)
 	///
-	void menuNew(std::string const & argument, bool fromTemplate);
+	void menuNew(std::string const & argument, bool fromTemplate,
+		bool fromExample);
 	///
 	void open(std::string const &);
 	///
Index: src/LyXRC.cpp
===================================================================
--- src/LyXRC.cpp	(revision 21744)
+++ src/LyXRC.cpp	(working copy)
@@ -92,6 +92,7 @@
 	{ "\\display_graphics", LyXRC::RC_DISPLAY_GRAPHICS },
 	{ "\\document_path", LyXRC::RC_DOCUMENTPATH },
 	{ "\\escape_chars", LyXRC::RC_ESC_CHARS },
+	{ "\\example_path", LyXRC::RC_EXAMPLEPATH },
 	{ "\\font_encoding", LyXRC::RC_FONT_ENCODING },
 	{ "\\format", LyXRC::RC_FORMAT },
 	{ "\\index_command", LyXRC::RC_INDEX_COMMAND },
@@ -705,6 +706,13 @@
 			}
 			break;
 
+		case RC_EXAMPLEPATH:
+			if (lexrc.next()) {
+				example_path = os::internal_path(lexrc.getString());
+				example_path = expandPath(example_path);
+			}
+			break;
+
 		case RC_TEMPLATEPATH:
 			if (lexrc.next()) {
 				template_path = os::internal_path(lexrc.getString());
@@ -1932,6 +1940,14 @@
 		}
 		if (tag != RC_LAST)
 			break;
+	case RC_EXAMPLEPATH:
+		if (ignore_system_lyxrc ||
+		    example_path != system_lyxrc.example_path) {
+			string const path = os::external_path(example_path);
+			os << "\\example_path \"" << path << "\"\n";
+		}
+		if (tag != RC_LAST)
+			break;
 	case RC_TEMPLATEPATH:
 		if (ignore_system_lyxrc ||
 		    template_path != system_lyxrc.template_path) {
@@ -2411,6 +2427,10 @@
 		str = _("Specify additional chars that can be part of a word.");
 		break;
 
+	case RC_EXAMPLEPATH:
+		str = _("The path that LyX will set when offering to choose an example. An empty value selects the directory LyX was started from.");
+		break;
+
 	case RC_FONT_ENCODING:
 		str = _("The font encoding used for the LaTeX2e fontenc package. T1 is highly recommended for non-English languages.");
 		break;
Index: src/LyXRC.h
===================================================================
--- src/LyXRC.h	(revision 21744)
+++ src/LyXRC.h	(working copy)
@@ -63,6 +63,7 @@
 		RC_DISPLAY_GRAPHICS,
 		RC_DOCUMENTPATH,
 		RC_ESC_CHARS,
+		RC_EXAMPLEPATH,
 		RC_FONT_ENCODING,
 		RC_FORMAT,
 		RC_INDEX_COMMAND,
@@ -226,6 +227,8 @@
 	///
 	std::string document_path;
 	///
+	std::string example_path;
+	///
 	std::string template_path;
 	///
 	std::string tempdir_path;

Reply via email to