git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20805 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2007-10-06 22:43:21 +00:00
parent ff2356f7e6
commit 24cf8ce58f
7 changed files with 372 additions and 466 deletions

View File

@ -1,250 +0,0 @@
/**
* \file ControlDocument.cpp
* 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.
*/
#include <config.h>
#include "ControlDocument.h"
#include "BranchList.h"
#include "Buffer.h"
#include "BufferParams.h"
#include "BufferView.h"
#include "buffer_funcs.h"
#include "Color.h"
#include "FuncRequest.h"
#include "gettext.h"
#include "Language.h"
#include "LaTeXFeatures.h"
#include "ModuleList.h"
#include "OutputParams.h"
#include "TextClassList.h"
// FIXME: those two headers are needed because of the
// WorkArea::redraw() call below.
#include "frontends/LyXView.h"
#include "frontends/WorkArea.h"
#include <sstream>
using std::ostringstream;
using std::sort;
using std::string;
using std::vector;
namespace lyx {
namespace frontend {
char const * const ControlDocument::fontfamilies[5] = {
"default", "rmdefault", "sfdefault", "ttdefault", ""
};
char const * ControlDocument::fontfamilies_gui[5] = {
N_("Default"), N_("Roman"), N_("Sans Serif"), N_("Typewriter"), ""
};
ControlDocument::ControlDocument(Dialog & parent)
: Controller(parent)
{}
ControlDocument::~ControlDocument()
{}
bool ControlDocument::initialiseParams(string const &)
{
bp_ = buffer().params();
loadModuleNames();
return true;
}
void ControlDocument::clearParams()
{
bp_ = BufferParams();
}
BufferId ControlDocument::id() const
{
return &buffer();
}
vector<string> ControlDocument::getModuleNames()
{
return moduleNames_;
}
vector<string> const & ControlDocument::getSelectedModules()
{
return params().getModules();
}
string ControlDocument::getModuleDescription(string const & modName) const
{
LyXModule const * const mod = moduleList[modName];
if (!mod)
return string("Module unavailable!");
return mod->description;
}
vector<string>
ControlDocument::getPackageList(string const & modName) const
{
LyXModule const * const mod = moduleList[modName];
if (!mod)
return vector<string>(); //empty such thing
return mod->packageList;
}
TextClass const & ControlDocument::textClass() const
{
return textclasslist[bp_.getBaseClass()];
}
static void dispatch_bufferparams(Controller const & controller,
BufferParams const & bp, kb_action lfun)
{
ostringstream ss;
ss << "\\begin_header\n";
bp.writeFile(ss);
ss << "\\end_header\n";
controller.dispatch(FuncRequest(lfun, ss.str()));
}
void ControlDocument::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.
//FIXME Could this be done last? Then, I think, we'd get the automatic
//update mentioned in the next FIXME...
dispatch_bufferparams(*this, params(), LFUN_BUFFER_PARAMS_APPLY);
// 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);
string const x11hexname =
lyx::X11hexname(branch->getColor());
// 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:
bufferview()->update();
lyxview().currentWorkArea()->redraw();
}
void ControlDocument::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 ControlDocument::saveAsDefault() const
{
dispatch_bufferparams(*this, params(), LFUN_BUFFER_SAVE_AS_DEFAULT);
}
bool ControlDocument::isFontAvailable(string const & font) const
{
if (font == "default" || font == "cmr"
|| font == "cmss" || font == "cmtt")
// these are standard
return true;
else if (font == "lmodern" || font == "lmss" || font == "lmtt")
return LaTeXFeatures::isAvailable("lmodern");
else if (font == "times" || font == "palatino"
|| font == "helvet" || font == "courier")
return LaTeXFeatures::isAvailable("psnfss");
else if (font == "cmbr" || font == "cmtl")
return LaTeXFeatures::isAvailable("cmbright");
else if (font == "utopia")
return LaTeXFeatures::isAvailable("utopia")
|| LaTeXFeatures::isAvailable("fourier");
else if (font == "beraserif" || font == "berasans"
|| font == "beramono")
return LaTeXFeatures::isAvailable("bera");
else
return LaTeXFeatures::isAvailable(font);
}
bool ControlDocument::providesOSF(string const & font) const
{
if (font == "cmr")
return isFontAvailable("eco");
else if (font == "palatino")
return isFontAvailable("mathpazo");
else
return false;
}
bool ControlDocument::providesSC(string const & font) const
{
if (font == "palatino")
return isFontAvailable("mathpazo");
else if (font == "utopia")
return isFontAvailable("fourier");
else
return false;
}
bool ControlDocument::providesScale(string const & font) const
{
return (font == "helvet" || font == "luximono"
|| font == "berasans" || font == "beramono");
}
void ControlDocument::loadModuleNames ()
{
moduleNames_.clear();
LyXModuleList::const_iterator it = moduleList.begin();
for (; it != moduleList.end(); ++it)
moduleNames_.push_back(it->name);
if (!moduleNames_.empty())
sort(moduleNames_.begin(), moduleNames_.end());
}
} // namespace frontend
} // namespace lyx

View File

@ -1,99 +0,0 @@
// -*- C++ -*-
/**
* \file ControlDocument.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 CONTROLDOCUMENT_H
#define CONTROLDOCUMENT_H
#include "Dialog.h"
#include "BufferParams.h"
#include "support/FileName.h"
#include "support/filetools.h"
#include "support/types.h"
#include <map>
#include <vector>
namespace lyx {
class BufferParams;
class TextClass;
namespace frontend {
///
typedef void const * BufferId;
///
typedef std::map<std::string, support::FileName> ModuleMap;
/** A controller for Document dialogs.
*/
class ControlDocument : public Controller
{
public:
/// font family names for BufferParams::fontsDefaultFamily
static char const * const fontfamilies[5];
/// GUI names corresponding fontfamilies
static char const * fontfamilies_gui[5];
///
ControlDocument(Dialog &);
///
~ControlDocument();
///
virtual bool initialiseParams(std::string const & data);
///
virtual void clearParams();
///
virtual void dispatchParams();
///
virtual bool isBufferDependent() const { return true; }
/// always true since we don't manipulate document contents
virtual bool canApply() const { return true; }
///
TextClass const & textClass() const;
///
BufferParams & params() { return bp_; }
///
BufferParams const & params() const { return bp_; }
///
BufferId id() const;
/// List of available modules
std::vector<std::string> getModuleNames();
/// Modules in use in current buffer
std::vector<std::string> const & getSelectedModules();
///
std::string getModuleDescription(std::string const & modName) const;
///
std::vector<std::string> getPackageList(std::string const & modName) const;
///
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 loadModuleNames();
///
BufferParams bp_;
/// List of names of available modules
std::vector<std::string> moduleNames_;
};
} // namespace frontend
} // namespace lyx
#endif // CONTROLDOCUMENT_H

View File

@ -11,7 +11,6 @@ SOURCEFILES = \
ButtonPolicy.cpp \
ControlCommand.cpp \
ControlCommandBuffer.cpp \
ControlDocument.cpp \
ControlExternal.cpp \
ControlMath.cpp \
ControlParagraph.cpp \
@ -22,7 +21,6 @@ HEADERFILES = \
ButtonPolicy.h \
ControlCommand.h \
ControlCommandBuffer.h \
ControlDocument.h \
ControlExternal.h \
ControlMath.h \
ControlParagraph.h \

View File

@ -18,7 +18,6 @@
#include "DockView.h"
#include "GuiBibitem.h"
#include "GuiDelimiter.h"
#include "GuiDocument.h"
#include "GuiExternal.h"
#include "GuiIndex.h"
#include "GuiMathMatrix.h"
@ -148,7 +147,7 @@ Dialog * Dialogs::build(string const & name)
if (name == "citation")
return createGuiCitation(lyxview_);
if (name == "document")
return new GuiDocumentDialog(lyxview_);
return createGuiDocument(lyxview_);
if (name == "embedding")
return createGuiEmbeddedFiles(lyxview_);
if (name == "errorlist")

View File

@ -13,7 +13,6 @@
#include "GuiBranches.h"
#include "ControlDocument.h"
#include "GuiApplication.h"
#include "Validator.h"
#include "qt_helpers.h"
@ -69,9 +68,7 @@ void GuiBranches::updateView()
QString const bname = toqstr(it->getBranch());
newItem->setText(0, bname);
QString const sel = it->getSelected() ? qt_("Yes") : qt_("No");
newItem->setText(1, sel);
newItem->setText(1, it->getSelected() ? qt_("Yes") : qt_("No"));
QColor const itemcolor = rgb2qcolor(it->getColor());
if (itemcolor.isValid()) {

View File

@ -13,27 +13,38 @@
#include "GuiDocument.h"
#include "BranchList.h"
#include "buffer_funcs.h"
#include "Buffer.h"
#include "BufferParams.h"
#include "BufferView.h"
#include "Color.h"
#include "Encoding.h"
#include "FloatPlacement.h"
#include "frontend_helpers.h"
#include "FuncRequest.h"
#include "gettext.h"
#include "GuiBranches.h"
#include "Language.h"
#include "LaTeXFeatures.h"
#include "LaTeXHighlighter.h"
#include "Layout.h"
#include "LengthCombo.h"
#include "LyXRC.h" // defaultUnit
#include "ModuleList.h"
#include "OutputParams.h"
#include "PanelStack.h"
#include "PDFOptions.h"
#include "qt_helpers.h"
#include "Spacing.h"
#include "TextClassList.h"
#include "Validator.h"
// For the Branches module
#include "GuiBranches.h"
#include "LaTeXHighlighter.h"
#include "frontend_helpers.h"
#include "BufferParams.h"
#include "Encoding.h"
#include "gettext.h"
#include "Language.h"
#include "LyXRC.h" // defaultUnit
#include "TextClassList.h"
#include "Spacing.h"
#include "PDFOptions.h"
// FIXME: those two headers are needed because of the
// WorkArea::redraw() call below.
#include "frontends/LyXView.h"
#include "frontends/WorkArea.h"
#include "insets/InsetListingsParams.h"
@ -46,18 +57,15 @@
#include <QTextCursor>
#include <algorithm>
using lyx::support::token;
using lyx::support::bformat;
using lyx::support::findToken;
using lyx::support::getVectorFromString;
#include <sstream>
using std::distance;
using std::make_pair;
using std::pair;
using std::vector;
using std::string;
using std::ostringstream;
using std::sort;
///
template<class Pair>
@ -135,6 +143,11 @@ vector<pair<string, lyx::docstring> > pagestyles;
namespace lyx {
namespace frontend {
using support::token;
using support::bformat;
using support::findToken;
using support::getVectorFromString;
/////////////////////////////////////////////////////////////////////
//
// PreambleModule
@ -205,11 +218,11 @@ void PreambleModule::closeEvent(QCloseEvent * e)
GuiDocumentDialog::GuiDocumentDialog(LyXView & lv)
: GuiDialog(lv, "document")
GuiDocument::GuiDocument(LyXView & lv)
: GuiDialog(lv, "document"), Controller(this)
{
setupUi(this);
setController(new ControlDocument(*this));
setController(this, false);
setViewTitle(_("Document Settings"));
lang_ = getSecond(getLanguageData(false));
@ -315,19 +328,19 @@ GuiDocumentDialog::GuiDocumentDialog(LyXView & lv)
for (int n = 0; tex_fonts_roman[n][0]; ++n) {
QString font = qt_(tex_fonts_roman_gui[n]);
if (!controller().isFontAvailable(tex_fonts_roman[n]))
if (!isFontAvailable(tex_fonts_roman[n]))
font += qt_(" (not installed)");
fontModule->fontsRomanCO->addItem(font);
}
for (int n = 0; tex_fonts_sans[n][0]; ++n) {
QString font = qt_(tex_fonts_sans_gui[n]);
if (!controller().isFontAvailable(tex_fonts_sans[n]))
if (!isFontAvailable(tex_fonts_sans[n]))
font += qt_(" (not installed)");
fontModule->fontsSansCO->addItem(font);
}
for (int n = 0; tex_fonts_monospaced[n][0]; ++n) {
QString font = qt_(tex_fonts_monospaced_gui[n]);
if (!controller().isFontAvailable(tex_fonts_monospaced[n]))
if (!isFontAvailable(tex_fonts_monospaced[n]))
font += qt_(" (not installed)");
fontModule->fontsTypewriterCO->addItem(font);
}
@ -337,9 +350,9 @@ GuiDocumentDialog::GuiDocumentDialog(LyXView & lv)
fontModule->fontsizeCO->addItem(qt_("11"));
fontModule->fontsizeCO->addItem(qt_("12"));
for (int n = 0; ControlDocument::fontfamilies_gui[n][0]; ++n)
for (int n = 0; GuiDocument::fontfamilies_gui[n][0]; ++n)
fontModule->fontsDefaultCO->addItem(
qt_(ControlDocument::fontfamilies_gui[n]));
qt_(GuiDocument::fontfamilies_gui[n]));
pageLayoutModule = new UiWidget<Ui::PageLayoutUi>;
@ -584,7 +597,7 @@ GuiDocumentDialog::GuiDocumentDialog(LyXView & lv)
}
// latex classes
//FIXME This seems too involved with the kernel. Some of this
//should be moved to the controller---which should perhaps just
//should be moved to the kernel---which should perhaps just
//give us a list of entries or something of the sort.
for (TextClassList::const_iterator cit = textclasslist.begin();
cit != textclasslist.end(); ++cit) {
@ -676,37 +689,31 @@ GuiDocumentDialog::GuiDocumentDialog(LyXView & lv)
}
ControlDocument & GuiDocumentDialog::controller()
{
return static_cast<ControlDocument &>(GuiDialog::controller());
}
void GuiDocumentDialog::showPreamble()
void GuiDocument::showPreamble()
{
docPS->setCurrentPanel(_("LaTeX Preamble"));
}
void GuiDocumentDialog::saveDefaultClicked()
void GuiDocument::saveDefaultClicked()
{
saveDocDefault();
}
void GuiDocumentDialog::useDefaultsClicked()
void GuiDocument::useDefaultsClicked()
{
useClassDefaults();
}
void GuiDocumentDialog::change_adaptor()
void GuiDocument::change_adaptor()
{
changed();
}
docstring GuiDocumentDialog::validate_listings_params()
docstring GuiDocument::validate_listings_params()
{
// use a cache here to avoid repeated validation
// of the same parameters
@ -725,7 +732,7 @@ docstring GuiDocumentDialog::validate_listings_params()
}
void GuiDocumentDialog::set_listings_msg()
void GuiDocument::set_listings_msg()
{
static bool isOK = true;
docstring msg = validate_listings_params();
@ -744,20 +751,20 @@ void GuiDocumentDialog::set_listings_msg()
}
void GuiDocumentDialog::closeEvent(QCloseEvent * e)
void GuiDocument::closeEvent(QCloseEvent * e)
{
slotClose();
e->accept();
}
void GuiDocumentDialog::setLSpacing(int item)
void GuiDocument::setLSpacing(int item)
{
textLayoutModule->lspacingLE->setEnabled(item == 3);
}
void GuiDocumentDialog::setSkip(int item)
void GuiDocument::setSkip(int item)
{
bool const enable = (item == 3);
textLayoutModule->skipLE->setEnabled(enable);
@ -765,7 +772,7 @@ void GuiDocumentDialog::setSkip(int item)
}
void GuiDocumentDialog::enableSkip(bool skip)
void GuiDocument::enableSkip(bool skip)
{
textLayoutModule->skipCO->setEnabled(skip);
textLayoutModule->skipLE->setEnabled(skip);
@ -774,19 +781,19 @@ void GuiDocumentDialog::enableSkip(bool skip)
setSkip(textLayoutModule->skipCO->currentIndex());
}
void GuiDocumentDialog::portraitChanged()
void GuiDocument::portraitChanged()
{
setMargins(pageLayoutModule->papersizeCO->currentIndex());
}
void GuiDocumentDialog::setMargins(bool custom)
void GuiDocument::setMargins(bool custom)
{
marginsModule->marginCB->setChecked(custom);
setCustomMargins(custom);
}
void GuiDocumentDialog::setCustomPapersize(int papersize)
void GuiDocument::setCustomPapersize(int papersize)
{
bool const custom = (papersize == 1);
@ -800,7 +807,7 @@ void GuiDocumentDialog::setCustomPapersize(int papersize)
}
void GuiDocumentDialog::setCustomMargins(bool custom)
void GuiDocument::setCustomMargins(bool custom)
{
marginsModule->topL->setEnabled(!custom);
marginsModule->topLE->setEnabled(!custom);
@ -832,7 +839,7 @@ void GuiDocumentDialog::setCustomMargins(bool custom)
}
void GuiDocumentDialog::updateFontsize(string const & items, string const & sel)
void GuiDocument::updateFontsize(string const & items, string const & sel)
{
fontModule->fontsizeCO->clear();
fontModule->fontsizeCO->addItem(qt_("Default"));
@ -850,33 +857,33 @@ void GuiDocumentDialog::updateFontsize(string const & items, string const & sel)
}
void GuiDocumentDialog::romanChanged(int item)
void GuiDocument::romanChanged(int item)
{
string const font = tex_fonts_roman[item];
fontModule->fontScCB->setEnabled(controller().providesSC(font));
fontModule->fontOsfCB->setEnabled(controller().providesOSF(font));
fontModule->fontScCB->setEnabled(providesSC(font));
fontModule->fontOsfCB->setEnabled(providesOSF(font));
}
void GuiDocumentDialog::sansChanged(int item)
void GuiDocument::sansChanged(int item)
{
string const font = tex_fonts_sans[item];
bool scaleable = controller().providesScale(font);
bool scaleable = providesScale(font);
fontModule->scaleSansSB->setEnabled(scaleable);
fontModule->scaleSansLA->setEnabled(scaleable);
}
void GuiDocumentDialog::ttChanged(int item)
void GuiDocument::ttChanged(int item)
{
string const font = tex_fonts_monospaced[item];
bool scaleable = controller().providesScale(font);
bool scaleable = providesScale(font);
fontModule->scaleTypewriterSB->setEnabled(scaleable);
fontModule->scaleTypewriterLA->setEnabled(scaleable);
}
void GuiDocumentDialog::updatePagestyle(string const & items, string const & sel)
void GuiDocument::updatePagestyle(string const & items, string const & sel)
{
pagestyles.clear();
pageLayoutModule->pagestyleCO->clear();
@ -906,18 +913,17 @@ void GuiDocumentDialog::updatePagestyle(string const & items, string const & sel
}
void GuiDocumentDialog::classChanged()
void GuiDocument::classChanged()
{
BufferParams & params = controller().params();
textclass_type const tc = latexModule->classCO->currentIndex();
params.setJustBaseClass(tc);
bp_.setJustBaseClass(tc);
if (lyxrc.auto_reset_options)
params.useClassDefaults();
bp_.useClassDefaults();
updateContents();
}
void GuiDocumentDialog::updateModuleInfo()
void GuiDocument::updateModuleInfo()
{
selectionManager->update();
//Module description
@ -929,8 +935,8 @@ void GuiDocumentDialog::updateModuleInfo()
else {
QModelIndex const idx = lv->selectionModel()->currentIndex();
string const modName = fromqstr(idx.data().toString());
string desc = controller().getModuleDescription(modName);
vector<string> pkgList = controller().getPackageList(modName);
string desc = getModuleDescription(modName);
vector<string> pkgList = getPackageList(modName);
string pkgdesc;
//this mess formats the package list as "pkg1, pkg2, and pkg3"
int const pkgListSize = pkgList.size();
@ -955,9 +961,9 @@ void GuiDocumentDialog::updateModuleInfo()
}
void GuiDocumentDialog::updateNumbering()
void GuiDocument::updateNumbering()
{
TextClass const & tclass = controller().params().getTextClass();
TextClass const & tclass = bp_.getTextClass();
numberingModule->tocTW->setUpdatesEnabled(false);
numberingModule->tocTW->clear();
@ -985,7 +991,7 @@ void GuiDocumentDialog::updateNumbering()
}
void GuiDocumentDialog::apply(BufferParams & params)
void GuiDocument::apply(BufferParams & params)
{
// preamble
preambleModule->apply(params);
@ -1178,7 +1184,7 @@ void GuiDocumentDialog::apply(BufferParams & params)
params.fontsOSF = fontModule->fontOsfCB->isChecked();
params.fontsDefaultFamily = ControlDocument::fontfamilies[
params.fontsDefaultFamily = GuiDocument::fontfamilies[
fontModule->fontsDefaultCO->currentIndex()];
if (fontModule->fontsizeCO->currentIndex() == 0)
@ -1270,17 +1276,15 @@ static size_t findPos(std::vector<A> const & vec, A const & val)
}
void GuiDocumentDialog::updateParams()
void GuiDocument::updateParams()
{
BufferParams const & params = controller().params();
updateParams(params);
updateParams(bp_);
}
void GuiDocumentDialog::updateParams(BufferParams const & params)
void GuiDocument::updateParams(BufferParams const & params)
{
// set the default unit
// FIXME: move to controller
Length::UNIT defaultUnit = Length::CM;
switch (lyxrc.default_papersize) {
case PAPER_DEFAULT: break;
@ -1304,7 +1308,7 @@ void GuiDocumentDialog::updateParams(BufferParams const & params)
}
// preamble
preambleModule->update(params, controller().id());
preambleModule->update(params, id());
// biblio
biblioModule->citeDefaultRB->setChecked(
@ -1350,9 +1354,9 @@ void GuiDocumentDialog::updateParams(BufferParams const & params)
langModule->otherencodingRB->setChecked(!default_enc);
// numbering
int const min_toclevel = controller().textClass().min_toclevel();
int const max_toclevel = controller().textClass().max_toclevel();
if (controller().textClass().hasTocLevels()) {
int const min_toclevel = textClass().min_toclevel();
int const max_toclevel = textClass().max_toclevel();
if (textClass().hasTocLevels()) {
numberingModule->setEnabled(true);
numberingModule->depthSL->setMinimum(min_toclevel - 1);
numberingModule->depthSL->setMaximum(max_toclevel);
@ -1399,7 +1403,7 @@ void GuiDocumentDialog::updateParams(BufferParams const & params)
// text layout
latexModule->classCO->setCurrentIndex(params.getBaseClass());
updatePagestyle(controller().textClass().opt_pagestyle(),
updatePagestyle(textClass().opt_pagestyle(),
params.pagestyle);
textLayoutModule->lspacingCO->setCurrentIndex(nitem);
@ -1459,7 +1463,7 @@ void GuiDocumentDialog::updateParams(BufferParams const & params)
floatModule->set(params.float_placement);
// Fonts
updateFontsize(controller().textClass().opt_fontsize(),
updateFontsize(textClass().opt_fontsize(),
params.fontsize);
int n = findToken(tex_fonts_roman, params.fontsRoman);
@ -1484,7 +1488,7 @@ void GuiDocumentDialog::updateParams(BufferParams const & params)
fontModule->fontOsfCB->setChecked(params.fontsOSF);
fontModule->scaleSansSB->setValue(params.fontsSansScale);
fontModule->scaleTypewriterSB->setValue(params.fontsTypewriterScale);
n = findToken(ControlDocument::fontfamilies, params.fontsDefaultFamily);
n = findToken(GuiDocument::fontfamilies, params.fontsDefaultFamily);
if (n >= 0)
fontModule->fontsDefaultCO->setCurrentIndex(n);
@ -1563,56 +1567,249 @@ void GuiDocumentDialog::updateParams(BufferParams const & params)
}
void GuiDocumentDialog::applyView()
void GuiDocument::applyView()
{
apply(controller().params());
apply(params());
}
void GuiDocumentDialog::saveDocDefault()
void GuiDocument::saveDocDefault()
{
// we have to apply the params first
applyView();
controller().saveAsDefault();
saveAsDefault();
}
void GuiDocumentDialog::updateContents()
void GuiDocument::updateContents()
{
//update list of available modules
QStringList strlist;
vector<string> const modNames = controller().getModuleNames();
vector<string> const modNames = getModuleNames();
vector<string>::const_iterator it = modNames.begin();
for (; it != modNames.end(); ++it)
strlist.push_back(toqstr(*it));
available_model_.setStringList(strlist);
//and selected ones, too
QStringList strlist2;
vector<string> const & selMods = controller().getSelectedModules();
vector<string> const & selMods = getSelectedModules();
it = selMods.begin();
for (; it != selMods.end(); ++it)
strlist2.push_back(toqstr(*it));
selected_model_.setStringList(strlist2);
updateParams(controller().params());
updateParams(bp_);
}
void GuiDocumentDialog::useClassDefaults()
void GuiDocument::useClassDefaults()
{
BufferParams & params = controller().params();
params.setJustBaseClass(latexModule->classCO->currentIndex());
params.useClassDefaults();
bp_.setJustBaseClass(latexModule->classCO->currentIndex());
bp_.useClassDefaults();
updateContents();
}
bool GuiDocumentDialog::isValid()
bool GuiDocument::isValid()
{
return validate_listings_params().empty();
}
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 &)
{
bp_ = buffer().params();
loadModuleNames();
return true;
}
void GuiDocument::clearParams()
{
bp_ = BufferParams();
}
BufferId GuiDocument::id() const
{
return &buffer();
}
vector<string> GuiDocument::getModuleNames()
{
return moduleNames_;
}
vector<string> const & GuiDocument::getSelectedModules()
{
return params().getModules();
}
string GuiDocument::getModuleDescription(string const & modName) const
{
LyXModule const * const mod = moduleList[modName];
if (!mod)
return string("Module unavailable!");
return mod->description;
}
vector<string>
GuiDocument::getPackageList(string const & modName) const
{
LyXModule const * const mod = moduleList[modName];
if (!mod)
return vector<string>(); //empty such thing
return mod->packageList;
}
TextClass const & GuiDocument::textClass() const
{
return textclasslist[bp_.getBaseClass()];
}
static void dispatch_bufferparams(Controller const & controller,
BufferParams const & bp, kb_action lfun)
{
ostringstream ss;
ss << "\\begin_header\n";
bp.writeFile(ss);
ss << "\\end_header\n";
controller.dispatch(FuncRequest(lfun, ss.str()));
}
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.
//FIXME Could this be done last? Then, I think, we'd get the automatic
//update mentioned in the next FIXME...
dispatch_bufferparams(*this, params(), LFUN_BUFFER_PARAMS_APPLY);
// 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);
string const x11hexname =
lyx::X11hexname(branch->getColor());
// 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:
bufferview()->update();
lyxview().currentWorkArea()->redraw();
}
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";
}
void GuiDocument::loadModuleNames ()
{
moduleNames_.clear();
LyXModuleList::const_iterator it = moduleList.begin();
for (; it != moduleList.end(); ++it)
moduleNames_.push_back(it->name);
if (!moduleNames_.empty())
sort(moduleNames_.begin(), moduleNames_.end());
}
Dialog * createGuiDocument(LyXView & lv) { return new GuiDocument(lv); }
} // namespace frontend
} // namespace lyx

View File

@ -15,8 +15,12 @@
#include "GuiDialog.h"
#include "BulletsModule.h"
#include "ControlDocument.h"
#include "GuiSelectionManager.h"
#include "BufferParams.h"
#include "support/FileName.h"
#include "support/filetools.h"
#include "support/types.h"
#include "ui_DocumentUi.h"
#include "ui_FontUi.h"
@ -31,6 +35,26 @@
#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;
///
typedef std::map<std::string, support::FileName> ModuleMap;
#include <QDialog>
#include <QStringList>
#include <QStringListModel>
@ -38,29 +62,19 @@
#include <vector>
#include <string>
class FloatPlacement;
template<class UI>
class UiWidget : public QWidget, public UI
{
public:
UiWidget(QWidget * parent = 0) : QWidget(parent)
{
UI::setupUi(this);
}
UiWidget(QWidget * parent = 0) : QWidget(parent) { UI::setupUi(this); }
};
namespace lyx {
namespace frontend {
class GuiBranches;
class PreambleModule;
class GuiDocumentDialog : public GuiDialog, public Ui::DocumentUi
class GuiDocument : public GuiDialog, public Ui::DocumentUi, public Controller
{
Q_OBJECT
public:
GuiDocumentDialog(LyXView & lv);
GuiDocument(LyXView & lv);
void updateParams(BufferParams const & params);
void apply(BufferParams & params);
@ -121,7 +135,7 @@ private:
std::vector<std::string> lang_;
/// parent controller
ControlDocument & controller();
Controller & controller() { return *this; }
/// Available modules
QStringListModel * availableModel() { return &available_model_; }
/// Selected modules
@ -143,6 +157,56 @@ private:
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;
/// List of available modules
std::vector<std::string> getModuleNames();
/// Modules in use in current buffer
std::vector<std::string> const & getSelectedModules();
///
std::string getModuleDescription(std::string const & modName) const;
///
std::vector<std::string> getPackageList(std::string const & modName) const;
///
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 loadModuleNames();
///
BufferParams bp_;
/// List of names of available modules
std::vector<std::string> moduleNames_;
};