1
0
mirror of https://git.code.sf.net/p/fuse-emulator/fuse synced 2026-01-27 01:41:34 +03:00
Files
fuse/ui/widget/widget_internals.h
2016-10-24 11:45:18 +11:00

275 lines
7.8 KiB
C

/* widget_internals.h: Functions internal to the widget code
Copyright (c) 2001-2005 Matan Ziv-Av, Philip Kendall
Copyright (c) 2015 Stuart Brady
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Author contact information:
E-mail: philip-fuse@shadowmagic.org.uk
*/
#ifndef FUSE_WIDGET_INTERNALS_H
#define FUSE_WIDGET_INTERNALS_H
#include <sys/types.h>
#include <stdlib.h>
#include <libspectrum.h>
#include "settings.h"
#include "widget.h"
/* The default colours used in the widget */
#define WIDGET_COLOUR_DISABLED 7 /* White */
#define WIDGET_COLOUR_BACKGROUND 15 /* Bright White */
#define WIDGET_COLOUR_FOREGROUND 0 /* Black */
#define WIDGET_COLOUR_HIGHLIGHT 13 /* Cyan */
#define WIDGET_COLOUR_TITLE WIDGET_COLOUR_BACKGROUND
/* The ways of finishing a widget */
typedef enum widget_finish_state {
WIDGET_FINISHED_OK = 1,
WIDGET_FINISHED_CANCEL,
} widget_finish_state;
/* A function to draw a widget */
typedef int (*widget_draw_fn)( void *data );
/* The information we need to store for each widget */
typedef struct widget_t {
widget_draw_fn draw; /* Draw this widget */
int (*finish)( widget_finish_state finished ); /* Post-widget processing */
widget_keyhandler_fn keyhandler; /* Keyhandler */
} widget_t;
int widget_end_widget( widget_finish_state state );
int widget_end_all( widget_finish_state state );
int widget_timer_init( void );
int widget_timer_end( void );
void widget_putpixel( int x, int y, int colour );
void widget_rectangle( int x, int y, int w, int h, int col );
void widget_draw_line_horiz( int x, int y, int length, int colour );
void widget_draw_line_vert( int x, int y, int length, int colour );
void widget_draw_rectangle_outline( int x, int y, int w, int h, int colour );
void widget_draw_rectangle_solid( int x, int y, int w, int h, int colour );
void widget_draw_rectangle_outline_rounded( int x, int y, int w, int h, int colour );
int widget_printstring( int x, int y, int col, const char *s );
int widget_printstring_fixed( int x, int y, int col, const char *s );
void widget_printchar_fixed( int x, int y, int col, int c );
void widget_print_title( int y, int col, const char *s );
void widget_printstring_right( int x, int y, int col, const char *s );
void widget_display_rasters( int y, int h );
#define widget_display_lines(y,h) widget_display_rasters((y)*8,(h)*8)
size_t widget_stringwidth( const char *s );
size_t widget_substringwidth( const char *s, size_t count );
size_t widget_charwidth( int c );
void widget_up_arrow( int x, int y, int colour );
void widget_down_arrow( int x, int y, int colour );
void widget_draw_submenu_arrow(int x, int y, int colour);
void widget_print_checkbox( int x, int y, int colour, int value );
extern widget_finish_state widget_finished;
int widget_dialog( int x, int y, int width, int height );
int widget_dialog_with_border( int x, int y, int width, int height );
int split_message( const char *message, char ***lines, size_t *count,
const size_t line_length );
/* File selector */
typedef struct widget_dirent {
int mode;
char *name;
} widget_dirent;
typedef struct widget_filesel_data {
int exit_all_widgets;
const char *title;
} widget_filesel_data;
extern struct widget_dirent **widget_filenames;
extern size_t widget_numfiles;
int widget_filesel_load_draw( void* data );
int widget_filesel_save_draw( void* data );
int widget_filesel_finish( widget_finish_state finished );
void widget_filesel_keyhandler( input_key key );
/* Tape menu */
int widget_tape_draw( void* data );
void widget_tape_keyhandler( input_key key );
/* File menu */
int widget_file_draw( void* data );
void widget_file_keyhandler( input_key key );
/* Options menu */
int widget_menu_filter( void *data );
/* Machine menu */
int widget_machine_draw( void* data );
void widget_machine_keyhandler( input_key key );
/* Keyboard picture */
typedef struct widget_picture_data {
const char *filename;
libspectrum_byte *screen;
int border;
} widget_picture_data;
int widget_picture_draw( void* data );
void widget_picture_keyhandler( input_key key );
/* Help menu */
int widget_help_draw( void* data );
void widget_help_keyhandler( input_key key );
/* General menu code */
int widget_menu_draw( void* data );
void widget_menu_keyhandler( input_key key );
/* More callbacks */
scaler_type widget_select_scaler( int (*selector)( scaler_type ) );
/* The generalised selector widget */
typedef struct widget_select_t {
const char *title; /* Dialog title */
const char * const *options; /* The available options */
size_t count; /* The number of options */
size_t current; /* Which option starts active? */
int result; /* What was selected? ( -1 if dialog cancelled ) */
int finish_all; /* close all widget or not */
} widget_select_t;
int widget_select_draw( void *data );
void widget_select_keyhandler( input_key key );
int widget_select_finish( widget_finish_state finished );
/* The tape browser widget */
int widget_browse_draw( void* data );
void widget_browse_keyhandler( input_key key );
int widget_browse_finish( widget_finish_state finished );
/* The text entry widget */
typedef enum widget_text_input_allow {
WIDGET_INPUT_ASCII,
WIDGET_INPUT_DIGIT,
WIDGET_INPUT_ALPHA,
WIDGET_INPUT_ALNUM
} widget_text_input_allow;
typedef struct widget_text_t {
const char *title;
widget_text_input_allow allow;
unsigned int max_length;
char text[40];
} widget_text_t;
int widget_text_draw( void* data );
void widget_text_keyhandler( input_key key );
int widget_text_finish( widget_finish_state finished );
extern char *widget_text_text; /* The returned text */
/* The options widgets */
int widget_options_finish( widget_finish_state finished );
/* The error widget */
int widget_error_draw( void *data );
void widget_error_keyhandler( input_key key );
/* The debugger widget */
int widget_debugger_draw( void *data );
void widget_debugger_keyhandler( input_key key );
/* The poke file widget */
int widget_pokemem_draw( void *data );
void widget_pokemem_keyhandler( input_key key );
int widget_pokemem_finish( widget_finish_state finished );
/* The poke finder widget */
int widget_pokefinder_draw( void *data );
void widget_pokefinder_keyhandler( input_key key );
/* The memory browser widget */
int widget_memory_draw( void *data );
void widget_memory_keyhandler( input_key key );
/* The about fuse widget */
int widget_about_draw( void *data );
void widget_about_keyhandler( input_key key );
/* The ROM selector widget */
typedef struct widget_roms_info {
int initialised;
const char *title;
size_t start, count;
int is_peripheral;
} widget_roms_info;
int widget_roms_draw( void *data );
void widget_roms_keyhandler( input_key key );
int widget_roms_finish( widget_finish_state finished );
/* The query widgets */
typedef union {
int confirm;
ui_confirm_save_t save;
} widget_query_t;
extern widget_query_t widget_query;
int widget_query_draw( void *data );
void widget_query_keyhandler( input_key key );
int widget_query_save_draw( void *data );
void widget_query_save_keyhandler( input_key key );
int widget_query_finish( widget_finish_state finished );
/* The widgets actually available */
extern widget_t widget_data[];
#endif /* #ifndef FUSE_WIDGET_INTERNALS_H */