summaryrefslogtreecommitdiffstats
path: root/chrome/browser/encoding_menu_controller_delegate.cc
diff options
context:
space:
mode:
authorjeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-14 17:50:53 +0000
committerjeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-14 17:50:53 +0000
commit2bcec61a43b8b7ed7b9b0e96b68f5ed42110081a (patch)
tree957d756c489075bd18a8e09e5ee38c8a8e769ab8 /chrome/browser/encoding_menu_controller_delegate.cc
parentd0bc15b44084f5860456ef9beac1f64bcfaf0eaf (diff)
downloadchromium_src-2bcec61a43b8b7ed7b9b0e96b68f5ed42110081a.zip
chromium_src-2bcec61a43b8b7ed7b9b0e96b68f5ed42110081a.tar.gz
chromium_src-2bcec61a43b8b7ed7b9b0e96b68f5ed42110081a.tar.bz2
Implement OS X Encoding Menu.
Also refactor Windows Encoding menu a bit to make the moving parts x-platform. Add a unit test for the menu encoding logic. In a followup CL I'll add some UI tests around this. Review URL: http://codereview.chromium.org/113315 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16072 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/encoding_menu_controller_delegate.cc')
-rw-r--r--chrome/browser/encoding_menu_controller_delegate.cc109
1 files changed, 27 insertions, 82 deletions
diff --git a/chrome/browser/encoding_menu_controller_delegate.cc b/chrome/browser/encoding_menu_controller_delegate.cc
index a7a925a..6faac2d 100644
--- a/chrome/browser/encoding_menu_controller_delegate.cc
+++ b/chrome/browser/encoding_menu_controller_delegate.cc
@@ -4,77 +4,34 @@
#include "chrome/browser/encoding_menu_controller_delegate.h"
-#include "app/l10n_util.h"
#include "chrome/app/chrome_dll_resource.h"
#include "chrome/browser/browser.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/character_encoding.h"
+#include "chrome/browser/encoding_menu_controller.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/pref_service.h"
-#include "grit/generated_resources.h"
EncodingMenuControllerDelegate::EncodingMenuControllerDelegate(Browser* browser)
: browser_(browser) {
}
bool EncodingMenuControllerDelegate::IsItemChecked(int id) const {
- Profile* profile = browser_->profile();
+ if (!browser_)
+ return false;
+ Profile *profile = browser_->profile();
if (!profile)
return false;
TabContents* current_tab = browser_->GetSelectedTabContents();
- if (!current_tab)
+ if (!current_tab) {
return false;
- std::wstring encoding = current_tab->encoding();
- if (encoding.empty())
- encoding = profile->GetPrefs()->GetString(prefs::kDefaultCharset);
- switch (id) {
- case IDC_ENCODING_AUTO_DETECT:
- return profile->GetPrefs()->GetBoolean(
- prefs::kWebKitUsesUniversalDetector);
- case IDC_ENCODING_UTF8:
- case IDC_ENCODING_UTF16LE:
- case IDC_ENCODING_ISO88591:
- case IDC_ENCODING_WINDOWS1252:
- case IDC_ENCODING_GBK:
- case IDC_ENCODING_GB18030:
- case IDC_ENCODING_BIG5:
- case IDC_ENCODING_BIG5HKSCS:
- case IDC_ENCODING_KOREAN:
- case IDC_ENCODING_SHIFTJIS:
- case IDC_ENCODING_ISO2022JP:
- case IDC_ENCODING_EUCJP:
- case IDC_ENCODING_THAI:
- case IDC_ENCODING_ISO885915:
- case IDC_ENCODING_MACINTOSH:
- case IDC_ENCODING_ISO88592:
- case IDC_ENCODING_WINDOWS1250:
- case IDC_ENCODING_ISO88595:
- case IDC_ENCODING_WINDOWS1251:
- case IDC_ENCODING_KOI8R:
- case IDC_ENCODING_KOI8U:
- case IDC_ENCODING_ISO88597:
- case IDC_ENCODING_WINDOWS1253:
- case IDC_ENCODING_ISO88594:
- case IDC_ENCODING_ISO885913:
- case IDC_ENCODING_WINDOWS1257:
- case IDC_ENCODING_ISO88593:
- case IDC_ENCODING_ISO885910:
- case IDC_ENCODING_ISO885914:
- case IDC_ENCODING_ISO885916:
- case IDC_ENCODING_WINDOWS1254:
- case IDC_ENCODING_ISO88596:
- case IDC_ENCODING_WINDOWS1256:
- case IDC_ENCODING_ISO88598:
- case IDC_ENCODING_ISO88598I:
- case IDC_ENCODING_WINDOWS1255:
- case IDC_ENCODING_WINDOWS1258:
- return (!encoding.empty() && encoding ==
- CharacterEncoding::GetCanonicalEncodingNameByCommandId(id));
- default:
- return false;
}
+ const std::wstring encoding = current_tab->encoding();
+
+ EncodingMenuController controller;
+ return controller.IsItemChecked(profile, encoding, id);
}
bool EncodingMenuControllerDelegate::SupportsCommand(int id) const {
@@ -97,38 +54,26 @@ void EncodingMenuControllerDelegate::ExecuteCommand(int id) {
void EncodingMenuControllerDelegate::BuildEncodingMenu(
Profile* profile, Menu* encoding_menu) {
- // Append auto-detection item.
- encoding_menu->AppendMenuItem(IDC_ENCODING_AUTO_DETECT,
- l10n_util::GetString(IDS_ENCODING_AUTO_DETECT),
- Menu::CHECKBOX);
+ typedef EncodingMenuController::EncodingMenuItemList EncodingMenuItemList;
+ EncodingMenuItemList menuItems;
+ EncodingMenuController controller;
+ controller.GetEncodingMenuItems(profile, &menuItems);
- // Append encoding item.
- encoding_menu->AppendSeparator();
- // Create current display encoding list.
- std::wstring cur_locale = g_browser_process->GetApplicationLocale();
- const std::vector<CharacterEncoding::EncodingInfo>* encodings;
- // Build the list of encoding ids : It is made of the
- // locale-dependent short list, the cache of recently selected
- // encodings and other encodings.
- encodings = CharacterEncoding::GetCurrentDisplayEncodings(
- cur_locale,
- profile->GetPrefs()->GetString(prefs::kStaticEncodings),
- profile->GetPrefs()->GetString(prefs::kRecentlySelectedEncoding));
- DCHECK(encodings);
- DCHECK(!encodings->empty());
- unsigned len = static_cast<unsigned>(encodings->size());
- // Add encoding menus.
- std::vector<CharacterEncoding::EncodingInfo>::const_iterator it;
- for (it = encodings->begin(); it != encodings->end(); ++it) {
- if (it->encoding_id) {
- std::wstring encoding = it->encoding_display_name;
- std::wstring bidi_safe_encoding;
- if (l10n_util::AdjustStringForLocaleDirection(encoding,
- &bidi_safe_encoding))
- encoding.swap(bidi_safe_encoding);
- encoding_menu->AppendMenuItem(it->encoding_id, encoding, Menu::RADIO);
- } else {
+ for (EncodingMenuItemList::iterator it = menuItems.begin();
+ it != menuItems.end();
+ ++it) {
+ Menu::MenuItemType type = Menu::RADIO;
+ int id = it->first;
+ std::wstring &localized_title = it->second;
+
+ if (id == 0) {
encoding_menu->AppendSeparator();
+ } else {
+ if (id == IDC_ENCODING_AUTO_DETECT) {
+ type = Menu::CHECKBOX;
+ }
+
+ encoding_menu->AppendMenuItem(id, localized_title, type);
}
}
}