Update on view-source feature (r13610), from Bo Peng (ben.bob@gmail.com)

* src/text3.C, src/lyxfunc.C: no special treatment of view-source dialog now.
	* src/frontends/controllers/ControlViewSource.h, .C:
		handle everything (get source type, code) in the controller.
	* src/insets/insetbibtex.C, insetexternal.C insetinclude.C:
		add dryrun mode to file copying etc.
	* src/frontends/qt2/QViewSource.C: small changes when calling the controller.



git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13627 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Bo Peng 2006-04-10 16:27:59 +00:00
parent 69664082da
commit d7bccc5f88
9 changed files with 60 additions and 94 deletions

View File

@ -1576,7 +1576,7 @@ void Buffer::changeRefsIfUnique(string const & from, string const & to)
}
void Buffer::getSourceCode(ostream& os, lyx::pit_type par_begin, lyx::pit_type par_end)
void Buffer::getSourceCode(ostream & os, lyx::pit_type par_begin, lyx::pit_type par_end)
{
OutputParams runparams;
runparams.nice = true;
@ -1587,16 +1587,6 @@ void Buffer::getSourceCode(ostream& os, lyx::pit_type par_begin, lyx::pit_type p
// No side effect of file copying and image conversion
runparams.dryrun = true;
// set source type for the view-source dialog
if (isLatex())
os << "%LaTeX\n";
else if (isLinuxDoc())
os << "%LinuxDoc\n";
else if (isDocBook())
os << "%DocBook\n";
else
BOOST_ASSERT(false);
// start text
if (par_begin + 1 == par_end)
os << "% Preview source code for paragraph " << par_begin << "\n\n";
else

View File

@ -14,8 +14,14 @@
#include "ControlViewSource.h"
#include "gettext.h"
#include "support/types.h"
#include "BufferView.h"
#include "buffer.h"
#include "cursor.h"
#include <sstream>
using std::string;
using std::ostringstream;
namespace lyx {
namespace frontend {
@ -27,39 +33,58 @@ ControlViewSource::ControlViewSource(Dialog & parent)
bool ControlViewSource::initialiseParams(string const & source)
{
string sourcetype = source.substr(1, 5);
if (sourcetype == "LaTeX") {
type_ = LatexSource;
source_ = source.substr(7);
} else if (sourcetype == "Linux") {
type_ = LinuxDocSource;
source_ = source.substr(10);
} else if (sourcetype == "DocBo") {
type_ = DocBookSource;
source_ = source.substr(9);
} else
return false;
return true;
}
string const ControlViewSource::updateContent()
{
// get the *top* level paragraphs that contain the cursor,
// or the selected text
lyx::pit_type par_begin;
lyx::pit_type par_end;
BufferView * view = kernel().bufferview();
if (!view->cursor().selection()) {
par_begin = view->cursor().bottom().pit();
par_end = par_begin;
} else {
par_begin = view->cursor().selectionBegin().bottom().pit();
par_end = view->cursor().selectionEnd().bottom().pit();
}
if (par_begin > par_end)
std::swap(par_begin, par_end);
ostringstream ostr;
view->buffer()->getSourceCode(ostr, par_begin, par_end + 1);
return ostr.str();
}
void ControlViewSource::clearParams()
{
source_.erase();
}
string const ControlViewSource::title() const
{
switch (type_) {
case LatexSource:
return _("LaTeX Source");
case LinuxDocSource:
return _("LinuxDoc Source");
case DocBookSource:
return _("DocBook Source");
string source_type;
Kernel::DocType doctype = kernel().docType();
switch (doctype) {
case Kernel::LATEX:
source_type = "LaTeX";
break;
case Kernel::LINUXDOC:
source_type = "LinuxDoc";
break;
case Kernel::DOCBOOK:
source_type = "DocBook";
break;
case Kernel::LITERATE:
source_type = "Literate";
default:
BOOST_ASSERT(false);
}
return _(source_type + " Source");
}
} // namespace frontend

View File

@ -36,22 +36,11 @@ public:
///
virtual bool isBufferDependent() const { return true; }
/// The title displayed by the dialog reflects the \c VIEWSOURCETYPE
/// The title displayed by the dialog reflects source type.
std::string const title() const;
/// get the source code
std::string const str() const { return source_; }
private:
/// Recognized source code type
enum SOURCETYPE {
LatexSource,
LinuxDocSource,
DocBookSource
};
SOURCETYPE type_;
std::string source_;
/// get the source code of selected paragraphs
std::string const updateContent();
};
} // namespace frontend

View File

@ -14,6 +14,7 @@
#include "QViewSource.h"
#include "QViewSourceDialog.h"
#include "qt_helpers.h"
#include "lyx_gui.h"
#include "controllers/ControlViewSource.h"
@ -38,7 +39,7 @@ void QViewSource::build_dialog()
dialog_->viewSourceTV->setReadOnly(true);
dialog_->viewSourceTV->setTextFormat(Qt::PlainText);
// this is personal. I think source code should be in fixed-size font
QFont font("Courier New");
QFont font(toqstr(lyx_gui::typewriter_font_name()));
font.setFixedPitch(true);
font.setStyleHint(QFont::TypeWriter);
dialog_->viewSourceTV->setFont(font);
@ -50,8 +51,7 @@ void QViewSource::build_dialog()
void QViewSource::update_contents()
{
setTitle(controller().title());
dialog_->viewSourceTV->setText(toqstr(controller().str()));
dialog_->viewSourceTV->setText(toqstr(controller().updateContent()));
}
} // namespace frontend

View File

@ -161,7 +161,7 @@ int InsetBibtex::latex(Buffer const & buffer, ostream & os,
normalize_name(buffer, runparams, input, ".bib");
string const in_file = database + ".bib";
if (!runparams.inComment && !runparams.nice &&
if (!runparams.inComment && !runparams.dryrun && !runparams.nice &&
isFileReadable(in_file)) {
// mangledFilename() needs the extension
@ -216,7 +216,7 @@ int InsetBibtex::latex(Buffer const & buffer, ostream & os,
// exporting to .tex copy it to the tmp directory.
// This prevents problems with spaces and 8bit charcaters
// in the file name.
if (!runparams.inComment && !runparams.nice &&
if (!runparams.inComment && !runparams.dryrun && !runparams.nice &&
isFileReadable(in_file)) {
// use new style name
base = removeExtension(

View File

@ -688,7 +688,7 @@ int InsetExternal::latex(Buffer const & buf, ostream & os,
// run through the LaTeX compiler.
// If we're running through the LaTeX compiler, we should write the
// generated files in the bufer's temporary directory.
bool const external_in_tmpdir = !runparams.nice;
bool const external_in_tmpdir = !runparams.nice && !runparams.dryrun;
// If the template has specified a PDFLaTeX output, then we try and
// use that.

View File

@ -359,7 +359,7 @@ int InsetInclude::latex(Buffer const & buffer, ostream & os,
lyxerr[Debug::LATEX] << "exportfile:" << exportfile << endl;
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
if (runparams.inComment)
if (runparams.inComment || runparams.dryrun)
// Don't try to load or copy the file
;
else if (loadIfNeeded(buffer, params_)) {

View File

@ -1165,9 +1165,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
data = freefont2string();
if (!data.empty())
owner->getDialogs().show("character", data);
}
else if (name == "latexlog") {
} else if (name == "latexlog") {
pair<Buffer::LogType, string> const logfile =
owner->buffer()->getLogName();
switch (logfile.first) {
@ -1180,32 +1178,11 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
}
data += logfile.second;
owner->getDialogs().show("log", data);
}
else if (name == "vclog") {
} else if (name == "vclog") {
string const data = "vc " +
owner->buffer()->lyxvc().getLogFile();
owner->getDialogs().show("log", data);
}
else if (name == "view-source") {
// get the *top* level paragraphs that contain the cursor,
// or the selected text
lyx::pit_type par_begin;
lyx::pit_type par_end;
if (!view()->cursor().selection()) {
par_begin = view()->cursor().bottom().pit();
par_end = par_begin;
} else {
par_begin = view()->cursor().selectionBegin().bottom().pit();
par_end = view()->cursor().selectionEnd().bottom().pit();
}
if (par_begin > par_end)
std::swap(par_begin, par_end);
ostringstream ostr;
view()->buffer()->getSourceCode(ostr, par_begin, par_end + 1);
// display the dialog and show source code
owner->getDialogs().show("view-source", ostr.str());
}
else
} else
owner->getDialogs().show(name, data);
break;
}

View File

@ -1108,21 +1108,6 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
bv->switchKeyMap();
bv->owner()->updateMenubar();
bv->owner()->updateToolbars();
// if view-source dialog is visible, send source code of selected
// text to the dialog
if (cmd.button() == mouse_button::button1 && cur.selection()
&& bv->owner()->getDialogs().visible("view-source")) {
// get *top* level paragraphs that contain the selection
lyx::pit_type par_begin = bv->cursor().selectionBegin().bottom().pit();
lyx::pit_type par_end = bv->cursor().selectionEnd().bottom().pit();
if (par_begin > par_end)
std::swap(par_begin, par_end);
ostringstream ostr;
bv->buffer()->getSourceCode(ostr, par_begin, par_end + 1);
// display the dialog and show source code
bv->owner()->getDialogs().update("view-source", ostr.str());
}
break;
}