1 module allegro5.allegro_native_dialog;
2 
3 version(ALLEGRO_NO_PRAGMA_LIB) {}
4 else
5 {
6 	pragma(lib, "allegro_dialog");
7 }
8 
9 import allegro5.allegro;
10 import allegro5.internal.da5;
11 
12 extern (C)
13 {
14 	alias ALLEGRO_GTK_TOPLEVEL_INTERNAL ALLEGRO_GTK_TOPLEVEL;
15 
16 	struct ALLEGRO_FILECHOOSER {};
17 	struct ALLEGRO_TEXTLOG {};
18 	struct ALLEGRO_MENU {};
19 
20 	struct ALLEGRO_MENU_INFO
21 	{
22 	   const_char* caption;
23 	   ushort id;
24 	   int flags;
25 	   ALLEGRO_BITMAP* icon;
26 	}
27 
28 	template ALLEGRO_MENU_SEPARATOR()
29 	{
30 		const ALLEGRO_MENU_SEPARATOR = ALLEGRO_MENU_INFO(null, -1, 0, null);
31 	}
32 	
33 	template ALLEGRO_START_OF_MENU(const_char[] caption, int id)
34 	{
35 		const ALLEGRO_START_OF_MENU = ALLEGRO_MENU_INFO(mixin(`"` ~ caption ~ `->\0"`), id, 0, NULL);
36 	}
37 	
38 	template ALLEGRO_END_OF_MENU()
39 	{
40 		const ALLEGRO_END_OF_MENU = ALLEGRO_MENU_INFO(null, 0, 0, null);
41 	}
42 
43 	bool al_init_native_dialog_addon();
44 	void al_shutdown_native_dialog_addon();
45 	ALLEGRO_FILECHOOSER* al_create_native_file_dialog(in ALLEGRO_PATH* initial_path, in char* title, in char* patterns, int mode);
46 	void al_show_native_file_dialog(ALLEGRO_DISPLAY* display, ALLEGRO_FILECHOOSER* dialog);
47 	int al_get_native_file_dialog_count(in ALLEGRO_FILECHOOSER* dialog);
48 	ALLEGRO_PATH* al_get_native_file_dialog_path(in ALLEGRO_FILECHOOSER* dialog, size_t index);
49 	void al_destroy_native_file_dialog(ALLEGRO_FILECHOOSER* dialog);
50 	
51 	int al_show_native_message_box(ALLEGRO_DISPLAY* display, in char* title, in char* heading, in char* text, in char* buttons, int flags);
52 
53 	ALLEGRO_TEXTLOG* al_open_native_text_log(in char* title, int flags);
54 	void al_close_native_text_log(ALLEGRO_TEXTLOG* textlog);
55 	void al_append_native_text_log(ALLEGRO_TEXTLOG* textlog, in char* format, ...);
56 	ALLEGRO_EVENT_SOURCE* al_get_native_text_log_event_source(ALLEGRO_TEXTLOG* textlog);
57 	
58 	/* creating/modifying menus */
59 	ALLEGRO_MENU* al_create_menu();;
60 	ALLEGRO_MENU* al_create_popup_menu();;
61 	ALLEGRO_MENU* al_build_menu(ALLEGRO_MENU_INFO* info);
62 	int al_append_menu_item(ALLEGRO_MENU* parent, in char* title, ushort id, int flags, ALLEGRO_BITMAP* icon, ALLEGRO_MENU* submenu);
63 	int al_insert_menu_item(ALLEGRO_MENU* parent, int pos, in char* title, ushort id, int flags, ALLEGRO_BITMAP* icon, ALLEGRO_MENU* submenu);
64 	bool al_remove_menu_item(ALLEGRO_MENU* menu, int pos);
65 	ALLEGRO_MENU* al_clone_menu(ALLEGRO_MENU* menu);
66 	ALLEGRO_MENU* al_clone_menu_for_popup(ALLEGRO_MENU* menu);
67 	void al_destroy_menu(ALLEGRO_MENU* menu);
68 
69 	/* properties */
70 	const_char* al_get_menu_item_caption(ALLEGRO_MENU* menu, int pos);
71 	void al_set_menu_item_caption(ALLEGRO_MENU* menu, int pos, in char* caption);
72 	int al_get_menu_item_flags(ALLEGRO_MENU* menu, int pos);
73 	void al_set_menu_item_flags(ALLEGRO_MENU* menu, int pos, int flags);
74 	int al_toggle_menu_item_flags(ALLEGRO_MENU* menu, int pos, int flags);
75 	ALLEGRO_BITMAP* al_get_menu_item_icon(ALLEGRO_MENU* menu, int pos);
76 	void al_set_menu_item_icon(ALLEGRO_MENU* menu, int pos, ALLEGRO_BITMAP* icon);
77 	 
78 	/* querying menus */
79 	ALLEGRO_MENU* al_find_menu(ALLEGRO_MENU* haystack, ushort id);
80 	bool al_find_menu_item(ALLEGRO_MENU* haystack, ushort id, ALLEGRO_MENU** menu, int* index);
81 	 
82 	/* menu events */
83 	ALLEGRO_EVENT_SOURCE* al_get_default_menu_event_source();;
84 	ALLEGRO_EVENT_SOURCE* al_enable_menu_event_source(ALLEGRO_MENU* menu);
85 	void al_disable_menu_event_source(ALLEGRO_MENU* menu);
86 	 
87 	/* displaying menus */
88 	ALLEGRO_MENU* al_get_display_menu(ALLEGRO_DISPLAY* display);
89 	bool al_set_display_menu(ALLEGRO_DISPLAY* display, ALLEGRO_MENU* menu);
90 	bool al_popup_menu(ALLEGRO_MENU* popup, ALLEGRO_DISPLAY* display);
91 	ALLEGRO_MENU* al_remove_display_menu(ALLEGRO_DISPLAY* display);
92 
93 	uint al_get_allegro_native_dialog_version();
94 
95 	enum
96 	{
97 		ALLEGRO_FILECHOOSER_FILE_MUST_EXIST = 1,
98 		ALLEGRO_FILECHOOSER_SAVE            = 2,
99 		ALLEGRO_FILECHOOSER_FOLDER          = 4,
100 		ALLEGRO_FILECHOOSER_PICTURES        = 8,
101 		ALLEGRO_FILECHOOSER_SHOW_HIDDEN     = 16,
102 		ALLEGRO_FILECHOOSER_MULTIPLE        = 32
103 	}
104 
105 	enum
106 	{
107 		ALLEGRO_MESSAGEBOX_WARN      = 1<<0,
108 		ALLEGRO_MESSAGEBOX_ERROR     = 1<<1,
109 		ALLEGRO_MESSAGEBOX_OK_CANCEL = 1<<2,
110 		ALLEGRO_MESSAGEBOX_YES_NO    = 1<<3,
111 		ALLEGRO_MESSAGEBOX_QUESTION  = 1<<4
112 	}
113 	
114 	enum
115 	{
116 		ALLEGRO_TEXTLOG_NO_CLOSE            = 1<<0,
117 		ALLEGRO_TEXTLOG_MONOSPACE           = 1<<1
118 	}
119 
120 	enum
121 	{
122 		ALLEGRO_EVENT_NATIVE_DIALOG_CLOSE   = 600,
123 		ALLEGRO_EVENT_MENU_CLICK            = 601
124 	}
125 
126 	enum
127 	{
128 		ALLEGRO_MENU_ITEM_ENABLED            = 0,
129 		ALLEGRO_MENU_ITEM_CHECKBOX           = 1,
130 		ALLEGRO_MENU_ITEM_CHECKED            = 2,
131 		ALLEGRO_MENU_ITEM_DISABLED           = 4
132 	}
133 }