]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiDocument.cpp
Fix bug 4410 (http://bugzilla.lyx.org/show_bug.cgi?id=4410).
[lyx.git] / src / frontends / qt4 / GuiDocument.cpp
index abc340be46bda8d9fc549ee65022fa72d6603731..108ba779fa3165bcb4174de28f8e75cfef8cfe45 100644 (file)
 
 #include "GuiDocument.h"
 
+#include "GuiView.h"
+
 #include "BranchList.h"
 #include "buffer_funcs.h"
 #include "Buffer.h"
 #include "BufferParams.h"
 #include "BufferView.h"
 #include "Color.h"
+#include "EmbeddedFiles.h"
 #include "Encoding.h"
 #include "FloatPlacement.h"
-#include "frontend_helpers.h"
 #include "FuncRequest.h"
-#include "gettext.h"
+#include "support/gettext.h"
 #include "GuiBranches.h"
 #include "Language.h"
 #include "LaTeXFeatures.h"
 #include "TextClassList.h"
 #include "Validator.h"
 
-
-// FIXME: those two headers are needed because of the
-// WorkArea::redraw() call below.
-#include "frontends/LyXView.h"
-#include "frontends/WorkArea.h"
-
 #include "insets/InsetListingsParams.h"
 
+#include "support/FileName.h"
+#include "support/filetools.h"
 #include "support/lstrings.h"
 
 #include <boost/bind.hpp>
@@ -218,7 +216,7 @@ void PreambleModule::closeEvent(QCloseEvent * e)
 
 
 
-GuiDocument::GuiDocument(LyXView & lv)
+GuiDocument::GuiDocument(GuiView & lv)
        : GuiDialog(lv, "document")
 {
        setupUi(this);
@@ -624,6 +622,15 @@ GuiDocument::GuiDocument(LyXView & lv)
        connect(bulletsModule, SIGNAL(changed()),
                this, SLOT(change_adaptor()));
 
+       // embedded files
+       embeddedFilesModule = new UiWidget<Ui::EmbeddedFilesUi>;
+       connect(embeddedFilesModule->bundleCB, SIGNAL(toggled(bool)),
+               this, SLOT(change_adaptor()));
+       connect(embeddedFilesModule->addPB, SIGNAL(clicked()),
+               this, SLOT(change_adaptor()));
+       connect(embeddedFilesModule->removePB, SIGNAL(clicked()),
+               this, SLOT(change_adaptor()));
+
        // PDF support
        pdfSupportModule = new UiWidget<Ui::PDFSupportUi>;
 
@@ -680,6 +687,7 @@ GuiDocument::GuiDocument(LyXView & lv)
        docPS->addPanel(floatModule, _("Float Placement"));
        docPS->addPanel(bulletsModule, _("Bullets"));
        docPS->addPanel(branchesModule, _("Branches"));
+       docPS->addPanel(embeddedFilesModule, _("Embedded Files"));
        docPS->addPanel(preambleModule, _("LaTeX Preamble"));
        docPS->setCurrentPanel(_("Document Class"));
 // FIXME: hack to work around resizing bug in Qt >= 4.2
@@ -962,6 +970,31 @@ void GuiDocument::updateModuleInfo()
 }
 
 
+void GuiDocument::updateEmbeddedFileList()
+{
+       embeddedFilesModule->filesLW->clear();
+       // add current embedded files
+       EmbeddedFiles & files = buffer().embeddedFiles();
+       files.update();
+       EmbeddedFiles::EmbeddedFileList::iterator fit = files.begin();
+       EmbeddedFiles::EmbeddedFileList::iterator fit_end = files.end();
+       for (; fit != fit_end; ++fit) {
+               QString label = toqstr(fit->relFilename(buffer().filePath()));
+               if (fit->refCount() > 1)
+                       label += " (" + QString::number(fit->refCount()) + ")";
+               QListWidgetItem * item = new QListWidgetItem(label);
+               item->setFlags(item->flags() | Qt::ItemIsSelectable
+                       | Qt::ItemIsUserCheckable);
+               if(fit->embedded())
+                       item->setCheckState(Qt::Checked);
+               else
+                       item->setCheckState(Qt::Unchecked);
+               // index of the currently used ParConstIterator
+               embeddedFilesModule->filesLW->addItem(item);
+       }
+}
+
+
 void GuiDocument::updateNumbering()
 {
        TextClass const & tclass = bp_.getTextClass();
@@ -1209,9 +1242,9 @@ void GuiDocument::apply(BufferParams & params)
                pageLayoutModule->paperheightUnitCO);
 
        if (pageLayoutModule->facingPagesCB->isChecked())
-               params.sides = TextClass::TwoSides;
+               params.sides = TwoSides;
        else
-               params.sides = TextClass::OneSide;
+               params.sides = OneSide;
 
        if (pageLayoutModule->landscapeRB->isChecked())
                params.orientation = ORIENTATION_LANDSCAPE;
@@ -1259,6 +1292,16 @@ void GuiDocument::apply(BufferParams & params)
        else
                pdf.pagemode.clear();
        pdf.quoted_options = fromqstr(pdfSupportModule->optionsLE->text());
+
+       // Embedded files
+       // FIXME
+
+       // GuiDocument is special because some change in there might affect other
+       // dialogs. It is then better to make sure that all dialogs are in sync
+       // with current document settings.
+       lyxview().updateBufferDependent(true);
+       lyxview().updateLayoutList();
+       lyxview().updateToolbars();
 }
 
 
@@ -1503,7 +1546,7 @@ void GuiDocument::updateParams(BufferParams const & params)
        pageLayoutModule->portraitRB->setChecked(!landscape);
 
        pageLayoutModule->facingPagesCB->setChecked(
-               params.sides == TextClass::TwoSides);
+               params.sides == TwoSides);
 
 
        lengthToWidgets(pageLayoutModule->paperwidthLE,
@@ -1565,6 +1608,9 @@ void GuiDocument::updateParams(BufferParams const & params)
 
        pdfSupportModule->optionsLE->setText(
                toqstr(pdf.quoted_options));
+
+       // embedded files
+       updateEmbeddedFileList();
 }
 
 
@@ -1724,8 +1770,7 @@ void GuiDocument::dispatchParams()
                        "assign branch"));
        }
        // FIXME: If we used an LFUN, we would not need those two lines:
-       bufferview()->update();
-       lyxview().currentWorkArea()->redraw();
+       bufferview()->processUpdateFlags(Update::Force | Update::FitCursor);
 }
 
 
@@ -1807,7 +1852,7 @@ void GuiDocument::loadModuleNames ()
 }
 
 
-Dialog * createGuiDocument(LyXView & lv) { return new GuiDocument(lv); }
+Dialog * createGuiDocument(GuiView & lv) { return new GuiDocument(lv); }
 
 
 } // namespace frontend