2020-01-04 04:59:03 -08:00
# include "config.h"
2020-04-14 10:24:27 -07:00
# include "configuration.h"
# include "ui.h"
2018-06-04 03:11:21 -07:00
# include "system.h"
# include "process.h"
2018-06-09 03:30:07 -07:00
# include "disks.h"
2018-06-04 03:11:21 -07:00
# include <stdio.h>
# include <sys/types.h>
# include <pwd.h>
# if defined(__APPLE__) && defined(__MACH__)
# define __MacOS__
# endif
2020-04-14 10:24:27 -07:00
static Ui * _ui = NULL ;
2018-06-04 03:11:21 -07:00
static Eina_Lock _lock ;
2020-04-14 10:24:27 -07:00
static Eina_List * _list = NULL ;
2020-04-15 10:24:19 -07:00
static Evisum_Config * _evisum_config = NULL ;
2020-04-14 10:24:27 -07:00
static void
_config_save ( Ui * ui )
{
2020-04-15 10:24:19 -07:00
if ( ! _evisum_config ) return ;
2020-04-14 10:24:27 -07:00
2020-04-15 10:24:19 -07:00
_evisum_config - > sort_type = ui - > sort_type ;
_evisum_config - > sort_reverse = ui - > sort_reverse ;
_evisum_config - > data_unit = ui - > data_unit ;
2020-04-14 10:24:27 -07:00
2020-04-15 10:24:19 -07:00
config_save ( _evisum_config ) ;
2020-04-14 10:24:27 -07:00
}
2018-06-09 03:30:07 -07:00
2020-04-15 05:57:50 -07:00
static void
_config_load ( Ui * ui )
{
2020-04-15 10:24:19 -07:00
_evisum_config = config_load ( ) ;
ui - > sort_type = _evisum_config - > sort_type ;
ui - > sort_reverse = _evisum_config - > sort_reverse ;
ui - > data_unit = _evisum_config - > data_unit = = 0 ? DATA_UNIT_MB : _evisum_config - > data_unit ;
2020-04-15 05:57:50 -07:00
}
2018-06-04 03:11:21 -07:00
static void
2019-09-05 14:33:38 -07:00
_system_stats ( void * data , Ecore_Thread * thread )
2018-06-10 06:09:44 -07:00
{
2019-09-05 14:33:38 -07:00
Ui * ui = data ;
2018-06-10 06:09:44 -07:00
2020-04-14 10:24:27 -07:00
while ( 1 )
2018-06-10 06:09:44 -07:00
{
2020-04-14 10:24:27 -07:00
results_t * results = system_stats_get ( ) ;
2020-04-14 17:59:40 -07:00
if ( ! results )
{
ui_shutdown ( ui ) ;
return ;
}
2020-04-14 10:24:27 -07:00
ecore_thread_feedback ( thread , results ) ;
2018-06-10 06:09:44 -07:00
2020-02-17 14:38:24 -08:00
for ( int i = 0 ; i < 4 ; i + + )
2018-06-10 06:09:44 -07:00
{
2020-02-15 18:03:32 -08:00
if ( ecore_thread_check ( thread ) ) return ;
2018-06-10 06:09:44 -07:00
2018-10-03 09:37:57 -07:00
if ( ui - > skip_wait )
{
ui - > skip_wait = EINA_FALSE ;
break ;
}
2019-09-01 08:06:17 -07:00
usleep ( 250000 ) ;
2018-06-10 06:09:44 -07:00
}
}
}
2018-10-12 05:10:37 -07:00
static unsigned long
_mem_adjust ( Data_Unit unit , unsigned long value )
2018-06-04 03:11:21 -07:00
{
2020-02-14 12:10:54 -08:00
if ( unit = = DATA_UNIT_MB )
2020-02-15 18:03:32 -08:00
value > > = 10 ;
2018-10-12 05:10:37 -07:00
else if ( unit = = DATA_UNIT_GB )
2020-02-15 18:03:32 -08:00
value > > = 20 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return value ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
static char *
2018-10-24 05:59:36 -07:00
_network_transfer_format ( double rate )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
const char * unit = " B/s " ;
2018-06-04 03:11:21 -07:00
2018-10-24 05:59:36 -07:00
if ( rate > 1048576 )
2018-10-12 05:10:37 -07:00
{
2018-10-24 05:59:36 -07:00
rate / = 1048576 ;
2018-10-12 05:10:37 -07:00
unit = " MB/s " ;
}
2018-10-24 05:59:36 -07:00
else if ( rate > 1024 & & rate < 1048576 )
2018-10-12 05:10:37 -07:00
{
2018-10-24 05:59:36 -07:00
rate / = 1024 ;
2018-10-12 05:10:37 -07:00
unit = " KB/s " ;
}
2018-06-04 03:11:21 -07:00
2019-09-05 14:33:38 -07:00
return strdup ( eina_slstr_printf ( " %.2f %s " , rate , unit ) ) ;
2018-06-04 03:11:21 -07:00
}
2020-01-04 04:59:03 -08:00
char *
_path_append ( const char * path , const char * file )
{
char * concat ;
int len ;
char separator = ' / ' ;
len = strlen ( path ) + strlen ( file ) + 2 ;
concat = malloc ( len * sizeof ( char ) ) ;
snprintf ( concat , len , " %s%c%s " , path , separator , file ) ;
return concat ;
}
const char *
_icon_path_get ( const char * name )
{
char * path ;
const char * icon_path , * directory = PACKAGE_DATA_DIR " /images " ;
icon_path = name ;
path = _path_append ( directory , eina_slstr_printf ( " %s.png " , name ) ) ;
if ( path )
{
if ( ecore_file_exists ( path ) )
icon_path = eina_slstr_printf ( " %s " , path ) ;
free ( path ) ;
}
return icon_path ;
}
2018-10-12 05:10:37 -07:00
static void
2019-09-05 14:33:38 -07:00
_tab_misc_update ( Ui * ui , results_t * results )
2018-06-04 03:11:21 -07:00
{
2020-04-15 09:49:37 -07:00
Evas_Object * box , * hbox , * vbox , * frame , * ic , * progress ;
Evas_Object * label ;
2018-06-04 03:11:21 -07:00
2019-06-08 15:39:15 -07:00
if ( ! ui - > misc_visible )
2018-10-12 05:10:37 -07:00
return ;
2018-06-04 03:11:21 -07:00
2019-06-08 15:39:15 -07:00
elm_box_clear ( ui - > misc_activity ) ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
box = elm_box_add ( ui - > content ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( box ) ;
2018-06-04 03:11:21 -07:00
2019-09-01 06:54:27 -07:00
for ( int i = 0 ; i < results - > power . battery_count ; i + + )
2018-10-12 05:10:37 -07:00
{
frame = elm_frame_add ( box ) ;
2020-04-15 09:49:37 -07:00
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2018-10-12 05:10:37 -07:00
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2020-04-15 09:49:37 -07:00
elm_object_style_set ( frame , " pad_small " ) ;
2020-02-15 18:03:32 -08:00
evas_object_show ( frame ) ;
2020-04-14 10:24:27 -07:00
2020-04-15 09:49:37 -07:00
vbox = elm_box_add ( box ) ;
evas_object_size_hint_align_set ( vbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( vbox , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( vbox ) ;
label = elm_label_add ( box ) ;
evas_object_size_hint_align_set ( label , 1.0 , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( label ) ;
elm_box_pack_end ( vbox , label ) ;
2020-01-04 04:59:03 -08:00
Eina_Strbuf * buf = eina_strbuf_new ( ) ;
2020-02-15 18:03:32 -08:00
if ( buf )
2020-02-14 12:10:54 -08:00
{
2020-04-15 09:49:37 -07:00
eina_strbuf_append_printf ( buf , " <bigger>%s " , results - > power . battery_names [ i ] ) ;
2020-02-15 18:03:32 -08:00
if ( results - > power . have_ac & & i = = 0 )
2020-02-16 07:57:26 -08:00
{
eina_strbuf_append ( buf , " (plugged in) " ) ;
}
2020-04-15 09:49:37 -07:00
eina_strbuf_append ( buf , " </bigger> " ) ;
elm_object_text_set ( label , eina_strbuf_string_get ( buf ) ) ;
2020-02-15 18:03:32 -08:00
eina_strbuf_free ( buf ) ;
}
2018-06-04 03:11:21 -07:00
2020-04-15 09:49:37 -07:00
hbox = elm_box_add ( box ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_box_horizontal_set ( hbox , EINA_TRUE ) ;
evas_object_show ( hbox ) ;
ic = elm_image_add ( box ) ;
elm_image_file_set ( ic , _icon_path_get ( " battery " ) , NULL ) ;
evas_object_size_hint_min_set ( ic , 32 * elm_config_scale_get ( ) , 32 * elm_config_scale_get ( ) ) ;
evas_object_show ( ic ) ;
elm_box_pack_end ( hbox , ic ) ;
2018-10-12 05:10:37 -07:00
progress = elm_progressbar_add ( frame ) ;
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_progressbar_span_size_set ( progress , 1.0 ) ;
2019-12-07 05:08:35 -08:00
elm_progressbar_unit_format_set ( progress , " %1.0f%% " ) ;
2020-02-15 18:03:32 -08:00
elm_progressbar_value_set ( progress , ( double ) results - > power . batteries [ i ] - > percent / 100 ) ;
2018-10-12 05:10:37 -07:00
evas_object_show ( progress ) ;
2020-04-15 09:49:37 -07:00
elm_box_pack_end ( hbox , progress ) ;
elm_box_pack_end ( vbox , hbox ) ;
elm_object_content_set ( frame , vbox ) ;
2018-10-12 05:10:37 -07:00
elm_box_pack_end ( box , frame ) ;
2019-09-01 07:11:40 -07:00
2020-01-04 04:59:03 -08:00
free ( results - > power . battery_names [ i ] ) ;
free ( results - > power . batteries [ i ] ) ;
2018-10-12 05:10:37 -07:00
}
2018-06-04 03:11:21 -07:00
2019-09-01 07:11:40 -07:00
if ( results - > power . batteries )
free ( results - > power . batteries ) ;
2020-04-15 09:49:37 -07:00
vbox = elm_box_add ( box ) ;
evas_object_size_hint_align_set ( vbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( vbox , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( vbox ) ;
label = elm_label_add ( box ) ;
elm_object_text_set ( label , " <bigger>Network Incoming</bigger> " ) ;
evas_object_size_hint_align_set ( label , 1.0 , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( label ) ;
elm_box_pack_end ( vbox , label ) ;
hbox = elm_box_add ( box ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_box_horizontal_set ( hbox , EINA_TRUE ) ;
evas_object_show ( hbox ) ;
ic = elm_image_add ( box ) ;
elm_image_file_set ( ic , _icon_path_get ( " network " ) , NULL ) ;
evas_object_size_hint_min_set ( ic , 32 * elm_config_scale_get ( ) , 32 * elm_config_scale_get ( ) ) ;
evas_object_show ( ic ) ;
elm_box_pack_end ( hbox , ic ) ;
2020-04-16 08:49:44 -07:00
progress = elm_progressbar_add ( box ) ;
2018-10-12 05:10:37 -07:00
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_progressbar_span_size_set ( progress , 1.0 ) ;
2020-02-15 18:03:32 -08:00
evas_object_show ( progress ) ;
2020-04-15 09:49:37 -07:00
elm_box_pack_end ( hbox , progress ) ;
elm_box_pack_end ( vbox , hbox ) ;
2018-10-24 03:49:27 -07:00
2020-02-15 18:03:32 -08:00
char * tmp = _network_transfer_format ( results - > incoming ) ;
if ( tmp )
{
elm_progressbar_unit_format_set ( progress , tmp ) ;
free ( tmp ) ;
}
2018-06-04 03:11:21 -07:00
2020-02-15 18:03:32 -08:00
if ( results - > incoming )
{
if ( ui - > incoming_max < results - > incoming )
ui - > incoming_max = results - > incoming ;
elm_progressbar_value_set ( progress , ( double ) results - > incoming / ui - > incoming_max ) ;
}
2018-10-02 07:38:06 -07:00
2020-04-16 08:49:44 -07:00
elm_box_pack_end ( box , vbox ) ;
2018-10-02 06:56:25 -07:00
2020-04-15 09:49:37 -07:00
vbox = elm_box_add ( box ) ;
evas_object_size_hint_align_set ( vbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( vbox , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( vbox ) ;
label = elm_label_add ( box ) ;
elm_object_text_set ( label , " <bigger>Network Outgoing</bigger> " ) ;
evas_object_size_hint_align_set ( label , 1.0 , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( label ) ;
elm_box_pack_end ( vbox , label ) ;
hbox = elm_box_add ( box ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_box_horizontal_set ( hbox , EINA_TRUE ) ;
evas_object_show ( hbox ) ;
ic = elm_image_add ( box ) ;
elm_image_file_set ( ic , _icon_path_get ( " network " ) , NULL ) ;
evas_object_size_hint_min_set ( ic , 32 * elm_config_scale_get ( ) , 32 * elm_config_scale_get ( ) ) ;
evas_object_show ( ic ) ;
elm_box_pack_end ( hbox , ic ) ;
2020-04-16 08:49:44 -07:00
progress = elm_progressbar_add ( box ) ;
2018-10-12 05:10:37 -07:00
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_progressbar_span_size_set ( progress , 1.0 ) ;
2020-02-15 18:03:32 -08:00
evas_object_show ( progress ) ;
2018-10-24 03:49:27 -07:00
2020-02-15 18:03:32 -08:00
tmp = _network_transfer_format ( results - > outgoing ) ;
if ( tmp )
{
elm_progressbar_unit_format_set ( progress , tmp ) ;
free ( tmp ) ;
}
2018-10-02 06:56:25 -07:00
2020-02-15 18:03:32 -08:00
if ( results - > outgoing )
{
if ( ui - > outgoing_max < results - > outgoing )
ui - > outgoing_max = results - > outgoing ;
elm_progressbar_value_set ( progress , ( double ) results - > outgoing / ui - > outgoing_max ) ;
}
2018-06-04 03:11:21 -07:00
2020-04-15 09:49:37 -07:00
elm_box_pack_end ( hbox , progress ) ;
elm_box_pack_end ( vbox , hbox ) ;
2020-04-16 08:49:44 -07:00
elm_box_pack_end ( box , vbox ) ;
2019-06-08 15:39:15 -07:00
elm_box_pack_end ( ui - > misc_activity , box ) ;
2018-10-12 05:10:37 -07:00
}
2018-10-02 06:56:25 -07:00
2018-10-12 05:10:37 -07:00
static unsigned long
_disk_adjust ( Data_Unit unit , unsigned long value )
{
if ( unit = = DATA_UNIT_KB )
2020-02-15 18:03:32 -08:00
value > > = 10 ;
2018-10-12 05:10:37 -07:00
else if ( unit = = DATA_UNIT_MB )
2020-02-15 18:03:32 -08:00
value > > = 20 ;
2018-10-12 05:10:37 -07:00
else if ( unit = = DATA_UNIT_GB )
2020-02-15 18:03:32 -08:00
value > > = 30 ;
2018-10-02 06:56:25 -07:00
2018-10-12 05:10:37 -07:00
return value ;
2018-06-04 03:11:21 -07:00
}
static void
2018-10-12 05:10:37 -07:00
_ui_disk_add ( Ui * ui , const char * path , const char * mount , unsigned long total , unsigned long used )
2018-06-04 03:11:21 -07:00
{
2020-04-16 08:09:05 -07:00
Evas_Object * box , * progress , * label ;
2018-10-12 05:10:37 -07:00
double ratio , value ;
2020-04-15 06:30:56 -07:00
box = elm_box_add ( ui - > disk_activity ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( box ) ;
label = elm_label_add ( box ) ;
evas_object_size_hint_align_set ( label , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2020-04-15 07:03:54 -07:00
elm_object_text_set ( label , eina_slstr_printf ( " <subtitle>%s</subtitle><br><bigger>mounted at %s</bigger><br>%lu%c of %lu%c " , path , mount ,
2020-04-15 06:30:56 -07:00
_disk_adjust ( ui - > data_unit , used ) , ui - > data_unit , _disk_adjust ( ui - > data_unit , total ) , ui - > data_unit ) ) ;
evas_object_show ( label ) ;
2020-04-16 08:09:05 -07:00
elm_box_pack_end ( box , label ) ;
2020-04-15 06:30:56 -07:00
2020-04-16 08:09:05 -07:00
progress = elm_progressbar_add ( box ) ;
2018-10-12 05:10:37 -07:00
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_progressbar_span_size_set ( progress , 1.0 ) ;
2020-02-15 18:03:32 -08:00
evas_object_show ( progress ) ;
2018-10-12 05:10:37 -07:00
2019-12-14 11:34:58 -08:00
ratio = total / 100.0 ;
value = used / ratio ;
2018-10-12 05:10:37 -07:00
if ( used = = 0 & & total = = 0 )
2019-12-05 05:47:55 -08:00
elm_progressbar_value_set ( progress , 1.0 ) ;
2018-10-12 05:10:37 -07:00
else
2019-12-05 05:47:55 -08:00
elm_progressbar_value_set ( progress , value / 100.0 ) ;
2018-10-12 05:10:37 -07:00
2020-04-16 08:09:05 -07:00
elm_box_pack_end ( box , progress ) ;
2020-04-15 06:30:56 -07:00
elm_box_pack_end ( ui - > disk_activity , box ) ;
2018-06-04 03:11:21 -07:00
}
static void
2019-09-05 14:33:38 -07:00
_tab_disk_update ( Ui * ui )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
Eina_List * disks ;
char * path ;
unsigned long total , used ;
if ( ! ui - > disk_visible )
return ;
elm_box_clear ( ui - > disk_activity ) ;
disks = disks_get ( ) ;
EINA_LIST_FREE ( disks , path )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
char * mount = disk_mount_point_get ( path ) ;
if ( mount )
{
if ( disk_usage_get ( mount , & total , & used ) )
{
_ui_disk_add ( ui , path , mount , total , used ) ;
}
free ( mount ) ;
}
free ( path ) ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
if ( disks )
free ( disks ) ;
2018-06-04 03:11:21 -07:00
}
static void
2019-09-05 14:33:38 -07:00
_tab_memory_update ( Ui * ui , results_t * results )
2018-06-04 03:11:21 -07:00
{
2019-09-05 15:01:00 -07:00
Evas_Object * progress ;
2018-10-12 05:10:37 -07:00
double ratio , value ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
if ( ! ui - > mem_visible )
return ;
2018-06-04 03:11:21 -07:00
2018-10-24 03:49:27 -07:00
progress = ui - > progress_mem_used ;
2019-12-14 11:34:58 -08:00
ratio = results - > memory . total / 100.0 ;
value = results - > memory . used / ratio ;
2020-02-15 18:03:32 -08:00
elm_progressbar_value_set ( progress , value / 100 ) ;
elm_progressbar_unit_format_set ( progress , eina_slstr_printf ( " %lu %c / %lu %c (%1.0f %) " ,
2018-10-24 05:27:53 -07:00
_mem_adjust ( ui - > data_unit , results - > memory . used ) , ui - > data_unit ,
2019-12-14 11:34:58 -08:00
_mem_adjust ( ui - > data_unit , results - > memory . total ) , ui - > data_unit , value ) ) ;
2018-06-04 03:11:21 -07:00
2018-10-24 03:49:27 -07:00
progress = ui - > progress_mem_cached ;
2018-10-12 05:10:37 -07:00
ratio = results - > memory . total / 100.0 ;
value = results - > memory . cached / ratio ;
2020-02-15 18:03:32 -08:00
elm_progressbar_value_set ( progress , value / 100 ) ;
elm_progressbar_unit_format_set ( progress , eina_slstr_printf ( " %lu %c / %lu %c (%1.0f %) " ,
2019-12-14 11:34:58 -08:00
_mem_adjust ( ui - > data_unit , results - > memory . cached ) , ui - > data_unit ,
_mem_adjust ( ui - > data_unit , results - > memory . total ) , ui - > data_unit , value ) ) ;
2018-06-04 03:11:21 -07:00
2018-10-24 03:49:27 -07:00
progress = ui - > progress_mem_buffered ;
2019-12-14 11:34:58 -08:00
ratio = results - > memory . total / 100.0 ;
value = results - > memory . buffered / ratio ;
2020-02-15 18:03:32 -08:00
elm_progressbar_value_set ( progress , value / 100 ) ;
elm_progressbar_unit_format_set ( progress , eina_slstr_printf ( " %lu %c / %lu %c (%1.0f %) " ,
2018-10-24 05:27:53 -07:00
_mem_adjust ( ui - > data_unit , results - > memory . buffered ) , ui - > data_unit ,
2019-12-14 11:34:58 -08:00
_mem_adjust ( ui - > data_unit , results - > memory . total ) , ui - > data_unit , value ) ) ;
2018-06-04 03:11:21 -07:00
2018-10-24 03:49:27 -07:00
progress = ui - > progress_mem_shared ;
2019-12-14 11:34:58 -08:00
ratio = results - > memory . total / 100.0 ;
value = results - > memory . shared / ratio ;
2020-02-15 18:03:32 -08:00
elm_progressbar_value_set ( progress , value / 100 ) ;
elm_progressbar_unit_format_set ( progress , eina_slstr_printf ( " %lu %c / %lu %c (%1.0f %) " ,
2018-10-24 05:27:53 -07:00
_mem_adjust ( ui - > data_unit , results - > memory . shared ) , ui - > data_unit ,
2019-12-14 11:34:58 -08:00
_mem_adjust ( ui - > data_unit , results - > memory . total ) , ui - > data_unit , value ) ) ;
2019-06-08 15:39:15 -07:00
progress = ui - > progress_mem_swap ;
2019-12-14 11:34:58 -08:00
ratio = results - > memory . swap_total / 100.0 ;
value = results - > memory . swap_used / ratio ;
2020-02-15 18:03:32 -08:00
elm_progressbar_value_set ( progress , value / 100 ) ;
elm_progressbar_unit_format_set ( progress , eina_slstr_printf ( " %lu %c / %lu %c (%1.0f %) " ,
2019-06-08 15:53:10 -07:00
_mem_adjust ( ui - > data_unit , results - > memory . swap_used ) , ui - > data_unit ,
2019-12-14 11:34:58 -08:00
_mem_adjust ( ui - > data_unit , results - > memory . swap_total ) , ui - > data_unit , value ) ) ;
2018-06-04 03:11:21 -07:00
}
static void
2019-09-05 14:33:38 -07:00
_tab_cpu_update ( Ui * ui , results_t * results )
2018-06-04 03:11:21 -07:00
{
2020-04-15 10:08:08 -07:00
Evas_Object * box , * frame , * label , * progress ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
if ( ! ui - > cpu_visible )
return ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
elm_box_clear ( ui - > cpu_activity ) ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
box = elm_box_add ( ui - > content ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( box ) ;
2018-06-04 03:11:21 -07:00
2020-02-15 18:03:32 -08:00
for ( int i = 0 ; i < results - > cpu_count ; i + + )
2018-06-04 03:11:21 -07:00
{
2020-04-14 10:24:27 -07:00
if ( i = = 0 )
{
frame = elm_frame_add ( box ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , 0 ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( frame ) ;
2020-04-16 08:49:44 -07:00
elm_object_style_set ( frame , " pad_large " ) ;
2020-04-14 10:24:27 -07:00
label = elm_label_add ( box ) ;
evas_object_size_hint_align_set ( label , EVAS_HINT_FILL , 0 ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( label ) ;
if ( results - > temperature ! = INVALID_TEMP )
elm_object_text_set ( label , eina_slstr_printf ( " <subtitle>CPUs</subtitle><br><bigger>Total of %d CPUs</bigger><br><header>Core at (%d °C)</header> " , results - > cpu_count , results - > temperature ) ) ;
else
elm_object_text_set ( label , eina_slstr_printf ( " <subtitle>CPUs</subtitle><br><bigger>Total of %d CPUs</bigger> " , results - > cpu_count ) ) ;
elm_box_pack_end ( box , frame ) ;
elm_box_pack_end ( box , label ) ;
}
2018-10-12 05:10:37 -07:00
frame = elm_frame_add ( box ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , 0 ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2020-02-15 18:03:32 -08:00
evas_object_show ( frame ) ;
2020-04-14 10:24:27 -07:00
elm_object_style_set ( frame , " pad_large " ) ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
progress = elm_progressbar_add ( frame ) ;
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_progressbar_span_size_set ( progress , 1.0 ) ;
elm_progressbar_unit_format_set ( progress , " %1.2f%% " ) ;
2020-02-15 18:03:32 -08:00
evas_object_show ( progress ) ;
2018-06-04 03:11:21 -07:00
2019-12-05 05:47:55 -08:00
elm_progressbar_value_set ( progress , results - > cores [ i ] - > percent / 100 ) ;
2018-10-12 05:10:37 -07:00
elm_object_content_set ( frame , progress ) ;
elm_box_pack_end ( box , frame ) ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
elm_box_pack_end ( ui - > cpu_activity , box ) ;
2018-06-04 03:11:21 -07:00
}
static void
2019-09-05 14:33:38 -07:00
_system_stats_feedback_cb ( void * data , Ecore_Thread * thread , void * msg )
2018-06-04 03:11:21 -07:00
{
Ui * ui ;
2019-06-21 10:15:26 -07:00
Evas_Object * progress ;
2018-10-12 05:10:37 -07:00
results_t * results ;
2019-06-21 10:15:26 -07:00
double ratio , value , cpu_usage = 0.0 ;
2018-06-04 03:11:21 -07:00
ui = data ;
2018-10-12 05:10:37 -07:00
results = msg ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
if ( ecore_thread_check ( thread ) )
goto out ;
2018-06-16 13:31:49 -07:00
2019-09-05 14:33:38 -07:00
_tab_cpu_update ( ui , results ) ;
_tab_memory_update ( ui , results ) ;
_tab_disk_update ( ui ) ;
_tab_misc_update ( ui , results ) ;
2018-10-03 09:37:57 -07:00
2019-06-21 10:15:26 -07:00
for ( int i = 0 ; i < results - > cpu_count ; i + + )
2018-10-12 05:10:37 -07:00
{
cpu_usage + = results - > cores [ i ] - > percent ;
free ( results - > cores [ i ] ) ;
2018-06-04 03:11:21 -07:00
}
2019-11-16 07:58:16 -08:00
cpu_usage = cpu_usage / system_cpu_online_count_get ( ) ;
2018-06-04 03:11:21 -07:00
2020-02-15 18:03:32 -08:00
elm_progressbar_value_set ( ui - > progress_cpu , cpu_usage / 100 ) ;
2018-10-24 03:49:27 -07:00
2019-06-21 10:15:26 -07:00
progress = ui - > progress_mem ;
ratio = results - > memory . total / 100.0 ;
value = results - > memory . used / ratio ;
2019-12-05 05:47:55 -08:00
elm_progressbar_value_set ( progress , value / 100 ) ;
2020-02-15 18:03:32 -08:00
elm_progressbar_unit_format_set ( progress , eina_slstr_printf ( " %lu %c / %lu %c " ,
_mem_adjust ( ui - > data_unit , results - > memory . used ) , ui - > data_unit ,
_mem_adjust ( ui - > data_unit , results - > memory . total ) , ui - > data_unit ) ) ;
2018-10-12 05:10:37 -07:00
out :
free ( results - > cores ) ;
free ( results ) ;
}
static int
_sort_by_pid ( const void * p1 , const void * p2 )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
const Proc_Stats * inf1 , * inf2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
inf1 = p1 ; inf2 = p2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return inf1 - > pid - inf2 - > pid ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
static int
_sort_by_uid ( const void * p1 , const void * p2 )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
const Proc_Stats * inf1 , * inf2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
inf1 = p1 ; inf2 = p2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return inf1 - > uid - inf2 - > uid ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
static int
_sort_by_nice ( const void * p1 , const void * p2 )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
const Proc_Stats * inf1 , * inf2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
inf1 = p1 ; inf2 = p2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return inf1 - > nice - inf2 - > nice ;
}
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
static int
_sort_by_pri ( const void * p1 , const void * p2 )
{
const Proc_Stats * inf1 , * inf2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
inf1 = p1 ; inf2 = p2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return inf1 - > priority - inf2 - > priority ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
static int
_sort_by_cpu ( const void * p1 , const void * p2 )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
const Proc_Stats * inf1 , * inf2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
inf1 = p1 ; inf2 = p2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return inf1 - > cpu_id - inf2 - > cpu_id ;
}
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
static int
_sort_by_threads ( const void * p1 , const void * p2 )
{
const Proc_Stats * inf1 , * inf2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
inf1 = p1 ; inf2 = p2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return inf1 - > numthreads - inf2 - > numthreads ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
static int
_sort_by_size ( const void * p1 , const void * p2 )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
const Proc_Stats * inf1 , * inf2 ;
int64_t size1 , size2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
inf1 = p1 ; inf2 = p2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
size1 = inf1 - > mem_size ;
size2 = inf2 - > mem_size ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
if ( size1 < size2 )
return - 1 ;
if ( size2 > size1 )
return 1 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return 0 ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
static int
_sort_by_rss ( const void * p1 , const void * p2 )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
const Proc_Stats * inf1 , * inf2 ;
int64_t size1 , size2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
inf1 = p1 ; inf2 = p2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
size1 = inf1 - > mem_rss ;
size2 = inf2 - > mem_rss ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
if ( size1 < size2 )
return - 1 ;
if ( size2 > size1 )
return 1 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return 0 ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
static int
_sort_by_cpu_usage ( const void * p1 , const void * p2 )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
const Proc_Stats * inf1 , * inf2 ;
double one , two ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
inf1 = p1 ; inf2 = p2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
one = inf1 - > cpu_usage ;
two = inf2 - > cpu_usage ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
if ( one < two )
return - 1 ;
if ( two > one )
return 1 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return 0 ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
static int
_sort_by_cmd ( const void * p1 , const void * p2 )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
const Proc_Stats * inf1 , * inf2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
inf1 = p1 ; inf2 = p2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return strcasecmp ( inf1 - > command , inf2 - > command ) ;
}
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
static int
_sort_by_state ( const void * p1 , const void * p2 )
{
const Proc_Stats * inf1 , * inf2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
inf1 = p1 ; inf2 = p2 ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return strcmp ( inf1 - > state , inf2 - > state ) ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
static Eina_List *
_list_sort ( Ui * ui , Eina_List * list )
{
switch ( ui - > sort_type )
{
case SORT_BY_NONE :
case SORT_BY_PID :
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_pid ) ;
break ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
case SORT_BY_UID :
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_uid ) ;
break ;
case SORT_BY_NICE :
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_nice ) ;
break ;
case SORT_BY_PRI :
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_pri ) ;
break ;
case SORT_BY_CPU :
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_cpu ) ;
break ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
case SORT_BY_THREADS :
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_threads ) ;
break ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
case SORT_BY_SIZE :
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_size ) ;
break ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
case SORT_BY_RSS :
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_rss ) ;
break ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
case SORT_BY_CMD :
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_cmd ) ;
break ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
case SORT_BY_STATE :
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_state ) ;
break ;
case SORT_BY_CPU_USAGE :
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_cpu_usage ) ;
break ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
if ( ui - > sort_reverse )
list = eina_list_reverse ( list ) ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
return list ;
2018-06-04 03:11:21 -07:00
}
2020-02-24 09:22:22 -08:00
typedef struct {
pid_t pid ;
int64_t cpu_time_prev ;
} pid_cpu_time_t ;
static void
_proc_pid_cpu_times_free ( Ui * ui )
{
pid_cpu_time_t * tmp ;
EINA_LIST_FREE ( ui - > cpu_times , tmp )
{
free ( tmp ) ;
}
if ( ui - > cpu_times )
eina_list_free ( ui - > cpu_times ) ;
}
static void
_proc_pid_cpu_time_save ( Ui * ui , Proc_Stats * proc )
{
Eina_List * l ;
pid_cpu_time_t * tmp ;
EINA_LIST_FOREACH ( ui - > cpu_times , l , tmp )
{
if ( tmp - > pid = = proc - > pid )
{
tmp - > cpu_time_prev = proc - > cpu_time ;
return ;
}
}
tmp = calloc ( 1 , sizeof ( pid_cpu_time_t ) ) ;
if ( tmp )
{
tmp - > pid = proc - > pid ;
tmp - > cpu_time_prev = proc - > cpu_time ;
ui - > cpu_times = eina_list_append ( ui - > cpu_times , tmp ) ;
}
}
static void
_proc_pid_cpu_usage_get ( Ui * ui , Proc_Stats * proc )
{
Eina_List * l ;
pid_cpu_time_t * tmp ;
EINA_LIST_FOREACH ( ui - > cpu_times , l , tmp )
{
if ( tmp - > pid = = proc - > pid )
{
if ( tmp - > cpu_time_prev & & proc - > cpu_time > tmp - > cpu_time_prev )
{
proc - > cpu_usage = ( double ) ( proc - > cpu_time - tmp - > cpu_time_prev ) /
ui - > poll_delay ;
}
_proc_pid_cpu_time_save ( ui , proc ) ;
return ;
}
}
_proc_pid_cpu_time_save ( ui , proc ) ;
}
2020-04-14 10:24:27 -07:00
static void
_column_expand_init ( Ui * ui )
{
ui - > long_pid = strdup ( " " ) ;
ui - > long_uid = strdup ( " " ) ;
ui - > long_size = strdup ( " " ) ;
ui - > long_rss = strdup ( " " ) ;
ui - > long_cmd = strdup ( " " ) ;
ui - > long_state = strdup ( " " ) ;
ui - > long_cpu = strdup ( " " ) ;
}
static void
_column_expand_calculate ( Ui * ui , Proc_Stats * proc )
{
const char * text ;
text = eina_slstr_printf ( " %d " , proc - > pid ) ;
if ( strlen ( text ) > strlen ( ui - > long_pid ) )
{
if ( ui - > long_pid ) free ( ui - > long_pid ) ;
ui - > long_pid = strdup ( text ) ;
}
text = eina_slstr_printf ( " %d " , proc - > uid ) ;
if ( strlen ( text ) > strlen ( ui - > long_uid ) )
{
if ( ui - > long_uid ) free ( ui - > long_uid ) ;
ui - > long_uid = strdup ( text ) ;
}
text = eina_slstr_printf ( " %lu %c " , _mem_adjust ( ui - > data_unit , proc - > mem_size > > 10 ) , ui - > data_unit ) ;
if ( strlen ( text ) > strlen ( ui - > long_size ) )
{
if ( ui - > long_size ) free ( ui - > long_size ) ;
ui - > long_size = strdup ( text ) ;
}
text = eina_slstr_printf ( " %lu %c " , _mem_adjust ( ui - > data_unit , proc - > mem_rss > > 10 ) , ui - > data_unit ) ;
if ( strlen ( text ) > strlen ( ui - > long_rss ) )
{
if ( ui - > long_rss ) free ( ui - > long_rss ) ;
ui - > long_rss = strdup ( text ) ;
}
text = eina_slstr_printf ( " %sXXX " , proc - > command ) ;
if ( strlen ( text ) > strlen ( ui - > long_cmd ) )
{
if ( ui - > long_cmd ) free ( ui - > long_cmd ) ;
ui - > long_cmd = strdup ( text ) ;
}
text = eina_slstr_printf ( " %s " , proc - > state ) ;
if ( strlen ( text ) > strlen ( ui - > long_state ) )
{
if ( ui - > long_state ) free ( ui - > long_state ) ;
ui - > long_state = strdup ( text ) ;
}
text = eina_slstr_printf ( " %.1f%% " , proc - > cpu_usage ) ;
if ( strlen ( text ) > strlen ( ui - > long_cpu ) )
{
if ( ui - > long_cpu ) free ( ui - > long_cpu ) ;
ui - > long_cpu = strdup ( text ) ;
}
}
static Evas_Object *
_column_expand ( Evas_Object * parent , const char * text )
{
Evas_Object * label ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , text ) ;
evas_object_size_hint_align_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
return label ;
}
2020-04-15 18:27:09 -07:00
static void
_item_del ( void * data , Evas_Object * obj EINA_UNUSED )
{
Proc_Stats * proc = data ;
free ( proc ) ;
}
2020-04-14 10:24:27 -07:00
static Evas_Object *
_content_get ( void * data , Evas_Object * obj , const char * source )
{
Ui * ui ;
2020-04-15 10:24:19 -07:00
Proc_Stats * proc ;
2020-04-14 10:24:27 -07:00
Evas_Object * box , * label ;
Evas_Object * table , * rect ;
Evas_Coord w , h ;
2020-04-15 10:24:19 -07:00
proc = ( void * ) data ;
2020-04-14 10:24:27 -07:00
ui = _ui ;
2020-04-15 10:24:19 -07:00
if ( strcmp ( source , " elm.swallow.content " ) ) return NULL ;
if ( ! proc ) return NULL ;
2020-04-14 10:24:27 -07:00
if ( ! ui - > ready ) return NULL ;
box = elm_box_add ( obj ) ;
elm_box_horizontal_set ( box , EINA_TRUE ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_weight_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( box ) ;
table = elm_table_add ( obj ) ;
evas_object_size_hint_align_set ( table , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_weight_set ( table , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( table ) ;
label = elm_label_add ( obj ) ;
2020-04-14 17:59:40 -07:00
elm_object_text_set ( label , eina_slstr_printf ( " %d " , proc - > pid ) ) ;
2020-04-14 10:24:27 -07:00
evas_object_size_hint_align_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( label ) ;
rect = evas_object_rectangle_add ( table ) ;
evas_object_geometry_get ( ui - > btn_pid , NULL , NULL , & w , & h ) ;
evas_object_size_hint_min_set ( rect , w , 1 ) ;
elm_table_pack ( table , rect , 0 , 0 , 1 , 1 ) ;
elm_table_pack ( table , label , 0 , 0 , 1 , 1 ) ;
elm_table_pack ( table , _column_expand ( table , ui - > long_pid ) , 0 , 0 , 1 , 1 ) ;
label = elm_label_add ( table ) ;
2020-04-14 17:59:40 -07:00
elm_object_text_set ( label , eina_slstr_printf ( " %d " , proc - > uid ) ) ;
2020-04-14 10:24:27 -07:00
evas_object_size_hint_align_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_table_pack ( table , label , 1 , 0 , 1 , 1 ) ;
rect = evas_object_rectangle_add ( table ) ;
evas_object_geometry_get ( ui - > btn_uid , NULL , NULL , & w , & h ) ;
evas_object_size_hint_min_set ( rect , w , 1 ) ;
elm_table_pack ( table , rect , 1 , 0 , 1 , 1 ) ;
elm_table_pack ( table , _column_expand ( table , ui - > long_uid ) , 1 , 0 , 1 , 1 ) ;
evas_object_show ( label ) ;
label = elm_label_add ( table ) ;
2020-04-14 17:59:40 -07:00
elm_object_text_set ( label , eina_slstr_printf ( " %lu %c " , _mem_adjust ( ui - > data_unit , proc - > mem_size > > 10 ) , ui - > data_unit ) ) ;
2020-04-14 10:24:27 -07:00
evas_object_size_hint_align_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( label ) ;
rect = evas_object_rectangle_add ( table ) ;
evas_object_geometry_get ( ui - > btn_size , NULL , NULL , & w , & h ) ;
evas_object_size_hint_min_set ( rect , w , 1 ) ;
elm_table_pack ( table , rect , 2 , 0 , 1 , 1 ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 2 , 0 , 1 , 1 ) ;
elm_table_pack ( table , _column_expand ( table , ui - > long_size ) , 2 , 0 , 1 , 1 ) ;
label = elm_label_add ( table ) ;
2020-04-14 17:59:40 -07:00
elm_object_text_set ( label , eina_slstr_printf ( " %lu %c " , _mem_adjust ( ui - > data_unit , proc - > mem_rss > > 10 ) , ui - > data_unit ) ) ;
2020-04-14 10:24:27 -07:00
evas_object_size_hint_align_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( label ) ;
rect = evas_object_rectangle_add ( table ) ;
evas_object_geometry_get ( ui - > btn_rss , NULL , NULL , & w , & h ) ;
evas_object_size_hint_min_set ( rect , w , 1 ) ;
elm_table_pack ( table , rect , 3 , 0 , 1 , 1 ) ;
elm_table_pack ( table , label , 3 , 0 , 1 , 1 ) ;
elm_table_pack ( table , _column_expand ( table , ui - > long_rss ) , 3 , 0 , 1 , 1 ) ;
label = elm_label_add ( table ) ;
2020-04-14 17:59:40 -07:00
elm_object_text_set ( label , eina_slstr_printf ( " %s " , proc - > command ) ) ;
2020-04-14 10:24:27 -07:00
evas_object_size_hint_align_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
rect = evas_object_rectangle_add ( table ) ;
evas_object_geometry_get ( ui - > btn_cmd , NULL , NULL , & w , & h ) ;
evas_object_size_hint_min_set ( rect , w , 1 ) ;
elm_table_pack ( table , rect , 4 , 0 , 1 , 1 ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 4 , 0 , 1 , 1 ) ;
elm_table_pack ( table , _column_expand ( table , ui - > long_cmd ) , 4 , 0 , 1 , 1 ) ;
label = elm_label_add ( table ) ;
2020-04-14 17:59:40 -07:00
elm_object_text_set ( label , eina_slstr_printf ( " %s " , proc - > state ) ) ;
2020-04-14 10:24:27 -07:00
evas_object_size_hint_align_set ( label , 0.5 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 5 , 0 , 1 , 1 ) ;
rect = evas_object_rectangle_add ( table ) ;
evas_object_geometry_get ( ui - > btn_state , NULL , NULL , & w , & h ) ;
evas_object_size_hint_min_set ( rect , w , 1 ) ;
elm_table_pack ( table , rect , 5 , 0 , 1 , 1 ) ;
elm_table_pack ( table , _column_expand ( table , ui - > long_state ) , 5 , 0 , 1 , 1 ) ;
label = elm_label_add ( table ) ;
2020-04-14 17:59:40 -07:00
elm_object_text_set ( label , eina_slstr_printf ( " %.1f%% " , proc - > cpu_usage ) ) ;
2020-04-14 10:24:27 -07:00
evas_object_size_hint_align_set ( label , 0.5 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 6 , 0 , 1 , 1 ) ;
rect = evas_object_rectangle_add ( table ) ;
evas_object_geometry_get ( ui - > btn_cpu , NULL , NULL , & w , & h ) ;
evas_object_size_hint_min_set ( rect , w , 1 ) ;
elm_table_pack ( table , rect , 6 , 0 , 1 , 1 ) ;
elm_table_pack ( table , _column_expand ( table , ui - > long_cpu ) , 6 , 0 , 1 , 1 ) ;
return table ;
}
static void
_genlist_ensure_n_items ( Evas_Object * genlist , unsigned int items )
{
Elm_Object_Item * it ;
Elm_Genlist_Item_Class * itc ;
unsigned int i , existing = elm_genlist_items_count ( genlist ) ;
if ( items < existing )
{
for ( i = existing - items ; i > 0 ; i - - )
{
it = elm_genlist_last_item_get ( genlist ) ;
if ( it )
2020-04-14 17:59:40 -07:00
elm_object_item_del ( it ) ;
2020-04-14 10:24:27 -07:00
}
}
if ( items = = existing ) return ;
itc = elm_genlist_item_class_new ( ) ;
itc - > item_style = " full " ;
itc - > func . text_get = NULL ;
itc - > func . content_get = _content_get ;
itc - > func . filter_get = NULL ;
itc - > func . del = _item_del ;
for ( i = existing ; i < items ; i + + )
{
elm_genlist_item_append ( genlist , itc , NULL , NULL , ELM_GENLIST_ITEM_NONE , NULL , NULL ) ;
}
elm_genlist_item_class_free ( itc ) ;
}
2018-10-12 05:10:37 -07:00
static void
2019-09-05 14:33:38 -07:00
_process_list_feedback_cb ( void * data , Ecore_Thread * thread EINA_UNUSED , void * msg EINA_UNUSED )
2018-06-04 03:11:21 -07:00
{
Ui * ui ;
2020-04-14 10:24:27 -07:00
Eina_List * list , * l , * l_next ;
2018-06-04 03:11:21 -07:00
Proc_Stats * proc ;
2020-04-14 10:24:27 -07:00
Elm_Object_Item * it ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
ui = data ;
2018-06-04 03:11:21 -07:00
2020-04-16 08:49:44 -07:00
if ( ui - > shutting_down ) return ;
2020-04-14 10:24:27 -07:00
eina_lock_take ( & _lock ) ;
2018-10-12 05:10:37 -07:00
list = proc_info_all_get ( ) ;
2018-06-04 03:11:21 -07:00
2020-04-14 10:24:27 -07:00
EINA_LIST_FOREACH_SAFE ( list , l , l_next , proc )
2018-06-04 03:11:21 -07:00
{
2020-04-14 10:24:27 -07:00
if ( ( ui - > search_text & & ui - > search_text [ 0 ] & &
strncasecmp ( proc - > command , ui - > search_text , strlen ( ui - > search_text ) ) ) | |
( ! ui - > show_self & & proc - > pid = = ui - > program_pid ) )
{
free ( proc ) ;
list = eina_list_remove_list ( list , l ) ;
}
else
{
_proc_pid_cpu_usage_get ( ui , proc ) ;
_column_expand_calculate ( ui , proc ) ;
}
2018-06-04 03:11:21 -07:00
}
2020-04-16 08:49:44 -07:00
if ( ui - > shutting_down )
{
eina_lock_release ( & _lock ) ;
return ;
}
2020-04-14 10:24:27 -07:00
_genlist_ensure_n_items ( ui - > genlist_procs , eina_list_count ( list ) ) ;
it = elm_genlist_first_item_get ( ui - > genlist_procs ) ;
2018-06-04 03:11:21 -07:00
2020-04-14 10:24:27 -07:00
list = _list = _list_sort ( ui , list ) ;
2018-10-12 05:10:37 -07:00
EINA_LIST_FREE ( list , proc )
2018-06-04 03:11:21 -07:00
{
2020-04-15 16:15:25 -07:00
Proc_Stats * prev = elm_object_item_data_get ( it ) ;
if ( prev ) { free ( prev ) ; }
2020-04-14 10:24:27 -07:00
elm_object_item_data_set ( it , proc ) ;
2020-04-16 06:50:53 -07:00
elm_genlist_item_update ( it ) ;
2020-04-14 10:24:27 -07:00
it = elm_genlist_item_next_get ( it ) ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
if ( list )
eina_list_free ( list ) ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
eina_lock_release ( & _lock ) ;
}
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
static void
2019-09-05 14:33:38 -07:00
_process_list_update ( Ui * ui )
2018-10-12 05:10:37 -07:00
{
2019-09-05 14:33:38 -07:00
_process_list_feedback_cb ( ui , NULL , NULL ) ;
2018-06-04 03:11:21 -07:00
}
static void
2019-09-05 14:33:38 -07:00
_process_list ( void * data , Ecore_Thread * thread )
2018-06-04 03:11:21 -07:00
{
2020-02-15 18:03:32 -08:00
Ui * ui = data ;
2018-06-04 03:11:21 -07:00
2020-04-14 10:24:27 -07:00
while ( 1 )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
ecore_thread_feedback ( thread , ui ) ;
2020-02-15 18:03:32 -08:00
for ( int i = 0 ; i < ui - > poll_delay * 4 ; i + + )
2018-10-12 05:10:37 -07:00
{
2020-02-15 18:03:32 -08:00
if ( ecore_thread_check ( thread ) ) return ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
if ( ui - > skip_wait )
{
ui - > skip_wait = EINA_FALSE ;
break ;
}
2019-09-05 14:33:38 -07:00
usleep ( 250000 ) ;
2018-10-12 05:10:37 -07:00
}
2020-04-14 10:24:27 -07:00
ui - > ready = EINA_TRUE ;
2018-10-12 05:10:37 -07:00
}
2018-06-04 03:11:21 -07:00
}
static void
2018-10-12 05:10:37 -07:00
_thread_end_cb ( void * data EINA_UNUSED , Ecore_Thread * thread )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
thread = NULL ;
2018-06-04 03:11:21 -07:00
}
static void
2018-10-12 05:10:37 -07:00
_thread_error_cb ( void * data EINA_UNUSED , Ecore_Thread * thread )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
thread = NULL ;
2018-06-04 03:11:21 -07:00
}
static void
2018-10-12 05:10:37 -07:00
_btn_icon_state_set ( Evas_Object * button , Eina_Bool reverse )
2018-06-04 03:11:21 -07:00
{
2018-10-12 05:10:37 -07:00
Evas_Object * icon = elm_icon_add ( button ) ;
2020-02-15 18:03:32 -08:00
2018-10-12 05:10:37 -07:00
if ( reverse )
2020-01-04 04:59:03 -08:00
elm_icon_standard_set ( icon , _icon_path_get ( " go-down " ) ) ;
2018-10-12 05:10:37 -07:00
else
2020-01-04 04:59:03 -08:00
elm_icon_standard_set ( icon , _icon_path_get ( " go-up " ) ) ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
elm_object_part_content_set ( button , " icon " , icon ) ;
2020-02-24 09:22:22 -08:00
2018-10-12 05:10:37 -07:00
evas_object_show ( icon ) ;
2018-06-04 03:11:21 -07:00
}
static void
2018-10-12 05:10:37 -07:00
_btn_pid_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2018-06-04 03:11:21 -07:00
{
Ui * ui = data ;
2018-10-12 05:10:37 -07:00
if ( ui - > sort_type = = SORT_BY_PID )
ui - > sort_reverse = ! ui - > sort_reverse ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
_btn_icon_state_set ( ui - > btn_pid , ui - > sort_reverse ) ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
ui - > sort_type = SORT_BY_PID ;
2018-06-04 03:11:21 -07:00
2020-04-14 10:24:27 -07:00
_config_save ( ui ) ;
2019-09-05 14:33:38 -07:00
_process_list_update ( ui ) ;
2020-04-16 08:49:44 -07:00
2020-04-16 06:50:53 -07:00
elm_scroller_page_bring_in ( ui - > scroller , 0 , 0 ) ;
2018-10-12 05:10:37 -07:00
}
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
static void
_btn_uid_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
Ui * ui = data ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
if ( ui - > sort_type = = SORT_BY_UID )
ui - > sort_reverse = ! ui - > sort_reverse ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
_btn_icon_state_set ( ui - > btn_uid , ui - > sort_reverse ) ;
2018-06-04 03:11:21 -07:00
2018-10-12 05:10:37 -07:00
ui - > sort_type = SORT_BY_UID ;
2018-06-04 03:11:21 -07:00
2020-04-14 10:24:27 -07:00
_config_save ( ui ) ;
2019-09-05 14:33:38 -07:00
_process_list_update ( ui ) ;
2020-04-16 06:50:53 -07:00
elm_scroller_page_bring_in ( ui - > scroller , 0 , 0 ) ;
2018-06-04 03:11:21 -07:00
}
2018-10-12 05:10:37 -07:00
static void
_btn_cpu_usage_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2018-06-09 03:30:07 -07:00
{
2018-10-12 05:10:37 -07:00
Ui * ui = data ;
if ( ui - > sort_type = = SORT_BY_CPU_USAGE )
ui - > sort_reverse = ! ui - > sort_reverse ;
2018-06-09 03:30:07 -07:00
2018-10-12 05:10:37 -07:00
_btn_icon_state_set ( ui - > btn_cpu_usage , ui - > sort_reverse ) ;
ui - > sort_type = SORT_BY_CPU_USAGE ;
2020-04-14 10:24:27 -07:00
_config_save ( ui ) ;
2019-09-05 14:33:38 -07:00
_process_list_update ( ui ) ;
2020-04-16 06:50:53 -07:00
elm_scroller_page_bring_in ( ui - > scroller , 0 , 0 ) ;
2018-06-09 03:30:07 -07:00
}
2018-06-04 03:11:21 -07:00
static void
2018-10-12 05:10:37 -07:00
_btn_size_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2018-06-09 03:30:07 -07:00
{
2018-10-12 05:10:37 -07:00
Ui * ui = data ;
2018-06-09 03:30:07 -07:00
2018-10-12 05:10:37 -07:00
if ( ui - > sort_type = = SORT_BY_SIZE )
ui - > sort_reverse = ! ui - > sort_reverse ;
2018-06-09 03:30:07 -07:00
2018-10-12 05:10:37 -07:00
_btn_icon_state_set ( ui - > btn_size , ui - > sort_reverse ) ;
2018-06-09 03:30:07 -07:00
2018-10-12 05:10:37 -07:00
ui - > sort_type = SORT_BY_SIZE ;
2018-06-10 01:32:15 -07:00
2020-04-14 10:24:27 -07:00
_config_save ( ui ) ;
2019-09-05 14:33:38 -07:00
_process_list_update ( ui ) ;
2020-04-16 06:50:53 -07:00
elm_scroller_page_bring_in ( ui - > scroller , 0 , 0 ) ;
2018-10-12 05:10:37 -07:00
}
2018-06-09 03:30:07 -07:00
2018-10-12 05:10:37 -07:00
static void
_btn_rss_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
Ui * ui = data ;
2018-06-09 11:55:04 -07:00
2018-10-12 05:10:37 -07:00
if ( ui - > sort_type = = SORT_BY_RSS )
ui - > sort_reverse = ! ui - > sort_reverse ;
2018-06-09 03:30:07 -07:00
2018-10-12 05:10:37 -07:00
_btn_icon_state_set ( ui - > btn_rss , ui - > sort_reverse ) ;
2018-06-09 03:30:07 -07:00
2018-10-12 05:10:37 -07:00
ui - > sort_type = SORT_BY_RSS ;
2020-04-14 10:24:27 -07:00
_config_save ( ui ) ;
2019-09-05 14:33:38 -07:00
_process_list_update ( ui ) ;
2020-04-16 06:50:53 -07:00
elm_scroller_page_bring_in ( ui - > scroller , 0 , 0 ) ;
2018-06-09 03:30:07 -07:00
}
static void
2018-10-12 05:10:37 -07:00
_btn_cmd_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2018-06-09 03:30:07 -07:00
{
2018-10-12 05:10:37 -07:00
Ui * ui = data ;
2018-06-09 03:30:07 -07:00
2018-10-12 05:10:37 -07:00
if ( ui - > sort_type = = SORT_BY_CMD )
ui - > sort_reverse = ! ui - > sort_reverse ;
2018-06-10 06:09:44 -07:00
2018-10-12 05:10:37 -07:00
_btn_icon_state_set ( ui - > btn_cmd , ui - > sort_reverse ) ;
2018-06-09 03:30:07 -07:00
2018-10-12 05:10:37 -07:00
ui - > sort_type = SORT_BY_CMD ;
2018-06-09 03:30:07 -07:00
2020-04-14 10:24:27 -07:00
_config_save ( ui ) ;
2019-09-05 14:33:38 -07:00
_process_list_update ( ui ) ;
2020-04-16 06:50:53 -07:00
elm_scroller_page_bring_in ( ui - > scroller , 0 , 0 ) ;
2018-06-09 03:30:07 -07:00
}
2018-10-12 05:10:37 -07:00
static void
_btn_state_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2018-06-10 06:09:44 -07:00
{
2018-10-12 05:10:37 -07:00
Ui * ui = data ;
2018-06-10 06:09:44 -07:00
2018-10-12 05:10:37 -07:00
if ( ui - > sort_type = = SORT_BY_STATE )
ui - > sort_reverse = ! ui - > sort_reverse ;
2018-06-10 06:09:44 -07:00
2018-10-12 05:10:37 -07:00
_btn_icon_state_set ( ui - > btn_state , ui - > sort_reverse ) ;
2018-06-10 06:09:44 -07:00
2018-10-12 05:10:37 -07:00
ui - > sort_type = SORT_BY_STATE ;
2018-06-10 06:09:44 -07:00
2020-04-14 10:24:27 -07:00
_config_save ( ui ) ;
2019-09-05 14:33:38 -07:00
_process_list_update ( ui ) ;
2020-04-16 06:50:53 -07:00
elm_scroller_page_bring_in ( ui - > scroller , 0 , 0 ) ;
2018-06-10 06:09:44 -07:00
}
2018-10-12 05:10:37 -07:00
static void
_btn_quit_clicked_cb ( void * data EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2018-06-10 06:09:44 -07:00
{
2020-03-22 06:48:59 -07:00
exit ( 0 ) ;
2018-06-10 06:09:44 -07:00
}
static void
2018-10-12 05:10:37 -07:00
_list_item_del_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2018-06-10 06:09:44 -07:00
{
2018-10-12 05:10:37 -07:00
pid_t * pid = data ;
free ( pid ) ;
2018-06-10 06:09:44 -07:00
}
static void
2018-10-12 05:10:37 -07:00
_process_panel_pids_update ( Ui * ui )
2018-06-10 06:09:44 -07:00
{
2018-10-12 05:10:37 -07:00
Proc_Stats * proc ;
Elm_Widget_Item * item ;
Eina_List * list ;
pid_t * pid ;
2018-06-10 06:09:44 -07:00
2018-10-12 05:10:37 -07:00
if ( ! ui - > panel_visible )
2018-06-10 06:09:44 -07:00
return ;
2020-02-15 18:03:32 -08:00
elm_list_clear ( ui - > list_pid ) ;
2018-10-12 05:10:37 -07:00
list = proc_info_all_get ( ) ;
list = eina_list_sort ( list , eina_list_count ( list ) , _sort_by_pid ) ;
2018-06-10 06:09:44 -07:00
2018-10-12 05:10:37 -07:00
EINA_LIST_FREE ( list , proc )
2018-06-10 06:09:44 -07:00
{
2018-10-12 05:10:37 -07:00
pid = malloc ( sizeof ( pid_t ) ) ;
* pid = proc - > pid ;
2018-06-10 06:09:44 -07:00
2019-09-05 14:33:38 -07:00
item = elm_list_item_append ( ui - > list_pid , eina_slstr_printf ( " %d " , proc - > pid ) , NULL , NULL , NULL , pid ) ;
2018-10-12 05:10:37 -07:00
elm_object_item_del_cb_set ( item , _list_item_del_cb ) ;
free ( proc ) ;
2018-06-10 06:09:44 -07:00
}
2018-10-12 05:10:37 -07:00
elm_list_go ( ui - > list_pid ) ;
if ( list )
eina_list_free ( list ) ;
2018-06-11 03:12:02 -07:00
}
2018-10-12 05:10:37 -07:00
static Eina_Bool
_process_panel_update ( void * data )
2018-10-02 06:56:25 -07:00
{
2018-10-12 05:10:37 -07:00
Ui * ui ;
const Eina_List * l , * list ;
Elm_Widget_Item * it ;
struct passwd * pwd_entry ;
Proc_Stats * proc ;
double cpu_usage = 0.0 ;
ui = data ;
2018-10-17 02:20:54 -07:00
if ( ui - > shutting_down )
return ECORE_CALLBACK_CANCEL ;
2018-10-12 05:10:37 -07:00
proc = proc_info_by_pid ( ui - > selected_pid ) ;
if ( ! proc )
2018-10-02 06:56:25 -07:00
{
2018-10-12 05:10:37 -07:00
_process_panel_pids_update ( ui ) ;
return ECORE_CALLBACK_CANCEL ;
2018-10-02 06:56:25 -07:00
}
2018-10-12 05:10:37 -07:00
list = elm_list_items_get ( ui - > list_pid ) ;
EINA_LIST_FOREACH ( list , l , it )
2018-10-02 06:56:25 -07:00
{
2018-10-12 05:10:37 -07:00
pid_t * pid = elm_object_item_data_get ( it ) ;
if ( pid & & * pid = = ui - > selected_pid )
{
elm_list_item_selected_set ( it , EINA_TRUE ) ;
elm_list_item_bring_in ( it ) ;
break ;
}
2018-10-02 06:56:25 -07:00
}
2018-10-12 05:10:37 -07:00
elm_object_text_set ( ui - > entry_pid_cmd , proc - > command ) ;
pwd_entry = getpwuid ( proc - > uid ) ;
if ( pwd_entry )
elm_object_text_set ( ui - > entry_pid_user , pwd_entry - > pw_name ) ;
elm_object_text_set ( ui - > entry_pid_pid , eina_slstr_printf ( " %d " , proc - > pid ) ) ;
elm_object_text_set ( ui - > entry_pid_uid , eina_slstr_printf ( " %d " , proc - > uid ) ) ;
elm_object_text_set ( ui - > entry_pid_cpu , eina_slstr_printf ( " %d " , proc - > cpu_id ) ) ;
elm_object_text_set ( ui - > entry_pid_threads , eina_slstr_printf ( " %d " , proc - > numthreads ) ) ;
elm_object_text_set ( ui - > entry_pid_size , eina_slstr_printf ( " %lld bytes " , proc - > mem_size ) ) ;
elm_object_text_set ( ui - > entry_pid_rss , eina_slstr_printf ( " %lld bytes " , proc - > mem_rss ) ) ;
elm_object_text_set ( ui - > entry_pid_nice , eina_slstr_printf ( " %d " , proc - > nice ) ) ;
elm_object_text_set ( ui - > entry_pid_pri , eina_slstr_printf ( " %d " , proc - > priority ) ) ;
elm_object_text_set ( ui - > entry_pid_state , proc - > state ) ;
if ( ui - > pid_cpu_time & & proc - > cpu_time > = ui - > pid_cpu_time )
2020-02-15 18:03:32 -08:00
cpu_usage = ( double ) ( proc - > cpu_time - ui - > pid_cpu_time ) / ui - > poll_delay ;
2018-10-02 06:56:25 -07:00
2018-10-12 05:10:37 -07:00
elm_object_text_set ( ui - > entry_pid_cpu_usage , eina_slstr_printf ( " %.1f%% " , cpu_usage ) ) ;
ui - > pid_cpu_time = proc - > cpu_time ;
free ( proc ) ;
return ECORE_CALLBACK_RENEW ;
2018-10-02 06:56:25 -07:00
}
2018-06-11 03:12:02 -07:00
static void
2018-10-12 05:10:37 -07:00
_process_panel_list_selected_cb ( void * data , Evas_Object * obj , void * event_info EINA_UNUSED )
2018-06-11 03:12:02 -07:00
{
2018-10-12 05:10:37 -07:00
Elm_Object_Item * it ;
Ui * ui ;
const char * text ;
2018-06-11 03:12:02 -07:00
2018-10-12 05:10:37 -07:00
ui = data ;
2018-06-11 03:12:02 -07:00
2018-10-12 05:10:37 -07:00
it = elm_list_selected_item_get ( obj ) ;
text = elm_object_item_text_get ( it ) ;
2018-10-02 06:56:25 -07:00
2018-10-12 05:10:37 -07:00
if ( ui - > timer_pid )
{
ecore_timer_del ( ui - > timer_pid ) ;
ui - > timer_pid = NULL ;
}
2018-06-11 03:12:02 -07:00
2018-10-12 05:10:37 -07:00
ui - > selected_pid = atoi ( text ) ;
ui - > pid_cpu_time = 0 ;
2018-06-11 03:12:02 -07:00
2018-10-12 05:10:37 -07:00
_process_panel_update ( ui ) ;
2018-10-02 07:38:06 -07:00
2018-10-12 05:10:37 -07:00
ui - > timer_pid = ecore_timer_add ( ui - > poll_delay , _process_panel_update , ui ) ;
2018-06-11 03:12:02 -07:00
2018-10-12 05:10:37 -07:00
elm_scroller_page_bring_in ( ui - > scroller , 0 , 0 ) ;
}
2018-10-02 07:38:06 -07:00
2018-10-12 05:10:37 -07:00
static void
_panel_scrolled_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
Ui * ui = data ;
2018-06-11 03:12:02 -07:00
2018-10-12 05:10:37 -07:00
ui - > panel_visible = ! ui - > panel_visible ;
}
2018-10-02 07:38:06 -07:00
2020-02-15 09:12:02 -08:00
static void
_panel_toggled_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
Ui * ui = data ;
evas_object_show ( ui - > panel ) ;
}
2018-10-12 05:10:37 -07:00
static void
_btn_start_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
Ui * ui = data ;
2018-06-11 03:12:02 -07:00
2018-10-12 05:10:37 -07:00
if ( ui - > selected_pid = = - 1 )
return ;
kill ( ui - > selected_pid , SIGCONT ) ;
2018-06-11 03:12:02 -07:00
}
static void
2018-10-12 05:10:37 -07:00
_btn_stop_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2018-06-11 03:12:02 -07:00
{
2018-10-12 05:10:37 -07:00
Ui * ui = data ;
2018-06-11 03:12:02 -07:00
2018-10-12 05:10:37 -07:00
if ( ui - > selected_pid = = - 1 )
2018-06-11 03:12:02 -07:00
return ;
2018-10-12 05:10:37 -07:00
kill ( ui - > selected_pid , SIGSTOP ) ;
}
2018-06-11 03:12:02 -07:00
2018-10-12 05:10:37 -07:00
static void
_btn_kill_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
Ui * ui = data ;
2018-06-11 03:12:02 -07:00
2018-10-12 05:10:37 -07:00
if ( ui - > selected_pid = = - 1 )
return ;
2018-06-11 03:12:02 -07:00
2018-10-12 05:10:37 -07:00
kill ( ui - > selected_pid , SIGKILL ) ;
}
2018-06-10 09:06:34 -07:00
2018-10-12 05:10:37 -07:00
static void
2020-04-14 10:24:27 -07:00
_item_pid_clicked_cb ( void * data , Evas * e EINA_UNUSED , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2018-10-12 05:10:37 -07:00
{
Ui * ui ;
2020-04-14 10:24:27 -07:00
Evas_Event_Mouse_Up * ev ;
Elm_Object_Item * it ;
Proc_Stats * proc ;
2018-06-10 06:09:44 -07:00
2018-10-12 05:10:37 -07:00
ui = data ;
2018-06-10 06:09:44 -07:00
2020-04-14 10:24:27 -07:00
ev = event_info ;
it = elm_genlist_at_xy_item_get ( obj , ev - > output . x , ev - > output . y , NULL ) ;
proc = elm_object_item_data_get ( it ) ;
if ( ! proc ) return ;
2018-06-10 06:09:44 -07:00
2020-04-14 10:24:27 -07:00
ui - > selected_pid = proc - > pid ;
2018-10-12 05:10:37 -07:00
_process_panel_update ( ui ) ;
2018-06-10 06:09:44 -07:00
2018-10-12 05:10:37 -07:00
if ( ui - > timer_pid )
{
ecore_timer_del ( ui - > timer_pid ) ;
ui - > timer_pid = NULL ;
}
2018-06-10 06:09:44 -07:00
2018-10-12 05:10:37 -07:00
ui - > timer_pid = ecore_timer_add ( ui - > poll_delay , _process_panel_update , ui ) ;
elm_panel_toggle ( ui - > panel ) ;
ui - > panel_visible = EINA_TRUE ;
2018-06-10 06:09:44 -07:00
}
2018-06-09 03:30:07 -07:00
static void
2019-09-05 14:33:38 -07:00
_ui_tab_system_add ( Ui * ui )
2018-06-04 03:11:21 -07:00
{
2018-06-09 11:55:04 -07:00
Evas_Object * parent , * box , * hbox , * frame , * table ;
2020-04-16 06:50:53 -07:00
Evas_Object * progress , * button , * plist ;
2018-06-04 03:11:21 -07:00
2018-06-09 11:55:04 -07:00
parent = ui - > content ;
2018-06-09 03:30:07 -07:00
ui - > system_activity = box = elm_box_add ( parent ) ;
2018-06-04 03:11:21 -07:00
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( box ) ;
2018-06-09 03:30:07 -07:00
elm_table_pack ( ui - > content , ui - > system_activity , 0 , 1 , 1 , 1 ) ;
2018-06-04 03:11:21 -07:00
hbox = elm_box_add ( box ) ;
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , 0 ) ;
elm_box_horizontal_set ( hbox , EINA_TRUE ) ;
evas_object_show ( hbox ) ;
2020-02-15 18:03:32 -08:00
elm_box_pack_end ( box , hbox ) ;
2018-06-04 03:11:21 -07:00
frame = elm_frame_add ( hbox ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_text_set ( frame , " System CPU " ) ;
evas_object_show ( frame ) ;
2020-02-15 18:03:32 -08:00
elm_box_pack_end ( hbox , frame ) ;
2018-06-04 03:11:21 -07:00
ui - > progress_cpu = progress = elm_progressbar_add ( parent ) ;
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_progressbar_span_size_set ( progress , 1.0 ) ;
elm_progressbar_unit_format_set ( progress , " %1.2f%% " ) ;
elm_object_content_set ( frame , progress ) ;
evas_object_show ( progress ) ;
frame = elm_frame_add ( hbox ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_text_set ( frame , " System Memory " ) ;
evas_object_show ( frame ) ;
2020-02-15 18:03:32 -08:00
elm_box_pack_end ( hbox , frame ) ;
2018-06-04 03:11:21 -07:00
ui - > progress_mem = progress = elm_progressbar_add ( parent ) ;
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_progressbar_span_size_set ( progress , 1.0 ) ;
evas_object_show ( progress ) ;
2020-02-15 18:03:32 -08:00
elm_object_content_set ( frame , progress ) ;
2018-06-04 03:11:21 -07:00
table = elm_table_add ( parent ) ;
evas_object_size_hint_weight_set ( table , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( table , EVAS_HINT_FILL , 0 ) ;
evas_object_show ( table ) ;
ui - > btn_pid = button = elm_button_add ( parent ) ;
2020-04-14 10:24:27 -07:00
if ( ui - > sort_type = = SORT_BY_PID )
{
_btn_icon_state_set ( button , ui - > sort_reverse ) ;
elm_object_focus_set ( button , EINA_TRUE ) ;
}
else
_btn_icon_state_set ( button , EINA_FALSE ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2018-06-04 03:11:21 -07:00
elm_object_text_set ( button , " PID " ) ;
evas_object_show ( button ) ;
elm_table_pack ( table , button , 0 , 0 , 1 , 1 ) ;
ui - > btn_uid = button = elm_button_add ( parent ) ;
2020-04-14 10:24:27 -07:00
if ( ui - > sort_type = = SORT_BY_UID )
{
_btn_icon_state_set ( button , ui - > sort_reverse ) ;
elm_object_focus_set ( button , EINA_TRUE ) ;
}
else
_btn_icon_state_set ( button , EINA_FALSE ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2018-06-04 03:11:21 -07:00
elm_object_text_set ( button , " UID " ) ;
evas_object_show ( button ) ;
elm_table_pack ( table , button , 1 , 0 , 1 , 1 ) ;
ui - > btn_size = button = elm_button_add ( parent ) ;
2020-04-14 10:24:27 -07:00
if ( ui - > sort_type = = SORT_BY_SIZE )
{
_btn_icon_state_set ( button , ui - > sort_reverse ) ;
elm_object_focus_set ( button , EINA_TRUE ) ;
}
else
_btn_icon_state_set ( button , EINA_FALSE ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2018-06-04 03:11:21 -07:00
elm_object_text_set ( button , " Size " ) ;
evas_object_show ( button ) ;
elm_table_pack ( table , button , 2 , 0 , 1 , 1 ) ;
ui - > btn_rss = button = elm_button_add ( parent ) ;
2020-04-14 10:24:27 -07:00
if ( ui - > sort_type = = SORT_BY_RSS )
{
_btn_icon_state_set ( button , ui - > sort_reverse ) ;
elm_object_focus_set ( button , EINA_TRUE ) ;
}
else
_btn_icon_state_set ( button , EINA_FALSE ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2018-06-04 03:11:21 -07:00
elm_object_text_set ( button , " Res " ) ;
evas_object_show ( button ) ;
elm_table_pack ( table , button , 3 , 0 , 1 , 1 ) ;
ui - > btn_cmd = button = elm_button_add ( parent ) ;
2020-04-14 10:24:27 -07:00
if ( ui - > sort_type = = SORT_BY_CMD )
{
_btn_icon_state_set ( button , ui - > sort_reverse ) ;
elm_object_focus_set ( button , EINA_TRUE ) ;
}
else
_btn_icon_state_set ( button , EINA_FALSE ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2018-06-04 03:11:21 -07:00
elm_object_text_set ( button , " Command " ) ;
evas_object_show ( button ) ;
elm_table_pack ( table , button , 4 , 0 , 1 , 1 ) ;
ui - > btn_state = button = elm_button_add ( parent ) ;
2020-04-14 10:24:27 -07:00
if ( ui - > sort_type = = SORT_BY_STATE )
{
_btn_icon_state_set ( button , ui - > sort_reverse ) ;
elm_object_focus_set ( button , EINA_TRUE ) ;
}
else
_btn_icon_state_set ( button , EINA_FALSE ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2018-06-04 03:11:21 -07:00
elm_object_text_set ( button , " State " ) ;
evas_object_show ( button ) ;
elm_table_pack ( table , button , 5 , 0 , 1 , 1 ) ;
ui - > btn_cpu_usage = button = elm_button_add ( parent ) ;
2020-04-14 10:24:27 -07:00
if ( ui - > sort_type = = SORT_BY_CPU_USAGE )
{
_btn_icon_state_set ( button , ui - > sort_reverse ) ;
elm_object_focus_set ( button , EINA_TRUE ) ;
}
else
_btn_icon_state_set ( button , EINA_FALSE ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2018-06-04 03:11:21 -07:00
elm_object_text_set ( button , " CPU % " ) ;
evas_object_show ( button ) ;
elm_table_pack ( table , button , 6 , 0 , 1 , 1 ) ;
2020-04-16 06:50:53 -07:00
ui - > scroller = ui - > genlist_procs = plist = elm_genlist_add ( parent ) ;
2020-04-14 10:24:27 -07:00
elm_object_focus_allow_set ( plist , EINA_FALSE ) ;
elm_genlist_homogeneous_set ( plist , EINA_TRUE ) ;
elm_genlist_select_mode_set ( plist , ELM_OBJECT_SELECT_MODE_NONE ) ;
evas_object_size_hint_weight_set ( plist , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( plist , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( plist ) ;
2020-04-16 06:50:53 -07:00
elm_box_pack_end ( box , table ) ;
elm_box_pack_end ( box , plist ) ;
2018-06-04 03:11:21 -07:00
evas_object_smart_callback_add ( ui - > btn_pid , " clicked " , _btn_pid_clicked_cb , ui ) ;
evas_object_smart_callback_add ( ui - > btn_uid , " clicked " , _btn_uid_clicked_cb , ui ) ;
evas_object_smart_callback_add ( ui - > btn_size , " clicked " , _btn_size_clicked_cb , ui ) ;
evas_object_smart_callback_add ( ui - > btn_rss , " clicked " , _btn_rss_clicked_cb , ui ) ;
evas_object_smart_callback_add ( ui - > btn_cmd , " clicked " , _btn_cmd_clicked_cb , ui ) ;
evas_object_smart_callback_add ( ui - > btn_state , " clicked " , _btn_state_clicked_cb , ui ) ;
evas_object_smart_callback_add ( ui - > btn_cpu_usage , " clicked " , _btn_cpu_usage_clicked_cb , ui ) ;
2020-04-14 10:24:27 -07:00
evas_object_event_callback_add ( ui - > genlist_procs , EVAS_CALLBACK_MOUSE_UP , _item_pid_clicked_cb , ui ) ;
2018-06-04 03:11:21 -07:00
}
static void
2018-06-09 11:55:04 -07:00
_ui_process_panel_add ( Ui * ui )
2018-06-04 03:11:21 -07:00
{
2019-09-05 15:01:00 -07:00
Evas_Object * parent , * panel , * hbox , * frame , * scroller , * table ;
2019-09-01 07:18:30 -07:00
Evas_Object * label , * list , * entry , * button , * border ;
2018-06-04 03:11:21 -07:00
2018-06-09 11:55:04 -07:00
parent = ui - > content ;
2018-06-04 03:11:21 -07:00
ui - > panel = panel = elm_panel_add ( parent ) ;
evas_object_size_hint_weight_set ( panel , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( panel , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_panel_orient_set ( panel , ELM_PANEL_ORIENT_BOTTOM ) ;
elm_panel_toggle ( panel ) ;
2018-06-09 03:30:07 -07:00
elm_object_content_set ( ui - > win , panel ) ;
2020-02-15 09:12:02 -08:00
evas_object_hide ( panel ) ;
2018-06-04 03:11:21 -07:00
evas_object_smart_callback_add ( ui - > panel , " scroll " , _panel_scrolled_cb , ui ) ;
2020-02-15 09:12:02 -08:00
evas_object_smart_callback_add ( ui - > panel , " toggled " , _panel_toggled_cb , ui ) ;
2018-06-04 03:11:21 -07:00
hbox = elm_box_add ( parent ) ;
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_horizontal_set ( hbox , EINA_TRUE ) ;
elm_object_content_set ( panel , hbox ) ;
evas_object_show ( hbox ) ;
frame = elm_frame_add ( hbox ) ;
evas_object_size_hint_weight_set ( frame , 0.2 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_text_set ( frame , " PID " ) ;
elm_box_pack_end ( hbox , frame ) ;
evas_object_show ( frame ) ;
ui - > list_pid = list = elm_list_add ( frame ) ;
evas_object_size_hint_weight_set ( list , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_align_set ( list , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2019-06-08 15:39:15 -07:00
elm_scroller_gravity_set ( list , 0.5 , 0.0 ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( list ) ;
evas_object_smart_callback_add ( ui - > list_pid , " selected " , _process_panel_list_selected_cb , ui ) ;
2020-02-15 18:03:32 -08:00
elm_object_content_set ( frame , list ) ;
2018-06-04 03:11:21 -07:00
frame = elm_frame_add ( hbox ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_text_set ( frame , " Process Statistics " ) ;
elm_box_pack_end ( hbox , frame ) ;
evas_object_show ( frame ) ;
table = elm_table_add ( frame ) ;
evas_object_size_hint_weight_set ( table , 0.5 , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( table , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( table ) ;
scroller = elm_scroller_add ( parent ) ;
evas_object_size_hint_weight_set ( scroller , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( scroller , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_scroller_policy_set ( scroller , ELM_SCROLLER_POLICY_OFF , ELM_SCROLLER_POLICY_ON ) ;
evas_object_show ( scroller ) ;
elm_object_content_set ( scroller , table ) ;
elm_object_content_set ( frame , scroller ) ;
elm_box_pack_end ( hbox , frame ) ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , " Name: " ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 0 , 1 , 1 ) ;
ui - > entry_pid_cmd = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 0 , 1 , 1 ) ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , " PID: " ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 1 , 1 , 1 ) ;
ui - > entry_pid_pid = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 1 , 1 , 1 ) ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , " Username: " ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 2 , 1 , 1 ) ;
ui - > entry_pid_user = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 2 , 1 , 1 ) ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , " UID: " ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 3 , 1 , 1 ) ;
ui - > entry_pid_uid = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 3 , 1 , 1 ) ;
label = elm_label_add ( parent ) ;
# if defined(__MacOS__)
elm_object_text_set ( label , " WQ #: " ) ;
# else
elm_object_text_set ( label , " CPU #: " ) ;
# endif
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 4 , 1 , 1 ) ;
ui - > entry_pid_cpu = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 4 , 1 , 1 ) ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , " Threads: " ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 5 , 1 , 1 ) ;
ui - > entry_pid_threads = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 5 , 1 , 1 ) ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , " Total memory: " ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 6 , 1 , 1 ) ;
ui - > entry_pid_size = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 6 , 1 , 1 ) ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , " Reserved memory: " ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 7 , 1 , 1 ) ;
ui - > entry_pid_rss = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 7 , 1 , 1 ) ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , " Nice: " ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 8 , 1 , 1 ) ;
ui - > entry_pid_nice = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 8 , 1 , 1 ) ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , " Priority: " ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 9 , 1 , 1 ) ;
ui - > entry_pid_pri = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 9 , 1 , 1 ) ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , " State: " ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 10 , 1 , 1 ) ;
ui - > entry_pid_state = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 10 , 1 , 1 ) ;
label = elm_label_add ( parent ) ;
elm_object_text_set ( label , " CPU %: " ) ;
evas_object_show ( label ) ;
elm_table_pack ( table , label , 0 , 11 , 1 , 1 ) ;
ui - > entry_pid_cpu_usage = entry = elm_entry_add ( parent ) ;
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-02-15 18:03:32 -08:00
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_FALSE ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( entry ) ;
2020-02-16 07:57:26 -08:00
elm_entry_line_wrap_set ( entry , ELM_WRAP_NONE ) ;
2018-06-04 03:11:21 -07:00
elm_table_pack ( table , entry , 1 , 11 , 1 , 1 ) ;
hbox = elm_box_add ( parent ) ;
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_horizontal_set ( hbox , EINA_TRUE ) ;
evas_object_show ( hbox ) ;
elm_table_pack ( table , hbox , 1 , 12 , 1 , 1 ) ;
2019-09-01 07:18:30 -07:00
border = elm_frame_add ( parent ) ;
evas_object_size_hint_weight_set ( border , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( border , EVAS_HINT_FILL , 0.5 ) ;
elm_object_style_set ( border , " pad_small " ) ;
evas_object_show ( border ) ;
2018-06-04 03:11:21 -07:00
button = elm_button_add ( parent ) ;
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , 0.5 ) ;
2019-09-01 07:18:30 -07:00
elm_object_text_set ( button , " Stop " ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( button ) ;
2020-02-15 18:03:32 -08:00
evas_object_smart_callback_add ( button , " clicked " , _btn_stop_clicked_cb , ui ) ;
2019-09-01 07:18:30 -07:00
elm_object_content_set ( border , button ) ;
elm_box_pack_end ( hbox , border ) ;
2018-06-04 03:11:21 -07:00
2019-09-01 07:18:30 -07:00
border = elm_frame_add ( parent ) ;
evas_object_size_hint_weight_set ( border , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( border , EVAS_HINT_FILL , 0.5 ) ;
elm_object_style_set ( border , " pad_small " ) ;
evas_object_show ( border ) ;
2018-06-04 03:11:21 -07:00
button = elm_button_add ( parent ) ;
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , 0.5 ) ;
2019-09-01 07:18:30 -07:00
elm_object_text_set ( button , " Start " ) ;
elm_object_content_set ( border , button ) ;
2019-08-30 12:35:46 -07:00
evas_object_show ( button ) ;
2019-09-01 07:18:30 -07:00
elm_box_pack_end ( hbox , border ) ;
evas_object_smart_callback_add ( button , " clicked " , _btn_start_clicked_cb , ui ) ;
border = elm_frame_add ( parent ) ;
evas_object_size_hint_weight_set ( border , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( border , EVAS_HINT_FILL , 0.5 ) ;
elm_object_style_set ( border , " pad_small " ) ;
evas_object_show ( border ) ;
2018-06-04 03:11:21 -07:00
button = elm_button_add ( parent ) ;
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , 0.5 ) ;
2019-09-01 07:18:30 -07:00
elm_object_text_set ( button , " Kill " ) ;
elm_box_pack_end ( hbox , border ) ;
2018-06-04 03:11:21 -07:00
evas_object_show ( button ) ;
2019-09-01 07:18:30 -07:00
elm_object_content_set ( border , button ) ;
2018-06-04 03:11:21 -07:00
evas_object_smart_callback_add ( button , " clicked " , _btn_kill_clicked_cb , ui ) ;
}
2018-06-09 03:30:07 -07:00
static void
2019-09-05 14:33:38 -07:00
_ui_tab_disk_add ( Ui * ui )
2018-06-09 03:30:07 -07:00
{
2018-06-09 11:55:04 -07:00
Evas_Object * parent , * box , * hbox , * frame , * scroller ;
parent = ui - > content ;
2018-06-09 03:30:07 -07:00
ui - > disk_view = box = elm_box_add ( parent ) ;
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_table_pack ( ui - > content , ui - > disk_view , 0 , 1 , 1 , 1 ) ;
evas_object_hide ( box ) ;
ui - > disk_activity = hbox = elm_box_add ( box ) ;
2020-04-16 08:09:05 -07:00
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , 0.5 ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , 0.5 ) ;
2018-06-09 03:30:07 -07:00
evas_object_show ( hbox ) ;
frame = elm_frame_add ( box ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-04-14 10:24:27 -07:00
elm_object_style_set ( frame , " pad_small " ) ;
2018-06-09 03:30:07 -07:00
evas_object_show ( frame ) ;
scroller = elm_scroller_add ( parent ) ;
evas_object_size_hint_weight_set ( scroller , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( scroller , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_scroller_policy_set ( scroller , ELM_SCROLLER_POLICY_OFF , ELM_SCROLLER_POLICY_ON ) ;
evas_object_show ( scroller ) ;
elm_object_content_set ( scroller , hbox ) ;
elm_object_content_set ( frame , scroller ) ;
elm_box_pack_end ( box , frame ) ;
}
2018-06-10 06:09:44 -07:00
static void
2019-09-05 14:33:38 -07:00
_ui_tab_misc_add ( Ui * ui )
2018-06-10 06:09:44 -07:00
{
Evas_Object * parent , * box , * hbox , * frame , * scroller ;
parent = ui - > content ;
2019-06-08 15:39:15 -07:00
ui - > misc_view = box = elm_box_add ( parent ) ;
2018-06-10 06:09:44 -07:00
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2019-06-08 15:39:15 -07:00
elm_table_pack ( ui - > content , ui - > misc_view , 0 , 1 , 1 , 1 ) ;
2018-06-10 06:09:44 -07:00
evas_object_hide ( box ) ;
2019-06-08 15:39:15 -07:00
ui - > misc_activity = hbox = elm_box_add ( box ) ;
2018-06-10 06:09:44 -07:00
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( hbox ) ;
frame = elm_frame_add ( box ) ;
2020-04-14 10:24:27 -07:00
elm_object_style_set ( frame , " pad_small " ) ;
2018-06-10 06:09:44 -07:00
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( frame ) ;
scroller = elm_scroller_add ( parent ) ;
evas_object_size_hint_weight_set ( scroller , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( scroller , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_scroller_policy_set ( scroller , ELM_SCROLLER_POLICY_OFF , ELM_SCROLLER_POLICY_ON ) ;
evas_object_show ( scroller ) ;
elm_object_content_set ( scroller , hbox ) ;
elm_object_content_set ( frame , scroller ) ;
elm_box_pack_end ( box , frame ) ;
}
2018-06-11 03:12:02 -07:00
static void
2019-09-05 14:33:38 -07:00
_ui_tab_cpu_add ( Ui * ui )
2018-06-11 03:12:02 -07:00
{
Evas_Object * parent , * box , * hbox , * frame , * scroller ;
parent = ui - > content ;
ui - > cpu_view = box = elm_box_add ( parent ) ;
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_table_pack ( ui - > content , ui - > cpu_view , 0 , 1 , 1 , 1 ) ;
evas_object_hide ( box ) ;
ui - > cpu_activity = hbox = elm_box_add ( box ) ;
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( hbox ) ;
frame = elm_frame_add ( box ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-04-15 06:30:56 -07:00
elm_object_style_set ( frame , " pad_small " ) ;
2018-06-11 03:12:02 -07:00
evas_object_show ( frame ) ;
scroller = elm_scroller_add ( parent ) ;
evas_object_size_hint_weight_set ( scroller , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( scroller , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_scroller_policy_set ( scroller , ELM_SCROLLER_POLICY_OFF , ELM_SCROLLER_POLICY_ON ) ;
evas_object_show ( scroller ) ;
elm_object_content_set ( scroller , hbox ) ;
elm_object_content_set ( frame , scroller ) ;
elm_box_pack_end ( box , frame ) ;
}
2020-04-14 10:24:27 -07:00
static Evas_Object *
2020-04-15 10:15:22 -07:00
_label_mem ( Evas_Object * parent , const char * text )
2020-04-14 10:24:27 -07:00
{
Evas_Object * label = elm_label_add ( parent ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2020-04-16 08:09:05 -07:00
evas_object_size_hint_align_set ( label , 0.01 , EVAS_HINT_FILL ) ;
2020-04-14 10:24:27 -07:00
elm_object_text_set ( label , eina_slstr_printf ( " <bigger>%s</bigger> " , text ) ) ;
evas_object_show ( label ) ;
return label ;
}
2018-06-11 03:12:02 -07:00
static void
2019-09-05 14:33:38 -07:00
_ui_tab_memory_add ( Ui * ui )
2018-06-11 03:12:02 -07:00
{
2018-10-24 03:49:27 -07:00
Evas_Object * parent , * box , * hbox , * frame , * progress , * scroller ;
2020-04-14 10:24:27 -07:00
Evas_Object * label ;
2018-06-11 03:12:02 -07:00
parent = ui - > content ;
ui - > mem_view = box = elm_box_add ( parent ) ;
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_table_pack ( ui - > content , ui - > mem_view , 0 , 1 , 1 , 1 ) ;
evas_object_hide ( box ) ;
ui - > mem_activity = hbox = elm_box_add ( box ) ;
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_show ( hbox ) ;
frame = elm_frame_add ( box ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2020-04-14 10:24:27 -07:00
elm_object_style_set ( frame , " pad_small " ) ;
2018-06-11 03:12:02 -07:00
evas_object_show ( frame ) ;
scroller = elm_scroller_add ( parent ) ;
evas_object_size_hint_weight_set ( scroller , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( scroller , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_scroller_policy_set ( scroller , ELM_SCROLLER_POLICY_OFF , ELM_SCROLLER_POLICY_ON ) ;
evas_object_show ( scroller ) ;
elm_object_content_set ( scroller , hbox ) ;
elm_object_content_set ( frame , scroller ) ;
elm_box_pack_end ( box , frame ) ;
2018-10-24 03:49:27 -07:00
box = elm_box_add ( ui - > content ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( box ) ;
frame = elm_frame_add ( box ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , 0 ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2020-04-14 10:24:27 -07:00
evas_object_show ( frame ) ;
2020-04-16 08:49:44 -07:00
elm_object_style_set ( frame , " pad_large " ) ;
2020-04-14 10:24:27 -07:00
elm_box_pack_end ( box , frame ) ;
label = elm_label_add ( parent ) ;
evas_object_size_hint_weight_set ( label , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( label , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_text_set ( label , " <subtitle>Memory</subtitle> " ) ;
evas_object_show ( label ) ;
elm_box_pack_end ( box , label ) ;
frame = elm_frame_add ( box ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , 0 ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_object_style_set ( frame , " pad_small " ) ;
evas_object_show ( frame ) ;
elm_box_pack_end ( box , frame ) ;
frame = elm_frame_add ( box ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , 0 ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_object_style_set ( frame , " pad_small " ) ;
evas_object_show ( frame ) ;
elm_box_pack_end ( box , frame ) ;
frame = elm_frame_add ( box ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , 0 ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_object_style_set ( frame , " pad_small " ) ;
2018-10-24 03:49:27 -07:00
evas_object_show ( frame ) ;
2020-02-15 18:03:32 -08:00
2020-04-16 08:49:44 -07:00
label = _label_mem ( box , " Used " ) ;
elm_box_pack_end ( box , label ) ;
2018-10-24 03:49:27 -07:00
ui - > progress_mem_used = progress = elm_progressbar_add ( frame ) ;
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_progressbar_span_size_set ( progress , 1.0 ) ;
evas_object_show ( progress ) ;
elm_object_content_set ( frame , progress ) ;
elm_box_pack_end ( box , frame ) ;
frame = elm_frame_add ( box ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , 0 ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2020-04-14 10:24:27 -07:00
elm_object_style_set ( frame , " pad_small " ) ;
2018-10-24 03:49:27 -07:00
evas_object_show ( frame ) ;
2020-02-15 18:03:32 -08:00
2020-04-16 08:49:44 -07:00
label = _label_mem ( box , " Cached " ) ;
elm_box_pack_end ( box , label ) ;
2018-10-24 03:49:27 -07:00
ui - > progress_mem_cached = progress = elm_progressbar_add ( frame ) ;
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_progressbar_span_size_set ( progress , 1.0 ) ;
evas_object_show ( progress ) ;
elm_object_content_set ( frame , progress ) ;
elm_box_pack_end ( box , frame ) ;
frame = elm_frame_add ( box ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , 0 ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2020-04-14 10:24:27 -07:00
elm_object_style_set ( frame , " pad_small " ) ;
2018-10-24 03:49:27 -07:00
evas_object_show ( frame ) ;
2020-02-15 18:03:32 -08:00
2020-04-16 08:49:44 -07:00
label = _label_mem ( box , " Buffered " ) ;
elm_box_pack_end ( box , label ) ;
2018-10-24 03:49:27 -07:00
ui - > progress_mem_buffered = progress = elm_progressbar_add ( frame ) ;
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
elm_progressbar_span_size_set ( progress , 1.0 ) ;
evas_object_show ( progress ) ;
elm_object_content_set ( frame , progress ) ;
elm_box_pack_end ( box , frame ) ;
frame = elm_frame_add ( box ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , 0 ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2020-04-14 10:24:27 -07:00
elm_object_style_set ( frame , " pad_small " ) ;
2018-10-24 03:49:27 -07:00
evas_object_show ( frame ) ;
2020-02-15 18:03:32 -08:00
2020-04-16 08:49:44 -07:00
label = _label_mem ( box , " Shared " ) ;
elm_box_pack_end ( box , label ) ;
2018-10-24 03:49:27 -07:00
ui - > progress_mem_shared = progress = elm_progressbar_add ( frame ) ;
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( progress ) ;
elm_object_content_set ( frame , progress ) ;
elm_box_pack_end ( box , frame ) ;
2019-06-08 15:39:15 -07:00
frame = elm_frame_add ( box ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , 0 ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2020-04-14 10:24:27 -07:00
elm_object_style_set ( frame , " pad_small " ) ;
2019-06-08 15:39:15 -07:00
evas_object_show ( frame ) ;
2020-02-15 18:03:32 -08:00
2020-04-16 08:49:44 -07:00
label = _label_mem ( box , " Swapped " ) ;
elm_box_pack_end ( box , label ) ;
2019-06-08 15:39:15 -07:00
ui - > progress_mem_swap = progress = elm_progressbar_add ( frame ) ;
evas_object_size_hint_align_set ( progress , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
evas_object_size_hint_weight_set ( progress , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_show ( progress ) ;
elm_object_content_set ( frame , progress ) ;
elm_box_pack_end ( box , frame ) ;
2018-10-24 03:49:27 -07:00
elm_box_pack_end ( ui - > mem_activity , box ) ;
2018-06-11 03:12:02 -07:00
}
2019-06-08 15:39:15 -07:00
static void
_tab_state_changed ( Ui * ui , Evas_Object * btn_active )
{
elm_object_disabled_set ( ui - > btn_general , EINA_FALSE ) ;
elm_object_disabled_set ( ui - > btn_cpu , EINA_FALSE ) ;
elm_object_disabled_set ( ui - > btn_mem , EINA_FALSE ) ;
elm_object_disabled_set ( ui - > btn_storage , EINA_FALSE ) ;
elm_object_disabled_set ( ui - > btn_misc , EINA_FALSE ) ;
elm_object_disabled_set ( btn_active , EINA_TRUE ) ;
}
2018-06-11 03:12:02 -07:00
static void
_tab_memory_activity_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
Ui * ui ;
ui = data ;
ui - > mem_visible = EINA_TRUE ;
2019-06-08 15:39:15 -07:00
ui - > misc_visible = EINA_FALSE ;
2018-06-11 03:12:02 -07:00
ui - > disk_visible = EINA_FALSE ;
ui - > cpu_visible = EINA_FALSE ;
2019-06-08 15:39:15 -07:00
_tab_state_changed ( ui , obj ) ;
2018-06-11 03:12:02 -07:00
evas_object_show ( ui - > mem_view ) ;
2020-02-15 09:12:02 -08:00
evas_object_hide ( ui - > entry_search ) ;
2018-06-11 03:12:02 -07:00
evas_object_hide ( ui - > system_activity ) ;
evas_object_hide ( ui - > panel ) ;
evas_object_hide ( ui - > disk_view ) ;
2019-06-08 15:39:15 -07:00
evas_object_hide ( ui - > misc_view ) ;
2018-06-11 03:12:02 -07:00
evas_object_hide ( ui - > cpu_view ) ;
}
2018-06-10 06:09:44 -07:00
2018-06-09 03:30:07 -07:00
static void
_tab_system_activity_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
Ui * ui ;
ui = data ;
2019-06-08 15:39:15 -07:00
ui - > misc_visible = EINA_FALSE ;
2018-06-10 06:09:44 -07:00
ui - > disk_visible = EINA_FALSE ;
2018-06-11 03:12:02 -07:00
ui - > cpu_visible = EINA_FALSE ;
ui - > mem_visible = EINA_FALSE ;
2018-06-10 06:09:44 -07:00
2019-06-08 15:39:15 -07:00
_tab_state_changed ( ui , obj ) ;
2018-06-09 03:30:07 -07:00
evas_object_show ( ui - > system_activity ) ;
2020-02-15 09:12:02 -08:00
evas_object_show ( ui - > entry_search ) ;
evas_object_hide ( ui - > panel ) ;
2018-06-09 03:30:07 -07:00
evas_object_hide ( ui - > disk_view ) ;
2019-06-08 15:39:15 -07:00
evas_object_hide ( ui - > misc_view ) ;
2018-06-11 03:12:02 -07:00
evas_object_hide ( ui - > cpu_view ) ;
evas_object_hide ( ui - > mem_view ) ;
2018-06-09 03:30:07 -07:00
}
static void
_tab_disk_activity_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
Ui * ui ;
ui = data ;
2018-06-10 06:09:44 -07:00
2019-06-08 15:39:15 -07:00
ui - > misc_visible = EINA_FALSE ;
2018-06-10 06:09:44 -07:00
ui - > disk_visible = EINA_TRUE ;
2018-06-11 03:12:02 -07:00
ui - > cpu_visible = EINA_FALSE ;
ui - > mem_visible = EINA_FALSE ;
2018-06-10 06:09:44 -07:00
2019-06-08 15:39:15 -07:00
_tab_state_changed ( ui , obj ) ;
2018-06-09 03:30:07 -07:00
evas_object_show ( ui - > disk_view ) ;
2020-02-15 09:12:02 -08:00
evas_object_hide ( ui - > entry_search ) ;
2018-06-09 03:30:07 -07:00
evas_object_hide ( ui - > system_activity ) ;
2018-06-09 11:55:04 -07:00
evas_object_hide ( ui - > panel ) ;
2019-06-08 15:39:15 -07:00
evas_object_hide ( ui - > misc_view ) ;
2018-06-11 03:12:02 -07:00
evas_object_hide ( ui - > cpu_view ) ;
evas_object_hide ( ui - > mem_view ) ;
2018-06-10 06:09:44 -07:00
}
static void
2019-06-08 15:39:15 -07:00
_tab_misc_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
2018-06-10 06:09:44 -07:00
{
Ui * ui ;
ui = data ;
2019-06-08 15:39:15 -07:00
ui - > misc_visible = EINA_TRUE ;
2018-06-10 06:09:44 -07:00
ui - > disk_visible = EINA_FALSE ;
2018-06-11 03:12:02 -07:00
ui - > cpu_visible = EINA_FALSE ;
ui - > mem_visible = EINA_FALSE ;
2018-06-10 06:09:44 -07:00
2019-06-08 15:39:15 -07:00
_tab_state_changed ( ui , obj ) ;
evas_object_show ( ui - > misc_view ) ;
2020-02-15 09:12:02 -08:00
evas_object_hide ( ui - > entry_search ) ;
2018-06-10 06:09:44 -07:00
evas_object_hide ( ui - > system_activity ) ;
evas_object_hide ( ui - > panel ) ;
evas_object_hide ( ui - > disk_view ) ;
2018-06-11 03:12:02 -07:00
evas_object_hide ( ui - > cpu_view ) ;
evas_object_hide ( ui - > mem_view ) ;
}
static void
_tab_cpu_activity_clicked_cb ( void * data , Evas_Object * obj EINA_UNUSED , void * event_info EINA_UNUSED )
{
Ui * ui ;
ui = data ;
ui - > mem_visible = EINA_FALSE ;
2019-06-08 15:39:15 -07:00
ui - > misc_visible = EINA_FALSE ;
2018-06-11 03:12:02 -07:00
ui - > disk_visible = EINA_FALSE ;
ui - > cpu_visible = EINA_TRUE ;
2019-06-08 15:39:15 -07:00
_tab_state_changed ( ui , obj ) ;
2018-06-11 03:12:02 -07:00
evas_object_show ( ui - > cpu_view ) ;
2020-02-15 09:12:02 -08:00
evas_object_hide ( ui - > entry_search ) ;
2019-06-08 15:39:15 -07:00
evas_object_hide ( ui - > misc_view ) ;
2018-06-11 03:12:02 -07:00
evas_object_hide ( ui - > system_activity ) ;
evas_object_hide ( ui - > panel ) ;
evas_object_hide ( ui - > disk_view ) ;
evas_object_hide ( ui - > mem_view ) ;
2018-06-09 03:30:07 -07:00
}
2020-02-15 07:30:31 -08:00
static void
_evisum_process_filter ( Ui * ui , const char * text )
{
if ( ui - > search_text )
free ( ui - > search_text ) ;
ui - > search_text = strdup ( text ) ;
}
static void
_evisum_search_keypress_cb ( void * data , Evas * e EINA_UNUSED , Evas_Object * obj , void * event_info )
{
Ui * ui ;
const char * markup ;
char * text ;
Evas_Object * entry ;
Evas_Event_Key_Down * event ;
event = event_info ;
entry = obj ;
ui = data ;
if ( ! event ) return ;
2020-02-15 18:03:32 -08:00
2020-02-15 07:30:31 -08:00
markup = elm_object_part_text_get ( entry , NULL ) ;
text = elm_entry_markup_to_utf8 ( markup ) ;
if ( text )
{
_evisum_process_filter ( ui , text ) ;
free ( text ) ;
}
}
2018-06-09 03:30:07 -07:00
static Evas_Object *
_ui_tabs_add ( Evas_Object * parent , Ui * ui )
{
2020-02-15 18:03:32 -08:00
Evas_Object * table , * box , * entry , * hbox , * frame , * button ;
2019-09-01 07:18:30 -07:00
Evas_Object * border ;
2018-06-09 03:30:07 -07:00
ui - > content = table = elm_table_add ( parent ) ;
evas_object_size_hint_weight_set ( table , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( table , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_content_set ( parent , table ) ;
evas_object_show ( table ) ;
frame = elm_frame_add ( parent ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_text_set ( frame , " Options " ) ;
2018-06-09 11:55:04 -07:00
elm_object_style_set ( frame , " pad_medium " ) ;
2018-06-09 03:30:07 -07:00
evas_object_show ( frame ) ;
hbox = elm_box_add ( parent ) ;
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_horizontal_set ( hbox , EINA_TRUE ) ;
evas_object_show ( hbox ) ;
2019-09-01 07:18:30 -07:00
border = elm_frame_add ( parent ) ;
evas_object_size_hint_weight_set ( border , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( border , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_style_set ( border , " pad_small " ) ;
evas_object_show ( border ) ;
2019-06-08 15:39:15 -07:00
ui - > btn_general = button = elm_button_add ( hbox ) ;
elm_object_disabled_set ( ui - > btn_general , EINA_TRUE ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2018-06-09 03:30:07 -07:00
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2019-08-24 08:28:56 -07:00
evas_object_size_hint_min_set ( button , TAB_BTN_SIZE * elm_config_scale_get ( ) , 0 ) ;
2018-06-16 13:31:49 -07:00
elm_object_text_set ( button , " General " ) ;
2018-06-09 03:30:07 -07:00
evas_object_show ( button ) ;
2019-09-01 07:18:30 -07:00
elm_object_content_set ( border , button ) ;
elm_box_pack_end ( hbox , border ) ;
2018-06-09 03:30:07 -07:00
evas_object_smart_callback_add ( button , " clicked " , _tab_system_activity_clicked_cb , ui ) ;
2019-09-01 07:18:30 -07:00
border = elm_frame_add ( parent ) ;
evas_object_size_hint_weight_set ( border , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( border , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_style_set ( border , " pad_small " ) ;
evas_object_show ( border ) ;
2019-06-08 15:39:15 -07:00
ui - > btn_cpu = button = elm_button_add ( hbox ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2018-06-09 03:30:07 -07:00
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2019-08-24 08:28:56 -07:00
evas_object_size_hint_min_set ( button , TAB_BTN_SIZE * elm_config_scale_get ( ) , 0 ) ;
2018-06-11 03:12:02 -07:00
elm_object_text_set ( button , " CPU " ) ;
2019-09-01 07:18:30 -07:00
elm_object_content_set ( border , button ) ;
2018-06-11 03:12:02 -07:00
evas_object_show ( button ) ;
2019-09-01 07:18:30 -07:00
elm_box_pack_end ( hbox , border ) ;
2018-06-11 03:12:02 -07:00
evas_object_smart_callback_add ( button , " clicked " , _tab_cpu_activity_clicked_cb , ui ) ;
2019-09-01 07:18:30 -07:00
border = elm_frame_add ( parent ) ;
evas_object_size_hint_weight_set ( border , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( border , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_style_set ( border , " pad_small " ) ;
evas_object_show ( border ) ;
2019-06-08 15:39:15 -07:00
ui - > btn_mem = button = elm_button_add ( hbox ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2018-06-11 03:12:02 -07:00
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2019-08-24 08:28:56 -07:00
evas_object_size_hint_min_set ( button , TAB_BTN_SIZE * elm_config_scale_get ( ) , 0 ) ;
2018-06-11 03:12:02 -07:00
elm_object_text_set ( button , " Memory " ) ;
evas_object_show ( button ) ;
2019-09-01 07:18:30 -07:00
elm_object_content_set ( border , button ) ;
elm_box_pack_end ( hbox , border ) ;
2018-06-11 03:12:02 -07:00
evas_object_smart_callback_add ( button , " clicked " , _tab_memory_activity_clicked_cb , ui ) ;
2019-09-01 07:18:30 -07:00
border = elm_frame_add ( parent ) ;
evas_object_size_hint_weight_set ( border , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( border , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_style_set ( border , " pad_small " ) ;
evas_object_show ( border ) ;
2019-06-08 15:39:15 -07:00
ui - > btn_storage = button = elm_button_add ( hbox ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2018-06-11 03:12:02 -07:00
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2019-08-24 08:28:56 -07:00
evas_object_size_hint_min_set ( button , TAB_BTN_SIZE * elm_config_scale_get ( ) , 0 ) ;
2018-06-11 03:12:02 -07:00
elm_object_text_set ( button , " Storage " ) ;
2018-06-09 03:30:07 -07:00
evas_object_show ( button ) ;
2019-09-01 07:18:30 -07:00
elm_object_content_set ( border , button ) ;
elm_box_pack_end ( hbox , border ) ;
2018-06-09 03:30:07 -07:00
evas_object_smart_callback_add ( button , " clicked " , _tab_disk_activity_clicked_cb , ui ) ;
2019-09-01 07:18:30 -07:00
border = elm_frame_add ( parent ) ;
evas_object_size_hint_weight_set ( border , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
evas_object_size_hint_align_set ( border , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_style_set ( border , " pad_small " ) ;
evas_object_show ( border ) ;
2019-06-08 15:39:15 -07:00
ui - > btn_misc = button = elm_button_add ( hbox ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_FILL , EVAS_HINT_EXPAND ) ;
2018-06-10 06:09:44 -07:00
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2019-08-24 08:28:56 -07:00
evas_object_size_hint_min_set ( button , TAB_BTN_SIZE * elm_config_scale_get ( ) , 0 ) ;
2018-06-10 06:09:44 -07:00
elm_object_text_set ( button , " Misc " ) ;
evas_object_show ( button ) ;
2019-09-01 07:18:30 -07:00
elm_object_content_set ( border , button ) ;
elm_box_pack_end ( hbox , border ) ;
2019-06-08 15:39:15 -07:00
evas_object_smart_callback_add ( button , " clicked " , _tab_misc_clicked_cb , ui ) ;
2018-06-10 06:09:44 -07:00
2018-06-09 03:30:07 -07:00
elm_object_content_set ( frame , hbox ) ;
elm_table_pack ( ui - > content , frame , 0 , 0 , 1 , 1 ) ;
hbox = elm_box_add ( parent ) ;
2018-06-09 11:55:04 -07:00
evas_object_size_hint_weight_set ( hbox , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( hbox , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
2018-06-09 03:30:07 -07:00
elm_box_horizontal_set ( hbox , EINA_TRUE ) ;
evas_object_show ( hbox ) ;
2020-02-15 07:30:31 -08:00
box = elm_box_add ( parent ) ;
evas_object_size_hint_weight_set ( box , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( box , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_box_horizontal_set ( box , EINA_TRUE ) ;
evas_object_show ( box ) ;
2018-06-09 11:55:04 -07:00
2020-02-15 18:03:32 -08:00
frame = elm_frame_add ( parent ) ;
evas_object_size_hint_weight_set ( frame , EVAS_HINT_EXPAND , 0 ) ;
evas_object_size_hint_align_set ( frame , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_style_set ( frame , " pad_small " ) ;
evas_object_show ( frame ) ;
2019-09-01 07:18:30 -07:00
border = elm_frame_add ( parent ) ;
2020-02-15 18:03:32 -08:00
evas_object_size_hint_weight_set ( border , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2019-09-01 07:18:30 -07:00
evas_object_size_hint_align_set ( border , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_style_set ( border , " pad_small " ) ;
evas_object_show ( border ) ;
2020-02-15 09:12:02 -08:00
ui - > entry_search = entry = elm_entry_add ( parent ) ;
2020-02-15 18:03:32 -08:00
evas_object_size_hint_weight_set ( entry , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2020-02-15 07:30:31 -08:00
evas_object_size_hint_align_set ( entry , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_entry_single_line_set ( entry , EINA_TRUE ) ;
elm_entry_scrollable_set ( entry , EINA_TRUE ) ;
elm_entry_editable_set ( entry , EINA_TRUE ) ;
evas_object_show ( entry ) ;
2020-02-15 18:03:32 -08:00
elm_object_content_set ( border , entry ) ;
elm_box_pack_end ( box , border ) ;
2020-02-15 07:30:31 -08:00
2020-02-15 18:03:32 -08:00
border = elm_frame_add ( parent ) ;
evas_object_size_hint_weight_set ( border , 0.1 , 0 ) ;
evas_object_size_hint_align_set ( border , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_style_set ( border , " pad_small " ) ;
evas_object_show ( border ) ;
2020-02-15 07:30:31 -08:00
2018-06-09 03:30:07 -07:00
button = elm_button_add ( parent ) ;
2020-02-15 18:03:32 -08:00
evas_object_size_hint_weight_set ( button , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND ) ;
2018-06-09 03:30:07 -07:00
evas_object_size_hint_align_set ( button , EVAS_HINT_FILL , EVAS_HINT_FILL ) ;
elm_object_text_set ( button , " Close " ) ;
2020-02-15 18:03:32 -08:00
elm_object_content_set ( border , button ) ;
elm_box_pack_end ( box , border ) ;
2018-06-09 03:30:07 -07:00
evas_object_show ( button ) ;
evas_object_smart_callback_add ( button , " clicked " , _btn_quit_clicked_cb , ui ) ;
2020-02-15 18:03:32 -08:00
elm_object_content_set ( frame , box ) ;
elm_box_pack_end ( hbox , frame ) ;
2018-06-09 03:30:07 -07:00
elm_table_pack ( ui - > content , hbox , 0 , 2 , 1 , 1 ) ;
return table ;
}
2018-10-02 06:56:25 -07:00
static void
_evisum_key_down_cb ( void * data , Evas * e , Evas_Object * obj , void * event_info )
{
Evas_Event_Key_Down * ev ;
Ui * ui ;
2020-02-16 11:34:41 -08:00
Eina_Bool control ;
2018-10-02 06:56:25 -07:00
ev = event_info ;
ui = data ;
if ( ! ev | | ! ev - > keyname )
return ;
2020-02-16 11:34:41 -08:00
control = evas_key_modifier_is_set ( ev - > modifiers , " Control " ) ;
2018-10-25 05:59:29 -07:00
ui - > skip_wait = EINA_TRUE ;
2020-02-16 11:38:40 -08:00
if ( ! control ) return ;
2020-02-16 11:34:41 -08:00
if ( ! strcmp ( ev - > keyname , " Escape " ) )
{
ui_shutdown ( ui ) ;
return ;
}
2020-02-17 14:38:24 -08:00
if ( ( ev - > keyname [ 0 ] = = ' K ' | | ev - > keyname [ 0 ] = = ' k ' ) )
2020-02-15 18:03:32 -08:00
ui - > data_unit = DATA_UNIT_KB ;
2020-02-17 14:38:24 -08:00
else if ( ( ev - > keyname [ 0 ] = = ' M ' | | ev - > keyname [ 0 ] = = ' m ' ) )
2020-02-15 18:03:32 -08:00
ui - > data_unit = DATA_UNIT_MB ;
2020-02-17 14:38:24 -08:00
else if ( ( ev - > keyname [ 0 ] = = ' G ' | | ev - > keyname [ 0 ] = = ' g ' ) )
2020-02-15 18:03:32 -08:00
ui - > data_unit = DATA_UNIT_GB ;
2020-04-14 10:24:27 -07:00
if ( ev - > keyname [ 0 ] = = ' e ' | | ev - > keyname [ 0 ] = = ' E ' )
ui - > show_self = ! ui - > show_self ;
_config_save ( ui ) ;
}
static void
_evisum_resize_cb ( void * data , Evas * e , Evas_Object * obj , void * event_info )
{
Ui * ui = data ;
elm_genlist_clear ( ui - > genlist_procs ) ;
_process_panel_update ( ui ) ;
2018-10-02 06:56:25 -07:00
}
2020-02-24 09:22:22 -08:00
void
ui_shutdown ( Ui * ui )
{
evas_object_del ( ui - > win ) ;
ui - > shutting_down = EINA_TRUE ;
if ( ui - > thread_system )
ecore_thread_cancel ( ui - > thread_system ) ;
if ( ui - > thread_process )
ecore_thread_cancel ( ui - > thread_process ) ;
if ( ui - > thread_system )
ecore_thread_wait ( ui - > thread_system , 1.0 ) ;
if ( ui - > thread_process )
ecore_thread_wait ( ui - > thread_process , 1.0 ) ;
_proc_pid_cpu_times_free ( ui ) ;
eina_lock_free ( & _lock ) ;
ecore_main_loop_quit ( ) ;
}
2020-02-19 07:04:21 -08:00
static void
_ui_launch ( Ui * ui )
{
_process_panel_update ( ui ) ;
2020-04-14 10:24:27 -07:00
_process_list_update ( ui ) ;
2020-02-19 07:04:21 -08:00
ui - > thread_system = ecore_thread_feedback_run ( _system_stats , _system_stats_feedback_cb ,
_thread_end_cb , _thread_error_cb , ui ,
EINA_FALSE ) ;
ui - > thread_process = ecore_thread_feedback_run ( _process_list , _process_list_feedback_cb ,
_thread_end_cb , _thread_error_cb , ui ,
EINA_FALSE ) ;
2020-04-14 10:24:27 -07:00
evas_object_event_callback_add ( ui - > win , EVAS_CALLBACK_RESIZE , _evisum_resize_cb , ui ) ;
2020-02-19 07:04:21 -08:00
evas_object_event_callback_add ( ui - > content , EVAS_CALLBACK_KEY_DOWN , _evisum_key_down_cb , ui ) ;
evas_object_event_callback_add ( ui - > entry_search , EVAS_CALLBACK_KEY_DOWN , _evisum_search_keypress_cb , ui ) ;
}
2020-02-16 07:57:26 -08:00
static Ui *
_ui_init ( Evas_Object * parent )
2018-06-04 03:11:21 -07:00
{
2019-09-05 14:33:38 -07:00
Ui * ui = calloc ( 1 , sizeof ( Ui ) ) ;
if ( ! ui ) return NULL ;
2018-06-04 03:11:21 -07:00
2020-02-19 07:04:21 -08:00
/* Settings */
2018-06-04 03:11:21 -07:00
ui - > win = parent ;
ui - > poll_delay = 3 ;
ui - > sort_reverse = EINA_FALSE ;
ui - > sort_type = SORT_BY_PID ;
ui - > selected_pid = - 1 ;
ui - > program_pid = getpid ( ) ;
2020-04-15 10:24:19 -07:00
ui - > panel_visible = ui - > disk_visible = ui - > cpu_visible = ui - > mem_visible = ui - > misc_visible = EINA_TRUE ;
2018-10-24 05:27:53 -07:00
ui - > data_unit = DATA_UNIT_MB ;
2018-06-04 03:11:21 -07:00
2020-02-24 09:22:22 -08:00
ui - > cpu_times = NULL ;
2018-06-04 03:11:21 -07:00
2020-04-15 05:57:50 -07:00
_config_load ( ui ) ;
2020-04-14 10:24:27 -07:00
2020-02-19 07:04:21 -08:00
/* UI content creation */
2018-06-09 11:55:04 -07:00
_ui_tabs_add ( parent , ui ) ;
2019-09-05 14:33:38 -07:00
_ui_tab_system_add ( ui ) ;
2018-06-09 11:55:04 -07:00
_ui_process_panel_add ( ui ) ;
2019-09-05 14:33:38 -07:00
_ui_tab_cpu_add ( ui ) ;
_ui_tab_memory_add ( ui ) ;
_ui_tab_disk_add ( ui ) ;
_ui_tab_misc_add ( ui ) ;
2018-10-02 06:56:25 -07:00
2020-04-14 10:24:27 -07:00
_column_expand_init ( ui ) ;
2020-02-19 07:04:21 -08:00
return ui ;
}
2018-06-09 03:30:07 -07:00
2020-02-19 07:04:21 -08:00
Ui *
ui_add ( Evas_Object * parent )
{
eina_lock_new ( & _lock ) ;
2020-02-15 18:03:32 -08:00
2020-02-19 07:04:21 -08:00
/* Create our user interface. */
2020-04-14 10:24:27 -07:00
Ui * ui = _ui = _ui_init ( parent ) ;
2020-02-19 07:04:21 -08:00
if ( ! ui ) return NULL ;
2019-09-05 14:33:38 -07:00
2020-02-19 07:04:21 -08:00
/* Start polling our data */
_ui_launch ( ui ) ;
2018-06-16 13:31:49 -07:00
return ui ;
2018-06-04 03:11:21 -07:00
}