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 GuiEmbeddedFilesDialog::GuiEmbeddedFilesDialog
21 (ControlEmbeddedFiles & controller)
22 : controller_(controller)
25 setWindowTitle("LyX: " + qt_("Embedded Files"));
30 void GuiEmbeddedFilesDialog::on_filesLW_itemChanged(QListWidgetItem* item)
32 EmbeddedFiles & files = controller_.embeddedFiles();
33 if (item->checkState() == Qt::Checked) {
34 if (files[filesLW->row(item)].embedded())
36 // this should not be needed after EmbeddedFiles are updated correctly.
38 controller_.setEmbed(files[filesLW->row(item)], true, files.enabled());
40 if (!files[filesLW->row(item)].embedded())
42 // this should not be needed after EmbeddedFiles are updated correctly.
44 controller_.setEmbed(files[filesLW->row(item)], false, files.enabled());
49 void GuiEmbeddedFilesDialog::on_filesLW_itemSelectionChanged()
51 if (controller_.isReadonly())
54 QList<QListWidgetItem *> selection = filesLW->selectedItems();
56 if (selection.empty()) {
57 fullpathLE->setEnabled(false);
58 selectPB->setEnabled(false);
59 unselectPB->setEnabled(false);
60 extractPB->setEnabled(false);
61 updatePB->setEnabled(false);
65 fullpathLE->setEnabled(selection.size() == 1);
67 // try to find a common embedding status
68 bool hasSelected = false;
69 bool hasUnselected = false;
70 QList<QListWidgetItem*>::iterator it = selection.begin();
71 QList<QListWidgetItem*>::iterator it_end = selection.end();
72 for (; it != it_end; ++it) {
73 if ((*it)->checkState() == Qt::Checked)
78 selectPB->setEnabled(hasUnselected);
79 unselectPB->setEnabled(hasSelected);
83 void GuiEmbeddedFilesDialog::on_filesLW_itemClicked(QListWidgetItem* item)
85 EmbeddedFiles & files = controller_.embeddedFiles();
86 int idx = filesLW->row(item);
87 fullpathLE->setText(toqstr(files[idx].absFilename()));
88 if (files[idx].refCount() > 1) {
89 // if multiple insets are referred, click again will move
91 int k = item->data(Qt::UserRole).toInt();
92 controller_.goTo(files[idx], k);
93 k = (k + 1) % files[idx].refCount();
94 item->setData(Qt::UserRole, k);
96 QString label = toqstr(files[idx].inzipName())
97 + QString(" (%1/%2)").arg(k + 1).arg(files[idx].refCount());
99 } else if (files[idx].refCount() == 1)
100 controller_.goTo(files[idx], 0);
104 void GuiEmbeddedFilesDialog::on_filesLW_itemDoubleClicked(QListWidgetItem* item)
106 EmbeddedFiles & files = controller_.embeddedFiles();
107 controller_.view(files[filesLW->row(item)]);
111 void GuiEmbeddedFilesDialog::updateView()
113 bool readOnly = controller_.isReadonly();
114 fullpathLE->setEnabled(!readOnly);
115 selectPB->setEnabled(!readOnly);
116 unselectPB->setEnabled(!readOnly);
117 addPB->setEnabled(!readOnly);
118 extractPB->setEnabled(!readOnly);
119 updatePB->setEnabled(!readOnly);
120 enableCB->setEnabled(!readOnly);
123 EmbeddedFiles const & files = controller_.embeddedFiles();
124 enableCB->setCheckState(files.enabled() ? Qt::Checked : Qt::Unchecked);
125 EmbeddedFiles::EmbeddedFileList::const_iterator it = files.begin();
126 EmbeddedFiles::EmbeddedFileList::const_iterator it_end = files.end();
127 for (; it != it_end; ++it) {
128 QString label = toqstr(it->inzipName());
129 if (it->refCount() > 1)
130 label += " (1/" + QString::number(it->refCount()) + ")";
131 QListWidgetItem * item = new QListWidgetItem(label);
132 Qt::ItemFlags flag = Qt::ItemIsSelectable;
134 flag |= Qt::ItemIsUserCheckable;
136 flag |= Qt::ItemIsEnabled;
137 item->setFlags(flag);
139 item->setCheckState(Qt::Checked);
141 item->setCheckState(Qt::Unchecked);
142 // index of the currently used ParConstIterator
143 item->setData(Qt::UserRole, 0);
144 filesLW->addItem(item);
149 void GuiEmbeddedFilesDialog::on_selectPB_clicked()
151 EmbeddedFiles & files = controller_.embeddedFiles();
152 // this should not be needed after EmbeddedFiles are updated correctly.
154 QList<QListWidgetItem *> selection = filesLW->selectedItems();
155 for (QList<QListWidgetItem*>::iterator it = selection.begin();
156 it != selection.end(); ++it) {
157 (*it)->setCheckState(Qt::Checked);
158 controller_.setEmbed(files[filesLW->row(*it)], true, files.enabled());
160 controller_.dispatchMessage("Embedding files");
164 void GuiEmbeddedFilesDialog::on_unselectPB_clicked()
166 EmbeddedFiles & files = controller_.embeddedFiles();
167 // this should not be needed after EmbeddedFiles are updated correctly.
169 QList<QListWidgetItem *> selection = filesLW->selectedItems();
170 for (QList<QListWidgetItem*>::iterator it = selection.begin();
171 it != selection.end(); ++it) {
172 (*it)->setCheckState(Qt::Checked);
173 controller_.setEmbed(files[filesLW->row(*it)], false, files.enabled());
175 controller_.dispatchMessage("Stop embedding files");
179 void GuiEmbeddedFilesDialog::on_addPB_clicked()
181 if (controller_.browseAndAddFile())
186 void GuiEmbeddedFilesDialog::on_extractPB_clicked()
188 EmbeddedFiles const & files = controller_.embeddedFiles();
189 QList<QListWidgetItem *> selection = filesLW->selectedItems();
190 for (QList<QListWidgetItem*>::iterator it = selection.begin();
191 it != selection.end(); ++it)
192 controller_.extract(files[filesLW->row(*it)]);
193 // FIXME: collect extraction status and display a dialog
194 controller_.dispatchMessage("Extract embedded files");
198 void GuiEmbeddedFilesDialog::on_updatePB_clicked()
200 EmbeddedFiles const & files = controller_.embeddedFiles();
201 QList<QListWidgetItem *> selection = filesLW->selectedItems();
202 for (QList<QListWidgetItem*>::iterator it = selection.begin();
203 it != selection.end(); ++it)
204 controller_.update(files[filesLW->row(*it)]);
205 // FIXME: collect update status and display a dialog
206 controller_.dispatchMessage("Update embedded files from external file");
211 void GuiEmbeddedFilesDialog::on_enableCB_toggled(bool enable)
213 controller_.setEmbedding(enable);
217 } // namespace frontend
220 #include "GuiEmbeddedFiles_moc.cpp"