X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FDialog.cpp;h=65d4a5598141dbb3471e02af0c1471a2e638051c;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=2be31a4ffc4aff2343b140fab629afdfb53798f0;hpb=b306e9a2e15664c630e1b462c3db3caf0e9cc9c9;p=lyx.git diff --git a/src/frontends/qt4/Dialog.cpp b/src/frontends/qt4/Dialog.cpp index 2be31a4ffc..65d4a55981 100644 --- a/src/frontends/qt4/Dialog.cpp +++ b/src/frontends/qt4/Dialog.cpp @@ -16,17 +16,20 @@ #include "qt_helpers.h" #include "Buffer.h" +#include "BufferView.h" +#include "Cursor.h" #include "FuncRequest.h" #include "FuncStatus.h" #include "LyXFunc.h" +#include "insets/Inset.h" + #include "support/debug.h" +#include "support/lassert.h" #include #include -#include - #include using namespace std; @@ -36,7 +39,7 @@ namespace lyx { namespace frontend { -Dialog::Dialog(GuiView & lv, string const & name, QString const & title) +Dialog::Dialog(GuiView & lv, QString const & name, QString const & title) : name_(name), title_(title), lyxview_(&lv) {} @@ -45,15 +48,9 @@ Dialog::~Dialog() {} -string const & Dialog::name() const -{ - return name_; -} - - bool Dialog::canApply() const { - FuncRequest const fr(getLfun(), from_ascii(name_)); + FuncRequest const fr(getLfun(), fromqstr(name_)); FuncStatus const fs(getStatus(fr)); return fs.enabled(); } @@ -61,40 +58,39 @@ bool Dialog::canApply() const void Dialog::dispatch(FuncRequest const & fr) const { - theLyXFunc().setLyXView(lyxview_); lyx::dispatch(fr); } void Dialog::updateDialog() const { - dispatch(FuncRequest(LFUN_DIALOG_UPDATE, from_ascii(name_))); + dispatch(FuncRequest(LFUN_DIALOG_UPDATE, fromqstr(name_))); } void Dialog::disconnect() const { - lyxview_->disconnectDialog(name_); + lyxview_->disconnectDialog(fromqstr(name_)); } bool Dialog::isBufferAvailable() const { - return lyxview_->buffer() != 0; + return lyxview_->currentBufferView() != 0; } bool Dialog::isBufferReadonly() const { - if (!lyxview_->buffer()) + if (!lyxview_->documentBufferView()) return true; - return lyxview_->buffer()->isReadonly(); + return lyxview_->documentBufferView()->buffer().isReadonly(); } -string const Dialog::bufferFilepath() const +QString Dialog::bufferFilepath() const { - return buffer().filePath(); + return toqstr(buffer().filePath()); } @@ -109,29 +105,16 @@ KernelDocType Dialog::docType() const } -BufferView * Dialog::bufferview() -{ - return lyxview_->view(); -} - - BufferView const * Dialog::bufferview() const { - return lyxview_->view(); -} - - -Buffer & Dialog::buffer() -{ - BOOST_ASSERT(lyxview_->buffer()); - return *lyxview_->buffer(); + return lyxview_->currentBufferView(); } Buffer const & Dialog::buffer() const { - BOOST_ASSERT(lyxview_->buffer()); - return *lyxview_->buffer(); + LASSERT(lyxview_->currentBufferView(), /**/); + return lyxview_->currentBufferView()->buffer(); } @@ -169,30 +152,11 @@ void Dialog::apply() } -void Dialog::updateData(string const & data) +void Dialog::prepareView() { - if (isBufferDependent() && !isBufferAvailable()) - return; - - if (!initialiseParams(data)) { - LYXERR0("Dialog \"" << name() - << "\" could not be initialized"); - return; - } - - updateView(); -} - - -void Dialog::showView() -{ - // Make sure the dialog is up-to-date. - updateView(); // Make sure the dialog controls are correctly enabled/disabled with // readonly status. checkStatus(); - if (exitEarly()) - return; QWidget * w = asQWidget(); w->setWindowTitle(title_); @@ -200,14 +164,27 @@ void Dialog::showView() QSize const hint = w->sizeHint(); if (hint.height() >= 0 && hint.width() >= 0) w->setMinimumSize(hint); +} + + +void Dialog::showView() +{ + prepareView(); + QWidget * w = asQWidget(); if (w->isVisible()) { w->raise(); w->activateWindow(); } else w->show(); - w->setFocus(); + if (wantInitialFocus()) + w->setFocus(); + else { + lyxview_->raise(); + lyxview_->activateWindow(); + lyxview_->setFocus(); + } } @@ -228,12 +205,25 @@ bool Dialog::isVisibleView() const } +Inset const * Dialog::inset(InsetCode code) const +{ + Inset * ins = bufferview()->cursor().innerInsetOfType(code); + if (!ins) + ins = bufferview()->cursor().nextInset(); + if (!ins || ins->lyxCode() != code) + return 0; + return ins; +} + + void Dialog::checkStatus() { - // buffer independant dialogs are always active. + // buffer independent dialogs are always active. // This check allows us leave canApply unimplemented for some dialogs. - if (!isBufferDependent()) + if (!isBufferDependent()) { + updateView(); return; + } // deactivate the dialog if we have no buffer if (!isBufferAvailable()) { @@ -244,13 +234,11 @@ void Dialog::checkStatus() // check whether this dialog may be active if (canApply()) { bool const readonly = isBufferReadonly(); - enableView(!readonly); + enableView(!readonly || canApplyToReadOnly()); // refreshReadOnly() is too generous in _enabling_ widgets // update dialog to disable disabled widgets again - if (!readonly || canApplyToReadOnly()) - updateView(); - + updateView(); } else enableView(false); } @@ -258,8 +246,8 @@ void Dialog::checkStatus() QString Dialog::sessionKey() const { - return "view-" + QString::number(lyxview_->id()) - + "/" + toqstr(name()); + return "views/" + QString::number(lyxview_->id()) + + "/" + name(); }