Index: chrome/browser/autocomplete/autocomplete_popup_view_mac.mm |
diff --git a/chrome/browser/autocomplete/autocomplete_popup_view_mac.mm b/chrome/browser/autocomplete/autocomplete_popup_view_mac.mm |
deleted file mode 100644 |
index d82e0a3978ddc7304e2b68077e88839da91c8e47..0000000000000000000000000000000000000000 |
--- a/chrome/browser/autocomplete/autocomplete_popup_view_mac.mm |
+++ /dev/null |
@@ -1,248 +0,0 @@ |
-// Copyright (c) 2009 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. |
- |
-#include "chrome/browser/autocomplete/autocomplete_popup_view_mac.h" |
- |
-#include "base/sys_string_conversions.h" |
-#include "chrome/browser/autocomplete/autocomplete_edit.h" |
-#include "chrome/browser/autocomplete/autocomplete_edit_view_mac.h" |
-#include "chrome/browser/autocomplete/autocomplete_popup_model.h" |
- |
-// Thin Obj-C bridge class between the target and data source of the |
-// popup window's NSTableView and the AutocompletePopupView |
-// implementation. |
- |
-@interface AutocompleteTableTarget : NSObject { |
- @private |
- AutocompletePopupViewMac* popup_view_; // weak, owns us. |
-} |
-- initWithPopupView:(AutocompletePopupViewMac*)view; |
- |
-// Tell popup model via popup_view_ about the selected row. |
-- (void)select:sender; |
- |
-// NSTableDataSource methods, filled from data returned by |
-// the popup model via popup_view_. |
-- (NSInteger)numberOfRowsInTableView:(NSTableView*)aTableView; |
-- (id)tableView:(NSTableView*)aTableView |
-objectValueForTableColumn:(NSTableColumn*)aTableColumn |
- row:(int)ri; |
- |
-// Placeholder for finding the star image. |
-- (NSImage*)starImage; |
-@end |
- |
-AutocompletePopupViewMac::AutocompletePopupViewMac( |
- AutocompleteEditViewMac* edit_view, |
- AutocompleteEditModel* edit_model, |
- Profile* profile) |
- : model_(new AutocompletePopupModel(this, edit_model, profile)), |
- edit_view_(edit_view), |
- field_(nil), |
- table_target_([[AutocompleteTableTarget alloc] initWithPopupView:this]), |
- popup_(nil) { |
- DCHECK(edit_view); |
- DCHECK(edit_model); |
- DCHECK(profile); |
- edit_model->set_popup_model(model_.get()); |
-} |
- |
-AutocompletePopupViewMac::~AutocompletePopupViewMac() { |
- // TODO(shess): Having to be aware of destructor ordering in this |
- // way seems brittle. There must be a better way. |
- |
- // Destroy the popup model before this object is destroyed, because |
- // it can call back to us in the destructor. |
- model_.reset(); |
- |
- // Break references to table_target_ before it is released. |
- NSTableView* table = [popup_ contentView]; |
- [table setTarget:nil]; |
- [table setDataSource:nil]; |
-} |
- |
-bool AutocompletePopupViewMac::IsOpen() const { |
- return [popup_ isVisible] ? true : false; |
-} |
- |
-static NSTableColumn* MakeTableColumn(int tag, Class field_class) { |
- NSNumber* id = [NSNumber numberWithInt:tag]; |
- NSTableColumn* col = |
- [[[NSTableColumn alloc] initWithIdentifier:id] autorelease]; |
- |
- [col setEditable:NO]; |
- [col setResizingMask:NSTableColumnNoResizing]; |
- [col setDataCell:[[[field_class alloc] init] autorelease]]; |
- |
- return col; |
-} |
- |
-void AutocompletePopupViewMac::CreatePopupIfNeeded() { |
- if (!popup_) { |
- popup_.reset([[NSWindow alloc] initWithContentRect:NSZeroRect |
- styleMask:NSBorderlessWindowMask |
- backing:NSBackingStoreBuffered |
- defer:YES]); |
- [popup_ setMovableByWindowBackground:NO]; |
- [popup_ setOpaque:YES]; |
- [popup_ setHasShadow:YES]; |
- [popup_ setLevel:NSNormalWindowLevel]; |
- |
- NSTableView* table = |
- [[[NSTableView alloc] initWithFrame:NSZeroRect] autorelease]; |
- [popup_ setContentView:table]; |
- |
- [table setTarget:table_target_]; |
- [table setAction:@selector(select:)]; |
- [table setHeaderView:nil]; |
- [table setDataSource:table_target_]; |
- [table setIntercellSpacing:NSMakeSize(1.0, 0.0)]; |
- |
- [table addTableColumn:MakeTableColumn(0, [NSTextFieldCell class])]; |
- [table addTableColumn:MakeTableColumn(1, [NSImageCell class])]; |
- [table addTableColumn:MakeTableColumn(2, [NSTextFieldCell class])]; |
- } |
-} |
- |
-void AutocompletePopupViewMac::UpdatePopupAppearance() { |
- const AutocompleteResult& result = model_->result(); |
- if (result.empty()) { |
- [[popup_ parentWindow] removeChildWindow:popup_]; |
- [popup_ orderOut:nil]; |
- return; |
- } |
- |
- CreatePopupIfNeeded(); |
- |
- // Layout the popup and size it to land underneath the field. |
- // TODO(shess) Consider refactoring to remove this depenency, |
- // because the popup doesn't need any of the field-like aspects of |
- // field_. The edit view could expose helper methods for attaching |
- // the window to the field. |
- NSRect r = [field_ bounds]; |
- r = [field_ convertRectToBase:r]; |
- r.origin = [[field_ window] convertBaseToScreen:r.origin]; |
- |
- // TODO(shess): Derive this from the actual image size, once the |
- // image is in the project. |
- static const int kStarWidth = 25; |
- |
- NSArray* cols = [[popup_ contentView] tableColumns]; |
- [[cols objectAtIndex:0] setWidth:floor((r.size.width - kStarWidth) / 2)]; |
- [[cols objectAtIndex:1] setWidth:kStarWidth]; |
- [[cols objectAtIndex:2] setWidth:ceil((r.size.width - kStarWidth) / 2)]; |
- |
- [[popup_ contentView] reloadData]; |
- [[popup_ contentView] tile]; |
- r.size.height = [[popup_ contentView] frame].size.height; |
- r.origin.y -= r.size.height + 2; |
- |
- // Update the selection. |
- PaintUpdatesNow(); |
- |
- [popup_ setFrame:r display:YES]; |
- |
- if (!IsOpen()) { |
- [[field_ window] addChildWindow:popup_ ordered:NSWindowAbove]; |
- } |
-} |
- |
-// This is only called by model in SetSelectedLine() after updating |
-// everything. Popup should already be visible. |
-void AutocompletePopupViewMac::PaintUpdatesNow() { |
- NSIndexSet* set = [NSIndexSet indexSetWithIndex:model_->selected_line()]; |
- NSTableView* table = [popup_ contentView]; |
- [table selectRowIndexes:set byExtendingSelection:NO]; |
-} |
- |
-void AutocompletePopupViewMac::StopAutocomplete() { |
- model_->StopAutocomplete(); |
-} |
- |
-size_t AutocompletePopupViewMac::ResultRowCount() { |
- return model_->result().size(); |
-} |
- |
-const std::wstring& AutocompletePopupViewMac::ResultContentsAt(size_t i) { |
- return model_->result().match_at(i).contents; |
-} |
- |
-bool AutocompletePopupViewMac::ResultStarredAt(size_t i) { |
- return model_->result().match_at(i).starred; |
-} |
- |
-const std::wstring& AutocompletePopupViewMac::ResultDescriptionAt(size_t i) { |
- return model_->result().match_at(i).description; |
-} |
- |
-void AutocompletePopupViewMac::AcceptInput( |
- WindowOpenDisposition disposition, bool for_drop) { |
- edit_view_->AcceptInput(disposition, for_drop); |
-} |
- |
-@implementation AutocompleteTableTarget |
- |
-- initWithPopupView:(AutocompletePopupViewMac*)view { |
- self = [super init]; |
- if (self) { |
- popup_view_ = view; |
- } |
- return self; |
-} |
- |
-- (NSImage*)starImage { |
- return [NSImage imageNamed:@"starred.pdf"]; |
-} |
- |
-- (NSInteger)numberOfRowsInTableView:(NSTableView*)aTableView { |
- DCHECK(popup_view_); |
- return static_cast<NSInteger>(popup_view_->ResultRowCount()); |
-} |
- |
-- (id)tableView:(NSTableView*)aTableView |
-objectValueForTableColumn:(NSTableColumn*)aTableColumn |
- row:(int)ri { |
- int columnIndex = [[aTableColumn identifier] integerValue]; |
- size_t rowIndex = static_cast<size_t>(ri); |
- DCHECK(popup_view_); |
- DCHECK_LT(rowIndex, popup_view_->ResultRowCount()); |
- DCHECK_LT(columnIndex, 3); |
- |
- if (columnIndex == 1) { |
- if (popup_view_->ResultStarredAt(rowIndex)) { |
- return [self starImage]; |
- } |
- return nil; |
- } |
- |
- NSString* s; |
- if (columnIndex == 0) { |
- s = base::SysWideToNSString(popup_view_->ResultContentsAt(rowIndex)); |
- } else { |
- s = base::SysWideToNSString(popup_view_->ResultDescriptionAt(rowIndex)); |
- } |
- |
- NSMutableParagraphStyle* style = |
- [[[NSMutableParagraphStyle alloc] init] autorelease]; |
- [style setLineBreakMode:NSLineBreakByTruncatingTail]; |
- |
- NSMutableAttributedString* as = |
- [[[NSMutableAttributedString alloc] initWithString:s] autorelease]; |
- [as addAttribute:NSParagraphStyleAttributeName value:style |
- range:NSMakeRange(0, [s length])]; |
- |
- // TODO(shess): There is a ton more styling to be done, here, for |
- // instance URLs different from search suggestions different from secure |
- // URLs, etc. [See AutocompletePopupViewMac::UpdateAndStyleText().] |
- // Deferring in the interests of getting a minimal implementation in. |
- |
- return as; |
-} |
- |
-- (void)select:sender { |
- DCHECK(popup_view_); |
- popup_view_->AcceptInput(CURRENT_TAB, false); |
-} |
- |
-@end |