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 /////////////////////////////////////////////////////////////////////
22 // GuiEmbeddedFilesDialog
24 /////////////////////////////////////////////////////////////////////
26 static QString const INVALID_COLOR = "gray";
27 static QString const AUTO_COLOR = "green";
28 static QString const EMBEDDED_COLOR = "black";
29 static QString const EXTERNAL_COLOR = "blue";
31 GuiEmbeddedFilesDialog::GuiEmbeddedFilesDialog(GuiEmbeddedFiles * form)
40 void GuiEmbeddedFilesDialog::on_filesLW_itemSelectionChanged()
42 EmbeddedFiles & files = form_->embeddedFiles();
44 QList<QListWidgetItem *> selection = filesLW->selectedItems();
46 fullpathLE->setEnabled(selection.size() == 1);
48 // try to find a common mode, otherwise return NONE.
49 QList<QListWidgetItem*>::iterator it = selection.begin();
50 QList<QListWidgetItem*>::iterator it_end = selection.end();
51 // if the selection is not empty
53 int idx = filesLW->row(*it);
54 fullpathLE->setText(toqstr(files[idx].absFilename()));
55 // go to the first selected item
56 form_->goTo(files[idx]);
59 EmbeddedFile::STATUS mode = EmbeddedFile::NONE;
60 for (; it != it_end; ++it) {
61 int idx = filesLW->row(*it);
62 if (mode == EmbeddedFile::NONE) {
63 mode = files[idx].status();
66 if (mode != files[idx].status()) {
67 mode = EmbeddedFile::NONE;
72 autoRB->setChecked(mode == EmbeddedFile::AUTO);
73 embeddedRB->setChecked(mode == EmbeddedFile::EMBEDDED);
74 externalRB->setChecked(mode == EmbeddedFile::EXTERNAL);
78 void GuiEmbeddedFilesDialog::on_filesLW_itemDoubleClicked()
80 EmbeddedFiles & files = form_->embeddedFiles();
81 QList<QListWidgetItem *> selection = filesLW->selectedItems();
82 form_->view(files[filesLW->row(*selection.begin())]);
86 void GuiEmbeddedFilesDialog::update()
91 EmbeddedFiles const & files = form_->embeddedFiles();
92 EmbeddedFiles::EmbeddedFileList::const_iterator it = files.begin();
93 EmbeddedFiles::EmbeddedFileList::const_iterator it_end = files.end();
94 for (; it != it_end; ++it) {
95 QListWidgetItem * item = new QListWidgetItem(toqstr(it->inzipName()));
97 item->setTextColor(INVALID_COLOR);
98 else if(it->status() == EmbeddedFile::AUTO)
99 item->setTextColor(AUTO_COLOR);
100 else if(it->status() == EmbeddedFile::EMBEDDED)
101 item->setTextColor(EMBEDDED_COLOR);
103 item->setTextColor(EXTERNAL_COLOR);
104 filesLW->addItem(item);
107 bool enabled = files.enabled();
108 enableCB->setChecked(enabled);
109 statusGB->setEnabled(enabled);
110 fullpathLE->setEnabled(enabled);
114 void GuiEmbeddedFilesDialog::on_addPB_clicked()
116 docstring const file = form_->browseFile();
118 EmbeddedFiles & files = form_->embeddedFiles();
119 files.registerFile(to_utf8(file), EmbeddedFile::EMBEDDED);
124 void GuiEmbeddedFilesDialog::on_extractPB_clicked()
126 EmbeddedFiles const & files = form_->embeddedFiles();
127 QList<QListWidgetItem *> selection = filesLW->selectedItems();
128 for (QList<QListWidgetItem*>::iterator it = selection.begin();
129 it != selection.end(); ++it)
130 form_->extract(files[filesLW->row(*it)]);
134 void GuiEmbeddedFilesDialog::on_enableCB_toggled(bool enable)
138 // When a embedded file is turned to disabled, it should save its
139 // embedded files. Otherwise, embedded files will be lost!!!
141 form_->embeddedFiles().enable(enable);
142 // immediately post the change to buffer (and bufferView)
144 form_->setMessage("Enable file embedding");
146 form_->setMessage("Disable file embedding");
148 form_->dispatchParams();
152 void GuiEmbeddedFilesDialog::set_embedding_status(EmbeddedFile::STATUS status)
154 EmbeddedFiles & files = form_->embeddedFiles();
155 QList<QListWidgetItem *> selection = filesLW->selectedItems();
156 for (QList<QListWidgetItem*>::iterator it = selection.begin();
157 it != selection.end(); ++it) {
158 int row = filesLW->row(*it);
159 // FIXME: mark buffer dirty
160 if (status != files[row].status())
161 files[row].setStatus(status);
162 if(status == EmbeddedFile::AUTO)
163 (*it)->setTextColor(AUTO_COLOR);
164 else if(status == EmbeddedFile::EMBEDDED)
165 (*it)->setTextColor(EMBEDDED_COLOR);
167 (*it)->setTextColor(EXTERNAL_COLOR);
169 if (status == EmbeddedFile::AUTO)
170 form_->setMessage("Switch to auto embedding");
171 else if (status == EmbeddedFile::EMBEDDED)
172 form_->setMessage("Switch to always embedding");
174 form_->setMessage("Switch to never embedding");
175 autoRB->setChecked(status == EmbeddedFile::AUTO);
176 embeddedRB->setChecked(status == EmbeddedFile::EMBEDDED);
177 externalRB->setChecked(status == EmbeddedFile::EXTERNAL);
179 form_->dispatchParams();
183 void GuiEmbeddedFilesDialog::on_autoRB_clicked()
185 set_embedding_status(EmbeddedFile::AUTO);
189 void GuiEmbeddedFilesDialog::on_embeddedRB_clicked()
191 set_embedding_status(EmbeddedFile::EMBEDDED);
195 void GuiEmbeddedFilesDialog::on_externalRB_clicked()
197 set_embedding_status(EmbeddedFile::EXTERNAL);
201 } // namespace frontend
204 #include "GuiEmbeddedFiles_moc.cpp"