2 * \file GuiEmbeddedFiles.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS.
13 #include "GuiEmbeddedFiles.h"
21 GuiEmbeddedFilesDialog::GuiEmbeddedFilesDialog(LyXView & lv)
22 : GuiDialog(lv, "embedding")
25 setController(new ControlEmbeddedFiles(*this));
26 setViewTitle(_("Embedded Files"));
28 //setView(new DockView<GuiEmbeddedFiles, GuiEmbeddedFilesDialog>(
29 // *dialog, qef, &gui_view, _("Embedded Files"), Qt::RightDockWidgetArea));
31 bc().setPolicy(ButtonPolicy::OkCancelPolicy);
37 ControlEmbeddedFiles & GuiEmbeddedFilesDialog::controller() const
39 return static_cast<ControlEmbeddedFiles &>(Dialog::controller());
43 void GuiEmbeddedFilesDialog::on_filesLW_itemChanged(QListWidgetItem* item)
45 EmbeddedFiles & files = controller().embeddedFiles();
46 if (item->checkState() == Qt::Checked) {
47 controller().setEmbed(files[filesLW->row(item)], true);
48 controller().dispatchMessage("Embed file " + fromqstr(item->text()));
50 controller().setEmbed(files[filesLW->row(item)], false);
51 controller().dispatchMessage("Stop embedding file " + fromqstr(item->text()));
56 void GuiEmbeddedFilesDialog::on_filesLW_itemSelectionChanged()
58 EmbeddedFiles & files = controller().embeddedFiles();
60 QList<QListWidgetItem *> selection = filesLW->selectedItems();
62 if (selection.empty()) {
63 fullpathLE->setEnabled(false);
64 selectPB->setEnabled(false);
65 unselectPB->setEnabled(false);
66 extractPB->setEnabled(false);
67 updatePB->setEnabled(false);
71 fullpathLE->setEnabled(selection.size() == 1);
73 // try to find a common embedding status
74 QList<QListWidgetItem*>::iterator it = selection.begin();
75 QList<QListWidgetItem*>::iterator it_end = selection.end();
76 // if the selection is not empty
78 int idx = filesLW->row(*it);
79 fullpathLE->setText(toqstr(files[idx].absFilename()));
80 controller().goTo(files[idx]);
82 // are the items all selected or unselected?
83 bool hasSelected = false;
84 bool hasUnselected = false;
85 for (; it != it_end; ++it) {
86 if ((*it)->checkState() == Qt::Checked)
91 selectPB->setEnabled(hasUnselected);
92 unselectPB->setEnabled(hasSelected);
96 void GuiEmbeddedFilesDialog::on_filesLW_itemDoubleClicked()
98 EmbeddedFiles & files = controller().embeddedFiles();
99 QList<QListWidgetItem *> selection = filesLW->selectedItems();
100 controller().view(files[filesLW->row(*selection.begin())]);
104 void GuiEmbeddedFilesDialog::updateView()
108 EmbeddedFiles const & files = controller().embeddedFiles();
109 EmbeddedFiles::EmbeddedFileList::const_iterator it = files.begin();
110 EmbeddedFiles::EmbeddedFileList::const_iterator it_end = files.end();
111 for (; it != it_end; ++it) {
112 QListWidgetItem * item = new QListWidgetItem(toqstr(it->inzipName()));
113 Qt::ItemFlags flag = Qt::ItemIsUserCheckable | Qt::ItemIsSelectable;
115 flag |= Qt::ItemIsEnabled;
116 item->setFlags(flag);
118 item->setCheckState(Qt::Checked);
120 item->setCheckState(Qt::Unchecked);
121 filesLW->addItem(item);
126 void GuiEmbeddedFilesDialog::on_selectPB_clicked()
128 EmbeddedFiles & files = controller().embeddedFiles();
129 QList<QListWidgetItem *> selection = filesLW->selectedItems();
130 for (QList<QListWidgetItem*>::iterator it = selection.begin();
131 it != selection.end(); ++it) {
132 (*it)->setCheckState(Qt::Checked);
133 controller().setEmbed(files[filesLW->row(*it)], true);
135 controller().dispatchMessage("Embedding files");
139 void GuiEmbeddedFilesDialog::on_unselectPB_clicked()
141 EmbeddedFiles & files = controller().embeddedFiles();
142 QList<QListWidgetItem *> selection = filesLW->selectedItems();
143 for (QList<QListWidgetItem*>::iterator it = selection.begin();
144 it != selection.end(); ++it) {
145 (*it)->setCheckState(Qt::Checked);
146 controller().setEmbed(files[filesLW->row(*it)], false);
148 controller().dispatchMessage("Stop embedding files");
152 void GuiEmbeddedFilesDialog::on_addPB_clicked()
154 docstring const file = controller().browseFile();
156 EmbeddedFiles & files = controller().embeddedFiles();
157 files.registerFile(to_utf8(file), true);
159 controller().dispatchMessage("Add an embedded file");
163 void GuiEmbeddedFilesDialog::on_extractPB_clicked()
165 EmbeddedFiles const & files = controller().embeddedFiles();
166 QList<QListWidgetItem *> selection = filesLW->selectedItems();
167 for (QList<QListWidgetItem*>::iterator it = selection.begin();
168 it != selection.end(); ++it)
169 controller().extract(files[filesLW->row(*it)]);
170 // FIXME: collect extraction status and display a dialog
171 controller().dispatchMessage("Extract embedded files");
175 void GuiEmbeddedFilesDialog::on_updatePB_clicked()
177 EmbeddedFiles const & files = controller().embeddedFiles();
178 QList<QListWidgetItem *> selection = filesLW->selectedItems();
179 for (QList<QListWidgetItem*>::iterator it = selection.begin();
180 it != selection.end(); ++it)
181 controller().update(files[filesLW->row(*it)]);
182 // FIXME: collect update status and display a dialog
183 controller().dispatchMessage("Update embedded files from external file");
188 void GuiEmbeddedFilesDialog::on_enableCB_toggled(bool enable)
191 controller().embeddedFiles().enable(enable);
192 // immediately post the change to buffer (and bufferView)
194 controller().dispatchMessage("Enable file embedding");
196 controller().dispatchMessage("Disable file embedding");
200 } // namespace frontend
203 #include "GuiEmbeddedFiles_moc.cpp"