2006-03-05 17:24:44 +00:00
|
|
|
// -*- C++ -*-
|
|
|
|
/**
|
2007-08-31 05:53:55 +00:00
|
|
|
* \file GuiDocument.h
|
2006-03-05 17:24:44 +00:00
|
|
|
* This file is part of LyX, the document processor.
|
|
|
|
* Licence details can be found in the file COPYING.
|
|
|
|
*
|
|
|
|
* \author Edwin Leuven
|
This is the last of a series of patches that merges the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the GUI for managing modules.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20282 a592a061-630c-0410-9148-cb99ea01b6c8
2007-09-15 01:55:09 +00:00
|
|
|
* \author Richard Heck (modules)
|
2006-03-05 17:24:44 +00:00
|
|
|
*
|
|
|
|
* Full author contact details are available in file CREDITS.
|
|
|
|
*/
|
|
|
|
|
2007-08-31 22:16:11 +00:00
|
|
|
#ifndef GUIDOCUMENT_H
|
|
|
|
#define GUIDOCUMENT_H
|
2006-03-05 17:24:44 +00:00
|
|
|
|
This commit changes the way individual LyXModule's are represented, both internally and in the .lyx files. The earlier version represented them by their `descriptive name', e.g., "Endnote" or "Theorems (AMS)", these being the same names used in the UI. This was a mistake, as becomes readily apparent when one starts to think about translating these strings. The modules ought to be represented by their filename, without the extension, just as TextClass's are.
The changes that accomplish this part are in ModuleList.{h,cpp}, configure.py, and the *.module files themselves. This is a format change, and the lyx2lyx is in those files.
By itself, that change would not be major, except for the fact that we do not want the module to be represented in the UI by its filename---e.g., theorems-std---but rather by a descriptive name, such as "Theorems". But that change turns out to be wholly non-trivial. The mechanism for choosing modules was the same as---indeed, was borrowed from---that in GuiCitation: You get a list of modules, and choosing them involves moving strings from one QListView to another. The models underlying these views are just QStringListModels, which means that, when you want to know what modules have been selected, you see what strings are in the "selected" QListView. But these are just the descriptive names, and we can't look up a module by its descriptive name if it's been translated. That, indeed, was the whole point of the change to the new representation.
So, we need a more complicated model underlying the QListView, one that will pair an identifying string---the filename minus the extension, in this case---with each item. This turns out not to be terribly difficult, though it took rather a while for me to understand why it's not difficult. There are two parts:
(i) GuiSelectionManger gets re-written to use any QAbstractListModel, not just a QStringListModel. This actually seems to improve the code, independently.
(ii) We then subclass QAbstractListModel to get the associated ID string, using the Qt::UserRole slot associated with each item to store its ID. This would be almost completely trivial if QAbstractListItem::itemData() included the QVariant associated with this role, but it doesn't, so there are some additional hoops through which to jump.
The new model, a GuiIdListModel, is defined in the files by that name. The changes in GuiSelectionManger.{h,cpp} make it more abstract; the changes in GuiDocument.{h,cpp} adapt it to the new framework.
I've also updated the module documenation to accord with this change.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22501 a592a061-630c-0410-9148-cb99ea01b6c8
2008-01-12 04:28:12 +00:00
|
|
|
#include "BufferParams.h"
|
2007-04-24 19:37:34 +00:00
|
|
|
#include "BulletsModule.h"
|
This commit changes the way individual LyXModule's are represented, both internally and in the .lyx files. The earlier version represented them by their `descriptive name', e.g., "Endnote" or "Theorems (AMS)", these being the same names used in the UI. This was a mistake, as becomes readily apparent when one starts to think about translating these strings. The modules ought to be represented by their filename, without the extension, just as TextClass's are.
The changes that accomplish this part are in ModuleList.{h,cpp}, configure.py, and the *.module files themselves. This is a format change, and the lyx2lyx is in those files.
By itself, that change would not be major, except for the fact that we do not want the module to be represented in the UI by its filename---e.g., theorems-std---but rather by a descriptive name, such as "Theorems". But that change turns out to be wholly non-trivial. The mechanism for choosing modules was the same as---indeed, was borrowed from---that in GuiCitation: You get a list of modules, and choosing them involves moving strings from one QListView to another. The models underlying these views are just QStringListModels, which means that, when you want to know what modules have been selected, you see what strings are in the "selected" QListView. But these are just the descriptive names, and we can't look up a module by its descriptive name if it's been translated. That, indeed, was the whole point of the change to the new representation.
So, we need a more complicated model underlying the QListView, one that will pair an identifying string---the filename minus the extension, in this case---with each item. This turns out not to be terribly difficult, though it took rather a while for me to understand why it's not difficult. There are two parts:
(i) GuiSelectionManger gets re-written to use any QAbstractListModel, not just a QStringListModel. This actually seems to improve the code, independently.
(ii) We then subclass QAbstractListModel to get the associated ID string, using the Qt::UserRole slot associated with each item to store its ID. This would be almost completely trivial if QAbstractListItem::itemData() included the QVariant associated with this role, but it doesn't, so there are some additional hoops through which to jump.
The new model, a GuiIdListModel, is defined in the files by that name. The changes in GuiSelectionManger.{h,cpp} make it more abstract; the changes in GuiDocument.{h,cpp} adapt it to the new framework.
I've also updated the module documenation to accord with this change.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22501 a592a061-630c-0410-9148-cb99ea01b6c8
2008-01-12 04:28:12 +00:00
|
|
|
#include "GuiDialog.h"
|
|
|
|
#include "GuiIdListModel.h"
|
2007-10-06 22:43:21 +00:00
|
|
|
|
2010-04-02 22:11:50 +00:00
|
|
|
#include "ui_BiblioUi.h"
|
|
|
|
#include "ui_ColorUi.h"
|
2007-08-11 15:48:15 +00:00
|
|
|
#include "ui_DocumentUi.h"
|
|
|
|
#include "ui_FontUi.h"
|
|
|
|
#include "ui_LanguageUi.h"
|
2010-04-02 22:11:50 +00:00
|
|
|
#include "ui_LaTeXUi.h"
|
|
|
|
#include "ui_ListingsSettingsUi.h"
|
A UI for document-local layout information. LyX has supported this for a
while, but without any UI for it. (There has been local layout in the
Customization manual for a long time, in fact.)
Yes, this is an advanced feature. But, absent a layout editor, it is the
one thing that will make it easier, and possible, for "normal users" to
experiment with layout without having to go through reconfiguration,
etc, etc. To keep too many people from shooting themselves, we validate
the layout information before allowing the user to apply it.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35061 a592a061-630c-0410-9148-cb99ea01b6c8
2010-08-05 22:47:42 +00:00
|
|
|
#include "ui_LocalLayoutUi.h"
|
2007-08-11 15:48:15 +00:00
|
|
|
#include "ui_MarginsUi.h"
|
2010-04-02 22:11:50 +00:00
|
|
|
#include "ui_MasterChildUi.h"
|
|
|
|
#include "ui_MathsUi.h"
|
2008-10-19 01:21:59 +00:00
|
|
|
#include "ui_ModulesUi.h"
|
2010-04-02 22:11:50 +00:00
|
|
|
#include "ui_NumberingUi.h"
|
2009-04-10 11:06:53 +00:00
|
|
|
#include "ui_OutputUi.h"
|
2010-04-02 22:11:50 +00:00
|
|
|
#include "ui_PageLayoutUi.h"
|
|
|
|
#include "ui_PDFSupportUi.h"
|
|
|
|
#include "ui_PreambleUi.h"
|
|
|
|
#include "ui_TextLayoutUi.h"
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
namespace lyx {
|
|
|
|
|
|
|
|
class BufferParams;
|
2009-02-12 15:07:22 +00:00
|
|
|
class LayoutModuleList;
|
2007-10-06 22:43:21 +00:00
|
|
|
class TextClass;
|
|
|
|
|
|
|
|
namespace frontend {
|
|
|
|
|
2010-02-15 23:17:45 +00:00
|
|
|
class FloatPlacement;
|
2007-10-06 22:43:21 +00:00
|
|
|
class GuiBranches;
|
2009-04-16 07:29:01 +00:00
|
|
|
class GuiIndices;
|
2008-10-16 17:29:01 +00:00
|
|
|
class ModuleSelectionManager;
|
2007-10-06 22:43:21 +00:00
|
|
|
class PreambleModule;
|
A UI for document-local layout information. LyX has supported this for a
while, but without any UI for it. (There has been local layout in the
Customization manual for a long time, in fact.)
Yes, this is an advanced feature. But, absent a layout editor, it is the
one thing that will make it easier, and possible, for "normal users" to
experiment with layout without having to go through reconfiguration,
etc, etc. To keep too many people from shooting themselves, we validate
the layout information before allowing the user to apply it.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35061 a592a061-630c-0410-9148-cb99ea01b6c8
2010-08-05 22:47:42 +00:00
|
|
|
class LocalLayout;
|
2007-10-06 22:43:21 +00:00
|
|
|
|
|
|
|
///
|
|
|
|
typedef void const * BufferId;
|
|
|
|
|
2007-04-24 19:37:34 +00:00
|
|
|
template<class UI>
|
2007-08-31 22:16:11 +00:00
|
|
|
class UiWidget : public QWidget, public UI
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
public:
|
2007-10-06 22:43:21 +00:00
|
|
|
UiWidget(QWidget * parent = 0) : QWidget(parent) { UI::setupUi(this); }
|
2007-04-24 19:37:34 +00:00
|
|
|
};
|
2006-03-05 17:24:44 +00:00
|
|
|
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2007-10-09 19:34:27 +00:00
|
|
|
class GuiDocument : public GuiDialog, public Ui::DocumentUi
|
2007-09-05 20:33:29 +00:00
|
|
|
{
|
2007-04-24 19:37:34 +00:00
|
|
|
Q_OBJECT
|
|
|
|
public:
|
2007-11-23 09:44:02 +00:00
|
|
|
GuiDocument(GuiView & lv);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2008-10-14 16:59:28 +00:00
|
|
|
void paramsToDialog();
|
2007-04-24 19:37:34 +00:00
|
|
|
void updateFontsize(std::string const &, std::string const &);
|
2009-04-06 06:58:30 +00:00
|
|
|
void updateFontlist();
|
2009-04-10 11:06:53 +00:00
|
|
|
void updateDefaultFormat();
|
2012-03-01 00:41:30 +00:00
|
|
|
void updateEngineType(std::string const &, CiteEngineType const &);
|
2007-04-24 19:37:34 +00:00
|
|
|
void updatePagestyle(std::string const &, std::string const &);
|
2010-01-07 10:01:26 +00:00
|
|
|
bool isChildIncluded(std::string const &);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2008-10-20 19:53:15 +00:00
|
|
|
///
|
|
|
|
BufferParams const & params() const { return bp_; }
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2008-05-15 08:41:17 +00:00
|
|
|
private Q_SLOTS:
|
2007-04-24 19:37:34 +00:00
|
|
|
void updateNumbering();
|
|
|
|
void change_adaptor();
|
2010-01-07 10:01:26 +00:00
|
|
|
void includeonlyClicked(QTreeWidgetItem * item, int);
|
2008-09-20 12:07:18 +00:00
|
|
|
void setListingsMessage();
|
2007-04-24 19:37:34 +00:00
|
|
|
void saveDefaultClicked();
|
|
|
|
void useDefaultsClicked();
|
|
|
|
void setLSpacing(int);
|
2010-05-18 02:56:36 +00:00
|
|
|
void setMargins();
|
2009-07-16 08:39:22 +00:00
|
|
|
void papersizeChanged(int);
|
2008-02-19 05:39:36 +00:00
|
|
|
void setColSep();
|
2007-04-24 19:37:34 +00:00
|
|
|
void setCustomMargins(bool);
|
2009-11-29 14:43:00 +00:00
|
|
|
void fontencChanged(int);
|
2007-04-24 19:37:34 +00:00
|
|
|
void romanChanged(int);
|
|
|
|
void sansChanged(int);
|
|
|
|
void ttChanged(int);
|
2013-02-11 14:02:24 +00:00
|
|
|
void fontOsfToggled(bool state);
|
|
|
|
void fontScToggled(bool state);
|
2009-07-19 21:13:27 +00:00
|
|
|
void setIndent(int);
|
|
|
|
void enableIndent(bool);
|
2007-04-24 19:37:34 +00:00
|
|
|
void setSkip(int);
|
|
|
|
void enableSkip(bool);
|
2008-03-10 21:31:22 +00:00
|
|
|
void browseLayout();
|
2008-04-28 16:38:56 +00:00
|
|
|
void browseMaster();
|
2007-04-24 19:37:34 +00:00
|
|
|
void classChanged();
|
2011-02-03 14:17:31 +00:00
|
|
|
void languagePackageChanged(int);
|
2011-12-12 16:04:00 +00:00
|
|
|
void biblioChanged();
|
2009-05-22 07:20:00 +00:00
|
|
|
void bibtexChanged(int);
|
2012-01-09 13:16:38 +00:00
|
|
|
void setAuthorYear(bool);
|
|
|
|
void setNumerical(bool);
|
This is the last of a series of patches that merges the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the GUI for managing modules.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20282 a592a061-630c-0410-9148-cb99ea01b6c8
2007-09-15 01:55:09 +00:00
|
|
|
void updateModuleInfo();
|
2008-10-20 19:31:05 +00:00
|
|
|
void modulesChanged();
|
2009-04-11 21:40:11 +00:00
|
|
|
void changeBackgroundColor();
|
|
|
|
void deleteBackgroundColor();
|
2010-04-02 23:39:36 +00:00
|
|
|
void changeFontColor();
|
|
|
|
void deleteFontColor();
|
2010-03-31 00:46:50 +00:00
|
|
|
void changeNoteFontColor();
|
|
|
|
void deleteNoteFontColor();
|
2010-04-08 00:14:08 +00:00
|
|
|
void changeBoxBackgroundColor();
|
|
|
|
void deleteBoxBackgroundColor();
|
2012-06-08 03:39:00 +00:00
|
|
|
void languageChanged(int);
|
2010-11-26 09:42:03 +00:00
|
|
|
void osFontsChanged(bool);
|
2012-09-22 15:44:00 +00:00
|
|
|
void mathFontChanged(int);
|
2009-07-10 06:49:51 +00:00
|
|
|
void branchesRename(docstring const &, docstring const &);
|
2013-03-02 09:03:08 +00:00
|
|
|
void allPackagesAuto();
|
|
|
|
void allPackagesAlways();
|
|
|
|
void allPackagesNot();
|
2007-04-24 19:37:34 +00:00
|
|
|
private:
|
2008-09-20 12:07:18 +00:00
|
|
|
/// validate listings parameters and return an error message, if any
|
|
|
|
QString validateListingsParameters();
|
|
|
|
|
2007-04-24 19:37:34 +00:00
|
|
|
UiWidget<Ui::TextLayoutUi> *textLayoutModule;
|
2010-01-07 10:01:26 +00:00
|
|
|
UiWidget<Ui::MasterChildUi> *masterChildModule;
|
2007-04-24 19:37:34 +00:00
|
|
|
UiWidget<Ui::FontUi> *fontModule;
|
|
|
|
UiWidget<Ui::PageLayoutUi> *pageLayoutModule;
|
|
|
|
UiWidget<Ui::MarginsUi> *marginsModule;
|
|
|
|
UiWidget<Ui::LanguageUi> *langModule;
|
2010-04-02 22:11:50 +00:00
|
|
|
UiWidget<Ui::ColorUi> *colorModule;
|
2007-04-24 19:37:34 +00:00
|
|
|
UiWidget<Ui::NumberingUi> *numberingModule;
|
|
|
|
UiWidget<Ui::BiblioUi> *biblioModule;
|
|
|
|
UiWidget<Ui::MathsUi> *mathsModule;
|
|
|
|
UiWidget<Ui::LaTeXUi> *latexModule;
|
2007-09-20 22:31:18 +00:00
|
|
|
UiWidget<Ui::PDFSupportUi> *pdfSupportModule;
|
2008-10-19 01:21:59 +00:00
|
|
|
UiWidget<Ui::ModulesUi> *modulesModule;
|
2009-04-10 11:06:53 +00:00
|
|
|
UiWidget<Ui::OutputUi> *outputModule;
|
2009-07-20 08:09:32 +00:00
|
|
|
UiWidget<Ui::ListingsSettingsUi> *listingsModule;
|
2009-04-16 07:29:01 +00:00
|
|
|
PreambleModule * preambleModule;
|
A UI for document-local layout information. LyX has supported this for a
while, but without any UI for it. (There has been local layout in the
Customization manual for a long time, in fact.)
Yes, this is an advanced feature. But, absent a layout editor, it is the
one thing that will make it easier, and possible, for "normal users" to
experiment with layout without having to go through reconfiguration,
etc, etc. To keep too many people from shooting themselves, we validate
the layout information before allowing the user to apply it.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35061 a592a061-630c-0410-9148-cb99ea01b6c8
2010-08-05 22:47:42 +00:00
|
|
|
LocalLayout * localLayout;
|
2011-12-03 22:15:11 +00:00
|
|
|
|
2009-04-16 07:29:01 +00:00
|
|
|
GuiBranches * branchesModule;
|
|
|
|
GuiIndices * indicesModule;
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
BulletsModule * bulletsModule;
|
|
|
|
FloatPlacement * floatModule;
|
|
|
|
|
2008-10-16 17:29:01 +00:00
|
|
|
ModuleSelectionManager * selectionManager;
|
This is the last of a series of patches that merges the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the GUI for managing modules.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20282 a592a061-630c-0410-9148-cb99ea01b6c8
2007-09-15 01:55:09 +00:00
|
|
|
|
|
|
|
/// Available modules
|
2008-02-28 21:04:55 +00:00
|
|
|
GuiIdListModel * availableModel() { return &modules_av_model_; }
|
This is the last of a series of patches that merges the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the GUI for managing modules.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20282 a592a061-630c-0410-9148-cb99ea01b6c8
2007-09-15 01:55:09 +00:00
|
|
|
/// Selected modules
|
2008-02-28 21:04:55 +00:00
|
|
|
GuiIdListModel * selectedModel() { return &modules_sel_model_; }
|
2008-05-15 08:41:17 +00:00
|
|
|
|
2006-03-05 17:24:44 +00:00
|
|
|
/// Apply changes
|
2007-09-03 20:28:26 +00:00
|
|
|
void applyView();
|
2006-03-05 17:24:44 +00:00
|
|
|
/// update
|
2007-09-11 18:33:42 +00:00
|
|
|
void updateContents();
|
This commit changes the way individual LyXModule's are represented, both internally and in the .lyx files. The earlier version represented them by their `descriptive name', e.g., "Endnote" or "Theorems (AMS)", these being the same names used in the UI. This was a mistake, as becomes readily apparent when one starts to think about translating these strings. The modules ought to be represented by their filename, without the extension, just as TextClass's are.
The changes that accomplish this part are in ModuleList.{h,cpp}, configure.py, and the *.module files themselves. This is a format change, and the lyx2lyx is in those files.
By itself, that change would not be major, except for the fact that we do not want the module to be represented in the UI by its filename---e.g., theorems-std---but rather by a descriptive name, such as "Theorems". But that change turns out to be wholly non-trivial. The mechanism for choosing modules was the same as---indeed, was borrowed from---that in GuiCitation: You get a list of modules, and choosing them involves moving strings from one QListView to another. The models underlying these views are just QStringListModels, which means that, when you want to know what modules have been selected, you see what strings are in the "selected" QListView. But these are just the descriptive names, and we can't look up a module by its descriptive name if it's been translated. That, indeed, was the whole point of the change to the new representation.
So, we need a more complicated model underlying the QListView, one that will pair an identifying string---the filename minus the extension, in this case---with each item. This turns out not to be terribly difficult, though it took rather a while for me to understand why it's not difficult. There are two parts:
(i) GuiSelectionManger gets re-written to use any QAbstractListModel, not just a QStringListModel. This actually seems to improve the code, independently.
(ii) We then subclass QAbstractListModel to get the associated ID string, using the Qt::UserRole slot associated with each item to store its ID. This would be almost completely trivial if QAbstractListItem::itemData() included the QVariant associated with this role, but it doesn't, so there are some additional hoops through which to jump.
The new model, a GuiIdListModel, is defined in the files by that name. The changes in GuiSelectionManger.{h,cpp} make it more abstract; the changes in GuiDocument.{h,cpp} adapt it to the new framework.
I've also updated the module documenation to accord with this change.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22501 a592a061-630c-0410-9148-cb99ea01b6c8
2008-01-12 04:28:12 +00:00
|
|
|
///
|
|
|
|
void updateAvailableModules();
|
|
|
|
///
|
|
|
|
void updateSelectedModules();
|
2010-01-07 10:01:26 +00:00
|
|
|
///
|
|
|
|
void updateIncludeonlys();
|
2006-03-05 17:24:44 +00:00
|
|
|
/// save as default template
|
|
|
|
void saveDocDefault();
|
|
|
|
/// reset to default params
|
|
|
|
void useClassDefaults();
|
2008-03-01 22:08:16 +00:00
|
|
|
///
|
|
|
|
void setLayoutComboByIDString(std::string const & idString);
|
2010-04-21 15:20:31 +00:00
|
|
|
|
This is the last of a series of patches that merges the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the GUI for managing modules.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20282 a592a061-630c-0410-9148-cb99ea01b6c8
2007-09-15 01:55:09 +00:00
|
|
|
/// available modules
|
2008-02-28 21:04:55 +00:00
|
|
|
GuiIdListModel modules_av_model_;
|
This is the last of a series of patches that merges the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the GUI for managing modules.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20282 a592a061-630c-0410-9148-cb99ea01b6c8
2007-09-15 01:55:09 +00:00
|
|
|
/// selected modules
|
2008-02-28 21:04:55 +00:00
|
|
|
GuiIdListModel modules_sel_model_;
|
This is the last of a series of patches that merges the layout modules development in personal/branches/rgheck back into the tree.
Design goal: Allow the use of layout "modules", which are to LaTeX packages as layout files are to LaTeX document classes. Thus, one could have a module that defined certain character styles, environments, commands, or what have you, and include it in various documents, each of which uses a different document class, without having to modify the layout files themselves. For example, a theorems.module could be used with article.layout to provide support for theorem-type environments, without having to modify article.layout itself, and the same module could be used with book.layout, etc.
This patch adds the GUI for managing modules.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20282 a592a061-630c-0410-9148-cb99ea01b6c8
2007-09-15 01:55:09 +00:00
|
|
|
|
2007-07-27 18:17:00 +00:00
|
|
|
/// return false if validate_listings_params returns error
|
2007-09-05 20:33:29 +00:00
|
|
|
bool isValid();
|
2007-10-06 22:43:21 +00:00
|
|
|
|
2010-11-26 18:32:29 +00:00
|
|
|
/// font family names for BufferParams::fonts_default_family
|
2007-10-06 22:43:21 +00:00
|
|
|
static char const * const fontfamilies[5];
|
|
|
|
/// GUI names corresponding fontfamilies
|
|
|
|
static char const * fontfamilies_gui[5];
|
|
|
|
///
|
|
|
|
bool initialiseParams(std::string const & data);
|
|
|
|
///
|
|
|
|
void clearParams();
|
|
|
|
///
|
|
|
|
void dispatchParams();
|
|
|
|
///
|
2008-10-20 20:38:40 +00:00
|
|
|
void modulesToParams(BufferParams &);
|
|
|
|
///
|
2007-10-06 22:43:21 +00:00
|
|
|
bool isBufferDependent() const { return true; }
|
|
|
|
/// always true since we don't manipulate document contents
|
|
|
|
bool canApply() const { return true; }
|
|
|
|
///
|
2008-02-28 21:04:55 +00:00
|
|
|
DocumentClass const & documentClass() const;
|
2007-10-06 22:43:21 +00:00
|
|
|
///
|
|
|
|
BufferParams & params() { return bp_; }
|
|
|
|
///
|
|
|
|
BufferId id() const;
|
This commit changes the way individual LyXModule's are represented, both internally and in the .lyx files. The earlier version represented them by their `descriptive name', e.g., "Endnote" or "Theorems (AMS)", these being the same names used in the UI. This was a mistake, as becomes readily apparent when one starts to think about translating these strings. The modules ought to be represented by their filename, without the extension, just as TextClass's are.
The changes that accomplish this part are in ModuleList.{h,cpp}, configure.py, and the *.module files themselves. This is a format change, and the lyx2lyx is in those files.
By itself, that change would not be major, except for the fact that we do not want the module to be represented in the UI by its filename---e.g., theorems-std---but rather by a descriptive name, such as "Theorems". But that change turns out to be wholly non-trivial. The mechanism for choosing modules was the same as---indeed, was borrowed from---that in GuiCitation: You get a list of modules, and choosing them involves moving strings from one QListView to another. The models underlying these views are just QStringListModels, which means that, when you want to know what modules have been selected, you see what strings are in the "selected" QListView. But these are just the descriptive names, and we can't look up a module by its descriptive name if it's been translated. That, indeed, was the whole point of the change to the new representation.
So, we need a more complicated model underlying the QListView, one that will pair an identifying string---the filename minus the extension, in this case---with each item. This turns out not to be terribly difficult, though it took rather a while for me to understand why it's not difficult. There are two parts:
(i) GuiSelectionManger gets re-written to use any QAbstractListModel, not just a QStringListModel. This actually seems to improve the code, independently.
(ii) We then subclass QAbstractListModel to get the associated ID string, using the Qt::UserRole slot associated with each item to store its ID. This would be almost completely trivial if QAbstractListItem::itemData() included the QVariant associated with this role, but it doesn't, so there are some additional hoops through which to jump.
The new model, a GuiIdListModel, is defined in the files by that name. The changes in GuiSelectionManger.{h,cpp} make it more abstract; the changes in GuiDocument.{h,cpp} adapt it to the new framework.
I've also updated the module documenation to accord with this change.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22501 a592a061-630c-0410-9148-cb99ea01b6c8
2008-01-12 04:28:12 +00:00
|
|
|
///
|
|
|
|
struct modInfoStruct {
|
2008-04-17 03:27:20 +00:00
|
|
|
QString name;
|
This commit changes the way individual LyXModule's are represented, both internally and in the .lyx files. The earlier version represented them by their `descriptive name', e.g., "Endnote" or "Theorems (AMS)", these being the same names used in the UI. This was a mistake, as becomes readily apparent when one starts to think about translating these strings. The modules ought to be represented by their filename, without the extension, just as TextClass's are.
The changes that accomplish this part are in ModuleList.{h,cpp}, configure.py, and the *.module files themselves. This is a format change, and the lyx2lyx is in those files.
By itself, that change would not be major, except for the fact that we do not want the module to be represented in the UI by its filename---e.g., theorems-std---but rather by a descriptive name, such as "Theorems". But that change turns out to be wholly non-trivial. The mechanism for choosing modules was the same as---indeed, was borrowed from---that in GuiCitation: You get a list of modules, and choosing them involves moving strings from one QListView to another. The models underlying these views are just QStringListModels, which means that, when you want to know what modules have been selected, you see what strings are in the "selected" QListView. But these are just the descriptive names, and we can't look up a module by its descriptive name if it's been translated. That, indeed, was the whole point of the change to the new representation.
So, we need a more complicated model underlying the QListView, one that will pair an identifying string---the filename minus the extension, in this case---with each item. This turns out not to be terribly difficult, though it took rather a while for me to understand why it's not difficult. There are two parts:
(i) GuiSelectionManger gets re-written to use any QAbstractListModel, not just a QStringListModel. This actually seems to improve the code, independently.
(ii) We then subclass QAbstractListModel to get the associated ID string, using the Qt::UserRole slot associated with each item to store its ID. This would be almost completely trivial if QAbstractListItem::itemData() included the QVariant associated with this role, but it doesn't, so there are some additional hoops through which to jump.
The new model, a GuiIdListModel, is defined in the files by that name. The changes in GuiSelectionManger.{h,cpp} make it more abstract; the changes in GuiDocument.{h,cpp} adapt it to the new framework.
I've also updated the module documenation to accord with this change.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22501 a592a061-630c-0410-9148-cb99ea01b6c8
2008-01-12 04:28:12 +00:00
|
|
|
std::string id;
|
2008-04-17 03:27:20 +00:00
|
|
|
QString description;
|
This commit changes the way individual LyXModule's are represented, both internally and in the .lyx files. The earlier version represented them by their `descriptive name', e.g., "Endnote" or "Theorems (AMS)", these being the same names used in the UI. This was a mistake, as becomes readily apparent when one starts to think about translating these strings. The modules ought to be represented by their filename, without the extension, just as TextClass's are.
The changes that accomplish this part are in ModuleList.{h,cpp}, configure.py, and the *.module files themselves. This is a format change, and the lyx2lyx is in those files.
By itself, that change would not be major, except for the fact that we do not want the module to be represented in the UI by its filename---e.g., theorems-std---but rather by a descriptive name, such as "Theorems". But that change turns out to be wholly non-trivial. The mechanism for choosing modules was the same as---indeed, was borrowed from---that in GuiCitation: You get a list of modules, and choosing them involves moving strings from one QListView to another. The models underlying these views are just QStringListModels, which means that, when you want to know what modules have been selected, you see what strings are in the "selected" QListView. But these are just the descriptive names, and we can't look up a module by its descriptive name if it's been translated. That, indeed, was the whole point of the change to the new representation.
So, we need a more complicated model underlying the QListView, one that will pair an identifying string---the filename minus the extension, in this case---with each item. This turns out not to be terribly difficult, though it took rather a while for me to understand why it's not difficult. There are two parts:
(i) GuiSelectionManger gets re-written to use any QAbstractListModel, not just a QStringListModel. This actually seems to improve the code, independently.
(ii) We then subclass QAbstractListModel to get the associated ID string, using the Qt::UserRole slot associated with each item to store its ID. This would be almost completely trivial if QAbstractListItem::itemData() included the QVariant associated with this role, but it doesn't, so there are some additional hoops through which to jump.
The new model, a GuiIdListModel, is defined in the files by that name. The changes in GuiSelectionManger.{h,cpp} make it more abstract; the changes in GuiDocument.{h,cpp} adapt it to the new framework.
I've also updated the module documenation to accord with this change.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22501 a592a061-630c-0410-9148-cb99ea01b6c8
2008-01-12 04:28:12 +00:00
|
|
|
};
|
2007-10-06 22:43:21 +00:00
|
|
|
/// List of available modules
|
2008-10-14 14:04:21 +00:00
|
|
|
std::list<modInfoStruct> const & getModuleInfo();
|
2007-10-06 22:43:21 +00:00
|
|
|
/// Modules in use in current buffer
|
2008-10-14 14:04:21 +00:00
|
|
|
std::list<modInfoStruct> const getSelectedModules();
|
2009-04-06 06:58:30 +00:00
|
|
|
///
|
2008-10-23 00:27:03 +00:00
|
|
|
std::list<modInfoStruct> const getProvidedModules();
|
|
|
|
///
|
2011-12-03 22:15:11 +00:00
|
|
|
std::list<modInfoStruct> const
|
2009-02-12 15:07:22 +00:00
|
|
|
makeModuleInfo(LayoutModuleList const & mods);
|
2007-10-06 22:43:21 +00:00
|
|
|
///
|
|
|
|
void setLanguage() const;
|
|
|
|
///
|
|
|
|
void saveAsDefault() const;
|
|
|
|
/// does this font provide Old Style figures?
|
2012-08-16 11:23:39 +00:00
|
|
|
bool providesOSF(QString const & font) const;
|
2007-10-06 22:43:21 +00:00
|
|
|
/// does this font provide true Small Caps?
|
2012-08-16 11:23:39 +00:00
|
|
|
bool providesSC(QString const & font) const;
|
2013-02-11 14:02:24 +00:00
|
|
|
/** does this font provide OSF and Small Caps only via
|
|
|
|
* a single, undifferentiated expert option?
|
|
|
|
*/
|
|
|
|
bool hasMonolithicExpertSet(QString const & font) const;
|
2007-10-06 22:43:21 +00:00
|
|
|
/// does this font provide size adjustment?
|
2012-08-16 11:23:39 +00:00
|
|
|
bool providesScale(QString const & font) const;
|
2012-09-22 15:44:00 +00:00
|
|
|
/// does this font provide an alternative without math?
|
|
|
|
bool providesNoMath(QString const & font) const;
|
2009-07-11 09:37:28 +00:00
|
|
|
///
|
|
|
|
void executeBranchRenaming() const;
|
2009-07-16 08:39:22 +00:00
|
|
|
///
|
|
|
|
void setCustomPapersize(bool custom);
|
2007-10-06 22:43:21 +00:00
|
|
|
private:
|
|
|
|
///
|
This commit changes the way individual LyXModule's are represented, both internally and in the .lyx files. The earlier version represented them by their `descriptive name', e.g., "Endnote" or "Theorems (AMS)", these being the same names used in the UI. This was a mistake, as becomes readily apparent when one starts to think about translating these strings. The modules ought to be represented by their filename, without the extension, just as TextClass's are.
The changes that accomplish this part are in ModuleList.{h,cpp}, configure.py, and the *.module files themselves. This is a format change, and the lyx2lyx is in those files.
By itself, that change would not be major, except for the fact that we do not want the module to be represented in the UI by its filename---e.g., theorems-std---but rather by a descriptive name, such as "Theorems". But that change turns out to be wholly non-trivial. The mechanism for choosing modules was the same as---indeed, was borrowed from---that in GuiCitation: You get a list of modules, and choosing them involves moving strings from one QListView to another. The models underlying these views are just QStringListModels, which means that, when you want to know what modules have been selected, you see what strings are in the "selected" QListView. But these are just the descriptive names, and we can't look up a module by its descriptive name if it's been translated. That, indeed, was the whole point of the change to the new representation.
So, we need a more complicated model underlying the QListView, one that will pair an identifying string---the filename minus the extension, in this case---with each item. This turns out not to be terribly difficult, though it took rather a while for me to understand why it's not difficult. There are two parts:
(i) GuiSelectionManger gets re-written to use any QAbstractListModel, not just a QStringListModel. This actually seems to improve the code, independently.
(ii) We then subclass QAbstractListModel to get the associated ID string, using the Qt::UserRole slot associated with each item to store its ID. This would be almost completely trivial if QAbstractListItem::itemData() included the QVariant associated with this role, but it doesn't, so there are some additional hoops through which to jump.
The new model, a GuiIdListModel, is defined in the files by that name. The changes in GuiSelectionManger.{h,cpp} make it more abstract; the changes in GuiDocument.{h,cpp} adapt it to the new framework.
I've also updated the module documenation to accord with this change.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22501 a592a061-630c-0410-9148-cb99ea01b6c8
2008-01-12 04:28:12 +00:00
|
|
|
void loadModuleInfo();
|
2007-10-06 22:43:21 +00:00
|
|
|
///
|
2009-07-09 09:48:34 +00:00
|
|
|
void updateUnknownBranches();
|
|
|
|
///
|
2012-08-16 11:23:39 +00:00
|
|
|
void updateTexFonts();
|
|
|
|
///
|
2012-09-22 15:44:00 +00:00
|
|
|
void updateMathFonts(QString const & rm);
|
|
|
|
///
|
2012-08-16 11:23:39 +00:00
|
|
|
void updateFontOptions();
|
|
|
|
///
|
|
|
|
bool ot1() const;
|
|
|
|
///
|
2012-09-22 08:59:53 +00:00
|
|
|
bool completeFontset() const;
|
|
|
|
///
|
2012-09-22 15:44:00 +00:00
|
|
|
bool noMathFont() const;
|
|
|
|
///
|
2013-03-02 09:03:08 +00:00
|
|
|
void allPackages(int);
|
|
|
|
///
|
2007-10-06 22:43:21 +00:00
|
|
|
BufferParams bp_;
|
|
|
|
/// List of names of available modules
|
2008-10-14 14:04:21 +00:00
|
|
|
std::list<modInfoStruct> moduleNames_;
|
2009-07-11 09:37:28 +00:00
|
|
|
///
|
|
|
|
std::map<docstring, docstring> changedBranches_;
|
2010-01-07 10:01:26 +00:00
|
|
|
///
|
|
|
|
std::list<std::string> includeonlys_;
|
2011-12-12 16:38:04 +00:00
|
|
|
///
|
|
|
|
bool biblioChanged_;
|
2014-12-21 18:08:41 +00:00
|
|
|
/// Track if a non-module document param changed
|
|
|
|
bool nonModuleChanged_;
|
2006-03-05 17:24:44 +00:00
|
|
|
};
|
|
|
|
|
2007-05-14 12:09:14 +00:00
|
|
|
|
|
|
|
class PreambleModule : public UiWidget<Ui::PreambleUi>
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
PreambleModule();
|
2007-05-14 16:41:50 +00:00
|
|
|
void update(BufferParams const & params, BufferId id);
|
2007-05-14 12:09:14 +00:00
|
|
|
void apply(BufferParams & params);
|
|
|
|
|
|
|
|
Q_SIGNALS:
|
|
|
|
/// signal that something's changed in the Widget.
|
|
|
|
void changed();
|
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
private:
|
2007-05-14 12:09:14 +00:00
|
|
|
void closeEvent(QCloseEvent *);
|
|
|
|
void on_preambleTE_textChanged() { changed(); }
|
|
|
|
|
|
|
|
private:
|
2007-05-14 16:41:50 +00:00
|
|
|
typedef std::map<BufferId, std::pair<int,int> > Coords;
|
2007-05-14 12:09:14 +00:00
|
|
|
Coords preamble_coords_;
|
2007-05-14 16:41:50 +00:00
|
|
|
BufferId current_id_;
|
2007-05-14 12:09:14 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
A UI for document-local layout information. LyX has supported this for a
while, but without any UI for it. (There has been local layout in the
Customization manual for a long time, in fact.)
Yes, this is an advanced feature. But, absent a layout editor, it is the
one thing that will make it easier, and possible, for "normal users" to
experiment with layout without having to go through reconfiguration,
etc, etc. To keep too many people from shooting themselves, we validate
the layout information before allowing the user to apply it.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35061 a592a061-630c-0410-9148-cb99ea01b6c8
2010-08-05 22:47:42 +00:00
|
|
|
class LocalLayout : public UiWidget<Ui::LocalLayoutUi>
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
LocalLayout();
|
|
|
|
void update(BufferParams const & params, BufferId id);
|
|
|
|
void apply(BufferParams & params);
|
2012-04-21 20:25:38 +00:00
|
|
|
bool isValid() const { return validated_; }
|
A UI for document-local layout information. LyX has supported this for a
while, but without any UI for it. (There has been local layout in the
Customization manual for a long time, in fact.)
Yes, this is an advanced feature. But, absent a layout editor, it is the
one thing that will make it easier, and possible, for "normal users" to
experiment with layout without having to go through reconfiguration,
etc, etc. To keep too many people from shooting themselves, we validate
the layout information before allowing the user to apply it.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35061 a592a061-630c-0410-9148-cb99ea01b6c8
2010-08-05 22:47:42 +00:00
|
|
|
|
|
|
|
Q_SIGNALS:
|
|
|
|
/// signal that something's changed in the Widget.
|
|
|
|
void changed();
|
|
|
|
|
|
|
|
private:
|
|
|
|
void validate();
|
2011-05-08 00:54:17 +00:00
|
|
|
void convert();
|
A UI for document-local layout information. LyX has supported this for a
while, but without any UI for it. (There has been local layout in the
Customization manual for a long time, in fact.)
Yes, this is an advanced feature. But, absent a layout editor, it is the
one thing that will make it easier, and possible, for "normal users" to
experiment with layout without having to go through reconfiguration,
etc, etc. To keep too many people from shooting themselves, we validate
the layout information before allowing the user to apply it.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35061 a592a061-630c-0410-9148-cb99ea01b6c8
2010-08-05 22:47:42 +00:00
|
|
|
private Q_SLOTS:
|
|
|
|
void textChanged();
|
|
|
|
void validatePressed();
|
2011-05-08 00:54:17 +00:00
|
|
|
void convertPressed();
|
A UI for document-local layout information. LyX has supported this for a
while, but without any UI for it. (There has been local layout in the
Customization manual for a long time, in fact.)
Yes, this is an advanced feature. But, absent a layout editor, it is the
one thing that will make it easier, and possible, for "normal users" to
experiment with layout without having to go through reconfiguration,
etc, etc. To keep too many people from shooting themselves, we validate
the layout information before allowing the user to apply it.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35061 a592a061-630c-0410-9148-cb99ea01b6c8
2010-08-05 22:47:42 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
BufferId current_id_;
|
2012-04-21 20:25:38 +00:00
|
|
|
bool validated_;
|
A UI for document-local layout information. LyX has supported this for a
while, but without any UI for it. (There has been local layout in the
Customization manual for a long time, in fact.)
Yes, this is an advanced feature. But, absent a layout editor, it is the
one thing that will make it easier, and possible, for "normal users" to
experiment with layout without having to go through reconfiguration,
etc, etc. To keep too many people from shooting themselves, we validate
the layout information before allowing the user to apply it.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35061 a592a061-630c-0410-9148-cb99ea01b6c8
2010-08-05 22:47:42 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2006-03-05 17:24:44 +00:00
|
|
|
} // namespace frontend
|
|
|
|
} // namespace lyx
|
|
|
|
|
This commit changes the way individual LyXModule's are represented, both internally and in the .lyx files. The earlier version represented them by their `descriptive name', e.g., "Endnote" or "Theorems (AMS)", these being the same names used in the UI. This was a mistake, as becomes readily apparent when one starts to think about translating these strings. The modules ought to be represented by their filename, without the extension, just as TextClass's are.
The changes that accomplish this part are in ModuleList.{h,cpp}, configure.py, and the *.module files themselves. This is a format change, and the lyx2lyx is in those files.
By itself, that change would not be major, except for the fact that we do not want the module to be represented in the UI by its filename---e.g., theorems-std---but rather by a descriptive name, such as "Theorems". But that change turns out to be wholly non-trivial. The mechanism for choosing modules was the same as---indeed, was borrowed from---that in GuiCitation: You get a list of modules, and choosing them involves moving strings from one QListView to another. The models underlying these views are just QStringListModels, which means that, when you want to know what modules have been selected, you see what strings are in the "selected" QListView. But these are just the descriptive names, and we can't look up a module by its descriptive name if it's been translated. That, indeed, was the whole point of the change to the new representation.
So, we need a more complicated model underlying the QListView, one that will pair an identifying string---the filename minus the extension, in this case---with each item. This turns out not to be terribly difficult, though it took rather a while for me to understand why it's not difficult. There are two parts:
(i) GuiSelectionManger gets re-written to use any QAbstractListModel, not just a QStringListModel. This actually seems to improve the code, independently.
(ii) We then subclass QAbstractListModel to get the associated ID string, using the Qt::UserRole slot associated with each item to store its ID. This would be almost completely trivial if QAbstractListItem::itemData() included the QVariant associated with this role, but it doesn't, so there are some additional hoops through which to jump.
The new model, a GuiIdListModel, is defined in the files by that name. The changes in GuiSelectionManger.{h,cpp} make it more abstract; the changes in GuiDocument.{h,cpp} adapt it to the new framework.
I've also updated the module documenation to accord with this change.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22501 a592a061-630c-0410-9148-cb99ea01b6c8
2008-01-12 04:28:12 +00:00
|
|
|
#endif // GUIDOCUMENT_H
|