diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-30 18:49:02 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-30 18:49:02 +0000 |
commit | b8e787f0951866c565b80e9af124c825af9a4231 (patch) | |
tree | 7f905aeca83e8e6dd55654e6d1e60c37932c8b8a /chrome/browser/gtk/task_manager_gtk.cc | |
parent | 242c333b885361c10bfa01d9d18049a286099bfb (diff) | |
download | chromium_src-b8e787f0951866c565b80e9af124c825af9a4231.zip chromium_src-b8e787f0951866c565b80e9af124c825af9a4231.tar.gz chromium_src-b8e787f0951866c565b80e9af124c825af9a4231.tar.bz2 |
Add a skeleton UI for the gtk task manager.
BUG=11392
TEST=Right-click on the tabstrip and select 'Task Manager'.
Review URL: http://codereview.chromium.org/150082
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19619 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/task_manager_gtk.cc')
-rw-r--r-- | chrome/browser/gtk/task_manager_gtk.cc | 142 |
1 files changed, 130 insertions, 12 deletions
diff --git a/chrome/browser/gtk/task_manager_gtk.cc b/chrome/browser/gtk/task_manager_gtk.cc index 511e3a8..5db60e7 100644 --- a/chrome/browser/gtk/task_manager_gtk.cc +++ b/chrome/browser/gtk/task_manager_gtk.cc @@ -2,27 +2,126 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/task_manager.h" +#include "chrome/browser/gtk/task_manager_gtk.h" #include <vector> +#include "app/l10n_util.h" #include "base/logging.h" +#include "chrome/common/gtk_util.h" +#include "grit/chromium_strings.h" +#include "grit/generated_resources.h" namespace { -class TaskManagerGtk : public TaskManagerModelObserver { - public: - TaskManagerGtk(TaskManagerModel* model) { - model->SetObserver(this); - } +// The task manager window default size. +const int kDefaultWidth = 460; +const int kDefaultHeight = 270; + +// The resource id for the 'End process' button. +const gint kTaskManagerResponseKill = 1; - // TaskManagerModelObserver - virtual void OnModelChanged(); - virtual void OnItemsChanged(int start, int length); - virtual void OnItemsAdded(int start, int length); - virtual void OnItemsRemoved(int start, int length); +enum TaskManagerColumns { + kTaskManagerPage, + kTaskManagerPhysicalMem, + kTaskManagerSharedMem, + kTaskManagerPrivateMem, + kTaskManagerCPU, + kTaskManagerNetwork, + kTaskManagerProcessID, + kTaskManagerColumnCount, }; +void TreeViewColumnSetVisible(GtkWidget* treeview, TaskManagerColumns colid, + bool visible) { + GtkTreeViewColumn* column = gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), + colid); + gtk_tree_view_column_set_visible(column, visible); +} + +void TreeViewInsertColumn(GtkWidget* treeview, + TaskManagerColumns colid, int str) { + GtkCellRenderer* renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview), -1, + l10n_util::GetStringUTF8(str).c_str(), + renderer, "text", colid, NULL); +} + +GtkWidget* CreateTaskManagerTreeview() { + GtkWidget* treeview = gtk_tree_view_new(); + + TreeViewInsertColumn(treeview, kTaskManagerPage, + IDS_TASK_MANAGER_PAGE_COLUMN); + TreeViewInsertColumn(treeview, kTaskManagerPhysicalMem, + IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN); + TreeViewInsertColumn(treeview, kTaskManagerSharedMem, + IDS_TASK_MANAGER_SHARED_MEM_COLUMN); + TreeViewInsertColumn(treeview, kTaskManagerPrivateMem, + IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN); + TreeViewInsertColumn(treeview, kTaskManagerCPU, + IDS_TASK_MANAGER_CPU_COLUMN); + TreeViewInsertColumn(treeview, kTaskManagerNetwork, + IDS_TASK_MANAGER_NET_COLUMN); + TreeViewInsertColumn(treeview, kTaskManagerProcessID, + IDS_TASK_MANAGER_PROCESS_ID_COLUMN); + + GtkListStore* store = gtk_list_store_new(kTaskManagerColumnCount, + G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, + G_TYPE_STRING, G_TYPE_UINT); + + gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(store)); + return treeview; +} + +} // namespace + +TaskManagerGtk::TaskManagerGtk() + : task_manager_(TaskManager::GetInstance()), + model_(TaskManager::GetInstance()->model()), + dialog_(NULL), + treeview_(NULL) { + Init(); +} + +// static +TaskManagerGtk* TaskManagerGtk::instance_ = NULL; + +TaskManagerGtk::~TaskManagerGtk() { +} + +void TaskManagerGtk::Init() { + dialog_ = gtk_dialog_new_with_buttons( + l10n_util::GetStringUTF8(IDS_TASK_MANAGER_TITLE).c_str(), + // Task Manager window is shared between all browsers. + NULL, + GTK_DIALOG_NO_SEPARATOR, + l10n_util::GetStringUTF8(IDS_TASK_MANAGER_KILL).c_str(), + kTaskManagerResponseKill, + NULL); + + gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog_)->vbox), + gtk_util::kContentAreaSpacing); + + g_signal_connect(G_OBJECT(dialog_), "response", G_CALLBACK(OnResponse), this); + + treeview_ = CreateTaskManagerTreeview(); + gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(treeview_), TRUE); + gtk_tree_view_set_grid_lines(GTK_TREE_VIEW(treeview_), + GTK_TREE_VIEW_GRID_LINES_HORIZONTAL); + + // Hide some columns by default + TreeViewColumnSetVisible(treeview_, kTaskManagerSharedMem, false); + TreeViewColumnSetVisible(treeview_, kTaskManagerPrivateMem, false); + TreeViewColumnSetVisible(treeview_, kTaskManagerProcessID, false); + + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog_)->vbox), treeview_); + + gtk_window_resize(GTK_WINDOW(dialog_), kDefaultWidth, kDefaultHeight); + gtk_widget_show_all(dialog_); + + // TODO(jhawkins): mode_->SetObserver() and implement OnItems*. +} + void TaskManagerGtk::OnModelChanged() { NOTIMPLEMENTED(); } @@ -39,4 +138,23 @@ void TaskManagerGtk::OnItemsRemoved(int start, int length) { NOTIMPLEMENTED(); } -} // namespace +// static +void TaskManagerGtk::OnResponse(GtkDialog* dialog, gint response_id, + TaskManagerGtk* task_manager) { + if (response_id == GTK_RESPONSE_DELETE_EVENT) { + instance_ = NULL; + task_manager->task_manager_->OnWindowClosed(); + delete task_manager; + } +} + +// static +void TaskManagerGtk::Show() { + if (instance_) { + // If there's a Task manager window open already, just activate it. + gtk_window_present(GTK_WINDOW(instance_->dialog_)); + } else { + instance_ = new TaskManagerGtk; + instance_->model_->StartUpdating(); + } +} |