Implement file drop handler (#666)
This commit is contained in:
parent
9faf95a858
commit
4383de7ad5
@ -400,6 +400,10 @@ void EventProcess(SDL_Event event)
|
|||||||
|
|
||||||
hasMouseMoved = true;
|
hasMouseMoved = true;
|
||||||
break;
|
break;
|
||||||
|
case SDL_DROPFILE:
|
||||||
|
engine->onFileDrop(event.drop.file);
|
||||||
|
SDL_free(event.drop.file);
|
||||||
|
break;
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
// if mouse hasn't moved yet, sdl will send 0,0. We don't want that
|
// if mouse hasn't moved yet, sdl will send 0,0. We don't want that
|
||||||
if (hasMouseMoved)
|
if (hasMouseMoved)
|
||||||
|
@ -1025,23 +1025,10 @@ void Client::MoveStampToFront(ByteString stampID)
|
|||||||
SaveFile * Client::GetStamp(ByteString stampID)
|
SaveFile * Client::GetStamp(ByteString stampID)
|
||||||
{
|
{
|
||||||
ByteString stampFile = ByteString(STAMPS_DIR PATH_SEP + stampID + ".stm");
|
ByteString stampFile = ByteString(STAMPS_DIR PATH_SEP + stampID + ".stm");
|
||||||
SaveFile * file = new SaveFile(stampID);
|
SaveFile *saveFile = LoadSaveFile(stampFile);
|
||||||
if (!FileExists(stampFile))
|
if (!saveFile)
|
||||||
stampFile = stampID;
|
saveFile = LoadSaveFile(stampID);
|
||||||
if (FileExists(stampFile))
|
return saveFile;
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
GameSave * tempSave = new GameSave(ReadFile(stampFile));
|
|
||||||
file->SetGameSave(tempSave);
|
|
||||||
}
|
|
||||||
catch (ParseException & e)
|
|
||||||
{
|
|
||||||
std::cerr << "Client: Invalid stamp file, " << stampID << " " << e.what() << std::endl;
|
|
||||||
file->SetLoadingError(ByteString(e.what()).FromUtf8());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return file;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::DeleteStamp(ByteString stampID)
|
void Client::DeleteStamp(ByteString stampID)
|
||||||
@ -1482,6 +1469,24 @@ SaveInfo * Client::GetSave(int saveID, int saveDate)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SaveFile * Client::LoadSaveFile(ByteString filename)
|
||||||
|
{
|
||||||
|
if (!FileExists(filename))
|
||||||
|
return nullptr;
|
||||||
|
SaveFile * file = new SaveFile(filename);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
GameSave * tempSave = new GameSave(ReadFile(filename));
|
||||||
|
file->SetGameSave(tempSave);
|
||||||
|
}
|
||||||
|
catch (ParseException & e)
|
||||||
|
{
|
||||||
|
std::cerr << "Client: Invalid save file '" << filename << "': " << e.what() << std::endl;
|
||||||
|
file->SetLoadingError(ByteString(e.what()).FromUtf8());
|
||||||
|
}
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<std::pair<ByteString, int> > * Client::GetTags(int start, int count, String query, int & resultCount)
|
std::vector<std::pair<ByteString, int> > * Client::GetTags(int start, int count, String query, int & resultCount)
|
||||||
{
|
{
|
||||||
lastError = "";
|
lastError = "";
|
||||||
|
@ -147,6 +147,7 @@ public:
|
|||||||
std::vector<std::pair<ByteString, int> > * GetTags(int start, int count, String query, int & resultCount);
|
std::vector<std::pair<ByteString, int> > * GetTags(int start, int count, String query, int & resultCount);
|
||||||
|
|
||||||
SaveInfo * GetSave(int saveID, int saveDate);
|
SaveInfo * GetSave(int saveID, int saveDate);
|
||||||
|
SaveFile * LoadSaveFile(ByteString filename);
|
||||||
|
|
||||||
RequestStatus DeleteSave(int saveID);
|
RequestStatus DeleteSave(int saveID);
|
||||||
RequestStatus ReportSave(int saveID, String message);
|
RequestStatus ReportSave(int saveID, String message);
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include "gui/Style.h"
|
#include "gui/Style.h"
|
||||||
#include "gui/dialogues/ConfirmPrompt.h"
|
#include "gui/dialogues/ConfirmPrompt.h"
|
||||||
|
#include "gui/dialogues/ErrorMessage.h"
|
||||||
#include "gui/dialogues/InformationMessage.h"
|
#include "gui/dialogues/InformationMessage.h"
|
||||||
#include "gui/interface/Button.h"
|
#include "gui/interface/Button.h"
|
||||||
#include "gui/interface/Colour.h"
|
#include "gui/interface/Colour.h"
|
||||||
@ -1705,6 +1706,29 @@ void GameView::OnBlur()
|
|||||||
c->Blur();
|
c->Blur();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameView::OnFileDrop(ByteString filename)
|
||||||
|
{
|
||||||
|
if (!(filename.EndsWith(".cps") || filename.EndsWith(".stm")))
|
||||||
|
{
|
||||||
|
new ErrorMessage("Error loading save", "Dropped file is not a TPT save file (.cps or .stm format)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveFile *saveFile = Client::Ref().LoadSaveFile(filename);
|
||||||
|
if (!saveFile)
|
||||||
|
return;
|
||||||
|
if (saveFile->GetError().length())
|
||||||
|
{
|
||||||
|
new ErrorMessage("Error loading save", "Dropped save file could not be loaded: " + saveFile->GetError());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
c->LoadSaveFile(saveFile);
|
||||||
|
delete saveFile;
|
||||||
|
|
||||||
|
// hide the info text if it's not already hidden
|
||||||
|
introText = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void GameView::OnTick(float dt)
|
void GameView::OnTick(float dt)
|
||||||
{
|
{
|
||||||
if (selectMode == PlaceSave && !placeSaveThumb)
|
if (selectMode == PlaceSave && !placeSaveThumb)
|
||||||
|
@ -196,6 +196,7 @@ public:
|
|||||||
void OnTick(float dt) override;
|
void OnTick(float dt) override;
|
||||||
void OnDraw() override;
|
void OnDraw() override;
|
||||||
void OnBlur() override;
|
void OnBlur() override;
|
||||||
|
void OnFileDrop(ByteString filename) override;
|
||||||
|
|
||||||
//Top-level handlers, for Lua interface
|
//Top-level handlers, for Lua interface
|
||||||
void DoExit() override;
|
void DoExit() override;
|
||||||
|
@ -313,3 +313,9 @@ void Engine::onClose()
|
|||||||
if (state_)
|
if (state_)
|
||||||
state_->DoExit();
|
state_->DoExit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Engine::onFileDrop(ByteString filename)
|
||||||
|
{
|
||||||
|
if (state_)
|
||||||
|
state_->DoFileDrop(filename);
|
||||||
|
}
|
||||||
|
@ -34,6 +34,7 @@ namespace ui
|
|||||||
void onTextInput(String text);
|
void onTextInput(String text);
|
||||||
void onResize(int newWidth, int newHeight);
|
void onResize(int newWidth, int newHeight);
|
||||||
void onClose();
|
void onClose();
|
||||||
|
void onFileDrop(ByteString filename);
|
||||||
|
|
||||||
void Begin(int width, int height);
|
void Begin(int width, int height);
|
||||||
inline bool Running() { return running_; }
|
inline bool Running() { return running_; }
|
||||||
|
@ -162,6 +162,11 @@ void Window::DoFocus()
|
|||||||
OnFocus();
|
OnFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Window::DoFileDrop(ByteString filename)
|
||||||
|
{
|
||||||
|
OnFileDrop(filename);
|
||||||
|
}
|
||||||
|
|
||||||
void Window::DoDraw()
|
void Window::DoDraw()
|
||||||
{
|
{
|
||||||
OnDraw();
|
OnDraw();
|
||||||
|
@ -59,6 +59,7 @@ namespace ui
|
|||||||
virtual void DoDraw();
|
virtual void DoDraw();
|
||||||
virtual void DoFocus();
|
virtual void DoFocus();
|
||||||
virtual void DoBlur();
|
virtual void DoBlur();
|
||||||
|
virtual void DoFileDrop(ByteString filename);
|
||||||
|
|
||||||
virtual void DoMouseMove(int x, int y, int dx, int dy);
|
virtual void DoMouseMove(int x, int y, int dx, int dy);
|
||||||
virtual void DoMouseDown(int x, int y, unsigned button);
|
virtual void DoMouseDown(int x, int y, unsigned button);
|
||||||
@ -94,6 +95,7 @@ namespace ui
|
|||||||
virtual void OnDraw() {}
|
virtual void OnDraw() {}
|
||||||
virtual void OnFocus() {}
|
virtual void OnFocus() {}
|
||||||
virtual void OnBlur() {}
|
virtual void OnBlur() {}
|
||||||
|
virtual void OnFileDrop(ByteString filename) {}
|
||||||
|
|
||||||
virtual void OnTryExit(ExitMethod);
|
virtual void OnTryExit(ExitMethod);
|
||||||
virtual void OnTryOkay(OkayMethod);
|
virtual void OnTryOkay(OkayMethod);
|
||||||
|
Reference in New Issue
Block a user