1 /* 2 3 Boost Software License - Version 1.0 - August 17th, 2003 4 5 Permission is hereby granted, free of charge, to any person or organization 6 obtaining a copy of the software and accompanying documentation covered by 7 this license (the "Software") to use, reproduce, display, distribute, 8 execute, and transmit the Software, and to prepare derivative works of the 9 Software, and to permit third-parties to whom the Software is furnished to 10 do so, all subject to the following: 11 12 The copyright notices in the Software and this entire statement, including 13 the above license grant, this restriction and the following disclaimer, 14 must be included in all copies of the Software, in whole or in part, and 15 all derivative works of the Software, unless such copies or derivative 16 works are solely in the form of machine-executable object code generated by 17 a source language processor. 18 19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 DEALINGS IN THE SOFTWARE. 26 27 */ 28 module derelict.allegro5.dialog; 29 30 private { 31 import derelict.util.loader, 32 derelict.util.system; 33 34 import derelict.allegro5.internal, 35 derelict.allegro5.types; 36 37 enum libNames = genLibNames("Dialog"); 38 } 39 40 struct ALLEGRO_FILECHOOSER; 41 struct ALLEGRO_TEXTLOG; 42 struct ALLEGRO_MENU; 43 44 struct ALLEGRO_MENU_INFO { 45 const(char)* caption; 46 ushort id; 47 int flags; 48 ALLEGRO_BITMAP* icon; 49 } 50 51 enum { 52 ALLEGRO_FILECHOOSER_FILE_MUST_EXIST = 1, 53 ALLEGRO_FILECHOOSER_SAVE = 2, 54 ALLEGRO_FILECHOOSER_FOLDER = 4, 55 ALLEGRO_FILECHOOSER_PICTURES = 8, 56 ALLEGRO_FILECHOOSER_SHOW_HIDDEN = 16, 57 ALLEGRO_FILECHOOSER_MULTIPLE = 32 58 } 59 60 enum { 61 ALLEGRO_MESSAGEBOX_WARN = 1<<0, 62 ALLEGRO_MESSAGEBOX_ERROR = 1<<1, 63 ALLEGRO_MESSAGEBOX_OK_CANCEL = 1<<2, 64 ALLEGRO_MESSAGEBOX_YES_NO = 1<<3, 65 ALLEGRO_MESSAGEBOX_QUESTION = 1<<4 66 } 67 68 enum { 69 ALLEGRO_TEXTLOG_NO_CLOSE = 1<<0, 70 ALLEGRO_TEXTLOG_MONOSPACE = 1<<1 71 } 72 73 enum { 74 ALLEGRO_EVENT_NATIVE_DIALOG_CLOSE = 600 75 } 76 77 enum { 78 ALLEGRO_MENU_ITEM_ENABLED = 0, 79 ALLEGRO_MENU_ITEM_CHECKBOX = 1, 80 ALLEGRO_MENU_ITEM_CHECKED = 2, 81 ALLEGRO_MENU_ITEM_DISABLED = 4 82 }; 83 84 extern(C) @nogc nothrow { 85 alias da_al_init_native_dialog_addon = bool function(); 86 alias da_al_shutdown_native_dialog_addon = void function(); 87 88 alias da_al_create_native_file_dialog = ALLEGRO_FILECHOOSER* function(const(char)*,const(char)*,const(char)*,int); 89 alias da_al_show_native_file_dialog = bool function(ALLEGRO_DISPLAY*,ALLEGRO_FILECHOOSER*); 90 alias da_al_get_native_file_dialog_count = int function(const(ALLEGRO_FILECHOOSER)*); 91 alias da_al_get_native_file_dialog_path = const(char)* function(const(ALLEGRO_FILECHOOSER)*,size_t); 92 alias da_al_destroy_native_file_dialog = void function(ALLEGRO_FILECHOOSER*); 93 94 alias da_al_show_native_message_box = int function(ALLEGRO_DISPLAY*,const(char)*,const(char)*,const(char)*,const(char)*,int); 95 96 alias da_al_open_native_text_log = ALLEGRO_TEXTLOG* function(const(char)*,int); 97 alias da_al_close_native_text_log = void function(ALLEGRO_TEXTLOG*); 98 alias da_al_append_native_text_log = void function(ALLEGRO_TEXTLOG*,const(char)*,...); 99 alias da_al_get_native_text_log_event_source = ALLEGRO_EVENT_SOURCE* function(ALLEGRO_TEXTLOG*); 100 101 alias da_al_create_menu = ALLEGRO_MENU* function(); 102 alias da_al_create_popup_menu = ALLEGRO_MENU* function(); 103 alias da_al_build_menu = ALLEGRO_MENU* function(ALLEGRO_MENU_INFO*); 104 alias da_al_append_menu_item = int function(ALLEGRO_MENU*,const(char)*,short,int,ALLEGRO_BITMAP*,ALLEGRO_MENU*); 105 alias da_al_insert_menu_item = int function(ALLEGRO_MENU*,int,const(char)*,short,int,ALLEGRO_BITMAP*,ALLEGRO_MENU*); 106 alias da_al_remove_menu_item = bool function(ALLEGRO_MENU*,int); 107 alias da_al_clone_menu = ALLEGRO_MENU* function(ALLEGRO_MENU*); 108 alias da_al_clone_menu_for_popup = ALLEGRO_MENU* function(ALLEGRO_MENU*); 109 alias da_al_destroy_menu = void function(ALLEGRO_MENU*); 110 111 alias da_al_get_menu_item_caption = const(char)* function(ALLEGRO_MENU*,int); 112 alias da_al_set_menu_item_caption = void function(ALLEGRO_MENU*,int,const(char)*); 113 alias da_al_get_menu_item_flags = int function(ALLEGRO_MENU*,int); 114 alias da_al_set_menu_item_flags = void function(ALLEGRO_MENU*,int,int); 115 alias da_al_get_menu_item_icon = ALLEGRO_BITMAP* function(ALLEGRO_MENU*,int); 116 alias da_al_set_menu_item_icon = void function(ALLEGRO_MENU*,int,ALLEGRO_BITMAP*); 117 118 alias da_al_find_menu = ALLEGRO_MENU* function(ALLEGRO_MENU*,short); 119 alias da_al_find_menu_item = bool function(ALLEGRO_MENU*,short,ALLEGRO_MENU**,int*); 120 121 alias da_al_get_default_menu_event_source = ALLEGRO_EVENT_SOURCE* function(); 122 alias da_al_enable_menu_event_source = ALLEGRO_EVENT_SOURCE* function(ALLEGRO_MENU*); 123 alias da_al_disable_menu_event_source = void function(ALLEGRO_MENU*); 124 125 alias da_al_get_display_menu = ALLEGRO_MENU* function(ALLEGRO_DISPLAY*); 126 alias da_al_set_display_menu = bool function(ALLEGRO_DISPLAY*,ALLEGRO_MENU*); 127 alias da_al_popup_menu = bool function(ALLEGRO_MENU*,ALLEGRO_DISPLAY*); 128 alias da_al_remove_display_menu = ALLEGRO_MENU* function(ALLEGRO_DISPLAY*); 129 130 alias da_al_get_allegro_native_dialog_version = uint function(); 131 } 132 133 __gshared { 134 da_al_init_native_dialog_addon al_init_native_dialog_addon; 135 da_al_shutdown_native_dialog_addon al_shutdown_native_dialog_addon; 136 da_al_create_native_file_dialog al_create_native_file_dialog; 137 da_al_show_native_file_dialog al_show_native_file_dialog; 138 da_al_get_native_file_dialog_count al_get_native_file_dialog_count; 139 da_al_get_native_file_dialog_path al_get_native_file_dialog_path; 140 da_al_destroy_native_file_dialog al_destroy_native_file_dialog; 141 da_al_show_native_message_box al_show_native_message_box; 142 da_al_open_native_text_log al_open_native_text_log; 143 da_al_close_native_text_log al_close_native_text_log; 144 da_al_append_native_text_log al_append_native_text_log; 145 da_al_get_native_text_log_event_source al_get_native_text_log_event_source; 146 da_al_create_menu al_create_menu; 147 da_al_create_popup_menu al_create_popup_menu; 148 da_al_build_menu al_build_menu; 149 da_al_append_menu_item al_append_menu_item; 150 da_al_insert_menu_item al_insert_menu_item; 151 da_al_remove_menu_item al_remove_menu_item; 152 da_al_clone_menu al_clone_menu; 153 da_al_clone_menu_for_popup al_clone_menu_for_popup; 154 da_al_destroy_menu al_destroy_menu; 155 da_al_get_menu_item_caption al_get_menu_item_caption; 156 da_al_set_menu_item_caption al_set_menu_item_caption; 157 da_al_get_menu_item_flags al_get_menu_item_flags; 158 da_al_set_menu_item_flags al_set_menu_item_flags; 159 da_al_get_menu_item_icon al_get_menu_item_icon; 160 da_al_set_menu_item_icon al_set_menu_item_icon; 161 da_al_find_menu al_find_menu; 162 da_al_find_menu_item al_find_menu_item; 163 da_al_get_default_menu_event_source al_get_default_menu_event_source; 164 da_al_enable_menu_event_source al_enable_menu_event_source; 165 da_al_disable_menu_event_source al_disable_menu_event_source; 166 da_al_get_display_menu al_get_display_menu; 167 da_al_set_display_menu al_set_display_menu; 168 da_al_popup_menu al_popup_menu; 169 da_al_remove_display_menu al_remove_display_menu; 170 da_al_get_allegro_native_dialog_version al_get_allegro_native_dialog_version; 171 } 172 173 class DerelictAllegro5DialogLoader : SharedLibLoader { 174 public this() { 175 super(libNames); 176 } 177 178 protected override void loadSymbols() { 179 bindFunc(cast(void**)&al_init_native_dialog_addon, "al_init_native_dialog_addon"); 180 bindFunc(cast(void**)&al_shutdown_native_dialog_addon, "al_shutdown_native_dialog_addon"); 181 bindFunc(cast(void**)&al_create_native_file_dialog, "al_create_native_file_dialog"); 182 bindFunc(cast(void**)&al_show_native_file_dialog, "al_show_native_file_dialog"); 183 bindFunc(cast(void**)&al_get_native_file_dialog_count, "al_get_native_file_dialog_count"); 184 bindFunc(cast(void**)&al_get_native_file_dialog_path, "al_get_native_file_dialog_path"); 185 bindFunc(cast(void**)&al_destroy_native_file_dialog, "al_destroy_native_file_dialog"); 186 bindFunc(cast(void**)&al_show_native_message_box, "al_show_native_message_box"); 187 bindFunc(cast(void**)&al_open_native_text_log, "al_open_native_text_log"); 188 bindFunc(cast(void**)&al_close_native_text_log, "al_close_native_text_log"); 189 bindFunc(cast(void**)&al_append_native_text_log, "al_append_native_text_log"); 190 bindFunc(cast(void**)&al_get_native_text_log_event_source, "al_get_native_text_log_event_source"); 191 bindFunc(cast(void**)&al_create_menu, "al_create_menu"); 192 bindFunc(cast(void**)&al_create_popup_menu, "al_create_popup_menu"); 193 bindFunc(cast(void**)&al_build_menu, "al_build_menu"); 194 bindFunc(cast(void**)&al_append_menu_item, "al_append_menu_item"); 195 bindFunc(cast(void**)&al_insert_menu_item, "al_insert_menu_item"); 196 bindFunc(cast(void**)&al_remove_menu_item, "al_remove_menu_item"); 197 bindFunc(cast(void**)&al_clone_menu, "al_clone_menu"); 198 bindFunc(cast(void**)&al_clone_menu_for_popup, "al_clone_menu_for_popup"); 199 bindFunc(cast(void**)&al_destroy_menu, "al_destroy_menu"); 200 201 bindFunc(cast(void**)&al_get_menu_item_caption, "al_get_menu_item_caption"); 202 bindFunc(cast(void**)&al_set_menu_item_caption, "al_set_menu_item_caption"); 203 bindFunc(cast(void**)&al_get_menu_item_flags, "al_get_menu_item_flags"); 204 bindFunc(cast(void**)&al_set_menu_item_flags, "al_set_menu_item_flags"); 205 bindFunc(cast(void**)&al_get_menu_item_icon, "al_get_menu_item_icon"); 206 bindFunc(cast(void**)&al_set_menu_item_icon, "al_set_menu_item_icon"); 207 208 bindFunc(cast(void**)&al_find_menu, "al_find_menu"); 209 bindFunc(cast(void**)&al_find_menu_item, "al_find_menu_item"); 210 bindFunc(cast(void**)&al_get_default_menu_event_source, "al_get_default_menu_event_source"); 211 bindFunc(cast(void**)&al_enable_menu_event_source, "al_enable_menu_event_source"); 212 bindFunc(cast(void**)&al_disable_menu_event_source, "al_disable_menu_event_source"); 213 bindFunc(cast(void**)&al_get_display_menu, "al_get_display_menu"); 214 bindFunc(cast(void**)&al_set_display_menu, "al_set_display_menu"); 215 bindFunc(cast(void**)&al_popup_menu, "al_popup_menu"); 216 bindFunc(cast(void**)&al_remove_display_menu, "al_remove_display_menu"); 217 218 bindFunc(cast(void**)&al_get_allegro_native_dialog_version, "al_get_allegro_native_dialog_version"); 219 } 220 } 221 222 __gshared DerelictAllegro5DialogLoader DerelictAllegro5Dialog; 223 224 shared static this() { 225 DerelictAllegro5Dialog = new DerelictAllegro5DialogLoader; 226 }