diff --git a/rogueviz/rogueviz.cpp b/rogueviz/rogueviz.cpp index db0dfa0d..25fb2fae 100644 --- a/rogueviz/rogueviz.cpp +++ b/rogueviz/rogueviz.cpp @@ -1235,11 +1235,9 @@ auto hooks = addHook(hooks_o_key, 100, o_key) + #if CAP_RVSLIDES - addHook(tour::ss::hooks_extra_slideshows, 100, [] (bool view) { - if(!view) return 1; - dialog::addBoolItem(XLAT("RogueViz Tour"), tour::ss::wts == &rvtour::rvslides[0], 'r'); - dialog::add_action([] { tour::ss::wts = rvtour::gen_rvtour(); popScreen(); }); - return 0; + addHook(tour::ss::hooks_extra_slideshows, 100, [] (slideshow_callback cb) { + if(rvslides.empty()) rvtour::gen_rvtour(); + cb(XLAT("RogueViz Tour"), &rvtour::rvslides[0], 'r'); }) + #endif diff --git a/tour.cpp b/tour.cpp index d1421bd2..2f40010f 100644 --- a/tour.cpp +++ b/tour.cpp @@ -384,14 +384,24 @@ EX namespace ss { EX string current_folder; string slidechars = "abcdefghijklmnopqrsvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ23456789!@#$%^&*("; + + #if HDR + using slideshow_callback = function; + #endif + + EX hookset hooks_extra_slideshows; + + EX void for_all_slideshows(const slideshow_callback& cb) { + cb(XLAT("Guided Tour"), default_slides, 't'); + callhooks(hooks_extra_slideshows, cb); + } - EX hookset hooks_extra_slideshows; - EX void slideshow_menu() { dialog::init(XLAT("slideshows"), forecolor, 150, 100); - dialog::addBoolItem(XLAT("Guided Tour"), wts == default_slides, 't'); - dialog::add_action([] { wts = default_slides; popScreen(); }); - callhooks(hooks_extra_slideshows, true); + for_all_slideshows([] (string title, slide *sl, char ch) { + dialog::addBoolItem(title, wts == sl, ch); + dialog::add_action([sl] { wts = sl; popScreen(); }); + }); dialog::addBack(); dialog::display(); } @@ -445,8 +455,11 @@ EX namespace ss { }); } dialog::addBreak(50); - bool b = false; - if(callhandlers(0, hooks_extra_slideshows, b)) { + int cnt = 0; + + for_all_slideshows([&] (string title, slide *sl, char ch) { cnt++; }); + + if(cnt > 1) { dialog::addItem(XLAT("change slideshow"), '1'); dialog::add_action_push(slideshow_menu); }