//////////////////////////////////////////////////////////////////////
// This file is part of Remere's Map Editor
//////////////////////////////////////////////////////////////////////
// Remere's Map Editor 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 3 of the License, or
// (at your option) any later version.
//
// Remere's Map Editor 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, see .
//////////////////////////////////////////////////////////////////////
#ifndef RME_PALETTE_COMMONS_H_
#define RME_PALETTE_COMMONS_H_
#include "main.h"
#include "dcbutton.h"
#include "tileset.h"
#include "gui_ids.h"
#include "common_windows.h"
class GUI;
class BrushButton;
class TilesetCategory;
class BrushSizePanel;
class BrushPalettePanel;
class PaletteWindow;
typedef TilesetCategoryType PaletteType;
class BrushButton : public ItemToggleButton {
public:
BrushButton(wxWindow* parent, Brush* brush, RenderSize, uint32_t id = wxID_ANY);
BrushButton(wxWindow* parent, Brush* brush, RenderSize, EditorSprite* espr, uint32_t id = wxID_ANY);
virtual ~BrushButton();
Brush* brush;
void OnKey(wxKeyEvent& event);
DECLARE_EVENT_TABLE()
};
class PalettePanel : public wxPanel {
public:
PalettePanel(wxWindow* parent, wxWindowID id = wxID_ANY, long style = wxTAB_TRAVERSAL);
~PalettePanel();
// Interface
// Flushes this panel and consequent views will feature reloaded data
virtual void InvalidateContents();
// Loads the currently displayed page
virtual void LoadCurrentContents();
// Loads all content in this panel
virtual void LoadAllContents();
PaletteWindow* GetParentPalette() const;
virtual wxString GetName() const;
virtual PaletteType GetType() const;
// Add a tool panel!
virtual void AddToolPanel(PalettePanel* panel);
// Sets the style for this toolbar and child toolabrs
virtual void SetToolbarIconSize(bool large_icons);
// Select the first brush
virtual void SelectFirstBrush();
// Returns the currently selected brush (First brush if panel is not loaded)
virtual Brush* GetSelectedBrush() const;
// Returns the currently selected brush size
virtual int GetSelectedBrushSize() const;
// Select the brush in the parameter, this only changes the look of the panel
virtual bool SelectBrush(const Brush* whatbrush);
virtual void DeselectAll() { }
// Updates the palette window to use the current brush size
virtual void OnUpdateBrushSize(BrushShape shape, int size);
// Called when this page is about to be displayed
virtual void OnSwitchIn();
// Called when this page is hidden
virtual void OnSwitchOut();
// Called sometimes
virtual void OnUpdate();
// When the palette should do a delayed refresh (necessary for multiple palettes)
void OnRefreshTimer(wxTimerEvent&);
void RefreshOtherPalettes();
protected:
typedef std::vector ToolBarList;
ToolBarList tool_bars;
wxTimer refresh_timer;
int last_brush_size;
DECLARE_EVENT_TABLE();
};
class ZoneBrushPanel : public PalettePanel {
public:
ZoneBrushPanel(wxWindow* parent);
~ZoneBrushPanel() { }
// Interface
// Flushes this panel and consequent views will feature reloaded data
void InvalidateContents();
// Loads the currently displayed page
void LoadCurrentContents();
// Loads all content in this panel
void LoadAllContents();
// Returns the currently selected brush (First brush if panel is not loaded)
Brush* GetSelectedBrush() const;
// Select the brush in the parameter, this only changes the look of the panel
bool SelectBrush(const Brush* whatbrush);
wxString GetName() const;
void SetToolbarIconSize(bool large);
void OnZoneIdChange(wxCommandEvent& WXUNUSED(event));
// Called when this page is displayed
void OnSwitchIn();
// wxWidgets event handling
void OnClickZoneBrushButton(wxCommandEvent& event);
void DeselectAll();
protected:
bool loaded;
bool large_icons;
BrushButton* zoneButton;
wxSpinCtrl* zoneIdSpin;
DECLARE_EVENT_TABLE()
};
class BrushSizePanel : public PalettePanel {
public:
BrushSizePanel(wxWindow* parent);
~BrushSizePanel() { }
// Interface
// Flushes this panel and consequent views will feature reloaded data
void InvalidateContents();
// Loads the currently displayed page
void LoadCurrentContents();
// Loads all content in this panel
void LoadAllContents();
wxString GetName() const;
void SetToolbarIconSize(bool large);
// Updates the palette window to use the current brush size
void OnUpdateBrushSize(BrushShape shape, int size);
// Called when this page is displayed
void OnSwitchIn();
// wxWidgets event handling
void OnClickSquareBrush(wxCommandEvent& event);
void OnClickCircleBrush(wxCommandEvent& event);
void OnClickBrushSize(int which);
void OnClickBrushSize0(wxCommandEvent& event) {
OnClickBrushSize(0);
}
void OnClickBrushSize1(wxCommandEvent& event) {
OnClickBrushSize(1);
}
void OnClickBrushSize2(wxCommandEvent& event) {
OnClickBrushSize(2);
}
void OnClickBrushSize4(wxCommandEvent& event) {
OnClickBrushSize(4);
}
void OnClickBrushSize6(wxCommandEvent& event) {
OnClickBrushSize(6);
}
void OnClickBrushSize8(wxCommandEvent& event) {
OnClickBrushSize(8);
}
void OnClickBrushSize11(wxCommandEvent& event) {
OnClickBrushSize(11);
}
protected:
bool loaded;
bool large_icons;
DCButton* brushshapeSquareButton;
DCButton* brushshapeCircleButton;
DCButton* brushsize0Button;
DCButton* brushsize1Button;
DCButton* brushsize2Button;
DCButton* brushsize4Button;
DCButton* brushsize6Button;
DCButton* brushsize8Button;
DCButton* brushsize11Button;
DECLARE_EVENT_TABLE()
};
class BrushToolPanel : public PalettePanel {
public:
BrushToolPanel(wxWindow* parent);
~BrushToolPanel();
// Interface
// Flushes this panel and consequent views will feature reloaded data
void InvalidateContents();
// Loads the currently displayed page
void LoadCurrentContents();
// Loads all content in this panel
void LoadAllContents();
wxString GetName() const;
void SetToolbarIconSize(bool large);
// Returns the currently selected brush (First brush if panel is not loaded)
Brush* GetSelectedBrush() const;
// Select the brush in the parameter, this only changes the look of the panel
bool SelectBrush(const Brush* whatbrush);
// Called when this page is displayed
void OnSwitchIn();
// wxWidgets event handling
void OnClickGravelButton(wxCommandEvent& event);
void OnClickEraserButton(wxCommandEvent& event);
// ----
void OnClickNormalDoorButton(wxCommandEvent& event);
void OnClickLockedDoorButton(wxCommandEvent& event);
void OnClickMagicDoorButton(wxCommandEvent& event);
void OnClickQuestDoorButton(wxCommandEvent& event);
void OnClickHatchDoorButton(wxCommandEvent& event);
void OnClickWindowDoorButton(wxCommandEvent& event);
void OnClickNormalAltDoorButton(wxCommandEvent& event);
void OnClickArchwayDoorButton(wxCommandEvent& event);
// ----
void OnClickPZBrushButton(wxCommandEvent& event);
void OnClickNOPVPBrushButton(wxCommandEvent& event);
void OnClickNoLogoutBrushButton(wxCommandEvent& event);
void OnClickPVPZoneBrushButton(wxCommandEvent& event);
// ----
void OnClickLockDoorCheckbox(wxCommandEvent& event);
public:
void DeselectAll();
bool loaded;
bool large_icons;
BrushButton* optionalBorderButton;
BrushButton* eraserButton;
// ----
BrushButton* normalDoorButton;
BrushButton* lockedDoorButton;
BrushButton* magicDoorButton;
BrushButton* questDoorButton;
BrushButton* hatchDoorButton;
BrushButton* windowDoorButton;
BrushButton* normalDoorAltButton;
BrushButton* archwayDoorButton;
// ----
BrushButton* pzBrushButton;
BrushButton* nopvpBrushButton;
BrushButton* nologBrushButton;
BrushButton* pvpzoneBrushButton;
wxCheckBox* lockDoorCheckbox;
DECLARE_EVENT_TABLE()
};
class BrushThicknessPanel : public PalettePanel {
public:
BrushThicknessPanel(wxWindow* parent);
~BrushThicknessPanel();
// Interface
wxString GetName() const;
// Called when this page is displayed
void OnSwitchIn();
// wxWidgets event handling
void OnScroll(wxScrollEvent& event);
void OnClickCustomThickness(wxCommandEvent& event);
public:
wxSlider* slider;
wxCheckBox* use_button;
DECLARE_EVENT_TABLE()
};
#endif