#ifndef JUCI_SELECTIONDIALOG_H_ #define JUCI_SELECTIONDIALOG_H_ #include "gtkmm.h" #include "logging.h" #include "tooltips.h" class SelectionDialogBase { public: SelectionDialogBase(Gtk::TextView& text_view, bool popup); virtual void init(); //TODO: use constructor instead of init virtual void append(const std::string& row); virtual void show(); virtual void hide(); virtual void move(); std::map > rows; //TODO: remove, instead add on_select std::function on_hide; bool shown=false; Glib::RefPtr start_mark; protected: virtual void resize(); virtual void cursor_changed(); Gtk::TextView& text_view; std::unique_ptr window; std::unique_ptr scrolled_window; std::unique_ptr list_view_text; std::unique_ptr search_entry; std::unique_ptr tooltips; int last_selected; private: bool popup; }; class SelectionDialog : public SelectionDialogBase { public: SelectionDialog(Gtk::TextView& text_view); void init() {SelectionDialogBase::init();} void show(); std::function on_select; }; class CompletionDialog : public SelectionDialogBase { public: CompletionDialog(Gtk::TextView& text_view); void init() {SelectionDialogBase::init();} 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; }; #endif // JUCI_SELECTIONDIALOG_H_