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

📄 proc.c

📁 系统任务管理器
💻 C
📖 第 1 页 / 共 2 页
字号:
	GkrellmChartdata	*cd;	GkrellmChartconfig	*cf;	GkrellmPanel		*p;	GkrellmStyle		*style;	if (first_create)		{		proc.chart = gkrellm_chart_new0();		proc.chart->panel = gkrellm_panel_new0();		}	cp = proc.chart;	p = cp->panel;	style = gkrellm_panel_style(style_id);	gkrellm_create_krell(p, gkrellm_krell_panel_piximage(style_id), style);	gkrellm_chart_create(proc.vbox, mon_proc, cp, &proc.chart_config);	gkrellm_set_draw_chart_function(cp, refresh_proc_chart, proc.chart);	cd = gkrellm_add_default_chartdata(cp, _("Load"));	gkrellm_monotonic_chartdata(cd, FALSE);	gkrellm_set_chartdata_draw_style_default(cd, CHARTDATA_LINE);	proc.forks_cd = gkrellm_add_default_chartdata(cp, _("Forks"));	gkrellm_set_chartdata_flags(proc.forks_cd, CHARTDATA_ALLOW_HIDE);	cf = cp->config;	gkrellm_chartconfig_fixed_grids_connect(cf, setup_proc_scaling, NULL);	gkrellm_chartconfig_grid_resolution_connect(cf, setup_proc_scaling, NULL);	gkrellm_chartconfig_grid_resolution_adjustment(cf, FALSE,			LOAD_SCALING, 0.5, 5.0, 0.5, 0.5, 1, 50);	gkrellm_chartconfig_grid_resolution_label(cf,					_("Average process load per minute"));	gkrellm_alloc_chartdata(cp);	setup_proc_scaling();	/* I put motherboard temp on Proc panel (if temperature sensors found)	*/	gkrellm_sensors_create_decals(p, style_id,					&proc.sensor_decal, &proc.fan_decal);	gkrellm_panel_configure(p, proc.panel_label, style);	gkrellm_panel_create(proc.vbox, mon_proc, p);	proc.save_label_position = p->label->position;	if (proc.sensor_decal)		adjust_sensors_display(TRUE);	new_text_format = TRUE;	if (first_create)		{		g_signal_connect(G_OBJECT(cp->drawing_area), "expose_event",				G_CALLBACK(proc_expose_event), NULL);		g_signal_connect(G_OBJECT(p->drawing_area), "expose_event",				G_CALLBACK(proc_expose_event), NULL);		g_signal_connect(G_OBJECT(cp->drawing_area),"button_press_event",				G_CALLBACK(cb_proc_extra), NULL);		g_signal_connect(G_OBJECT(p->drawing_area), "button_press_event",				G_CALLBACK(cb_panel_press), NULL);		}	else		refresh_proc_chart(cp);	gkrellm_setup_launcher(p, &proc_launch, CHART_PANEL_TYPE, 4);	}static voidcreate_proc(GtkWidget *vbox, gint first_create)	{	proc.vbox = vbox;	if (proc.enabled)		{		create_proc_monitor(proc.vbox, first_create);		gkrellm_spacers_show(mon_proc);		}	else		gkrellm_spacers_hide(mon_proc);	}#define	PROC_CONFIG_KEYWORD	"proc"static voidcb_alert_trigger(GkrellmAlert *alert, gpointer data)	{	GkrellmPanel		*p;	GkrellmAlertdecal   *ad;	GkrellmDecal        *ds, *df;	gint				x, w;		p = proc.chart->panel;	alert->panel = p;	ds = proc.sensor_decal;	df = proc.fan_decal;	ad = &alert->ad;	if (gkrellm_is_decal_visible(ds) && !gkrellm_is_decal_visible(df))		w = ds->x - 1;	else		w = p->w;	w /= 3;	if (w < 2)		w = 2;	if (alert == load_alert)		x = 0;	else if (alert == users_alert)		x = w;	else		x = 2 * w;	ad->x = x;	ad->y = 0;	ad->w = w;	ad->h = p->h;	gkrellm_render_default_alert_decal(alert);	}static voidcreate_load_alert(void)	{	load_alert = gkrellm_alert_create(NULL, _("Load"),			NULL,			TRUE, FALSE, TRUE,			20, 1, 0.5, 1, 2);	gkrellm_alert_delay_config(load_alert, 1, 10000, 0);	gkrellm_alert_trigger_connect(load_alert, cb_alert_trigger, NULL);	gkrellm_alert_command_process_connect(load_alert,			cb_command_process, NULL);	}static voidcreate_users_alert(void)	{	users_alert = gkrellm_alert_create(NULL, _("Users"),			NULL,			TRUE, FALSE, TRUE,			100000, 2, 1, 10, 0);	gkrellm_alert_trigger_connect(users_alert, cb_alert_trigger, NULL);	gkrellm_alert_command_process_connect(users_alert,			cb_command_process, NULL);	}static voidcreate_processes_alert(void)	{	processes_alert = gkrellm_alert_create(NULL, _("Processes"),			NULL,			TRUE, FALSE, TRUE,			100000, 10, 1, 10, 0);	gkrellm_alert_trigger_connect(processes_alert, cb_alert_trigger, NULL);	gkrellm_alert_command_process_connect(processes_alert,			cb_command_process, NULL);	}static voidsave_proc_config(FILE *f)	{	fprintf(f, "%s enable %d %d\n", PROC_CONFIG_KEYWORD,				proc.enabled, proc.extra_info);	fprintf(f, "%s launch %s\n", PROC_CONFIG_KEYWORD, proc_launch.command);	fprintf(f, "%s tooltip_comment %s\n", PROC_CONFIG_KEYWORD,				proc_launch.tooltip_comment);	fprintf(f, "%s sensor_mode %d\n", PROC_CONFIG_KEYWORD,				sensor_separate_mode);	fprintf(f, "%s text_format %s\n", PROC_CONFIG_KEYWORD, text_format);	gkrellm_save_chartconfig(f, proc.chart_config,				PROC_CONFIG_KEYWORD, NULL);	if (load_alert)		gkrellm_save_alertconfig(f, load_alert, PROC_CONFIG_KEYWORD, "load");	if (users_alert)		gkrellm_save_alertconfig(f, users_alert, PROC_CONFIG_KEYWORD, "users");	if (processes_alert)		gkrellm_save_alertconfig(f, processes_alert,					PROC_CONFIG_KEYWORD, "processes");	}static voidload_proc_config(gchar *arg)	{	gchar	config[32], name[16], item[CFG_BUFSIZE], item1[CFG_BUFSIZE];	gint	n;	n = sscanf(arg, "%31s %[^\n]", config, item);	if (n == 2)		{		if (!strcmp(config, "enable"))			sscanf(item, "%d %d\n", &proc.enabled, &proc.extra_info);		else if (!strcmp(config, "launch"))			proc_launch.command = g_strdup(item);		else if (!strcmp(config, "tooltip_comment"))			proc_launch.tooltip_comment = g_strdup(item);		else if (!strcmp(config, "sensor_mode"))			sscanf(item, "%d\n", &sensor_separate_mode);		else if (!strcmp(config, "text_format"))			{			gkrellm_locale_dup_string(&text_format, item, &text_format_locale);			new_text_format = TRUE;			}		else if (!strcmp(config, GKRELLM_CHARTCONFIG_KEYWORD))			gkrellm_load_chartconfig(&proc.chart_config, item, 2);		else if (!strcmp(config, GKRELLM_ALERTCONFIG_KEYWORD))			{			if (sscanf(item, "%15s %[^\n]", name, item1) == 2)				{				if (!strcmp(name, "load"))					{					if (!load_alert)						create_load_alert();					gkrellm_load_alertconfig(&load_alert, item1);					}				else if (!strcmp(name, "users"))					{					if (!users_alert)						create_users_alert();					gkrellm_load_alertconfig(&users_alert, item1);					}				else if (!strcmp(name, "processes"))					{					if (!processes_alert)						create_processes_alert();					gkrellm_load_alertconfig(&processes_alert, item1);					}				}			}		}	}/* ---------------------------------------------------------------------- */#define DEFAULT_TEXT_FORMAT	"\\w88\\a$p\\f procs\\n\\e$u\\f users"static GtkWidget	*proc_launch_entry,					*proc_tooltip_entry;static GtkWidget	*text_format_combo;static GtkWidget	*load_alert_button,					*users_alert_button,					*processes_alert_button;static gbooleanfix_panel(void)	{	gboolean	result;	if (!proc.enabled)		return FALSE;	if ((result = adjust_sensors_display(FALSE)) && proc_launch.button)		{		gkrellm_destroy_button(proc_launch.button);		proc_launch.button = 			gkrellm_put_label_in_panel_button(proc.chart->panel,				gkrellm_launch_button_cb, &proc_launch, proc_launch.pad);		}	return result;	}gbooleangkrellm_proc_set_sensor(gpointer sr, gint type)	{	if (type == SENSOR_TEMPERATURE)		proc.sensor_temp = sr;	else if (type == SENSOR_FAN)		proc.sensor_fan = sr;	else		return FALSE;	return fix_panel();	}static voidcb_sensor_separate(GtkWidget *button, gpointer data)	{	sensor_separate_mode = GTK_TOGGLE_BUTTON(button)->active;	fix_panel();	}static voidcb_text_format(GtkWidget *widget, gpointer data)	{	gchar	*s;	s = gkrellm_gtk_entry_get_text(&(GTK_COMBO(text_format_combo)->entry));	gkrellm_locale_dup_string(&text_format, s, &text_format_locale);	new_text_format = TRUE;	refresh_proc_chart(proc.chart);	}static voidcb_enable(GtkWidget *button, gpointer data)    {	gboolean enabled;	enabled = GTK_TOGGLE_BUTTON(button)->active;	if (enabled && ! proc.enabled)		{		create_proc_monitor(proc.vbox, TRUE);		gkrellm_spacers_show(mon_proc);		}	else if (!enabled && proc.enabled)		{		destroy_proc_monitor();		gkrellm_spacers_hide(mon_proc);		}	proc.enabled = enabled;	gtk_widget_set_sensitive(load_alert_button, enabled);	gtk_widget_set_sensitive(users_alert_button, enabled);	gtk_widget_set_sensitive(processes_alert_button, enabled);	}static voidcb_load_alert(GtkWidget *button, gpointer data)	{	if (!load_alert)		create_load_alert();	gkrellm_alert_config_window(&load_alert);	}static voidcb_users_alert(GtkWidget *button, gpointer data)	{	if (!users_alert)		create_users_alert();	gkrellm_alert_config_window(&users_alert);	}static voidcb_processes_alert(GtkWidget *button, gpointer data)	{	if (!processes_alert)		create_processes_alert();	gkrellm_alert_config_window(&processes_alert);	}static voidcb_launch_entry(GtkWidget *widget, gpointer data)	{	if (proc.enabled)		{		gkrellm_apply_launcher(&proc_launch_entry, &proc_tooltip_entry,					proc.chart->panel, &proc_launch, gkrellm_launch_button_cb);		}	}static gchar	*proc_info_text[] ={N_("<h>Proc Chart"),"\n",N_("The krell shows process forks with a full scale value of 10 forks.\n"),N_("While both load and fork data are drawn on the chart, the grid\n""resolution can be set for load only.  The resolution per grid for forks is\n""fixed at 10 when using the auto number of grids mode, and at 50 divided by\n""the number of grids when using a fixed number of grids mode.\n"),"\n",N_("<h>Chart Labels\n"),N_("Substitution variables for the format string for chart labels:\n"),N_("\t$L    maximum chart value (load)\n"),N_("\t$F    maximum chart value (forks)\n"),N_("\t$l    load\n"),N_("\t$f    forks\n"),N_("\t$p    processes\n"),N_("\t$u    users\n"),"\n",N_("Substitution variables may be used in alert commands.\n")};static voidcreate_proc_tab(GtkWidget *tab_vbox)	{	GtkWidget	*tabs, *table, *vbox, *vbox1, *hbox, *text, *label;	GList		*list;	gint		i;	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"));	gkrellm_gtk_check_button_connected(vbox, NULL,				proc.enabled, FALSE, FALSE, 4,				cb_enable, NULL,				_("Enable Proc chart"));	if (gkrellm_sensors_available())		gkrellm_gtk_check_button_connected(vbox, NULL,					sensor_separate_mode, FALSE, FALSE, 0,					cb_sensor_separate, NULL,		_("Draw fan and temperature values separately (not alternating)."));	hbox = gtk_hbox_new(FALSE, 0);	gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, TRUE, 5);	gkrellm_gtk_alert_button(hbox, &processes_alert_button, FALSE, FALSE, 4,				TRUE, cb_processes_alert, NULL);	label = gtk_label_new(_("Processes"));	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 4);	hbox = gtk_hbox_new(FALSE, 0);	gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, TRUE, 5);	gkrellm_gtk_alert_button(hbox, &users_alert_button, FALSE, FALSE, 4, TRUE,				cb_users_alert, NULL);	label = gtk_label_new(_("Users"));	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 4);	hbox = gtk_hbox_new(FALSE, 0);	gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, TRUE, 5);	gkrellm_gtk_alert_button(hbox, &load_alert_button, FALSE, FALSE, 4, TRUE,				cb_load_alert, NULL);	label = gtk_label_new(_("Load"));	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 4);	if (!proc.enabled)		{		gtk_widget_set_sensitive(load_alert_button, FALSE);		gtk_widget_set_sensitive(users_alert_button, FALSE);		gtk_widget_set_sensitive(processes_alert_button, FALSE);		}	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,			_("\\f$L\\r\\f$F \\w88\\b\\p\\a$p\\f procs\\n\\e$u\\f users"));	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);	vbox1 = gkrellm_gtk_framed_vbox_end(vbox, _("Launch Commands"),				4, FALSE, 0, 2);	table = gkrellm_gtk_launcher_table_new(vbox1, 1);	gkrellm_gtk_config_launcher(table, 0,				&proc_launch_entry, &proc_tooltip_entry,				_("Proc"), &proc_launch);	g_signal_connect(G_OBJECT(proc_launch_entry), "changed",				G_CALLBACK(cb_launch_entry), NULL);	g_signal_connect(G_OBJECT(proc_tooltip_entry), "changed",				G_CALLBACK(cb_launch_entry), NULL);/* --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(proc_info_text)/sizeof(gchar *); ++i)		gkrellm_gtk_text_view_append(text, _(proc_info_text[i]));	}gchar *gkrellm_proc_get_sensor_panel_label(void)	{	return proc.panel_label;	}GkrellmMonitor *gkrellm_get_proc_mon(void)	{	return mon_proc;	}static GkrellmMonitor	monitor_proc =	{	N_("Proc"),			/* Name, for config tab.	*/	MON_PROC,			/* Id,  0 if a plugin		*/	create_proc,		/* The create function		*/	update_proc,		/* The update function		*/	create_proc_tab,	/* The config tab create function	*/	NULL,				/* Instant apply */	save_proc_config,	/* Save user conifg			*/	load_proc_config,	/* Load user config			*/	PROC_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_proc_monitor(void)	{	GkrellmChartconfig	*cf;	monitor_proc.name = _(monitor_proc.name);	proc.panel_label = g_strdup(_("Proc"));	proc.enabled = TRUE;	proc.extra_info = TRUE;	style_id = gkrellm_add_chart_style(&monitor_proc, PROC_STYLE_NAME);	gkrellm_locale_dup_string(&text_format, _(DEFAULT_TEXT_FORMAT),				&text_format_locale);	mon_proc = &monitor_proc;	if (setup_proc_interface())		{		/* Set chart config defaults.  Turn off auto grid resolution and		|  don't let user config it back on.		*/		cf = proc.chart_config = gkrellm_chartconfig_new0();		gkrellm_set_chartconfig_grid_resolution(cf, 100);		gkrellm_set_chartconfig_auto_grid_resolution(cf, FALSE);		gkrellm_set_chartconfig_flags(cf, NO_CONFIG_AUTO_GRID_RESOLUTION);		return &monitor_proc;		}	return NULL;	}

⌨️ 快捷键说明

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