* Full author contact details are available in file CREDITS.
*/
-#ifndef DIALOG_VIEW_H
-#define DIALOG_VIEW_H
+#ifndef DIALOGVIEW_H
+#define DIALOGVIEW_H
#include "Dialog.h"
#include "GuiView.h"
-#include "qt_helpers.h"
-#include "debug.h"
#include <QCloseEvent>
#include <QDialog>
-#include <QSettings>
-#include <QShowEvent>
-#include <QGridLayout>
-
-#include <string>
namespace lyx {
namespace frontend {
-/// Window Dialog container for LyX dialogs.
-/// This template class that encapsulates a given Widget inside a
-/// QDialog and presents a Dialog interface
-template<class MyController, class MyWidget>
class DialogView : public QDialog, public Dialog
{
public:
- DialogView(
- GuiViewBase & parent, ///< the main window where to dock.
- std::string const & name, ///< dialog identifier.
- bool modal = false, ///< Window modality.
- Qt::WindowFlags flags = 0
- )
- : QDialog(&parent, flags), name_(name)
- {
- setModal(modal);
- MyController * c = new MyController(*this);
- controller_ = c;
- controller_->setLyXView(parent);
- QGridLayout * gridLayout = new QGridLayout(this);
- gridLayout->setMargin(0);
- widget_ = new MyWidget(*c, this);
- gridLayout->addWidget(widget_);
- setWindowTitle("LyX: " + widget_->windowTitle());
- }
+ /// \param lv is the access point for the dialog to the LyX kernel.
+ /// \param name is the identifier given to the dialog by its parent
+ /// container.
+ /// \param title is the window title used for decoration.
+ DialogView(GuiView & lv, QString const & name, QString const & title)
+ : QDialog(&lv), Dialog(lv, name, "LyX: " + title)
+ {}
+
+ virtual QWidget * asQWidget() { return this; }
+ virtual QWidget const * asQWidget() const { return this; }
- /// Dialog inherited methods
+protected:
+ /// \name Dialog inherited methods
//@{
void applyView() {}
- void hideView()
- {
- controller().clearParams();
- QDialog::hide();
- }
- void showData(std::string const & data)
- {
- controller_->initialiseParams(data);
- showView();
- }
- void showView()
- {
- widget_->updateView(); // make sure its up-to-date
- QDialog::show();
- raise();
- activateWindow();
- }
- bool isVisibleView() const { return QDialog::isVisible(); }
- void checkStatus() { updateView(); }
- void redraw() { redrawView(); }
- void redrawView() {}
- void updateData(std::string const & data)
- {
- controller_->initialiseParams(data);
- updateView();
- }
- void updateView()
- {
- widget_->updateView();
- }
- void partialUpdateView(int /*id*/) {}
- Controller & controller() { return *controller_; }
- std::string name() const { return name_; }
+ bool initialiseParams(std::string const & /*data*/) { return true; }
+ void clearParams() {}
+ bool needBufferOpen() const { return isBufferDependent(); }
//@}
-private:
- /// The encapsulated widget.
- MyWidget * widget_;
- Controller * controller_;
- std::string name_;
-
- void showEvent(QShowEvent * e)
+ /// Any dialog that overrides this method should make sure to call it.
+ void closeEvent(QCloseEvent * ev)
{
-#if (QT_VERSION >= 0x040200)
- QSettings settings;
- std::string key = name_ + "/geometry";
- QDialog::restoreGeometry(settings.value(key.c_str()).toByteArray());
-#endif
- QDialog::showEvent(e);
+ clearParams();
+ Dialog::disconnect();
+ ev->accept();
}
-
- void closeEvent(QCloseEvent * e)
+ /// Any dialog that overrides this method should make sure to call it.
+ void hideEvent(QHideEvent * ev)
{
-#if (QT_VERSION >= 0x040200)
- QSettings settings;
- std::string key = name_ + "/geometry";
- settings.setValue(key.c_str(), QDialog::saveGeometry());
-#endif
- QDialog::closeEvent(e);
+ if (!ev->spontaneous()) {
+ clearParams();
+ Dialog::disconnect();
+ ev->accept();
+ }
}
};
-} // frontend
-} // lyx
+} // namespace frontend
+} // namespace lyx
-#endif // DIALOG_VIEW_H
+#endif // DIALOGVIEW_H