| 140 } |
141 } |
| 141 |
142 |
| 142 UiObject* ui_simple_window(const char *title, void *window_data) { |
143 UiObject* ui_simple_window(const char *title, void *window_data) { |
| 143 return create_window(title, window_data, TRUE); |
144 return create_window(title, window_data, TRUE); |
| 144 } |
145 } |
| |
146 |
| |
147 static void filedialog_event(UiEventData *event, int result, UiFileList flist) { |
| |
148 UiEvent evt; |
| |
149 evt.obj = event->obj; |
| |
150 evt.document = evt.obj->ctx->document; |
| |
151 evt.window = evt.obj->window; |
| |
152 evt.intval = result; |
| |
153 |
| |
154 evt.eventdata = &flist; |
| |
155 evt.eventdatatype = UI_EVENT_DATA_FILE_LIST; |
| |
156 |
| |
157 if(event->callback) { |
| |
158 event->callback(&evt, event->userdata); |
| |
159 } |
| |
160 } |
| |
161 |
| |
162 static void filedialog_select( |
| |
163 Widget widget, |
| |
164 UiEventData *data, |
| |
165 XmFileSelectionBoxCallbackStruct *selection) |
| |
166 { |
| |
167 UiFileList flist; |
| |
168 |
| |
169 char *value = NULL; |
| |
170 XmStringGetLtoR(selection->value, XmSTRING_DEFAULT_CHARSET, &value); |
| |
171 flist.files = &value; |
| |
172 flist.nfiles = 1; |
| |
173 |
| |
174 filedialog_event(data, 1, flist); |
| |
175 |
| |
176 XtFree(value); |
| |
177 |
| |
178 XtUnmanageChild(widget); |
| |
179 XtDestroyWidget(widget); |
| |
180 } |
| |
181 |
| |
182 static void filedialog_cancel( |
| |
183 Widget widget, |
| |
184 UiEventData *data, |
| |
185 XmFileSelectionBoxCallbackStruct *selection) |
| |
186 { |
| |
187 UiFileList flist; |
| |
188 flist.files = NULL; |
| |
189 flist.nfiles = 0; |
| |
190 filedialog_event(data, 0, flist); |
| |
191 |
| |
192 XtUnmanageChild(widget); |
| |
193 XtDestroyWidget(widget); |
| |
194 } |
| |
195 |
| |
196 void ui_openfiledialog(UiObject *obj, unsigned int mode, ui_callback file_selected_callback, void *cbdata) { |
| |
197 Widget dialog = XnCreateFileSelectionDialog(obj->widget, "dialog", NULL, 0); |
| |
198 |
| |
199 UiEventData *data = malloc(sizeof(UiEventData)); |
| |
200 memset(data, 0, sizeof(UiEventData)); |
| |
201 data->obj = obj; |
| |
202 data->callback = file_selected_callback; |
| |
203 data->userdata = cbdata; |
| |
204 |
| |
205 XtAddCallback(dialog, XmNokCallback, (XtCallbackProc)filedialog_select, data); |
| |
206 XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)filedialog_cancel, data); |
| |
207 //XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)filedialog_help, wd); |
| |
208 |
| |
209 XtManageChild(dialog); |
| |
210 } |
| |
211 |
| |
212 void ui_savefiledialog(UiObject *obj, const char *name, ui_callback file_selected_callback, void *cbdata) { |
| |
213 |
| |
214 } |