diff --git a/gui/gui.pro b/gui/gui.pro
index e5b927c56..1d68a5569 100644
--- a/gui/gui.pro
+++ b/gui/gui.pro
@@ -63,6 +63,7 @@ HEADERS += aboutdialog.h \
fileviewdialog.h \
logview.h \
mainwindow.h \
+ platforms.h \
project.h \
projectfile.h \
projectfiledialog.h \
@@ -92,6 +93,7 @@ SOURCES += aboutdialog.cpp \
logview.cpp \
main.cpp \
mainwindow.cpp\
+ platforms.cpp \
project.cpp \
projectfile.cpp \
projectfiledialog.cpp \
diff --git a/gui/main.ui b/gui/main.ui
index 0c6c3dbec..00d355bbb 100644
--- a/gui/main.ui
+++ b/gui/main.ui
@@ -134,12 +134,7 @@
-
-
-
-
-
-
+
diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp
index dea8acea8..ceb9cb3f5 100644
--- a/gui/mainwindow.cpp
+++ b/gui/mainwindow.cpp
@@ -117,22 +117,6 @@ MainWindow::MainWindow() :
connect(mUI.mActionHelpContents, SIGNAL(triggered()), this, SLOT(OpenHelpContents()));
- QActionGroup* platformGroup = new QActionGroup(this);
- mUI.mActionPlatformDefault->setActionGroup(platformGroup);
- mUI.mActionPlatformUnix32Bit->setActionGroup(platformGroup);
- mUI.mActionPlatformUnix64Bit->setActionGroup(platformGroup);
- mUI.mActionPlatformWin32ANSI->setActionGroup(platformGroup);
- mUI.mActionPlatformWin32Unicode->setActionGroup(platformGroup);
- mUI.mActionPlatformWin64->setActionGroup(platformGroup);
- mUI.mActionPlatformDefault->setChecked(true);
-
- connect(mUI.mActionPlatformDefault, SIGNAL(triggered()), this, SLOT(PlatformDefault()));
- connect(mUI.mActionPlatformUnix32Bit, SIGNAL(triggered()), this, SLOT(PlatformUnix32Bit()));
- connect(mUI.mActionPlatformUnix64Bit, SIGNAL(triggered()), this, SLOT(PlatformUnix64Bit()));
- connect(mUI.mActionPlatformWin32ANSI, SIGNAL(triggered()), this, SLOT(PlatformWin32ANSI()));
- connect(mUI.mActionPlatformWin32Unicode, SIGNAL(triggered()), this, SLOT(PlatformWin32Unicode()));
- connect(mUI.mActionPlatformWin64, SIGNAL(triggered()), this, SLOT(PlatformWin64()));
-
LoadSettings();
mThread->Initialize(mUI.mResults);
@@ -164,6 +148,26 @@ MainWindow::MainWindow() :
mRecentProjectActs[MaxRecentProjects] = NULL; // The separator
mUI.mActionProjectMRU->setVisible(false);
UpdateMRUMenuItems();
+
+ QActionGroup* platformGroup = new QActionGroup(this);
+ for (int i = 0; i < mPlatforms.getCount(); i++)
+ {
+ Platform plat = mPlatforms.mPlatforms[i];
+ QAction *act = new QAction(this);
+ plat.mActMainWindow = act;
+ mPlatforms.mPlatforms[i] = plat;
+ act->setText(plat.mTitle);
+ act->setData(plat.mType);
+ act->setCheckable(true);
+ act->setActionGroup(platformGroup);
+ mUI.mMenuCheck->insertAction(mUI.mActionPlatforms, act);
+ connect(act, SIGNAL(triggered()), this, SLOT(SelectPlatform()));
+ }
+
+ // Set the "default" as selected initially
+ Platform &plat = mPlatforms.get(Settings::Unspecified);
+ plat.mActMainWindow->setChecked(true);
+ mSettings->setValue(SETTINGS_CHECKED_PLATFORM, Settings::Unspecified);
}
MainWindow::~MainWindow()
@@ -1108,33 +1112,12 @@ void MainWindow::RemoveProjectMRU(const QString &project)
UpdateMRUMenuItems();
}
-
-void MainWindow::PlatformDefault()
+void MainWindow::SelectPlatform()
{
- mSettings->setValue(SETTINGS_CHECKED_PLATFORM, Settings::Unspecified);
-}
-
-void MainWindow::PlatformUnix32Bit()
-{
- mSettings->setValue(SETTINGS_CHECKED_PLATFORM, Settings::Unix32);
-}
-
-void MainWindow::PlatformUnix64Bit()
-{
- mSettings->setValue(SETTINGS_CHECKED_PLATFORM, Settings::Unix64);
-}
-
-void MainWindow::PlatformWin32ANSI()
-{
- mSettings->setValue(SETTINGS_CHECKED_PLATFORM, Settings::Win32A);
-}
-
-void MainWindow::PlatformWin32Unicode()
-{
- mSettings->setValue(SETTINGS_CHECKED_PLATFORM, Settings::Win32W);
-}
-
-void MainWindow::PlatformWin64()
-{
- mSettings->setValue(SETTINGS_CHECKED_PLATFORM, Settings::Win64);
+ QAction *action = qobject_cast(sender());
+ if (action)
+ {
+ const Settings::PlatformType platform = (Settings::PlatformType) action->data().toInt();
+ mSettings->setValue(SETTINGS_CHECKED_PLATFORM, platform);
+ }
}
diff --git a/gui/mainwindow.h b/gui/mainwindow.h
index 0ec00e19f..ddd0550f7 100644
--- a/gui/mainwindow.h
+++ b/gui/mainwindow.h
@@ -32,6 +32,7 @@
#include "settingsdialog.h"
#include "translationhandler.h"
#include "settings.h"
+#include "platforms.h"
#include "ui_main.h"
class ThreadHandler;
@@ -61,6 +62,11 @@ public:
MainWindow();
virtual ~MainWindow();
+ /**
+ * List of checked platforms.
+ */
+ Platforms mPlatforms;
+
public slots:
/**
@@ -286,36 +292,9 @@ protected slots:
void OpenRecentProject();
/**
- * @brief Selects "default" as the checked platform.
- * Selects the platform as the "default", meaning whichever platform the
- * GUI was compiled with.
+ * @brief Selects the platform as checked platform.
*/
- void PlatformDefault();
-
- /**
- * @brief Selects 32-bit Unix as the checked platform.
- */
- void PlatformUnix32Bit();
-
- /**
- * @brief Selects 64-bit Unix as the checked platform.
- */
- void PlatformUnix64Bit();
-
- /**
- * @brief Selects 32-bit ANSI Windows as the checked platform.
- */
- void PlatformWin32ANSI();
-
- /**
- * @brief Selects 32-bit Unicode Windows as the checked platform.
- */
- void PlatformWin32Unicode();
-
- /**
- * @brief Selects 64-bit Windows as the checked platform.
- */
- void PlatformWin64();
+ void SelectPlatform();
protected:
diff --git a/gui/platforms.cpp b/gui/platforms.cpp
new file mode 100644
index 000000000..ce3566a54
--- /dev/null
+++ b/gui/platforms.cpp
@@ -0,0 +1,61 @@
+/*
+ * Cppcheck - A tool for static C/C++ code analysis
+ * Copyright (C) 2007-2011 Daniel Marjamäki and Cppcheck team.
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program. If not, see .
+ */
+
+#include "platforms.h"
+
+Platforms::Platforms(QObject *parent)
+ : QObject(parent)
+{
+ init();
+}
+
+void Platforms::add(const QString &title, Settings::PlatformType platform)
+{
+ Platform plat;
+ plat.mTitle = title;
+ plat.mType = platform;
+ mPlatforms << plat;
+}
+
+void Platforms::init()
+{
+ add(tr("Default"), Settings::Unspecified);
+ add(tr("Unix 32-bit"), Settings::Unix32);
+ add(tr("Unix 64-bit"), Settings::Unix64);
+ add(tr("Windows 32-bit ANSI"), Settings::Win32A);
+ add(tr("Windows 32-bit Unicode"), Settings::Win32W);
+ add(tr("Windows 64-bit"), Settings::Win64);
+}
+
+int Platforms::getCount() const
+{
+ return mPlatforms.count();
+}
+
+Platform& Platforms::get(Settings::PlatformType platform)
+{
+ QList::iterator iter = mPlatforms.begin();
+ while (iter != mPlatforms.end())
+ {
+ if ((*iter).mType == platform)
+ {
+ return *iter;
+ }
+ }
+ return mPlatforms.first();
+}
diff --git a/gui/platforms.h b/gui/platforms.h
new file mode 100644
index 000000000..62de8b2bd
--- /dev/null
+++ b/gui/platforms.h
@@ -0,0 +1,59 @@
+/*
+ * Cppcheck - A tool for static C/C++ code analysis
+ * Copyright (C) 2007-2011 Daniel Marjamäki and Cppcheck team.
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program. If not, see .
+ */
+
+#ifndef PLATFORMS_H
+#define PLATFORMS_H
+
+#include
+#include
+#include
+#include
+#include "settings.h"
+
+/// @addtogroup GUI
+/// @{
+
+/**
+ * @brief Checked platform GUI-data.
+ */
+struct Platform
+{
+ QString mTitle; /**< Text visible in the GUI. */
+ Settings::PlatformType mType; /**< Type in the core. */
+ QAction *mActMainWindow; /**< Pointer to main window action item. */
+};
+
+/**
+ * @brief List of checked platforms.
+ */
+class Platforms : public QObject
+{
+ Q_OBJECT
+
+public:
+ Platforms(QObject *parent = NULL);
+ void add(const QString &title, Settings::PlatformType platform);
+ int getCount() const;
+ void init();
+ Platform& get(Settings::PlatformType platform);
+
+ QList mPlatforms;
+};
+
+/// @}
+#endif // PLATFORMS_H