File: StateUpdateTheme.cpp

package info (click to toggle)
xmoto 0.5.11%2Bdfsg-8
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 80,908 kB
  • sloc: cpp: 96,757; ansic: 22,196; sh: 4,940; makefile: 1,073; yacc: 289; sed: 16
file content (90 lines) | stat: -rw-r--r-- 2,960 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*=============================================================================
XMOTO

This file is part of XMOTO.

XMOTO 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 2 of the License, or
(at your option) any later version.

XMOTO 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 XMOTO; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
=============================================================================*/

#include "StateUpdateTheme.h"
#include "../Game.h"
#include "../GameText.h"
#include "StateMessageBox.h"
#include "../thread/UpdateThemeThread.h"
#include "../helpers/Log.h"

StateUpdateTheme::StateUpdateTheme(const std::string& i_id_theme,
				   bool drawStateBehind,
				   bool updateStatesBehind)
  : StateUpdate(drawStateBehind, updateStatesBehind)
{
  m_pThread          = new UpdateThemeThread(i_id_theme);
  m_name             = "StateUpdateTheme";
  m_id_theme         = i_id_theme;
  m_msg              = GAMETEXT_FAILEDGETSELECTEDTHEME + std::string("\n") + GAMETEXT_CHECK_YOUR_WWW;
}

StateUpdateTheme::~StateUpdateTheme()
{
  delete m_pThread;
}

void StateUpdateTheme::callAfterThreadFinished(int threadResult)
{
  if(threadResult == 0){
    GameApp::instance()->reloadTheme();
  }
}

bool StateUpdateTheme::callBeforeLaunchingThread()
{
  char **v_result;
  unsigned int nrow;
  bool v_onWeb  = true;

  v_result = xmDatabase::instance("main")->readDB("SELECT a.id_theme, a.checkSum, b.checkSum "
						  "FROM themes AS a LEFT OUTER JOIN webthemes AS b "
						  "ON a.id_theme=b.id_theme "
						  "WHERE a.id_theme=\"" + xmDatabase::protectString(m_id_theme) + "\";",
						  nrow);
  if(nrow == 1) {
    if(xmDatabase::instance("main")->getResult(v_result, 3, 0, 2) == NULL) {
      v_onWeb = false;
    }
  }
  xmDatabase::instance("main")->read_DB_free(v_result);

  if(v_onWeb == false) { /* available on the disk, not on the web */
    StateMessageBox* v_msgboxState = new StateMessageBox(this, GAMETEXT_UNUPDATABLETHEMEONWEB, UI_MSGBOX_OK);
    v_msgboxState->setMsgBxId("ERROR");
    StateManager::instance()->pushState(v_msgboxState);
    return false;
  }

  return true;
}

void StateUpdateTheme::xmKey(InputEventType i_type, const XMKey& i_xmkey) {
  if(i_type == INPUT_DOWN && i_xmkey == XMKey(SDLK_ESCAPE, KMOD_NONE)) {
    m_pThread->askThreadToEnd();
  }

  else if(i_type == INPUT_DOWN && i_xmkey == (*InputHandler::instance()->getGlobalKey(INPUT_KILLPROCESS))) {
    if(m_threadStarted == true) {
      m_messageOnFailure = false;
      m_pThread->safeKill();
    }
  }
}