mirror of
https://github.com/opentibiabr/remeres-map-editor
synced 2026-08-15 18:26:04 -04:00
239 lines
6.7 KiB
C++
239 lines
6.7 KiB
C++
//////////////////////////////////////////////////////////////////////
|
|
// 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 <http://www.gnu.org/licenses/>.
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
// ============================================================================
|
|
// Waypoint palette
|
|
|
|
#include "main.h"
|
|
|
|
#include "gui.h"
|
|
#include "palette_waypoints.h"
|
|
#include "waypoint_brush.h"
|
|
#include "map.h"
|
|
|
|
BEGIN_EVENT_TABLE(WaypointPalettePanel, PalettePanel)
|
|
EVT_BUTTON(PALETTE_WAYPOINT_ADD_WAYPOINT, WaypointPalettePanel::OnClickAddWaypoint)
|
|
EVT_BUTTON(PALETTE_WAYPOINT_REMOVE_WAYPOINT, WaypointPalettePanel::OnClickRemoveWaypoint)
|
|
|
|
EVT_LIST_BEGIN_LABEL_EDIT(PALETTE_WAYPOINT_LISTBOX, WaypointPalettePanel::OnBeginEditWaypointLabel)
|
|
EVT_LIST_END_LABEL_EDIT(PALETTE_WAYPOINT_LISTBOX, WaypointPalettePanel::OnEditWaypointLabel)
|
|
EVT_LIST_ITEM_SELECTED(PALETTE_WAYPOINT_LISTBOX, WaypointPalettePanel::OnClickWaypoint)
|
|
END_EVENT_TABLE()
|
|
|
|
WaypointPalettePanel::WaypointPalettePanel(wxWindow* parent, wxWindowID id) :
|
|
PalettePanel(parent, id),
|
|
map(nullptr)
|
|
{
|
|
wxSizer* sidesizer = newd wxStaticBoxSizer(wxVERTICAL, this, "Waypoints");
|
|
|
|
waypoint_list = newd wxListCtrl(this, PALETTE_WAYPOINT_LISTBOX,
|
|
wxDefaultPosition, wxDefaultSize,
|
|
wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_EDIT_LABELS | wxLC_NO_HEADER);
|
|
waypoint_list->InsertColumn(0, "UNNAMED", wxLIST_FORMAT_LEFT, 200);
|
|
sidesizer->Add(waypoint_list, 1, wxEXPAND);
|
|
|
|
wxSizer* tmpsizer = newd wxBoxSizer(wxHORIZONTAL);
|
|
tmpsizer->Add(add_waypoint_button = newd wxButton(this, PALETTE_WAYPOINT_ADD_WAYPOINT, "Add", wxDefaultPosition, wxSize(50, -1)), 1, wxEXPAND);
|
|
tmpsizer->Add(remove_waypoint_button = newd wxButton(this, PALETTE_WAYPOINT_REMOVE_WAYPOINT, "Remove", wxDefaultPosition, wxSize(70, -1)), 1, wxEXPAND);
|
|
sidesizer->Add(tmpsizer, 0, wxEXPAND);
|
|
|
|
SetSizerAndFit(sidesizer);
|
|
}
|
|
|
|
WaypointPalettePanel::~WaypointPalettePanel()
|
|
{
|
|
////
|
|
}
|
|
|
|
|
|
void WaypointPalettePanel::OnSwitchIn()
|
|
{
|
|
PalettePanel::OnSwitchIn();
|
|
}
|
|
|
|
void WaypointPalettePanel::OnSwitchOut()
|
|
{
|
|
PalettePanel::OnSwitchOut();
|
|
}
|
|
|
|
void WaypointPalettePanel::SetMap(Map* m)
|
|
{
|
|
map = m;
|
|
this->Enable(m && m->getVersion().otbm >= MAP_OTBM_3);
|
|
}
|
|
|
|
void WaypointPalettePanel::SelectFirstBrush()
|
|
{
|
|
//SelectWaypointBrush();
|
|
}
|
|
|
|
Brush* WaypointPalettePanel::GetSelectedBrush() const
|
|
{
|
|
long item = waypoint_list->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
|
|
g_gui.waypoint_brush->setWaypoint(
|
|
item == -1?
|
|
nullptr :
|
|
map->waypoints.getWaypoint(nstr(waypoint_list->GetItemText(item)))
|
|
);
|
|
return g_gui.waypoint_brush;
|
|
}
|
|
|
|
bool WaypointPalettePanel::SelectBrush(const Brush* whatbrush)
|
|
{
|
|
ASSERT(whatbrush == g_gui.waypoint_brush);
|
|
return false;
|
|
}
|
|
|
|
int WaypointPalettePanel::GetSelectedBrushSize() const
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
PaletteType WaypointPalettePanel::GetType() const
|
|
{
|
|
return TILESET_WAYPOINT;
|
|
}
|
|
|
|
wxString WaypointPalettePanel::GetName() const
|
|
{
|
|
return "Waypoint Palette";
|
|
}
|
|
|
|
void WaypointPalettePanel::OnUpdate()
|
|
{
|
|
if(wxTextCtrl* tc = waypoint_list->GetEditControl()) {
|
|
Waypoint* wp = map->waypoints.getWaypoint(nstr(tc->GetValue()));
|
|
if(wp && wp->pos == Position()) {
|
|
if(map->getTile(wp->pos))
|
|
map->getTileL(wp->pos)->decreaseWaypointCount();
|
|
map->waypoints.removeWaypoint(wp->name);
|
|
}
|
|
}
|
|
waypoint_list->DeleteAllItems();
|
|
|
|
if(!map){
|
|
waypoint_list->Enable(false);
|
|
add_waypoint_button->Enable(false);
|
|
remove_waypoint_button->Enable(false);
|
|
} else {
|
|
waypoint_list->Enable(true);
|
|
add_waypoint_button->Enable(true);
|
|
remove_waypoint_button->Enable(true);
|
|
|
|
Waypoints& waypoints = map->waypoints;
|
|
|
|
for(WaypointMap::const_iterator iter = waypoints.begin(); iter != waypoints.end(); ++iter) {
|
|
waypoint_list->InsertItem(0, wxstr(iter->second->name));
|
|
}
|
|
}
|
|
}
|
|
|
|
void WaypointPalettePanel::OnClickWaypoint(wxListEvent& event)
|
|
{
|
|
if(!map)
|
|
return;
|
|
|
|
std::string wpname = nstr(event.GetText());
|
|
Waypoint* wp = map->waypoints.getWaypoint(wpname);
|
|
if(wp) {
|
|
g_gui.SetScreenCenterPosition(wp->pos);
|
|
g_gui.waypoint_brush->setWaypoint(wp);
|
|
}
|
|
}
|
|
|
|
void WaypointPalettePanel::OnBeginEditWaypointLabel(wxListEvent& event)
|
|
{
|
|
// We need to disable all hotkeys, so we can type properly
|
|
g_gui.DisableHotkeys();
|
|
}
|
|
|
|
void WaypointPalettePanel::OnEditWaypointLabel(wxListEvent& event)
|
|
{
|
|
std::string wpname = nstr(event.GetLabel());
|
|
std::string oldwpname = nstr(waypoint_list->GetItemText(event.GetIndex()));
|
|
Waypoint* wp = map->waypoints.getWaypoint(oldwpname);
|
|
|
|
if(event.IsEditCancelled())
|
|
return;
|
|
|
|
if(wpname == "") {
|
|
map->waypoints.removeWaypoint(oldwpname);
|
|
g_gui.RefreshPalettes();
|
|
} else if(wp) {
|
|
if(wpname == oldwpname) {
|
|
; // do nothing
|
|
} else {
|
|
if(map->waypoints.getWaypoint(wpname)) {
|
|
// Already exists a waypoint with this name!
|
|
g_gui.SetStatusText("There already is a waypoint with this name.");
|
|
event.Veto();
|
|
if(oldwpname == "") {
|
|
map->waypoints.removeWaypoint(oldwpname);
|
|
g_gui.RefreshPalettes();
|
|
}
|
|
} else {
|
|
Waypoint* nwp = newd Waypoint(*wp);
|
|
nwp->name = wpname;
|
|
|
|
Waypoint* rwp = map->waypoints.getWaypoint(oldwpname);
|
|
if(rwp) {
|
|
if(map->getTile(rwp->pos))
|
|
map->getTileL(rwp->pos)->decreaseWaypointCount();
|
|
map->waypoints.removeWaypoint(rwp->name);
|
|
}
|
|
|
|
map->waypoints.addWaypoint(nwp);
|
|
g_gui.waypoint_brush->setWaypoint(nwp);
|
|
|
|
// Refresh other palettes
|
|
refresh_timer.Start(300, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(event.IsAllowed())
|
|
g_gui.EnableHotkeys();
|
|
}
|
|
|
|
void WaypointPalettePanel::OnClickAddWaypoint(wxCommandEvent& event)
|
|
{
|
|
if(map) {
|
|
map->waypoints.addWaypoint(newd Waypoint());
|
|
long i = waypoint_list->InsertItem(0, "");
|
|
waypoint_list->EditLabel(i);
|
|
|
|
//g_gui.RefreshPalettes();
|
|
}
|
|
}
|
|
|
|
void WaypointPalettePanel::OnClickRemoveWaypoint(wxCommandEvent& event)
|
|
{
|
|
if(!map)
|
|
return;
|
|
|
|
long item = waypoint_list->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
|
|
if(item != -1) {
|
|
Waypoint* wp = map->waypoints.getWaypoint(nstr(waypoint_list->GetItemText(item)));
|
|
if(wp) {
|
|
if(map->getTile(wp->pos))
|
|
map->getTileL(wp->pos)->decreaseWaypointCount();
|
|
map->waypoints.removeWaypoint(wp->name);
|
|
}
|
|
waypoint_list->DeleteItem(item);
|
|
refresh_timer.Start(300, true);
|
|
}
|
|
}
|