summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk/task_manager_gtk.cc
diff options
context:
space:
mode:
authorjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-30 18:49:02 +0000
committerjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-30 18:49:02 +0000
commitb8e787f0951866c565b80e9af124c825af9a4231 (patch)
tree7f905aeca83e8e6dd55654e6d1e60c37932c8b8a /chrome/browser/gtk/task_manager_gtk.cc
parent242c333b885361c10bfa01d9d18049a286099bfb (diff)
downloadchromium_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.cc142
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();
+ }
+}