]> git.lyx.org Git - features.git/commitdiff
half of another one
authorAndré Pönitz <poenitz@gmx.net>
Sat, 6 Oct 2007 14:31:48 +0000 (14:31 +0000)
committerAndré Pönitz <poenitz@gmx.net>
Sat, 6 Oct 2007 14:31:48 +0000 (14:31 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20784 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/qt4/Dialogs.cpp
src/frontends/qt4/GuiEmbeddedFiles.cpp
src/frontends/qt4/GuiEmbeddedFiles.h

index c912b6ad9bbbed5d8f1e2e2b08c849b06279c984..8be964947f1bb66c18714b9c2eefd1c2423807fb 100644 (file)
@@ -19,7 +19,6 @@
 #include "GuiBibitem.h"
 #include "GuiDelimiter.h"
 #include "GuiDocument.h"
-#include "GuiEmbeddedFiles.h"
 #include "GuiExternal.h"
 #include "GuiGraphics.h"
 #include "GuiIndex.h"
@@ -101,6 +100,7 @@ Dialog * createGuiCharacter(LyXView & lv);
 Dialog * createGuiCitation(LyXView & lv);
 Dialog * createGuiDelimiter(LyXView & lv);
 Dialog * createGuiDocument(LyXView & lv);
+Dialog * createGuiEmbeddedFiles(LyXView & lv);
 Dialog * createGuiErrorList(LyXView & lv);
 Dialog * createGuiERT(LyXView & lv);
 Dialog * createGuiExternal(LyXView & lv);
@@ -163,8 +163,7 @@ Dialog * Dialogs::build(string const & name)
        } else if (name == "document") {
                dialog = new GuiDocumentDialog(lyxview_);
        } else if (name == "embedding") {
-               dialog = new DockView<ControlEmbeddedFiles, GuiEmbeddedFilesDialog>(
-                       guiview, name, Qt::RightDockWidgetArea);
+               dialog = createGuiEmbeddedFiles(lyxview_);
        } else if (name == "errorlist") {
                dialog = createGuiErrorList(lyxview_);
        } else if (name == "ert") {
index 15b0433bef0ca603907bab381f48fa9ef9c081a9..e6ac23bfdf13f26c2a012a5cc6064b8b4e50a306 100644 (file)
 #include <config.h>
 
 #include "GuiEmbeddedFiles.h"
+
+#include "Buffer.h"
+
+#include "FuncRequest.h"
+#include "gettext.h"
 #include "debug.h"
+#include "Format.h"
+#include "LyXRC.h"
+
+#include "frontend_helpers.h"
+#include "frontends/LyXView.h"
+
+#include "support/FileFilterList.h"
+#include "support/convert.h"
+
+using std::string;
 
 
 namespace lyx {
 namespace frontend {
 
+using support::FileFilterList;
+
 GuiEmbeddedFilesDialog::GuiEmbeddedFilesDialog
                (ControlEmbeddedFiles & controller)
        : controller_(controller)
@@ -214,6 +231,147 @@ void GuiEmbeddedFilesDialog::on_enableCB_toggled(bool enable)
 }
 
 
+
+ControlEmbeddedFiles::ControlEmbeddedFiles(Dialog & parent)
+       : Controller(parent)
+{}
+
+
+EmbeddedFiles & ControlEmbeddedFiles::embeddedFiles()
+{
+       return buffer().embeddedFiles();
+}
+
+
+bool ControlEmbeddedFiles::initialiseParams(string const &)
+{
+       return true;
+}
+
+
+void ControlEmbeddedFiles::updateEmbeddedFiles()
+{
+       // copy buffer embeddedFiles to a local copy
+       buffer().embeddedFiles().update();
+       buffer().embeddingChanged();
+}
+
+
+void ControlEmbeddedFiles::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. :-)
+       dispatch(FuncRequest(LFUN_MESSAGE, msg));
+}
+
+
+bool ControlEmbeddedFiles::isReadonly()
+{
+       return buffer().isReadonly();
+}
+
+
+void ControlEmbeddedFiles::setEmbedding(bool enable)
+{
+       if (embeddedFiles().enabled() == enable)
+               return;
+       embeddedFiles().enable(enable);
+       buffer().markDirty();
+       if (enable)
+               dispatchMessage("Stop saving in bundled format.");
+       else
+               dispatchMessage("Save in bundled format.");
+}
+
+
+void ControlEmbeddedFiles::goTo(EmbeddedFile const & item, int idx)
+{
+       BOOST_ASSERT(idx < item.refCount());
+       item.saveBookmark(&buffer(), idx);
+       lyxview().dispatch(FuncRequest(LFUN_BOOKMARK_GOTO, "0"));
+}
+
+
+void ControlEmbeddedFiles::view(EmbeddedFile const & item)
+{
+       formats.view(buffer(), item, formats.getFormatFromFile(item));
+}
+
+
+void ControlEmbeddedFiles::setEmbed(EmbeddedFile & item, bool embed, bool update)
+{
+       if (item.embedded() == embed)
+               return;
+       item.setEmbed(embed);
+       if (update) {
+               if (embed)
+                       item.updateFromExternalFile(&buffer());
+               else
+                       item.extract(&buffer());
+               item.updateInsets(&buffer());
+               // FIXME: unless we record the type of file item, we will
+               // need to update all possible dialogs (bibtex etc).
+               updateDialog("graphics");
+       }
+       if (embed)
+               dispatchMessage("Embed file " + item.outputFilename(buffer().filePath()));
+       else
+               dispatchMessage("Stop embedding file " + item.outputFilename(buffer().filePath()));
+       buffer().markDirty();
+}
+
+
+bool ControlEmbeddedFiles::browseAndAddFile()
+{
+       std::pair<docstring, docstring> dir1(_("Documents|#o#O"),
+                                 from_utf8(lyxrc.document_path));
+       FileFilterList const filter(_("All file (*.*)"));
+       docstring const file = browseRelFile(docstring(), from_utf8(bufferFilepath()),
+                            _("Select a file to embed"),
+                            filter, false, dir1);
+       if (!file.empty()) {
+               EmbeddedFile & ef = embeddedFiles().registerFile(to_utf8(file), true);
+               if (embeddedFiles().enabled())
+                       ef.updateFromExternalFile(&buffer());
+               buffer().markDirty();
+               dispatchMessage("Add an embedded file" + to_utf8(file));
+               return true;
+       }
+       return false;
+}
+
+
+bool ControlEmbeddedFiles::extract(EmbeddedFile const & item)
+{
+       if (item.embedded())
+               return item.extract(&buffer());
+       else
+               return false;
+}
+
+
+bool ControlEmbeddedFiles::update(EmbeddedFile const & item)
+{
+       if (item.embedded())
+               return item.updateFromExternalFile(&buffer());
+       else
+               return false;
+}
+
+
+GuiEmbeddedFiles::GuiEmbeddedFiles(LyXView & lv)
+       : DockView<ControlEmbeddedFiles, GuiEmbeddedFilesDialog>(
+                       static_cast<GuiViewBase &>(lv),
+                       "embedded", Qt::RightDockWidgetArea)
+{}
+
+
+Dialog * createGuiEmbeddedFiles(LyXView & lv)
+{
+       return new GuiEmbeddedFiles(lv);
+}
+
+
 } // namespace frontend
 } // namespace lyx
 
index a11931713dcc46806bdc4f9b2bf3cb1e5fc945b6..3fd7b4f8920c9a2e21bf46aeb2a83053e6582a44 100644 (file)
 #define GUIEMBEDDEDFILES_H
 
 #include "GuiDialog.h"
+#include "DockView.h"
 #include "EmbeddedFiles.h"
-#include "ControlEmbeddedFiles.h"
 #include "ui_EmbeddedFilesUi.h"
 
 namespace lyx {
 namespace frontend {
 
+class ControlEmbeddedFiles : public Controller {
+public:
+       ///
+       ControlEmbeddedFiles(Dialog &);
+       ///
+       ~ControlEmbeddedFiles() {}
+       ///
+       EmbeddedFiles & embeddedFiles();
+       ///
+       bool initialiseParams(std::string const &);
+       /// obtain embedded files from buffer
+       void updateEmbeddedFiles();
+       ///
+       void clearParams() {}
+       ///
+       bool isBufferDependent() const { return true; }
+       ///
+       bool canApply() const { return true; }
+       ///
+       bool canApplyToReadOnly() const { return false; }
+       ///
+       void dispatchMessage(std::string const & msg);
+       ///
+       void dispatchParams() {}
+       ///
+       bool isReadonly();
+       ///
+       void setEmbedding(bool enable);
+       ///
+       void goTo(EmbeddedFile const & item, int idx);
+       ///
+       void view(EmbeddedFile const & item);
+       ///
+       void setEmbed(EmbeddedFile & item, bool embed, bool update);
+       ///
+       bool browseAndAddFile();
+       ///
+       bool extract(EmbeddedFile const & item);
+       ///
+       bool update(EmbeddedFile const & item);
+
+protected:
+       //
+       std::string message_;
+};
+
 class GuiEmbeddedFilesDialog : public QWidget, public Ui::GuiEmbeddedFilesUi
 {
        Q_OBJECT
@@ -50,6 +96,15 @@ private:
        void set_embedding_status(bool embed);
 };
 
+
+class GuiEmbeddedFiles
+       : public DockView<ControlEmbeddedFiles, GuiEmbeddedFilesDialog>
+{
+public:
+       GuiEmbeddedFiles(LyXView & lv);
+};
+
+
 } // namespace frontend
 } // namespace lyx