Fast quit option (disable to make "X" act like in tpt)

This commit is contained in:
jacob1 2012-10-03 18:55:19 -04:00 committed by Simon Robertshaw
parent 71db872e64
commit 97cea273e5
9 changed files with 62 additions and 4 deletions

View File

@ -309,7 +309,8 @@ void EngineProcess()
switch (event.type) switch (event.type)
{ {
case SDL_QUIT: case SDL_QUIT:
engine->Exit(); if (engine->GetFastQuit() || engine->CloseWindow())
engine->Exit();
break; break;
case SDL_KEYDOWN: case SDL_KEYDOWN:
engine->onKeyPress(event.key.keysym.sym, event.key.keysym.unicode, event.key.keysym.mod&KEY_MOD_LSHIFT, event.key.keysym.mod&KEY_MOD_LCONTROL, event.key.keysym.mod&KEY_MOD_LALT); engine->onKeyPress(event.key.keysym.sym, event.key.keysym.unicode, event.key.keysym.mod&KEY_MOD_LSHIFT, event.key.keysym.mod&KEY_MOD_LCONTROL, event.key.keysym.mod&KEY_MOD_LALT);
@ -491,6 +492,7 @@ int main(int argc, char * argv[])
engine = &ui::Engine::Ref(); engine = &ui::Engine::Ref();
engine->SetMaxSize(desktopWidth, desktopHeight); engine->SetMaxSize(desktopWidth, desktopHeight);
engine->Begin(XRES+BARSIZE, YRES+MENUSIZE); engine->Begin(XRES+BARSIZE, YRES+MENUSIZE);
engine->SetFastQuit(Client::Ref().GetPrefBool("FastQuit", true));
GameController * gameController = new GameController(); GameController * gameController = new GameController();
engine->ShowWindow(gameController->GetView()); engine->ShowWindow(gameController->GetView());

View File

@ -30,6 +30,7 @@ Engine::Engine():
FrameIndex(0), FrameIndex(0),
Fullscreen(false), Fullscreen(false),
Scale(1), Scale(1),
FastQuit(1),
break_(false), break_(false),
lastTick(0) lastTick(0)
{ {
@ -109,7 +110,7 @@ void Engine::ShowWindow(Window * window)
} }
void Engine::CloseWindow() int Engine::CloseWindow()
{ {
if(!windows.empty()) if(!windows.empty())
{ {
@ -139,10 +140,12 @@ void Engine::CloseWindow()
mousexp_ = mousex_; mousexp_ = mousex_;
mouseyp_ = mousey_; mouseyp_ = mousey_;
} }
return 0;
} }
else else
{ {
state_ = NULL; state_ = NULL;
return 1;
} }
} }

View File

@ -22,7 +22,7 @@ namespace ui
~Engine(); ~Engine();
void ShowWindow(Window * window); void ShowWindow(Window * window);
void CloseWindow(); int CloseWindow();
void onMouseMove(int x, int y); void onMouseMove(int x, int y);
void onMouseClick(int x, int y, unsigned button); void onMouseClick(int x, int y, unsigned button);
@ -46,6 +46,8 @@ namespace ui
inline bool GetFullscreen() { return Fullscreen; } inline bool GetFullscreen() { return Fullscreen; }
void SetScale(int scale) { Scale = scale; } void SetScale(int scale) { Scale = scale; }
inline int GetScale() { return Scale; } inline int GetScale() { return Scale; }
void SetFastQuit(bool fastquit) { FastQuit = fastquit; }
inline bool GetFastQuit() {return FastQuit; }
void Tick(); void Tick();
void Draw(); void Draw();
@ -88,6 +90,7 @@ namespace ui
bool running_; bool running_;
bool break_; bool break_;
bool FastQuit;
int lastTick; int lastTick;
int mouseb_; int mouseb_;

View File

@ -78,6 +78,11 @@ void OptionsController::SetScale(bool scale)
} }
void OptionsController::SetFastQuit(bool fastquit)
{
model->SetFastQuit(fastquit);
}
OptionsView * OptionsController::GetView() OptionsView * OptionsController::GetView()
{ {
return view; return view;

View File

@ -33,6 +33,7 @@ public:
void SetEdgeMode(int airMode); void SetEdgeMode(int airMode);
void SetFullscreen(bool fullscreen); void SetFullscreen(bool fullscreen);
void SetScale(bool scale); void SetScale(bool scale);
void SetFastQuit(bool fastquit);
void Exit(); void Exit();
OptionsView * GetView(); OptionsView * GetView();
virtual ~OptionsController(); virtual ~OptionsController();

View File

@ -120,6 +120,17 @@ void OptionsModel::SetFullscreen(bool fullscreen)
notifySettingsChanged(); notifySettingsChanged();
} }
bool OptionsModel::GetFastQuit()
{
return ui::Engine::Ref().GetFastQuit();
}
void OptionsModel::SetFastQuit(bool fastquit)
{
ui::Engine::Ref().SetFastQuit(fastquit);
Client::Ref().SetPref("FastQuit", bool(fastquit));
notifySettingsChanged();
}
void OptionsModel::notifySettingsChanged() void OptionsModel::notifySettingsChanged()
{ {
for(int i = 0; i < observers.size(); i++) for(int i = 0; i < observers.size(); i++)

View File

@ -38,6 +38,8 @@ public:
void SetGravityMode(int gravityMode); void SetGravityMode(int gravityMode);
bool GetFullscreen(); bool GetFullscreen();
void SetFullscreen(bool fullscreen); void SetFullscreen(bool fullscreen);
bool GetFastQuit();
void SetFastQuit(bool fastquit);
bool GetScale(); bool GetScale();
void SetScale(bool scale); void SetScale(bool scale);
virtual ~OptionsModel(); virtual ~OptionsModel();

View File

@ -12,7 +12,7 @@
#include "interface/DropDown.h" #include "interface/DropDown.h"
OptionsView::OptionsView(): OptionsView::OptionsView():
ui::Window(ui::Point(-1, -1), ui::Point(300, 270)){ ui::Window(ui::Point(-1, -1), ui::Point(300, 290)){
ui::Label * tempLabel = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 14), "Simulation Options"); ui::Label * tempLabel = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 14), "Simulation Options");
tempLabel->SetTextColour(style::Colour::InformationTitle); tempLabel->SetTextColour(style::Colour::InformationTitle);
@ -146,8 +146,12 @@ OptionsView::OptionsView():
scale = new ui::Checkbox(ui::Point(8, 210), ui::Point(Size.X-6, 16), "Large screen", ""); scale = new ui::Checkbox(ui::Point(8, 210), ui::Point(Size.X-6, 16), "Large screen", "");
scale->SetActionCallback(new ScaleAction(this)); scale->SetActionCallback(new ScaleAction(this));
tempLabel = new ui::Label(ui::Point(scale->Position.X+Graphics::textwidth(scale->GetText().c_str())+20, scale->Position.Y), ui::Point(Size.X-28, 16), "\bg- Double window size for smaller screen");
tempLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; tempLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
AddComponent(tempLabel);
AddComponent(scale); AddComponent(scale);
class FullscreenAction: public ui::CheckboxAction class FullscreenAction: public ui::CheckboxAction
{ {
OptionsView * v; OptionsView * v;
@ -158,8 +162,27 @@ OptionsView::OptionsView():
fullscreen = new ui::Checkbox(ui::Point(8, 230), ui::Point(Size.X-6, 16), "Fullscreen", ""); fullscreen = new ui::Checkbox(ui::Point(8, 230), ui::Point(Size.X-6, 16), "Fullscreen", "");
fullscreen->SetActionCallback(new FullscreenAction(this)); fullscreen->SetActionCallback(new FullscreenAction(this));
tempLabel = new ui::Label(ui::Point(fullscreen->Position.X+Graphics::textwidth(fullscreen->GetText().c_str())+20, fullscreen->Position.Y), ui::Point(Size.X-28, 16), "\bg- Use the entire screen");
tempLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; tempLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
AddComponent(tempLabel);
AddComponent(fullscreen); AddComponent(fullscreen);
class FastQuitAction: public ui::CheckboxAction
{
OptionsView * v;
public:
FastQuitAction(OptionsView * v_){ v = v_; }
virtual void ActionCallback(ui::Checkbox * sender){ v->c->SetFastQuit(sender->GetChecked()); }
};
fastquit = new ui::Checkbox(ui::Point(8, 250), ui::Point(Size.X-6, 16), "Fast Quit", "");
fastquit->SetActionCallback(new FastQuitAction(this));
tempLabel = new ui::Label(ui::Point(fastquit->Position.X+Graphics::textwidth(fastquit->GetText().c_str())+20, fastquit->Position.Y), ui::Point(Size.X-28, 16), "\bg- Always exit completely when hitting close");
tempLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; tempLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
AddComponent(tempLabel);
AddComponent(fastquit);
class CloseAction: public ui::ButtonAction class CloseAction: public ui::ButtonAction
{ {
public: public:
@ -189,6 +212,7 @@ void OptionsView::NotifySettingsChanged(OptionsModel * sender)
edgeMode->SetOption(sender->GetEdgeMode()); edgeMode->SetOption(sender->GetEdgeMode());
scale->SetChecked(sender->GetScale()); scale->SetChecked(sender->GetScale());
fullscreen->SetChecked(sender->GetFullscreen()); fullscreen->SetChecked(sender->GetFullscreen());
fastquit->SetChecked(sender->GetFastQuit());
} }
void OptionsView::AttachController(OptionsController * c_) void OptionsView::AttachController(OptionsController * c_)
@ -204,6 +228,11 @@ void OptionsView::OnDraw()
g->draw_line(Position.X+1, Position.Y+scale->Position.Y-4, Position.X+Size.X-1, Position.Y+scale->Position.Y-4, 255, 255, 255, 180); g->draw_line(Position.X+1, Position.Y+scale->Position.Y-4, Position.X+Size.X-1, Position.Y+scale->Position.Y-4, 255, 255, 255, 180);
} }
void OptionsView::OnTryExit(ExitMethod method)
{
c->Exit();
}
OptionsView::~OptionsView() { OptionsView::~OptionsView() {
// TODO Auto-generated destructor stub // TODO Auto-generated destructor stub

View File

@ -27,11 +27,13 @@ class OptionsView: public ui::Window {
ui::DropDown * edgeMode; ui::DropDown * edgeMode;
ui::Checkbox * scale; ui::Checkbox * scale;
ui::Checkbox * fullscreen; ui::Checkbox * fullscreen;
ui::Checkbox * fastquit;
public: public:
OptionsView(); OptionsView();
void NotifySettingsChanged(OptionsModel * sender); void NotifySettingsChanged(OptionsModel * sender);
void AttachController(OptionsController * c_); void AttachController(OptionsController * c_);
void OnDraw(); void OnDraw();
void OnTryExit(ExitMethod method);
virtual ~OptionsView(); virtual ~OptionsView();
}; };