Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(863)

Unified Diff: chrome/browser/cocoa/translate/translate_infobar_base.h

Issue 2815013: Refactor the translate infobars on mac to match the new windows code. (Closed)
Patch Set: Move unittest stuff back to class files Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/cocoa/translate/translate_infobar_base.h
diff --git a/chrome/browser/cocoa/translate/translate_infobar_base.h b/chrome/browser/cocoa/translate/translate_infobar_base.h
new file mode 100644
index 0000000000000000000000000000000000000000..e475be98444c05b5eade84f4017b21f6bdf78e20
--- /dev/null
+++ b/chrome/browser/cocoa/translate/translate_infobar_base.h
@@ -0,0 +1,143 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_COCOA_TRANSLATE_INFOBAR_BASE_H_
+#define CHROME_BROWSER_COCOA_TRANSLATE_INFOBAR_BASE_H_
+
+#import <Cocoa/Cocoa.h>
+#import "chrome/browser/cocoa/infobar_controller.h"
+
+#import "base/cocoa_protocols_mac.h"
+#import "base/scoped_nsobject.h"
+#include "base/scoped_ptr.h"
+#include "chrome/browser/translate/languages_menu_model2.h"
+#include "chrome/browser/translate/options_menu_model2.h"
+#include "chrome/browser/translate/translate_infobar_delegate2.h"
+#include "chrome/common/notification_registrar.h"
+#include "chrome/common/translate_errors.h"
+
+class TranslateInfoBarMenuModel;
+
+#pragma mark TranslateInfoBarUtilities helper functions.
+namespace TranslateInfoBarUtilities {
+
+// Move the |toMove| view |spacing| pixels before/after the |anchor| view.
+// |after| signifies the side of |anchor| on which to place |toMove|.
+void MoveControl(NSView* anchor, NSView* toMove, int spacing, bool after);
+
+// Vertically center |toMove| in its container.
+void VerticallyCenterView(NSView *toMove);
+// Check that the control |before| is ordered visually before the |after|
+// control.
+// Also, check that there is space between them.
+bool VerifyControlOrderAndSpacing(id before, id after);
+
+// Creates a label control in the style we need for the translate infobar's
+// labels within |bounds|.
+NSTextField* CreateLabel(NSRect bounds);
+
+// Adds an item with the specified properties to |menu|.
+void AddMenuItem(NSMenu *menu, id target, SEL selector, NSString* title,
+ int tag, bool enabled, bool checked);
+
+} // namespace
+
+// The base class for the three translate infobars. This class does all of the
+// heavy UI lifting, while deferring to the subclass to tell it what views
+// should be shown and where. Subclasses need to implement:
+// - (void)layout;
+// - (void)loadLabelText;
+// - (void)visibleControls;
+// - (bool)verifyLayout; // For testing.
+@interface TranslateInfoBarControllerBase : InfoBarController<NSMenuDelegate> {
+ @protected
+ scoped_nsobject<NSTextField> label1_;
+ scoped_nsobject<NSTextField> label2_;
+ scoped_nsobject<NSTextField> label3_;
+ scoped_nsobject<NSPopUpButton> fromLanguagePopUp_;
+ scoped_nsobject<NSPopUpButton> toLanguagePopUp_;
+ scoped_nsobject<NSPopUpButton> optionsPopUp_;
+ scoped_nsobject<NSButton> showOriginalButton_;
+ scoped_nsobject<NSButton> tryAgainButton_;
+
+ // In the current locale, are the "from" and "to" language popup menu
+ // flipped from what they'd appear in English.
+ bool swappedLanguagePlaceholders_;
+
+ // Space between controls in pixels - read from the NIB.
+ CGFloat spaceBetweenControls_;
+
+ scoped_ptr<LanguagesMenuModel2> originalLanguageMenuModel_;
+ scoped_ptr<LanguagesMenuModel2> targetLanguageMenuModel_;
+ scoped_ptr<OptionsMenuModel2> optionsMenuModel_;
+}
+
+// Returns the delegate as a TranslateInfoBarDelegate.
+- (TranslateInfoBarDelegate2*)delegate;
+
+// Called when the "Show Original" button is pressed.
+- (IBAction)showOriginal:(id)sender;
+
+@end
+
+@interface TranslateInfoBarControllerBase (ProtectedAPI)
+
+// Move all the currently visible views into the correct place for the
+// current mode.
+// Must be implemented by the subclass.
+- (void)layout;
+
+// Loads the text for the 3 labels. There is only one message, but since
+// it has controls separating parts of it, it is separated into 3 separate
+// labels.
+// Must be implemented by the subclass.
+- (void)loadLabelText;
+
+// Returns the controls that are visible in the subclasses infobar. The
+// default implementation returns an empty array. The controls should
+// be returned in the order they are displayed, otherwise the layout test
+// will fail.
+// Must be implemented by the subclass.
+- (NSArray*)visibleControls;
+
+// Shows the array of controls provided by the subclass.
+- (void)showVisibleControls:(NSArray*)visibleControls;
+
+// Hides the OK and Cancel buttons.
+- (void)removeOkCancelButtons;
+
+// Called when the source or target language selection changes in a menu.
+// |newLanguageIdx| is the index of the newly selected item in the appropriate
+// menu.
+- (void)sourceLanguageModified:(NSInteger)newLanguageIdx;
+- (void)targetLanguageModified:(NSInteger)newLanguageIdx;
+
+// Called when an item in one of the toolbar's language or options
+// menus is selected.
+- (void)languageMenuChanged:(id)item;
+- (void)optionsMenuChanged:(id)item;
+
+// Teardown and rebuild the options menu.
+- (void)rebuildOptionsMenu;
+
+@end // TranslateInfoBarControllerBase (ProtectedAPI)
+
+#pragma mark TestingAPI
+
+@interface TranslateInfoBarControllerBase (TestingAPI)
+
+// Verifies that the layout of the infobar is correct.
+// Must be implmented by the subclass.
+- (bool)verifyLayout;
+
+// Returns the underlying options menu.
+- (NSMenu*)optionsMenu;
+
+// Returns the "try again" button.
+- (NSButton*)tryAgainButton;
+
+@end // TranslateInfoBarControllerBase (TestingAPI)
+
+
+#endif // CHROME_BROWSER_COCOA_TRANSLATE_INFOBAR_BASE_H_

Powered by Google App Engine
This is Rietveld 408576698