/// Dock Widget container for LyX dialogs.
/// This template class that encapsulates a given Widget inside a
/// QDockWidget and presents a Dialog interface
-template<class MyController, class MyWidget>
-class DockView : public QDockWidget, public Dialog
+class DockView : public QDockWidget, public Dialog, public Controller
{
public:
DockView(
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
//@{
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(); }
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_;
};
using support::FileName;
using support::libFileSearch;
-GuiEmbeddedFilesDialog::GuiEmbeddedFilesDialog
- (ControlEmbeddedFiles & controller)
+EmbeddedFilesWidget::EmbeddedFilesWidget
+ (GuiEmbeddedFiles & controller)
: controller_(controller)
{
setupUi(this);
}
-void GuiEmbeddedFilesDialog::on_filesLW_itemChanged(QListWidgetItem* item)
+void EmbeddedFilesWidget::on_filesLW_itemChanged(QListWidgetItem* item)
{
EmbeddedFiles & files = controller_.embeddedFiles();
if (item->checkState() == Qt::Checked) {
}
-void GuiEmbeddedFilesDialog::on_filesLW_itemSelectionChanged()
+void EmbeddedFilesWidget::on_filesLW_itemSelectionChanged()
{
if (controller_.isReadonly())
return;
}
-void GuiEmbeddedFilesDialog::on_filesLW_itemClicked(QListWidgetItem* item)
+void EmbeddedFilesWidget::on_filesLW_itemClicked(QListWidgetItem* item)
{
EmbeddedFiles & files = controller_.embeddedFiles();
int idx = filesLW->row(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);
}
-void GuiEmbeddedFilesDialog::on_selectPB_clicked()
+void EmbeddedFilesWidget::on_selectPB_clicked()
{
EmbeddedFiles & files = controller_.embeddedFiles();
// this should not be needed after EmbeddedFiles are updated correctly.
}
-void GuiEmbeddedFilesDialog::on_unselectPB_clicked()
+void EmbeddedFilesWidget::on_unselectPB_clicked()
{
EmbeddedFiles & files = controller_.embeddedFiles();
// this should not be needed after EmbeddedFiles are updated correctly.
}
-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<QListWidgetItem *> selection = filesLW->selectedItems();
}
-void GuiEmbeddedFilesDialog::on_updatePB_clicked()
+void EmbeddedFilesWidget::on_updatePB_clicked()
{
EmbeddedFiles const & files = controller_.embeddedFiles();
QList<QListWidgetItem *> selection = filesLW->selectedItems();
-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)\r
+ : DockView(parent, "embedded", area, flags)
+{
+ widget_ = new EmbeddedFilesWidget(*this);\r
+ setWidget(widget_);\r
+ setWindowTitle(widget_->windowTitle());\r
+}\r
-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();
}
-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. :-)
}
-bool ControlEmbeddedFiles::isReadonly()
+bool GuiEmbeddedFiles::isReadonly()
{
return buffer().isReadonly();
}
-void ControlEmbeddedFiles::setEmbedding(bool enable)
+void GuiEmbeddedFiles::setEmbedding(bool enable)
{
if (embeddedFiles().enabled() == enable)
return;
}
-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);
}
-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;
}
-bool ControlEmbeddedFiles::browseAndAddFile()
+bool GuiEmbeddedFiles::browseAndAddFile()
{
std::pair<docstring, docstring> dir1(_("Documents|#o#O"),
from_utf8(lyxrc.document_path));
}
-bool ControlEmbeddedFiles::extract(EmbeddedFile const & item)
+bool GuiEmbeddedFiles::extract(EmbeddedFile const & item)
{
if (item.embedded())
return item.extract(&buffer());
}
-bool ControlEmbeddedFiles::update(EmbeddedFile const & item)
+bool GuiEmbeddedFiles::update(EmbeddedFile const & item)
{
if (item.embedded())
return item.updateFromExternalFile(&buffer());
}
-GuiEmbeddedFiles::GuiEmbeddedFiles(LyXView & lv)
- : DockView<ControlEmbeddedFiles, GuiEmbeddedFilesDialog>(
- static_cast<GuiViewBase &>(lv),
- "embedded", Qt::RightDockWidgetArea)
-{}
-
-
Dialog * createGuiEmbeddedFiles(LyXView & lv)
{
- return new GuiEmbeddedFiles(lv);
+ GuiViewBase & guiview = static_cast<GuiViewBase &>(lv);\r
+#ifdef Q_WS_MACX\r
+ // On Mac show as a drawer at the right\r
+ return new GuiEmbeddedFiles(guiview, Qt::RightDockWidgetArea, Qt::Drawer);\r
+#else\r
+ return new GuiEmbeddedFiles(guiview, Qt::RightDockWidgetArea);\r
+#endif\r
}
namespace lyx {
namespace frontend {
-class ControlEmbeddedFiles : public Controller {
-public:
- ///
- ControlEmbeddedFiles(Dialog &);
+class EmbeddedFilesWidget;
+
+class GuiEmbeddedFiles : public DockView
+{
+ Q_OBJECT\r
+\r
+public:\r
+ ///\r
+ GuiEmbeddedFiles(\r
+ GuiViewBase & parent, ///< the main window where to dock.\r
+ Qt::DockWidgetArea area = Qt::LeftDockWidgetArea, ///< Position of the dock (and also drawer)\r
+ Qt::WindowFlags flags = 0);\r
///
- ~ControlEmbeddedFiles() {}
+ void updateView();
+
///
EmbeddedFiles & embeddedFiles();
///
bool update(EmbeddedFile const & item);
protected:
- //
+ ///\r
+ EmbeddedFilesWidget * widget_;\r
+ ///
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:
void on_updatePB_clicked();
private:
- ControlEmbeddedFiles & controller_;
+ GuiEmbeddedFiles & controller_;
void set_embedding_status(bool embed);
};
-class GuiEmbeddedFiles
- : public DockView<ControlEmbeddedFiles, GuiEmbeddedFilesDialog>
-{
-public:
- GuiEmbeddedFiles(LyXView & lv);
-};
-
-
} // namespace frontend
} // namespace lyx