namespace lyx {
namespace frontend {
-GuiViewSourceDialog::GuiViewSourceDialog(ControlViewSource & controller)
+ViewSourceWidget::ViewSourceWidget(GuiViewSource & controller)
: controller_(controller), document_(new QTextDocument(this)),
highlighter_(new LaTeXHighlighter(document_))
{
// setting a document at this point trigger an assertion in Qt
// so we disable the signals here:
- document()->blockSignals(true);
- viewSourceTV->setDocument(document());
- document()->blockSignals(false);
+ document_->blockSignals(true);
+ viewSourceTV->setDocument(document_);
+ document_->blockSignals(false);
viewSourceTV->setReadOnly(true);
///dialog_->viewSourceTV->setAcceptRichText(false);
// this is personal. I think source code should be in fixed-size font
}
-void GuiViewSourceDialog::updateView()
+void ViewSourceWidget::updateView()
{
if (autoUpdateCB->isChecked())
update(viewFullSourceCB->isChecked());
c.select(QTextCursor::BlockUnderCursor);
c.movePosition(QTextCursor::NextBlock, QTextCursor::KeepAnchor, end - beg + 1);
viewSourceTV->setTextCursor(c);
- QWidget::update();
}
-void GuiViewSourceDialog::update(bool full_source)
+void ViewSourceWidget::update(bool full_source)
{
- document_->setPlainText(toqstr(controller_.updateContent(full_source)));
+ document_->setPlainText(controller_.getContent(full_source));
}
-ControlViewSource::ControlViewSource(Dialog & parent)
- : Controller(parent)
-{}
+GuiViewSource::GuiViewSource(GuiViewBase & parent, Qt::DockWidgetArea area, Qt::WindowFlags flags)
+ : DockView(parent, "view-source", area, flags)
+{
+ widget_ = new ViewSourceWidget(*this);
+ setWidget(widget_);
+ setWindowTitle(widget_->windowTitle());
+}
+
+
+GuiViewSource::~GuiViewSource()
+{
+ delete widget_;
+}
+
+
+void GuiViewSource::updateView()
+{
+ widget_->updateView();
+}
-bool ControlViewSource::initialiseParams(string const & /*source*/)
+bool GuiViewSource::initialiseParams(string const & /*source*/)
{
+ setWindowTitle(title());
return true;
}
-docstring const ControlViewSource::updateContent(bool fullSource)
+QString GuiViewSource::getContent(bool fullSource)
{
// get the *top* level paragraphs that contain the cursor,
// or the selected text
std::swap(par_begin, par_end);
odocstringstream ostr;
view->buffer().getSourceCode(ostr, par_begin, par_end + 1, fullSource);
- return ostr.str();
+ return toqstr(ostr.str());
}
-std::pair<int, int> ControlViewSource::getRows() const
+std::pair<int, int> GuiViewSource::getRows() const
{
BufferView const * view = bufferview();
CursorSlice beg = view->cursor().selectionBegin().bottom();
}
-docstring const ControlViewSource::title() const
+QString GuiViewSource::title() const
{
switch (docType()) {
case LATEX:
- return _("LaTeX Source");
+ return qt_("LaTeX Source");
case DOCBOOK:
- return _("DocBook Source");
+ return qt_("DocBook Source");
case LITERATE:
- return _("Literate Source");
- default:
- BOOST_ASSERT(false);
- return docstring();
+ return qt_("Literate Source");
}
+ BOOST_ASSERT(false);
+ return QString();
}
#include "ui_ViewSourceUi.h"
-#include "Dialog.h"
+#include "DockView.h"
#include "GuiView.h"
#include "qt_helpers.h"
+
#include "debug.h"
#include <QDockWidget>
-#include <QWidget>
-#include <QSyntaxHighlighter>
+#include <QString>
#include <QTextCharFormat>
class QTextDocument;
namespace lyx {
namespace frontend {
-class ControlViewSource;
+class GuiViewSource;
class LaTeXHighlighter;
-class GuiViewSourceDialog : public QWidget, public Ui::ViewSourceUi
+class ViewSourceWidget : public QWidget, public Ui::ViewSourceUi
{
Q_OBJECT
public:
- GuiViewSourceDialog(ControlViewSource &);
+ ViewSourceWidget(GuiViewSource &);
public Q_SLOTS:
// update content
void updateView();
///
- QTextDocument * document() { return document_; }
- ///
void update(bool full_source);
private:
///
- ControlViewSource & controller_;
+ GuiViewSource & controller_;
///
QTextDocument * document_;
/// LaTeX syntax highlighter
LaTeXHighlighter * highlighter_;
};
-/**
- * A controller for a read-only text browser.
- */
-class ControlViewSource : public Controller {
+
+class GuiViewSource : public DockView
+{
+ Q_OBJECT
+
public:
- ///
- ControlViewSource(Dialog &);
- /** \param source source code to be displayed
- */
+ GuiViewSource(
+ GuiViewBase & parent, ///< the main window where to dock.
+ Qt::DockWidgetArea area = Qt::BottomDockWidgetArea, ///< Position of the dock (and also drawer)
+ Qt::WindowFlags flags = 0);
+
+ ~GuiViewSource();
+
+ /// Controller inherited method.
+ ///@{
bool initialiseParams(std::string const & source);
- ///
void clearParams() {}
- ///
void dispatchParams() {}
- ///
bool isBufferDependent() const { return true; }
- ///
bool canApply() const { return true; }
- ///
bool canApplyToReadOnly() const { return true; }
+ void updateView();
+ ///@}
/// The title displayed by the dialog reflects source type.
- docstring const title() const;
+ QString title() const;
/** get the source code of selected paragraphs, or the whole document
\param fullSource get full source code
*/
- docstring const updateContent(bool fullSource);
+ QString getContent(bool fullSource);
/** get the cursor position in the source code
*/
std::pair<int, int> getRows() const;
-};
-
-class GuiViewSource : public QDockWidget, public Dialog
-{
-public:
- GuiViewSource(GuiViewBase & parent)
- : QDockWidget(&parent, Qt::WindowFlags(0)), name_("view-source")
- {
- ControlViewSource * c = new ControlViewSource(*this);
- controller_ = c;
- controller_->setLyXView(parent);
- widget_ = new GuiViewSourceDialog(*c);
- setWidget(widget_);
- setWindowTitle(widget_->windowTitle());
- parent.addDockWidget(Qt::BottomDockWidgetArea, this);
- }
- ~GuiViewSource() { delete widget_; delete controller_; }
-
- /// Dialog inherited methods
- //@{
- void applyView() {}
- void hideView() { QDockWidget::hide(); }
- void showData(std::string const & data)
- {
- controller_->initialiseParams(data);
- showView();
- }
- void showView()
- {
- widget_->updateView(); // make sure its up-to-date
- QDockWidget::show();
- }
- bool isVisibleView() const { return QDockWidget::isVisible(); }
- void checkStatus() { updateView(); }
- void redraw() { redrawView(); }
- void redrawView() {}
- void updateData(std::string const & data)
- {
- controller_->initialiseParams(data);
- updateView();
- }
- void updateView()
- {
- widget_->updateView();
- QDockWidget::update();
- }
- bool isClosing() const { return false; }
- void partialUpdateView(int /*id*/) {}
- Controller & controller() { return *controller_; }
- std::string name() const { return name_; }
- //@}
private:
/// The encapsulated widget.
- GuiViewSourceDialog * widget_;
- Controller * controller_;
- std::string name_;
+ ViewSourceWidget * widget_;
};
} // namespace frontend