コード例 #1
0
ファイル: http_client.cpp プロジェクト: songhtdo/vespa
bool
HttpClient::readStatus()
{
    LineReader reader(_conn->stream());
    if (reader.readLine(_line) && (splitstr(_line, "\t ", _split) >= 2)) {
        if (_split[0] == "HTTP/1.0") {
            _header.version = 0;
        } else if (_split[0] == "HTTP/1.1") {
            _header.version = 1;
        } else {
            _handler.handleFailure(strfmt("unknown HTTP version: '%s'", _split[0].c_str()));
            return false;
        }
        _header.status = atoi(_split[1].c_str());
        if (_header.status != 200) {
            _handler.handleFailure(strfmt("HTTP status not 200: '%s'", _split[1].c_str()));
            return false;
        }
        return true;
    }
    if (_conn->stream().tainted()) {
        _handler.handleFailure(strfmt("Connection error: %s",
                                      _conn->stream().tainted().reason().c_str()));
    } else {
        _handler.handleFailure(strfmt("could not parse HTTP status line: '%s'", _line.c_str()));
    }
    return false;
}
コード例 #2
0
ファイル: vars.c プロジェクト: smaclennan/zedit
void Zshow_config(void)
{
	int i;
	char line[STRMAX * 2];
	zbuff_t *tbuff = cmakebuff(CONFBUFF, NULL);
	if (!tbuff)
		return;

	bempty(Bbuff);
	for (i = 0; i < NUMVARS; ++i) {
		if (Vars[i].vtype == V_STRING) {
			if (VARSTR(i))
				strfmt(line, sizeof(line), "%-15s %s\n",
					 Vars[i].vname, VARSTR(i));
			else
				strfmt(line, sizeof(line), "#%-15s\n",
					 Vars[i].vname);
		} else if (Vars[i].vtype == V_DECIMAL)
			strfmt(line, sizeof(line), "%-15s %d\n",
				 Vars[i].vname, VAR(i));
		else if (Vars[i].vtype == V_FLAG)
			strfmt(line, sizeof(line), "%-15s %s\n",
				 Vars[i].vname,
				 VAR(i) ? "true" : "false");

		binstr(Bbuff, line);
	}

	tbuff->buff->bmodf = false;
	btostart(Bbuff);
	cswitchto(tbuff);
}
コード例 #3
0
  std::string create_summary(const grt::ListRef<GrtObject> &objects)
  {
    std::map<std::string, Summary> schema_summary;
    
    std::string summary= _("Summary of Reverse Engineered Objects:\n\n");

    for(grt::ListRef<GrtObject>::const_iterator iter= objects.begin();
        iter != objects.end(); ++iter)
    {
      std::string owner_name= (*iter)->owner()->name();

      if ((*iter).is_instance<db_Schema>())
      {
        if (schema_summary.find((*iter)->id()) == schema_summary.end())
        {
          Summary s;
          schema_summary[(*iter)->name()]= s;
        }
      }
      else if ((*iter).is_instance<db_Table>())
        schema_summary[owner_name].tables++;
      else if ((*iter).is_instance<db_View>())
        schema_summary[owner_name].views++;
      else if ((*iter).is_instance<db_Routine>())
        schema_summary[owner_name].routines++;
    }

    for (std::map<std::string,Summary>::const_iterator iter= schema_summary.begin();
         iter != schema_summary.end(); ++iter)
    {
      if (iter->second.tables == 0 && iter->second.views == 0 && iter->second.routines == 0)
        summary.append(strfmt(_(" - empty schema '%s'\n"), iter->first.c_str()));
      else
      {
        summary.append(" - ");
        std::string sep= "";
        if (iter->second.tables > 0)
        {
          summary.append(strfmt(_("%i tables"), iter->second.tables));
          sep= ", ";
        }
        if (iter->second.views > 0)
        {
          summary.append(strfmt(_("%s%i views"), sep.c_str(), iter->second.views));
          sep= ", ";
        }
        if (iter->second.routines > 0)
        {
          summary.append(strfmt(_("%s%i routines"), sep.c_str(), iter->second.routines));
          sep= ", ";
        }
        summary.append(strfmt(_(" from schema '%s'\n"), iter->first.c_str()));
      }
    }
    
    return summary;
  }
コード例 #4
0
ファイル: setup_generic.c プロジェクト: laochailan/taisei
static void load_packages(const char *dir, const char *unionmp) {
	// go over the packages in dir in alphapetical order and merge them into unionmp
	// e.g. files in 00-aaa.zip will be shadowed by files in 99-zzz.zip

	size_t numpaks = 0;
	char **paklist = vfs_dir_list_sorted(dir, &numpaks, vfs_dir_list_order_ascending, NULL);

	if(!paklist) {
		log_fatal("VFS error: %s", vfs_get_error());
	}

	for(size_t i = 0; i < numpaks; ++i) {
		const char *entry = paklist[i];
		struct pkg_loader_t *loader = find_loader(entry);

		if(loader == NULL) {
			continue;
		}

		log_info("Adding package: %s", entry);
		assert(loader->mount != NULL);

		char *tmp = strfmt("%s/%s", dir, entry);

		if(!loader->mount(unionmp, tmp)) {
			log_error("VFS error: %s", vfs_get_error());
		}

		free(tmp);
	}

	vfs_dir_list_free(paklist, numpaks);
}
コード例 #5
0
ファイル: setup_generic.c プロジェクト: laochailan/taisei
static void get_core_paths(char **res, char **storage, char **cache) {
	if(*(*res = (char*)env_get("TAISEI_RES_PATH", ""))) {
		*res = strdup(*res);
	} else {
		*res = get_default_res_path();
	}

	if(*(*storage = (char*)env_get("TAISEI_STORAGE_PATH", ""))) {
		*storage = strdup(*storage);
	} else {
		*storage = SDL_GetPrefPath("", "taisei");
	}

	if(*(*cache = (char*)env_get("TAISEI_CACHE_PATH", ""))) {
		*cache = strdup(*cache);
	} else {
		// TODO: follow XDG on linux
		if(*storage != NULL) {
			*cache = strfmt("%s%ccache", *storage, vfs_get_syspath_separator());
		} else {
			*cache = NULL;
		}
	}

	if(*res)     vfs_syspath_normalize_inplace(*res);
	if(*storage) vfs_syspath_normalize_inplace(*storage);
	if(*cache)   vfs_syspath_normalize_inplace(*cache);
}
コード例 #6
0
//--------------------------------------------------------------------------------
void DbMySQLTableEditorIndexPage::cell_editing_done(GtkCellEditable *ce) {
  if (_editing_done_id != 0 && _editable_cell != 0) {
    g_signal_handler_disconnect(_editable_cell, _editing_done_id);
    _editing_done_id = 0;
    _editable_cell = 0;
  }

  // If it's Gtk::Entry, we try to find out if maybe user leave edit field empty,
  // if so we revert it to the last known value or to the default one.
  if (GTK_IS_ENTRY(ce)) {
    GtkEntry *entry_widget = GTK_ENTRY(ce);
    if (entry_widget) {
      Gtk::Entry *entry = Glib::wrap(entry_widget);

      if (entry && entry->get_text_length() == 0) {
        Gtk::TreeModel::Path path;
        Gtk::TreeView::Column *column(0);
        _indexes_tv->get_cursor(path, column);
        bec::NodeId node(path.to_string());
        if (node.is_valid()) {
          std::string name = _user_index_name;
          if (name.empty())
            name = strfmt("index%i", path[0] + 1);

          _be->get_indexes()->set_field(node, MySQLTableIndexListBE::Name, name);
          entry->set_text(name);
        }
      }
    }
  }
}
コード例 #7
0
ファイル: zipfile.c プロジェクト: laochailan/taisei
static char* vfs_zipfile_repr(VFSNode *node) {
	VFSZipFileData *zdata = node->data1;
	char *srcrepr = vfs_node_repr(zdata->source, false);
	char *ziprepr = strfmt("zip archive %s", srcrepr);
	free(srcrepr);
	return ziprepr;
}
コード例 #8
0
ファイル: q_filtered_query.c プロジェクト: Bira/ferret
static char *fq_to_s(Query *self, Symbol default_field)
{
    FilteredQuery *fq = FQQ(self);
    char *filter_str = fq->filter->to_s(fq->filter);
    char *query_str = fq->query->to_s(fq->query, default_field);
    char *buffer;
    if (self->boost == 1.0) {
        buffer = strfmt("FilteredQuery(query:%s, filter:%s)",
                        query_str, filter_str);
    } else {
        buffer = strfmt("FilteredQuery(query:%s, filter:%s)^%f",
                        query_str, filter_str, self->boost);
    }
    free(filter_str);
    free(query_str);
    return buffer;;
}
コード例 #9
0
ファイル: q_match_all.c プロジェクト: BusProject/theballot
char *maq_to_s(Query *self, const char *field)
{
    (void)field;
    if (self->boost == 1.0) {
        return estrdup("*");
    } else {
        return strfmt("*^%f", self->boost);
    }
}
コード例 #10
0
ファイル: loaders_suite.c プロジェクト: m1ch4ls/gfxprim
static int save_img(enum fmt fmt, const GP_Context *img, const char *name)
{
	char buf[256];

	snprintf(buf, sizeof(buf), "%s.%s", name, strfmt(fmt));

	switch (fmt) {
	case PNG:
		return GP_SavePNG(img, buf, NULL);
	case JPG:
		return GP_SaveJPG(img, buf, NULL);
	case BMP:
		return GP_SaveBMP(img, buf, NULL);
	default:
		tst_err("Trying to save %s image", strfmt(fmt));
		exit(TST_UNTESTED);
	}
}
コード例 #11
0
ファイル: file.c プロジェクト: smaclennan/zedit
bool findfile(char *path)
{
	char tbname[BUFNAMMAX + 1];
	zbuff_t *tbuff;
	zbuff_t *was = Curbuff;

	Arg = 0;

	/* limit name to BUFNAMMAX */
	strncpy(tbname, lastpart(path), BUFNAMMAX);
	tbname[BUFNAMMAX] = '\0';

	/* If is this file already in a buffer - use it.
	 * At startup, we are done.
	 */
	foreachbuff(tbuff)
		if (tbuff->fname && strcmp(path, tbuff->fname) == 0) {
			zswitchto(tbuff);
			if (Initializing)
				return true;
			set_last_bufname(was);
			break;
		}

	if (!tbuff) {
		if (cfindbuff(tbname)) {
			/* Resolve buffer name collisions by creating
			 * a unique name */
			char *p;
			int i;

			i = strlen(tbname);
			p = &tbname[i < BUFNAMMAX - 3 ? i : BUFNAMMAX - 3];
			/* We cannot use 100 here due to a bug in gcc 7.3.0 */
			for (i = 0; i < 99; ++i) {
				strfmt(p, 4, ".%d", i);
				if (!cfindbuff(tbname))
					break;
			}
			if (cfindbuff(tbname))
				return false;
		}

		if (!readone(tbname, path))
			return false;
	}

	if (!Initializing) {
		cswitchto(Curbuff);
		reframe();
	} else if (!*Fname)
		strcpy(Fname, path);

	return true;
}
コード例 #12
0
 virtual void do_refresh_form_data()
 {    
   Gtk::Entry *entry;
   int w, h;
   _be.get_size(w, h);
   _xml->get_widget("width_entry", entry);
   entry->set_text(strfmt("%i", w));
   _xml->get_widget("height_entry", entry);
   entry->set_text(strfmt("%i", h));
   
   Gtk::CheckButton *check;
   _xml->get_widget("aspect_check", check);
   check->set_active(_be.get_keep_aspect_ratio());
 
   Glib::RefPtr<Gdk::Pixbuf> pixbuf(Gdk::Pixbuf::create_from_file(_be.get_attached_image_path()));
   if (pixbuf)
     _image->set(pixbuf);  
   else
     g_message("ImageEditorFE: can not set image from %s[%s]", _be.get_filename().c_str(), _be.get_attached_image_path().c_str());    
 }
コード例 #13
0
ファイル: loaders_suite.c プロジェクト: m1ch4ls/gfxprim
static GP_Context *load(enum fmt fmt, const char *name)
{
	char buf[256];

	snprintf(buf, sizeof(buf), "%s.%s", name, strfmt(fmt));

	switch (fmt) {
	case PNG:
		return GP_LoadPNG(buf, NULL);
	case JPG:
		return GP_LoadJPG(buf, NULL);
	case GIF:
		return GP_LoadGIF(buf, NULL);
	case BMP:
		return GP_LoadBMP(buf, NULL);
	default:
		tst_err("Trying to load %s image", strfmt(fmt));
		exit(TST_UNTESTED);
	}
}
コード例 #14
0
ファイル: loaders_suite.c プロジェクト: m1ch4ls/gfxprim
static int load_eacces(enum fmt fmt)
{
	char buf[256];
	GP_Context *img;

	snprintf(buf, sizeof(buf), "test.%s", strfmt(fmt));
	
	FILE *f = fopen(buf, "w");

	if (f == NULL) {
		tst_err("Failed to create file 'test': %s", strerror(errno));
		return TST_UNTESTED;
	}

	fclose(f);

	if (chmod(buf, 200)) {
		tst_err("chmod failed: %s", strerror(errno));
		return TST_UNTESTED;
	}

	img = load(fmt, "test");

	if (img != NULL) {
		tst_msg("Test succedded unexpectedly");
		return TST_FAILED;
	}
	
	if (errno == ENOSYS) {
		tst_msg("Load %s: ENOSYS", strfmt(fmt));
		return TST_SKIPPED;
	}

	if (errno != EACCES) {
		tst_msg("Expected errno = EACCES, have %s",
		              strerror(errno));
		return TST_FAILED;
	}

	return TST_SUCCESS;
}
コード例 #15
0
ファイル: gflib.c プロジェクト: idaohang/GLFGPSSim
int xstrtoken(char strg[], int pos, int len, int dp, char *tokens[], int xkey)
{
 if ((xkey >= strcount(tokens)) || (xkey < 0))
   {
    buffer[0] = 0;
   }
 else
   {
    sprintf(buffer,strfmt(len,dp,'s'),tokens[xkey]);
   }
 return xstr_____s(strg,pos,len,buffer);
}
コード例 #16
0
ファイル: TwitchBot.cpp プロジェクト: frolv/lynxbot
/* format_submsg: replace placeholders in format string with data */
int TwitchBot::format_submsg(char *out, size_t size, const char *format,
			     const char *nick, const char *months)
{
	struct format fmtchars[] = {
		{ 'N', nick, atnick },
		{ 'b', bot_name, dupstr },
		{ 'c', bot_channel + 1, dupstr },
		{ 'm', months, dupstr },
		{ 'n', nick, dupstr },
		{ 0, 0, 0 }
	};

	return strfmt(out, size, format, fmtchars);
}
コード例 #17
0
ファイル: loaders_suite.c プロジェクト: m1ch4ls/gfxprim
static int save_load(enum fmt fmt, GP_Size w, GP_Size h)
{
	GP_Context *img, *res;

	img = GP_ContextAlloc(w, h, GP_PIXEL_RGB888);
	
	if (img == NULL) {
		tst_warn("GP_ContextAlloc failed");
		return TST_UNTESTED;
	}

	int ret = save_img(fmt, img, "test");

	if (ret) {
		if (errno == ENOSYS) {
			tst_msg("Save %s: ENOSYS", strfmt(fmt));
			return TST_SKIPPED;
		}
		
		tst_msg("Failed to save %s: %s",
		           strfmt(fmt), strerror(errno));
		return TST_FAILED;
	}

	res = load(fmt, "test");

	if (res == NULL) {
		tst_msg("Failed to load %s: %s",
		           strfmt(fmt), strerror(errno));
		return TST_FAILED;
	}

	GP_ContextFree(img);
	GP_ContextFree(res);

	return TST_SUCCESS;
}
コード例 #18
0
ファイル: http_client.cpp プロジェクト: songhtdo/vespa
bool
HttpClient::readContent(size_t len) {
    Input &input = _conn->stream();
    while (len > 0) {
        Memory mem = input.obtain();
        mem.size = std::min(len, mem.size);
        if (mem.size == 0) {
            _handler.handleFailure(strfmt("short read: missing %zu bytes", len));
            return false;
        }
        _handler.handleContent(mem);
        input.evict(mem.size);
        len -= mem.size;
    }
    return true;
}
コード例 #19
0
ファイル: CustomHandler.cpp プロジェクト: frolv/lynxbot
/* format: format a response for cmd */
char *CustomHandler::format(const Json::Value *cmd, const char *nick)
{
	int uses = (*cmd)["uses"].asInt();
	const char *resp = (*cmd)["response"].asCString();

	struct format fmtchars[] = {
		{ 'N', nick, atnick },
		{ 'b', bot_name, dupstr },
		{ 'c', bot_channel, dupstr },
		{ 'n', nick, dupstr },
		{ 'u', &uses, commanum },
		{ 0, 0, 0 }
	};

	if (strfmt(fmtresp, MAX_MSG, resp, fmtchars) != 0)
		return NULL;

	return fmtresp;
}
コード例 #20
0
ファイル: hack.cpp プロジェクト: UNKN-0WN/cathook
void critical_error_handler(int signum)
{
    namespace st = boost::stacktrace;
    ::signal(signum, SIG_DFL);
    passwd *pwd = getpwuid(getuid());
    std::ofstream out(strfmt("/tmp/cathook-%s-%d-segfault.log", pwd->pw_name, getpid()).get());

    Dl_info info;
    if (!dladdr(reinterpret_cast<void *>(hack::ExecuteCommand), &info))
        return;
    unsigned int baseaddr = (unsigned int) info.dli_fbase - 1;

    for (auto i : st::stacktrace())
    {
        unsigned int offset = (unsigned int) (i.address()) - baseaddr;
        Dl_info info2;
        out << (void *) offset;
        if (!dladdr(i.address(), &info2))
        {
            out << std::endl;
            continue;
        }
        out << " " << info2.dli_fname << ": ";
        if (info2.dli_sname)
        {
            int status     = -4;
            char *realname = abi::__cxa_demangle(info2.dli_sname, nullptr, nullptr, &status);
            if (status == 0)
            {
                out << realname << std::endl;
                free(realname);
            }
            else
                out << info2.dli_sname << std::endl;
        }
        else
            out << "No Symbol" << std ::endl;
    }

    out.close();
    ::raise(SIGABRT);
}
コード例 #21
0
ファイル: MainWindow.cpp プロジェクト: aortmann/loadiine_gx2
MainWindow::MainWindow(int w, int h)
    : width(w)
    , height(h)
    , gameClickSound(Resources::GetSound("game_click.mp3"))
    , mainSwitchButtonFrame(NULL)
    , currentTvFrame(NULL)
    , currentDrcFrame(NULL)
    , launchingGame(false)

{
    for(int i = 0; i < 4; i++)
    {
        std::string filename = strfmt("player%i_point.png", i+1);
        pointerImgData[i] = Resources::GetImageData(filename.c_str());
        pointerImg[i] = new GuiImage(pointerImgData[i]);
        pointerImg[i]->setScale(1.5f);
        pointerValid[i] = false;
    }

    SetupMainView();
}
コード例 #22
0
ファイル: gamepad.c プロジェクト: laochailan/taisei
static int gamepad_load_mappings(const char *vpath, int warn_noexist) {
	char *repr = vfs_repr(vpath, true);
	char *errstr = NULL;
	const char *const_errstr = NULL;

	SDL_RWops *mappings = vfs_open(vpath, VFS_MODE_READ | VFS_MODE_SEEKABLE);
	int num_loaded = -1;
	LogLevel loglvl = LOG_WARN;

	if(!mappings) {
		if(!warn_noexist) {
			VFSInfo vinfo = vfs_query(vpath);

			if(!vinfo.error && !vinfo.exists && !vinfo.is_dir) {
				loglvl = LOG_INFO;
				const_errstr = errstr = strfmt("Custom mappings file '%s' does not exist (this is ok)", repr);
				goto cleanup;
			}
		}

		const_errstr = vfs_get_error();
		goto cleanup;
	}

	if((num_loaded = SDL_GameControllerAddMappingsFromRW(mappings, true)) < 0) {
		const_errstr = SDL_GetError();
	}

cleanup:
	if(const_errstr) {
		log_custom(loglvl, "Couldn't load mappings: %s", const_errstr);
	} else if(num_loaded >= 0) {
		log_info("Loaded %i mappings from '%s'", num_loaded, repr);
	}

	free(repr);
	free(errstr);
	return num_loaded;
}
コード例 #23
0
ファイル: http_client.cpp プロジェクト: songhtdo/vespa
bool
HttpClient::readContent()
{
    if (_header.contentLengthGiven) {
        return readContent(_header.contentLength);
    } else if (_header.chunkedEncodingGiven) {
        size_t chunkSize = 0;
        for (bool first = true; readChunkSize(first, chunkSize); first = false) {
            if (chunkSize == 0) {
                return skipTrailers();
            }
            if (!readContent(chunkSize)) {
                return false;
            }
        }
        _handler.handleFailure("error reading HTTP chunk size");
        return false;
    } else { // data terminated by eof
        if (serverKeepAlive()) {
            _handler.handleFailure("server indicated keep-alive, "
                                   "but we need eof to terminate data");
            return false;
        }
        Input &input = _conn->stream();
        for (;;) {
            Memory mem = input.obtain();
            if (mem.size == 0) {
                if (_conn->stream().tainted()) {
                    _handler.handleFailure(strfmt("read error: '%s'",
                                                  _conn->stream().tainted().reason().c_str()));
                }
                return true;
            }
            _handler.handleContent(mem);
            input.evict(mem.size);
        }
    }
}
コード例 #24
0
ファイル: gflib.c プロジェクト: idaohang/GLFGPSSim
long dtofix(int dp, double temp)
{
 char tstrg[35];
 int i;
 int zlen;
 if (dp > 9)
    dp = 9;
 if (dp < 0)
    dp = 0;
 if (temp > 999999999)
    temp = 999999999;
 if (temp < -999999999)
    temp = -999999999;
 zlen = dp;
 if (zlen < 1)
    zlen = 1;
 sprintf(tstrg,strfmt((13+zlen),zlen,'F'),temp);
 for (i=12; i<27; i++)
   {
    tstrg[i] = tstrg[i+1];
   }
 return strl(tstrg,dp,12);
}
コード例 #25
0
ファイル: loaders_suite.c プロジェクト: m1ch4ls/gfxprim
static int load_enoent(enum fmt fmt)
{
	GP_Context *img;
	
	img = load(fmt, "nonexistent");	
	
	if (img != NULL) {
		tst_msg("Test succedded unexpectedly");
		return TST_FAILED;
	}
	
	if (errno == ENOSYS) {
		tst_msg("Load %s: ENOSYS", strfmt(fmt));
		return TST_SKIPPED;
	}

	if (errno != ENOENT) {
		tst_msg("Expected errno = ENOENT, have %s", strerror(errno));
		return TST_FAILED;
	}

	return TST_SUCCESS;
}
コード例 #26
0
ファイル: vars.c プロジェクト: smaclennan/zedit
void Zset_variable(void)
{
	char pstr[STRMAX], arg[STRMAX];
	int rc = getplete("Variable: ", NULL, (char **)Vars,
			  sizeof(struct avar), NUMVARS);
	if (rc == -1)
		return;

	if (!Argp || Vars[rc].vtype == V_STRING) {
		strconcat(pstr, sizeof(pstr), Vars[rc].vname, ": ", NULL);
		if (Vars[rc].vtype == V_STRING)
			if (VARSTR(rc))
				strlcpy(arg, VARSTR(rc), sizeof(arg));
			else
				*arg = '\0';
		else
			strfmt(arg, sizeof(arg), "%d", VAR(rc));
		if (getarg(pstr, arg, STRMAX))
			return;
		strconcat(pstr, sizeof(pstr), Vars[rc].vname, " ", arg, NULL);
		setavar(pstr, true);
	} else
		setavar(Vars[rc].vname, true);
}
コード例 #27
0
ファイル: gflib.c プロジェクト: idaohang/GLFGPSSim
int xstrxi(char strg[], int pos, int len, int dp, int xint)
{
 sprintf(buffer,strfmt(len,dp,'x'),xint);
 return xstr_____s(strg,pos,len,buffer);
}
コード例 #28
0
ファイル: gflib.c プロジェクト: idaohang/GLFGPSSim
int xstrf(char strg[], int pos, int len, int dp, float xfloat)
{
 sprintf(buffer,strfmt(len,dp,'f'),xfloat);
 return xstr_____s(strg,pos,len,buffer);
}
コード例 #29
0
ファイル: gflib.c プロジェクト: idaohang/GLFGPSSim
int xstrui(char strg[], int pos, int len, int dp, unsigned int xint)
{
 sprintf(buffer,strfmt(len,dp,'u'),xint);
 return xstr_____s(strg,pos,len,buffer);
}
コード例 #30
0
GameLauncherMenu::GameLauncherMenu(int gameIdx)
    : GuiFrame(0,0)
    , gameIdx(gameIdx)
    , bgImage(500, 500, (GX2Color){0, 0, 0, 255})
    , bgBlur(1280, 720, (GX2Color){0, 0, 0, 255})
    , noCover(Resources::GetFile("noCover.png"), Resources::GetFileSize("noCover.png"))
    , buttonClickSound(Resources::GetSound("settings_click_2.mp3"))
    , quitImageData(Resources::GetImageData("quitButton.png"))
    , quitImage(quitImageData)
    , quitSelectedImageData(Resources::GetImageData("quitButtonSelected.png"))
    , quitSelectedImage(quitSelectedImageData)
    , quitButton(quitImage.getWidth(), quitImage.getHeight())
    , okImageData(Resources::GetImageData("emptyRoundButton.png"))
    , okImage(okImageData)
    , okSelectedImageData(Resources::GetImageData("emptyRoundButtonSelected.png"))
    , okSelectedImage(okSelectedImageData)
    , okButton(okImage.getWidth(), okImage.getHeight())
    , okText("O.K.", 46, glm::vec4(0.1f, 0.1f, 0.1f, 1.0f))
    , titleImageData(Resources::GetImageData("settingsTitle.png"))
    , titleImage(titleImageData)
    , extraSaveText(tr("Extra Save:"), 40, glm::vec4(0.8f, 0.8f, 0.8f, 1.0f))
    , dlcEnableText(tr("Enable DLC Support:"), 40, glm::vec4(0.8f, 0.8f, 0.8f, 1.0f))
    , frameImageData(Resources::GetImageData("gameSettingsFrame.png"))
    , frameImage(frameImageData)
    , touchTrigger(GuiTrigger::CHANNEL_1, GuiTrigger::VPAD_TOUCH)
    , wpadTouchTrigger(GuiTrigger::CHANNEL_2 | GuiTrigger::CHANNEL_3 | GuiTrigger::CHANNEL_4 | GuiTrigger::CHANNEL_5, GuiTrigger::BUTTON_A)
    , buttonATrigger(GuiTrigger::CHANNEL_ALL, GuiTrigger::BUTTON_A, true)
    , buttonBTrigger(GuiTrigger::CHANNEL_ALL, GuiTrigger::BUTTON_B, true)
    , buttonLTrigger(GuiTrigger::CHANNEL_ALL, GuiTrigger::BUTTON_L, true)
    , buttonRTrigger(GuiTrigger::CHANNEL_ALL, GuiTrigger::BUTTON_R, true)
    , buttonLeftTrigger(GuiTrigger::CHANNEL_ALL, GuiTrigger::BUTTON_LEFT | GuiTrigger::STICK_L_LEFT, true)
    , buttonRightTrigger(GuiTrigger::CHANNEL_ALL, GuiTrigger::BUTTON_RIGHT | GuiTrigger::STICK_L_RIGHT, true)
    , buttonUpTrigger(GuiTrigger::CHANNEL_ALL, GuiTrigger::BUTTON_UP | GuiTrigger::STICK_L_UP, true)
    , buttonDownTrigger(GuiTrigger::CHANNEL_ALL, GuiTrigger::BUTTON_DOWN | GuiTrigger::STICK_L_DOWN, true)
    , leftArrowImageData(Resources::GetImageData("leftArrow.png"))
    , rightArrowImageData(Resources::GetImageData("rightArrow.png"))
    , leftArrowImage(leftArrowImageData)
    , rightArrowImage(rightArrowImageData)
    , leftArrowButton(leftArrowImage.getWidth(), leftArrowImage.getHeight())
    , rightArrowButton(rightArrowImage.getWidth(), rightArrowImage.getHeight())
    , DPADButtons(0,0)
    , extraSaveBox(false)
    , dlcEnableBox(false)
    , progresswindow("")
    , pathSelectBox(tr("Update Folder"),NULL)
    , saveModeSelectBox(tr("Save Mode"),NULL)
    , launchModeSelectBox(tr("Launch Mode"),NULL)
    , bgUsedImageDataAsync(NULL)
    , bgNewImageDataAsync(NULL)
    , bgFadingImageDataAsync(NULL)
{
    bFocusChanged = true;
    gamelauncherelementfocus = GamelaunchermenuFocus::OK;

    //Settings up the values for the selectboxes that don't change
    savemode_size = sizeof(ValueGameSaveModes) / sizeof(ValueGameSaveModes[0]);

    saveModeNames[tr("<Settings Default>")] = strfmt("%d", GAME_SAVES_DEFAULT);
    for(int i = 0; i < savemode_size; i++){
        saveModeNames[ValueGameSaveModes[i].name] = strfmt("%d",ValueGameSaveModes[i].value);
    }
    launchmode_size = sizeof(ValueLaunchMode) / sizeof(ValueLaunchMode[0]);
    launchModeNames[tr("<Settings Default>")] = strfmt("%d", LOADIINE_MODE_DEFAULT);
    for(int i = 0; i < launchmode_size; i++){
        launchModeNames[ValueLaunchMode[i].name] = strfmt("%d",ValueLaunchMode[i].value);
    }

    progresswindow.setVisible(false);

    Application::instance()->getMainWindow()->gameLauncherMenuNextClicked.connect(this,&GameLauncherMenu::OnGotHeaderFromMain);

    CVideo * video = Application::instance()->getVideo();
    width = video->getTvWidth()*windowScale;
    height = video->getTvHeight()*windowScale;
    gameLauncherMenuFrame = GuiFrame(width, height);

    bgImage.setSize(width,height);
    frameImage.setScale(windowScale);

    bgBlur.setAlpha(0.85f);
    append(&bgBlur);
    append(&bgImage);
    append(&frameImage);

    titleImage.setScale(windowScale);
    titleText.setColor(glm::vec4(1.0f, 1.0f, 1.0f, 1.0f));
    titleText.setFontSize(46);
    titleText.setPosition(0, 10);
    titleText.setBlurGlowColor(5.0f, glm::vec4(0.0, 0.0, 0.0f, 1.0f));
    append(&titleImage);
    append(&titleText);

    titleText.setParent(&titleImage);
    titleImage.setAlignment(ALIGN_MIDDLE | ALIGN_TOP);
    quitButton.setImage(&quitImage);
	quitButton.setIconOver(&quitSelectedImage);
    quitButton.setAlignment(ALIGN_BOTTOM | ALIGN_LEFT);
    quitButton.clicked.connect(this, &GameLauncherMenu::OnQuitButtonClick);
    quitButton.setTrigger(&touchTrigger);
    quitButton.setTrigger(&wpadTouchTrigger);
    quitButton.setEffectGrow();
    quitButton.setSoundClick(buttonClickSound);
    quitButton.setScale(windowScale*0.8);
    quitButton.setPosition((1.0/30.0)*width,(1.0/30.0)*width);
    gameLauncherMenuFrame.append(&quitButton);

    okText.setPosition(10, -10);
    okButton.setLabel(&okText);
    okButton.setImage(&okImage);
	okButton.setIconOver(&okSelectedImage);
    okButton.setAlignment(ALIGN_BOTTOM | ALIGN_RIGHT);
    okButton.clicked.connect(this, &GameLauncherMenu::OnOKButtonClick);
    okButton.setTrigger(&touchTrigger);
    okButton.setTrigger(&wpadTouchTrigger);
    okButton.setSoundClick(buttonClickSound);
    okButton.setEffectGrow();
    okButton.setScale(windowScale*0.8);
    okButton.setPosition(-(1.0/30.0)*width,(1.0/30.0)*width);
    gameLauncherMenuFrame.append(&okButton);

    leftArrowButton.setImage(&leftArrowImage);
    leftArrowButton.setEffectGrow();
    leftArrowButton.setPosition(-120, 0);
    leftArrowButton.setAlignment(ALIGN_LEFT | ALIGN_MIDDLE);
    leftArrowButton.setTrigger(&touchTrigger);
    leftArrowButton.setTrigger(&wpadTouchTrigger);

    leftArrowButton.setSoundClick(buttonClickSound);
    leftArrowButton.clicked.connect(this, &GameLauncherMenu::OnLeftArrowClick);
    gameLauncherMenuFrame.append(&leftArrowButton);

    rightArrowButton.setImage(&rightArrowImage);
    rightArrowButton.setEffectGrow();
    rightArrowButton.setPosition(120, 0);
    rightArrowButton.setAlignment(ALIGN_RIGHT | ALIGN_MIDDLE);
    rightArrowButton.setTrigger(&touchTrigger);
    rightArrowButton.setTrigger(&wpadTouchTrigger);
    rightArrowButton.setSoundClick(buttonClickSound);
    rightArrowButton.clicked.connect(this, &GameLauncherMenu::OnRightArrowClick);
    gameLauncherMenuFrame.append(&rightArrowButton);

    DPADButtons.setTrigger(&buttonDownTrigger);
    DPADButtons.setTrigger(&buttonATrigger);
    DPADButtons.setTrigger(&buttonBTrigger);
    DPADButtons.setTrigger(&buttonLTrigger);
    DPADButtons.setTrigger(&buttonRTrigger);
    DPADButtons.setTrigger(&buttonLeftTrigger);
    DPADButtons.setTrigger(&buttonRightTrigger);
    DPADButtons.setTrigger(&buttonUpTrigger);

    DPADButtons.clicked.connect(this, &GameLauncherMenu::OnDPADClick);
    gameLauncherMenuFrame.append(&DPADButtons);

    f32 buttonscale = 3.8f/3.0f;

    extraSaveBox.setTrigger(&touchTrigger);
    extraSaveBox.setTrigger(&wpadTouchTrigger);
    extraSaveBox.setSoundClick(buttonClickSound);
    extraSaveBox.valueChanged.connect(this, &GameLauncherMenu::OnExtraSaveValueChanged);

    gameLauncherMenuFrame.append(&extraSaveBox);

    dlcEnableBox.setTrigger(&touchTrigger);
    dlcEnableBox.setTrigger(&wpadTouchTrigger);
    dlcEnableBox.setSoundClick(buttonClickSound);
    dlcEnableBox.valueChanged.connect(this, &GameLauncherMenu::OnDLCEnableValueChanged);

    gameLauncherMenuFrame.append(&dlcEnableBox);

    f32 xpos = 0.11f;
    f32 yOffset = -(0.3 * height);

    dlcEnableBox.setScale(buttonscale*windowScale);
    saveModeSelectBox.setScale(buttonscale*windowScale);
    launchModeSelectBox.setScale(buttonscale*windowScale);
    extraSaveBox.setScale(buttonscale*windowScale);
    extraSaveText.setScale(buttonscale*windowScale);
    dlcEnableText.setScale(buttonscale*windowScale);
    pathSelectBox.setScale(buttonscale* windowScale);

    dlcEnableBox.setPosition(xpos*width + (saveModeSelectBox.getTopValueWidth()*saveModeSelectBox.getScale() /2.0) - (dlcEnableBox.getWidth()*dlcEnableBox.getScale()/2.0), yOffset);
    dlcEnableText.setPosition(xpos*width - (saveModeSelectBox.getTopValueWidth()*saveModeSelectBox.getScale() /2.0)+ (dlcEnableText.getTextWidth()/2.0), yOffset);
    yOffset += saveModeSelectBox.getTopValueHeight() * saveModeSelectBox.getScale();

    saveModeSelectBox.setPosition(xpos*width, yOffset);
    yOffset += saveModeSelectBox.getTopValueHeight() * saveModeSelectBox.getScale();

    launchModeSelectBox.setPosition(xpos*width, yOffset);
    yOffset += saveModeSelectBox.getTopValueHeight() * saveModeSelectBox.getScale() * 1.2f;

    extraSaveBox.setPosition(xpos*width + (saveModeSelectBox.getTopValueWidth()*saveModeSelectBox.getScale() /2.0) - (extraSaveBox.getWidth()*extraSaveBox.getScale()/2.0), yOffset);

    extraSaveText.setPosition(xpos*width - (saveModeSelectBox.getTopValueWidth()*saveModeSelectBox.getScale() /2.0)+ (extraSaveText.getTextWidth()/2.0), yOffset);
    yOffset += saveModeSelectBox.getTopValueHeight() * saveModeSelectBox.getScale() * 1.2f;

    pathSelectBox.setPosition(xpos*width, yOffset);
    yOffset += saveModeSelectBox.getTopValueHeight() * saveModeSelectBox.getScale() * 1.2f;

    pathSelectBox.showhide.connect(this, &GameLauncherMenu::OnSelectBoxShowHide);
    launchModeSelectBox.showhide.connect(this, &GameLauncherMenu::OnSelectBoxShowHide),
    saveModeSelectBox.showhide.connect(this, &GameLauncherMenu::OnSelectBoxShowHide);

    pathSelectBox.valueChanged.connect(this, &GameLauncherMenu::OnSelectBoxValueChanged);
    launchModeSelectBox.valueChanged.connect(this, &GameLauncherMenu::OnSelectBoxValueChanged),
    saveModeSelectBox.valueChanged.connect(this, &GameLauncherMenu::OnSelectBoxValueChanged);

    gameLauncherMenuFrame.append(&dlcEnableText);
    gameLauncherMenuFrame.append(&extraSaveText);
    gameLauncherMenuFrame.append(&saveModeSelectBox);
    gameLauncherMenuFrame.append(&pathSelectBox);
    gameLauncherMenuFrame.append(&launchModeSelectBox);

    selectBoxes.push_back(&pathSelectBox);
    selectBoxes.push_back(&launchModeSelectBox);
    selectBoxes.push_back(&saveModeSelectBox);

    append(&gameLauncherMenuFrame);
    append(&progresswindow);

    focusElements[GamelaunchermenuFocus::ExtraSave] = &extraSaveBox;
    focusElements[GamelaunchermenuFocus::EnableDLC] = &dlcEnableBox;
    focusElements[GamelaunchermenuFocus::Quit] = &quitButton;
    focusElements[GamelaunchermenuFocus::UpdatePath] = &pathSelectBox;
    focusElements[GamelaunchermenuFocus::SaveMethod] = &saveModeSelectBox;
    focusElements[GamelaunchermenuFocus::LaunchMethod] = &launchModeSelectBox;
    focusElements[GamelaunchermenuFocus::OK] = &okButton;

    setHeader(GameList::instance()->at(gameIdx));
}