| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- /******************************************************************************/
- #include "stdafx.h"
- /******************************************************************************/
- PanelEditor PanelEdit;
- /******************************************************************************/
- /******************************************************************************/
- void PanelEditor::Change::create(ptr user)
- {
- data=PanelEdit.edit;
- PanelEdit.undoVis();
- }
- void PanelEditor::Change::apply(ptr user)
- {
- PanelEdit.edit.undo(data);
- PanelEdit.setChanged();
- PanelEdit.toGui();
- PanelEdit.undoVis();
- }
- GuiObj* PanelEditor::GuiPanel::test(C GuiPC &gpc, C Vec2 &pos, GuiObj* &mouse_wheel){return null;}
- void PanelEditor::GuiPanel::draw(C GuiPC &gpc)
- {
- if(visible() && gpc.visible)
- {
- GuiPC gpc2=gpc;
- MAX(gpc2.clip.min.x, clip_x+parent()->screenPos().x);
- D.clip(gpc2.clip);
- Rect r=rect()+gpc.offset;
- if(PanelEdit.game)
- {
- PanelEdit.game->draw(r);
- if(PanelEdit.show_lines()){PanelEdit.game->drawLines(RED, r); r.draw(BLACK, false);}
- }
- }
- }
- void PanelEditor::undoVis() {SetUndo(undos, undo, redo);}
- void PanelEditor::PreChanged(C Property &prop) {PanelEdit.undos.set(&prop);}
- void PanelEditor::Changed(C Property &prop) {PanelEdit.setChanged();}
- void PanelEditor::ParamsCenterStretch(EditPanel &e, C Str &t) {e.center_stretch=TextBool(t); e.center_stretch_time.getUTC();}
- void PanelEditor::ParamsSideStretch(EditPanel &e, C Str &t) {e. side_stretch=TextBool(t); e. side_stretch_time.getUTC();}
- void PanelEditor::ParamsCenterColor(EditPanel &e, C Str &t) {e.center_color=TextVec4(t); e.center_color_time.getUTC();}
- void PanelEditor::ParamsBorderColor(EditPanel &e, C Str &t) {e.border_color=TextVec4(t); e.border_color_time.getUTC();}
- void PanelEditor::ParamsSideColor(EditPanel &e, C Str &t) {e. side_color=TextVec4(t); e. side_color_time.getUTC();}
- void PanelEditor::ParamsBlurColor(EditPanel &e, C Str &t) {e. blur_color=TextVec4(t); e. blur_color_time.getUTC();}
- void PanelEditor::ParamsShadowOpacity(EditPanel &e, C Str &t) {e.shadow_opacity=TextInt (t); e.shadow_opacity_time.getUTC();}
- void PanelEditor::ParamsShadowRadius(EditPanel &e, C Str &t) {e.shadow_radius =TextFlt (t); e. shadow_radius_time.getUTC();}
- void PanelEditor::ParamsShadowOffset(EditPanel &e, C Str &t) {e.shadow_offset =TextFlt (t); e. shadow_offset_time.getUTC();}
- void PanelEditor::ParamsShadowCenter(EditPanel &e, C Str &t) {e.center_shadow =TextBool(t); e. center_shadow_time.getUTC();}
- void PanelEditor::ParamsBorderSize(EditPanel &e, C Str &t) {e. border_size =TextFlt (t); e. border_size_time.getUTC();}
- void PanelEditor::ParamsCenterScale(EditPanel &e, C Str &t) {e. center_scale =TextFlt (t); e. center_scale_time.getUTC();}
- void PanelEditor::ParamsTopSize(EditPanel &e, C Str &t) {e. top_size =TextFlt (t); e. top_size_time.getUTC();}
- void PanelEditor::ParamsTopOffset(EditPanel &e, C Str &t) {e. top_offset=TextFlt (t); e. top_offset_time.getUTC();}
- void PanelEditor::ParamsBottomSize(EditPanel &e, C Str &t) {e. bottom_size =TextFlt (t); e. bottom_size_time.getUTC();}
- void PanelEditor::ParamsBottomOffset(EditPanel &e, C Str &t) {e. bottom_offset=TextFlt (t); e. bottom_offset_time.getUTC();}
- void PanelEditor::ParamsLeftRightSize(EditPanel &e, C Str &t) {e. left_right_size =TextFlt (t); e. left_right_size_time.getUTC();}
- void PanelEditor::ParamsLeftRightOffset(EditPanel &e, C Str &t) {e. left_right_offset=TextVec2(t); e. left_right_offset_time.getUTC();}
- void PanelEditor::ParamsTopCornerSize(EditPanel &e, C Str &t) {e. top_corner_size =TextFlt (t); e. top_corner_size_time.getUTC();}
- void PanelEditor::ParamsTopCornerOffset(EditPanel &e, C Str &t) {e. top_corner_offset=TextVec2(t); e. top_corner_offset_time.getUTC();}
- void PanelEditor::ParamsBottomCornerSize(EditPanel &e, C Str &t) {e.bottom_corner_size =TextFlt (t); e. bottom_corner_size_time.getUTC();}
- void PanelEditor::ParamsBottomCornerOffset(EditPanel &e, C Str &t) {e.bottom_corner_offset=TextVec2(t); e.bottom_corner_offset_time.getUTC();}
- Str PanelEditor::ParamsCenterImage(C EditPanel &e) {return Proj.elmFullName(e. center_image);}
- Str PanelEditor::ParamsBorderImage(C EditPanel &e) {return Proj.elmFullName(e. border_image);}
- Str PanelEditor::ParamsTopImage(C EditPanel &e) {return Proj.elmFullName(e. top_image);}
- Str PanelEditor::ParamsBottomImage(C EditPanel &e) {return Proj.elmFullName(e. bottom_image);}
- Str PanelEditor::ParamsLeftRightImage(C EditPanel &e) {return Proj.elmFullName(e. left_right_image);}
- Str PanelEditor::ParamsTopCornerImage(C EditPanel &e) {return Proj.elmFullName(e. top_corner_image);}
- Str PanelEditor::ParamsBottomCornerImage(C EditPanel &e) {return Proj.elmFullName(e.bottom_corner_image);}
- Str PanelEditor::ParamsPanelImage(C EditPanel &e) {return Proj.elmFullName(e. panel_image);}
- void PanelEditor::ParamsCenterImage(EditPanel &e, C Str &t) {e. center_image=Proj.findElmImageID(t ); e. center_image_time.getUTC();}
- void PanelEditor::ParamsBorderImage(EditPanel &e, C Str &t) {e. border_image=Proj.findElmImageID(t ); e. border_image_time.getUTC();}
- void PanelEditor::ParamsTopImage(EditPanel &e, C Str &t) {e. top_image=Proj.findElmImageID(t ); e. top_image_time.getUTC();}
- void PanelEditor::ParamsBottomImage(EditPanel &e, C Str &t) {e. bottom_image=Proj.findElmImageID(t ); e. bottom_image_time.getUTC();}
- void PanelEditor::ParamsLeftRightImage(EditPanel &e, C Str &t) {e. left_right_image=Proj.findElmImageID(t ); e. left_right_image_time.getUTC();}
- void PanelEditor::ParamsTopCornerImage(EditPanel &e, C Str &t) {e. top_corner_image=Proj.findElmImageID(t ); e. top_corner_image_time.getUTC();}
- void PanelEditor::ParamsBottomCornerImage(EditPanel &e, C Str &t) {e.bottom_corner_image=Proj.findElmImageID(t ); e.bottom_corner_image_time.getUTC();}
- void PanelEditor::ParamsPanelImage(EditPanel &e, C Str &t) {e. panel_image=Proj.findElmID (t, ELM_PANEL_IMAGE); e. panel_image_time.getUTC();}
- void PanelEditor::SetCornerSize(PanelEditor &editor)
- {
- if(editor.game)
- {
- if(editor.game->border_image && editor.game->top_corner_image)
- {
- editor.undos.set("corner");
- editor.edit.top_corner_size=Abs(editor.game->top_corner_image->h()*editor.game->border_size/editor.game->border_image->h());
- editor.edit.top_corner_size_time.getUTC(); editor.setChanged(); editor.toGui();
- }
- if(editor.game->border_image && editor.game->bottom_corner_image)
- {
- editor.undos.set("corner");
- editor.edit.bottom_corner_size=Abs(editor.game->bottom_corner_image->h()*editor.game->border_size/editor.game->border_image->h());
- editor.edit.bottom_corner_size_time.getUTC(); editor.setChanged(); editor.toGui();
- }
- }
- }
- void PanelEditor::SetTopSize(PanelEditor &editor)
- {
- if(editor.game && editor.game->border_image && editor.game->top_image)
- {
- editor.undos.set("top");
- editor.edit.top_size=Abs(editor.game->top_image->h()*editor.game->border_size/editor.game->border_image->h());
- editor.edit.top_size_time.getUTC(); editor.setChanged(); editor.toGui();
- }
- }
- void PanelEditor::SetBottomSize(PanelEditor &editor)
- {
- if(editor.game && editor.game->border_image && editor.game->bottom_image)
- {
- editor.undos.set("bottom");
- editor.edit.bottom_size=Abs(editor.game->bottom_image->h()*editor.game->border_size/editor.game->border_image->h());
- editor.edit.bottom_size_time.getUTC(); editor.setChanged(); editor.toGui();
- }
- }
- void PanelEditor::SetSideSize(PanelEditor &editor)
- {
- if(editor.game && editor.game->border_image && editor.game->left_right_image)
- {
- editor.undos.set("side");
- editor.edit.left_right_size=Abs(editor.game->left_right_image->h()*editor.game->border_size/editor.game->border_image->h());
- editor.edit.left_right_size_time.getUTC(); editor.setChanged(); editor.toGui();
- }
- }
- void PanelEditor::Undo(PanelEditor &editor) {editor.undos.undo();}
- void PanelEditor::Redo(PanelEditor &editor) {editor.undos.redo();}
- void PanelEditor::Locate(PanelEditor &editor) {Proj.elmLocate(editor.elm_id);}
- void PanelEditor::create()
- {
- add("Shadow Opacity" , MemberDesc(MEMBER(EditPanel, shadow_opacity)).setTextToDataFunc(ParamsShadowOpacity));
- add("Shadow Radius" , MemberDesc(MEMBER(EditPanel, shadow_radius )).setTextToDataFunc(ParamsShadowRadius)).mouseEditSpeed(0.05f).min(0);
- add("Shadow Offset" , MemberDesc(MEMBER(EditPanel, shadow_offset )).setTextToDataFunc(ParamsShadowOffset)).mouseEditSpeed(0.05f);
- add("Shadow At Center (Slower)", MemberDesc(MEMBER(EditPanel, center_shadow )).setTextToDataFunc(ParamsShadowCenter));
- add("Center Color" , MemberDesc(MEMBER(EditPanel, center_color )).setTextToDataFunc(ParamsCenterColor )).setColor().desc("Affects Center Image and Panel Image");
- add("Center Stretch", MemberDesc(MEMBER(EditPanel, center_stretch)).setTextToDataFunc(ParamsCenterStretch)).desc("If stretch center image to fit the whole rectangle");
- add("Center Scale" , MemberDesc(MEMBER(EditPanel, center_scale )).setTextToDataFunc(ParamsCenterScale )).mouseEditMode(PROP_MOUSE_EDIT_SCALAR).range(-64, 64);
- add("Center Image" , MemberDesc(DATA_STR ).setFunc (ParamsCenterImage, ParamsCenterImage)).elmType(ELM_IMAGE);
- add("Panel Image" , MemberDesc(DATA_STR ).setFunc (ParamsPanelImage , ParamsPanelImage )).elmType(ELM_PANEL_IMAGE);
- add("Border Color", MemberDesc(MEMBER(EditPanel, border_color)).setTextToDataFunc(ParamsBorderColor)).setColor().desc("Affects Border Image");
- add("Border Size" , MemberDesc(MEMBER(EditPanel, border_size )).setTextToDataFunc(ParamsBorderSize )).mouseEditSpeed(0.05f);
- add("Border Image", MemberDesc(DATA_STR ).setFunc (ParamsBorderImage, ParamsBorderImage )).elmType(ELM_IMAGE);
- add();
- add("Side Color" , MemberDesc(MEMBER(EditPanel, side_color)).setTextToDataFunc(ParamsSideColor )).setColor().desc("Affects Top Image, Bottom Image, Left/Right Image, Top Corner Image and Bottom Corner Image");
- add("Side Stretch" , MemberDesc(MEMBER(EditPanel, side_stretch)).setTextToDataFunc(ParamsSideStretch )).desc("If stretch side images to fit the whole side\nAffects Top Image, Bottom Image, Left/Right Image, Top Corner Image and Bottom Corner Image");
- add("Top Image" , MemberDesc(DATA_STR ).setFunc (ParamsTopImage , ParamsTopImage )).elmType(ELM_IMAGE);
- add("Top Size" , MemberDesc(MEMBER(EditPanel, top_size )).setTextToDataFunc(ParamsTopSize )).mouseEditSpeed(0.05f);
- add("Top Offset" , MemberDesc(MEMBER(EditPanel, top_offset)).setTextToDataFunc(ParamsTopOffset )).mouseEditSpeed(0.05f);
- add("Bottom Image" , MemberDesc(DATA_STR ).setFunc (ParamsBottomImage , ParamsBottomImage )).elmType(ELM_IMAGE);
- add("Bottom Size" , MemberDesc(MEMBER(EditPanel, bottom_size )).setTextToDataFunc(ParamsBottomSize )).mouseEditSpeed(0.05f);
- add("Bottom Offset" , MemberDesc(MEMBER(EditPanel, bottom_offset)).setTextToDataFunc(ParamsBottomOffset )).mouseEditSpeed(0.05f);
- add("Left/Right Image" , MemberDesc(DATA_STR ).setFunc (ParamsLeftRightImage , ParamsLeftRightImage )).elmType(ELM_IMAGE);
- add("Left/Right Size" , MemberDesc(MEMBER(EditPanel, left_right_size )).setTextToDataFunc(ParamsLeftRightSize )).mouseEditSpeed(0.05f);
- add("Left/Right Offset" , MemberDesc(MEMBER(EditPanel, left_right_offset)).setTextToDataFunc(ParamsLeftRightOffset )).mouseEditSpeed(0.05f);
- add("Top Corner Image" , MemberDesc(DATA_STR ).setFunc (ParamsTopCornerImage , ParamsTopCornerImage )).elmType(ELM_IMAGE);
- add("Top Corner Size" , MemberDesc(MEMBER(EditPanel, top_corner_size )).setTextToDataFunc(ParamsTopCornerSize )).mouseEditSpeed(0.05f);
- add("Top Corner Offset" , MemberDesc(MEMBER(EditPanel, top_corner_offset)).setTextToDataFunc(ParamsTopCornerOffset )).mouseEditSpeed(0.05f);
- add("Bottom Corner Image" , MemberDesc(DATA_STR ).setFunc (ParamsBottomCornerImage, ParamsBottomCornerImage)).elmType(ELM_IMAGE);
- add("Bottom Corner Size" , MemberDesc(MEMBER(EditPanel, bottom_corner_size )).setTextToDataFunc(ParamsBottomCornerSize )).mouseEditSpeed(0.05f);
- add("Bottom Corner Offset", MemberDesc(MEMBER(EditPanel, bottom_corner_offset)).setTextToDataFunc(ParamsBottomCornerOffset)).mouseEditSpeed(0.05f);
- add("Blur Color", MemberDesc(MEMBER(EditPanel, blur_color)).setTextToDataFunc(ParamsBlurColor)).setColor();
- autoData(&edit);
- Rect r=::PropWin::create("Panel Editor", Vec2(0.02f, -0.07f), 0.036f, 0.043f, PropElmNameWidth); button[2].func(HideProjAct, SCAST(GuiObj, T)).show(); flag|=WIN_RESIZABLE; ::PropWin::changed(Changed, PreChanged);
- T+=undo .create(Rect_LU(0.02f, -0.01f , 0.05f, 0.05f)).func(Undo, T).focusable(false).desc("Undo"); undo.image="Gui/Misc/undo.img";
- T+=redo .create(Rect_LU(undo .rect().ru(), 0.05f, 0.05f)).func(Redo, T).focusable(false).desc("Redo"); redo.image="Gui/Misc/redo.img";
- T+=locate .create(Rect_LU(redo .rect().ru()+Vec2(0.01f, 0), 0.14f, 0.05f), "Locate").func(Locate, T).focusable(false).desc("Locate this element in the Project");
- T+=show_lines.create(Rect_LU(locate.rect().ru()+Vec2(0.01f, 0), 0.22f, 0.05f), "Show Lines").focusable(false); show_lines.mode=BUTTON_TOGGLE;
- flt y=r.min.y-0.01f, h=0.045f;
- T+=set_corner_size.create(Rect_LU(0.02f, y, 0.69f, 0.043f), "Set Corner Size to match Border Pixel Ratio").func(SetCornerSize, T); y-=h;
- T+=set_top_size .create(Rect_LU(0.02f, y, 0.69f, 0.043f), "Set Top Size to match Border Pixel Ratio" ).func(SetTopSize , T); y-=h;
- T+=set_bottom_size.create(Rect_LU(0.02f, y, 0.69f, 0.043f), "Set Bottom Size to match Border Pixel Ratio").func(SetBottomSize, T); y-=h;
- T+=set_side_size .create(Rect_LU(0.02f, y, 0.69f, 0.043f), "Set Side Size to match Border Pixel Ratio" ).func(SetSideSize , T); y-=h;
- T+=gui_panel.create();
- Vec2 padd=defaultInnerPaddingSize(); rect(Rect_C(0, 0, Min(1.7f+padd.x, D.w()*2), Min(-y+padd.y+0.01f, D.h()*2)));
- }
- void PanelEditor::toGame() {if(game)edit.copyTo(*game, Proj);}
- void PanelEditor::toGui() {::PropWin::toGui(); toGame();}
- PanelEditor& PanelEditor::hide( ) {set(null); ::PropWin::hide(); return T;}
- Rect PanelEditor::sizeLimit( )C {Rect r=::EE::Window::sizeLimit(); r.min.set(1.0f, 0.5f); return r;}
- PanelEditor& PanelEditor::rect(C Rect &rect)
- {
- ::EE::Window::rect(rect);
- flt x=set_top_size.rect().max.x; if(props.elms())MAX(x, props[0].button.rect().max.x);
- Rect r(x, -clientHeight(), clientWidth(), 0); r.extend(-0.08f);
- r.setC(r.center(), Min(r.w(), 1.3f), Min(r.h(), 1.09f));
- gui_panel.clip_x=x;
- gui_panel.rect(r);
- return T;
- }
- void PanelEditor::flush()
- {
- if(elm && game && changed)
- {
- if(ElmPanel *data=elm->panelData()){data->newVer(); data->from(edit);} // modify just before saving/sending in case we've received data from server after edit
- Save( edit, Proj.editPath(*elm)); // edit
- Save(*game, Proj.gamePath(*elm)); Proj.savedGame(*elm); // game
- Server.setElmLong(elm->id);
- Proj.panelChanged(elm->id);
- }
- changed=false;
- }
- void PanelEditor::setChanged()
- {
- if(elm)
- {
- changed=true;
- if(ElmPanel *data=elm->panelData()){data->newVer(); data->from(edit);}
- toGame();
- }
- }
- void PanelEditor::set(Elm *elm)
- {
- if(elm && elm->type!=ELM_PANEL)elm=null;
- if(T.elm!=elm)
- {
- flush();
- undos.del(); undoVis();
- T.elm =elm;
- T.elm_id=(elm ? elm->id : UIDZero);
- if(elm){edit.load(Proj.editPath(*elm)); game=Proj.gamePath(elm_id);}else{edit.reset(); game.clear();}
- toGui();
- Proj.refresh(false, false);
- visible(T.elm!=null).moveToTop();
- }
- }
- void PanelEditor::activate(Elm *elm) {set(elm); if(T.elm)::EE::GuiObj::activate();}
- void PanelEditor::toggle(Elm *elm) {if(elm==T.elm)elm=null; set(elm);}
- void PanelEditor::elmChanged(C UID &elm_id)
- {
- if(elm && elm->id==elm_id)
- {
- undos.set(null, true);
- EditPanel temp; if(temp.load(Proj.editPath(*elm)))if(edit.sync(temp))toGui();
- }
- }
- void PanelEditor::erasing(C UID &elm_id) {if(elm && elm->id==elm_id)set(null);}
- void PanelEditor::drag(Memc<UID> &elms, GuiObj *obj, C Vec2 &screen_pos)
- {
- if(contains(obj) && elms.elms())
- {
- }
- }
- PanelEditor::PanelEditor() : elm_id(UIDZero), elm(null), changed(false), undos(true) {}
- PanelEditor::GuiPanel::GuiPanel() : clip_x(0) {}
- /******************************************************************************/
|