X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2FLyXView.C;h=8c6059bf75b9419b0055af0382edd4d3247ec4a4;hb=25079a83c2c4efd877a735e6571f149f703d4a16;hp=a793d80fdc5f094292c10aec89e4ddcc507c67e5;hpb=577eaa14f81064a1c9634a5501f0d7a5d51d216b;p=lyx.git diff --git a/src/frontends/LyXView.C b/src/frontends/LyXView.C index a793d80fdc..8c6059bf75 100644 --- a/src/frontends/LyXView.C +++ b/src/frontends/LyXView.C @@ -17,6 +17,7 @@ #include "Toolbars.h" #include "Menubar.h" #include "WorkArea.h" +#include "Gui.h" #include "buffer.h" #include "bufferparams.h" @@ -52,12 +53,12 @@ namespace lyx { # include #endif -using lyx::frontend::WorkArea; +using frontend::WorkArea; -using lyx::docstring; -using lyx::support::bformat; -using lyx::support::makeDisplayPath; -using lyx::support::onlyFilename; +using support::bformat; +using support::FileName; +using support::makeDisplayPath; +using support::onlyFilename; using std::endl; using std::string; @@ -85,20 +86,37 @@ LyXView::LyXView(int id) LyXView::~LyXView() { + disconnectBuffer(); } // FIXME, there's only one WorkArea per LyXView possible for now. void LyXView::setWorkArea(WorkArea * work_area) { + BOOST_ASSERT(work_area); work_area_ = work_area; work_area_ids_.clear(); work_area_ids_.push_back(work_area_->id()); } +// FIXME, there's only one WorkArea per LyXView possible for now. +WorkArea const * LyXView::currentWorkArea() const +{ + return work_area_; +} + + +// FIXME, there's only one WorkArea per LyXView possible for now. +WorkArea * LyXView::currentWorkArea() +{ + return work_area_; +} + + Buffer * LyXView::buffer() const { + BOOST_ASSERT(work_area_); return work_area_->bufferView().buffer(); } @@ -107,6 +125,7 @@ void LyXView::setBuffer(Buffer * b) { busy(true); + BOOST_ASSERT(work_area_); if (work_area_->bufferView().buffer()) disconnectBuffer(); @@ -131,15 +150,17 @@ void LyXView::setBuffer(Buffer * b) updateLayoutChoice(); updateWindowTitle(); updateStatusBar(); + updateTab(); busy(false); work_area_->redraw(); } -bool LyXView::loadLyXFile(string const & filename, bool tolastfiles) +bool LyXView::loadLyXFile(FileName const & filename, bool tolastfiles) { busy(true); + BOOST_ASSERT(work_area_); if (work_area_->bufferView().buffer()) disconnectBuffer(); @@ -149,6 +170,7 @@ bool LyXView::loadLyXFile(string const & filename, bool tolastfiles) updateToolbars(); updateLayoutChoice(); updateWindowTitle(); + updateTab(); if (loaded) { connectBuffer(*work_area_->bufferView().buffer()); showErrorList("Parse"); @@ -165,6 +187,7 @@ void LyXView::connectBuffer(Buffer & buf) if (errorsConnection_.connected()) disconnectBuffer(); + BOOST_ASSERT(work_area_); bufferChangedConnection_ = buf.changed.connect( boost::bind(&WorkArea::redraw, work_area_)); @@ -281,19 +304,23 @@ void LyXView::showReadonly(bool) BufferView * LyXView::view() const { + BOOST_ASSERT(work_area_); return &work_area_->bufferView(); } void LyXView::updateToolbars() { - bool const math = work_area_->bufferView().cursor().inMathed(); + BOOST_ASSERT(work_area_); + bool const math = + work_area_->bufferView().cursor().inMathed(); bool const table = lyx::getStatus(FuncRequest(LFUN_LAYOUT_TABULAR)).enabled(); - // TODO: How should we handle the CT toolbar? - bool const change_tracking = true; + bool const review = + lyx::getStatus(FuncRequest(LFUN_CHANGES_TRACK)).enabled() && + lyx::getStatus(FuncRequest(LFUN_CHANGES_TRACK)).onoff(true); - toolbars_->update(math, table, change_tracking); + toolbars_->update(math, table, review); // update redaonly status of open dialogs. This could also be in // updateMenubar(), but since updateToolbars() and updateMenubar() // are always called together it is only here. @@ -301,6 +328,26 @@ void LyXView::updateToolbars() } +ToolbarBackend::Flags LyXView::getToolbarState(string const & name) +{ + return toolbars_->getToolbarState(name); +} + + +void LyXView::toggleToolbarState(string const & name) +{ + // it is possible to get current toolbar status like this,... + // but I decide to obey the order of ToolbarBackend::flags + // and disregard real toolbar status. + // toolbars_->saveToolbarInfo(); + // + // toggle state on/off/auto + toolbars_->toggleToolbarState(name); + // update toolbar + updateToolbars(); +} + + void LyXView::updateMenubar() { menubar_->update(); @@ -336,6 +383,7 @@ void LyXView::updateLayoutChoice() current_layout = buffer()->params().getLyXTextClass().defaultLayoutName(); } + BOOST_ASSERT(work_area_); if (work_area_->bufferView().cursor().inMathed()) return; @@ -351,7 +399,6 @@ void LyXView::updateLayoutChoice() void LyXView::updateWindowTitle() { - static docstring last_title = lyx::from_ascii("LyX"); docstring maximize_title = lyx::from_ascii("LyX"); docstring minimize_title = lyx::from_ascii("LyX"); @@ -369,21 +416,12 @@ void LyXView::updateWindowTitle() } } - if (maximize_title != last_title) { - setWindowTitle(maximize_title, minimize_title); - last_title = maximize_title; - } + setWindowTitle(maximize_title, minimize_title); } void LyXView::dispatch(FuncRequest const & cmd) { - if (cmd.action == LFUN_WINDOW_CLOSE) { - close(); - closed(id_); - return; - } - theLyXFunc().setLyXView(this); lyx::dispatch(cmd); } @@ -393,9 +431,10 @@ Buffer const * const LyXView::updateInset(InsetBase const * inset) const { Buffer const * buffer_ptr = 0; if (inset) { + BOOST_ASSERT(work_area_); + work_area_->scheduleRedraw(); + buffer_ptr = work_area_->bufferView().buffer(); - // No FitCursor: - work_area_->bufferView().update(Update::Force); } return buffer_ptr; }