#ifndef NEWSBOAT_FORMACTION_H_ #define NEWSBOAT_FORMACTION_H_ #include #include #include #include #include #include namespace newsboat { class view; struct keymap_hint_entry { operation op; char * text; }; typedef std::pair qna_pair; class formaction { public: formaction(view *, std::string formstr); virtual ~formaction(); virtual void prepare() = 0; virtual void init() = 0; std::shared_ptr get_form(); virtual void set_redraw(bool b) { do_redraw = b; } virtual keymap_hint_entry * get_keymap_hint() = 0; virtual std::string id() const = 0; virtual std::string get_value(const std::string& value); virtual void handle_cmdline(const std::string& cmd); void process_op(operation op, bool automatic = false, std::vector * args = nullptr); virtual void finished_qna(operation op); void start_cmdline(std::string default_value = ""); virtual void recalculate_form(); std::string get_qna_response(unsigned int i) { return (qna_responses.size() >= (i + 1)) ? qna_responses[i] : ""; } void start_qna(const std::vector& prompts, operation finish_op, history * h = nullptr); void set_parent_formaction(std::shared_ptr fa) { parent_formaction = fa; } std::shared_ptr get_parent_formaction() const { return parent_formaction; } virtual std::string title() = 0; virtual std::vector get_suggestions(const std::string& fragment); static void load_histories(const std::string& searchfile, const std::string& cmdlinefile); static void save_histories(const std::string& searchfile, const std::string& cmdlinefile, unsigned int limit); protected: virtual void process_operation(operation op, bool automatic = false, std::vector * args = nullptr) = 0; virtual void set_keymap_hints(); void start_bookmark_qna(const std::string& default_title, const std::string& default_url, const std::string& default_desc, const std::string& default_feed_title); void open_unread_items_in_browser(std::shared_ptr feed , bool markread); view * v; std::shared_ptr f; bool do_redraw; std::vector qna_responses; static history searchhistory; static history cmdlinehistory; std::vector valid_cmds; private: std::string prepare_keymap_hint(keymap_hint_entry * hints); void start_next_question(); std::vector qna_prompts; operation finish_operation; history * qna_history; std::shared_ptr parent_formaction; }; } #endif /* NEWSBOAT_FORMACTION_H_ */