diff --git a/src/plugins/coreplugin/generalsettings.cpp b/src/plugins/coreplugin/generalsettings.cpp index e196a8116260aa26be2dfab5350b8d17750dfb64..14a5c6a1adebaea3fdf1b7fdd4b72c7efa4387cf 100644 --- a/src/plugins/coreplugin/generalsettings.cpp +++ b/src/plugins/coreplugin/generalsettings.cpp @@ -45,6 +45,7 @@ #include <QtCore/QDir> #include <QtCore/QLibraryInfo> #include <QtCore/QSettings> +#include <QtCore/QTextCodec> #include "ui_generalsettings.h" @@ -125,8 +126,37 @@ QWidget *GeneralSettings::createPage(QWidget *parent) m_page->setupUi(w); QSettings* settings = Core::ICore::instance()->settings(); - Q_UNUSED(settings) fillLanguageBox(); + + QTextCodec *defaultTextCodec = QTextCodec::codecForLocale(); + if (QTextCodec *candidate = QTextCodec::codecForName( + settings->value(QLatin1String("General/DefaultFileEncoding")).toByteArray())) + defaultTextCodec = candidate; + + QList<int> mibs = QTextCodec::availableMibs(); + qSort(mibs); + QList<int> sortedMibs; + foreach (int mib, mibs) + if (mib >= 0) + sortedMibs += mib; + foreach (int mib, mibs) + if (mib < 0) + sortedMibs += mib; + int i = 0; + foreach (int mib, sortedMibs) { + QTextCodec *codec = QTextCodec::codecForMib(mib); + m_codecs += codec; + QString name = codec->name(); + foreach (const QByteArray &alias, codec->aliases()) { + name += QLatin1String(" / "); + name += QString::fromLatin1(alias); + } + m_page->encodingBox->addItem(name); + if (defaultTextCodec == codec) + m_page->encodingBox->setCurrentIndex(i); + i++; + } + m_page->colorButton->setColor(StyleHelper::requestedBaseColor()); m_page->externalEditorEdit->setText(EditorManager::instance()->externalEditor()); m_page->reloadBehavior->setCurrentIndex(EditorManager::instance()->reloadSetting()); @@ -187,12 +217,17 @@ void GeneralSettings::apply() EditorManager::instance()->setExternalEditor(m_page->externalEditorEdit->text()); EditorManager::instance()->setReloadSetting(IFile::ReloadSetting(m_page->reloadBehavior->currentIndex())); #ifdef Q_OS_UNIX - ConsoleProcess::setTerminalEmulator(Core::ICore::instance()->settings(), + ConsoleProcess::setTerminalEmulator(Core::ICore::instance()->settings(), m_page->terminalEdit->text()); #ifndef Q_OS_MAC - Utils::UnixUtils::setFileBrowser(Core::ICore::instance()->settings(), m_page->externalFileBrowserEdit->text()); + Utils::UnixUtils::setFileBrowser(Core::ICore::instance()->settings(), m_page->externalFileBrowserEdit->text()); #endif #endif + + QSettings* settings = Core::ICore::instance()->settings(); + return settings->setValue(QLatin1String("General/DefaultFileEncoding"), + m_codecs.at(m_page->encodingBox->currentIndex())->name()); + } void GeneralSettings::finish() diff --git a/src/plugins/coreplugin/generalsettings.h b/src/plugins/coreplugin/generalsettings.h index 62b478ec8237dfb755293cf9c042325855767ace..89ea18061423dd24dc81b9e42e4e540774574ea8 100644 --- a/src/plugins/coreplugin/generalsettings.h +++ b/src/plugins/coreplugin/generalsettings.h @@ -82,6 +82,7 @@ private: Ui::GeneralSettings *m_page; QString m_searchKeywords; QPointer<QMessageBox> m_dialog; + QList<QTextCodec *> m_codecs; }; } // namespace Internal diff --git a/src/plugins/coreplugin/generalsettings.ui b/src/plugins/coreplugin/generalsettings.ui index d14d007740d871b74e93f94808800475b0175b03..0365ae1a66f25eb77e6492f209db77c269edfc6e 100644 --- a/src/plugins/coreplugin/generalsettings.ui +++ b/src/plugins/coreplugin/generalsettings.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>492</width> - <height>339</height> + <width>487</width> + <height>343</height> </rect> </property> <layout class="QVBoxLayout" name="verticalLayout"> @@ -84,10 +84,17 @@ </property> </widget> </item> - <item row="1" column="1"> + <item row="1" column="1" rowspan="2"> <layout class="QHBoxLayout" name="horizontalLayout_3"> <item> - <widget class="QComboBox" name="languageBox"/> + <widget class="QComboBox" name="languageBox"> + <property name="sizeAdjustPolicy"> + <enum>QComboBox::AdjustToMinimumContentsLengthWithIcon</enum> + </property> + <property name="minimumContentsLength"> + <number>20</number> + </property> + </widget> </item> <item> <spacer name="horizontalSpacer_2"> @@ -104,6 +111,46 @@ </item> </layout> </item> + <item row="2" column="0" rowspan="2"> + <widget class="QLabel" name="encodingLabel"> + <property name="text"> + <string>Default File Encoding: </string> + </property> + </widget> + </item> + <item row="3" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="QComboBox" name="encodingBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="sizeAdjustPolicy"> + <enum>QComboBox::AdjustToMinimumContentsLengthWithIcon</enum> + </property> + <property name="minimumContentsLength"> + <number>20</number> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_6"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>285</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> </layout> </widget> </item> diff --git a/src/plugins/projectexplorer/editorconfiguration.cpp b/src/plugins/projectexplorer/editorconfiguration.cpp index 2892df169992165970581a8c63fde3489df27736..c67bb0a37905b66689ba3cfca3943c6fbb84625a 100644 --- a/src/plugins/projectexplorer/editorconfiguration.cpp +++ b/src/plugins/projectexplorer/editorconfiguration.cpp @@ -28,7 +28,7 @@ **************************************************************************/ #include "editorconfiguration.h" - +#include <coreplugin/icore.h> #include <QtCore/QTextCodec> using namespace ProjectExplorer; @@ -40,6 +40,10 @@ const char * const CODEC("EditorConfiguration.Codec"); EditorConfiguration::EditorConfiguration() : m_defaultTextCodec(QTextCodec::codecForLocale()) { + QSettings* settings = Core::ICore::instance()->settings(); + if (QTextCodec *candidate = QTextCodec::codecForName( + settings->value(QLatin1String("General/DefaultFileEncoding")).toByteArray())) + m_defaultTextCodec = candidate; } QTextCodec *EditorConfiguration::defaultTextCodec() const diff --git a/src/plugins/projectexplorer/editorsettingspropertiespage.cpp b/src/plugins/projectexplorer/editorsettingspropertiespage.cpp index aa341aeb92073d702dbd684787bbaee7a7b23c4e..2c5e5f135c46ff98fcd05120b715009e8195c1a8 100644 --- a/src/plugins/projectexplorer/editorsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/editorsettingspropertiespage.cpp @@ -121,7 +121,6 @@ EditorSettingsWidget::EditorSettingsWidget(Project *project) void EditorSettingsWidget::currentEncodingChanged(int index) { - QList<int> codecs = QTextCodec::availableMibs(); m_project->editorConfiguration()->setDefaultTextCodec(m_codecs.at(index)); } diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp index d47e1a24415a9e8bd073f6092e637514517559b4..f1bf0e0f1307d5edabe34da7aa715ec5c66222d6 100644 --- a/src/plugins/texteditor/basetextdocument.cpp +++ b/src/plugins/texteditor/basetextdocument.cpp @@ -61,6 +61,11 @@ BaseTextDocument::BaseTextDocument() m_fileIsReadOnly = false; m_isBinaryData = false; m_codec = QTextCodec::codecForLocale(); + QSettings* settings = Core::ICore::instance()->settings(); + if (QTextCodec *candidate = QTextCodec::codecForName( + settings->value(QLatin1String("General/DefaultFileEncoding")).toByteArray())) + m_codec = candidate; + m_hasDecodingError = false; }