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"
20 static QString const INVALID_COLOR = "gray";
21 static QString const AUTO_COLOR = "green";
22 static QString const EMBEDDED_COLOR = "black";
23 static QString const EXTERNAL_COLOR = "blue";
26 GuiEmbeddedFilesDialog::GuiEmbeddedFilesDialog(LyXView & lv)
27 : GuiDialog(lv, "embedding")
30 setController(new ControlEmbeddedFiles(*this));
31 setViewTitle(_("Embedded Files"));
33 //setView(new DockView<GuiEmbeddedFiles, GuiEmbeddedFilesDialog>(
34 // *dialog, qef, &gui_view, _("Embedded Files"), Qt::RightDockWidgetArea));
36 bc().setPolicy(ButtonPolicy::OkCancelPolicy);
42 ControlEmbeddedFiles & GuiEmbeddedFilesDialog::controller() const
44 return static_cast<ControlEmbeddedFiles &>(Dialog::controller());
48 void GuiEmbeddedFilesDialog::on_filesLW_itemSelectionChanged()
50 EmbeddedFiles & files = controller().embeddedFiles();
52 QList<QListWidgetItem *> selection = filesLW->selectedItems();
54 fullpathLE->setEnabled(selection.size() == 1);
56 // try to find a common mode, otherwise return NONE.
57 QList<QListWidgetItem*>::iterator it = selection.begin();
58 QList<QListWidgetItem*>::iterator it_end = selection.end();
59 // if the selection is not empty
61 int idx = filesLW->row(*it);
62 fullpathLE->setText(toqstr(files[idx].absFilename()));
63 // go to the first selected item
64 controller().goTo(files[idx]);
67 EmbeddedFile::STATUS mode = EmbeddedFile::NONE;
68 for (; it != it_end; ++it) {
69 int idx = filesLW->row(*it);
70 if (mode == EmbeddedFile::NONE) {
71 mode = files[idx].status();
74 if (mode != files[idx].status()) {
75 mode = EmbeddedFile::NONE;
80 autoRB->setChecked(mode == EmbeddedFile::AUTO);
81 embeddedRB->setChecked(mode == EmbeddedFile::EMBEDDED);
82 externalRB->setChecked(mode == EmbeddedFile::EXTERNAL);
86 void GuiEmbeddedFilesDialog::on_filesLW_itemDoubleClicked()
88 EmbeddedFiles & files = controller().embeddedFiles();
89 QList<QListWidgetItem *> selection = filesLW->selectedItems();
90 controller().view(files[filesLW->row(*selection.begin())]);
94 void GuiEmbeddedFilesDialog::updateView()
99 EmbeddedFiles const & files = controller().embeddedFiles();
100 EmbeddedFiles::EmbeddedFileList::const_iterator it = files.begin();
101 EmbeddedFiles::EmbeddedFileList::const_iterator it_end = files.end();
102 for (; it != it_end; ++it) {
103 QListWidgetItem * item = new QListWidgetItem(toqstr(it->inzipName()));
105 item->setTextColor(INVALID_COLOR);
106 else if(it->status() == EmbeddedFile::AUTO)
107 item->setTextColor(AUTO_COLOR);
108 else if(it->status() == EmbeddedFile::EMBEDDED)
109 item->setTextColor(EMBEDDED_COLOR);
111 item->setTextColor(EXTERNAL_COLOR);
112 filesLW->addItem(item);
115 bool enabled = files.enabled();
116 enableCB->setChecked(enabled);
117 statusGB->setEnabled(enabled);
118 fullpathLE->setEnabled(enabled);
122 void GuiEmbeddedFilesDialog::on_addPB_clicked()
124 docstring const file = controller().browseFile();
126 EmbeddedFiles & files = controller().embeddedFiles();
127 files.registerFile(to_utf8(file), EmbeddedFile::EMBEDDED);
132 void GuiEmbeddedFilesDialog::on_extractPB_clicked()
134 EmbeddedFiles const & files = controller().embeddedFiles();
135 QList<QListWidgetItem *> selection = filesLW->selectedItems();
136 for (QList<QListWidgetItem*>::iterator it = selection.begin();
137 it != selection.end(); ++it)
138 controller().extract(files[filesLW->row(*it)]);
142 void GuiEmbeddedFilesDialog::on_enableCB_toggled(bool enable)
146 // When a embedded file is turned to disabled, it should save its
147 // embedded files. Otherwise, embedded files will be lost!!!
149 controller().embeddedFiles().enable(enable);
150 // immediately post the change to buffer (and bufferView)
152 controller().setMessage("Enable file embedding");
154 controller().setMessage("Disable file embedding");
156 controller().dispatchParams();
160 void GuiEmbeddedFilesDialog::set_embedding_status(EmbeddedFile::STATUS status)
162 EmbeddedFiles & files = controller().embeddedFiles();
163 QList<QListWidgetItem *> selection = filesLW->selectedItems();
164 for (QList<QListWidgetItem*>::iterator it = selection.begin();
165 it != selection.end(); ++it) {
166 int row = filesLW->row(*it);
167 // FIXME: mark buffer dirty
168 if (status != files[row].status())
169 files[row].setStatus(status);
170 if(status == EmbeddedFile::AUTO)
171 (*it)->setTextColor(AUTO_COLOR);
172 else if(status == EmbeddedFile::EMBEDDED)
173 (*it)->setTextColor(EMBEDDED_COLOR);
175 (*it)->setTextColor(EXTERNAL_COLOR);
177 if (status == EmbeddedFile::AUTO)
178 controller().setMessage("Switch to auto embedding");
179 else if (status == EmbeddedFile::EMBEDDED)
180 controller().setMessage("Switch to always embedding");
182 controller().setMessage("Switch to never embedding");
183 autoRB->setChecked(status == EmbeddedFile::AUTO);
184 embeddedRB->setChecked(status == EmbeddedFile::EMBEDDED);
185 externalRB->setChecked(status == EmbeddedFile::EXTERNAL);
187 controller().dispatchParams();
191 void GuiEmbeddedFilesDialog::on_autoRB_clicked()
193 set_embedding_status(EmbeddedFile::AUTO);
197 void GuiEmbeddedFilesDialog::on_embeddedRB_clicked()
199 set_embedding_status(EmbeddedFile::EMBEDDED);
203 void GuiEmbeddedFilesDialog::on_externalRB_clicked()
205 set_embedding_status(EmbeddedFile::EXTERNAL);
209 } // namespace frontend
212 #include "GuiEmbeddedFiles_moc.cpp"