1 #include "cmdhelp/jukebox.hpp"
2 #include "core/jukebox.hpp"
3 #include "core/settings.hpp"
4 #include "library/settingvar.hpp"
11 settingvar::supervariable
<settingvar::model_bool
<settingvar::yes_no
>> SET_jukebox_dflt_binary(lsnes_setgrp
,
12 "jukebox-default-binary", "Movie‣Saving‣Saveslots binary", true);
13 settingvar::supervariable
<settingvar::model_int
<0,999999999>> SET_jukebox_size(lsnes_setgrp
, "jukebox-size",
14 "Movie‣Number of save slots", 12);
17 struct save_jukebox_listener
: public settingvar::listener
19 save_jukebox_listener(settingvar::group
& _grp
, save_jukebox
& _jukebox
)
20 : grp(_grp
), jukebox(_jukebox
)
22 grp
.add_listener(*this);
24 ~save_jukebox_listener() throw() { grp
.remove_listener(*this); };
25 void on_setting_change(settingvar::group
& _grp
, const settingvar::base
& val
)
27 if(val
.get_iname() == "jukebox-size")
28 jukebox
.set_size((size_t)SET_jukebox_size(_grp
));
31 settingvar::group
& grp
;
32 save_jukebox
& jukebox
;
35 save_jukebox::save_jukebox(settingvar::group
& _settings
, command::group
& _cmd
)
36 : settings(_settings
), cmd(_cmd
),
37 slotsel(cmd
, CJUKEBOX::sel
, [this](const std::string
& a
) { this->do_slotsel(a
); }),
38 cycleprev(cmd
, CJUKEBOX::prev
, [this]() { this->cycle_prev(); }),
39 cyclenext(cmd
, CJUKEBOX::next
, [this]() { this->cycle_next(); })
41 listener
= new save_jukebox_listener(_settings
, *this);
45 save_jukebox::~save_jukebox()
50 size_t save_jukebox::get_slot()
53 throw std::runtime_error("No save slots available");
57 void save_jukebox::set_slot(size_t slot
)
59 if(slot
>= current_size
)
60 throw std::runtime_error("Selected slot out of range");
65 void save_jukebox::cycle_next()
68 throw std::runtime_error("No save slots available");
70 if(current_slot
>= current_size
)
75 void save_jukebox::cycle_prev()
78 throw std::runtime_error("No save slots available");
82 current_slot
= current_size
- 1;
86 bool save_jukebox::save_binary()
88 return SET_jukebox_dflt_binary(settings
);
91 std::string
save_jukebox::get_slot_name()
93 return (stringfmt() << "$SLOT:" << (get_slot() + 1)).str();
96 void save_jukebox::set_size(size_t size
)
99 if(current_slot
>= current_size
)
104 void save_jukebox::set_update(std::function
<void()> _update
)
109 void save_jukebox::unset_update()
111 update
= std::function
<void()>();
114 void save_jukebox::do_slotsel(const std::string
& args
)
116 if(!regex_match("[1-9][0-9]{0,8}", args
))
117 throw std::runtime_error("Bad slot number");
118 uint32_t slot
= parse_value
<uint32_t>(args
);