Skip to content

Commit 066313a

Browse files
author
jeroen
committed
* Priority`
1 parent 0f62f7c commit 066313a

12 files changed

+250
-21
lines changed

CMakeLists.txt

+10-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ set(procgui_SRC
5353
src/gui/procinfodialog.cpp
5454
src/gui/sortproxy.cpp
5555
src/gui/about.cpp
56+
src/gui/priority.cpp
5657
)
5758
set(procgui_LIBS
5859
Qt5::Widgets
@@ -61,15 +62,23 @@ set(procgui_LIBS
6162
KF5::I18n
6263
)
6364

65+
set(procgui_resource
66+
src/images/images.qrc
67+
)
68+
6469
qt5_wrap_ui(procgui_SRC
6570
src/ui/fields.ui
6671
src/ui/procgui.ui
6772
src/ui/procinfodialog.ui
73+
src/ui/priority.ui
6874
src/ui/about.ui
6975
)
7076
add_subdirectory(src/po)
7177

72-
add_executable(procgui src/main.cpp ${procgui_SRC})
78+
qt5_add_resources(procgui_rcc_h ${procgui_resource})
79+
80+
add_executable(procgui src/main.cpp ${procgui_rcc_h} ${procgui_SRC})
81+
7382

7483
target_link_libraries(procgui ${procgui_LIBS})
7584

src/base/fieldlist.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const TFieldInfo g_fields[]={
2727
, {I18N_NOOP("Diff. system time"),'N'}
2828
, {I18N_NOOP("Total time"),'S'}
2929
, {I18N_NOOP("Diff. total time"),'N'}
30-
, {I18N_NOOP("Nice level"),'N'}
30+
, {I18N_NOOP("Priority"),'N'}
3131
};
3232

3333

src/data/processinfo.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ void TProcessInfo::getInfo(QVector<QString>& p_info)
3939
p_info << QString::number(getDiffSTime());
4040
p_info << getTotalTimeStr();
4141
p_info << QString::number(getDiffTotalTime());
42-
p_info << (hasNiceLevel?QString::number(niceLevel):QStringLiteral(""));
42+
p_info << (hasPriority?QString::number(priority):QStringLiteral(""));
4343

4444
}
4545

@@ -193,10 +193,10 @@ void TProcessInfo::readInfo()
193193
{
194194
errno=0;
195195
int l_nice=getpriority(PRIO_PROCESS,pid);
196-
hasNiceLevel=(errno ==0);
196+
hasPriority=(errno ==0);
197197
if(errno==0){
198-
niceLevel=l_nice;
198+
priority=l_nice;
199199
} else {
200-
niceLevel=0;
200+
priority=0;
201201
}
202202
}

src/data/processinfo.h

+7-12
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,14 @@ class TProcessInfo
100100
* State of process
101101
*/
102102
char state=' ';
103-
104-
/**
105-
* Get nice level.
106-
*/
107-
int niceLevel=0;
108-
103+
109104
/**
110-
* If hasNiceLevel=true, than nice level has a valid niceLevel.
111-
* Reading of niceLevel can fail if the user hasn't proper rights.
105+
* Priority
112106
*/
107+
int priority=0;
108+
bool hasPriority=false;
113109

114-
bool hasNiceLevel=false;
115-
110+
116111
/**
117112
* Parent process object.
118113
*/
@@ -154,8 +149,6 @@ class TProcessInfo
154149
inline void setUTime(ulong p_utime){ utime=p_utime;}
155150
inline ulong getSTime(){ return stime;}
156151
inline void setSTime(ulong p_stime){ stime=p_stime;}
157-
inline int getNiceLevel(){ return niceLevel;}
158-
inline bool getHasNiceLevel(){ return hasNiceLevel;}
159152
inline const QString getSTimeStr(){ return timeToString(getSTime());}
160153
inline const QString getUTimeStr(){ return timeToString(getUTime());}
161154
inline const QString getTotalTimeStr(){ return timeToString(getUTime()+getSTime());}
@@ -172,6 +165,8 @@ class TProcessInfo
172165
inline ulong getVSize(){return vsize;}
173166
inline void setRSS(ulong p_rss){rss=p_rss;}
174167
inline ulong getRSS(){ return rss;}
168+
inline int getPriority(){ return priority;}
169+
inline bool getHasPriority(){ return hasPriority;}
175170
inline QHash<uint,TProcessInfo*> *getSubProcesses(){ return &subprocess;}
176171
inline TLinkList<TProcessInfo> *getThreads(){ return &threads;}
177172
void addSubProcess(TProcessInfo *p_processInfo);

src/gui/priority.cpp

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include "priority.h"
2+
#include <QString>
3+
#include <sys/time.h>
4+
#include <sys/resource.h>
5+
#include "src/base/utils.h"
6+
PriorityDialog::PriorityDialog(TProcessInfo* p_info)
7+
{
8+
ui.setupUi(this);
9+
pid=p_info->getPid();
10+
ui.processId->setText(QString::number(p_info->getPid()));
11+
ui.processName->setText(p_info->getComm());
12+
ui.priority->setText(QString::number(p_info->getPriority()));
13+
connect(ui.okButton,SIGNAL(clicked()),this,SLOT(pressOk()));
14+
}
15+
16+
void PriorityDialog::pressCancel()
17+
{
18+
}
19+
20+
void PriorityDialog::pressOk()
21+
{
22+
bool l_ok;
23+
int l_newPrio=ui.priority->text().toInt(&l_ok);
24+
if(l_ok){
25+
errno=0;
26+
setpriority(PRIO_PROCESS,pid,l_newPrio);
27+
if(errno ==0){
28+
close();
29+
}
30+
printf("Error=%d\n",errno);
31+
}
32+
33+
}

src/gui/priority.h

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#ifndef __PRIORITY_H__
2+
#define __PRIORITY_H__
3+
#include <QDialog>
4+
#include "src/data/processinfo.h"
5+
#include "ui_priority.h"
6+
7+
class PriorityDialog:public QDialog
8+
{
9+
private:
10+
pid_t pid;
11+
Q_OBJECT
12+
private slots:
13+
void pressOk();
14+
void pressCancel();
15+
public:
16+
Ui::PriorityDialog ui;
17+
PriorityDialog(TProcessInfo *p_info);
18+
};
19+
20+
#endif

src/gui/procgui.cpp

+17
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "sortproxy.h"
3232
#include "about.h"
3333
#include "src/base/utils.h"
34+
#include "priority.h"
3435

3536
/**
3637
* Main windows. This window displays the processList.
@@ -94,6 +95,7 @@ TProcGui::TProcGui(QWidget *parent) : QMainWindow(parent), ui(new Ui::procgui)
9495
connect(ui->killButton,SIGNAL(clicked()),this,SLOT(killProcess()));
9596
connect(ui->detailsButton,SIGNAL(clicked()),this,SLOT(showDetails()));
9697
connect(ui->displayAsTree,SIGNAL(clicked()),this,SLOT(checkDisplayAsTree()));
98+
connect(ui->priority,SIGNAL(clicked()),this,SLOT(showPriorityDialog()));
9799
ui->displayAsTree->setCheckState(g_config.getDisplayAsTree()?Qt::Checked:Qt::Unchecked);
98100
ui->processList->setItemDelegate(new TGridDelegate(ui->processList));
99101
userSelection=new QTableView(this);
@@ -121,6 +123,21 @@ void TProcGui::about()
121123
l_about.exec();
122124
}
123125

126+
/**
127+
* Show the PropertyDialog for changing the proces priority
128+
*/
129+
void TProcGui::showPriorityDialog()
130+
{
131+
printf("Help\n");
132+
if(ui->processList->selectionModel()->selectedRows().count()>0){
133+
pid_t l_pid=ui->processList->selectionModel()->selectedRows().first().data(Qt::UserRole+1).toUInt();
134+
TProcessInfo *l_info=processInfo->getByPid(l_pid);
135+
PriorityDialog l_dialog(l_info);
136+
l_dialog.exec();
137+
}
138+
139+
140+
}
124141

125142

126143

src/gui/procgui.h

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ private slots:
2929
void killProcess();
3030
void showDetails();
3131
void checkDisplayAsTree();
32+
void showPriorityDialog();
3233
void about();
3334
private:
3435
/**

src/images/images.qrc

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<RCC>
2+
<qresource>
3+
<file>priority.png</file>
4+
</qresource>
5+
</RCC>

src/images/priority.png

342 Bytes
Loading

src/ui/priority.ui

+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>PriorityDialog</class>
4+
<widget class="QDialog" name="PriorityDialog">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>644</width>
10+
<height>170</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>Process priority</string>
15+
</property>
16+
<layout class="QVBoxLayout" name="verticalLayout">
17+
<item>
18+
<layout class="QFormLayout" name="formLayout">
19+
<property name="fieldGrowthPolicy">
20+
<enum>QFormLayout::ExpandingFieldsGrow</enum>
21+
</property>
22+
<item row="0" column="0">
23+
<widget class="QLabel" name="label_2">
24+
<property name="text">
25+
<string>Id</string>
26+
</property>
27+
</widget>
28+
</item>
29+
<item row="1" column="0">
30+
<widget class="QLabel" name="label">
31+
<property name="text">
32+
<string>Process</string>
33+
</property>
34+
</widget>
35+
</item>
36+
<item row="1" column="1">
37+
<widget class="QLabel" name="processName">
38+
<property name="text">
39+
<string>TextLabel</string>
40+
</property>
41+
</widget>
42+
</item>
43+
<item row="0" column="1">
44+
<widget class="QLabel" name="processId">
45+
<property name="text">
46+
<string>TextLabel</string>
47+
</property>
48+
</widget>
49+
</item>
50+
<item row="2" column="0">
51+
<widget class="QLabel" name="label_3">
52+
<property name="text">
53+
<string>Priority</string>
54+
</property>
55+
</widget>
56+
</item>
57+
<item row="2" column="1">
58+
<widget class="QLabel" name="priority">
59+
<property name="text">
60+
<string>TextLabel</string>
61+
</property>
62+
</widget>
63+
</item>
64+
<item row="3" column="0">
65+
<widget class="QLabel" name="label_4">
66+
<property name="text">
67+
<string>New priority</string>
68+
</property>
69+
</widget>
70+
</item>
71+
<item row="3" column="1">
72+
<widget class="QLineEdit" name="newPriority"/>
73+
</item>
74+
</layout>
75+
</item>
76+
<item>
77+
<layout class="QHBoxLayout" name="horizontalLayout">
78+
<item>
79+
<widget class="QPushButton" name="okButton">
80+
<property name="sizePolicy">
81+
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
82+
<horstretch>0</horstretch>
83+
<verstretch>0</verstretch>
84+
</sizepolicy>
85+
</property>
86+
<property name="text">
87+
<string>&amp;Ok</string>
88+
</property>
89+
</widget>
90+
</item>
91+
<item>
92+
<widget class="QPushButton" name="cancelButton">
93+
<property name="sizePolicy">
94+
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
95+
<horstretch>0</horstretch>
96+
<verstretch>0</verstretch>
97+
</sizepolicy>
98+
</property>
99+
<property name="text">
100+
<string>Cancel</string>
101+
</property>
102+
</widget>
103+
</item>
104+
<item>
105+
<spacer name="horizontalSpacer">
106+
<property name="orientation">
107+
<enum>Qt::Horizontal</enum>
108+
</property>
109+
<property name="sizeHint" stdset="0">
110+
<size>
111+
<width>40</width>
112+
<height>20</height>
113+
</size>
114+
</property>
115+
</spacer>
116+
</item>
117+
</layout>
118+
</item>
119+
<item>
120+
<spacer name="verticalSpacer">
121+
<property name="orientation">
122+
<enum>Qt::Vertical</enum>
123+
</property>
124+
<property name="sizeHint" stdset="0">
125+
<size>
126+
<width>20</width>
127+
<height>40</height>
128+
</size>
129+
</property>
130+
</spacer>
131+
</item>
132+
</layout>
133+
</widget>
134+
<resources/>
135+
<connections/>
136+
</ui>

src/ui/procgui.ui

+16-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
</property>
3737
<property name="icon">
3838
<iconset theme="process-stop">
39-
<normaloff>.</normaloff>.</iconset>
39+
<normaloff>../../../../.designer/backup</normaloff>../../../../.designer/backup</iconset>
4040
</property>
4141
<property name="iconSize">
4242
<size>
@@ -65,7 +65,7 @@
6565
</property>
6666
<property name="icon">
6767
<iconset theme="view-list-details">
68-
<normaloff>.</normaloff>.</iconset>
68+
<normaloff>../../../../.designer/backup</normaloff>../../../../.designer/backup</iconset>
6969
</property>
7070
<property name="iconSize">
7171
<size>
@@ -75,6 +75,17 @@
7575
</property>
7676
</widget>
7777
</item>
78+
<item>
79+
<widget class="QPushButton" name="priority">
80+
<property name="text">
81+
<string/>
82+
</property>
83+
<property name="icon">
84+
<iconset resource="../images/images.qrc">
85+
<normaloff>:/priority.png</normaloff>:/priority.png</iconset>
86+
</property>
87+
</widget>
88+
</item>
7889
<item>
7990
<widget class="QCheckBox" name="displayAsTree">
8091
<property name="text">
@@ -231,6 +242,8 @@
231242
</action>
232243
</widget>
233244
<layoutdefault spacing="6" margin="11"/>
234-
<resources/>
245+
<resources>
246+
<include location="../images/images.qrc"/>
247+
</resources>
235248
<connections/>
236249
</ui>

0 commit comments

Comments
 (0)