⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disk.c

📁 系统任务管理器
💻 C
📖 第 1 页 / 共 3 页
字号:
					}				}			return;			}		if (!disk)			return;		if (!strcmp(config, GKRELLM_CHARTCONFIG_KEYWORD))			gkrellm_load_chartconfig(&disk->chart_config, item1, 2);		else if (!strcmp(config, GKRELLM_ALERTCONFIG_KEYWORD))			{			if (!disk->alert)				create_alert(disk);			gkrellm_load_alertconfig(&disk->alert, item1);			}		else if (!strcmp(config, "extra_alert_config"))			sscanf(item1, "%d %d",							&disk->alert_uses_read, &disk->alert_uses_write);		else if (!strcmp(config, "launch"))			disk->launch.command = g_strdup(item1);		else if (!strcmp(config, "tooltip_comment"))			disk->launch.tooltip_comment = g_strdup(item1);		}	}/* --------------------------------------------------------------------	*/enum	{	NAME_COLUMN,	ENABLE_COLUMN,	DISK_COLUMN,	IMAGE_COLUMN,	N_COLUMNS	};static GtkTreeView			*treeview;static GtkTreeRowReference	*row_reference;static GtkTreeSelection		*selection;static GtkWidget			*launch_vbox,							*text_format_combo;static GtkWidget			*alert_button;static GtkTreeModel *create_model(void)	{	GtkTreeStore	*tree;	GtkTreeIter		iter, citer;	GList			*list, *clist;	DiskMon			*disk;	tree = gtk_tree_store_new(N_COLUMNS,				G_TYPE_STRING,                G_TYPE_BOOLEAN,				G_TYPE_POINTER,				GDK_TYPE_PIXBUF);	for (list = disk_mon_list; list; )		{		disk = (DiskMon *) list->data;		gtk_tree_store_append(tree, &iter, NULL);		if (list == disk_mon_list)			gtk_tree_store_set(tree, &iter,				NAME_COLUMN, _("Composite chart combines data for all disks"),				ENABLE_COLUMN, disk->enabled,				DISK_COLUMN, disk,				-1);		else			{			gtk_tree_store_set(tree, &iter,					NAME_COLUMN, disk->label,					ENABLE_COLUMN, disk->enabled,					DISK_COLUMN, disk,					-1);			if (disk->alert)				gtk_tree_store_set(tree, &iter,						IMAGE_COLUMN, gkrellm_alert_pixbuf(), -1);			}		for (clist = list->next; clist; clist = clist->next)			{			disk = (DiskMon *) clist->data;			if (disk->subdisk == -1)				break;			gtk_tree_store_append(tree, &citer, &iter);			gtk_tree_store_set(tree, &citer,					NAME_COLUMN, disk->name,					ENABLE_COLUMN, disk->enabled,					DISK_COLUMN, disk,					-1);			if (disk->alert)				gtk_tree_store_set(tree, &citer,						IMAGE_COLUMN, gkrellm_alert_pixbuf(), -1);			}		list = clist;		}	return GTK_TREE_MODEL(tree);	}static voidcb_launch_entry(GtkWidget *widget, DiskMon *disk)	{	if (disk->enabled)		gkrellm_apply_launcher(&disk->launch_entry, &disk->tooltip_entry,				disk->chart->panel, &disk->launch, gkrellm_launch_button_cb);	}static voidadd_launch_entry(GtkWidget *vbox, DiskMon *disk)	{	disk->launch_table = gkrellm_gtk_launcher_table_new(vbox, 1);	gkrellm_gtk_config_launcher(disk->launch_table, 0,  &disk->launch_entry,				&disk->tooltip_entry, disk->label,				&disk->launch);	g_signal_connect(G_OBJECT(disk->launch_entry), "changed",				G_CALLBACK(cb_launch_entry), disk);	g_signal_connect(G_OBJECT(disk->tooltip_entry), "changed",				G_CALLBACK(cb_launch_entry), disk);	gtk_widget_show_all(disk->launch_table);    }static voidchange_row_reference(GtkTreeModel *model, GtkTreePath *path)	{	gtk_tree_row_reference_free(row_reference);	if (model && path)		row_reference = gtk_tree_row_reference_new(model, path);	else		row_reference = NULL;	}static voidcb_alert_config(GkrellmAlert *ap, DiskMon *disk)	{	GtkTreeModel	*model;	GtkTreeIter		iter, citer;	DiskMon			*disk_test;	GdkPixbuf		*pixbuf;	gboolean		valid;	disk->alert_uses_read =				GTK_TOGGLE_BUTTON(disk->alert_config_read_button)->active;	disk->alert_uses_write =				GTK_TOGGLE_BUTTON(disk->alert_config_write_button)->active;	if (!gkrellm_config_window_shown())		return;	model = gtk_tree_view_get_model(treeview);	pixbuf = ap->activated ? gkrellm_alert_pixbuf() : NULL;	valid = gtk_tree_model_get_iter_first(model, &iter);	while (valid)		{		gtk_tree_model_get(model, &iter, DISK_COLUMN, &disk_test, -1);		if (disk == disk_test)			{			gtk_tree_store_set(GTK_TREE_STORE(model), &iter,						IMAGE_COLUMN, pixbuf, -1);			return;			}		if (gtk_tree_model_iter_children(model, &citer, &iter))			do				{				gtk_tree_model_get(model, &citer, DISK_COLUMN, &disk_test, -1);				if (disk == disk_test)					{					gtk_tree_store_set(GTK_TREE_STORE(model), &citer,								IMAGE_COLUMN, pixbuf, -1);					return;					}				}			while (gtk_tree_model_iter_next(model, &citer));		valid = gtk_tree_model_iter_next(model, &iter);		}	}static voidcb_alert_config_button(GtkWidget *button, DiskMon *disk)	{	gboolean	read, write;	read = GTK_TOGGLE_BUTTON(disk->alert_config_read_button)->active;	write = GTK_TOGGLE_BUTTON(disk->alert_config_write_button)->active;	if (!read && !write)		{		gtk_toggle_button_set_active(				GTK_TOGGLE_BUTTON(disk->alert_config_read_button), TRUE);		gtk_toggle_button_set_active(				GTK_TOGGLE_BUTTON(disk->alert_config_write_button), TRUE);		}	}static voidcb_alert_config_create(GkrellmAlert *ap, GtkWidget *vbox, DiskMon *disk)	{    gkrellm_gtk_check_button_connected(vbox, &disk->alert_config_read_button,				disk->alert_uses_read, FALSE, FALSE, 2,				cb_alert_config_button, disk, _("Read bytes"));    gkrellm_gtk_check_button_connected(vbox, &disk->alert_config_write_button,				disk->alert_uses_write, FALSE, FALSE, 2,				cb_alert_config_button, disk, _("Write bytes"));	}static voidcb_set_alert(GtkWidget *button, gpointer data)	{	GtkTreeModel	*model;	GtkTreePath		*path;	GtkTreeIter		iter;	DiskMon			*disk;	if (!row_reference)		return;	model = gtk_tree_view_get_model(treeview);	path = gtk_tree_row_reference_get_path(row_reference);	gtk_tree_model_get_iter(model, &iter, path);	gtk_tree_model_get(model, &iter, DISK_COLUMN, &disk, -1);	if (!disk->alert)		create_alert(disk);	gkrellm_alert_config_window(&disk->alert);	}static voidcb_tree_selection_changed(GtkTreeSelection *selection, gpointer data)	{	GtkTreeIter     iter;	GtkTreeModel    *model;	GtkTreePath     *path;	DiskMon			*disk;	gint            *indices, depth;	if (!gtk_tree_selection_get_selected(selection, &model, &iter))		{		gtk_widget_set_sensitive(alert_button, FALSE);		return;		}	path = gtk_tree_model_get_path(model, &iter);	indices = gtk_tree_path_get_indices(path);	depth = gtk_tree_path_get_depth(path);// printf("selection: indices=[%d,%d]:%d, path=%s\n",//          indices[0], indices[1], gtk_tree_path_get_depth(path),//          gtk_tree_path_to_string(path));	change_row_reference(model, path);	gtk_tree_model_get(model, &iter,			DISK_COLUMN, &disk, -1);	if (!disk->enabled || (depth == 1 && indices[0] == 0))		gtk_widget_set_sensitive(alert_button, FALSE);	else		gtk_widget_set_sensitive(alert_button, TRUE);	gtk_tree_path_free(path);	}static voidcb_enable(GtkCellRendererText *cell, gchar *path_string, gpointer data)	{	GtkTreeModel	*model;	GtkTreeIter		iter;	GtkTreePath		*path;	GList			*list;	DiskMon			*disk;	gboolean		enabled;	model = GTK_TREE_MODEL(data);	path = gtk_tree_path_new_from_string(path_string);	gtk_tree_model_get_iter(model, &iter, path);	gtk_tree_path_free(path);	gtk_tree_model_get(model, &iter,				ENABLE_COLUMN, &enabled,				DISK_COLUMN, &disk,				-1);	gtk_tree_store_set(GTK_TREE_STORE(model), &iter,				ENABLE_COLUMN, !enabled, 				-1);	if (enabled)		{		destroy_disk_monitor(disk);		gtk_widget_set_sensitive(alert_button, FALSE);		}	else		{		create_disk_monitor(disk, TRUE);		add_launch_entry(launch_vbox, disk);		gtk_widget_set_sensitive(alert_button, TRUE);		}	disk->enabled = !enabled;	enabled = FALSE;	for (list = disk_mon_list; list; list = list->next)		if (((DiskMon *) list->data)->enabled)			enabled = TRUE;	if (enabled)		gkrellm_spacers_show(mon_disk);	else		gkrellm_spacers_hide(mon_disk);	}static voidcb_text_format(GtkWidget *widget, gpointer data)	{	GList	*list;	DiskMon	*disk;	gchar	*s;	s = gkrellm_gtk_entry_get_text(&(GTK_COMBO(text_format_combo)->entry));	gkrellm_locale_dup_string(&text_format, s, &text_format_locale);	for (list = disk_mon_list; list; list = list->next)		{		disk = (DiskMon *) list->data;		disk->new_text_format = TRUE;		draw_disk_chart(disk);		}	}#define	DEFAULT_TEXT_FORMAT	"$T"static gchar	*disk_info_text[] ={N_("<h>Chart Labels\n"),N_("Substitution variables for the format string for chart labels:\n"),N_("\t$M    maximum chart value\n"),N_("\t$T    total read bytes + write bytes\n"),N_("\t$r    read bytes\n"),N_("\t$w    write bytes\n"),"\n",N_("Substitution variables may be used in alert commands.\n")};static voidcreate_disk_tab(GtkWidget *tab_vbox)	{	GtkWidget		*tabs;	GtkWidget		*vbox, *vbox1, *hbox;	GtkWidget		*text;	GtkWidget		*scrolled;	GtkTreeModel	*model;	GtkCellRenderer	*renderer;	GList			*list;	DiskMon			*disk;	gint			i;	check_for_new_disks();	if (n_disks == 0)		return;	tabs = gtk_notebook_new();	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tabs), GTK_POS_TOP);	gtk_box_pack_start(GTK_BOX(tab_vbox), tabs, TRUE, TRUE, 0);/* -- Options tab */	vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Options"));	scrolled = gtk_scrolled_window_new(NULL, NULL);	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),				GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);	gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 0);	model = create_model();	treeview = GTK_TREE_VIEW(gtk_tree_view_new_with_model(model));	gtk_tree_view_set_rules_hint(treeview, TRUE);	renderer = gtk_cell_renderer_toggle_new();	gtk_tree_view_insert_column_with_attributes(treeview, -1, _("Enable"),				renderer,				"active", ENABLE_COLUMN,				NULL);	g_signal_connect(G_OBJECT(renderer), "toggled",				G_CALLBACK(cb_enable), model);	renderer = gtk_cell_renderer_text_new();	gtk_tree_view_insert_column_with_attributes(treeview, -1, _("Disk"),				renderer,				"text", NAME_COLUMN,				NULL);	renderer = gtk_cell_renderer_pixbuf_new();	gtk_tree_view_insert_column_with_attributes(treeview, -1, "",				renderer,				"pixbuf", IMAGE_COLUMN,				NULL);	gtk_container_add(GTK_CONTAINER(scrolled), GTK_WIDGET(treeview));	g_object_unref(G_OBJECT(model));	selection = gtk_tree_view_get_selection(treeview);	gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);	g_signal_connect(G_OBJECT(selection), "changed",				G_CALLBACK(cb_tree_selection_changed), NULL);	hbox = gtk_hbox_new(FALSE, 0);	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 3);	gkrellm_gtk_alert_button(hbox, &alert_button, FALSE, FALSE, 4, FALSE,				cb_set_alert, NULL);	gtk_widget_set_sensitive(alert_button, FALSE);/* -- Setup tab */	vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Setup"));	vbox1 = gkrellm_gtk_framed_vbox(vbox, _("Format String for Chart Labels"),			 4, FALSE, 0, 2);	hbox = gtk_hbox_new(FALSE, 0);	gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, TRUE, 5);	text_format_combo = gtk_combo_new();	gtk_widget_set_size_request (GTK_WIDGET(text_format_combo), 350, -1);	gtk_box_pack_start(GTK_BOX(hbox), text_format_combo, FALSE, TRUE, 0);	list = NULL;	list = g_list_append(list, text_format);	list = g_list_append(list, DEFAULT_TEXT_FORMAT);	list = g_list_append(list, "\\c\\f$M\\n$T");	list = g_list_append(list, "\\c\\f$M\\b$T");	list = g_list_append(list,					_("\\f\\ww\\r\\f$M\\D2\\f\\ar\\. $r\\D1\\f\\aw\\. $w"));	gtk_combo_set_popdown_strings(GTK_COMBO(text_format_combo), list);	gtk_combo_set_case_sensitive(GTK_COMBO(text_format_combo), TRUE);	g_list_free(list);	gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(text_format_combo)->entry),			text_format);	g_signal_connect(G_OBJECT(GTK_COMBO(text_format_combo)->entry), "changed",			G_CALLBACK(cb_text_format), NULL);	vbox = gkrellm_gtk_framed_vbox_end(vbox, _("Launch Commands"),						4, TRUE, 0, 2);	launch_vbox = gkrellm_gtk_scrolled_vbox(vbox, NULL,						GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);	gtk_widget_show(launch_vbox);	gtk_widget_realize(launch_vbox);	for (i = 0, list = disk_mon_list; list; list = list->next, ++i)		{		disk = (DiskMon *) list->data;		if (disk->enabled)			add_launch_entry(launch_vbox, disk);		}/* --Info tab */	vbox = gkrellm_gtk_framed_notebook_page(tabs, _("Info"));	text = gkrellm_gtk_scrolled_text_view(vbox, NULL,				GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);	for (i = 0; i < sizeof(disk_info_text)/sizeof(gchar *); ++i)		gkrellm_gtk_text_view_append(text, _(disk_info_text[i]));	}static GkrellmMonitor	monitor_disk =	{	N_("Disk"),			/* Name, for config tab.	*/	MON_DISK,			/* Id,  0 if a plugin		*/	create_disk,		/* The create function		*/	update_disk,		/* The update function		*/	create_disk_tab,	/* The config tab create function	*/	NULL,				/* Instant apply */	save_disk_config,	/* Save user conifg			*/	load_disk_config,	/* Load user config			*/	DISK_CONFIG_KEYWORD, /* config keyword			*/	NULL,				/* Undef 2	*/	NULL,				/* Undef 1	*/	NULL,				/* Undef 0	*/	0,					/* insert_before_id - place plugin before this mon */	NULL,				/* Handle if a plugin, filled in by GKrellM		*/	NULL				/* path if a plugin, filled in by GKrellM		*/	};GkrellmMonitor *gkrellm_init_disk_monitor(void)	{	DiskMon	*disk;	monitor_disk.name = _(monitor_disk.name);	disk = disk_new("Disk", _("Disk"));	disk_mon_list = g_list_append(disk_mon_list, disk);	composite_disk = disk;	gkrellm_locale_dup_string(&text_format, DEFAULT_TEXT_FORMAT,				&text_format_locale);	mon_disk = &monitor_disk;	if (setup_disk_interface())		{		if (n_disks > 0)			composite_disk->enabled = TRUE;		style_id = gkrellm_add_chart_style(&monitor_disk, DISK_STYLE_NAME);		return &monitor_disk;		}	return NULL;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -