File: game-importer.cpp

package info (click to toggle)
ares 126-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 32,600 kB
  • sloc: cpp: 356,508; ansic: 20,394; makefile: 16; sh: 2
file content (58 lines) | stat: -rw-r--r-- 1,737 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
GameImporter::GameImporter(View* parent) : Panel(parent, Size{~0, ~0}) {
  setCollapsible().setVisible(false);
  importList.onChange([&] { eventChange(); });
  abortButton.setCollapsible().setText("Abort").onActivate([&] { processing = false; });
  closeButton.setCollapsible().setText("Close").onActivate([&] { eventClose(); });
}

auto GameImporter::import(string system, const vector<string>& files) -> void {
  importList.reset();
  abortButton.setVisible(true);
  closeButton.setVisible(false);
  resize();
  systemSelection.setEnabled(false);
  programWindow.show(*this);

  processing = true;
  u32 index = 1;
  for(auto& file : files) {
    if(!processing) break;
    messageLabel.setText({"[", index++, "/", files.size(), "] Importing ", Location::file(file), " ..."});
    Application::processEvents();

    ListViewItem item{&importList};
    auto pak = mia::Medium::create(system);
    if(mia::import(pak, file)) {
      item.setIcon(Icon::Action::Add);
    } else {
      item.setIcon(Icon::Action::Close);
      item.setForegroundColor({192, 0, 0});
    }
    item.setText(Location::file(file));
    importList.resizeColumn();
  }
  processing = false;
  messageLabel.setText("Completed.");
  abortButton.setVisible(false);
  closeButton.setVisible(true);
  resize();
  systemSelection.setEnabled(true);
}

auto GameImporter::eventChange() -> void {
  if(processing) return;
  if(auto item = importList.selected()) {
    if(auto error = item.attribute("error")) {
      messageLabel.setText({"Error: ", error, "."});
    } else {
      messageLabel.setText("OK.");
    }
  } else {
    messageLabel.setText("Completed.");
  }
}

auto GameImporter::eventClose() -> void {
  if(processing) return;
  gameManager.refresh();
}