1// Aseprite
2// Copyright (C) 2020 Igara Studio S.A.
3// Copyright (C) 2001-2017 David Capello
4//
5// This program is distributed under the terms of
6// the End-User License Agreement for Aseprite.
7
8#ifdef HAVE_CONFIG_H
9#include "config.h"
10#endif
11
12#include "app/commands/command.h"
13#include "app/commands/params.h"
14#include "app/console.h"
15#include "app/i18n/strings.h"
16
17namespace app {
18
19Command::Command(const char* id, CommandFlags flags)
20 : m_id(id)
21 , m_flags(flags)
22{
23 generateFriendlyName();
24}
25
26Command::~Command()
27{
28}
29
30std::string Command::friendlyName() const
31{
32 return onGetFriendlyName();
33}
34
35bool Command::needsParams() const
36{
37 return onNeedsParams();
38}
39
40void Command::loadParams(const Params& params)
41{
42 onLoadParams(params);
43}
44
45bool Command::isEnabled(Context* context)
46{
47 try {
48 return onEnabled(context);
49 }
50 catch (...) {
51 // TODO add a status-bar item
52 return false;
53 }
54}
55
56bool Command::isChecked(Context* context)
57{
58 try {
59 return onChecked(context);
60 }
61 catch (...) {
62 // TODO add a status-bar item...
63 return false;
64 }
65}
66
67void Command::generateFriendlyName()
68{
69 std::string strId = "commands." + this->id();
70 if (auto s = Strings::instance())
71 m_friendlyName = s->translate(strId.c_str());
72 else
73 m_friendlyName = strId;
74}
75
76void Command::execute(Context* context)
77{
78 onExecute(context);
79}
80
81bool Command::onNeedsParams() const
82{
83 // By default a command can be called without params
84 return false;
85}
86
87// Converts specified parameters to class members.
88void Command::onLoadParams(const Params& params)
89{
90 // do nothing
91}
92
93// Preconditions to execute the command
94bool Command::onEnabled(Context* context)
95{
96 return true;
97}
98
99// Should the menu-item be checked?
100bool Command::onChecked(Context* context)
101{
102 return false;
103}
104
105// Execute the command (after checking the preconditions).
106void Command::onExecute(Context* context)
107{
108 // Do nothing
109}
110
111std::string Command::onGetFriendlyName() const
112{
113 return m_friendlyName;
114}
115
116} // namespace app
117