mirror of https://github.com/stella-emu/stella.git
Fixed issues with sorting ROMs in the ROM launcher. Moved to C++ STL
sorting, since it seems to be faster. Fixed issue with directories sometimes not being sorted correctly. Bumped version number for next bugfix release. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1085 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
dc11eb4d5c
commit
13f5924721
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: FrameBufferGL.cxx,v 1.60 2006-03-25 00:34:17 stephena Exp $
|
// $Id: FrameBufferGL.cxx,v 1.61 2006-04-12 13:32:06 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifdef DISPLAY_OPENGL
|
#ifdef DISPLAY_OPENGL
|
||||||
|
@ -399,6 +399,12 @@ void FrameBufferGL::postFrameUpdate()
|
||||||
p_glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, myTexture->w, myTexture->h,
|
p_glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, myTexture->w, myTexture->h,
|
||||||
GL_RGB, GL_UNSIGNED_SHORT_5_6_5, myTexture->pixels);
|
GL_RGB, GL_UNSIGNED_SHORT_5_6_5, myTexture->pixels);
|
||||||
p_glBegin(GL_QUADS);
|
p_glBegin(GL_QUADS);
|
||||||
|
/* Upside down !
|
||||||
|
p_glTexCoord2f(myTexCoord[2], myTexCoord[3]); p_glVertex2i(0, 0);
|
||||||
|
p_glTexCoord2f(myTexCoord[0], myTexCoord[3]); p_glVertex2i(w, 0);
|
||||||
|
p_glTexCoord2f(myTexCoord[0], myTexCoord[1]); p_glVertex2i(w, h);
|
||||||
|
p_glTexCoord2f(myTexCoord[2], myTexCoord[1]); p_glVertex2i(0, h);
|
||||||
|
*/
|
||||||
p_glTexCoord2f(myTexCoord[0], myTexCoord[1]); p_glVertex2i(0, 0);
|
p_glTexCoord2f(myTexCoord[0], myTexCoord[1]); p_glVertex2i(0, 0);
|
||||||
p_glTexCoord2f(myTexCoord[2], myTexCoord[1]); p_glVertex2i(w, 0);
|
p_glTexCoord2f(myTexCoord[2], myTexCoord[1]); p_glVertex2i(w, 0);
|
||||||
p_glTexCoord2f(myTexCoord[2], myTexCoord[3]); p_glVertex2i(w, h);
|
p_glTexCoord2f(myTexCoord[2], myTexCoord[3]); p_glVertex2i(w, h);
|
||||||
|
|
|
@ -13,13 +13,13 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: Version.hxx,v 1.15 2006-04-05 16:06:59 stephena Exp $
|
// $Id: Version.hxx,v 1.16 2006-04-12 13:32:06 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifndef VERSION_HXX
|
#ifndef VERSION_HXX
|
||||||
#define VERSION_HXX
|
#define VERSION_HXX
|
||||||
|
|
||||||
#define STELLA_BASE_VERSION "2.2"
|
#define STELLA_BASE_VERSION "2.2.1_cvs"
|
||||||
|
|
||||||
#ifdef NIGHTLY_BUILD
|
#ifdef NIGHTLY_BUILD
|
||||||
#define STELLA_VERSION STELLA_BASE_VERSION "pre-" NIGHTLY_BUILD
|
#define STELLA_VERSION STELLA_BASE_VERSION "pre-" NIGHTLY_BUILD
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: GameList.cxx,v 1.9 2006-03-10 00:29:46 stephena Exp $
|
// $Id: GameList.cxx,v 1.10 2006-04-12 13:32:06 stephena Exp $
|
||||||
//
|
//
|
||||||
// Based on code from KStella - Stella frontend
|
// Based on code from KStella - Stella frontend
|
||||||
// Copyright (C) 2003-2005 Stephen Anthony
|
// Copyright (C) 2003-2005 Stephen Anthony
|
||||||
|
@ -40,90 +40,43 @@ GameList::~GameList()
|
||||||
void GameList::appendGame(const string& name, const string& path,
|
void GameList::appendGame(const string& name, const string& path,
|
||||||
const string& note, bool isDir)
|
const string& note, bool isDir)
|
||||||
{
|
{
|
||||||
Entry* g = new Entry;
|
Entry g;
|
||||||
g->_name = name;
|
g._name = name;
|
||||||
g->_path = path;
|
g._path = path;
|
||||||
g->_note = note;
|
g._note = note;
|
||||||
g->_isdir = isDir;
|
g._isdir = isDir;
|
||||||
|
|
||||||
myArray.push_back(g);
|
myArray.push_back(g);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void GameList::clear()
|
|
||||||
{
|
|
||||||
for(unsigned int i = 0; i < myArray.size(); ++i)
|
|
||||||
delete myArray[i];
|
|
||||||
|
|
||||||
myArray.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void GameList::sortByName()
|
void GameList::sortByName()
|
||||||
{
|
{
|
||||||
if(myArray.size() <= 1)
|
if(myArray.size() <= 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QuickSort(myArray, 0, myArray.size()-1);
|
sort(myArray.begin(), myArray.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void GameList::QuickSort(EntryList& a, int left, int right)
|
bool GameList::Entry::operator< (const Entry& g) const
|
||||||
{
|
{
|
||||||
int l_hold = left;
|
string::const_iterator it1 = _name.begin();
|
||||||
int r_hold = right;
|
string::const_iterator it2 = g._name.begin();
|
||||||
Entry* pivot_entry = a[left];
|
|
||||||
|
|
||||||
while (left < right)
|
// Account for ending ']' character in directory entries
|
||||||
{
|
string::const_iterator end1 = _isdir ? _name.end() - 1 : _name.end();
|
||||||
while ((compare(a[right]->_name, pivot_entry->_name) >= 0) && (left < right))
|
string::const_iterator end2 = g._isdir ? g._name.end() - 1 : g._name.end();
|
||||||
right--;
|
|
||||||
if (left != right)
|
|
||||||
{
|
|
||||||
a[left] = a[right];
|
|
||||||
left++;
|
|
||||||
}
|
|
||||||
while ((compare(a[left]->_name, pivot_entry->_name) <= 0) && (left < right))
|
|
||||||
left++;
|
|
||||||
if (left != right)
|
|
||||||
{
|
|
||||||
a[right] = a[left];
|
|
||||||
right--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
a[left] = pivot_entry;
|
|
||||||
int pivot = left;
|
|
||||||
left = l_hold;
|
|
||||||
right = r_hold;
|
|
||||||
if (left < pivot)
|
|
||||||
QuickSort(a, left, pivot-1);
|
|
||||||
if (right > pivot)
|
|
||||||
QuickSort(a, pivot+1, right);
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
int GameList::compare(const string& s1, const string& s2)
|
|
||||||
{
|
|
||||||
string::const_iterator it1=s1.begin();
|
|
||||||
string::const_iterator it2=s2.begin();
|
|
||||||
|
|
||||||
// Stop when either string's end has been reached
|
// Stop when either string's end has been reached
|
||||||
while( (it1 != s1.end()) && (it2 != s2.end()) )
|
while((it1 != end1) && (it2 != end2))
|
||||||
{
|
{
|
||||||
if(::toupper(*it1) != ::toupper(*it2)) // letters differ?
|
if(toupper(*it1) != toupper(*it2)) // letters differ?
|
||||||
// return -1 to indicate smaller than, 1 otherwise
|
return toupper(*it1) < toupper(*it2);
|
||||||
return (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1;
|
|
||||||
|
|
||||||
// proceed to the next character in each string
|
// proceed to the next character in each string
|
||||||
++it1;
|
++it1;
|
||||||
++it2;
|
++it2;
|
||||||
}
|
}
|
||||||
size_t size1 = s1.size(), size2 = s2.size(); // cache lengths
|
return _name.size() < g._name.size();
|
||||||
|
|
||||||
// return -1,0 or 1 according to strings' lengths
|
|
||||||
if (size1 == size2)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return (size1 < size2) ? -1 : 1;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: GameList.hxx,v 1.10 2006-03-10 00:29:46 stephena Exp $
|
// $Id: GameList.hxx,v 1.11 2006-04-12 13:32:06 stephena Exp $
|
||||||
//
|
//
|
||||||
// Based on code from KStella - Stella frontend
|
// Based on code from KStella - Stella frontend
|
||||||
// Copyright (C) 2003-2005 Stephen Anthony
|
// Copyright (C) 2003-2005 Stephen Anthony
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
#ifndef GAME_LIST_HXX
|
#ifndef GAME_LIST_HXX
|
||||||
#define GAME_LIST_HXX
|
#define GAME_LIST_HXX
|
||||||
|
|
||||||
#include "Array.hxx"
|
#include <vector>
|
||||||
#include "bspf.hxx"
|
#include "bspf.hxx"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,40 +30,37 @@
|
||||||
*/
|
*/
|
||||||
class GameList
|
class GameList
|
||||||
{
|
{
|
||||||
private:
|
|
||||||
struct Entry {
|
|
||||||
string _name;
|
|
||||||
string _path;
|
|
||||||
string _note;
|
|
||||||
bool _isdir;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef Common::Array<Entry*> EntryList;
|
|
||||||
EntryList myArray;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GameList();
|
GameList();
|
||||||
~GameList();
|
~GameList();
|
||||||
|
|
||||||
inline const string& name(int i)
|
inline const string& name(int i)
|
||||||
{ return i < (int)myArray.size() ? myArray[i]->_name : EmptyString; }
|
{ return i < (int)myArray.size() ? myArray[i]._name : EmptyString; }
|
||||||
inline const string& path(int i)
|
inline const string& path(int i)
|
||||||
{ return i < (int)myArray.size() ? myArray[i]->_path : EmptyString; }
|
{ return i < (int)myArray.size() ? myArray[i]._path : EmptyString; }
|
||||||
inline const string& note(int i)
|
inline const string& note(int i)
|
||||||
{ return i < (int)myArray.size() ? myArray[i]->_note : EmptyString; }
|
{ return i < (int)myArray.size() ? myArray[i]._note : EmptyString; }
|
||||||
inline const bool isDir(int i)
|
inline const bool isDir(int i)
|
||||||
{ return i < (int)myArray.size() ? myArray[i]->_isdir: false; }
|
{ return i < (int)myArray.size() ? myArray[i]._isdir: false; }
|
||||||
|
|
||||||
inline int size() { return myArray.size(); }
|
inline int size() { return myArray.size(); }
|
||||||
void clear();
|
inline void clear() { myArray.clear(); }
|
||||||
|
|
||||||
void appendGame(const string& name, const string& path, const string& note,
|
void appendGame(const string& name, const string& path, const string& note,
|
||||||
bool isDir = false);
|
bool isDir = false);
|
||||||
void sortByName();
|
void sortByName();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void QuickSort(EntryList& list, int l, int r);
|
class Entry {
|
||||||
inline static int compare(const string& s1, const string& s2);
|
public:
|
||||||
|
string _name;
|
||||||
|
string _path;
|
||||||
|
string _note;
|
||||||
|
bool _isdir;
|
||||||
|
|
||||||
|
bool operator < (const Entry& a) const;
|
||||||
|
};
|
||||||
|
vector<Entry> myArray;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: LauncherDialog.cxx,v 1.52 2006-03-20 13:23:13 stephena Exp $
|
// $Id: LauncherDialog.cxx,v 1.53 2006-04-12 13:32:06 stephena Exp $
|
||||||
//
|
//
|
||||||
// Based on code from ScummVM - Scumm Interpreter
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
// Copyright (C) 2002-2004 The ScummVM project
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
@ -84,6 +84,7 @@ LauncherDialog::LauncherDialog(OSystem* osystem, DialogContainer* parent,
|
||||||
myList->setNumberingMode(kListNumberingOff);
|
myList->setNumberingMode(kListNumberingOff);
|
||||||
myList->setEditable(false);
|
myList->setEditable(false);
|
||||||
myList->setFlags(WIDGET_STICKY_FOCUS);
|
myList->setFlags(WIDGET_STICKY_FOCUS);
|
||||||
|
//wid.push_back(myList);
|
||||||
|
|
||||||
// Add note textwidget to show any notes for the currently selected ROM
|
// Add note textwidget to show any notes for the currently selected ROM
|
||||||
xpos += 5; ypos += myList->getHeight() + 4;
|
xpos += 5; ypos += myList->getHeight() + 4;
|
||||||
|
|
Loading…
Reference in New Issue