#ifndef JUCI_SELECTIONDIALOG_H_ #define JUCI_SELECTIONDIALOG_H_ #include "gtkmm.h" #include "logging.h" #include "tooltips.h" #include class SelectionDialogBase { public: SelectionDialogBase(Gtk::TextView& text_view, Glib::RefPtr start_mark, bool show_search_entry); ~SelectionDialogBase(); virtual void add_row(const std::string& row, const std::string& tooltip=""); virtual void show(); virtual void hide(); virtual void move(); std::function on_hide; std::function on_select; Glib::RefPtr start_mark; protected: virtual void resize(); virtual void cursor_changed(); Gtk::TextView& text_view; std::unique_ptr window; Gtk::ScrolledWindow scrolled_window; Gtk::ListViewText list_view_text; Gtk::Entry search_entry; bool show_search_entry; std::unique_ptr tooltips; std::unordered_map tooltip_texts; std::string last_row; }; class SelectionDialog : public SelectionDialogBase { public: SelectionDialog(Gtk::TextView& text_view, Glib::RefPtr start_mark); void show(); }; class CompletionDialog : public SelectionDialogBase { public: CompletionDialog(Gtk::TextView& text_view, Glib::RefPtr start_mark); void show(); bool on_key_release(GdkEventKey* key); bool on_key_press(GdkEventKey* key); private: void select(bool hide_window=true); int show_offset; bool row_in_entry=false; }; #endif // JUCI_SELECTIONDIALOG_H_