-// -*- C++ -*-
/**
* \file Dialog.C
* This file is part of LyX, the document processor.
*
* \author Angus Leeming
*
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
*/
#include <config.h>
#include "Dialog.h"
-#include "ButtonControllerBase.h"
-#include "support/LAssert.h"
+#include "ButtonController.h"
+#include "BCView.h"
+#include "frontends/LyXView.h"
+
+#include "funcrequest.h"
+#include "FuncStatus.h"
+#include "lyxfunc.h"
+
+
+using std::string;
+
+namespace lyx {
+namespace frontend {
Dialog::Dialog(LyXView & lv, string const & name)
- : is_closing_(false), kernel_(lv), name_(name)
+ : is_closing_(false), kernel_(lv), name_(name),
+ bc_ptr_(new ButtonController)
+{}
+
+
+Dialog::~Dialog()
{}
if (controller().isBufferDependent() && !kernel().isBufferAvailable())
return;
- controller().initialiseParams(data);
+ if (!controller().initialiseParams(data)) {
+ lyxerr << "Dialog \"" << name_
+ << "\" failed to translate the data "
+ "string passed to show()" << std::endl;
+ return;
+ }
+
bc().readOnly(kernel().isBufferReadonly());
view().show();
if (controller().isBufferDependent() && !kernel().isBufferAvailable())
return;
- controller().initialiseParams(data);
+ if (!controller().initialiseParams(data)) {
+ lyxerr << "Dialog \"" << name_
+ << "\" could not be initialized" << std::endl;
+ return;
+ }
bc().readOnly(kernel().isBufferReadonly());
view().update();
controller().clearParams();
view().hide();
+ kernel().disconnect(name());
}
void Dialog::apply()
{
- if (kernel().isBufferReadonly())
- return;
+ if (controller().isBufferDependent()) {
+ if (!kernel().isBufferAvailable() ||
+ kernel().isBufferReadonly())
+ return;
+ }
view().apply();
controller().dispatchParams();
if (controller().disconnectOnApply() && !is_closing_) {
kernel().disconnect(name());
- controller().initialiseParams(string());
+ controller().initialiseParams(string());
view().update();
}
}
}
-ButtonControllerBase & Dialog::bc() const
+ButtonController & Dialog::bc() const
{
- lyx::Assert(bc_ptr_.get());
+ BOOST_ASSERT(bc_ptr_.get());
return *bc_ptr_.get();
}
+void Dialog::setController(Controller * i)
+{
+ BOOST_ASSERT(i && !controller_ptr_.get());
+ controller_ptr_.reset(i);
+}
+
+
+void Dialog::setView(View * v)
+{
+ BOOST_ASSERT(v && !view_ptr_.get());
+ view_ptr_.reset(v);
+}
+
+
+void Dialog::checkStatus()
+{
+ // buffer independant dialogs are always active.
+ // This check allows us leave canApply unimplemented for some dialogs.
+ if (!controller().isBufferDependent())
+ return;
+
+ // deactivate the dialog if we have no buffer
+ if (!kernel().isBufferAvailable()) {
+ bc().readOnly(true);
+ return;
+ }
+
+ // check whether this dialog may be active
+ if (controller().canApply())
+ bc().readOnly(kernel().isBufferReadonly());
+ else
+ bc().readOnly(true);
+}
+
+
+Dialog::Controller::Controller(Dialog & parent)
+ : parent_(parent)
+{}
+
+
+bool Dialog::Controller::canApply() const
+{
+ FuncRequest const fr(getLfun(), dialog().name());
+ FuncStatus const fs(kernel().lyxview().getLyXFunc().getStatus(fr));
+ return fs.enabled();
+}
+
+
Dialog::Controller & Dialog::controller() const
{
- lyx::Assert(controller_ptr_.get());
+ BOOST_ASSERT(controller_ptr_.get());
return *controller_ptr_.get();
}
+Dialog::View::View(Dialog & parent, string title) :
+ p_(parent), title_(title)
+{}
+
+
Dialog::View & Dialog::view() const
{
- lyx::Assert(view_ptr_.get());
+ BOOST_ASSERT(view_ptr_.get());
return *view_ptr_.get();
}
-void Dialog::setButtonController(ButtonControllerBase * bc)
+void Dialog::View::setTitle(string const & newtitle)
{
- lyx::Assert(bc && !bc_ptr_.get());
- bc_ptr_.reset(bc);
+ title_ = newtitle;
}
-void Dialog::setController(Controller * i)
+string const & Dialog::View::getTitle() const
{
- lyx::Assert(i && !controller_ptr_.get());
- controller_ptr_.reset(i);
+ return title_;
}
-void Dialog::setView(View * v)
-{
- lyx::Assert(v && !view_ptr_.get());
- view_ptr_.reset(v);
-}
+void Dialog::View::partialUpdate(int)
+{}
+
+} // namespace frontend
+} // namespace lyx