store currently selected scheme as string, since it appears ModelIndex

is neither tied to the data it points to nor invalidated by changes.
enforce valid state on reject since the list of schemes may have 
changed.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@152 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
This commit is contained in:
sinamas 2008-05-27 08:27:27 +00:00
parent c69d155ade
commit 986d6628e0
2 changed files with 26 additions and 18 deletions

View File

@ -205,6 +205,11 @@ static const QModelIndex schemeIndexOf(const QAbstractItemModel *const model, co
return model->index(i, 0);
}
for (int i = 0; i < rows; ++i) {
if (model->index(i, 0).data().toString() == "Current Scheme")
return model->index(i, 0);
}
return QModelIndex();
}
@ -224,7 +229,7 @@ PaletteDialog::PaletteDialog(const QString &savepath, const PaletteDialog *globa
savedir = savepath + "/";
QDir::root().mkpath(savedir + "stored/");
listView->setModel(new ImmutableStringListModel);
setSchemeList(savedir + "stored/", global, reinterpret_cast<QStringListModel*>(listView->model()));
setSchemeList();
frameLayout->addWidget(listView);
{
@ -276,7 +281,7 @@ PaletteDialog::PaletteDialog(const QString &savepath, const PaletteDialog *globa
connect(listView->selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(schemeChanged(const QModelIndex&, const QModelIndex&)));
if (global) {
schemeIndex = schemeIndexOf(listView->model(), "Global Palette");
schemeString = "Global Palette";
restore();
store();
} else {
@ -299,7 +304,7 @@ PaletteDialog::~PaletteDialog() {
}
void PaletteDialog::saveSettings(QSettings &settings) {
settings.setValue("slectedScheme", schemeIndex.data());
settings.setValue("slectedScheme", schemeString);
for (unsigned i = 0; i < 3; ++i)
for (unsigned j = 0; j < 4; ++j)
@ -307,10 +312,7 @@ void PaletteDialog::saveSettings(QSettings &settings) {
}
void PaletteDialog::loadSettings(QSettings &settings) {
schemeIndex = schemeIndexOf(listView->model(), settings.value("slectedScheme", global ? "Global Palette" : "Default Grey").toString());
if (!schemeIndex.isValid())
schemeIndex = schemeIndexOf(listView->model(), "Current Scheme");
schemeString = settings.value("slectedScheme", global ? "Global Palette" : "Default Grey").toString();
for (unsigned i = 0; i < 3; ++i)
for (unsigned j = 0; j < 4; ++j)
@ -322,7 +324,7 @@ void PaletteDialog::loadSettings(QSettings &settings) {
void PaletteDialog::saveToSettingsFile() {
if (!settingsFile.isEmpty()) {
if (schemeIndex.data().toString() == "Global Palette") {
if (schemeString == "Global Palette") {
QDir(savedir).remove(settingsFile);
} else {
QSettings settings(savedir + settingsFile, QSettings::IniFormat);
@ -331,13 +333,17 @@ void PaletteDialog::saveToSettingsFile() {
}
}
void PaletteDialog::setSchemeList() {
::setSchemeList(savedir + "stored/", global, reinterpret_cast<QStringListModel*>(listView->model()));
}
void PaletteDialog::rmScheme() {
{
QDir(savedir + "stored/").remove(listView->currentIndex().data().toString() + ".pal");
}
listView->selectionModel()->clear();
setSchemeList(savedir + "stored/", global, reinterpret_cast<QStringListModel*>(listView->model()));
setSchemeList();
}
void PaletteDialog::saveScheme() {
@ -348,7 +354,8 @@ void PaletteDialog::saveScheme() {
if (!ok)
return;
if (text.isEmpty() || "Global Palette" == text || "Current Scheme" == text || "Default Grey" == text || text.contains('/')) {
if (text.isEmpty() || "Global Palette" == text || "Current Scheme" == text || "Default Grey" == text ||
text.size() > 200 || text.contains(QRegExp("[" + QRegExp::escape("<>:\"/\\|?*") + "]"))) {
QMessageBox::information(this, "Invalid scheme name", "Invalid scheme name.");
return;
}
@ -361,7 +368,7 @@ void PaletteDialog::saveScheme() {
settings.setValue(quads[i]->title() + QString::number(j), quads[i]->getColor(j));
}
setSchemeList(savedir + "stored/", global, reinterpret_cast<QStringListModel*>(listView->model()));
setSchemeList();
listView->setCurrentIndex(schemeIndexOf(listView->model(), text));
}
@ -405,17 +412,16 @@ void PaletteDialog::store() {
if (!listView->currentIndex().isValid())
listView->setCurrentIndex(schemeIndexOf(listView->model(), "Current Scheme")); //obs: will emit currentChanged()
schemeIndex = listView->currentIndex();
schemeString = listView->currentIndex().data().toString();
}
void PaletteDialog::restore() {
listView->setCurrentIndex(schemeIndex);
listView->setCurrentIndex(schemeIndexOf(listView->model(), schemeString));
}
void PaletteDialog::externalChange() {
const QString &str = schemeIndex.data().toString();
setSchemeList(savedir + "stored/", global, reinterpret_cast<QStringListModel*>(listView->model()));
listView->setCurrentIndex(schemeIndexOf(listView->model(), str));
setSchemeList();
restore();
store();
}
@ -435,5 +441,6 @@ void PaletteDialog::accept() {
void PaletteDialog::reject() {
restore();
QDialog::reject();
// QDialog::reject();
QDialog::accept();
}

View File

@ -90,13 +90,14 @@ class PaletteDialog : public QDialog {
QPushButton *const rmSchemeButton;
ColorQuad *quads[3];
QRgb currentColors[3][4];
QModelIndex schemeIndex;
QString schemeString;
QString savedir;
QString settingsFile;
void saveSettings(QSettings &settings);
void loadSettings(QSettings &settings);
void saveToSettingsFile();
void setSchemeList();
void store();
void restore();