]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/GuiEmbeddedFiles.cpp
Embedding: bring embedding dialog back to shape
[lyx.git] / src / frontends / qt4 / GuiEmbeddedFiles.cpp
1 /**
2  * \file GuiEmbeddedFiles.cpp
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Bo Peng
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "GuiEmbeddedFiles.h"
14 #include "debug.h"
15
16
17 namespace lyx {
18 namespace frontend {
19
20
21 GuiEmbeddedFilesDialog::GuiEmbeddedFilesDialog(LyXView & lv)
22         : GuiDialog(lv, "embedding")
23 {
24         setupUi(this);
25         setController(new ControlEmbeddedFiles(*this));
26         setViewTitle(_("Embedded Files"));
27
28         //setView(new DockView<GuiEmbeddedFiles, GuiEmbeddedFilesDialog>(
29         //              *dialog, qef, &gui_view, _("Embedded Files"), Qt::RightDockWidgetArea));
30         
31         bc().setPolicy(ButtonPolicy::OkCancelPolicy);
32
33         updateView();
34 }
35
36
37 ControlEmbeddedFiles & GuiEmbeddedFilesDialog::controller() const
38 {
39         return static_cast<ControlEmbeddedFiles &>(Dialog::controller());
40 }
41
42
43 void GuiEmbeddedFilesDialog::on_filesLW_itemChanged(QListWidgetItem* item)
44 {
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()));
49         } else {
50                 controller().setEmbed(files[filesLW->row(item)], false);
51                 controller().dispatchMessage("Stop embedding file " + fromqstr(item->text()));
52         }
53 }
54
55
56 void GuiEmbeddedFilesDialog::on_filesLW_itemSelectionChanged()
57 {
58         EmbeddedFiles & files = controller().embeddedFiles();
59
60         QList<QListWidgetItem *> selection = filesLW->selectedItems();
61
62         if (selection.empty()) {
63                 fullpathLE->setEnabled(false);
64                 selectPB->setEnabled(false);
65                 unselectPB->setEnabled(false);
66                 extractPB->setEnabled(false);
67                 updatePB->setEnabled(false);
68                 return;
69         }
70         
71         fullpathLE->setEnabled(selection.size() == 1);
72
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
77         if (it != it_end) {
78                 int idx = filesLW->row(*it);
79                 fullpathLE->setText(toqstr(files[idx].absFilename()));
80                 controller().goTo(files[idx]);
81         }
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)
87                         hasSelected = true;
88                 else
89                         hasUnselected = true;
90         }
91         selectPB->setEnabled(hasUnselected);
92         unselectPB->setEnabled(hasSelected);
93 }
94
95
96 void GuiEmbeddedFilesDialog::on_filesLW_itemDoubleClicked()
97 {
98         EmbeddedFiles & files = controller().embeddedFiles();
99         QList<QListWidgetItem *> selection = filesLW->selectedItems();
100         controller().view(files[filesLW->row(*selection.begin())]);
101 }
102
103
104 void GuiEmbeddedFilesDialog::updateView()
105 {
106         filesLW->clear();
107         //
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;
114                 if (it->valid())
115                         flag |= Qt::ItemIsEnabled;
116                 item->setFlags(flag);
117                 if(it->embedded())
118                         item->setCheckState(Qt::Checked);
119                 else
120                         item->setCheckState(Qt::Unchecked);
121                 filesLW->addItem(item);
122         }
123 }
124
125
126 void GuiEmbeddedFilesDialog::on_selectPB_clicked()
127 {
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);
134         }
135         controller().dispatchMessage("Embedding files");
136 }
137
138
139 void GuiEmbeddedFilesDialog::on_unselectPB_clicked()
140 {
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);
147         }
148         controller().dispatchMessage("Stop embedding files");
149 }
150
151
152 void GuiEmbeddedFilesDialog::on_addPB_clicked()
153 {
154         docstring const file = controller().browseFile();
155         if (!file.empty()) {
156                 EmbeddedFiles & files = controller().embeddedFiles();
157                 files.registerFile(to_utf8(file), true);
158         }
159         controller().dispatchMessage("Add an embedded file");
160 }
161
162
163 void GuiEmbeddedFilesDialog::on_extractPB_clicked()
164 {
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");
172 }
173
174
175 void GuiEmbeddedFilesDialog::on_updatePB_clicked()
176 {
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");
184 }
185
186
187
188 void GuiEmbeddedFilesDialog::on_enableCB_toggled(bool enable)
189 {
190         //
191         controller().embeddedFiles().enable(enable);
192         // immediately post the change to buffer (and bufferView)
193         if (enable)
194                 controller().dispatchMessage("Enable file embedding");
195         else
196                 controller().dispatchMessage("Disable file embedding");
197 }
198
199
200 } // namespace frontend
201 } // namespace lyx
202
203 #include "GuiEmbeddedFiles_moc.cpp"