mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-11 21:49:51 +00:00
d5d665482e
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
275 lines
6.2 KiB
C++
275 lines
6.2 KiB
C++
// -*- C++ -*-
|
|
/**
|
|
* \file GuiDocument.h
|
|
* This file is part of LyX, the document processor.
|
|
* Licence details can be found in the file COPYING.
|
|
*
|
|
* \author Edwin Leuven
|
|
* \author Richard Heck (modules)
|
|
*
|
|
* Full author contact details are available in file CREDITS.
|
|
*/
|
|
|
|
#ifndef GUIDOCUMENT_H
|
|
#define GUIDOCUMENT_H
|
|
|
|
#include <QDialog>
|
|
|
|
#include "BufferParams.h"
|
|
#include "BulletsModule.h"
|
|
#include "GuiDialog.h"
|
|
#include "GuiIdListModel.h"
|
|
#include "GuiSelectionManager.h"
|
|
|
|
#include "support/types.h"
|
|
|
|
#include "ui_DocumentUi.h"
|
|
#include "ui_EmbeddedFilesUi.h"
|
|
#include "ui_FontUi.h"
|
|
#include "ui_TextLayoutUi.h"
|
|
#include "ui_MathsUi.h"
|
|
#include "ui_LaTeXUi.h"
|
|
#include "ui_PageLayoutUi.h"
|
|
#include "ui_LanguageUi.h"
|
|
#include "ui_BiblioUi.h"
|
|
#include "ui_NumberingUi.h"
|
|
#include "ui_MarginsUi.h"
|
|
#include "ui_PreambleUi.h"
|
|
#include "ui_PDFSupportUi.h"
|
|
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
class FloatPlacement;
|
|
|
|
namespace lyx {
|
|
|
|
class BufferParams;
|
|
class TextClass;
|
|
|
|
namespace frontend {
|
|
|
|
class GuiBranches;
|
|
class PreambleModule;
|
|
|
|
///
|
|
typedef void const * BufferId;
|
|
|
|
template<class UI>
|
|
class UiWidget : public QWidget, public UI
|
|
{
|
|
public:
|
|
UiWidget(QWidget * parent = 0) : QWidget(parent) { UI::setupUi(this); }
|
|
};
|
|
|
|
|
|
class ModuleSelMan : public GuiSelectionManager
|
|
{
|
|
public:
|
|
ModuleSelMan(
|
|
QListView * availableLV,
|
|
QListView * selectedLV,
|
|
QPushButton * addPB,
|
|
QPushButton * delPB,
|
|
QPushButton * upPB,
|
|
QPushButton * downPB,
|
|
GuiIdListModel * availableModel,
|
|
GuiIdListModel * selectedModel);
|
|
private:
|
|
///
|
|
virtual void updateAddPB();
|
|
///
|
|
virtual void updateUpPB();
|
|
///
|
|
virtual void updateDownPB();
|
|
///
|
|
virtual void updateDelPB();
|
|
/// returns availableModel as a GuiIdListModel
|
|
GuiIdListModel * getAvailableModel()
|
|
{
|
|
return dynamic_cast<GuiIdListModel *>(availableModel);
|
|
};
|
|
/// returns selectedModel as a GuiIdListModel
|
|
GuiIdListModel * getSelectedModel()
|
|
{
|
|
return dynamic_cast<GuiIdListModel *>(selectedModel);
|
|
};
|
|
};
|
|
|
|
|
|
class GuiDocument : public GuiDialog, public Ui::DocumentUi
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
GuiDocument(GuiView & lv);
|
|
|
|
void updateParams(BufferParams const & params);
|
|
void apply(BufferParams & params);
|
|
|
|
void updateFontsize(std::string const &, std::string const &);
|
|
void updatePagestyle(std::string const &, std::string const &);
|
|
|
|
void showPreamble();
|
|
/// validate listings parameters and return an error message, if any
|
|
docstring validate_listings_params();
|
|
|
|
public Q_SLOTS:
|
|
void updateNumbering();
|
|
void change_adaptor();
|
|
void set_listings_msg();
|
|
void saveDefaultClicked();
|
|
void useDefaultsClicked();
|
|
|
|
private Q_SLOTS:
|
|
void updateParams();
|
|
void setLSpacing(int);
|
|
void setMargins(bool);
|
|
void setCustomPapersize(int);
|
|
void setCustomMargins(bool);
|
|
void romanChanged(int);
|
|
void sansChanged(int);
|
|
void ttChanged(int);
|
|
void setSkip(int);
|
|
void enableSkip(bool);
|
|
void portraitChanged();
|
|
void classChanged();
|
|
void updateModuleInfo();
|
|
void updateEmbeddedFileList();
|
|
|
|
private:
|
|
void closeEvent(QCloseEvent * e);
|
|
|
|
private:
|
|
UiWidget<Ui::TextLayoutUi> *textLayoutModule;
|
|
UiWidget<Ui::FontUi> *fontModule;
|
|
UiWidget<Ui::PageLayoutUi> *pageLayoutModule;
|
|
UiWidget<Ui::MarginsUi> *marginsModule;
|
|
UiWidget<Ui::LanguageUi> *langModule;
|
|
UiWidget<Ui::NumberingUi> *numberingModule;
|
|
UiWidget<Ui::BiblioUi> *biblioModule;
|
|
UiWidget<Ui::MathsUi> *mathsModule;
|
|
UiWidget<Ui::LaTeXUi> *latexModule;
|
|
UiWidget<Ui::PDFSupportUi> *pdfSupportModule;
|
|
UiWidget<Ui::EmbeddedFilesUi> *embeddedFilesModule;
|
|
PreambleModule *preambleModule;
|
|
|
|
GuiBranches *branchesModule;
|
|
|
|
BulletsModule * bulletsModule;
|
|
FloatPlacement * floatModule;
|
|
|
|
GuiSelectionManager * selectionManager;
|
|
|
|
// FIXME
|
|
std::vector<std::string> lang_;
|
|
|
|
/// Available modules
|
|
GuiIdListModel * availableModel() { return &available_model_; }
|
|
/// Selected modules
|
|
GuiIdListModel * selectedModel() { return &selected_model_; }
|
|
private:
|
|
/// Apply changes
|
|
void applyView();
|
|
/// update
|
|
void updateContents();
|
|
///
|
|
void updateAvailableModules();
|
|
///
|
|
void updateSelectedModules();
|
|
/// save as default template
|
|
void saveDocDefault();
|
|
/// reset to default params
|
|
void useClassDefaults();
|
|
/// available modules
|
|
GuiIdListModel available_model_;
|
|
/// selected modules
|
|
GuiIdListModel selected_model_;
|
|
|
|
protected:
|
|
/// return false if validate_listings_params returns error
|
|
bool isValid();
|
|
|
|
/// font family names for BufferParams::fontsDefaultFamily
|
|
static char const * const fontfamilies[5];
|
|
/// GUI names corresponding fontfamilies
|
|
static char const * fontfamilies_gui[5];
|
|
///
|
|
bool initialiseParams(std::string const & data);
|
|
///
|
|
void clearParams();
|
|
///
|
|
void dispatchParams();
|
|
///
|
|
bool isBufferDependent() const { return true; }
|
|
/// always true since we don't manipulate document contents
|
|
bool canApply() const { return true; }
|
|
///
|
|
TextClass const & textClass() const;
|
|
///
|
|
BufferParams & params() { return bp_; }
|
|
///
|
|
BufferParams const & params() const { return bp_; }
|
|
///
|
|
BufferId id() const;
|
|
///
|
|
struct modInfoStruct {
|
|
std::string name;
|
|
std::string id;
|
|
};
|
|
/// List of available modules
|
|
std::vector<modInfoStruct> const & getModuleInfo();
|
|
/// Modules in use in current buffer
|
|
std::vector<modInfoStruct> const getSelectedModules();
|
|
///
|
|
void setLanguage() const;
|
|
///
|
|
void saveAsDefault() const;
|
|
///
|
|
bool isFontAvailable(std::string const & font) const;
|
|
/// does this font provide Old Style figures?
|
|
bool providesOSF(std::string const & font) const;
|
|
/// does this font provide true Small Caps?
|
|
bool providesSC(std::string const & font) const;
|
|
/// does this font provide size adjustment?
|
|
bool providesScale(std::string const & font) const;
|
|
private:
|
|
///
|
|
void loadModuleInfo();
|
|
///
|
|
BufferParams bp_;
|
|
/// List of names of available modules
|
|
std::vector<modInfoStruct> moduleNames_;
|
|
};
|
|
|
|
|
|
typedef void const * BufferId;
|
|
|
|
|
|
class PreambleModule : public UiWidget<Ui::PreambleUi>
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
PreambleModule();
|
|
void update(BufferParams const & params, BufferId id);
|
|
void apply(BufferParams & params);
|
|
|
|
Q_SIGNALS:
|
|
/// signal that something's changed in the Widget.
|
|
void changed();
|
|
|
|
private:
|
|
void closeEvent(QCloseEvent *);
|
|
void on_preambleTE_textChanged() { changed(); }
|
|
|
|
private:
|
|
typedef std::map<BufferId, std::pair<int,int> > Coords;
|
|
Coords preamble_coords_;
|
|
BufferId current_id_;
|
|
};
|
|
|
|
|
|
} // namespace frontend
|
|
} // namespace lyx
|
|
|
|
#endif // GUIDOCUMENT_H
|