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

Unified Diff: chrome/browser/resources/task_manager/main.js

Issue 7326044: WebUI TaskManager: Column Customization (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 5 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
« no previous file with comments | « chrome/browser/resources/task_manager/main.html ('k') | chrome/browser/ui/webui/task_manager_ui.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/task_manager/main.js
diff --git a/chrome/browser/resources/task_manager/main.js b/chrome/browser/resources/task_manager/main.js
index d5e4a2e65e1218294bb19cc24b394176008206e4..5cd877cd21c746ea27e60175da5efd9e93433bd8 100644
--- a/chrome/browser/resources/task_manager/main.js
+++ b/chrome/browser/resources/task_manager/main.js
@@ -8,13 +8,14 @@ function TaskManager() { }
cr.addSingletonGetter(TaskManager);
/*
- * Default columns (column_id, label, width)
+ * Default columns (column_id, label_id, width, is_default)
* @const
*/
-var DEFAULT_COLUMNS = [['title', 'page_column', 300],
- ['networkUsage', 'network_column', 85],
- ['cpuUsage', 'cpu_column', 80],
- ['privateMemory', 'private_memory_column', 80]];
+var DEFAULT_COLUMNS = [['title', 'page_column', 300, true],
+ ['networkUsage', 'network_column', 85, true],
+ ['cpuUsage', 'cpu_column', 80, true],
+ ['privateMemory', 'private_memory_column', 80, true],
+ ['processId', 'process_id_column', 120, false]];
var localStrings = new LocalStrings();
@@ -93,6 +94,22 @@ TaskManager.prototype = {
$('about-memory-link').addEventListener('click',
this.openAboutMemory.bind(this));
+ this.is_column_shown_ = [];
+ for (var i = 0; i < DEFAULT_COLUMNS.length; i++) {
+ this.is_column_shown_[i] = DEFAULT_COLUMNS[i][3];
+ }
+
+ this.localized_column_ = [];
+ for (var i = 0; i < DEFAULT_COLUMNS.length; i++) {
+ var column_label_id = DEFAULT_COLUMNS[i][1];
+ var localized_label = localStrings.getString(column_label_id);
+ // Falls back to raw column_label_id if localized string is not defined.
+ if (localized_label == "")
+ localized_label = column_label_id;
+
+ this.localized_column_[i] = localized_label;
+ }
+
this.initColumnModel_();
this.selectionModel_ = new cr.ui.ListSelectionModel();
this.dataModel_ = new cr.ui.ArrayDataModel([]);
@@ -113,16 +130,20 @@ TaskManager.prototype = {
});
this.initTable_();
+ this.initColumnMenu_();
this.table_.redraw();
},
initColumnModel_: function () {
var table_columns = new Array();
for (var i = 0; i < DEFAULT_COLUMNS.length; i++) {
- var localized_label = localStrings.getString(DEFAULT_COLUMNS[i][1]);
- table_columns.push(new cr.ui.table.TableColumn(DEFAULT_COLUMNS[i][0],
- localized_label,
- DEFAULT_COLUMNS[i][2]));
+ if (!this.is_column_shown_[i])
+ continue;
+
+ var column = DEFAULT_COLUMNS[i];
+ table_columns.push(new cr.ui.table.TableColumn(column[0],
+ this.localized_column_[i],
+ column[2]));
}
for (var i = 0; i < table_columns.length; i++) {
@@ -132,6 +153,45 @@ TaskManager.prototype = {
this.columnModel_ = new cr.ui.table.TableColumnModel(table_columns);
},
+ initColumnMenu_: function () {
+ this.column_menu_commands_ = [];
+
+ this.commandsElement_ = this.document_.createElement('commands');
+ this.document_.body.appendChild(this.commandsElement_);
+
+ this.columnSelectContextMenu_ = this.document_.createElement('menu');
+ for (var i = 0; i < DEFAULT_COLUMNS.length; i++) {
+ var column = DEFAULT_COLUMNS[i];
+
+ // Creates command element to receive event.
+ var command = this.document_.createElement('command');
+ command.id = 'columnContextMenu-' + column[0];
+ cr.ui.Command.decorate(command);
+ this.column_menu_commands_[command.id] = command;
+ this.commandsElement_.appendChild(command);
+
+ // Creates menuitem element.
+ var item = this.document_.createElement('menuitem');
+ item.command = command;
+ command.menuitem = item;
+ item.textContent = this.localized_column_[i];
+ if (this.is_column_shown_[i])
+ item.setAttributeNode(this.document_.createAttribute("checked"));
+ this.columnSelectContextMenu_.appendChild(item);
+ }
+
+ this.document_.body.appendChild(this.columnSelectContextMenu_);
+ cr.ui.Menu.decorate(this.columnSelectContextMenu_);
+
+ cr.ui.contextMenuHandler.addContextMenuProperty(this.table_.header);
+ this.table_.header.contextMenu = this.columnSelectContextMenu_;
+
+ this.document_.addEventListener('command', this.onCommand_.bind(this));
+ this.document_.addEventListener('canExecute',
+ this.onCommandCanExecute_.bind(this));
+
+ },
+
initTable_: function () {
if (!this.dataModel_ || !this.selectionModel_ || !this.columnModel_) {
console.log('ERROR: some models are not defined.');
@@ -209,6 +269,54 @@ TaskManager.prototype = {
return;
dm.splice(start, length);
},
+
+ /**
+ * Respond to a command being executed.
+ */
+ onCommand_: function(event) {
+ var command = event.command;
+ if (command.id.substr(0, 18) == 'columnContextMenu-') {
+ console.log(command.id.substr(18));
+ this.onColumnContextMenu_(command.id.substr(18), command);
+ }
+ },
+
+ onCommandCanExecute_: function(event) {
+ event.canExecute = true;
+ },
+
+ onColumnContextMenu_: function(id, command) {
+ var menuitem = command.menuitem;
+ var checked_item_count = 0;
+ var is_uncheck = 0;
+
+ // Leaves a item visible when user tries making invisible but it is the
+ // last one.
+ for (var i = 0; i < DEFAULT_COLUMNS.length; i++) {
+ var column = DEFAULT_COLUMNS[i];
+ if (column[0] == id && this.is_column_shown_[i]) {
+ is_uncheck = 1;
+ }
+ if (this.is_column_shown_[i])
+ checked_item_count++;
+ }
+ if (checked_item_count == 1 && is_uncheck) {
+ return;
+ }
+
+ // Toggles the visibility of the column.
+ for (var i = 0; i < DEFAULT_COLUMNS.length; i++) {
+ var column = DEFAULT_COLUMNS[i];
+ if (column[0] == id) {
+ this.is_column_shown_[i] = !this.is_column_shown_[i];
+ menuitem.checked = this.is_column_shown_[i];
+ this.initColumnModel_()
+ this.table_.columnModel = this.columnModel_;
+ this.table_.redraw();
+ return;
+ }
+ }
+ },
};
var taskmanager = TaskManager.getInstance();
« no previous file with comments | « chrome/browser/resources/task_manager/main.html ('k') | chrome/browser/ui/webui/task_manager_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698