/
MapExportProgressHandler.h
60 lines (49 loc) · 1.15 KB
/
MapExportProgressHandler.h
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
59
60
#pragma once
#include "iradiant.h"
#include <sigc++/functors/mem_fun.h>
#include "messages/MapExportOperation.h"
#include "wxutil/ModalProgressDialog.h"
namespace ui
{
class MapExportProgressHandler
{
private:
std::size_t _msgSubscription;
wxutil::ModalProgressDialogPtr _dialog;
public:
MapExportProgressHandler()
{
_msgSubscription = GlobalRadiantCore().getMessageBus().addListener(
radiant::TypeListener<map::ExportOperation>(
sigc::mem_fun(this, &MapExportProgressHandler::handleMapExportMessage)));
}
~MapExportProgressHandler()
{
GlobalRadiantCore().getMessageBus().removeListener(_msgSubscription);
}
private:
void handleMapExportMessage(map::ExportOperation& msg)
{
switch (msg.getType())
{
case map::ExportOperation::Started:
_dialog.reset(new wxutil::ModalProgressDialog(_("Writing map")));
break;
case map::ExportOperation::Progress:
if (msg.getNumTotalNodes() > 0)
{
_dialog->setTextAndFraction(msg.getText(), msg.getProgressFraction());
}
else
{
_dialog->setText(msg.getText());
_dialog->Pulse();
}
break;
case map::ExportOperation::Finished:
_dialog.reset();
break;
};
}
};
}