00001 
#ifndef DEF_EDITOR_H
00002 
#define DEF_EDITOR_H 1
00003 
00004 
#define EDIT_RESET_ACTIONS  0x00000001
00005 
#define EDIT_MOUSE_MOTION   0x00000002
00006 
#define EDIT_BOX            0x00000004
00007 
#define EDIT_ACT_BOX        0x00000008
00008 
#define EDIT_SEL_ACT_BOX    0x00000010
00009 
#define EDIT_PLACE_OBJECT   0x00000020
00010 
#define EDIT_REMOVE_OBJECTS 0x00000040
00011 
#define EDIT_SELECT_START   0x00000080
00012 
#define EDIT_SELECT_END     0x00000100
00013 
#define EDIT_MOVE_START     0x00000200
00014 
#define EDIT_MOVE_END       0x00000400
00015 
00019 class Box {
00020     
friend class Editor;
00021     
friend class GraphicsEngine;
00022     
public:
00023         
Box(Sint16,Sint16);
00024         
virtual ~
Box();
00026         string 
title;
00028         
virtual void act(Sint8) = 0;
00029         
virtual void input(Uint16) { }
00030         Uint8 getSize() {
00031             
return entries.size();
00032         }
00033         
const SDL_Rect& getArea();
00034         Sint8 getCurrentEntry(Sint16,Sint16);
00035     
protected:
00037         SDL_Surface* 
surface;
00039         std::vector<string> 
entries;
00041         Font* 
font;
00043         Font* 
font_title;
00045         Font* 
font_high;
00047         SDL_Rect 
area;
00049         
virtual void update();
00051         bool centered;
00052 };
00053 
00057 class EditBox : 
public Box {
00058     
public:
00059         
EditBox(Sint16,Sint16);
00060         
virtual void act(Sint8);
00061 };
00062 
00066 class PlaceBox : 
public Box {
00067     
public:
00068         
PlaceBox(Sint16,Sint16);
00069         
virtual void act(Sint8);
00070 };
00071 
00075 class TextInputBox : 
public Box {
00076     
public:
00077         
TextInputBox(Sint16,Sint16);
00078         
virtual ~
TextInputBox();
00079         
virtual void act(Sint8);
00080         
virtual void input(Uint16);
00081         
virtual void evaluateEntry();
00082     
protected:
00083         Sint8 currententry;
00084         std::vector<string> etitles;
00085         std::vector<string> einput;
00086         
virtual void update();
00087 };
00088 
00092 class ObjectBox : 
public TextInputBox {
00093     
public:
00094         
ObjectBox(string,Sint16,Sint16,ParameterMap& parameters);
00095     
protected:
00096         
virtual void evaluateEntry();
00097         string objname;
00098 };
00099 
00103 class SaveAsBox : 
public TextInputBox {
00104     
public:
00105         
SaveAsBox(Sint16,Sint16);
00106     
protected:
00107         
virtual void evaluateEntry();
00108 };
00109 
00113 class OpenMapBox : 
public TextInputBox {
00114     
public:
00115         
OpenMapBox(Sint16,Sint16);
00116     
protected:
00117         
virtual void evaluateEntry();
00118 };
00119 
00123 class NewMapBox : 
public TextInputBox {
00124     
public:
00125         
NewMapBox(Sint16,Sint16);
00126     
protected:
00127         
virtual void evaluateEntry();
00128 };
00129 
00130 
00134 class Editor {
00135     
public:
00136         
Editor();
00137         ~
Editor();
00138         
void reinit();
00139         
void run_action(Uint32 action, Uint16 x=0, Uint16 y=0);
00140         Uint32 getActionMPressed(Uint8 button) {
00141             
if (button>=1 && button <6) 
return action_mouse_pressed[button];
00142             
else return NOTHING;
00143         }
00144         Uint32 getActionMReleased(Uint8 button) {
00145             
if (button>=1 && button <6) 
return action_mouse_released[button];
00146             
else return NOTHING;
00147         }
00149         
Box* 
setBox(
Box* newbox);
00151         
void closeBox(); 
00152         
bool hasBox() {
00153             
if (box && box->
surface) 
return true;
00154             
else return false;
00155         }
00156         
Box* box;
00158         string 
save_name;
00160         string 
place_name;
00162         ParameterMap 
place_parameters;
00164         
void appendtoBuf(string);
00165         string getBufLine(string match);
00167         
bool changeBuf(string,string);
00168         
00170         string 
removefromBuf(string);
00172         
int saveBuf(string);
00174         Uint32 
action_mouse_pressed[6];
00176         Uint32 
action_mouse_released[6];
00177         std::set<string> selection;
00178         
bool select_start;
00179         SDL_Rect select_rect;
00180         Sint16 select_start_x;
00181         Sint16 select_start_y;
00182         
bool move_start;
00183         Sint16 move_start_x;
00184         Sint16 move_start_y;
00185         SDL_Surface* mask_surface;
00186         
Object* move_object;
00187     
private:
00188         Sint16 getBufLineNr(string);
00189         
void updateSelection(Sint16 x, Sint16 y);
00190         
bool updateMove(Sint16 x, Sint16 y);
00191 };
00192 
00193 
#endif