2006-03-05 17:24:44 +00:00
|
|
|
/**
|
2007-08-31 05:53:55 +00:00
|
|
|
* \file GuiDocument.cpp
|
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.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <config.h>
|
|
|
|
|
2007-08-31 05:53:55 +00:00
|
|
|
#include "GuiDocument.h"
|
2006-03-05 17:24:44 +00:00
|
|
|
|
2008-05-08 09:18:45 +00:00
|
|
|
#include "GuiApplication.h"
|
|
|
|
#include "GuiBranches.h"
|
|
|
|
#include "LaTeXHighlighter.h"
|
|
|
|
#include "LengthCombo.h"
|
|
|
|
#include "PanelStack.h"
|
|
|
|
#include "Validator.h"
|
|
|
|
|
2008-03-07 03:53:21 +00:00
|
|
|
#include "LayoutFile.h"
|
2007-10-06 22:43:21 +00:00
|
|
|
#include "BranchList.h"
|
|
|
|
#include "buffer_funcs.h"
|
|
|
|
#include "Buffer.h"
|
|
|
|
#include "BufferParams.h"
|
|
|
|
#include "BufferView.h"
|
2007-11-02 23:42:27 +00:00
|
|
|
#include "Color.h"
|
2007-10-06 22:43:21 +00:00
|
|
|
#include "Encoding.h"
|
2006-08-25 13:40:01 +00:00
|
|
|
#include "FloatPlacement.h"
|
2007-10-06 22:43:21 +00:00
|
|
|
#include "FuncRequest.h"
|
|
|
|
#include "Language.h"
|
|
|
|
#include "LaTeXFeatures.h"
|
2007-09-29 20:02:32 +00:00
|
|
|
#include "Layout.h"
|
2007-10-06 22:43:21 +00:00
|
|
|
#include "LyXRC.h" // defaultUnit
|
|
|
|
#include "ModuleList.h"
|
|
|
|
#include "OutputParams.h"
|
|
|
|
#include "PDFOptions.h"
|
2007-05-14 12:09:14 +00:00
|
|
|
#include "qt_helpers.h"
|
2007-10-06 22:43:21 +00:00
|
|
|
#include "Spacing.h"
|
2007-05-14 12:09:14 +00:00
|
|
|
|
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
|
|
|
#include "insets/InsetListingsParams.h"
|
2006-03-05 17:24:44 +00:00
|
|
|
|
2008-02-28 21:04:55 +00:00
|
|
|
#include "support/debug.h"
|
2007-12-05 09:23:19 +00:00
|
|
|
#include "support/FileName.h"
|
|
|
|
#include "support/filetools.h"
|
2008-05-08 09:18:45 +00:00
|
|
|
#include "support/gettext.h"
|
2006-03-05 17:24:44 +00:00
|
|
|
#include "support/lstrings.h"
|
|
|
|
|
2008-01-15 10:38:19 +00:00
|
|
|
#include "frontends/alert.h"
|
|
|
|
|
2008-05-14 10:34:19 +00:00
|
|
|
#include <QAbstractItemModel>
|
2007-05-14 12:09:14 +00:00
|
|
|
#include <QCloseEvent>
|
2007-05-14 14:23:55 +00:00
|
|
|
#include <QScrollBar>
|
2007-05-14 12:09:14 +00:00
|
|
|
#include <QTextCursor>
|
2006-03-05 17:24:44 +00:00
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
#include <sstream>
|
2006-03-05 17:24:44 +00:00
|
|
|
|
2008-04-16 16:48:12 +00:00
|
|
|
#ifdef IN
|
|
|
|
#undef IN
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2007-12-12 10:16:00 +00:00
|
|
|
using namespace std;
|
2007-12-12 19:57:42 +00:00
|
|
|
using namespace lyx::support;
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2008-01-14 19:52:16 +00:00
|
|
|
|
2008-02-28 21:04:55 +00:00
|
|
|
namespace {
|
2008-01-14 19:52:16 +00:00
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
char const * const tex_graphics[] =
|
|
|
|
{
|
|
|
|
"default", "dvips", "dvitops", "emtex",
|
|
|
|
"ln", "oztex", "textures", "none", ""
|
2007-04-30 21:01:24 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
char const * const tex_graphics_gui[] =
|
|
|
|
{
|
|
|
|
N_("Default"), "Dvips", "DVItoPS", "EmTeX",
|
|
|
|
"LN", "OzTeX", "Textures", N_("None"), ""
|
2007-06-01 17:44:04 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
char const * const tex_fonts_roman[] =
|
|
|
|
{
|
|
|
|
"default", "cmr", "lmodern", "ae", "times", "palatino",
|
|
|
|
"charter", "newcent", "bookman", "utopia", "beraserif",
|
|
|
|
"ccfonts", "chancery", ""
|
2007-04-30 21:01:24 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
char const * tex_fonts_roman_gui[] =
|
|
|
|
{
|
|
|
|
N_("Default"), N_("Computer Modern Roman"), N_("Latin Modern Roman"),
|
|
|
|
N_("AE (Almost European)"), N_("Times Roman"), N_("Palatino"),
|
|
|
|
N_("Bitstream Charter"), N_("New Century Schoolbook"), N_("Bookman"),
|
|
|
|
N_("Utopia"), N_("Bera Serif"), N_("Concrete Roman"), N_("Zapf Chancery"),
|
|
|
|
""
|
2007-04-30 21:01:24 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
char const * const tex_fonts_sans[] =
|
|
|
|
{
|
|
|
|
"default", "cmss", "lmss", "helvet", "avant", "berasans", "cmbr", ""
|
2007-04-30 21:01:24 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
char const * tex_fonts_sans_gui[] =
|
|
|
|
{
|
|
|
|
N_("Default"), N_("Computer Modern Sans"), N_("Latin Modern Sans"),
|
|
|
|
N_("Helvetica"), N_("Avant Garde"), N_("Bera Sans"), N_("CM Bright"), ""
|
2007-04-30 21:01:24 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
char const * const tex_fonts_monospaced[] =
|
|
|
|
{
|
|
|
|
"default", "cmtt", "lmtt", "courier", "beramono", "luximono", "cmtl", ""
|
2007-04-30 21:01:24 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
char const * tex_fonts_monospaced_gui[] =
|
|
|
|
{
|
|
|
|
N_("Default"), N_("Computer Modern Typewriter"),
|
|
|
|
N_("Latin Modern Typewriter"), N_("Courier"), N_("Bera Mono"),
|
|
|
|
N_("LuxiMono"), N_("CM Typewriter Light"), ""
|
2007-04-30 21:01:24 +00:00
|
|
|
};
|
|
|
|
|
2007-06-01 17:44:04 +00:00
|
|
|
|
|
|
|
vector<pair<string, lyx::docstring> > pagestyles;
|
|
|
|
|
|
|
|
|
2008-02-28 21:04:55 +00:00
|
|
|
} // anonymous namespace
|
|
|
|
|
2007-04-25 10:25:37 +00:00
|
|
|
namespace lyx {
|
2008-02-28 21:04:55 +00:00
|
|
|
|
|
|
|
namespace {
|
|
|
|
// used when sorting the textclass list.
|
|
|
|
class less_textclass_avail_desc
|
|
|
|
: public binary_function<string, string, int>
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
int operator()(string const & lhs, string const & rhs) const
|
|
|
|
{
|
|
|
|
// Ordering criteria:
|
|
|
|
// 1. Availability of text class
|
|
|
|
// 2. Description (lexicographic)
|
2008-03-07 03:53:21 +00:00
|
|
|
LayoutFile const & tc1 = LayoutFileList::get()[lhs];
|
|
|
|
LayoutFile const & tc2 = LayoutFileList::get()[rhs];
|
2008-02-28 21:04:55 +00:00
|
|
|
return (tc1.isTeXClassAvailable() && !tc2.isTeXClassAvailable()) ||
|
|
|
|
(tc1.isTeXClassAvailable() == tc2.isTeXClassAvailable() &&
|
|
|
|
_(tc1.description()) < _(tc2.description()));
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2007-04-25 10:25:37 +00:00
|
|
|
namespace frontend {
|
|
|
|
|
2008-01-14 19:52:16 +00:00
|
|
|
|
|
|
|
///
|
|
|
|
QModelIndex getSelectedIndex(QListView * lv)
|
|
|
|
{
|
|
|
|
QModelIndex retval = QModelIndex();
|
|
|
|
QModelIndexList selIdx =
|
|
|
|
lv->selectionModel()->selectedIndexes();
|
|
|
|
if (!selIdx.empty())
|
|
|
|
retval = selIdx.first();
|
|
|
|
return retval;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-01-09 18:51:02 +00:00
|
|
|
namespace {
|
|
|
|
vector<string> getRequiredList(string const & modName)
|
|
|
|
{
|
|
|
|
LyXModule const * const mod = moduleList[modName];
|
|
|
|
if (!mod)
|
|
|
|
return vector<string>(); //empty such thing
|
|
|
|
return mod->getRequiredModules();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
vector<string> getExcludedList(string const & modName)
|
|
|
|
{
|
|
|
|
LyXModule const * const mod = moduleList[modName];
|
|
|
|
if (!mod)
|
|
|
|
return vector<string>(); //empty such thing
|
|
|
|
return mod->getExcludedModules();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
docstring getModuleDescription(string const & modName)
|
|
|
|
{
|
|
|
|
LyXModule const * const mod = moduleList[modName];
|
|
|
|
if (!mod)
|
|
|
|
return _("Module not found!");
|
2008-01-14 21:44:06 +00:00
|
|
|
return _(mod->getDescription());
|
2008-01-09 18:51:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
vector<string> getPackageList(string const & modName)
|
|
|
|
{
|
|
|
|
LyXModule const * const mod = moduleList[modName];
|
|
|
|
if (!mod)
|
|
|
|
return vector<string>(); //empty such thing
|
|
|
|
return mod->getPackageList();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool isModuleAvailable(string const & modName)
|
|
|
|
{
|
|
|
|
LyXModule * mod = moduleList[modName];
|
|
|
|
if (!mod)
|
|
|
|
return false;
|
|
|
|
return mod->isAvailable();
|
|
|
|
}
|
|
|
|
} //anonymous namespace
|
|
|
|
|
|
|
|
|
|
|
|
ModuleSelMan::ModuleSelMan(
|
|
|
|
QListView * availableLV,
|
|
|
|
QListView * selectedLV,
|
|
|
|
QPushButton * addPB,
|
|
|
|
QPushButton * delPB,
|
|
|
|
QPushButton * upPB,
|
|
|
|
QPushButton * downPB,
|
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
|
|
|
GuiIdListModel * availableModel,
|
|
|
|
GuiIdListModel * selectedModel) :
|
2008-01-09 18:51:02 +00:00
|
|
|
GuiSelectionManager(availableLV, selectedLV, addPB, delPB,
|
|
|
|
upPB, downPB, availableModel, selectedModel)
|
|
|
|
{}
|
|
|
|
|
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
|
|
|
|
2008-01-09 18:51:02 +00:00
|
|
|
void ModuleSelMan::updateAddPB()
|
|
|
|
{
|
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
|
|
|
int const arows = availableModel->rowCount();
|
2008-01-09 18:51:02 +00:00
|
|
|
QModelIndexList const availSels =
|
|
|
|
availableLV->selectionModel()->selectedIndexes();
|
|
|
|
if (arows == 0 || availSels.isEmpty() || isSelected(availSels.first())) {
|
|
|
|
addPB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
QModelIndex const & idx = availableLV->selectionModel()->currentIndex();
|
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
|
|
|
string const modName = getAvailableModel()->getIDString(idx.row());
|
2008-01-09 18:51:02 +00:00
|
|
|
vector<string> reqs = getRequiredList(modName);
|
|
|
|
vector<string> excl = getExcludedList(modName);
|
|
|
|
|
|
|
|
if (reqs.empty() && excl.empty()) {
|
|
|
|
addPB->setEnabled(true);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
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
|
|
|
int const srows = selectedModel->rowCount();
|
|
|
|
vector<string> selModList;
|
|
|
|
for (int i = 0; i < srows; ++i)
|
|
|
|
selModList.push_back(getSelectedModel()->getIDString(i));
|
|
|
|
|
|
|
|
vector<string>::const_iterator selModStart = selModList.begin();
|
|
|
|
vector<string>::const_iterator selModEnd = selModList.end();
|
2008-01-09 18:51:02 +00:00
|
|
|
|
|
|
|
//Check whether some required module is available
|
|
|
|
if (!reqs.empty()) {
|
|
|
|
bool foundOne = false;
|
|
|
|
vector<string>::const_iterator it = reqs.begin();
|
|
|
|
vector<string>::const_iterator end = reqs.end();
|
|
|
|
for (; it != end; ++it) {
|
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
|
|
|
if (find(selModStart, selModEnd, *it) != selModEnd) {
|
2008-01-09 18:51:02 +00:00
|
|
|
foundOne = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!foundOne) {
|
|
|
|
addPB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//Check whether any excluded module is being used
|
|
|
|
if (!excl.empty()) {
|
|
|
|
vector<string>::const_iterator it = excl.begin();
|
|
|
|
vector<string>::const_iterator end = excl.end();
|
|
|
|
for (; it != end; ++it) {
|
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
|
|
|
if (find(selModStart, selModEnd, *it) != selModEnd) {
|
2008-01-09 18:51:02 +00:00
|
|
|
addPB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
addPB->setEnabled(true);
|
|
|
|
}
|
|
|
|
|
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
|
|
|
|
2008-01-10 01:33:24 +00:00
|
|
|
void ModuleSelMan::updateDownPB()
|
|
|
|
{
|
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
|
|
|
int const srows = selectedModel->rowCount();
|
2008-01-10 01:33:24 +00:00
|
|
|
if (srows == 0) {
|
|
|
|
downPB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
QModelIndexList const selSels =
|
|
|
|
selectedLV->selectionModel()->selectedIndexes();
|
|
|
|
//disable if empty or last item is selected
|
|
|
|
if (selSels.empty() || selSels.first().row() == srows - 1) {
|
|
|
|
downPB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
//determine whether immediately succeding element requires this one
|
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
|
|
|
QModelIndex const & curIdx = selectedLV->selectionModel()->currentIndex();
|
|
|
|
int curRow = curIdx.row();
|
|
|
|
if (curRow < 0 || curRow >= srows - 1) { //this shouldn't happen...
|
2008-01-10 01:33:24 +00:00
|
|
|
downPB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
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
|
|
|
string const curModName = getSelectedModel()->getIDString(curRow);
|
|
|
|
string const nextModName = getSelectedModel()->getIDString(curRow + 1);
|
2008-01-10 01:33:24 +00:00
|
|
|
|
|
|
|
vector<string> reqs = getRequiredList(nextModName);
|
|
|
|
|
|
|
|
//if it doesn't require anything....
|
|
|
|
if (reqs.empty()) {
|
|
|
|
downPB->setEnabled(true);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
//FIXME This should perhaps be more flexible and check whether, even
|
|
|
|
//if this one is required, there is also an earlier one that is required.
|
|
|
|
//enable it if this module isn't required
|
|
|
|
downPB->setEnabled(
|
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
|
|
|
find(reqs.begin(), reqs.end(), curModName) == reqs.end());
|
2008-01-10 01:33:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ModuleSelMan::updateUpPB()
|
|
|
|
{
|
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
|
|
|
int const srows = selectedModel->rowCount();
|
2008-01-10 01:33:24 +00:00
|
|
|
if (srows == 0) {
|
|
|
|
upPB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
QModelIndexList const selSels =
|
|
|
|
selectedLV->selectionModel()->selectedIndexes();
|
|
|
|
//disable if empty or first item is selected
|
|
|
|
if (selSels.empty() || selSels.first().row() == 0) {
|
|
|
|
upPB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
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
|
|
|
|
2008-01-10 01:33:24 +00:00
|
|
|
//determine whether immediately preceding element is required by this one
|
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
|
|
|
QModelIndex const & curIdx = selectedLV->selectionModel()->currentIndex();
|
|
|
|
int curRow = curIdx.row();
|
|
|
|
if (curRow <= -1 || curRow > srows - 1) { //sanity check
|
|
|
|
downPB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
string const curModName = getSelectedModel()->getIDString(curRow);
|
|
|
|
vector<string> reqs = getRequiredList(curModName);
|
2008-01-10 01:33:24 +00:00
|
|
|
|
|
|
|
//if this one doesn't require anything....
|
|
|
|
if (reqs.empty()) {
|
|
|
|
upPB->setEnabled(true);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
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
|
|
|
string preModName = getSelectedModel()->getIDString(curRow - 1);
|
2008-01-10 01:33:24 +00:00
|
|
|
|
|
|
|
//NOTE This is less flexible than it might be. You could check whether, even
|
|
|
|
//if this one is required, there is also an earlier one that is required.
|
|
|
|
//enable it if the preceding module isn't required
|
|
|
|
upPB->setEnabled(find(reqs.begin(), reqs.end(), preModName) == reqs.end());
|
|
|
|
}
|
|
|
|
|
|
|
|
void ModuleSelMan::updateDelPB()
|
|
|
|
{
|
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
|
|
|
int const srows = selectedModel->rowCount();
|
2008-01-10 01:33:24 +00:00
|
|
|
if (srows == 0) {
|
|
|
|
deletePB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
QModelIndexList const selSels =
|
|
|
|
selectedLV->selectionModel()->selectedIndexes();
|
|
|
|
if (selSels.empty() || selSels.first().row() < 0) {
|
|
|
|
deletePB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
//determine whether some LATER module requires this one
|
|
|
|
//NOTE Things are arranged so that this is the only way there
|
|
|
|
//can be a problem. At least, we hope so.
|
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
|
|
|
QModelIndex const & curIdx =
|
|
|
|
selectedLV->selectionModel()->currentIndex();
|
|
|
|
int const curRow = curIdx.row();
|
|
|
|
if (curRow < 0 || curRow >= srows) { //this shouldn't happen
|
|
|
|
deletePB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
QString const curModName = curIdx.data().toString();
|
2008-01-10 01:33:24 +00:00
|
|
|
|
|
|
|
//We're looking here for a reason NOT to enable the button. If we
|
|
|
|
//find one, we disable it and return. If we don't, we'll end up at
|
|
|
|
//the end of the function, and then we enable it.
|
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
|
|
|
for (int i = curRow + 1; i < srows; ++i) {
|
|
|
|
string const thisMod = getSelectedModel()->getIDString(i);
|
|
|
|
vector<string> reqs = getRequiredList(thisMod);
|
2008-01-10 01:33:24 +00:00
|
|
|
//does this one require us?
|
|
|
|
if (find(reqs.begin(), reqs.end(), fromqstr(curModName)) == reqs.end())
|
|
|
|
//no...
|
|
|
|
continue;
|
|
|
|
|
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
|
|
|
//OK, so this module requires us
|
|
|
|
//is there an EARLIER module that also satisfies the require?
|
2008-01-10 01:33:24 +00:00
|
|
|
//NOTE We demand that it be earlier to keep the list of modules
|
|
|
|
//consistent with the rule that a module must be proceeded by a
|
|
|
|
//required module. There would be more flexible ways to proceed,
|
|
|
|
//but that would be a lot more complicated, and the logic here is
|
|
|
|
//already complicated. (That's why I've left the debugging code.)
|
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
|
|
|
//lyxerr << "Testing " << thisMod << std::endl;
|
|
|
|
bool foundOne = false;
|
|
|
|
for (int j = 0; j < curRow; ++j) {
|
|
|
|
string const mod = getSelectedModel()->getIDString(j);
|
|
|
|
//lyxerr << "In loop: Testing " << mod << std::endl;
|
2008-01-10 01:33:24 +00:00
|
|
|
//do we satisfy the require?
|
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
|
|
|
if (find(reqs.begin(), reqs.end(), mod) != reqs.end()) {
|
|
|
|
//lyxerr << mod << " does the trick." << std::endl;
|
|
|
|
foundOne = true;
|
2008-01-10 01:33:24 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
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
|
|
|
//did we find a module to satisfy the require?
|
|
|
|
if (!foundOne) {
|
|
|
|
//lyxerr << "No matching module found." << std::endl;
|
2008-01-10 01:33:24 +00:00
|
|
|
deletePB->setEnabled(false);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//lyxerr << "All's well that ends well." << std::endl;
|
|
|
|
deletePB->setEnabled(true);
|
|
|
|
}
|
|
|
|
|
2008-01-09 18:51:02 +00:00
|
|
|
|
2007-05-14 12:09:14 +00:00
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// PreambleModule
|
|
|
|
//
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
PreambleModule::PreambleModule(): current_id_(0)
|
|
|
|
{
|
|
|
|
// This is not a memory leak. The object will be destroyed
|
|
|
|
// with this.
|
|
|
|
(void) new LaTeXHighlighter(preambleTE->document());
|
|
|
|
setFocusProxy(preambleTE);
|
2007-05-14 16:54:27 +00:00
|
|
|
connect(preambleTE, SIGNAL(textChanged()), this, SIGNAL(changed()));
|
2007-05-14 12:09:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-05-14 16:41:50 +00:00
|
|
|
void PreambleModule::update(BufferParams const & params, BufferId id)
|
2007-05-14 12:09:14 +00:00
|
|
|
{
|
|
|
|
QString preamble = toqstr(params.preamble);
|
|
|
|
// Nothing to do if the params and preamble are unchanged.
|
2007-05-28 22:27:45 +00:00
|
|
|
if (id == current_id_
|
2007-05-14 12:09:14 +00:00
|
|
|
&& preamble == preambleTE->document()->toPlainText())
|
|
|
|
return;
|
|
|
|
|
|
|
|
QTextCursor cur = preambleTE->textCursor();
|
|
|
|
// Save the coords before switching to the new one.
|
2007-05-28 22:27:45 +00:00
|
|
|
preamble_coords_[current_id_] =
|
2007-05-14 12:09:14 +00:00
|
|
|
make_pair(cur.position(), preambleTE->verticalScrollBar()->value());
|
|
|
|
|
|
|
|
// Save the params address for further use.
|
|
|
|
current_id_ = id;
|
|
|
|
preambleTE->document()->setPlainText(preamble);
|
|
|
|
Coords::const_iterator it = preamble_coords_.find(current_id_);
|
|
|
|
if (it == preamble_coords_.end())
|
|
|
|
// First time we open this one.
|
|
|
|
preamble_coords_[current_id_] = make_pair(0,0);
|
|
|
|
else {
|
|
|
|
// Restore saved coords.
|
|
|
|
QTextCursor cur = preambleTE->textCursor();
|
|
|
|
cur.setPosition(it->second.first);
|
|
|
|
preambleTE->setTextCursor(cur);
|
|
|
|
preambleTE->verticalScrollBar()->setValue(it->second.second);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void PreambleModule::apply(BufferParams & params)
|
|
|
|
{
|
|
|
|
params.preamble = fromqstr(preambleTE->document()->toPlainText());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void PreambleModule::closeEvent(QCloseEvent * e)
|
|
|
|
{
|
|
|
|
// Save the coords before closing.
|
|
|
|
QTextCursor cur = preambleTE->textCursor();
|
2007-05-28 22:27:45 +00:00
|
|
|
preamble_coords_[current_id_] =
|
2007-05-14 12:09:14 +00:00
|
|
|
make_pair(cur.position(), preambleTE->verticalScrollBar()->value());
|
|
|
|
e->accept();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-04-24 19:37:34 +00:00
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// DocumentDialog
|
|
|
|
//
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
|
|
|
2007-09-03 05:59:32 +00:00
|
|
|
|
2007-11-23 09:44:02 +00:00
|
|
|
GuiDocument::GuiDocument(GuiView & lv)
|
2008-05-15 08:41:17 +00:00
|
|
|
: GuiDialog(lv, "document", qt_("Document Settings"))
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
setupUi(this);
|
2008-03-08 07:59:47 +00:00
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK()));
|
|
|
|
connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply()));
|
|
|
|
connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose()));
|
|
|
|
connect(restorePB, SIGNAL(clicked()), this, SLOT(slotRestore()));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(savePB, SIGNAL(clicked()), this, SLOT(saveDefaultClicked()));
|
|
|
|
connect(defaultPB, SIGNAL(clicked()), this, SLOT(useDefaultsClicked()));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
// Manage the restore, ok, apply, restore and cancel/close buttons
|
2007-09-05 20:33:29 +00:00
|
|
|
bc().setPolicy(ButtonPolicy::NoRepeatedApplyReadOnlyPolicy);
|
|
|
|
bc().setOK(okPB);
|
|
|
|
bc().setApply(applyPB);
|
|
|
|
bc().setCancel(closePB);
|
|
|
|
bc().setRestore(restorePB);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
textLayoutModule = new UiWidget<Ui::TextLayoutUi>;
|
|
|
|
// text layout
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(textLayoutModule->lspacingCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(textLayoutModule->lspacingCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(setLSpacing(int)));
|
2008-02-23 16:45:38 +00:00
|
|
|
connect(textLayoutModule->lspacingLE, SIGNAL(textChanged(const QString &)),
|
2007-04-25 10:25:37 +00:00
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(textLayoutModule->skipRB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(textLayoutModule->indentRB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(textLayoutModule->skipCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(textLayoutModule->skipLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(textLayoutModule->skipLengthCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(textLayoutModule->skipCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(setSkip(int)));
|
|
|
|
connect(textLayoutModule->skipRB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(enableSkip(bool)));
|
|
|
|
connect(textLayoutModule->twoColumnCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
2008-02-19 05:39:36 +00:00
|
|
|
connect(textLayoutModule->twoColumnCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(setColSep()));
|
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
|
|
|
connect(textLayoutModule->listingsED, SIGNAL(textChanged()),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-06-12 17:10:28 +00:00
|
|
|
connect(textLayoutModule->bypassCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-06-26 08:00:44 +00:00
|
|
|
connect(textLayoutModule->bypassCB, SIGNAL(clicked()),
|
2007-07-27 18:17:00 +00:00
|
|
|
this, SLOT(set_listings_msg()));
|
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
|
|
|
connect(textLayoutModule->listingsED, SIGNAL(textChanged()),
|
2007-07-27 18:17:00 +00:00
|
|
|
this, SLOT(set_listings_msg()));
|
2007-05-20 14:31:15 +00:00
|
|
|
textLayoutModule->listingsTB->setPlainText(
|
|
|
|
qt_("Input listings parameters on the right. Enter ? for a list of parameters."));
|
2007-04-24 19:37:34 +00:00
|
|
|
textLayoutModule->lspacingLE->setValidator(new QDoubleValidator(
|
|
|
|
textLayoutModule->lspacingLE));
|
|
|
|
textLayoutModule->skipLE->setValidator(unsignedLengthValidator(
|
|
|
|
textLayoutModule->skipLE));
|
|
|
|
|
|
|
|
textLayoutModule->skipCO->addItem(qt_("SmallSkip"));
|
|
|
|
textLayoutModule->skipCO->addItem(qt_("MedSkip"));
|
|
|
|
textLayoutModule->skipCO->addItem(qt_("BigSkip"));
|
|
|
|
textLayoutModule->skipCO->addItem(qt_("Length"));
|
|
|
|
// remove the %-items from the unit choice
|
|
|
|
textLayoutModule->skipLengthCO->noPercents();
|
|
|
|
textLayoutModule->lspacingCO->insertItem(
|
|
|
|
Spacing::Single, qt_("Single"));
|
|
|
|
textLayoutModule->lspacingCO->insertItem(
|
|
|
|
Spacing::Onehalf, qt_("OneHalf"));
|
|
|
|
textLayoutModule->lspacingCO->insertItem(
|
|
|
|
Spacing::Double, qt_("Double"));
|
|
|
|
textLayoutModule->lspacingCO->insertItem(
|
|
|
|
Spacing::Other, qt_("Custom"));
|
|
|
|
|
|
|
|
// initialize the length validator
|
2007-09-05 20:33:29 +00:00
|
|
|
bc().addCheckedLineEdit(textLayoutModule->skipLE);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
fontModule = new UiWidget<Ui::FontUi>;
|
|
|
|
// fonts
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(fontModule->fontsRomanCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(fontModule->fontsRomanCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(romanChanged(int)));
|
|
|
|
connect(fontModule->fontsSansCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(fontModule->fontsSansCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(sansChanged(int)));
|
|
|
|
connect(fontModule->fontsTypewriterCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(fontModule->fontsTypewriterCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(ttChanged(int)));
|
|
|
|
connect(fontModule->fontsDefaultCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(fontModule->fontsizeCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
2008-06-05 06:18:34 +00:00
|
|
|
connect(fontModule->cjkFontLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(fontModule->scaleSansSB, SIGNAL(valueChanged(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(fontModule->scaleTypewriterSB, SIGNAL(valueChanged(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(fontModule->fontScCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(fontModule->fontOsfCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
for (int n = 0; tex_fonts_roman[n][0]; ++n) {
|
2007-06-01 12:27:04 +00:00
|
|
|
QString font = qt_(tex_fonts_roman_gui[n]);
|
2007-10-06 22:43:21 +00:00
|
|
|
if (!isFontAvailable(tex_fonts_roman[n]))
|
2007-04-24 19:37:34 +00:00
|
|
|
font += qt_(" (not installed)");
|
|
|
|
fontModule->fontsRomanCO->addItem(font);
|
|
|
|
}
|
|
|
|
for (int n = 0; tex_fonts_sans[n][0]; ++n) {
|
2007-06-01 12:27:04 +00:00
|
|
|
QString font = qt_(tex_fonts_sans_gui[n]);
|
2007-10-06 22:43:21 +00:00
|
|
|
if (!isFontAvailable(tex_fonts_sans[n]))
|
2007-04-24 19:37:34 +00:00
|
|
|
font += qt_(" (not installed)");
|
|
|
|
fontModule->fontsSansCO->addItem(font);
|
|
|
|
}
|
|
|
|
for (int n = 0; tex_fonts_monospaced[n][0]; ++n) {
|
2007-06-01 12:27:04 +00:00
|
|
|
QString font = qt_(tex_fonts_monospaced_gui[n]);
|
2007-10-06 22:43:21 +00:00
|
|
|
if (!isFontAvailable(tex_fonts_monospaced[n]))
|
2007-04-24 19:37:34 +00:00
|
|
|
font += qt_(" (not installed)");
|
|
|
|
fontModule->fontsTypewriterCO->addItem(font);
|
|
|
|
}
|
|
|
|
|
2007-06-01 17:44:04 +00:00
|
|
|
fontModule->fontsizeCO->addItem(qt_("Default"));
|
2007-04-24 19:37:34 +00:00
|
|
|
fontModule->fontsizeCO->addItem(qt_("10"));
|
|
|
|
fontModule->fontsizeCO->addItem(qt_("11"));
|
|
|
|
fontModule->fontsizeCO->addItem(qt_("12"));
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
for (int n = 0; GuiDocument::fontfamilies_gui[n][0]; ++n)
|
2007-04-24 19:37:34 +00:00
|
|
|
fontModule->fontsDefaultCO->addItem(
|
2007-10-06 22:43:21 +00:00
|
|
|
qt_(GuiDocument::fontfamilies_gui[n]));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
pageLayoutModule = new UiWidget<Ui::PageLayoutUi>;
|
|
|
|
// page layout
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(pageLayoutModule->papersizeCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(setCustomPapersize(int)));
|
|
|
|
connect(pageLayoutModule->papersizeCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(setCustomPapersize(int)));
|
|
|
|
connect(pageLayoutModule->portraitRB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(portraitChanged()));
|
|
|
|
connect(pageLayoutModule->papersizeCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pageLayoutModule->paperheightLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pageLayoutModule->paperwidthLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pageLayoutModule->paperwidthUnitCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pageLayoutModule->paperheightUnitCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pageLayoutModule->portraitRB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pageLayoutModule->landscapeRB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pageLayoutModule->facingPagesCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pageLayoutModule->pagestyleCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
|
2007-06-01 17:44:04 +00:00
|
|
|
pageLayoutModule->pagestyleCO->addItem(qt_("Default"));
|
2007-04-24 19:37:34 +00:00
|
|
|
pageLayoutModule->pagestyleCO->addItem(qt_("empty"));
|
|
|
|
pageLayoutModule->pagestyleCO->addItem(qt_("plain"));
|
|
|
|
pageLayoutModule->pagestyleCO->addItem(qt_("headings"));
|
|
|
|
pageLayoutModule->pagestyleCO->addItem(qt_("fancy"));
|
2007-09-05 20:33:29 +00:00
|
|
|
bc().addCheckedLineEdit(pageLayoutModule->paperheightLE,
|
2007-04-24 19:37:34 +00:00
|
|
|
pageLayoutModule->paperheightL);
|
2007-09-05 20:33:29 +00:00
|
|
|
bc().addCheckedLineEdit(pageLayoutModule->paperwidthLE,
|
2007-04-24 19:37:34 +00:00
|
|
|
pageLayoutModule->paperwidthL);
|
|
|
|
|
|
|
|
// paper
|
|
|
|
QComboBox * cb = pageLayoutModule->papersizeCO;
|
|
|
|
cb->addItem(qt_("Default"));
|
|
|
|
cb->addItem(qt_("Custom"));
|
|
|
|
cb->addItem(qt_("US letter"));
|
|
|
|
cb->addItem(qt_("US legal"));
|
|
|
|
cb->addItem(qt_("US executive"));
|
|
|
|
cb->addItem(qt_("A3"));
|
|
|
|
cb->addItem(qt_("A4"));
|
|
|
|
cb->addItem(qt_("A5"));
|
|
|
|
cb->addItem(qt_("B3"));
|
|
|
|
cb->addItem(qt_("B4"));
|
|
|
|
cb->addItem(qt_("B5"));
|
|
|
|
// remove the %-items from the unit choice
|
|
|
|
pageLayoutModule->paperwidthUnitCO->noPercents();
|
|
|
|
pageLayoutModule->paperheightUnitCO->noPercents();
|
|
|
|
pageLayoutModule->paperheightLE->setValidator(unsignedLengthValidator(
|
|
|
|
pageLayoutModule->paperheightLE));
|
|
|
|
pageLayoutModule->paperwidthLE->setValidator(unsignedLengthValidator(
|
|
|
|
pageLayoutModule->paperwidthLE));
|
|
|
|
|
|
|
|
|
|
|
|
marginsModule = new UiWidget<Ui::MarginsUi>;
|
|
|
|
// margins
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(marginsModule->marginCB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(setCustomMargins(bool)));
|
|
|
|
connect(marginsModule->marginCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->topLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->topUnit, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->bottomLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->bottomUnit, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->innerLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->innerUnit, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->outerLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->outerUnit, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->headheightLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->headheightUnit, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->headsepLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->headsepUnit, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->footskipLE, SIGNAL(textChanged(const QString&)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->footskipUnit, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
2008-02-19 05:24:48 +00:00
|
|
|
connect(marginsModule->columnsepLE, SIGNAL(textChanged(const QString&)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(marginsModule->columnsepUnit, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-04-24 19:37:34 +00:00
|
|
|
marginsModule->topLE->setValidator(unsignedLengthValidator(
|
|
|
|
marginsModule->topLE));
|
|
|
|
marginsModule->bottomLE->setValidator(unsignedLengthValidator(
|
|
|
|
marginsModule->bottomLE));
|
|
|
|
marginsModule->innerLE->setValidator(unsignedLengthValidator(
|
|
|
|
marginsModule->innerLE));
|
|
|
|
marginsModule->outerLE->setValidator(unsignedLengthValidator(
|
|
|
|
marginsModule->outerLE));
|
|
|
|
marginsModule->headsepLE->setValidator(unsignedLengthValidator(
|
|
|
|
marginsModule->headsepLE));
|
|
|
|
marginsModule->headheightLE->setValidator(unsignedLengthValidator(
|
|
|
|
marginsModule->headheightLE));
|
|
|
|
marginsModule->footskipLE->setValidator(unsignedLengthValidator(
|
|
|
|
marginsModule->footskipLE));
|
2008-02-19 05:24:48 +00:00
|
|
|
marginsModule->columnsepLE->setValidator(unsignedLengthValidator(
|
|
|
|
marginsModule->columnsepLE));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
bc().addCheckedLineEdit(marginsModule->topLE,
|
2007-04-24 19:37:34 +00:00
|
|
|
marginsModule->topL);
|
2007-09-05 20:33:29 +00:00
|
|
|
bc().addCheckedLineEdit(marginsModule->bottomLE,
|
2007-04-24 19:37:34 +00:00
|
|
|
marginsModule->bottomL);
|
2007-09-05 20:33:29 +00:00
|
|
|
bc().addCheckedLineEdit(marginsModule->innerLE,
|
2007-04-24 19:37:34 +00:00
|
|
|
marginsModule->innerL);
|
2007-09-05 20:33:29 +00:00
|
|
|
bc().addCheckedLineEdit(marginsModule->outerLE,
|
2007-04-24 19:37:34 +00:00
|
|
|
marginsModule->outerL);
|
2007-09-05 20:33:29 +00:00
|
|
|
bc().addCheckedLineEdit(marginsModule->headsepLE,
|
2007-04-24 19:37:34 +00:00
|
|
|
marginsModule->headsepL);
|
2007-09-05 20:33:29 +00:00
|
|
|
bc().addCheckedLineEdit(marginsModule->headheightLE,
|
2007-04-24 19:37:34 +00:00
|
|
|
marginsModule->headheightL);
|
2007-09-05 20:33:29 +00:00
|
|
|
bc().addCheckedLineEdit(marginsModule->footskipLE,
|
2007-04-24 19:37:34 +00:00
|
|
|
marginsModule->footskipL);
|
2008-02-19 05:24:48 +00:00
|
|
|
bc().addCheckedLineEdit(marginsModule->columnsepLE,
|
|
|
|
marginsModule->columnsepL);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
langModule = new UiWidget<Ui::LanguageUi>;
|
|
|
|
// language & quote
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(langModule->languageCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-09-19 12:29:08 +00:00
|
|
|
connect(langModule->defaultencodingRB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(langModule->otherencodingRB, SIGNAL(clicked()),
|
2007-04-25 10:25:37 +00:00
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(langModule->encodingCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(langModule->quoteStyleCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-04-24 19:37:34 +00:00
|
|
|
// language & quotes
|
2008-05-14 10:34:19 +00:00
|
|
|
QAbstractItemModel * language_model = guiApp->languageModel();
|
|
|
|
// FIXME: it would be nice if sorting was enabled/disabled via a checkbox.
|
|
|
|
language_model->sort(0);
|
|
|
|
langModule->languageCO->setModel(language_model);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
// Always put the default encoding in the first position.
|
|
|
|
langModule->encodingCO->addItem(qt_("LaTeX default"));
|
2008-07-11 08:56:17 +00:00
|
|
|
QStringList encodinglist;
|
2007-04-24 19:37:34 +00:00
|
|
|
Encodings::const_iterator it = encodings.begin();
|
|
|
|
Encodings::const_iterator const end = encodings.end();
|
|
|
|
for (; it != end; ++it)
|
2008-07-11 08:56:17 +00:00
|
|
|
encodinglist.append(qt_(it->guiName()));
|
|
|
|
encodinglist.sort();
|
|
|
|
langModule->encodingCO->addItems(encodinglist);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
langModule->quoteStyleCO->addItem(qt_("``text''"));
|
|
|
|
langModule->quoteStyleCO->addItem(qt_("''text''"));
|
|
|
|
langModule->quoteStyleCO->addItem(qt_(",,text``"));
|
|
|
|
langModule->quoteStyleCO->addItem(qt_(",,text''"));
|
|
|
|
langModule->quoteStyleCO->addItem(qt_("<<text>>"));
|
|
|
|
langModule->quoteStyleCO->addItem(qt_(">>text<<"));
|
|
|
|
|
|
|
|
|
|
|
|
numberingModule = new UiWidget<Ui::NumberingUi>;
|
|
|
|
// numbering
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(numberingModule->depthSL, SIGNAL(valueChanged(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(numberingModule->tocSL, SIGNAL(valueChanged(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(numberingModule->depthSL, SIGNAL(valueChanged(int)),
|
|
|
|
this, SLOT(updateNumbering()));
|
|
|
|
connect(numberingModule->tocSL, SIGNAL(valueChanged(int)),
|
|
|
|
this, SLOT(updateNumbering()));
|
2007-04-24 19:37:34 +00:00
|
|
|
numberingModule->tocTW->setColumnCount(3);
|
|
|
|
numberingModule->tocTW->headerItem()->setText(0, qt_("Example"));
|
|
|
|
numberingModule->tocTW->headerItem()->setText(1, qt_("Numbered"));
|
|
|
|
numberingModule->tocTW->headerItem()->setText(2, qt_("Appears in TOC"));
|
|
|
|
|
|
|
|
|
|
|
|
biblioModule = new UiWidget<Ui::BiblioUi>;
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(biblioModule->citeNatbibRB, SIGNAL(toggled(bool)),
|
|
|
|
biblioModule->citationStyleL, SLOT(setEnabled(bool)));
|
|
|
|
connect(biblioModule->citeNatbibRB, SIGNAL(toggled(bool)),
|
|
|
|
biblioModule->citeStyleCO, SLOT(setEnabled(bool)));
|
2007-04-24 19:37:34 +00:00
|
|
|
// biblio
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(biblioModule->citeDefaultRB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(biblioModule->citeNatbibRB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(biblioModule->citeStyleCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(biblioModule->citeJurabibRB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(biblioModule->bibtopicCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-04-24 19:37:34 +00:00
|
|
|
// biblio
|
|
|
|
biblioModule->citeStyleCO->addItem(qt_("Author-year"));
|
|
|
|
biblioModule->citeStyleCO->addItem(qt_("Numerical"));
|
|
|
|
biblioModule->citeStyleCO->setCurrentIndex(0);
|
|
|
|
|
|
|
|
|
|
|
|
mathsModule = new UiWidget<Ui::MathsUi>;
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(mathsModule->amsautoCB, SIGNAL(toggled(bool)),
|
|
|
|
mathsModule->amsCB, SLOT(setDisabled(bool)));
|
|
|
|
connect(mathsModule->esintautoCB, SIGNAL(toggled(bool)),
|
|
|
|
mathsModule->esintCB, SLOT(setDisabled(bool)));
|
2007-04-24 19:37:34 +00:00
|
|
|
// maths
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(mathsModule->amsCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(mathsModule->amsautoCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(mathsModule->esintCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(mathsModule->esintautoCB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
latexModule = new UiWidget<Ui::LaTeXUi>;
|
|
|
|
// latex class
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(latexModule->optionsLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(latexModule->psdriverCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(latexModule->classCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(classChanged()));
|
2008-01-15 10:38:19 +00:00
|
|
|
connect(latexModule->classCO, SIGNAL(activated(int)),
|
|
|
|
this, SLOT(change_adaptor()));
|
2008-03-10 21:31:22 +00:00
|
|
|
connect(latexModule->layoutPB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(browseLayout()));
|
2008-07-11 02:43:02 +00:00
|
|
|
connect(latexModule->layoutPB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
2008-04-28 16:38:56 +00:00
|
|
|
connect(latexModule->childDocGB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(latexModule->childDocLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(latexModule->childDocPB, SIGNAL(clicked()),
|
|
|
|
this, SLOT(browseMaster()));
|
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
|
|
|
|
|
|
|
selectionManager =
|
2008-01-09 18:51:02 +00:00
|
|
|
new ModuleSelMan(latexModule->availableLV, latexModule->selectedLV,
|
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
|
|
|
latexModule->addPB, latexModule->deletePB,
|
|
|
|
latexModule->upPB, latexModule->downPB,
|
|
|
|
availableModel(), selectedModel());
|
|
|
|
connect(selectionManager, SIGNAL(updateHook()),
|
|
|
|
this, SLOT(updateModuleInfo()));
|
|
|
|
connect(selectionManager, SIGNAL(updateHook()),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
|
|
|
|
// postscript drivers
|
2007-04-24 19:37:34 +00:00
|
|
|
for (int n = 0; tex_graphics[n][0]; ++n) {
|
2007-06-01 17:44:04 +00:00
|
|
|
QString enc = qt_(tex_graphics_gui[n]);
|
2007-04-24 19:37:34 +00:00
|
|
|
latexModule->psdriverCO->addItem(enc);
|
|
|
|
}
|
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
|
|
|
// latex classes
|
2008-02-28 21:04:55 +00:00
|
|
|
latexModule->classCO->setModel(&classes_model_);
|
2008-03-07 03:53:21 +00:00
|
|
|
LayoutFileList const & bcl = LayoutFileList::get();
|
This is the last of the commits that hopes to enforce the distinction between "layout files" and "document classes" that was introduced by the modules code. For the most part, these changes just refactor code from TextClass between: (a) a TextClass base class; (b) a LayoutFile subclass, which represents the information in a .layout file; and (c) a DocumentClass subclass, which represents the layout information associated with a Buffer---a LayoutFile plus Modules. Methods from TextClass have been apportioned between the three classes depending upon what is needed where, and signatures have been changed where necessary so that the right kind of class is required.
At this point, there are no simple TextClass objects in the main LyX code, and it is impossible to create them, since the TextClass constructor is protected. Only LayoutFile and DocumentClass objects can be constructed, and for the most part these are constructed only by their respective containers: BaseClassList and DocumentClassBundle. There is an exception: LayoutFile does have a public default constructor, but if anyone knows how to make it go away, please do.
There will be one or two more commits along these lines, but these will be simple renamings. For example, BaseClassList should be LayoutFileList.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23343 a592a061-630c-0410-9148-cb99ea01b6c8
2008-02-29 02:45:33 +00:00
|
|
|
vector<LayoutFileIndex> classList = bcl.classList();
|
2008-02-28 21:04:55 +00:00
|
|
|
sort(classList.begin(), classList.end(), less_textclass_avail_desc());
|
|
|
|
|
This is the last of the commits that hopes to enforce the distinction between "layout files" and "document classes" that was introduced by the modules code. For the most part, these changes just refactor code from TextClass between: (a) a TextClass base class; (b) a LayoutFile subclass, which represents the information in a .layout file; and (c) a DocumentClass subclass, which represents the layout information associated with a Buffer---a LayoutFile plus Modules. Methods from TextClass have been apportioned between the three classes depending upon what is needed where, and signatures have been changed where necessary so that the right kind of class is required.
At this point, there are no simple TextClass objects in the main LyX code, and it is impossible to create them, since the TextClass constructor is protected. Only LayoutFile and DocumentClass objects can be constructed, and for the most part these are constructed only by their respective containers: BaseClassList and DocumentClassBundle. There is an exception: LayoutFile does have a public default constructor, but if anyone knows how to make it go away, please do.
There will be one or two more commits along these lines, but these will be simple renamings. For example, BaseClassList should be LayoutFileList.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23343 a592a061-630c-0410-9148-cb99ea01b6c8
2008-02-29 02:45:33 +00:00
|
|
|
vector<LayoutFileIndex>::const_iterator cit = classList.begin();
|
|
|
|
vector<LayoutFileIndex>::const_iterator cen = classList.end();
|
2008-02-28 21:04:55 +00:00
|
|
|
for (int i = 0; cit != cen; ++cit, ++i) {
|
This is the last of the commits that hopes to enforce the distinction between "layout files" and "document classes" that was introduced by the modules code. For the most part, these changes just refactor code from TextClass between: (a) a TextClass base class; (b) a LayoutFile subclass, which represents the information in a .layout file; and (c) a DocumentClass subclass, which represents the layout information associated with a Buffer---a LayoutFile plus Modules. Methods from TextClass have been apportioned between the three classes depending upon what is needed where, and signatures have been changed where necessary so that the right kind of class is required.
At this point, there are no simple TextClass objects in the main LyX code, and it is impossible to create them, since the TextClass constructor is protected. Only LayoutFile and DocumentClass objects can be constructed, and for the most part these are constructed only by their respective containers: BaseClassList and DocumentClassBundle. There is an exception: LayoutFile does have a public default constructor, but if anyone knows how to make it go away, please do.
There will be one or two more commits along these lines, but these will be simple renamings. For example, BaseClassList should be LayoutFileList.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23343 a592a061-630c-0410-9148-cb99ea01b6c8
2008-02-29 02:45:33 +00:00
|
|
|
LayoutFile const & tc = bcl[*cit];
|
2008-02-28 21:04:55 +00:00
|
|
|
docstring item = (tc.isTeXClassAvailable()) ?
|
|
|
|
from_utf8(tc.description()) :
|
|
|
|
bformat(_("Unavailable: %1$s"), from_utf8(tc.description()));
|
2008-03-01 16:32:16 +00:00
|
|
|
classes_model_.insertRow(i, toqstr(item), *cit);
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// branches
|
2007-08-31 05:53:55 +00:00
|
|
|
branchesModule = new GuiBranches;
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(branchesModule, SIGNAL(changed()),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
// preamble
|
2007-05-14 12:09:14 +00:00
|
|
|
preambleModule = new PreambleModule;
|
|
|
|
connect(preambleModule, SIGNAL(changed()),
|
2007-04-24 19:37:34 +00:00
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
|
|
|
|
// bullets
|
|
|
|
bulletsModule = new BulletsModule;
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(bulletsModule, SIGNAL(changed()),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2007-09-20 22:31:18 +00:00
|
|
|
// PDF support
|
|
|
|
pdfSupportModule = new UiWidget<Ui::PDFSupportUi>;
|
|
|
|
|
2007-09-22 22:20:15 +00:00
|
|
|
connect(pdfSupportModule->use_hyperrefGB, SIGNAL(toggled(bool)),
|
2008-06-09 15:20:38 +00:00
|
|
|
this, SLOT(change_adaptor()));
|
2007-09-20 22:31:18 +00:00
|
|
|
connect(pdfSupportModule->titleLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->authorLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->subjectLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->keywordsLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->bookmarksGB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->bookmarksnumberedCB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->bookmarksopenGB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-09-22 22:20:15 +00:00
|
|
|
connect(pdfSupportModule->bookmarksopenlevelSB, SIGNAL(valueChanged(int)),
|
2007-09-20 22:31:18 +00:00
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->breaklinksCB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->pdfborderCB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->colorlinksCB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->backrefCB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-10-10 00:34:23 +00:00
|
|
|
connect(pdfSupportModule->pdfusetitleCB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-09-20 22:31:18 +00:00
|
|
|
connect(pdfSupportModule->pagebackrefCB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->fullscreenCB, SIGNAL(toggled(bool)),
|
|
|
|
this, SLOT(change_adaptor()));
|
|
|
|
connect(pdfSupportModule->optionsLE, SIGNAL(textChanged(const QString &)),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
// float
|
|
|
|
floatModule = new FloatPlacement;
|
2007-04-25 10:25:37 +00:00
|
|
|
connect(floatModule, SIGNAL(changed()),
|
|
|
|
this, SLOT(change_adaptor()));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2008-03-05 20:48:19 +00:00
|
|
|
docPS->addPanel(latexModule, qt_("Document Class"));
|
|
|
|
docPS->addPanel(fontModule, qt_("Fonts"));
|
|
|
|
docPS->addPanel(textLayoutModule, qt_("Text Layout"));
|
|
|
|
docPS->addPanel(pageLayoutModule, qt_("Page Layout"));
|
|
|
|
docPS->addPanel(marginsModule, qt_("Page Margins"));
|
|
|
|
docPS->addPanel(langModule, qt_("Language"));
|
|
|
|
docPS->addPanel(numberingModule, qt_("Numbering & TOC"));
|
|
|
|
docPS->addPanel(biblioModule, qt_("Bibliography"));
|
|
|
|
docPS->addPanel(pdfSupportModule, qt_("PDF Properties"));
|
|
|
|
docPS->addPanel(mathsModule, qt_("Math Options"));
|
|
|
|
docPS->addPanel(floatModule, qt_("Float Placement"));
|
|
|
|
docPS->addPanel(bulletsModule, qt_("Bullets"));
|
|
|
|
docPS->addPanel(branchesModule, qt_("Branches"));
|
|
|
|
docPS->addPanel(preambleModule, qt_("LaTeX Preamble"));
|
|
|
|
docPS->setCurrentPanel(qt_("Document Class"));
|
2007-04-24 19:37:34 +00:00
|
|
|
// FIXME: hack to work around resizing bug in Qt >= 4.2
|
|
|
|
// bug verified with Qt 4.2.{0-3} (JSpitzm)
|
|
|
|
#if QT_VERSION >= 0x040200
|
|
|
|
docPS->updateGeometry();
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::showPreamble()
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
2008-03-05 20:48:19 +00:00
|
|
|
docPS->setCurrentPanel(qt_("LaTeX Preamble"));
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::saveDefaultClicked()
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
2007-09-05 20:33:29 +00:00
|
|
|
saveDocDefault();
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::useDefaultsClicked()
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
2007-09-05 20:33:29 +00:00
|
|
|
useClassDefaults();
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::change_adaptor()
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
2007-09-05 20:33:29 +00:00
|
|
|
changed();
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
docstring GuiDocument::validate_listings_params()
|
2007-07-27 18:17:00 +00:00
|
|
|
{
|
|
|
|
// use a cache here to avoid repeated validation
|
|
|
|
// of the same parameters
|
|
|
|
static string param_cache = string();
|
|
|
|
static docstring msg_cache = docstring();
|
|
|
|
|
|
|
|
if (textLayoutModule->bypassCB->isChecked())
|
|
|
|
return docstring();
|
|
|
|
|
|
|
|
string params = fromqstr(textLayoutModule->listingsED->toPlainText());
|
|
|
|
if (params != param_cache) {
|
|
|
|
param_cache = params;
|
|
|
|
msg_cache = InsetListingsParams(params).validate();
|
|
|
|
}
|
|
|
|
return msg_cache;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::set_listings_msg()
|
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
|
|
|
{
|
|
|
|
static bool isOK = true;
|
2007-07-27 18:17:00 +00:00
|
|
|
docstring msg = validate_listings_params();
|
2007-06-12 17:10:28 +00:00
|
|
|
if (msg.empty()) {
|
|
|
|
if (isOK)
|
|
|
|
return;
|
|
|
|
isOK = true;
|
|
|
|
// listingsTB->setTextColor("black");
|
|
|
|
textLayoutModule->listingsTB->setPlainText(
|
|
|
|
qt_("Input listings parameters on the right. Enter ? for a list of parameters."));
|
|
|
|
} else {
|
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
|
|
|
isOK = false;
|
|
|
|
// listingsTB->setTextColor("red");
|
2007-06-12 17:10:28 +00:00
|
|
|
textLayoutModule->listingsTB->setPlainText(toqstr(msg));
|
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::setLSpacing(int item)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
textLayoutModule->lspacingLE->setEnabled(item == 3);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::setSkip(int item)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
bool const enable = (item == 3);
|
|
|
|
textLayoutModule->skipLE->setEnabled(enable);
|
|
|
|
textLayoutModule->skipLengthCO->setEnabled(enable);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::enableSkip(bool skip)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
textLayoutModule->skipCO->setEnabled(skip);
|
|
|
|
textLayoutModule->skipLE->setEnabled(skip);
|
|
|
|
textLayoutModule->skipLengthCO->setEnabled(skip);
|
|
|
|
if (skip)
|
|
|
|
setSkip(textLayoutModule->skipCO->currentIndex());
|
|
|
|
}
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::portraitChanged()
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
setMargins(pageLayoutModule->papersizeCO->currentIndex());
|
|
|
|
}
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::setMargins(bool custom)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
marginsModule->marginCB->setChecked(custom);
|
|
|
|
setCustomMargins(custom);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::setCustomPapersize(int papersize)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
bool const custom = (papersize == 1);
|
|
|
|
|
|
|
|
pageLayoutModule->paperwidthL->setEnabled(custom);
|
|
|
|
pageLayoutModule->paperwidthLE->setEnabled(custom);
|
|
|
|
pageLayoutModule->paperwidthUnitCO->setEnabled(custom);
|
|
|
|
pageLayoutModule->paperheightL->setEnabled(custom);
|
|
|
|
pageLayoutModule->paperheightLE->setEnabled(custom);
|
|
|
|
pageLayoutModule->paperheightLE->setFocus();
|
|
|
|
pageLayoutModule->paperheightUnitCO->setEnabled(custom);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-02-19 05:39:36 +00:00
|
|
|
void GuiDocument::setColSep()
|
|
|
|
{
|
|
|
|
setCustomMargins(marginsModule->marginCB->checkState() == Qt::Checked);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::setCustomMargins(bool custom)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
marginsModule->topL->setEnabled(!custom);
|
|
|
|
marginsModule->topLE->setEnabled(!custom);
|
|
|
|
marginsModule->topUnit->setEnabled(!custom);
|
|
|
|
|
|
|
|
marginsModule->bottomL->setEnabled(!custom);
|
|
|
|
marginsModule->bottomLE->setEnabled(!custom);
|
|
|
|
marginsModule->bottomUnit->setEnabled(!custom);
|
|
|
|
|
|
|
|
marginsModule->innerL->setEnabled(!custom);
|
|
|
|
marginsModule->innerLE->setEnabled(!custom);
|
|
|
|
marginsModule->innerUnit->setEnabled(!custom);
|
|
|
|
|
|
|
|
marginsModule->outerL->setEnabled(!custom);
|
|
|
|
marginsModule->outerLE->setEnabled(!custom);
|
|
|
|
marginsModule->outerUnit->setEnabled(!custom);
|
|
|
|
|
|
|
|
marginsModule->headheightL->setEnabled(!custom);
|
|
|
|
marginsModule->headheightLE->setEnabled(!custom);
|
|
|
|
marginsModule->headheightUnit->setEnabled(!custom);
|
|
|
|
|
|
|
|
marginsModule->headsepL->setEnabled(!custom);
|
|
|
|
marginsModule->headsepLE->setEnabled(!custom);
|
|
|
|
marginsModule->headsepUnit->setEnabled(!custom);
|
|
|
|
|
|
|
|
marginsModule->footskipL->setEnabled(!custom);
|
|
|
|
marginsModule->footskipLE->setEnabled(!custom);
|
|
|
|
marginsModule->footskipUnit->setEnabled(!custom);
|
2008-02-19 05:24:48 +00:00
|
|
|
|
2008-02-19 05:39:36 +00:00
|
|
|
bool const enableColSep = !custom &&
|
|
|
|
textLayoutModule->twoColumnCB->checkState() == Qt::Checked;
|
|
|
|
marginsModule->columnsepL->setEnabled(enableColSep);
|
|
|
|
marginsModule->columnsepLE->setEnabled(enableColSep);
|
|
|
|
marginsModule->columnsepUnit->setEnabled(enableColSep);
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::updateFontsize(string const & items, string const & sel)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
fontModule->fontsizeCO->clear();
|
2007-06-01 17:44:04 +00:00
|
|
|
fontModule->fontsizeCO->addItem(qt_("Default"));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
for (int n = 0; !token(items,'|',n).empty(); ++n)
|
|
|
|
fontModule->fontsizeCO->
|
|
|
|
addItem(toqstr(token(items,'|',n)));
|
|
|
|
|
|
|
|
for (int n = 0; n < fontModule->fontsizeCO->count(); ++n) {
|
|
|
|
if (fromqstr(fontModule->fontsizeCO->itemText(n)) == sel) {
|
|
|
|
fontModule->fontsizeCO->setCurrentIndex(n);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::romanChanged(int item)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
string const font = tex_fonts_roman[item];
|
2007-10-06 22:43:21 +00:00
|
|
|
fontModule->fontScCB->setEnabled(providesSC(font));
|
|
|
|
fontModule->fontOsfCB->setEnabled(providesOSF(font));
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::sansChanged(int item)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
string const font = tex_fonts_sans[item];
|
2007-10-06 22:43:21 +00:00
|
|
|
bool scaleable = providesScale(font);
|
2007-04-24 19:37:34 +00:00
|
|
|
fontModule->scaleSansSB->setEnabled(scaleable);
|
|
|
|
fontModule->scaleSansLA->setEnabled(scaleable);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::ttChanged(int item)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
string const font = tex_fonts_monospaced[item];
|
2007-10-06 22:43:21 +00:00
|
|
|
bool scaleable = providesScale(font);
|
2007-04-24 19:37:34 +00:00
|
|
|
fontModule->scaleTypewriterSB->setEnabled(scaleable);
|
|
|
|
fontModule->scaleTypewriterLA->setEnabled(scaleable);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::updatePagestyle(string const & items, string const & sel)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
2007-06-01 17:44:04 +00:00
|
|
|
pagestyles.clear();
|
2007-04-24 19:37:34 +00:00
|
|
|
pageLayoutModule->pagestyleCO->clear();
|
2007-06-01 17:44:04 +00:00
|
|
|
pageLayoutModule->pagestyleCO->addItem(qt_("Default"));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2007-06-01 17:44:04 +00:00
|
|
|
for (int n = 0; !token(items,'|',n).empty(); ++n) {
|
|
|
|
string style = token(items, '|', n);
|
|
|
|
docstring style_gui = _(style);
|
|
|
|
pagestyles.push_back(pair<string, docstring>(style, style_gui));
|
|
|
|
pageLayoutModule->pagestyleCO->addItem(toqstr(style_gui));
|
|
|
|
}
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2007-06-01 17:44:04 +00:00
|
|
|
if (sel == "default") {
|
|
|
|
pageLayoutModule->pagestyleCO->setCurrentIndex(0);
|
|
|
|
return;
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
2007-06-01 17:44:04 +00:00
|
|
|
|
2007-09-08 21:00:49 +00:00
|
|
|
int nn = 0;
|
2007-06-01 17:44:04 +00:00
|
|
|
|
|
|
|
for (size_t i = 0; i < pagestyles.size(); ++i)
|
|
|
|
if (pagestyles[i].first == sel)
|
2007-09-08 21:00:49 +00:00
|
|
|
nn = pageLayoutModule->pagestyleCO->findText(
|
2007-06-01 17:44:04 +00:00
|
|
|
toqstr(pagestyles[i].second));
|
|
|
|
|
2007-09-08 21:00:49 +00:00
|
|
|
if (nn > 0)
|
2007-09-08 22:08:46 +00:00
|
|
|
pageLayoutModule->pagestyleCO->setCurrentIndex(nn);
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-03-10 21:31:22 +00:00
|
|
|
void GuiDocument::browseLayout()
|
|
|
|
{
|
|
|
|
QString const label1 = qt_("Layouts|#o#O");
|
|
|
|
QString const dir1 = toqstr(lyxrc.document_path);
|
2008-04-20 19:56:01 +00:00
|
|
|
QStringList const filter(qt_("LyX Layout (*.layout)"));
|
2008-03-10 21:31:22 +00:00
|
|
|
QString file = browseRelFile(QString(), bufferFilepath(),
|
|
|
|
qt_("Local layout file"), filter, false,
|
|
|
|
label1, dir1);
|
|
|
|
|
2008-04-20 21:05:35 +00:00
|
|
|
if (!file.endsWith(".layout"))
|
2008-03-10 21:31:22 +00:00
|
|
|
return;
|
|
|
|
|
2008-04-21 06:36:06 +00:00
|
|
|
FileName layoutFile = support::makeAbsPath(fromqstr(file),
|
2008-03-10 21:31:22 +00:00
|
|
|
fromqstr(bufferFilepath()));
|
|
|
|
|
2008-07-11 02:43:02 +00:00
|
|
|
int const ret = Alert::prompt(_("Local layout file"),
|
|
|
|
_("The layout file you have selected is a local layout\n"
|
|
|
|
"file, not one in the system or user directory. Your\n"
|
|
|
|
"document may not work with this layout if you do not\n"
|
|
|
|
"keep the layout file in the document directory."),
|
|
|
|
1, 1, _("&Set Layout"), _("&Cancel"));
|
|
|
|
if (ret == 1)
|
|
|
|
return;
|
|
|
|
|
2008-03-10 21:31:22 +00:00
|
|
|
// load the layout file
|
|
|
|
LayoutFileList & bcl = LayoutFileList::get();
|
|
|
|
string classname = layoutFile.onlyFileName();
|
2008-07-11 02:43:02 +00:00
|
|
|
// this will update an existing layout if that layout has been loaded before.
|
|
|
|
LayoutFileIndex name = bcl.addLocalLayout(
|
2008-03-10 21:31:22 +00:00
|
|
|
classname.substr(0, classname.size() - 7),
|
2008-07-11 02:43:02 +00:00
|
|
|
layoutFile.onlyPath().absFilename());
|
2008-03-10 21:31:22 +00:00
|
|
|
|
|
|
|
if (name.empty()) {
|
|
|
|
Alert::error(_("Error"),
|
|
|
|
_("Unable to read local layout file."));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// do not trigger classChanged if there is no change.
|
|
|
|
if (latexModule->classCO->currentText() == toqstr(name))
|
|
|
|
return;
|
|
|
|
|
|
|
|
// add to combo box
|
|
|
|
int idx = latexModule->classCO->findText(toqstr(name));
|
|
|
|
if (idx == -1) {
|
|
|
|
classes_model_.insertRow(0, toqstr(name), name);
|
|
|
|
latexModule->classCO->setCurrentIndex(0);
|
|
|
|
} else
|
|
|
|
latexModule->classCO->setCurrentIndex(idx);
|
2008-07-11 02:43:02 +00:00
|
|
|
|
2008-03-10 21:31:22 +00:00
|
|
|
classChanged();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-04-28 16:38:56 +00:00
|
|
|
void GuiDocument::browseMaster()
|
|
|
|
{
|
|
|
|
QString const title = qt_("Select master document");
|
|
|
|
QString const dir1 = toqstr(lyxrc.document_path);
|
|
|
|
QString const old = latexModule->childDocLE->text();
|
|
|
|
QString const docpath = toqstr(support::onlyPath(buffer().absFileName()));
|
|
|
|
QStringList const filter(qt_("LyX Files (*.lyx)"));
|
|
|
|
QString file = browseRelFile(old, docpath, title, filter, false,
|
|
|
|
qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
|
|
|
|
|
|
|
|
latexModule->childDocLE->setText(file);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::classChanged()
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
2008-02-28 21:04:55 +00:00
|
|
|
int idx = latexModule->classCO->currentIndex();
|
|
|
|
if (idx < 0)
|
|
|
|
return;
|
|
|
|
string const classname = classes_model_.getIDString(idx);
|
2008-07-11 02:43:02 +00:00
|
|
|
|
2008-03-24 12:31:07 +00:00
|
|
|
// FIXME Note that by doing things this way, we load the TextClass
|
|
|
|
// as soon as it is selected. So, if you use the scroll wheel when
|
|
|
|
// sitting on the combo box, we'll load a lot of TextClass objects
|
|
|
|
// very quickly. This could be changed.
|
2008-02-28 21:04:55 +00:00
|
|
|
if (!bp_.setBaseClass(classname)) {
|
|
|
|
Alert::error(_("Error"), _("Unable to set document class."));
|
|
|
|
return;
|
|
|
|
}
|
2008-01-10 06:22:42 +00:00
|
|
|
if (lyxrc.auto_reset_options) {
|
2008-01-15 10:38:19 +00:00
|
|
|
if (applyPB->isEnabled()) {
|
|
|
|
int const ret = Alert::prompt(_("Unapplied changes"),
|
2008-03-02 12:36:30 +00:00
|
|
|
_("Some changes in the dialog were not yet applied.\n"
|
2008-01-15 10:38:19 +00:00
|
|
|
"If you do not apply now, they will be lost after this action."),
|
|
|
|
1, 1, _("&Apply"), _("&Dismiss"));
|
|
|
|
if (ret == 0)
|
|
|
|
applyView();
|
|
|
|
}
|
2007-10-06 22:43:21 +00:00
|
|
|
bp_.useClassDefaults();
|
2008-05-15 08:41:17 +00:00
|
|
|
paramsToDialog(bp_);
|
2008-01-10 06:22:42 +00:00
|
|
|
}
|
2008-07-25 16:48:48 +00:00
|
|
|
// FIXME There's a little bug here connected with auto_reset, namely,
|
|
|
|
// that, if the preceding is skipped and the user has changed the
|
|
|
|
// modules before changing the class, those changes will be lost on
|
|
|
|
// update. But maybe that's what we want?
|
|
|
|
updateSelectedModules();
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-01-09 18:51:02 +00:00
|
|
|
namespace {
|
2008-02-24 15:44:11 +00:00
|
|
|
// This is an insanely complicated attempt to make this sort of thing
|
|
|
|
// work with RTL languages.
|
2008-01-09 18:51:02 +00:00
|
|
|
docstring formatStrVec(vector<string> const & v, docstring const & s)
|
|
|
|
{
|
|
|
|
//this mess formats the list as "v[0], v[1], ..., [s] v[n]"
|
|
|
|
int const vSize = v.size();
|
|
|
|
if (v.size() == 0)
|
|
|
|
return docstring();
|
|
|
|
else if (v.size() == 1)
|
|
|
|
return from_ascii(v[0]);
|
|
|
|
else if (v.size() == 2) {
|
|
|
|
docstring retval = _("%1$s and %2$s");
|
|
|
|
retval = subst(retval, _("and"), s);
|
|
|
|
return bformat(retval, from_ascii(v[0]), from_ascii(v[1]));
|
|
|
|
}
|
|
|
|
//The idea here is to format all but the last two items...
|
|
|
|
docstring t2 = _("%1$s, %2$s");
|
|
|
|
docstring retval = from_ascii(v[0]);
|
|
|
|
for (int i = 1; i < vSize - 2; ++i)
|
|
|
|
retval = bformat(t2, retval, from_ascii(v[i]));
|
|
|
|
//...and then to plug them, and the last two, into this schema
|
|
|
|
docstring t = _("%1$s, %2$s, and %3$s");
|
|
|
|
t = subst(t, _("and"), s);
|
|
|
|
return bformat(t, retval, from_ascii(v[vSize - 2]), from_ascii(v[vSize - 1]));
|
|
|
|
}
|
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
|
|
|
|
|
|
|
vector<string> idsToNames(vector<string> const & idList)
|
|
|
|
{
|
|
|
|
vector<string> retval;
|
|
|
|
vector<string>::const_iterator it = idList.begin();
|
|
|
|
vector<string>::const_iterator end = idList.end();
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
LyXModule const * const mod = moduleList[*it];
|
|
|
|
if (!mod)
|
|
|
|
retval.push_back(*it + " (Unavailable)");
|
|
|
|
else
|
|
|
|
retval.push_back(mod->getName());
|
|
|
|
}
|
|
|
|
return retval;
|
|
|
|
}
|
2008-01-09 18:51:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::updateModuleInfo()
|
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
|
|
|
{
|
|
|
|
selectionManager->update();
|
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
|
|
|
|
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
|
|
|
//Module 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
|
|
|
bool const focusOnSelected = selectionManager->selectedFocused();
|
|
|
|
QListView const * const lv =
|
|
|
|
focusOnSelected ? latexModule->selectedLV : latexModule->availableLV;
|
|
|
|
if (lv->selectionModel()->selectedIndexes().isEmpty()) {
|
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
|
|
|
latexModule->infoML->document()->clear();
|
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
|
|
|
return;
|
|
|
|
}
|
|
|
|
QModelIndex const & idx = lv->selectionModel()->currentIndex();
|
|
|
|
GuiIdListModel const & idModel =
|
2008-02-28 21:04:55 +00:00
|
|
|
focusOnSelected ? modules_sel_model_ : modules_av_model_;
|
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
|
|
|
string const modName = idModel.getIDString(idx.row());
|
|
|
|
docstring desc = getModuleDescription(modName);
|
|
|
|
|
|
|
|
vector<string> pkgList = getPackageList(modName);
|
|
|
|
docstring pkgdesc = formatStrVec(pkgList, _("and"));
|
|
|
|
if (!pkgdesc.empty()) {
|
|
|
|
if (!desc.empty())
|
|
|
|
desc += "\n";
|
|
|
|
desc += bformat(_("Package(s) required: %1$s."), pkgdesc);
|
|
|
|
}
|
2008-01-09 18:51:02 +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
|
|
|
pkgList = getRequiredList(modName);
|
|
|
|
if (!pkgList.empty()) {
|
|
|
|
vector<string> const reqDescs = idsToNames(pkgList);
|
|
|
|
pkgdesc = formatStrVec(reqDescs, _("or"));
|
|
|
|
if (!desc.empty())
|
|
|
|
desc += "\n";
|
|
|
|
desc += bformat(_("Module required: %1$s."), pkgdesc);
|
|
|
|
}
|
2008-01-09 18:51:02 +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
|
|
|
pkgList = getExcludedList(modName);
|
|
|
|
if (!pkgList.empty()) {
|
|
|
|
vector<string> const reqDescs = idsToNames(pkgList);
|
|
|
|
pkgdesc = formatStrVec(reqDescs, _( "and"));
|
|
|
|
if (!desc.empty())
|
|
|
|
desc += "\n";
|
|
|
|
desc += bformat(_("Modules excluded: %1$s."), pkgdesc);
|
|
|
|
}
|
2008-01-09 18:51:02 +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
|
|
|
if (!isModuleAvailable(modName)) {
|
|
|
|
if (!desc.empty())
|
|
|
|
desc += "\n";
|
|
|
|
desc += _("WARNING: Some packages are unavailable!");
|
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
|
|
|
}
|
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
|
|
|
|
|
|
|
latexModule->infoML->document()->setPlainText(toqstr(desc));
|
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-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::updateNumbering()
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
2008-02-28 01:42:02 +00:00
|
|
|
DocumentClass const & tclass = bp_.documentClass();
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
numberingModule->tocTW->setUpdatesEnabled(false);
|
|
|
|
numberingModule->tocTW->clear();
|
|
|
|
|
|
|
|
int const depth = numberingModule->depthSL->value();
|
|
|
|
int const toc = numberingModule->tocSL->value();
|
|
|
|
QString const no = qt_("No");
|
|
|
|
QString const yes = qt_("Yes");
|
|
|
|
QTreeWidgetItem * item = 0;
|
2008-03-06 05:59:21 +00:00
|
|
|
|
|
|
|
DocumentClass::const_iterator lit = tclass.begin();
|
|
|
|
DocumentClass::const_iterator len = tclass.end();
|
|
|
|
for (; lit != len; ++lit) {
|
2008-03-06 20:01:30 +00:00
|
|
|
int const toclevel = lit->toclevel;
|
|
|
|
if (toclevel != Layout::NOT_IN_TOC && lit->labeltype == LABEL_COUNTER) {
|
2007-04-24 19:37:34 +00:00
|
|
|
item = new QTreeWidgetItem(numberingModule->tocTW);
|
2008-03-06 20:01:30 +00:00
|
|
|
item->setText(0, toqstr(translateIfPossible(lit->name())));
|
2007-04-24 19:37:34 +00:00
|
|
|
item->setText(1, (toclevel <= depth) ? yes : no);
|
|
|
|
item->setText(2, (toclevel <= toc) ? yes : no);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
numberingModule->tocTW->setUpdatesEnabled(true);
|
|
|
|
numberingModule->tocTW->update();
|
|
|
|
}
|
|
|
|
|
2007-09-20 22:31:18 +00:00
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::apply(BufferParams & params)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
// preamble
|
2007-05-14 12:09:14 +00:00
|
|
|
preambleModule->apply(params);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
// biblio
|
2008-04-20 15:00:11 +00:00
|
|
|
params.setCiteEngine(ENGINE_BASIC);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
if (biblioModule->citeNatbibRB->isChecked()) {
|
|
|
|
bool const use_numerical_citations =
|
|
|
|
biblioModule->citeStyleCO->currentIndex();
|
|
|
|
if (use_numerical_citations)
|
2008-04-20 15:00:11 +00:00
|
|
|
params.setCiteEngine(ENGINE_NATBIB_NUMERICAL);
|
2007-04-24 19:37:34 +00:00
|
|
|
else
|
2008-04-20 15:00:11 +00:00
|
|
|
params.setCiteEngine(ENGINE_NATBIB_AUTHORYEAR);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
} else if (biblioModule->citeJurabibRB->isChecked())
|
2008-04-20 15:00:11 +00:00
|
|
|
params.setCiteEngine(ENGINE_JURABIB);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
params.use_bibtopic =
|
|
|
|
biblioModule->bibtopicCB->isChecked();
|
|
|
|
|
|
|
|
// language & quotes
|
2007-09-19 12:29:08 +00:00
|
|
|
if (langModule->defaultencodingRB->isChecked()) {
|
2007-04-24 19:37:34 +00:00
|
|
|
params.inputenc = "auto";
|
|
|
|
} else {
|
|
|
|
int i = langModule->encodingCO->currentIndex();
|
|
|
|
if (i == 0)
|
|
|
|
params.inputenc = "default";
|
2008-07-11 08:56:17 +00:00
|
|
|
else {
|
|
|
|
QString const enc_gui =
|
|
|
|
langModule->encodingCO->currentText();
|
|
|
|
Encodings::const_iterator it = encodings.begin();
|
|
|
|
Encodings::const_iterator const end = encodings.end();
|
|
|
|
bool found = false;
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
if (qt_(it->guiName()) == enc_gui) {
|
|
|
|
params.inputenc = it->latexName();
|
|
|
|
found = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!found) {
|
|
|
|
// should not happen
|
|
|
|
lyxerr << "GuiDocument::apply: Unknown encoding! Resetting to default" << endl;
|
|
|
|
params.inputenc = "default";
|
|
|
|
}
|
|
|
|
}
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
2008-03-15 00:22:54 +00:00
|
|
|
InsetQuotes::QuoteLanguage lga = InsetQuotes::EnglishQuotes;
|
2007-04-24 19:37:34 +00:00
|
|
|
switch (langModule->quoteStyleCO->currentIndex()) {
|
|
|
|
case 0:
|
2008-03-15 00:22:54 +00:00
|
|
|
lga = InsetQuotes::EnglishQuotes;
|
2007-04-24 19:37:34 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
2008-03-15 00:22:54 +00:00
|
|
|
lga = InsetQuotes::SwedishQuotes;
|
2007-04-24 19:37:34 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2008-03-15 00:22:54 +00:00
|
|
|
lga = InsetQuotes::GermanQuotes;
|
2007-04-24 19:37:34 +00:00
|
|
|
break;
|
|
|
|
case 3:
|
2008-03-15 00:22:54 +00:00
|
|
|
lga = InsetQuotes::PolishQuotes;
|
2007-04-24 19:37:34 +00:00
|
|
|
break;
|
|
|
|
case 4:
|
2008-03-15 00:22:54 +00:00
|
|
|
lga = InsetQuotes::FrenchQuotes;
|
2007-04-24 19:37:34 +00:00
|
|
|
break;
|
|
|
|
case 5:
|
2008-03-15 00:22:54 +00:00
|
|
|
lga = InsetQuotes::DanishQuotes;
|
2007-04-24 19:37:34 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
params.quotes_language = lga;
|
|
|
|
|
2008-05-08 09:18:45 +00:00
|
|
|
QString const lang = langModule->languageCO->itemData(
|
|
|
|
langModule->languageCO->currentIndex()).toString();
|
|
|
|
params.language = lyx::languages.getLanguage(fromqstr(lang));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
// numbering
|
2008-02-28 01:42:02 +00:00
|
|
|
if (params.documentClass().hasTocLevels()) {
|
2007-04-24 19:37:34 +00:00
|
|
|
params.tocdepth = numberingModule->tocSL->value();
|
|
|
|
params.secnumdepth = numberingModule->depthSL->value();
|
|
|
|
}
|
|
|
|
|
|
|
|
// bullets
|
|
|
|
params.user_defined_bullet(0) = bulletsModule->getBullet(0);
|
|
|
|
params.user_defined_bullet(1) = bulletsModule->getBullet(1);
|
|
|
|
params.user_defined_bullet(2) = bulletsModule->getBullet(2);
|
|
|
|
params.user_defined_bullet(3) = bulletsModule->getBullet(3);
|
|
|
|
|
|
|
|
// packages
|
|
|
|
params.graphicsDriver =
|
2007-06-01 17:44:04 +00:00
|
|
|
tex_graphics[latexModule->psdriverCO->currentIndex()];
|
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
|
|
|
|
2008-01-05 17:04:56 +00:00
|
|
|
// text layout
|
2008-02-28 21:04:55 +00:00
|
|
|
int idx = latexModule->classCO->currentIndex();
|
|
|
|
if (idx >= 0) {
|
|
|
|
string const classname = classes_model_.getIDString(idx);
|
|
|
|
params.setBaseClass(classname);
|
|
|
|
}
|
2008-01-05 17:04:56 +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
|
|
|
// Modules
|
|
|
|
params.clearLayoutModules();
|
2008-02-28 21:04:55 +00:00
|
|
|
int const srows = modules_sel_model_.rowCount();
|
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
|
|
|
vector<string> selModList;
|
|
|
|
for (int i = 0; i < srows; ++i)
|
2008-02-28 21:04:55 +00:00
|
|
|
params.addLayoutModule(modules_sel_model_.getIDString(i));
|
2008-07-27 17:46:27 +00:00
|
|
|
// update the list of removed modules
|
|
|
|
params.clearRemovedModules();
|
|
|
|
set<string> const & reqmods = params.baseClass()->defaultModules();
|
|
|
|
set<string>::const_iterator rit = reqmods.begin();
|
|
|
|
set<string>::const_iterator ren = reqmods.end();
|
|
|
|
// check each of the required modules
|
|
|
|
for (; rit != ren; rit++) {
|
|
|
|
vector<string>::const_iterator mit = params.getModules().begin();
|
|
|
|
vector<string>::const_iterator men = params.getModules().end();
|
|
|
|
bool found = false;
|
|
|
|
for (; mit != men; mit++) {
|
|
|
|
if (*rit == *mit) {
|
|
|
|
found = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!found) {
|
|
|
|
// the module isn't present so must have been removed by the user
|
|
|
|
params.addRemovedModule(*rit);
|
|
|
|
}
|
|
|
|
}
|
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-04-24 19:37:34 +00:00
|
|
|
if (mathsModule->amsautoCB->isChecked()) {
|
|
|
|
params.use_amsmath = BufferParams::package_auto;
|
|
|
|
} else {
|
|
|
|
if (mathsModule->amsCB->isChecked())
|
|
|
|
params.use_amsmath = BufferParams::package_on;
|
|
|
|
else
|
|
|
|
params.use_amsmath = BufferParams::package_off;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (mathsModule->esintautoCB->isChecked())
|
|
|
|
params.use_esint = BufferParams::package_auto;
|
|
|
|
else {
|
|
|
|
if (mathsModule->esintCB->isChecked())
|
|
|
|
params.use_esint = BufferParams::package_on;
|
|
|
|
else
|
|
|
|
params.use_esint = BufferParams::package_off;
|
|
|
|
}
|
|
|
|
|
2007-06-01 17:44:04 +00:00
|
|
|
if (pageLayoutModule->pagestyleCO->currentIndex() == 0)
|
|
|
|
params.pagestyle = "default";
|
|
|
|
else {
|
|
|
|
docstring style_gui =
|
|
|
|
qstring_to_ucs4(pageLayoutModule->pagestyleCO->currentText());
|
|
|
|
for (size_t i = 0; i < pagestyles.size(); ++i)
|
|
|
|
if (pagestyles[i].second == style_gui)
|
|
|
|
params.pagestyle = pagestyles[i].first;
|
|
|
|
}
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
switch (textLayoutModule->lspacingCO->currentIndex()) {
|
|
|
|
case 0:
|
|
|
|
params.spacing().set(Spacing::Single);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
params.spacing().set(Spacing::Onehalf);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
params.spacing().set(Spacing::Double);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
params.spacing().set(Spacing::Other,
|
|
|
|
fromqstr(textLayoutModule->lspacingLE->text()));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (textLayoutModule->twoColumnCB->isChecked())
|
|
|
|
params.columns = 2;
|
|
|
|
else
|
|
|
|
params.columns = 1;
|
|
|
|
|
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
|
|
|
// text should have passed validation
|
2007-05-25 12:32:08 +00:00
|
|
|
params.listings_params =
|
|
|
|
InsetListingsParams(fromqstr(textLayoutModule->listingsED->toPlainText())).params();
|
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
|
|
|
|
2007-04-24 19:37:34 +00:00
|
|
|
if (textLayoutModule->indentRB->isChecked())
|
2008-03-15 00:22:54 +00:00
|
|
|
params.paragraph_separation = BufferParams::ParagraphIndentSeparation;
|
2007-04-24 19:37:34 +00:00
|
|
|
else
|
2008-03-15 00:22:54 +00:00
|
|
|
params.paragraph_separation = BufferParams::ParagraphSkipSeparation;
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
switch (textLayoutModule->skipCO->currentIndex()) {
|
|
|
|
case 0:
|
|
|
|
params.setDefSkip(VSpace(VSpace::SMALLSKIP));
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
params.setDefSkip(VSpace(VSpace::MEDSKIP));
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
params.setDefSkip(VSpace(VSpace::BIGSKIP));
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
{
|
|
|
|
VSpace vs = VSpace(
|
|
|
|
widgetsToLength(textLayoutModule->skipLE,
|
|
|
|
textLayoutModule->skipLengthCO)
|
|
|
|
);
|
|
|
|
params.setDefSkip(vs);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
// DocumentDefskipCB assures that this never happens
|
|
|
|
// so Assert then !!! - jbl
|
|
|
|
params.setDefSkip(VSpace(VSpace::MEDSKIP));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
params.options =
|
|
|
|
fromqstr(latexModule->optionsLE->text());
|
|
|
|
|
2008-04-28 16:38:56 +00:00
|
|
|
if (latexModule->childDocGB->isChecked())
|
|
|
|
params.master =
|
|
|
|
fromqstr(latexModule->childDocLE->text());
|
|
|
|
else
|
|
|
|
params.master = string();
|
|
|
|
|
2007-04-24 19:37:34 +00:00
|
|
|
params.float_placement = floatModule->get();
|
|
|
|
|
|
|
|
// fonts
|
|
|
|
params.fontsRoman =
|
|
|
|
tex_fonts_roman[fontModule->fontsRomanCO->currentIndex()];
|
|
|
|
|
|
|
|
params.fontsSans =
|
|
|
|
tex_fonts_sans[fontModule->fontsSansCO->currentIndex()];
|
|
|
|
|
|
|
|
params.fontsTypewriter =
|
|
|
|
tex_fonts_monospaced[fontModule->fontsTypewriterCO->currentIndex()];
|
|
|
|
|
2008-06-05 06:18:34 +00:00
|
|
|
params.fontsCJK =
|
|
|
|
fromqstr(fontModule->cjkFontLE->text());
|
|
|
|
|
2007-04-24 19:37:34 +00:00
|
|
|
params.fontsSansScale = fontModule->scaleSansSB->value();
|
|
|
|
|
|
|
|
params.fontsTypewriterScale = fontModule->scaleTypewriterSB->value();
|
|
|
|
|
|
|
|
params.fontsSC = fontModule->fontScCB->isChecked();
|
|
|
|
|
|
|
|
params.fontsOSF = fontModule->fontOsfCB->isChecked();
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
params.fontsDefaultFamily = GuiDocument::fontfamilies[
|
2007-04-24 19:37:34 +00:00
|
|
|
fontModule->fontsDefaultCO->currentIndex()];
|
|
|
|
|
|
|
|
if (fontModule->fontsizeCO->currentIndex() == 0)
|
|
|
|
params.fontsize = "default";
|
|
|
|
else
|
|
|
|
params.fontsize =
|
|
|
|
fromqstr(fontModule->fontsizeCO->currentText());
|
|
|
|
|
|
|
|
// paper
|
|
|
|
params.papersize = PAPER_SIZE(
|
|
|
|
pageLayoutModule->papersizeCO->currentIndex());
|
|
|
|
|
|
|
|
// custom, A3, B3 and B4 paper sizes need geometry
|
|
|
|
int psize = pageLayoutModule->papersizeCO->currentIndex();
|
|
|
|
bool geom_papersize = (psize == 1 || psize == 5 || psize == 8 || psize == 9);
|
|
|
|
|
|
|
|
params.paperwidth = widgetsToLength(pageLayoutModule->paperwidthLE,
|
|
|
|
pageLayoutModule->paperwidthUnitCO);
|
|
|
|
|
|
|
|
params.paperheight = widgetsToLength(pageLayoutModule->paperheightLE,
|
|
|
|
pageLayoutModule->paperheightUnitCO);
|
|
|
|
|
|
|
|
if (pageLayoutModule->facingPagesCB->isChecked())
|
2007-11-07 23:25:08 +00:00
|
|
|
params.sides = TwoSides;
|
2007-04-24 19:37:34 +00:00
|
|
|
else
|
2007-11-07 23:25:08 +00:00
|
|
|
params.sides = OneSide;
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
if (pageLayoutModule->landscapeRB->isChecked())
|
|
|
|
params.orientation = ORIENTATION_LANDSCAPE;
|
|
|
|
else
|
|
|
|
params.orientation = ORIENTATION_PORTRAIT;
|
|
|
|
|
|
|
|
// margins
|
2008-03-08 07:59:47 +00:00
|
|
|
params.use_geometry = !marginsModule->marginCB->isChecked()
|
|
|
|
|| geom_papersize;
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2008-03-08 07:59:47 +00:00
|
|
|
Ui::MarginsUi const * m = marginsModule;
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
params.leftmargin = widgetsToLength(m->innerLE, m->innerUnit);
|
|
|
|
params.topmargin = widgetsToLength(m->topLE, m->topUnit);
|
|
|
|
params.rightmargin = widgetsToLength(m->outerLE, m->outerUnit);
|
|
|
|
params.bottommargin = widgetsToLength(m->bottomLE, m->bottomUnit);
|
|
|
|
params.headheight = widgetsToLength(m->headheightLE, m->headheightUnit);
|
|
|
|
params.headsep = widgetsToLength(m->headsepLE, m->headsepUnit);
|
|
|
|
params.footskip = widgetsToLength(m->footskipLE, m->footskipUnit);
|
2008-02-19 05:24:48 +00:00
|
|
|
params.columnsep = widgetsToLength(m->columnsepLE, m->columnsepUnit);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
branchesModule->apply(params);
|
2007-09-20 22:31:18 +00:00
|
|
|
|
|
|
|
// PDF support
|
|
|
|
PDFOptions & pdf = params.pdfoptions();
|
2007-09-22 22:20:15 +00:00
|
|
|
pdf.use_hyperref = pdfSupportModule->use_hyperrefGB->isChecked();
|
2007-09-21 01:00:31 +00:00
|
|
|
pdf.title = fromqstr(pdfSupportModule->titleLE->text());
|
|
|
|
pdf.author = fromqstr(pdfSupportModule->authorLE->text());
|
|
|
|
pdf.subject = fromqstr(pdfSupportModule->subjectLE->text());
|
|
|
|
pdf.keywords = fromqstr(pdfSupportModule->keywordsLE->text());
|
|
|
|
|
|
|
|
pdf.bookmarks = pdfSupportModule->bookmarksGB->isChecked();
|
|
|
|
pdf.bookmarksnumbered = pdfSupportModule->bookmarksnumberedCB->isChecked();
|
|
|
|
pdf.bookmarksopen = pdfSupportModule->bookmarksopenGB->isChecked();
|
2007-09-22 22:20:15 +00:00
|
|
|
pdf.bookmarksopenlevel = pdfSupportModule->bookmarksopenlevelSB->value();
|
2007-09-20 22:31:18 +00:00
|
|
|
|
2007-09-21 01:00:31 +00:00
|
|
|
pdf.breaklinks = pdfSupportModule->breaklinksCB->isChecked();
|
|
|
|
pdf.pdfborder = pdfSupportModule->pdfborderCB->isChecked();
|
2007-10-10 00:34:23 +00:00
|
|
|
pdf.pdfusetitle = pdfSupportModule->pdfusetitleCB->isChecked();
|
2007-09-21 01:00:31 +00:00
|
|
|
pdf.colorlinks = pdfSupportModule->colorlinksCB->isChecked();
|
|
|
|
pdf.backref = pdfSupportModule->backrefCB->isChecked();
|
|
|
|
pdf.pagebackref = pdfSupportModule->pagebackrefCB->isChecked();
|
2007-09-20 22:31:18 +00:00
|
|
|
if (pdfSupportModule->fullscreenCB->isChecked())
|
2007-09-21 01:00:31 +00:00
|
|
|
pdf.pagemode = pdf.pagemode_fullscreen;
|
2007-09-22 22:20:15 +00:00
|
|
|
else
|
|
|
|
pdf.pagemode.clear();
|
2008-03-05 01:14:15 +00:00
|
|
|
pdf.quoted_options = pdf.quoted_options_check(
|
|
|
|
fromqstr(pdfSupportModule->optionsLE->text()));
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-05-15 08:41:17 +00:00
|
|
|
void GuiDocument::paramsToDialog(BufferParams const & params)
|
2007-04-24 19:37:34 +00:00
|
|
|
{
|
|
|
|
// set the default unit
|
2007-04-28 12:58:49 +00:00
|
|
|
Length::UNIT defaultUnit = Length::CM;
|
2007-04-24 19:37:34 +00:00
|
|
|
switch (lyxrc.default_papersize) {
|
|
|
|
case PAPER_DEFAULT: break;
|
|
|
|
|
|
|
|
case PAPER_USLETTER:
|
|
|
|
case PAPER_USLEGAL:
|
|
|
|
case PAPER_USEXECUTIVE:
|
2007-04-28 12:58:49 +00:00
|
|
|
defaultUnit = Length::IN;
|
2007-04-24 19:37:34 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PAPER_A3:
|
|
|
|
case PAPER_A4:
|
|
|
|
case PAPER_A5:
|
|
|
|
case PAPER_B3:
|
|
|
|
case PAPER_B4:
|
|
|
|
case PAPER_B5:
|
2007-04-28 12:58:49 +00:00
|
|
|
defaultUnit = Length::CM;
|
2007-04-24 19:37:34 +00:00
|
|
|
break;
|
|
|
|
case PAPER_CUSTOM:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
// preamble
|
2007-10-06 22:43:21 +00:00
|
|
|
preambleModule->update(params, id());
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
// biblio
|
|
|
|
biblioModule->citeDefaultRB->setChecked(
|
2008-04-20 15:00:11 +00:00
|
|
|
params.citeEngine() == ENGINE_BASIC);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
biblioModule->citeNatbibRB->setChecked(
|
2008-04-20 15:00:11 +00:00
|
|
|
params.citeEngine() == ENGINE_NATBIB_NUMERICAL ||
|
|
|
|
params.citeEngine() == ENGINE_NATBIB_AUTHORYEAR);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
biblioModule->citeStyleCO->setCurrentIndex(
|
2008-04-20 15:00:11 +00:00
|
|
|
params.citeEngine() == ENGINE_NATBIB_NUMERICAL);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
biblioModule->citeJurabibRB->setChecked(
|
2008-04-20 15:00:11 +00:00
|
|
|
params.citeEngine() == ENGINE_JURABIB);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
biblioModule->bibtopicCB->setChecked(
|
|
|
|
params.use_bibtopic);
|
|
|
|
|
|
|
|
// language & quotes
|
2008-05-08 09:18:45 +00:00
|
|
|
int const pos = langModule->languageCO->findData(toqstr(
|
|
|
|
params.language->lang()));
|
2007-04-24 19:37:34 +00:00
|
|
|
langModule->languageCO->setCurrentIndex(pos);
|
|
|
|
|
|
|
|
langModule->quoteStyleCO->setCurrentIndex(
|
|
|
|
params.quotes_language);
|
|
|
|
|
2007-09-19 12:29:08 +00:00
|
|
|
bool default_enc = true;
|
2007-04-24 19:37:34 +00:00
|
|
|
if (params.inputenc != "auto") {
|
2007-09-19 12:29:08 +00:00
|
|
|
default_enc = false;
|
2007-04-24 19:37:34 +00:00
|
|
|
if (params.inputenc == "default") {
|
|
|
|
langModule->encodingCO->setCurrentIndex(0);
|
|
|
|
} else {
|
2008-07-11 08:56:17 +00:00
|
|
|
string enc_gui;
|
|
|
|
Encodings::const_iterator it = encodings.begin();
|
|
|
|
Encodings::const_iterator const end = encodings.end();
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
if (it->latexName() == params.inputenc) {
|
|
|
|
enc_gui = it->guiName();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2007-04-24 19:37:34 +00:00
|
|
|
int const i = langModule->encodingCO->findText(
|
2008-07-11 08:56:17 +00:00
|
|
|
qt_(enc_gui));
|
2007-04-24 19:37:34 +00:00
|
|
|
if (i >= 0)
|
|
|
|
langModule->encodingCO->setCurrentIndex(i);
|
|
|
|
else
|
|
|
|
// unknown encoding. Set to default.
|
2007-09-19 12:29:08 +00:00
|
|
|
default_enc = true;
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
}
|
2007-09-19 12:29:08 +00:00
|
|
|
langModule->defaultencodingRB->setChecked(default_enc);
|
|
|
|
langModule->otherencodingRB->setChecked(!default_enc);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
// numbering
|
2008-02-28 21:04:55 +00:00
|
|
|
int const min_toclevel = documentClass().min_toclevel();
|
|
|
|
int const max_toclevel = documentClass().max_toclevel();
|
|
|
|
if (documentClass().hasTocLevels()) {
|
2007-04-24 19:37:34 +00:00
|
|
|
numberingModule->setEnabled(true);
|
|
|
|
numberingModule->depthSL->setMinimum(min_toclevel - 1);
|
|
|
|
numberingModule->depthSL->setMaximum(max_toclevel);
|
|
|
|
numberingModule->depthSL->setValue(params.secnumdepth);
|
|
|
|
numberingModule->tocSL->setMaximum(min_toclevel - 1);
|
|
|
|
numberingModule->tocSL->setMaximum(max_toclevel);
|
|
|
|
numberingModule->tocSL->setValue(params.tocdepth);
|
|
|
|
updateNumbering();
|
|
|
|
} else {
|
|
|
|
numberingModule->setEnabled(false);
|
|
|
|
numberingModule->tocTW->clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
// bullets
|
|
|
|
bulletsModule->setBullet(0, params.user_defined_bullet(0));
|
|
|
|
bulletsModule->setBullet(1, params.user_defined_bullet(1));
|
|
|
|
bulletsModule->setBullet(2, params.user_defined_bullet(2));
|
|
|
|
bulletsModule->setBullet(3, params.user_defined_bullet(3));
|
|
|
|
bulletsModule->init();
|
|
|
|
|
|
|
|
// packages
|
2007-06-01 17:44:04 +00:00
|
|
|
int nitem = findToken(tex_graphics, params.graphicsDriver);
|
|
|
|
if (nitem >= 0)
|
|
|
|
latexModule->psdriverCO->setCurrentIndex(nitem);
|
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
|
|
|
updateModuleInfo();
|
|
|
|
|
2007-04-24 19:37:34 +00:00
|
|
|
mathsModule->amsCB->setChecked(
|
|
|
|
params.use_amsmath == BufferParams::package_on);
|
|
|
|
mathsModule->amsautoCB->setChecked(
|
|
|
|
params.use_amsmath == BufferParams::package_auto);
|
|
|
|
|
|
|
|
mathsModule->esintCB->setChecked(
|
|
|
|
params.use_esint == BufferParams::package_on);
|
|
|
|
mathsModule->esintautoCB->setChecked(
|
|
|
|
params.use_esint == BufferParams::package_auto);
|
|
|
|
|
|
|
|
switch (params.spacing().getSpace()) {
|
|
|
|
case Spacing::Other: nitem = 3; break;
|
|
|
|
case Spacing::Double: nitem = 2; break;
|
|
|
|
case Spacing::Onehalf: nitem = 1; break;
|
|
|
|
case Spacing::Default: case Spacing::Single: nitem = 0; break;
|
|
|
|
}
|
|
|
|
|
|
|
|
// text layout
|
2008-03-01 22:08:16 +00:00
|
|
|
string const & layoutID = params.baseClassID();
|
|
|
|
setLayoutComboByIDString(layoutID);
|
2008-02-28 21:04:55 +00:00
|
|
|
|
|
|
|
updatePagestyle(documentClass().opt_pagestyle(),
|
2007-04-24 19:37:34 +00:00
|
|
|
params.pagestyle);
|
|
|
|
|
|
|
|
textLayoutModule->lspacingCO->setCurrentIndex(nitem);
|
|
|
|
if (params.spacing().getSpace() == Spacing::Other) {
|
|
|
|
textLayoutModule->lspacingLE->setText(
|
|
|
|
toqstr(params.spacing().getValueAsString()));
|
|
|
|
}
|
|
|
|
setLSpacing(nitem);
|
|
|
|
|
2008-03-15 00:22:54 +00:00
|
|
|
if (params.paragraph_separation == BufferParams::ParagraphIndentSeparation)
|
2007-04-24 19:37:34 +00:00
|
|
|
textLayoutModule->indentRB->setChecked(true);
|
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
|
|
|
else
|
2007-04-24 19:37:34 +00:00
|
|
|
textLayoutModule->skipRB->setChecked(true);
|
|
|
|
|
|
|
|
int skip = 0;
|
|
|
|
switch (params.getDefSkip().kind()) {
|
|
|
|
case VSpace::SMALLSKIP:
|
|
|
|
skip = 0;
|
|
|
|
break;
|
|
|
|
case VSpace::MEDSKIP:
|
|
|
|
skip = 1;
|
|
|
|
break;
|
|
|
|
case VSpace::BIGSKIP:
|
|
|
|
skip = 2;
|
|
|
|
break;
|
|
|
|
case VSpace::LENGTH:
|
|
|
|
{
|
|
|
|
skip = 3;
|
|
|
|
string const length = params.getDefSkip().asLyXCommand();
|
|
|
|
lengthToWidgets(textLayoutModule->skipLE,
|
|
|
|
textLayoutModule->skipLengthCO,
|
|
|
|
length, defaultUnit);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
skip = 0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
textLayoutModule->skipCO->setCurrentIndex(skip);
|
|
|
|
setSkip(skip);
|
|
|
|
|
|
|
|
textLayoutModule->twoColumnCB->setChecked(
|
|
|
|
params.columns == 2);
|
2007-05-28 22:27:45 +00:00
|
|
|
|
Add support for listings package. Two listings command \lstinline, \lstinputlisting and an environment \lstlisting are supported, along with preamble \lstset. \lstinputlisting is implemented through Include dialog, and the other two are implemented with a new inset listings, along with its dialog.
* src/LyXAction.cpp: listing-insert action
* src/insets/Inset.h,cpp: LISTINGS_CODE
* src/insets/InsetInclude.cpp: handle \lstinputlisting
* src/insets/InsetListings.h,cpp: new listings inset
* src/insets/InsetListingsParams.h,cpp: parameters from listings package
* src/insets/InsetCommandParams.h,cpp: handle lstinputlisting option
* src/Bidi.cpp: handle LISTINGS_CODE
* src/frontends/qt4/ui/TextLayoutUi.ui: update UI
* src/frontends/qt4/ui/ListingsUi.ui: new dialog
* src/frontends/qt4/ui/IncludeUi.ui: update UI
* src/frontends/qt4/QInclude.h,cpp: add lstinputlisting
* src/frontends/qt4/QDocument.h,cpp: add textedit for preamble listings_params
* src/frontends/qt4/QListings.h,cpp: new listings inset
* src/frontends/qt4/Dialogs.cpp: new listings dialog
* src/frontends/controllers/ControlInclude.h,cpp: add lstinputlisting
* src/frontends/controllers/ControlListings.h,cpp: new listings inset
* src/LyXFunc.cpp: handle LISTING_CODE
* src/Paragraph.cpp: handle LISTING_CODE
* src/factory.cpp: new listings inset
* src/CutAndPaste.cpp: handle LISTINGS_CODE
* src/LaTeXFeatures.cpp: require listings
* src/Text3.cpp: Handle LISTINGS_CODE
* src/lfuns.h: add LFUN_LISTING_INSERT
* src/Buffer.cpp: change lyx file format to 269
* src/BufferParams.h,cpp: add listings_params to preamble
* lib/lyx2lyx/LyX.py: lyx2lyx
* lib/lyx2lyx/lyx_1_5.py: lyx2lyx
* lib/ui/stdmenus.inc: new menu item (no shortcut!)
* src/insets/Makefile.am: update autotools
* src/frontends/controllers/Makefile.am
* src/frontends/qt4/Makefile.dialogs
* src/frontends/qt4/Makefile.am
* po/POTFILES.in: a few more translatable files.
* development/scons/scons_manifest.py: scons build system
* development/FORMAT: document format changes
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18243 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-09 19:11:42 +00:00
|
|
|
// break listings_params to multiple lines
|
2007-05-25 12:32:08 +00:00
|
|
|
string lstparams =
|
|
|
|
InsetListingsParams(params.listings_params).separatedParams();
|
2007-05-10 10:44:16 +00:00
|
|
|
textLayoutModule->listingsED->setPlainText(toqstr(lstparams));
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
if (!params.options.empty()) {
|
|
|
|
latexModule->optionsLE->setText(
|
|
|
|
toqstr(params.options));
|
|
|
|
} else {
|
2007-09-05 20:33:29 +00:00
|
|
|
latexModule->optionsLE->setText(QString());
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
2008-04-28 16:38:56 +00:00
|
|
|
if (!params.master.empty()) {
|
|
|
|
latexModule->childDocGB->setChecked(true);
|
|
|
|
latexModule->childDocLE->setText(
|
|
|
|
toqstr(params.master));
|
|
|
|
} else {
|
|
|
|
latexModule->childDocLE->setText(QString());
|
|
|
|
latexModule->childDocGB->setChecked(false);
|
|
|
|
}
|
|
|
|
|
2007-04-24 19:37:34 +00:00
|
|
|
floatModule->set(params.float_placement);
|
|
|
|
|
2007-09-05 20:33:29 +00:00
|
|
|
// Fonts
|
2008-02-28 21:04:55 +00:00
|
|
|
updateFontsize(documentClass().opt_fontsize(),
|
2007-04-24 19:37:34 +00:00
|
|
|
params.fontsize);
|
|
|
|
|
|
|
|
int n = findToken(tex_fonts_roman, params.fontsRoman);
|
|
|
|
if (n >= 0) {
|
|
|
|
fontModule->fontsRomanCO->setCurrentIndex(n);
|
|
|
|
romanChanged(n);
|
|
|
|
}
|
|
|
|
|
|
|
|
n = findToken(tex_fonts_sans, params.fontsSans);
|
|
|
|
if (n >= 0) {
|
|
|
|
fontModule->fontsSansCO->setCurrentIndex(n);
|
|
|
|
sansChanged(n);
|
|
|
|
}
|
|
|
|
|
|
|
|
n = findToken(tex_fonts_monospaced, params.fontsTypewriter);
|
|
|
|
if (n >= 0) {
|
|
|
|
fontModule->fontsTypewriterCO->setCurrentIndex(n);
|
|
|
|
ttChanged(n);
|
|
|
|
}
|
|
|
|
|
2008-06-05 06:18:34 +00:00
|
|
|
if (!params.fontsCJK.empty())
|
|
|
|
fontModule->cjkFontLE->setText(
|
|
|
|
toqstr(params.fontsCJK));
|
|
|
|
else
|
|
|
|
fontModule->cjkFontLE->setText(QString());
|
|
|
|
|
2007-04-24 19:37:34 +00:00
|
|
|
fontModule->fontScCB->setChecked(params.fontsSC);
|
|
|
|
fontModule->fontOsfCB->setChecked(params.fontsOSF);
|
|
|
|
fontModule->scaleSansSB->setValue(params.fontsSansScale);
|
|
|
|
fontModule->scaleTypewriterSB->setValue(params.fontsTypewriterScale);
|
2007-10-06 22:43:21 +00:00
|
|
|
n = findToken(GuiDocument::fontfamilies, params.fontsDefaultFamily);
|
2007-04-24 19:37:34 +00:00
|
|
|
if (n >= 0)
|
|
|
|
fontModule->fontsDefaultCO->setCurrentIndex(n);
|
|
|
|
|
|
|
|
// paper
|
|
|
|
int const psize = params.papersize;
|
|
|
|
pageLayoutModule->papersizeCO->setCurrentIndex(psize);
|
|
|
|
setCustomPapersize(psize);
|
|
|
|
|
|
|
|
bool const landscape =
|
|
|
|
params.orientation == ORIENTATION_LANDSCAPE;
|
|
|
|
pageLayoutModule->landscapeRB->setChecked(landscape);
|
|
|
|
pageLayoutModule->portraitRB->setChecked(!landscape);
|
|
|
|
|
|
|
|
pageLayoutModule->facingPagesCB->setChecked(
|
2007-11-07 23:25:08 +00:00
|
|
|
params.sides == TwoSides);
|
2007-04-24 19:37:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
lengthToWidgets(pageLayoutModule->paperwidthLE,
|
|
|
|
pageLayoutModule->paperwidthUnitCO, params.paperwidth, defaultUnit);
|
|
|
|
|
|
|
|
lengthToWidgets(pageLayoutModule->paperheightLE,
|
|
|
|
pageLayoutModule->paperheightUnitCO, params.paperheight, defaultUnit);
|
|
|
|
|
|
|
|
// margins
|
|
|
|
Ui::MarginsUi * m = marginsModule;
|
|
|
|
|
|
|
|
setMargins(!params.use_geometry);
|
|
|
|
|
|
|
|
lengthToWidgets(m->topLE, m->topUnit,
|
|
|
|
params.topmargin, defaultUnit);
|
|
|
|
|
|
|
|
lengthToWidgets(m->bottomLE, m->bottomUnit,
|
|
|
|
params.bottommargin, defaultUnit);
|
|
|
|
|
|
|
|
lengthToWidgets(m->innerLE, m->innerUnit,
|
|
|
|
params.leftmargin, defaultUnit);
|
|
|
|
|
|
|
|
lengthToWidgets(m->outerLE, m->outerUnit,
|
|
|
|
params.rightmargin, defaultUnit);
|
|
|
|
|
|
|
|
lengthToWidgets(m->headheightLE, m->headheightUnit,
|
|
|
|
params.headheight, defaultUnit);
|
|
|
|
|
|
|
|
lengthToWidgets(m->headsepLE, m->headsepUnit,
|
|
|
|
params.headsep, defaultUnit);
|
|
|
|
|
|
|
|
lengthToWidgets(m->footskipLE, m->footskipUnit,
|
|
|
|
params.footskip, defaultUnit);
|
|
|
|
|
2008-02-19 05:24:48 +00:00
|
|
|
lengthToWidgets(m->columnsepLE, m->columnsepUnit,
|
|
|
|
params.columnsep, defaultUnit);
|
|
|
|
|
2007-04-24 19:37:34 +00:00
|
|
|
branchesModule->update(params);
|
2007-09-20 22:31:18 +00:00
|
|
|
|
|
|
|
// PDF support
|
|
|
|
PDFOptions const & pdf = params.pdfoptions();
|
2007-09-22 22:20:15 +00:00
|
|
|
pdfSupportModule->use_hyperrefGB->setChecked(pdf.use_hyperref);
|
2007-09-21 01:00:31 +00:00
|
|
|
pdfSupportModule->titleLE->setText(toqstr(pdf.title));
|
|
|
|
pdfSupportModule->authorLE->setText(toqstr(pdf.author));
|
|
|
|
pdfSupportModule->subjectLE->setText(toqstr(pdf.subject));
|
|
|
|
pdfSupportModule->keywordsLE->setText(toqstr(pdf.keywords));
|
2007-09-20 22:31:18 +00:00
|
|
|
|
2007-09-21 01:00:31 +00:00
|
|
|
pdfSupportModule->bookmarksGB->setChecked(pdf.bookmarks);
|
|
|
|
pdfSupportModule->bookmarksnumberedCB->setChecked(pdf.bookmarksnumbered);
|
|
|
|
pdfSupportModule->bookmarksopenGB->setChecked(pdf.bookmarksopen);
|
2007-09-20 22:31:18 +00:00
|
|
|
|
2007-09-22 22:20:15 +00:00
|
|
|
pdfSupportModule->bookmarksopenlevelSB->setValue(pdf.bookmarksopenlevel);
|
2007-09-20 22:31:18 +00:00
|
|
|
|
2007-09-21 01:00:31 +00:00
|
|
|
pdfSupportModule->breaklinksCB->setChecked(pdf.breaklinks);
|
|
|
|
pdfSupportModule->pdfborderCB->setChecked(pdf.pdfborder);
|
2007-10-10 00:34:23 +00:00
|
|
|
pdfSupportModule->pdfusetitleCB->setChecked(pdf.pdfusetitle);
|
2007-09-21 01:00:31 +00:00
|
|
|
pdfSupportModule->colorlinksCB->setChecked(pdf.colorlinks);
|
|
|
|
pdfSupportModule->backrefCB->setChecked(pdf.backref);
|
|
|
|
pdfSupportModule->pagebackrefCB->setChecked(pdf.pagebackref);
|
2007-09-20 22:31:18 +00:00
|
|
|
pdfSupportModule->fullscreenCB->setChecked
|
2007-09-21 01:00:31 +00:00
|
|
|
(pdf.pagemode == pdf.pagemode_fullscreen);
|
2007-09-20 22:31:18 +00:00
|
|
|
|
|
|
|
pdfSupportModule->optionsLE->setText(
|
2007-09-21 01:00:31 +00:00
|
|
|
toqstr(pdf.quoted_options));
|
2007-04-24 19:37:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::applyView()
|
2006-03-05 17:24:44 +00:00
|
|
|
{
|
2007-10-06 22:43:21 +00:00
|
|
|
apply(params());
|
2006-03-05 17:24:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::saveDocDefault()
|
2006-03-05 17:24:44 +00:00
|
|
|
{
|
|
|
|
// we have to apply the params first
|
2007-09-03 20:28:26 +00:00
|
|
|
applyView();
|
2007-10-06 22:43:21 +00:00
|
|
|
saveAsDefault();
|
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
|
|
|
void GuiDocument::updateAvailableModules()
|
|
|
|
{
|
2008-02-28 21:04:55 +00:00
|
|
|
modules_av_model_.clear();
|
2008-04-17 03:27:20 +00:00
|
|
|
vector<modInfoStruct> const & modInfoList = getModuleInfo();
|
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
|
|
|
int const mSize = modInfoList.size();
|
2008-03-08 07:59:47 +00:00
|
|
|
for (int i = 0; i != mSize; ++i) {
|
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
|
|
|
modInfoStruct const & modInfo = modInfoList[i];
|
2008-04-17 03:27:20 +00:00
|
|
|
modules_av_model_.insertRow(i, modInfo.name, modInfo.id,
|
|
|
|
modInfo.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
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void GuiDocument::updateSelectedModules()
|
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
|
|
|
{
|
2008-03-08 07:59:47 +00:00
|
|
|
// and selected ones, too
|
2008-02-28 21:04:55 +00:00
|
|
|
modules_sel_model_.clear();
|
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
|
|
|
vector<modInfoStruct> const selModList = getSelectedModules();
|
|
|
|
int const sSize = selModList.size();
|
2008-03-08 07:59:47 +00:00
|
|
|
for (int i = 0; i != sSize; ++i) {
|
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
|
|
|
modInfoStruct const & modInfo = selModList[i];
|
2008-04-17 03:27:20 +00:00
|
|
|
modules_sel_model_.insertRow(i, modInfo.name, modInfo.id,
|
|
|
|
modInfo.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
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void GuiDocument::updateContents()
|
|
|
|
{
|
2008-05-15 08:41:17 +00:00
|
|
|
// Nothing to do here as the document settings is not cursor dependant.
|
|
|
|
return;
|
2008-01-15 10:38:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
void GuiDocument::useClassDefaults()
|
2006-03-05 17:24:44 +00:00
|
|
|
{
|
2008-01-15 10:38:19 +00:00
|
|
|
if (applyPB->isEnabled()) {
|
|
|
|
int const ret = Alert::prompt(_("Unapplied changes"),
|
2008-03-09 16:29:01 +00:00
|
|
|
_("Some changes in the dialog were not yet applied.\n"
|
2008-01-15 10:38:19 +00:00
|
|
|
"If you do not apply now, they will be lost after this action."),
|
|
|
|
1, 1, _("&Apply"), _("&Dismiss"));
|
|
|
|
if (ret == 0)
|
|
|
|
applyView();
|
|
|
|
}
|
|
|
|
|
2008-02-28 21:04:55 +00:00
|
|
|
int idx = latexModule->classCO->currentIndex();
|
|
|
|
string const classname = classes_model_.getIDString(idx);
|
|
|
|
if (!bp_.setBaseClass(classname)) {
|
|
|
|
Alert::error(_("Error"), _("Unable to set document class."));
|
|
|
|
return;
|
|
|
|
}
|
2007-10-06 22:43:21 +00:00
|
|
|
bp_.useClassDefaults();
|
2008-05-15 08:41:17 +00:00
|
|
|
paramsToDialog(bp_);
|
2006-03-05 17:24:44 +00:00
|
|
|
}
|
|
|
|
|
2007-07-27 18:17:00 +00:00
|
|
|
|
2008-03-01 22:08:16 +00:00
|
|
|
void GuiDocument::setLayoutComboByIDString(std::string const & idString)
|
|
|
|
{
|
|
|
|
int idx = classes_model_.findIDString(idString);
|
|
|
|
if (idx < 0)
|
|
|
|
Alert::warning(_("Can't set layout!"),
|
|
|
|
bformat(_("Unable to set layout for ID: %1$s"), from_utf8(idString)));
|
|
|
|
else
|
|
|
|
latexModule->classCO->setCurrentIndex(idx);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
bool GuiDocument::isValid()
|
2007-07-27 18:17:00 +00:00
|
|
|
{
|
2008-03-08 07:59:47 +00:00
|
|
|
return validate_listings_params().empty()
|
|
|
|
&& (textLayoutModule->skipCO->currentIndex() != 3
|
|
|
|
|| !textLayoutModule->skipLE->text().isEmpty());
|
2007-07-27 18:17:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
char const * const GuiDocument::fontfamilies[5] = {
|
|
|
|
"default", "rmdefault", "sfdefault", "ttdefault", ""
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
char const * GuiDocument::fontfamilies_gui[5] = {
|
|
|
|
N_("Default"), N_("Roman"), N_("Sans Serif"), N_("Typewriter"), ""
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
bool GuiDocument::initialiseParams(string const &)
|
|
|
|
{
|
2008-05-15 08:41:17 +00:00
|
|
|
BufferView * view = bufferview();
|
|
|
|
if (!view) {
|
|
|
|
bp_ = BufferParams();
|
|
|
|
paramsToDialog(bp_);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
bp_ = view->buffer().params();
|
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
|
|
|
loadModuleInfo();
|
2008-05-15 08:41:17 +00:00
|
|
|
updateAvailableModules();
|
|
|
|
updateSelectedModules();
|
|
|
|
//FIXME It'd be nice to make sure here that the selected
|
|
|
|
//modules are consistent: That required modules are actually
|
|
|
|
//selected, and that we don't have conflicts. If so, we could
|
|
|
|
//at least pop up a warning.
|
|
|
|
paramsToDialog(bp_);
|
2007-10-06 22:43:21 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void GuiDocument::clearParams()
|
|
|
|
{
|
|
|
|
bp_ = BufferParams();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BufferId GuiDocument::id() const
|
|
|
|
{
|
2008-05-15 08:41:17 +00:00
|
|
|
BufferView const * const view = bufferview();
|
|
|
|
return view? &view->buffer() : 0;
|
2007-10-06 22:43:21 +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
|
|
|
vector<GuiDocument::modInfoStruct> const & GuiDocument::getModuleInfo()
|
2007-10-06 22:43:21 +00:00
|
|
|
{
|
|
|
|
return moduleNames_;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
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
|
|
|
vector<GuiDocument::modInfoStruct> const GuiDocument::getSelectedModules()
|
2007-10-06 22:43:21 +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
|
|
|
vector<string> const & mods = params().getModules();
|
|
|
|
vector<string>::const_iterator it = mods.begin();
|
|
|
|
vector<string>::const_iterator end = mods.end();
|
|
|
|
vector<modInfoStruct> mInfo;
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
modInfoStruct m;
|
|
|
|
m.id = *it;
|
|
|
|
LyXModule * mod = moduleList[*it];
|
|
|
|
if (mod)
|
2008-04-17 03:27:20 +00:00
|
|
|
m.name = qt_(mod->getName());
|
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
|
|
|
else
|
2008-04-17 03:27:20 +00:00
|
|
|
m.name = toqstr(*it) + toqstr(" (") + qt_("Not Found") + toqstr(")");
|
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
|
|
|
mInfo.push_back(m);
|
|
|
|
}
|
|
|
|
return mInfo;
|
2007-10-06 22:43:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-02-28 21:04:55 +00:00
|
|
|
DocumentClass const & GuiDocument::documentClass() const
|
2007-10-06 22:43:21 +00:00
|
|
|
{
|
2008-02-28 21:04:55 +00:00
|
|
|
return bp_.documentClass();
|
2007-10-06 22:43:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-09 21:21:01 +00:00
|
|
|
static void dispatch_bufferparams(Dialog const & dialog,
|
2008-03-15 01:20:36 +00:00
|
|
|
BufferParams const & bp, FuncCode lfun)
|
2007-10-06 22:43:21 +00:00
|
|
|
{
|
|
|
|
ostringstream ss;
|
|
|
|
ss << "\\begin_header\n";
|
|
|
|
bp.writeFile(ss);
|
|
|
|
ss << "\\end_header\n";
|
2007-10-09 21:21:01 +00:00
|
|
|
dialog.dispatch(FuncRequest(lfun, ss.str()));
|
2007-10-06 22:43:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void GuiDocument::dispatchParams()
|
|
|
|
{
|
|
|
|
// This must come first so that a language change is correctly noticed
|
|
|
|
setLanguage();
|
|
|
|
|
|
|
|
// Apply the BufferParams. Note that this will set the base class
|
|
|
|
// and then update the buffer's layout.
|
|
|
|
dispatch_bufferparams(*this, params(), LFUN_BUFFER_PARAMS_APPLY);
|
|
|
|
|
2008-04-28 16:38:56 +00:00
|
|
|
if (!params().master.empty()) {
|
|
|
|
FileName const master_file = support::makeAbsPath(params().master,
|
|
|
|
support::onlyPath(buffer().absFileName()));
|
|
|
|
if (isLyXFilename(master_file.absFilename())) {
|
|
|
|
Buffer * master = checkAndLoadLyXFile(master_file);
|
|
|
|
buffer().setParent(master);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-10-06 22:43:21 +00:00
|
|
|
// Generate the colours requested by each new branch.
|
|
|
|
BranchList & branchlist = params().branchlist();
|
|
|
|
if (!branchlist.empty()) {
|
|
|
|
BranchList::const_iterator it = branchlist.begin();
|
|
|
|
BranchList::const_iterator const end = branchlist.end();
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
docstring const & current_branch = it->getBranch();
|
|
|
|
Branch const * branch = branchlist.find(current_branch);
|
2007-10-09 21:21:01 +00:00
|
|
|
string const x11hexname = X11hexname(branch->getColor());
|
2007-10-06 22:43:21 +00:00
|
|
|
// display the new color
|
|
|
|
docstring const str = current_branch + ' ' + from_ascii(x11hexname);
|
|
|
|
dispatch(FuncRequest(LFUN_SET_COLOR, str));
|
|
|
|
}
|
|
|
|
|
|
|
|
// Open insets of selected branches, close deselected ones
|
|
|
|
dispatch(FuncRequest(LFUN_ALL_INSETS_TOGGLE,
|
|
|
|
"assign branch"));
|
|
|
|
}
|
|
|
|
// FIXME: If we used an LFUN, we would not need those two lines:
|
2007-10-10 08:52:55 +00:00
|
|
|
bufferview()->processUpdateFlags(Update::Force | Update::FitCursor);
|
2007-10-06 22:43:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void GuiDocument::setLanguage() const
|
|
|
|
{
|
|
|
|
Language const * const newL = bp_.language;
|
|
|
|
if (buffer().params().language == newL)
|
|
|
|
return;
|
|
|
|
|
|
|
|
string const & lang_name = newL->lang();
|
|
|
|
dispatch(FuncRequest(LFUN_BUFFER_LANGUAGE, lang_name));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void GuiDocument::saveAsDefault() const
|
|
|
|
{
|
|
|
|
dispatch_bufferparams(*this, params(), LFUN_BUFFER_SAVE_AS_DEFAULT);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool GuiDocument::isFontAvailable(string const & font) const
|
|
|
|
{
|
|
|
|
if (font == "default" || font == "cmr"
|
|
|
|
|| font == "cmss" || font == "cmtt")
|
|
|
|
// these are standard
|
|
|
|
return true;
|
|
|
|
if (font == "lmodern" || font == "lmss" || font == "lmtt")
|
|
|
|
return LaTeXFeatures::isAvailable("lmodern");
|
|
|
|
if (font == "times" || font == "palatino"
|
|
|
|
|| font == "helvet" || font == "courier")
|
|
|
|
return LaTeXFeatures::isAvailable("psnfss");
|
|
|
|
if (font == "cmbr" || font == "cmtl")
|
|
|
|
return LaTeXFeatures::isAvailable("cmbright");
|
|
|
|
if (font == "utopia")
|
|
|
|
return LaTeXFeatures::isAvailable("utopia")
|
|
|
|
|| LaTeXFeatures::isAvailable("fourier");
|
|
|
|
if (font == "beraserif" || font == "berasans"
|
|
|
|
|| font == "beramono")
|
|
|
|
return LaTeXFeatures::isAvailable("bera");
|
|
|
|
return LaTeXFeatures::isAvailable(font);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool GuiDocument::providesOSF(string const & font) const
|
|
|
|
{
|
|
|
|
if (font == "cmr")
|
|
|
|
return isFontAvailable("eco");
|
|
|
|
if (font == "palatino")
|
|
|
|
return isFontAvailable("mathpazo");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool GuiDocument::providesSC(string const & font) const
|
|
|
|
{
|
|
|
|
if (font == "palatino")
|
|
|
|
return isFontAvailable("mathpazo");
|
|
|
|
if (font == "utopia")
|
|
|
|
return isFontAvailable("fourier");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool GuiDocument::providesScale(string const & font) const
|
|
|
|
{
|
|
|
|
return font == "helvet" || font == "luximono"
|
|
|
|
|| font == "berasans" || font == "beramono";
|
|
|
|
}
|
|
|
|
|
|
|
|
|
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 GuiDocument::loadModuleInfo()
|
2007-10-06 22:43:21 +00:00
|
|
|
{
|
|
|
|
moduleNames_.clear();
|
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
|
|
|
LyXModuleList::const_iterator it = moduleList.begin();
|
|
|
|
LyXModuleList::const_iterator end = moduleList.end();
|
|
|
|
for (; it != end; ++it) {
|
|
|
|
modInfoStruct m;
|
|
|
|
m.id = it->getID();
|
2008-04-17 03:27:20 +00:00
|
|
|
m.name = qt_(it->getName());
|
|
|
|
// this is supposed to give us the first sentence of the description
|
|
|
|
QString desc = qt_(it->getDescription());
|
|
|
|
int const pos = desc.indexOf(".");
|
|
|
|
if (pos > 0)
|
|
|
|
desc.truncate(pos + 1);
|
|
|
|
m.description = desc;
|
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
|
|
|
moduleNames_.push_back(m);
|
|
|
|
}
|
2007-10-06 22:43:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-11-23 09:44:02 +00:00
|
|
|
Dialog * createGuiDocument(GuiView & lv) { return new GuiDocument(lv); }
|
2007-10-06 22:43:21 +00:00
|
|
|
|
|
|
|
|
2006-03-05 17:24:44 +00:00
|
|
|
} // namespace frontend
|
|
|
|
} // namespace lyx
|
2007-04-24 19:37:34 +00:00
|
|
|
|
2007-08-31 05:53:55 +00:00
|
|
|
#include "GuiDocument_moc.cpp"
|