summaryrefslogtreecommitdiff
path: root/g_src/interface.h
blob: 6df8fdd104117198231e328b8ffee7a83c918a96 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#ifndef INTERFACE_H
#define INTERFACE_H

#include <string>
using std::string;
#include <set>
#include "svector.h"
#include "ViewBase.h"
#include "keybindings.h"
#include "enabler.h"
#include "music_and_sound_g.h"

struct cursesmovie_headerst
{
	int dimx,dimy;
	int delayrate;
};

class viewscreen_movieplayerst : viewscreenst
{
  	public:
		static viewscreen_movieplayerst *create(char pushtype,viewscreenst *scr=NULL);
		virtual void help();
		virtual void feed(std::set<InterfaceKey> &events);
		virtual void logic();
		virtual void render();
		virtual char movies_okay(){return 0;}
		void clearfilelist();
		void force_play(const string &file);

		virtual char is_option_screen(){if(is_playing)return 2;else return 0;}

	protected:
		char saving;
		char loading;
		char editing;
		char text_mode;
		unsigned char editing_char;
		int editing_copy_from;
		short editing_screenf;
		short editing_screenb;
		short editing_screenbright;
		int editing_selected_sound;
		char editing_menu;
		string savename;
		string force_file;
		char is_playing;
		char is_forced_play;
		char quit_if_no_play;
		int maxmoviepos;
		int end_frame_pos;

		int32_t selfile;
		svector<char *> filelist;

		viewscreen_movieplayerst();
		virtual ~viewscreen_movieplayerst(){clearfilelist();};
};

enum InterfacePushType
{
	INTERFACE_PUSH_AS_PARENT,
	INTERFACE_PUSH_AS_CHILD,
	INTERFACE_PUSH_AT_BACK,
	INTERFACE_PUSH_AT_FRONT,
	INTERFACE_PUSHNUM
};

#define INTERFACEFLAG_RETAIN_NONZERO_INPUT BIT1

#define MOVIEBUFFSIZE 800000
#define COMPMOVIEBUFFSIZE 1000000

class interfacest
{
  int original_fps;
  viewscreenst *grab_lastscreen();
	friend class viewscreen_movieplayerst;

	public:
		viewscreenst view;
		unsigned int flag;

		int shutdown_interface_tickcount;
		int shutdown_interface_for_ms;

		char loop();
		void remove_to_first();
		void removescreen(viewscreenst *scr);
		void addscreen(viewscreenst *scr,char pushtype,viewscreenst *relate);
		char is_supermovie_on()
			{
			return supermovie_on;
			}

		void print_interface_token(InterfaceKey key,justification just=justify_left);

		interfacest();
		~interfacest();

	protected:
		char supermovie_on;
		int supermovie_pos;
		int supermovie_delayrate;
		int supermovie_delaystep;
		stringvectst supermovie_sound;
#ifndef NO_FMOD
		int supermovie_sound_time[200][SOUND_CHANNELNUM];
#endif
		unsigned char supermoviebuffer[MOVIEBUFFSIZE];
		unsigned char supermoviebuffer_comp[COMPMOVIEBUFFSIZE];
		int currentblocksize;
		int nextfilepos;
		char first_movie_write;
		string movie_file;

		void insertscreen_as_parent(viewscreenst *scr,viewscreenst *child);
		void insertscreen_as_child(viewscreenst *scr,viewscreenst *parent);
		void insertscreen_at_back(viewscreenst *scr);
		void insertscreen_at_front(viewscreenst *scr);
		void handlemovie(char flushall);
		void finish_movie();
		void use_movie_input();

		int write_movie_chunk();
		void read_movie_chunk(int &maxmoviepos,char &is_playing);
};

#define SCROLLING_NOSELECT BIT1
#define SCROLLING_NO_WRAP BIT2
#define SCROLLING_REVERSE BIT3
void finishscrolling(int32_t &selection,int32_t min,int32_t max,int32_t jump,uint32_t flag,char littlekey);
char standardscrolling(std::set<InterfaceKey> &events,short &selection,int32_t min,int32_t max,int32_t jump,uint32_t flag=0);
char standardscrolling(std::set<InterfaceKey> &events,int32_t &selection,int32_t min,int32_t max,int32_t jump,uint32_t flag=0);
char secondaryscrolling(std::set<InterfaceKey> &events,short &scroll,int32_t min,int32_t max,int32_t jump,uint32_t flag=0);
char secondaryscrolling(std::set<InterfaceKey> &events,int32_t &scroll,int32_t min,int32_t max,int32_t jump,uint32_t flag=0);
#define STRINGENTRY_LETTERS BIT1
#define STRINGENTRY_SPACE BIT2
#define STRINGENTRY_NUMBERS BIT3
#define STRINGENTRY_CAPS BIT4
#define STRINGENTRY_SYMBOLS BIT5
char standardstringentry(char *str,int maxlen,unsigned int flag,std::set<InterfaceKey> &events);
char standardstringentry(string &str,int maxlen,unsigned int flag,std::set<InterfaceKey> &events);

void drawborder(const char *str,char style=0,const char *colorstr=NULL);

extern interfacest gview;

#endif