From e5159a19507affcbe62d9e19780b6a6c5ef79281 Mon Sep 17 00:00:00 2001 From: Pieter van der Kloet Date: Tue, 26 Jun 2012 15:37:40 +0200 Subject: [PATCH] Modified sorting of the values in the Graphics Page --- apps/launcher/graphicspage.cpp | 101 ++++++++++++++++----------------- apps/launcher/naturalsort.cpp | 10 ++++ apps/launcher/naturalsort.hpp | 4 +- 3 files changed, 61 insertions(+), 54 deletions(-) diff --git a/apps/launcher/graphicspage.cpp b/apps/launcher/graphicspage.cpp index e517454c7..b202b1ecf 100644 --- a/apps/launcher/graphicspage.cpp +++ b/apps/launcher/graphicspage.cpp @@ -1,22 +1,10 @@ -#include "graphicspage.hpp" - #include -#include - #include #include -//sort resolutions descending -bool resolutionLessThan(const QString &str1, const QString &str2) -{ - // Get the first parts of the resolution strings - int width1 = str1.left(str1.indexOf(" ")).toInt(); - int width2 = str2.left(str2.indexOf(" ")).toInt(); - - return (width1 > width2); -} - +#include "graphicspage.hpp" +#include "naturalsort.hpp" GraphicsPage::GraphicsPage(Files::ConfigurationManager &cfg, QWidget *parent) : QWidget(parent) @@ -77,11 +65,11 @@ bool GraphicsPage::setupOgre() try { - #if defined(ENABLE_PLUGIN_GL) || defined(ENABLE_PLUGIN_Direct3D9) +#if defined(ENABLE_PLUGIN_GL) || defined(ENABLE_PLUGIN_Direct3D9) mOgre = new Ogre::Root("", "", "./launcherOgre.log"); - #else +#else mOgre = new Ogre::Root(pluginCfg.toStdString(), "", "./launcherOgre.log"); - #endif +#endif } catch(Ogre::Exception &ex) { @@ -100,14 +88,14 @@ bool GraphicsPage::setupOgre() return false; } - #ifdef ENABLE_PLUGIN_GL - mGLPlugin = new Ogre::GLPlugin(); - mOgre->installPlugin(mGLPlugin); - #endif - #ifdef ENABLE_PLUGIN_Direct3D9 - mD3D9Plugin = new Ogre::D3D9Plugin(); - mOgre->installPlugin(mD3D9Plugin); - #endif +#ifdef ENABLE_PLUGIN_GL + mGLPlugin = new Ogre::GLPlugin(); + mOgre->installPlugin(mGLPlugin); +#endif +#ifdef ENABLE_PLUGIN_Direct3D9 + mD3D9Plugin = new Ogre::D3D9Plugin(); + mOgre->installPlugin(mD3D9Plugin); +#endif // Get the available renderers and put them in the combobox const Ogre::RenderSystemList &renderers = mOgre->getAvailableRenderers(); @@ -117,30 +105,16 @@ bool GraphicsPage::setupOgre() mRendererComboBox->addItem((*r)->getName().c_str()); } - int index = mRendererComboBox->findText(QString::fromStdString(Settings::Manager::getString("render system", "Video"))); - - if ( index != -1) { - mRendererComboBox->setCurrentIndex(index); - } - else - { -#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 - mRendererComboBox->setCurrentIndex(mRendererComboBox->findText("Direct3D9 Rendering Subsystem")); -#else - mRendererComboBox->setCurrentIndex(mRendererComboBox->findText("OpenGL Rendering Subsystem")); -#endif - } + QString openGLName = QString("OpenGL Rendering Subsystem"); + QString direct3DName = QString("Direct3D9 Rendering Subsystem"); // Create separate rendersystems - QString openGLName = mRendererComboBox->itemText(mRendererComboBox->findText(QString("OpenGL"), Qt::MatchStartsWith)); - QString direct3DName = mRendererComboBox->itemText(mRendererComboBox->findText(QString("Direct3D"), Qt::MatchStartsWith)); - mOpenGLRenderSystem = mOgre->getRenderSystemByName(openGLName.toStdString()); mDirect3DRenderSystem = mOgre->getRenderSystemByName(direct3DName.toStdString()); if (!mOpenGLRenderSystem && !mDirect3DRenderSystem) { QMessageBox msgBox; - msgBox.setWindowTitle("Error creating renderer"); + msgBox.setWindowTitle(tr("Error creating renderer")); msgBox.setIcon(QMessageBox::Critical); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setText(tr("
Could not select a valid render system

\ @@ -151,6 +125,20 @@ bool GraphicsPage::setupOgre() } // Now fill the GUI elements + int index = mRendererComboBox->findText(QString::fromStdString(Settings::Manager::getString("render system", "Video"))); + + if ( index != -1) { + mRendererComboBox->setCurrentIndex(index); + } + else + { +#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 + mRendererComboBox->setCurrentIndex(mRendererComboBox->findText(direct3DName)); +#else + mRendererComboBox->setCurrentIndex(mRendererComboBox->findText(openGLName)); +#endif + } + mAntiAliasingComboBox->clear(); mResolutionComboBox->clear(); mAntiAliasingComboBox->addItems(getAvailableOptions(QString("FSAA"), mSelectedRenderSystem)); @@ -172,9 +160,10 @@ void GraphicsPage::readConfig() if (aaIndex != -1) mAntiAliasingComboBox->setCurrentIndex(aaIndex); - std::string resolution = boost::lexical_cast(Settings::Manager::getInt("resolution x", "Video")) - + " x " + boost::lexical_cast(Settings::Manager::getInt("resolution y", "Video")); - int resIndex = mResolutionComboBox->findText(QString::fromStdString(resolution)); + QString resolution = QString::number(Settings::Manager::getInt("resolution x", "Video")); + resolution.append(" x " + QString::number(Settings::Manager::getInt("resolution y", "Video"))); + + int resIndex = mResolutionComboBox->findText(resolution); if (resIndex != -1) mResolutionComboBox->setCurrentIndex(resIndex); } @@ -189,8 +178,9 @@ void GraphicsPage::writeConfig() // parse resolution x and y from a string like "800 x 600" QString resolution = mResolutionComboBox->currentText(); QStringList tokens = resolution.split(" ", QString::SkipEmptyParts); - int resX = boost::lexical_cast(tokens.at(0).toStdString()); - int resY = boost::lexical_cast(tokens.at(2).toStdString()); + + int resX = tokens.at(0).toInt(); + int resY = tokens.at(2).toInt(); Settings::Manager::setInt("resolution x", "Video", resX); Settings::Manager::setInt("resolution y", "Video", resY); } @@ -212,17 +202,21 @@ QStringList GraphicsPage::getAvailableOptions(const QString &key, Ogre::RenderSy if (strcmp (key.toStdString().c_str(), i->first.c_str()) == 0) { - if (key == "FSAA" && *opt_it == "0") - result << QString("none"); - else - result << ((key == "FSAA") ? QString("MSAA ") : QString("")) + QString::fromStdString((*opt_it).c_str()).simplified(); + result << ((key == "FSAA") ? QString("MSAA ") : QString("")) + QString::fromStdString((*opt_it).c_str()).simplified(); } } } // Sort ascending - result.sort(); + qSort(result.begin(), result.end(), naturalSortLessThanCI); + + // Replace the zero option with Off + int index = result.indexOf("MSAA 0"); + + if (index != -1) + result.replace(index, tr("Off")); + return result; } @@ -260,7 +254,8 @@ QStringList GraphicsPage::getAvailableResolutions(Ogre::RenderSystem *renderer) } // Sort the resolutions in descending order - qSort(result.begin(), result.end(), resolutionLessThan); + qSort(result.begin(), result.end(), naturalSortGreaterThanCI); + return result; } diff --git a/apps/launcher/naturalsort.cpp b/apps/launcher/naturalsort.cpp index 648038ed7..50d1e77de 100644 --- a/apps/launcher/naturalsort.cpp +++ b/apps/launcher/naturalsort.cpp @@ -93,3 +93,13 @@ bool naturalSortLessThanCI( const QString &left, const QString &right ) { return (naturalCompare( left, right, Qt::CaseInsensitive ) < 0); } + +bool naturalSortGreaterThanCS( const QString &left, const QString &right ) +{ + return (naturalCompare( left, right, Qt::CaseSensitive ) > 0); +} + +bool naturalSortGreaterThanCI( const QString &left, const QString &right ) +{ + return (naturalCompare( left, right, Qt::CaseInsensitive ) > 0); +} diff --git a/apps/launcher/naturalsort.hpp b/apps/launcher/naturalsort.hpp index 2d314396f..59271547a 100644 --- a/apps/launcher/naturalsort.hpp +++ b/apps/launcher/naturalsort.hpp @@ -5,5 +5,7 @@ bool naturalSortLessThanCS( const QString &left, const QString &right ); bool naturalSortLessThanCI( const QString &left, const QString &right ); +bool naturalSortGreaterThanCS( const QString &left, const QString &right ); +bool naturalSortGreaterThanCI( const QString &left, const QString &right ); -#endif \ No newline at end of file +#endif