diff --git a/src/frontends/qt4/DockView.h b/src/frontends/qt4/DockView.h index 8ae303ce34..c56ceea4a6 100644 --- a/src/frontends/qt4/DockView.h +++ b/src/frontends/qt4/DockView.h @@ -25,8 +25,7 @@ namespace frontend { /// Dock Widget container for LyX dialogs. /// This template class that encapsulates a given Widget inside a /// QDockWidget and presents a Dialog interface -template -class DockView : public QDockWidget, public Dialog +class DockView : public QDockWidget, public Dialog, public Controller { public: DockView( @@ -35,19 +34,15 @@ public: Qt::DockWidgetArea area = Qt::LeftDockWidgetArea, ///< Position of the dock (and also drawer) Qt::WindowFlags flags = 0 ) - : QDockWidget(&parent, flags), name_(name) + : QDockWidget(&parent, flags), name_(name), Controller(this) { if (flags & Qt::Drawer) setFeatures(QDockWidget::NoDockWidgetFeatures); - MyController * c = new MyController(*this); - controller_ = c; - controller_->setLyXView(parent); - widget_ = new MyWidget(*c); - setWidget(widget_); - setWindowTitle(widget_->windowTitle()); + setLyXView(parent); parent.addDockWidget(area, this); } - ~DockView() { delete widget_; delete controller_; } + + virtual ~DockView() {} /// Dialog inherited methods //@{ @@ -55,12 +50,12 @@ public: void hideView() { QDockWidget::hide(); } void showData(std::string const & data) { - controller_->initialiseParams(data); + initialiseParams(data); showView(); } void showView() { - widget_->updateView(); // make sure its up-to-date + updateView(); // make sure its up-to-date QDockWidget::show(); } bool isVisibleView() const { return QDockWidget::isVisible(); } @@ -69,23 +64,15 @@ public: void redrawView() {} void updateData(std::string const & data) { - controller_->initialiseParams(data); + initialiseParams(data); updateView(); } - void updateView() - { - widget_->updateView(); - QDockWidget::update(); - } bool isClosing() const { return false; } void partialUpdateView(int /*id*/) {} - Controller & controller() { return *controller_; } + Controller & controller() { return *this; } std::string name() const { return name_; } //@} private: - /// The encapsulated widget. - MyWidget * widget_; - Controller * controller_; std::string name_; }; diff --git a/src/frontends/qt4/GuiEmbeddedFiles.cpp b/src/frontends/qt4/GuiEmbeddedFiles.cpp index a0c1d56360..196864b1c2 100644 --- a/src/frontends/qt4/GuiEmbeddedFiles.cpp +++ b/src/frontends/qt4/GuiEmbeddedFiles.cpp @@ -38,8 +38,8 @@ using support::FileFilterList; using support::FileName; using support::libFileSearch; -GuiEmbeddedFilesDialog::GuiEmbeddedFilesDialog - (ControlEmbeddedFiles & controller) +EmbeddedFilesWidget::EmbeddedFilesWidget + (GuiEmbeddedFiles & controller) : controller_(controller) { setupUi(this); @@ -60,7 +60,7 @@ GuiEmbeddedFilesDialog::GuiEmbeddedFilesDialog } -void GuiEmbeddedFilesDialog::on_filesLW_itemChanged(QListWidgetItem* item) +void EmbeddedFilesWidget::on_filesLW_itemChanged(QListWidgetItem* item) { EmbeddedFiles & files = controller_.embeddedFiles(); if (item->checkState() == Qt::Checked) { @@ -79,7 +79,7 @@ void GuiEmbeddedFilesDialog::on_filesLW_itemChanged(QListWidgetItem* item) } -void GuiEmbeddedFilesDialog::on_filesLW_itemSelectionChanged() +void EmbeddedFilesWidget::on_filesLW_itemSelectionChanged() { if (controller_.isReadonly()) return; @@ -113,7 +113,7 @@ void GuiEmbeddedFilesDialog::on_filesLW_itemSelectionChanged() } -void GuiEmbeddedFilesDialog::on_filesLW_itemClicked(QListWidgetItem* item) +void EmbeddedFilesWidget::on_filesLW_itemClicked(QListWidgetItem* item) { EmbeddedFiles & files = controller_.embeddedFiles(); int idx = filesLW->row(item); @@ -134,14 +134,14 @@ void GuiEmbeddedFilesDialog::on_filesLW_itemClicked(QListWidgetItem* item) } -void GuiEmbeddedFilesDialog::on_filesLW_itemDoubleClicked(QListWidgetItem* item) +void EmbeddedFilesWidget::on_filesLW_itemDoubleClicked(QListWidgetItem* item) { EmbeddedFiles & files = controller_.embeddedFiles(); controller_.view(files[filesLW->row(item)]); } -void GuiEmbeddedFilesDialog::updateView() +void EmbeddedFilesWidget::updateView() { bool readOnly = controller_.isReadonly(); fullpathLE->setEnabled(!readOnly); @@ -179,7 +179,7 @@ void GuiEmbeddedFilesDialog::updateView() } -void GuiEmbeddedFilesDialog::on_selectPB_clicked() +void EmbeddedFilesWidget::on_selectPB_clicked() { EmbeddedFiles & files = controller_.embeddedFiles(); // this should not be needed after EmbeddedFiles are updated correctly. @@ -194,7 +194,7 @@ void GuiEmbeddedFilesDialog::on_selectPB_clicked() } -void GuiEmbeddedFilesDialog::on_unselectPB_clicked() +void EmbeddedFilesWidget::on_unselectPB_clicked() { EmbeddedFiles & files = controller_.embeddedFiles(); // this should not be needed after EmbeddedFiles are updated correctly. @@ -209,14 +209,14 @@ void GuiEmbeddedFilesDialog::on_unselectPB_clicked() } -void GuiEmbeddedFilesDialog::on_addPB_clicked() +void EmbeddedFilesWidget::on_addPB_clicked() { if (controller_.browseAndAddFile()) updateView(); } -void GuiEmbeddedFilesDialog::on_extractPB_clicked() +void EmbeddedFilesWidget::on_extractPB_clicked() { EmbeddedFiles const & files = controller_.embeddedFiles(); QList selection = filesLW->selectedItems(); @@ -228,7 +228,7 @@ void GuiEmbeddedFilesDialog::on_extractPB_clicked() } -void GuiEmbeddedFilesDialog::on_updatePB_clicked() +void EmbeddedFilesWidget::on_updatePB_clicked() { EmbeddedFiles const & files = controller_.embeddedFiles(); QList selection = filesLW->selectedItems(); @@ -241,31 +241,41 @@ void GuiEmbeddedFilesDialog::on_updatePB_clicked() -void GuiEmbeddedFilesDialog::on_enableCB_toggled(bool enable) +void EmbeddedFilesWidget::on_enableCB_toggled(bool enable) { controller_.setEmbedding(enable); } -ControlEmbeddedFiles::ControlEmbeddedFiles(Dialog & parent) - : Controller(parent) -{} +GuiEmbeddedFiles::GuiEmbeddedFiles(GuiViewBase & parent, Qt::DockWidgetArea area, Qt::WindowFlags flags) + : DockView(parent, "embedded", area, flags) +{ + widget_ = new EmbeddedFilesWidget(*this); + setWidget(widget_); + setWindowTitle(widget_->windowTitle()); +} -EmbeddedFiles & ControlEmbeddedFiles::embeddedFiles() +void GuiEmbeddedFiles::updateView() +{ + widget_->updateView(); +} + + +EmbeddedFiles & GuiEmbeddedFiles::embeddedFiles() { return buffer().embeddedFiles(); } -bool ControlEmbeddedFiles::initialiseParams(string const &) +bool GuiEmbeddedFiles::initialiseParams(string const &) { return true; } -void ControlEmbeddedFiles::updateEmbeddedFiles() +void GuiEmbeddedFiles::updateEmbeddedFiles() { // copy buffer embeddedFiles to a local copy buffer().embeddedFiles().update(); @@ -273,7 +283,7 @@ void ControlEmbeddedFiles::updateEmbeddedFiles() } -void ControlEmbeddedFiles::dispatchMessage(string const & msg) +void GuiEmbeddedFiles::dispatchMessage(string const & msg) { // FIXME: the right thing to do? QT guys? // lyx view will only be updated if we do something to the main window. :-) @@ -281,13 +291,13 @@ void ControlEmbeddedFiles::dispatchMessage(string const & msg) } -bool ControlEmbeddedFiles::isReadonly() +bool GuiEmbeddedFiles::isReadonly() { return buffer().isReadonly(); } -void ControlEmbeddedFiles::setEmbedding(bool enable) +void GuiEmbeddedFiles::setEmbedding(bool enable) { if (embeddedFiles().enabled() == enable) return; @@ -300,7 +310,7 @@ void ControlEmbeddedFiles::setEmbedding(bool enable) } -void ControlEmbeddedFiles::goTo(EmbeddedFile const & item, int idx) +void GuiEmbeddedFiles::goTo(EmbeddedFile const & item, int idx) { BOOST_ASSERT(idx < item.refCount()); item.saveBookmark(&buffer(), idx); @@ -308,13 +318,13 @@ void ControlEmbeddedFiles::goTo(EmbeddedFile const & item, int idx) } -void ControlEmbeddedFiles::view(EmbeddedFile const & item) +void GuiEmbeddedFiles::view(EmbeddedFile const & item) { formats.view(buffer(), item, formats.getFormatFromFile(item)); } -void ControlEmbeddedFiles::setEmbed(EmbeddedFile & item, bool embed, bool update) +void GuiEmbeddedFiles::setEmbed(EmbeddedFile & item, bool embed, bool update) { if (item.embedded() == embed) return; @@ -337,7 +347,7 @@ void ControlEmbeddedFiles::setEmbed(EmbeddedFile & item, bool embed, bool update } -bool ControlEmbeddedFiles::browseAndAddFile() +bool GuiEmbeddedFiles::browseAndAddFile() { std::pair dir1(_("Documents|#o#O"), from_utf8(lyxrc.document_path)); @@ -357,7 +367,7 @@ bool ControlEmbeddedFiles::browseAndAddFile() } -bool ControlEmbeddedFiles::extract(EmbeddedFile const & item) +bool GuiEmbeddedFiles::extract(EmbeddedFile const & item) { if (item.embedded()) return item.extract(&buffer()); @@ -366,7 +376,7 @@ bool ControlEmbeddedFiles::extract(EmbeddedFile const & item) } -bool ControlEmbeddedFiles::update(EmbeddedFile const & item) +bool GuiEmbeddedFiles::update(EmbeddedFile const & item) { if (item.embedded()) return item.updateFromExternalFile(&buffer()); @@ -375,16 +385,15 @@ bool ControlEmbeddedFiles::update(EmbeddedFile const & item) } -GuiEmbeddedFiles::GuiEmbeddedFiles(LyXView & lv) - : DockView( - static_cast(lv), - "embedded", Qt::RightDockWidgetArea) -{} - - Dialog * createGuiEmbeddedFiles(LyXView & lv) { - return new GuiEmbeddedFiles(lv); + GuiViewBase & guiview = static_cast(lv); +#ifdef Q_WS_MACX + // On Mac show as a drawer at the right + return new GuiEmbeddedFiles(guiview, Qt::RightDockWidgetArea, Qt::Drawer); +#else + return new GuiEmbeddedFiles(guiview, Qt::RightDockWidgetArea); +#endif } diff --git a/src/frontends/qt4/GuiEmbeddedFiles.h b/src/frontends/qt4/GuiEmbeddedFiles.h index 3fd7b4f892..b8a0228454 100644 --- a/src/frontends/qt4/GuiEmbeddedFiles.h +++ b/src/frontends/qt4/GuiEmbeddedFiles.h @@ -20,12 +20,21 @@ namespace lyx { namespace frontend { -class ControlEmbeddedFiles : public Controller { -public: +class EmbeddedFilesWidget; + +class GuiEmbeddedFiles : public DockView +{ + Q_OBJECT + +public: + /// + GuiEmbeddedFiles( + GuiViewBase & parent, ///< the main window where to dock. + Qt::DockWidgetArea area = Qt::LeftDockWidgetArea, ///< Position of the dock (and also drawer) + Qt::WindowFlags flags = 0); /// - ControlEmbeddedFiles(Dialog &); - /// - ~ControlEmbeddedFiles() {} + void updateView(); + /// EmbeddedFiles & embeddedFiles(); /// @@ -62,16 +71,19 @@ public: bool update(EmbeddedFile const & item); protected: - // + /// + EmbeddedFilesWidget * widget_; + /// std::string message_; }; -class GuiEmbeddedFilesDialog : public QWidget, public Ui::GuiEmbeddedFilesUi + +class EmbeddedFilesWidget : public QWidget, public Ui::GuiEmbeddedFilesUi { Q_OBJECT public: - GuiEmbeddedFilesDialog(ControlEmbeddedFiles &); + EmbeddedFilesWidget(GuiEmbeddedFiles &); std::string name() const { return "embedding"; } public Q_SLOTS: @@ -92,19 +104,11 @@ public Q_SLOTS: void on_updatePB_clicked(); private: - ControlEmbeddedFiles & controller_; + GuiEmbeddedFiles & controller_; void set_embedding_status(bool embed); }; -class GuiEmbeddedFiles - : public DockView -{ -public: - GuiEmbeddedFiles(LyXView & lv); -}; - - } // namespace frontend } // namespace lyx diff --git a/src/frontends/qt4/GuiToc.cpp b/src/frontends/qt4/GuiToc.cpp index 3f3e07ef15..8bcc2303e6 100644 --- a/src/frontends/qt4/GuiToc.cpp +++ b/src/frontends/qt4/GuiToc.cpp @@ -43,9 +43,13 @@ using std::string; namespace lyx { namespace frontend { -GuiToc::GuiToc(Dialog & dialog) - : Controller(dialog), params_("toc") -{} +GuiToc::GuiToc(GuiViewBase & parent, Qt::DockWidgetArea area, Qt::WindowFlags flags) + : DockView(parent, "toc", area, flags), params_("toc") +{ + widget_ = new TocWidget(*this); + setWidget(widget_); + setWindowTitle(widget_->windowTitle()); +} int GuiToc::getTocDepth(int type) @@ -235,10 +239,9 @@ Dialog * createGuiToc(LyXView & lv) GuiViewBase & guiview = static_cast(lv); #ifdef Q_WS_MACX // On Mac show as a drawer at the right - return new DockView(guiview, "toc", - Qt::RightDockWidgetArea, Qt::Drawer); + return new GuiToc(guiview, Qt::RightDockWidgetArea, Qt::Drawer); #else - return new DockView(guiview, "toc"); + return new GuiToc(guiview); #endif } diff --git a/src/frontends/qt4/GuiToc.h b/src/frontends/qt4/GuiToc.h index 95beb91b43..a308f06ade 100644 --- a/src/frontends/qt4/GuiToc.h +++ b/src/frontends/qt4/GuiToc.h @@ -15,10 +15,12 @@ #ifndef GUITOC_H #define GUITOC_H -#include "TocBackend.h" -#include "Dialog.h" +#include "DockView.h" + #include "insets/InsetCommandParams.h" +#include "TocBackend.h" + #include #include #include @@ -29,14 +31,18 @@ namespace lyx { namespace frontend { class TocModel; +class TocWidget; -class GuiToc : public QObject, public Controller +class GuiToc : public DockView { Q_OBJECT public: /// - GuiToc(Dialog &); + GuiToc( + GuiViewBase & parent, ///< the main window where to dock. + Qt::DockWidgetArea area = Qt::LeftDockWidgetArea, ///< Position of the dock (and also drawer) + Qt::WindowFlags flags = 0); /// bool initialiseParams(std::string const & data); @@ -60,10 +66,12 @@ Q_SIGNALS: void modelReset(); private: - friend class TocWidget; + /// + TocWidget * widget_; /// std::vector toc_models_; +public: /// TocList const & tocs() const;