+ mainWin->resetFocus();
+}
+
+
+void restoreDialog::reject()
+{
+ this->hide();
+ m_console->write("quit");
+ mainWin->set_status("Canceled");
+ delete this;
+ m_console->setEnabled(true);
+ mainWin->resetFocus();
+}
+
+void restoreDialog::fileDoubleClicked(QTreeWidgetItem *item, int column)
+{
+ char cmd[1000];
+ if (column == 0) { /* mark/unmark */
+ if (item->text(0) == "*") {
+ bsnprintf(cmd, sizeof(cmd), "unmark \"%s\"", item->text(1).toUtf8().data());
+ item->setText(0, " ");
+ } else {
+ bsnprintf(cmd, sizeof(cmd), "mark \"%s\"", item->text(1).toUtf8().data());
+ item->setText(0, "*");
+ }
+ m_console->write_dir(cmd);
+ if (m_console->read() > 0) {
+ strip_trailing_junk(m_console->msg());
+ statusLine->setText(m_console->msg());
+ }
+ m_console->displayToPrompt();
+ return;
+ }
+ /*
+ * Double clicking other than column 0 means to decend into
+ * the directory -- or nothing if it is not a directory.
+ */
+ if (item->text(1).endsWith("/")) {
+ cwd(item->text(1).toUtf8().data());
+ fillDirectory();
+ }
+}
+
+void restoreDialog::upButtonPushed()
+{
+ cwd("..");
+ fillDirectory();
+}
+
+void restoreDialog::markButtonPushed()
+{
+ QList<QTreeWidgetItem *> items = fileWidget->selectedItems();
+ QTreeWidgetItem *item;
+ char cmd[1000];
+ foreach (item, items) {
+ bsnprintf(cmd, sizeof(cmd), "mark \"%s\"", item->text(1).toUtf8().data());
+ item->setText(0, "*");
+ m_console->write_dir(cmd);
+ if (m_console->read() > 0) {
+ strip_trailing_junk(m_console->msg());
+ statusLine->setText(m_console->msg());
+ }
+ Dmsg1(100, "cmd=%s\n", cmd);
+ m_console->discardToPrompt();
+ }
+}
+
+void restoreDialog::unmarkButtonPushed()
+{
+ QList<QTreeWidgetItem *> items = fileWidget->selectedItems();
+ QTreeWidgetItem *item;
+ char cmd[1000];
+ foreach (item, items) {
+ bsnprintf(cmd, sizeof(cmd), "unmark \"%s\"", item->text(1).toUtf8().data());
+ item->setText(0, " ");
+ m_console->write_dir(cmd);
+ if (m_console->read() > 0) {
+ strip_trailing_junk(m_console->msg());
+ statusLine->setText(m_console->msg());
+ }
+ Dmsg1(100, "cmd=%s\n", cmd);
+ m_console->discardToPrompt();
+ }
+}
+
+/*
+ * Change current working directory
+ */
+bool restoreDialog::cwd(const char *dir)
+{
+ int stat;
+ char cd_cmd[MAXSTRING];
+
+ bsnprintf(cd_cmd, sizeof(cd_cmd), "cd \"%s\"", dir);
+ Dmsg2(100, "dir=%s cmd=%s\n", dir, cd_cmd);
+ m_console->write_dir(cd_cmd);
+ if ((stat = m_console->read()) > 0) {
+ m_cwd = m_console->msg();
+ Dmsg2(100, "cwd=%s msg=%s\n", m_cwd.toUtf8().data(), m_console->msg());
+ } else {
+ Dmsg1(000, "stat=%d\n", stat);
+ }
+ m_console->discardToPrompt();
+ lineEdit->clear();
+ lineEdit->insert(m_cwd);
+ return true; /* ***FIXME*** return real status */
+}
+
+/*
+ * Return cwd when in tree restore mode
+ */
+char *restoreDialog::get_cwd()
+{
+ int stat;
+ m_console->write_dir(".pwd");
+ Dmsg0(100, "send: .pwd\n");
+ if ((stat = m_console->read()) > 0) {
+ m_cwd = m_console->msg();
+ Dmsg2(100, "cwd=%s msg=%s\n", m_cwd.toUtf8().data(), m_console->msg());
+ } else {
+ Dmsg1(000, "stat=%d\n", stat);
+ }
+ m_console->displayToPrompt();
+ return m_cwd.toUtf8().data();