From a9022b5972dc49d86f617a27940fafe9c4d0e7e7 Mon Sep 17 00:00:00 2001 From: Ian C Date: Thu, 9 Jun 2011 13:46:28 +0000 Subject: Initial import of (very old) vidoom sources. --- platgui.h | 258 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 platgui.h (limited to 'platgui.h') diff --git a/platgui.h b/platgui.h new file mode 100644 index 0000000..9a27994 --- /dev/null +++ b/platgui.h @@ -0,0 +1,258 @@ +/* + + viDOOM - level editor for DOOM + + Copyright (C) 2000 Ian Cowburn (ianc@noddybox.demon.co.uk) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + ------------------------------------------------------------------------- + + Platform specific GUI routines + + This is the platform specific routines for pop-up menus, dialogs and + file selectors. More DOOM graphics orientied GUI is handled by the + generic GUI (gui.h) that is built on top of gfx. + + As with the platform specific GFX all calls can be differentiated from + the generic gui by starting with GUI_, rather than Gui. + + Note that all these routines are expected to preserve screen contents. + + $Id$ + +*/ + +#ifndef VIDOOM_PLATGUI_H +#define VIDOOM_PLATGUI_H + +#include "gfx.h" + +/* Type for a picklist, where each entry has an associated grahpic. If the + image is NULL then no picture should be shown for that entry. +*/ +typedef struct + { + char *text; + GFX_IMAGE img; + int client_index; /* Returned by GUI_image_picklist() */ + } PLAT_IMG_PICKLIST; + + +/* Type for a picklist +*/ +typedef struct + { + char *text; + int client_index; /* Returned by GUI_client_picklist() */ + } PLAT_PICKLIST; + + +/* Types to define a menu +*/ +typedef struct PLATMENU + { + char *text; /* Text to display */ + int client_index; /* Value returned by GUI_menu() */ + struct PLATMENU *child; /* NULL if no child menu, else */ + /* pointer to other menu array. */ + } PLAT_MENU; + + +/* Types to define a radio box +*/ +typedef struct + { + char *text; /* Label for this button. NULL = end */ + int client_index; /* Value returned by GUI_radio() */ + } PLAT_RADIO; + +/* Types to define a multi flag box +*/ +typedef struct + { + char *text; /* Label. NULL = end */ + int group; /* To group flags (0 = don't group) */ + int val; /* TRUE = set, FALSE = flag clear */ + } PLAT_MULTI; + +/* Types to define a simple dialog +*/ +#define PLAT_DIAL_MAXSTRLEN 128 + +#define PLAT_DIAL_STRING 0 +#define PLAT_DIAL_INTEGER 1 +#define PLAT_DIAL_DOUBLE 2 +#define PLAT_DIAL_PICKLIST 3 + +/* This is the picklist type that can be used inside a DIALOG. It matters + not how it's implemented, but it should be able to use large picklists + (eg. the amount of the list seen should be automatically limited). +*/ +typedef struct + { + int no; /* No of items */ + int current; /* Currently selected item */ + char **text; /* Text for items - used as *item[] */ + } PLAT_DIAL_PL; + +typedef struct + { + char *text; /* Label for item. NULL = no label */ + int type; /* Data type (PLAT_DIAL_xxx) */ + union /* Data */ + { + int i; + char s[PLAT_DIAL_MAXSTRLEN+1]; + double d; + PLAT_DIAL_PL pl; + } data; + } PLAT_DIALOG; + + +/* Inform GUI of screen size if required +*/ +void GUI_setscreen(int w,int h); + +/* Display a Yes/No option box. Returns TRUE/FALSE accordingly. The text + defined by question should be split over lines where a '|' character appears. +*/ +int GUI_yesno(char *question); + + +/* Starts a Yes/No/Yes to All/No to All cycle. After calling this + GUI_yesno_all() is reset to it's initial state. +*/ +void GUI_start_yesno_all(void); + + +/* Works like GUI_yesno(), but displays to extra options - "Yes to All" and + "No to All". If either of these options are selected then further calls + to this function should return TRUE/FALSE accordingly, until + GUI_start_yesno__all() is called. +*/ +int GUI_yesno_all(char *question); + + +/* Displays a dialog with the title and text supplied. This text should split + where a '|' character appears. A sole button containing the supplied + button_text should be displayed. +*/ +void GUI_alert(char *title, char *text, char *button_text); + + +/* Pop-up/display a menu. Return the client_index of the selected item from the + menus, or defval for no selection. The co-ords can obviously be ignored or + honoured, though honouring is preferable. + + MENU array is terminated by one with a NULL text entry. +*/ +int GUI_menu(char *title, int x, int y, PLAT_MENU menu[], int defval); + + +/* Allow selection of a filename. Returns NULL if cancelled, otherwise the + selected path with must be Releas()'ed later. + + If supported then files ending with filter should only be displayed. Filter + should be NULL to show all files. +*/ +char *GUI_fsel(char *title, char *default_path, char *filter); + + +/* Display a picklist. The items are described by the array of pointers + passed in, which terminates with a NULL pointer. The index to the selected + item is returned, or -1 if the pickbox was cancelled. +*/ +int GUI_picklist(char *title,char *opts[]); + + +/* Does a picklist as above, but works on structures cntaining client return + values, rather than simple array indexes. +*/ +int GUI_client_picklist(char *title,PLAT_PICKLIST opts[],int defval); + + +/* Display a picklist with associated images. The items are described by the + array of structs passed in, which terminates with a NULL pointer in the + text field. The client index data in the selected item is returned, or + defval if the pickbox was cancelled. + + If this cannot be supported on the platform then the minimum this should + do is a sideways call to GUI_client_picklist() +*/ +int GUI_image_picklist(char *title,PLAT_IMG_PICKLIST opts[],int defval); + + +/* Display a radio box. The items are described by the array of structs + passed in, which terminates with a NULL pointer in the text field. + The client index data in the selected item is returned, or defval if the + radio box was cancelled. + + If one of the entries client index values is the same as current then that + option will be the one selected when the radio box is displayed. Otherwise + the first item will be the selected one. +*/ +int GUI_radio_box(char *title,PLAT_RADIO opts[],int current,int defval); + +/* Display a mutli-selection radio box. The items are described by the array + of PLAT_MULTI passed in. + + Returns TRUE if dialog accepted, otherwise FALSE. +*/ +int GUI_multi_box(char *title,PLAT_MULTI p[]); + + +/* Displays a very simple dialog made up of 'no' fields as defined in pd[]. + Returns TRUE if the dialog is accepted, FALSE otherwise. + + Note that as the values in the PLAT_DIALOG array are not pointing to + actual client data they need not be preserved on a cancel of the dialog. +*/ +int GUI_dialog(char *title, int no, PLAT_DIALOG pd[]); + + +/* Displays the contents of a file. The form this display takes is not really + of any concern to viDOOM. + + Control codes should just be filtered out. Tabs should be converted to + spaces, or honoured. + + This interface is used for reading the license from the menu, and for + reading the results from running the node builder. +*/ +void GUI_view_file(char *title, char *path); + + +/* Allows simple text editting. The form this display takes is not really + of any concern to viDOOM (if applicable it would be more than OK to start + an external text editor). + + text is a pointer to the original text, which is one long string with line + breaks denoted by the '\n' character. Note that lines should _only_ be + terminated with the \n character (ie. MSDOS stlye \r\n need not be accepted + by this routine). + + The return is a newly allocated copy of the edited text is the text is OKed. + The return is NULL if the text is cancelled. + + In either case, the original string pointed to by text should be as it was. +*/ +char *GUI_text_edit(char *title, char *text); + + +#endif + + +/* END OF FILE */ -- cgit v1.2.3