Cherry-picking upstream version 1.10.16+20151210.

Removed dbg package in favor of dbgsym.
Removed unused files and licenses from copyright.
Installed manpage.
ubuntu/disco debian/1.10.16+20151210-1
Alf Gaida 8 years ago
parent 8166a027e7
commit 3e328b47c6

@ -1,6 +1,5 @@
cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
set(PROJECT qps)
project(${PROJECT})
project(qps)
option(UPDATE_TRANSLATIONS "Update source translation translations/*.ts files" OFF)
@ -60,9 +59,9 @@ install(FILES
# building tarball with CPack
include(InstallRequiredSystemLibraries)
set(CPACK_PACKAGE_VERSION_MAJOR ${LXQT_MAJOR_VERSION})
set(CPACK_PACKAGE_VERSION_MINOR ${LXQT_MINOR_VERSION})
set(CPACK_PACKAGE_VERSION_PATCH ${LXQT_PATCH_VERSION})
set(CPACK_PACKAGE_VERSION_MAJOR ${MAJOR_VERSION})
set(CPACK_PACKAGE_VERSION_MINOR ${MINOR_VERSION})
set(CPACK_PACKAGE_VERSION_PATCH ${PATCH_VERSION})
set(CPACK_GENERATOR TBZ2)
set(CPACK_SOURCE_GENERATOR TBZ2)
set(CPACK_SOURCE_IGNORE_FILES /build/;.gitignore;.*~;.git;.kdev4;temp)

9
debian/changelog vendored

@ -1,3 +1,12 @@
qps (1.10.16+20151210-1) unstable; urgency=medium
* Cherry-picking upstream version 1.10.16+20151210.
* Removed dbg package in favor of dbgsym.
* Removed unused files and licenses from copyright.
* Installed manpage.
-- Alf Gaida <agaida@siduction.org> Sun, 27 Dec 2015 03:37:11 +0100
qps (1.10.16+20150823-1) unstable; urgency=medium
* Initial Release (Closes: #795697)

12
debian/control vendored

@ -22,15 +22,3 @@ Depends: ${shlibs:Depends},
${misc:Depends}
Description: Qt process manager
Qt process manager ported to Qt5
Package: qps-dbg
Architecture: any
Section: debug
Priority: extra
Depends: ${shlibs:Depends},
${misc:Depends},
qps (= ${binary:Version})
Description: Qt process manager (debug)
Qt process manager ported to Qt5
.
This package contains debugging symbols for qps.

47
debian/copyright vendored

@ -26,10 +26,6 @@ Copyright: 1997-1999 Mattias Engdegård
2015- daehyun.yang@gmail.com
License: GPL-2.0+
Files: src/qticonloader.*
Copyright: Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
License: LGPL-2.1-Nokia-Qt-Exception-1 or GPL-3
Files: src/qttableview.*
Copyright: 1992-2000 Trolltech AS
License: GPL-2.0 or QPL-1.0
@ -121,49 +117,6 @@ License: LGPL-2.1+
On Debian systems, the complete text of the GNU Lesser General
Public License can be found in "/usr/share/common-licenses/LGPL-2.1".
License: LGPL-2.1-Nokia-Qt-Exception-1
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation;
version 2.1 of the License.
.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
.
On Debian systems, the full text of the GNU Lesser General Public
License version 2.1 can be found in the file
`/usr/share/common-licenses/LGPL-2.1'.
.
Nokia Qt LGPL Exception version 1.0
.
As a special exception to the GNU Lesser General Public License
version 2.1, the object code form of a "work that uses the Library"
may incorporate material from a header file that is part of the
Library. You may distribute such object code under terms of your
choice, provided that the incorporated material (i) does not exceed
more than 5% of the total size of the Library; and (ii) is limited to
numerical parameters, data structure layouts, accessors, macros,
inline functions and templates.
License: GPL-3
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License version 3 as published by
the Free Software Foundation,
.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
On Debian systems, the complete text of the GNU General
Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
License: QPL-1.0
THE Q PUBLIC LICENSE
version 1.0

1
debian/manpages vendored

@ -0,0 +1 @@
qps.1

9
debian/rules vendored

@ -4,10 +4,5 @@
export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
%:
dh $@ --buildsystem=cmake --parallel
override_dh_auto_install:
dh_auto_install -- DESTDIR=$(CURDIR)/debian/qps
override_dh_strip:
dh_strip --dbg-package=qps-dbg
dh ${@} --buildsystem=cmake \
--parallel

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

@ -6,6 +6,5 @@
<file>icon/vcross.png</file>
<file>icon/pause.png</file>
<file>icon/superman.png</file>
<file>icon/preferences-system.png</file>
</qresource>
</RCC>

@ -1,6 +1,7 @@
set(SOURCES
proc.cpp
qpsapp.cpp
qps.cpp
screenshot.cpp
pstable.cpp
@ -14,6 +15,14 @@ set(SOURCES
lookup.cpp
details.cpp
command.cpp
commandutils.cpp
commandmodel.cpp
commanddialog.cpp
checkboxdelegate.cpp
execwindow.cpp
watchcond.cpp
listmodel.cpp
watchdogdialog.cpp
misc.cpp
trayicon.cpp
htable.cpp
@ -23,6 +32,7 @@ set(SOURCES
)
SET(HEADERS
qpsapp.h
qps.h
screenshot.h
pstable.h
@ -32,7 +42,16 @@ SET(HEADERS
infobar.h
lookup.h
details.h
tablefield.h
command.h
commandutils.h
commandmodel.h
commanddialog.h
checkboxdelegate.h
execwindow.h
watchcond.h
listmodel.h
watchdogdialog.h
misc.h
trayicon.h
htable.h
@ -46,6 +65,7 @@ set(UIS
message.ui
)
set(RESOURCES "../qps.qrc")
#-----------------------------------------------------------------------------
# Translations
#-----------------------------------------------------------------------------
@ -69,22 +89,23 @@ lxqt_translate_desktop(DESKTOP_FILES
#-----------------------------------------------------------------------------
add_executable(${PROJECT}
add_executable(${PROJECT_NAME}
${SOURCES}
${HEADERS}
${UIS}
${QM_FILES}
${QM_LOADER}
${DESKTOP_FILES}
${RESOURCES}
)
target_link_libraries(${PROJECT}
target_link_libraries(${PROJECT_NAME}
Qt5::Widgets
Qt5::X11Extras
Qt5::DBus
)
install(TARGETS ${PROJECT} RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR})
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR})
install(FILES
${DESKTOP_FILES}
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications"

@ -0,0 +1,94 @@
// checkboxdelegate.cpp
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#include "checkboxdelegate.h"
#include <QSpinBox>
checkBoxDelegate::checkBoxDelegate(QObject *parent) : QItemDelegate(parent) {}
//! [0]
//! [1]
QWidget *checkBoxDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
printf("createEditor\n");
// return 0;
if (index.column() == 1)
{
QSpinBox *editor = new QSpinBox(parent);
editor->setMinimum(0);
editor->setMaximum(100);
return editor;
}
return QItemDelegate::createEditor(parent, option, index);
return 0;
}
//! [1]
//! [2]
void checkBoxDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
printf("setEditorData\n");
return;
// if(index
if (index.column() == 1)
{
int value = index.model()->data(index, Qt::EditRole).toInt();
// int value=0;
QSpinBox *spinBox = static_cast<QSpinBox *>(editor);
spinBox->setValue(value);
}
}
//! [2]
//! [3]
void checkBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
printf("setModelData\n");
return;
if (index.column() == 1)
{
QSpinBox *spinBox = static_cast<QSpinBox *>(editor);
spinBox->interpretText();
int value = spinBox->value();
model->setData(index, value, Qt::EditRole);
}
}
//! [3]
//! [4]
void checkBoxDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
printf("updateEditorGeometry\n");
// if(index.column()==1)
editor->setGeometry(option.rect);
}
//! [4]
void checkBoxDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
printf("paint\n");
if (index.column() == 1)
{
QVariant value = 0; // index.model()->data(index, Qt::UserRole);
/* if (!isSupportedType(value.type())) {
QStyleOptionViewItem myOption = option;
myOption.state &= ~QStyle::State_Enabled;
QItemDelegate::paint(painter, myOption, index);
return;
} */
}
QItemDelegate::paint(painter, option, index);
}
// QSize QAbstractItemDelegate::sizeHint ( const QStyleOptionViewItem & option,
// const QModelIndex & index ) const [pure virtual]

@ -0,0 +1,30 @@
// checkboxdelegate.h
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#ifndef CHECKBOXDELEGATE_H
#define CHECKBOXDELEGATE_H
#include <QItemDelegate>
class checkBoxDelegate : public QItemDelegate
// class checkBoxDelegate : public QAbstractItemDelegate
{
Q_OBJECT
public:
checkBoxDelegate(QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
};
#endif // CHECKBOXDELEGATE_H

@ -7,15 +7,15 @@
#include <string.h>
#include <errno.h>
#include <QLabel>
#include <QMessageBox>
#include <QLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFrame>
#include <QListView>
#include "command.h"
#include "commandutils.h"
#include "checkboxdelegate.h"
#include "watchcond.h"
#include "execwindow.h"
#include "listmodel.h"
#include "watchdogdialog.h"
#include "qps.h"
#include "proc.h"
#include "uidstr.h"
@ -25,71 +25,6 @@ extern Qps *qps;
extern ControlBar *controlbar;
extern QList<Command *> commands;
int find_command(QString s)
{
for (int i = 0; i < commands.size(); i++)
if (s == commands[i]->name)
return i;
return -1;
}
// DEL has "&" end of the string ?
bool hasAmpersand(QString cmdline)
{
QString str;
int len;
str = cmdline.simplified();
if (str == "%update")
return true; // internal command
len = str.length();
if (str[len - 1] == '&')
return true;
else
return false;
}
void check_command(int idx) {}
//
void check_commandAll()
{
int i, idx;
return;
for (int i = 0; i < commands.size(); i++)
{
if (hasAmpersand(commands[i]->cmdline) == false)
commands[i]->cmdline.append("&");
}
}
// after read ~/.qpsrc
void add_default_command()
{
int idx;
/*
idx=find_command("Update");
if (idx>=0)
commands[idx]->cmdline="%update";
else
commands.add(new Command("Update","%update",true));
*/
/*
* PAUSED
idx=find_command("Quit");
if (idx>=0)
commands[idx]->cmdline="killall qps";
else commands.add(new Command("Quit","killall qps",false));
*/
// check_commandAll(); DEL?
}
Command::Command(QString n, QString cmd, bool flag)
{
// printf("Command init\n");
@ -108,74 +43,6 @@ Command::Command(QString n, QString cmd, bool flag)
// SLOT(exec_command()));
}
QString watchCond::getVal(QString &str, const char *key)
{
int n; // key.length();
int idx = str.indexOf(key);
if (idx < 0)
return "cant' found";
idx = str.indexOf("[", idx);
if (idx < 0)
return "[ error";
int idx_end = str.indexOf("]", idx);
if (idx_end < 0)
return "] error";
n = idx_end - idx;
return str.mid(idx + 1, n - 1);
}
QString watchCond::getstring()
{
QString string;
string.clear();
switch (cond)
{
case WATCH_PROCESS_FINISH:
string.append("if process [" + procname + "] finish, ");
// string=string.sprintf("if process [%s] finish",procname);
break;
case WATCH_PROCESS_START:
string.append("if process [" + procname + "] start, ");
break;
case WATCH_SYS_CPU_OVER:
string.append("if sys_cpu over [" + QString::number(cpu) + "], ");
break;
case WATCH_SYS_CPU_UNDER:
string.append("if sys_cpu under [" + QString::number(cpu) + "], ");
break;
default:
;
}
if (!command.isEmpty())
string.append("exec [" + command + "] ");
if (!message.isEmpty())
string.append("showmsg [" + message + "] ");
if (enable)
string.append("enabled");
else
string.append("disabled");
return string;
}
void watchCond::putstring(QString str)
{
if (str.contains("if process"))
{
if (str.contains("start"))
cond = WATCH_PROCESS_START;
if (str.contains("finish"))
cond = WATCH_PROCESS_FINISH;
procname = getVal(str, "if process");
}
if (str.contains("exec"))
command = getVal(str, "exec");
if (str.contains("showmsg"))
message = getVal(str, "showmsg");
if (str.contains("enabled"))
enable = true;
else
enable = false;
}
Command::~Command()
{
// toolbutton->hide();
@ -352,277 +219,8 @@ void Command::call(Procinfo *p)
}
}
CommandDialog::CommandDialog()
{
setWindowTitle("Edit Commands 0.1 alpha");
// setWindowFlags(Qt::WindowStaysOnTopHint);
QHBoxLayout *hbox = new QHBoxLayout(this); // TOP
CommandModel *cmdModel = new CommandModel(this);
// item list
listview = new QListView(this);
listview->setModel(cmdModel);
listview->setFixedWidth(fontMetrics().width("0") * 16);
hbox->addWidget(listview);
QVBoxLayout *vbox = new QVBoxLayout; // TOP-> RIGHT
hbox->addLayout(vbox);
QHBoxLayout *h1 = new QHBoxLayout;
vbox->addLayout(h1);
QLabel *l1 = new QLabel("Name:", this);
h1->addWidget(l1);
name = new QLineEdit(this);
name->setMinimumWidth(170);
name->setText("");
h1->addWidget(name);
QHBoxLayout *hbox2 = new QHBoxLayout;
vbox->addLayout(hbox2);
// qcheck1 = new QCheckBox (this);
// qcheck1->setText("Toolbar");
// qcheck1->setEnabled(false);
// hbox2->addWidget(qcheck1);
if (0)
{
qcheck2 = new QCheckBox(this);
qcheck2->setText("Popup");
qcheck2->setEnabled(false);
hbox2->addWidget(qcheck2);
}
QLabel *l2 = new QLabel("Command Line:", this);
l2->setFixedHeight(l2->sizeHint().height());
l2->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
vbox->addWidget(l2);
cmdline = new QLineEdit(this);
cmdline->setFixedHeight(cmdline->sizeHint().height());
cmdline->setMinimumWidth(250);
cmdline->setText("");
vbox->addWidget(cmdline);
QLabel *l3 = new QLabel("Substitutions:\n"
"%p\tPID\n"
"%c\tCOMMAND\n%C\tCMDLINE\n%u\tUSER\n"
"%%\t%\n"
"\n",
this);
l3->setFrameStyle(QFrame::Panel);
l3->setFrameShadow(QFrame::Sunken);
l3->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); // | Qt::ExpandTabs);
vbox->addWidget(l3);
QHBoxLayout *hl = new QHBoxLayout;
vbox->addLayout(hl);
new0 = new QPushButton("New...", this);
hl->addWidget(new0);
add = new QPushButton("Add...", this);
hl->addWidget(add);
del = new QPushButton("Delete", this);
hl->addWidget(del);
button_ok = new QPushButton("Close", this);
hl->addWidget(button_ok);
connect(listview, SIGNAL(clicked(const QModelIndex &)),
SLOT(set_select(const QModelIndex &)));
connect(new0, SIGNAL(clicked()), SLOT(new_cmd()));
connect(add, SIGNAL(clicked()), SLOT(add_new()));
connect(del, SIGNAL(clicked()), SLOT(del_current()));
connect(button_ok, SIGNAL(clicked()), SLOT(close()));
connect(name, SIGNAL(textChanged(const QString &)),
SLOT(event_name_midified(const QString &)));
connect(cmdline, SIGNAL(textChanged(const QString &)),
SLOT(event_cmd_modified()));
// connect(qcheck1, SIGNAL(toggled ( bool ) ),
// SLOT(event_toolbar_checked(bool
// )));
TBloon *bloon = new TBloon(this);
/// for(int i = 0; i < commands.size(); i++)
/// listview->insertItem(commands[i]->name);
// listview->addItem(commands[i]->name);
/// vbox->freeze();
}
// DEL
void CommandDialog::event_toolbar_checked(bool on)
{
// name->text();
int idx = find_command(name->text());
if (idx >= 0)
commands[idx]->toolbar = on;
/// controlbar->update_bar();
}
void CommandDialog::event_name_midified(const QString &new_name)
{
int idx;
FUNC_START;
// printf("debug:changed_description() start \n");
idx = find_command(new_name);
if (idx == -1)
{
add->setEnabled(1);
}
else
add->setEnabled(0);
// printf("debug:changed_description() end \n");
}
// if modified then call this function
void CommandDialog::event_cmd_modified()
{
int idx;
// if(name->text()=="") return;
if (find_command(name->text()) < 0)
return;
idx = find_command(name->text());
commands[idx]->name = name->text();
commands[idx]->cmdline = cmdline->text();
emit command_change();
}
// set the description,cmdline from current selected QListBox item
void CommandDialog::set_buttons(int index)
{
if (index < 0)
{
new_cmd();
return;
}
/*
//bool sel = (lb->currentRow() >= 0);
Command *c ;
if(sel)
//c = commands[find_command(lb->currentText())];
c = commands[find_command(lb->currentText())];
else
c = commands[find_command(lb->text(index))];
name->setText(c->name);
cmdline->setText(c->cmdline);
del->setEnabled(sel);
*/
}
// called when clicked !
void CommandDialog::set_select(const QModelIndex &index)
{
Command *c =
static_cast<Command *>(index.internalPointer()); // never Null ?
/*
if (item==NULL) return; // important
Command *c = commands[find_command(item->text())];
*/
name->setText(c->name);
cmdline->setText(c->cmdline);
// DEL qcheck1->setChecked(c->toolbar);
// qcheck2->setChecked(c->popup);
// bool sel = (listview->currentItem() >= 0);
if (c->name == "Update")
del->setEnabled(false);
else
del->setEnabled(true);
}
void CommandDialog::reset()
{
listview->reset();
name->setText("");
cmdline->setText("");
add->setText("Add...");
add->setEnabled(0);
button_ok->setEnabled(1);
listview->clearSelection();
}
void CommandDialog::new_cmd()
{
reset();
add->setEnabled(1);
name->setFocus();
}
void CommandDialog::add_new()
{
if (name->text() == "")
return;
// commands.add(new Command(name->text(),
// cmdline->text(),qcheck1->isChecked
// () ));
commands.append(new Command(name->text(), cmdline->text(), false));
check_commandAll(); // TEMP
listview->reset();
add->setEnabled(0);
del->setEnabled(0);
button_ok->setEnabled(1);
emit command_change(); // notice to refresh Qps::make_command_menu()
// control_bar->update_bar(); // ** important
}
void CommandDialog::del_current()
{
int idx = find_command(name->text());
if (idx >= 0)
{
// printf("del\n");
commands.removeAt(idx);
listview->reset(); // listview->reset();
// control_bar->update_bar();
emit command_change(); // notice to refresh menu_commands
}
}
// CommandModel
CommandModel::CommandModel(QObject *parent) {}
CommandModel::~CommandModel() {}
QModelIndex CommandModel::index(int row, int column,
const QModelIndex &parent) const
{
if (row >= 0 and column >= 0 and row < commands.size() and column < 1)
{
Command *cmd = commands[row];
return createIndex(row, column, cmd);
}
else
return QModelIndex();
}
QModelIndex CommandModel::parent(const QModelIndex &child) const
{
return QModelIndex();
}
int CommandModel::rowCount(const QModelIndex &parent) const
{
return commands.size();
}
// int CommandModel::columnCount(const QModelIndex &parent) const{return 1;};
QVariant CommandModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole)
{
Command *cmd = static_cast<Command *>(index.internalPointer());
return cmd->name;
}
if (role == Qt::DecorationRole)
{
}
return QVariant();
}
void CommandModel::update() {} // TEMP
//----------------------------------------------------------------
QList<watchCond *> watchlist;
QList<ExecWindow *> execlist;
extern WatchdogDialog *watchdogDialog;
@ -689,509 +287,3 @@ void watchdog_syscpu(int cpu)
// QMessageBox::warning(0, "Watchdog", "aaaaa"); //blocking
}
}
// ExecWindow
ExecWindow::ExecWindow()
{
setupUi(this);
// connect(okButton, SIGNAL(clicked()), this, SLOT(close()));
// show();
}
ExecWindow::~ExecWindow() {}
// eventcat_id;
ExecWindow::ExecWindow(watchCond *wc, int pid, QString cmd)
{
setupUi(this);
setWindowTitle("Qps Watchdog");
wcond = wc;
QString str;
if (wc->cond == WATCH_PROCESS_START)
{
textEdit->append(cmd + "(" + QString::number(pid) + ")" + " start");
}
if (wc->cond == WATCH_PROCESS_FINISH)
textEdit->append(cmd + "(" + QString::number(pid) + ")" + " finished");
flag_started = false;
pr = new QProcess; // leak?
if (!wc->command.isEmpty()) // conflict pid's command
{
pr->start(wc->command); // thread run, if null then segfault occurs. ?
}
connect(okButton, SIGNAL(clicked()), this, SLOT(cmd_ok()));
connect(pr, SIGNAL(started()), this, SLOT(cmd_started()));
connect(pr, SIGNAL(finished(int, QProcess::ExitStatus)), this,
SLOT(cmd_finished(int, QProcess::ExitStatus)));
connect(pr, SIGNAL(error(QProcess::ProcessError)), this,
SLOT(cmd_error(QProcess::ProcessError)));
show();
execlist.append(this);
}
ExecWindow::ExecWindow(QString str, QString exec_cmd, int pid, QString cmd)
{
setupUi(this);
//
}
// QProcess: Destroyed while process is still running.(Segmentation fault)
void ExecWindow::cmd_ok()
{
if (pr->state() == QProcess::Running)
{
// pr->kill();
pr->terminate();
return;
}
close(); // Qt::WA_DeleteOnClose
}
// slot : catch terminate signal.
void ExecWindow::cmd_finished(int exitCode, QProcess::ExitStatus exitStatus)
{
textEdit->append(wcond->command + " exit with code " +
QString::number(exitStatus));
okButton->setText("Close");
delete pr;
}
void ExecWindow::cmd_started()
{
textEdit->append(wcond->command + " [running]");
okButton->setText("terminate command");
flag_started = true;
}
void ExecWindow::cmd_error(QProcess::ProcessError e)
{
// not found command
// Error ? :
if (e == QProcess::FailedToStart)
// textEdit->append("Error : command not found [" +
// command + "]" + "(code
//" + QString::number(e) + ")" );
textEdit->append("Error " + QString::number(e) + " : [" +
wcond->command + "] Maybe command not found");
delete pr;
}
void ExecWindow::setText(QString str)
{
textEdit->append(str);
// label->setText(str);
}
WatchdogDialog::WatchdogDialog()
{
setupUi(this);
listmodel = new ListModel();
tableView->setModel(listmodel);
checkBoxDelegate delegate;
tableView->setEditTriggers(QAbstractItemView::SelectedClicked);
/// tableView->setItemDelegate(&delegate);
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
tableView->setSelectionMode(QAbstractItemView::SingleSelection);
QHeaderView *h = tableView->verticalHeader();
h->setVisible(false);
QHeaderView *v = tableView->horizontalHeader();
#if QT_VERSION >= 0x050000
v->setSectionResizeMode(0, QHeaderView::Stretch);
v->setSectionResizeMode(1, QHeaderView::ResizeToContents);
#endif
// v->setClickable (false);
connect(newButton, SIGNAL(clicked()), this, SLOT(_new()));
connect(closeButton, SIGNAL(clicked()), this, SLOT(apply()));
connect(addButton, SIGNAL(clicked()), this, SLOT(add()));
connect(delButton, SIGNAL(clicked()), this, SLOT(del()));
connect(comboBox, SIGNAL(activated(int)), SLOT(comboChanged(int)));
connect(comboBox, SIGNAL(highlighted(const QString &)),
SLOT(condChanged(const QString &)));
connect(tableView, SIGNAL(clicked(const QModelIndex &)),
SLOT(eventcat_slected(const QModelIndex &)));
connect(message, SIGNAL(textEdited(const QString &)),
SLOT(Changed(const QString &)));
connect(command, SIGNAL(textEdited(const QString &)),
SLOT(Changed(const QString &)));
connect(proc_name, SIGNAL(textEdited(const QString &)),
SLOT(Changed(const QString &)));
connect(comboBox, SIGNAL(activated(const QString &)),
SLOT(Changed(const QString &)));
checkBox_alreadyrun->hide();
listView->hide();
spinBox->hide();
label_cpu->hide();
/// printf("close ...\n");
// tableView->update();
// listmodel->update(); // meaningless..
TBloon *bloon = new TBloon(this);
return;
}
void WatchdogDialog::showEvent(QShowEvent *event)
{
// Qt 4.4.0 bug?
// printf("show!!!!!!!!!\n");
listmodel->update();
}
void WatchdogDialog::comboChanged(int idx)
{
// itemText(idx);
QString str = comboBox->currentText();
if (str.contains("cpu"))
{
label_cpu->show();
spinBox->show();
}
else
{
spinBox->hide();
label_cpu->hide();
}
if (str.contains("process"))
{
label_procname->show();
proc_name->show();
}
else
{
label_procname->hide();
proc_name->hide();
}
if (message->text().isEmpty())
{
// if(str.contains("start")) message->setText("%CMD start
// with pid %PID");
// if(str.contains("finish")) message->setText("%CMD
// finish with pid
//%PID");
}
}
void WatchdogDialog::eventcat_slected(const QModelIndex &idx)
{
watchCond *w = watchlist[idx.row()];
// printf("row=%d\n",at=idx.row());
if (idx.column() == 1)
{
w->enable = !(w->enable);
listmodel->update(idx.row());
return;
}
QString str = idx.data().toString(); // Qt::DisplayRol
if (str.contains("process"))
proc_name->setText(w->procname);
else
proc_name->setText("");
if (str.contains("cpu"))
spinBox->setSingleStep(w->cpu);
else
spinBox->setSingleStep(50);
if (str.contains("exec"))
command->setText(w->command);
else
command->setText("");
if (str.contains("showmsg"))
message->setText(w->message);
else
message->setText("");
checkCombo();
comboBox->setCurrentIndex(w->cond);
}
void WatchdogDialog::Changed(const QString &str)
{
QModelIndex idx = tableView->currentIndex();
// QModelIndexList list=tableView->selectedIndexes ();
bool flag = tableView->selectionModel()->hasSelection();
// if(list.count() and idx.isValid())
if (flag and idx.isValid())
{
int at = idx.row();
watchCond *w = watchlist[at];
w->message = message->text();
w->command = command->text();
w->procname = proc_name->text();
w->cond = comboBox->currentIndex();
listmodel->update(at);
// watchlist.removeAt(at);
}
// listmodel->update();
}
void WatchdogDialog::checkCombo()
{
if (comboBox->count() == 1)
{
comboBox->clear();
comboBox->addItem("if process start");
comboBox->addItem("if process finish");
return;
}
}
// comboChanged() -> checkCombo()
void WatchdogDialog::condChanged(const QString &str)
{
checkCombo();
// what is this?
// printf("chagend\n");
// comboBox->currentText();
// command->text();
// message->text();
}
void WatchdogDialog::_new()
{
tableView->clearSelection();
proc_name->clear();
command->clear();
message->clear();
comboBox->clear();
comboBox->addItem("select condition");
}
void WatchdogDialog::add()
{
watchCond *w = new watchCond;
w->enable = true;
w->cond = comboBox->currentIndex();
w->command = command->text();
w->message = message->text();
w->procname = proc_name->text();
watchlist.append(w);
// listView->update(QModelIndex());
// listView->reset();
// tableView->reset();
// listmodel->insertRow(listmodel->rowCount(QModelIndex()));
// tableView->update(QModelIndex());
// tableView->dataChanged(QModelIndex(),QModelIndex()); //protected
listmodel->update();
}
void WatchdogDialog::del()
{
// QModelIndex idx=listView->currentIndex();
QModelIndex idx = tableView->currentIndex();
if (idx.isValid())
{
int at = idx.row();
watchlist.removeAt(at);
}
listmodel->update();
tableView->setCurrentIndex(idx);
}
void WatchdogDialog::apply()
{
qps->write_settings();
close();
}
QModelIndex ListModel::index(int row, int column,
const QModelIndex &parent) const
{
// printf("index %d %d\n",row,column);
if (row >= 0 and column >= 0 and row < watchlist.size())
{
if (column < 2)
{
watchCond *item = watchlist[row];
return createIndex(row, column, item);
}
}
return QModelIndex();
}
void ListModel::update(int row)
{
emit dataChanged(index(row, 0), index(row, 1));
}
void ListModel::update(const QModelIndex &idx) { emit dataChanged(idx, idx); }
// Pure Virtual
QModelIndex ListModel::parent(const QModelIndex &child) const
{
return QModelIndex(); // no parent!
}
int ListModel::rowCount(const QModelIndex &parent) const
{
return watchlist.size();
}
QVariant ListModel::headerData(int section, Qt::Orientation orientation,
int role) const
{
// printf("headerData\n");
if (role == Qt::DisplayRole)
{
if (section == 0)
return QString("Event Category");
if (section == 1)
return QString("Enable");
}
/*
if (role == Qt::FontRole)
{
QFont f=QFont();
f.setBold(false);
return f;
} */
if (role == Qt::SizeHintRole)
{
// return QSize(18,18);
}
return QVariant();
}
QVariant ListModel::data(const QModelIndex &index, int role) const
{
// printf("data\n");
watchCond *item = static_cast<watchCond *>(index.internalPointer());
if (index.column() == 0)
{
if (role == Qt::DisplayRole)
{
return QString(item->getstring());
}
if (role == Qt::DecorationRole)
{
}
if (role == Qt::EditRole)
{
}
}
if (index.column() == 1)
{
if (role == Qt::CheckStateRole)
{
if (item->enable)
return Qt::Checked;
else
return Qt::Unchecked;
}
if (role == Qt::TextAlignmentRole)
return Qt::AlignRight;
if (role == Qt::EditRole)
{
}
}
if (role == Qt::SizeHintRole)
{
// return QSize(18,18);
}
return QVariant();
}
// void CommandModel::update(){} //TEMP
#include <QSpinBox>
checkBoxDelegate::checkBoxDelegate(QObject *parent) : QItemDelegate(parent) {}
//! [0]
//! [1]
QWidget *checkBoxDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
printf("createEditor\n");
// return 0;
if (index.column() == 1)
{
QSpinBox *editor = new QSpinBox(parent);
editor->setMinimum(0);
editor->setMaximum(100);
return editor;
}
return QItemDelegate::createEditor(parent, option, index);
return 0;
}
//! [1]
//! [2]
void checkBoxDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
printf("setEditorData\n");
return;
// if(index
if (index.column() == 1)
{
int value = index.model()->data(index, Qt::EditRole).toInt();
// int value=0;
QSpinBox *spinBox = static_cast<QSpinBox *>(editor);
spinBox->setValue(value);
}
}
//! [2]
//! [3]
void checkBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
printf("setModelData\n");
return;
if (index.column() == 1)
{
QSpinBox *spinBox = static_cast<QSpinBox *>(editor);
spinBox->interpretText();
int value = spinBox->value();
model->setData(index, value, Qt::EditRole);
}
}
//! [3]
//! [4]
void checkBoxDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
printf("updateEditorGeometry\n");
// if(index.column()==1)
editor->setGeometry(option.rect);
}
//! [4]
void checkBoxDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
printf("paint\n");
if (index.column() == 1)
{
QVariant value = 0; // index.model()->data(index, Qt::UserRole);
/* if (!isSupportedType(value.type())) {
QStyleOptionViewItem myOption = option;
myOption.state &= ~QStyle::State_Enabled;
QItemDelegate::paint(painter, myOption, index);
return;
} */
}
QItemDelegate::paint(painter, option, index);
}
// QSize QAbstractItemDelegate::sizeHint ( const QStyleOptionViewItem & option,
// const QModelIndex & index ) const [pure virtual]

@ -1,7 +1,7 @@
// command.h emacs, this is written in -*-c++-*-
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdegård, 1997-1999
// Author: Mattias Engdeg<EFBFBD>rd, 1997-1999
#ifndef COMMAND_H
#define COMMAND_H
@ -18,8 +18,7 @@
#include "proc.h"
#include "misc.h"
int find_command(QString s);
void add_default_command();
class ListModel;
class Command
{
@ -41,186 +40,4 @@ class Command
bool popup;
};
class CommandModel : public QAbstractItemModel
{
Q_OBJECT
public:
CommandModel(QObject *parent = 0);
~CommandModel();
QModelIndex index(int row, int column, const QModelIndex &parent) const;
QModelIndex parent(const QModelIndex &child) const;
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const { return 1; };
QVariant data(const QModelIndex &index, int role) const;
// Qt::ItemFlags flags(const QModelIndex &index) const;
void update(); // TEMP
};
// class CommandDialog : public QWidget
class CommandDialog : public QDialog
{
Q_OBJECT
public:
CommandDialog();
signals:
void command_change();
protected slots:
void new_cmd();
void add_new();
void del_current();
void set_buttons(int);
void reset();
void set_select(const QModelIndex &);
void event_name_midified(const QString &new_name);
void event_cmd_modified();
void event_toolbar_checked(bool);
private:
QListView *listview;
QPushButton *new0, *add, *del, *edit, *button_ok;
QLineEdit *name, *cmdline;
QCheckBox *qcheck1;
QCheckBox *qcheck2;
};
#include <QItemDelegate>
class checkBoxDelegate : public QItemDelegate
// class checkBoxDelegate : public QAbstractItemDelegate
{
Q_OBJECT
public:
checkBoxDelegate(QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
};
#include <QStandardItemModel>
// class ListModel : public QAbstractItemModel
class ListModel : public QAbstractTableModel
// class ListModel : public QStandardItemModel
{
Q_OBJECT
public:
ListModel(QObject *parent = 0){};
~ListModel(){};
QModelIndex index(int row, int column,
const QModelIndex &parent = QModelIndex()) const; // pure
QModelIndex parent(const QModelIndex &child) const; // pure virtual
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const { return 2; };
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation o, int role) const;
// QMap<int, QVariant> itemData ( const QModelIndex & index ) const
//;
void update()
{ // reset();
}
void update(const QModelIndex &idx);
void update(int row);
// Qt::ItemFlags flags(const QModelIndex &index) const;
// void update(); //TEMP
};
#include "ui_watchdog.h"
class WatchdogDialog : public QDialog, private Ui_EventDialog
{
Q_OBJECT
public:
WatchdogDialog();
ListModel *listmodel;
// signals:
// void command_change();
void checkCombo();
protected slots:
void _new();
void apply();
void add();
void del();
void condChanged(const QString &str);
void Changed(const QString &str);
void comboChanged(int);
void eventcat_slected(const QModelIndex &idx);
protected:
virtual void showEvent(QShowEvent *event);
// void set_select( const QModelIndex & );
// void event_name_midified(const QString &new_name);
// void event_cmd_modified();
// void event_toolbar_checked(bool);
private:
};
#define WATCH_PROCESS_START 0
#define WATCH_PROCESS_FINISH 1
#define WATCH_PROCESS_CPU_OVER 2
#define WATCH_SYS_CPU_OVER 3
#define WATCH_SYS_CPU_UNDER 4
// if process [name] start, exec [command], showmsg [xxx]
// if process [name] finish exec [command], showmsg [xxx]
// if system cpu over [90%], exec [command], msg [xxx]
// if system cpu under [10%], exec [command], msg [xxx]
// if process [name] cpu over [90%] exec [command] msg [xxx]
// if process [name] start, kill_it, msg [xxx]
// if process [name] start, soundplay [ ], msg [xxx]
class watchCond
{
public:
int cond;
int enable;
int cpu;
QString procname;
QString command;
QString message;
watchCond()
{
enable = 0;
// procname[0]=0; command[0]=0;
// message[0]=0;
}
// key [txt] [a]
// QString getVal(QString &str, QString &key)
QString getVal(QString &str, const char *key);
QString getstring();
void putstring(QString str);
};
#include <QProcess>
#include "ui_message.h"
class ExecWindow : public QWidget, private Ui_ExecWindow
{
Q_OBJECT
public:
ExecWindow();
ExecWindow(QString str, QString exec_cmd, int pid = 0, QString cmd = "");
ExecWindow(watchCond *wc, int pid = 0, QString cmd = "");
~ExecWindow();
void setText(QString str);
QProcess *pr;
// QProcess proc;
QString execmd;
int flag_started;
watchCond *wcond;
protected slots:
void cmd_started();
void cmd_finished(int exitCode, QProcess::ExitStatus exitStatus);
void cmd_error(QProcess::ProcessError error);
void cmd_ok();
};
#endif // COMMAND_H

@ -0,0 +1,257 @@
// commanddialog.cpp
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#include "commanddialog.h"
#include "qps.h"
#include "command.h"
#include "commandutils.h"
#include "commandmodel.h"
#include <QListView>
#include <QPushButton>
#include <QLineEdit>
#include <QCheckBox>
#include <QModelIndex>
#include <QLabel>
#include <QMessageBox>
#include <QLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFrame>
extern QList<Command *> commands;
CommandDialog::CommandDialog()
{
setWindowTitle("Edit Commands 0.1 alpha");
// setWindowFlags(Qt::WindowStaysOnTopHint);
QHBoxLayout *hbox = new QHBoxLayout(this); // TOP
CommandModel *cmdModel = new CommandModel(this);
// item list
listview = new QListView(this);
listview->setModel(cmdModel);
listview->setFixedWidth(fontMetrics().width("0") * 16);
hbox->addWidget(listview);
QVBoxLayout *vbox = new QVBoxLayout; // TOP-> RIGHT
hbox->addLayout(vbox);
QHBoxLayout *h1 = new QHBoxLayout;
vbox->addLayout(h1);
QLabel *l1 = new QLabel("Name:", this);
h1->addWidget(l1);
name = new QLineEdit(this);
name->setMinimumWidth(170);
name->setText("");
h1->addWidget(name);
QHBoxLayout *hbox2 = new QHBoxLayout;
vbox->addLayout(hbox2);
// qcheck1 = new QCheckBox (this);
// qcheck1->setText("Toolbar");
// qcheck1->setEnabled(false);
// hbox2->addWidget(qcheck1);
if (0)
{
qcheck2 = new QCheckBox(this);
qcheck2->setText("Popup");
qcheck2->setEnabled(false);
hbox2->addWidget(qcheck2);
}
QLabel *l2 = new QLabel("Command Line:", this);
l2->setFixedHeight(l2->sizeHint().height());
l2->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
vbox->addWidget(l2);
cmdline = new QLineEdit(this);
cmdline->setFixedHeight(cmdline->sizeHint().height());
cmdline->setMinimumWidth(250);
cmdline->setText("");
vbox->addWidget(cmdline);
QLabel *l3 = new QLabel("Substitutions:\n"
"%p\tPID\n"
"%c\tCOMMAND\n%C\tCMDLINE\n%u\tUSER\n"
"%%\t%\n"
"\n",
this);
l3->setFrameStyle(QFrame::Panel);
l3->setFrameShadow(QFrame::Sunken);
l3->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); // | Qt::ExpandTabs);
vbox->addWidget(l3);
QHBoxLayout *hl = new QHBoxLayout;
vbox->addLayout(hl);
new0 = new QPushButton("New...", this);
hl->addWidget(new0);
add = new QPushButton("Add...", this);
hl->addWidget(add);
del = new QPushButton("Delete", this);
hl->addWidget(del);
button_ok = new QPushButton("Close", this);
hl->addWidget(button_ok);
connect(listview, SIGNAL(clicked(const QModelIndex &)),
SLOT(set_select(const QModelIndex &)));
connect(new0, SIGNAL(clicked()), SLOT(new_cmd()));
connect(add, SIGNAL(clicked()), SLOT(add_new()));
connect(del, SIGNAL(clicked()), SLOT(del_current()));
connect(button_ok, SIGNAL(clicked()), SLOT(close()));
connect(name, SIGNAL(textChanged(const QString &)),
SLOT(event_name_midified(const QString &)));
connect(cmdline, SIGNAL(textChanged(const QString &)),
SLOT(event_cmd_modified()));
// connect(qcheck1, SIGNAL(toggled ( bool ) ),
// SLOT(event_toolbar_checked(bool
// )));
TBloon *bloon = new TBloon(this);
/// for(int i = 0; i < commands.size(); i++)
/// listview->insertItem(commands[i]->name);
// listview->addItem(commands[i]->name);
/// vbox->freeze();
}
// DEL
void CommandDialog::event_toolbar_checked(bool on)
{
// name->text();
int idx = find_command(name->text());
if (idx >= 0)
commands[idx]->toolbar = on;
/// controlbar->update_bar();
}
void CommandDialog::event_name_midified(const QString &new_name)
{
int idx;
FUNC_START;
// printf("debug:changed_description() start \n");
idx = find_command(new_name);
if (idx == -1)
{
add->setEnabled(1);
}
else
add->setEnabled(0);
// printf("debug:changed_description() end \n");
}
// if modified then call this function
void CommandDialog::event_cmd_modified()
{
int idx;
// if(name->text()=="") return;
if (find_command(name->text()) < 0)
return;
idx = find_command(name->text());
commands[idx]->name = name->text();
commands[idx]->cmdline = cmdline->text();
emit command_change();
}
// set the description,cmdline from current selected QListBox item
void CommandDialog::set_buttons(int index)
{
if (index < 0)
{
new_cmd();
return;
}
/*
//bool sel = (lb->currentRow() >= 0);
Command *c ;
if(sel)
//c = commands[find_command(lb->currentText())];
c = commands[find_command(lb->currentText())];
else
c = commands[find_command(lb->text(index))];
name->setText(c->name);
cmdline->setText(c->cmdline);
del->setEnabled(sel);
*/
}
// called when clicked !
void CommandDialog::set_select(const QModelIndex &index)
{
Command *c =
static_cast<Command *>(index.internalPointer()); // never Null ?
/*
if (item==NULL) return; // important
Command *c = commands[find_command(item->text())];
*/
name->setText(c->name);
cmdline->setText(c->cmdline);
// DEL qcheck1->setChecked(c->toolbar);
// qcheck2->setChecked(c->popup);
// bool sel = (listview->currentItem() >= 0);
if (c->name == "Update")
del->setEnabled(false);
else
del->setEnabled(true);
}
void CommandDialog::reset()
{
listview->reset();
name->setText("");
cmdline->setText("");
add->setText("Add...");
add->setEnabled(0);
button_ok->setEnabled(1);
listview->clearSelection();
}
void CommandDialog::new_cmd()
{
reset();
add->setEnabled(1);
name->setFocus();
}
void CommandDialog::add_new()
{
if (name->text() == "")
return;
// commands.add(new Command(name->text(),
// cmdline->text(),qcheck1->isChecked
// () ));
commands.append(new Command(name->text(), cmdline->text(), false));
check_commandAll(); // TEMP
listview->reset();
add->setEnabled(0);
del->setEnabled(0);
button_ok->setEnabled(1);
emit command_change(); // notice to refresh Qps::make_command_menu()
// control_bar->update_bar(); // ** important
}
void CommandDialog::del_current()
{
int idx = find_command(name->text());
if (idx >= 0)
{
// printf("del\n");
commands.removeAt(idx);
listview->reset(); // listview->reset();
// control_bar->update_bar();
emit command_change(); // notice to refresh menu_commands
}
}

@ -0,0 +1,47 @@
// commanddialog.h
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#ifndef COMMANDDIALOG_H
#define COMMANDDIALOG_H
#include <QDialog>
class QListView;
class QPushButton;
class QLineEdit;
class QCheckBox;
class QModelIndex;
// class CommandDialog : public QWidget
class CommandDialog : public QDialog
{
Q_OBJECT
public:
CommandDialog();
signals:
void command_change();
protected slots:
void new_cmd();
void add_new();
void del_current();
void set_buttons(int);
void reset();
void set_select(const QModelIndex &);
void event_name_midified(const QString &new_name);
void event_cmd_modified();
void event_toolbar_checked(bool);
private:
QListView *listview;
QPushButton *new0, *add, *del, *edit, *button_ok;
QLineEdit *name, *cmdline;
QCheckBox *qcheck1;
QCheckBox *qcheck2;
};
#endif // COMMANDDIALOG_H

@ -0,0 +1,47 @@
// commandmodel.cpp
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#include "commandmodel.h"
#include "command.h"
extern QList<Command *> commands;
CommandModel::CommandModel(QObject *parent) {}
CommandModel::~CommandModel() {}
QModelIndex CommandModel::index(int row, int column,
const QModelIndex &parent) const
{
if (row >= 0 and column >= 0 and row < commands.size() and column < 1)
{
Command *cmd = commands[row];
return createIndex(row, column, cmd);
}
else
return QModelIndex();
}
QModelIndex CommandModel::parent(const QModelIndex &child) const
{
return QModelIndex();
}
int CommandModel::rowCount(const QModelIndex &parent) const
{
return commands.size();
}
// int CommandModel::columnCount(const QModelIndex &parent) const{return 1;};
QVariant CommandModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole)
{
Command *cmd = static_cast<Command *>(index.internalPointer());
return cmd->name;
}
if (role == Qt::DecorationRole)
{
}
return QVariant();
}
void CommandModel::update() {} // TEMP

@ -0,0 +1,21 @@
// commandmodel.h emacs, this is written in -*-c++-*-
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdegård, 1997-1999
#include <QAbstractItemModel>
class CommandModel : public QAbstractItemModel
{
Q_OBJECT
public:
CommandModel(QObject *parent = 0);
~CommandModel();
QModelIndex index(int row, int column, const QModelIndex &parent) const;
QModelIndex parent(const QModelIndex &child) const;
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const { return 1; };
QVariant data(const QModelIndex &index, int role) const;
// Qt::ItemFlags flags(const QModelIndex &index) const;
void update(); // TEMP
};

@ -0,0 +1,76 @@
// commandutils.cpp
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#include "commandutils.h"
#include <command.h>
extern QList<Command *> commands;
int find_command(QString s)
{
for (int i = 0; i < commands.size(); i++)
if (s == commands[i]->name)
return i;
return -1;
}
// DEL has "&" end of the string ?
bool hasAmpersand(QString cmdline)
{
QString str;
int len;
str = cmdline.simplified();
if (str == "%update")
return true; // internal command
len = str.length();
if (str[len - 1] == '&')
return true;
else
return false;
}
void check_command(int idx) {}
//
void check_commandAll()
{
int i, idx;
return;
for (int i = 0; i < commands.size(); i++)
{
if (hasAmpersand(commands[i]->cmdline) == false)
commands[i]->cmdline.append("&");
}
}
// after read ~/.qpsrc
void add_default_command()
{
int idx;
/*
idx=find_command("Update");
if (idx>=0)
commands[idx]->cmdline="%update";
else
commands.add(new Command("Update","%update",true));
*/
/*
* PAUSED
idx=find_command("Quit");
if (idx>=0)
commands[idx]->cmdline="killall qps";
else commands.add(new Command("Quit","killall qps",false));
*/
// check_commandAll(); DEL?
}

@ -0,0 +1,17 @@
// commandutils.h
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#ifndef COMMANDUTILS_H
#define COMMANDUTILS_H
#include <QString>
int find_command(QString s);
bool hasAmpersand(QString cmdline);
void check_command(int idx);
void check_commandAll();
void add_default_command();
#endif // COMMANDUTILS_H

@ -17,6 +17,7 @@
#include "proc.h"
#include "lookup.h"
#include "tablefield.h"
class Details : public QWidget
{
@ -45,15 +46,6 @@ signals:
Proc *pr;
};
struct TableField
{
const char *name;
int width;
int gap;
int align;
const char *tooltip;
};
// SimpleTable: a HeadedTable with fixed number of columns
#include "htable.h"
class SimpleTable : public HeadedTable

@ -0,0 +1,112 @@
// execwindow.cpp
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#include "execwindow.h"
#include "watchcond.h"
QList<ExecWindow *> execlist;
// ExecWindow
ExecWindow::ExecWindow()
{
setupUi(this);
// connect(okButton, SIGNAL(clicked()), this, SLOT(close()));
// show();
}
ExecWindow::~ExecWindow() {}
// eventcat_id;
ExecWindow::ExecWindow(watchCond *wc, int pid, QString cmd)
{
setupUi(this);
setWindowTitle("Qps Watchdog");
wcond = wc;
QString str;
if (wc->cond == WATCH_PROCESS_START)
{
textEdit->append(cmd + "(" + QString::number(pid) + ")" + " start");
}
if (wc->cond == WATCH_PROCESS_FINISH)
textEdit->append(cmd + "(" + QString::number(pid) + ")" + " finished");
flag_started = false;
pr = new QProcess; // leak?
if (!wc->command.isEmpty()) // conflict pid's command
{
pr->start(wc->command); // thread run, if null then segfault occurs. ?
}
connect(okButton, SIGNAL(clicked()), this, SLOT(cmd_ok()));
connect(pr, SIGNAL(started()), this, SLOT(cmd_started()));
connect(pr, SIGNAL(finished(int, QProcess::ExitStatus)), this,
SLOT(cmd_finished(int, QProcess::ExitStatus)));
connect(pr, SIGNAL(error(QProcess::ProcessError)), this,
SLOT(cmd_error(QProcess::ProcessError)));
show();
execlist.append(this);
}
ExecWindow::ExecWindow(QString str, QString exec_cmd, int pid, QString cmd)
{
setupUi(this);
//
}
// QProcess: Destroyed while process is still running.(Segmentation fault)
void ExecWindow::cmd_ok()
{
if (pr->state() == QProcess::Running)
{
// pr->kill();
pr->terminate();
return;
}
close(); // Qt::WA_DeleteOnClose
}
// slot : catch terminate signal.
void ExecWindow::cmd_finished(int exitCode, QProcess::ExitStatus exitStatus)
{
textEdit->append(wcond->command + " exit with code " +
QString::number(exitStatus));
okButton->setText("Close");
delete pr;
}
void ExecWindow::cmd_started()
{
textEdit->append(wcond->command + " [running]");
okButton->setText("terminate command");
flag_started = true;
}
void ExecWindow::cmd_error(QProcess::ProcessError e)
{
// not found command
// Error ? :
if (e == QProcess::FailedToStart)
// textEdit->append("Error : command not found [" +
// command + "]" + "(code
//" + QString::number(e) + ")" );
textEdit->append("Error " + QString::number(e) + " : [" +
wcond->command + "] Maybe command not found");
delete pr;
}
void ExecWindow::setText(QString str)
{
textEdit->append(str);
// label->setText(str);
}

@ -0,0 +1,37 @@
// execwindow.h
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#ifndef EXECWINDOW_H
#define EXECWINDOW_H
#include <QProcess>
#include <QString>
#include "ui_message.h"
class watchCond;
class ExecWindow : public QWidget, private Ui_ExecWindow
{
Q_OBJECT
public:
ExecWindow();
ExecWindow(QString str, QString exec_cmd, int pid = 0, QString cmd = "");
ExecWindow(watchCond *wc, int pid = 0, QString cmd = "");
~ExecWindow();
void setText(QString str);
QProcess *pr;
// QProcess proc;
QString execmd;
int flag_started;
watchCond *wcond;
protected slots:
void cmd_started();
void cmd_finished(int exitCode, QProcess::ExitStatus exitStatus);
void cmd_error(QProcess::ProcessError error);
void cmd_ok();
};
#endif // EXECWINDOW_H

@ -0,0 +1,107 @@
// listmodel.cpp
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#include "listmodel.h"
#include "watchcond.h"
extern QList<watchCond *> watchlist;
QModelIndex ListModel::index(int row, int column,
const QModelIndex &parent) const
{
// printf("index %d %d\n",row,column);
if (row >= 0 and column >= 0 and row < watchlist.size())
{
if (column < 2)
{
watchCond *item = watchlist[row];
return createIndex(row, column, item);
}
}
return QModelIndex();
}
void ListModel::update(int row)
{
emit dataChanged(index(row, 0), index(row, 1));
}
void ListModel::update(const QModelIndex &idx) { emit dataChanged(idx, idx); }
// Pure Virtual
QModelIndex ListModel::parent(const QModelIndex &child) const
{
return QModelIndex(); // no parent!
}
int ListModel::rowCount(const QModelIndex &parent) const
{
return watchlist.size();
}
QVariant ListModel::headerData(int section, Qt::Orientation orientation,
int role) const
{
// printf("headerData\n");
if (role == Qt::DisplayRole)
{
if (section == 0)
return QString("Event Category");
if (section == 1)
return QString("Enable");
}
/*
if (role == Qt::FontRole)
{
QFont f=QFont();
f.setBold(false);
return f;
} */
if (role == Qt::SizeHintRole)
{
// return QSize(18,18);
}
return QVariant();
}
QVariant ListModel::data(const QModelIndex &index, int role) const
{
// printf("data\n");
watchCond *item = static_cast<watchCond *>(index.internalPointer());
if (index.column() == 0)
{
if (role == Qt::DisplayRole)
{
return QString(item->getstring());
}
if (role == Qt::DecorationRole)
{
}
if (role == Qt::EditRole)
{
}
}
if (index.column() == 1)
{
if (role == Qt::CheckStateRole)
{
if (item->enable)
return Qt::Checked;
else
return Qt::Unchecked;
}
if (role == Qt::TextAlignmentRole)
return Qt::AlignRight;
if (role == Qt::EditRole)
{
}
}
if (role == Qt::SizeHintRole)
{
// return QSize(18,18);
}
return QVariant();
}

@ -0,0 +1,36 @@
// listmodel.h
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#ifndef LISTMODEL_H
#define LISTMODEL_H
#include <QStandardItemModel>
// class ListModel : public QAbstractItemModel
class ListModel : public QAbstractTableModel
// class ListModel : public QStandardItemModel
{
Q_OBJECT
public:
ListModel(QObject *parent = 0){};
~ListModel(){};
QModelIndex index(int row, int column,
const QModelIndex &parent = QModelIndex()) const; // pure
QModelIndex parent(const QModelIndex &child) const; // pure virtual
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const { return 2; };
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation o, int role) const;
// QMap<int, QVariant> itemData ( const QModelIndex & index ) const
//;
void update()
{ // reset();
}
void update(const QModelIndex &idx);
void update(int row);
// Qt::ItemFlags flags(const QModelIndex &index) const;
// void update(); //TEMP
};
#endif // LISTMODEL_H

@ -1211,5 +1211,3 @@ void QTabWidgetX::showTab(bool flag)
// setDocumentMode (true); // QT 4.5
#endif
}
#include "qticonloader.cpp"

@ -29,8 +29,6 @@
#include <QTimeLine>
#endif
#include "qticonloader.h"
char *userName(int uid, int euid);
char *groupName(int gid, int egid);

@ -41,7 +41,12 @@
#include <unistd.h> //for sleep
#include "qps.h"
#include "qpsapp.h"
#include "dialogs.h"
#include "commanddialog.h"
#include "commandutils.h"
#include "watchcond.h"
#include "watchdogdialog.h"
#include "lookup.h"
#include "misc.h"
@ -196,9 +201,7 @@ Qps::Qps()
#endif
m_field->addSeparator();
// act=m_field->addAction(QtIconLoader::icon("edit-find-replace"),"Save
// Current as Custom Fields",this, SLOT(menu_custom()));
act = m_field->addAction(QtIconLoader::icon("edit-find-replace"),
act = m_field->addAction(QIcon::fromTheme(QStringLiteral("edit-find-replace")),
"Select Custom Fields...", this,
SLOT(menu_custom()));
act->setData(MENU_CUSTOM);
@ -229,10 +232,7 @@ Qps::Qps()
act->setData(QVariant(MENU_CUMUL));
m_options->addSeparator();
// m_options->addAction(QtIconLoader::icon("gtk-preferences" /*
// gnome-settings
// */),"Preferences...", this, SLOT(menu_prefs())); //MENU_PREFS
m_options->addAction(QIcon(":icon/preferences-system.png"),
m_options->addAction(QIcon::fromTheme(QStringLiteral("preferences-system")),
"Preferences...", this,
SLOT(menu_prefs())); // MENU_PREFS
@ -240,8 +240,7 @@ Qps::Qps()
QMenu *m_help = new QMenu("Help", this);
// m_help->addAction("FAQ", this, SLOT(license()));
// m_help->addAction("About", this, SLOT(about())); //gtk-help,help
m_help->addAction(QtIconLoader::icon("help-about"), "Feedback", this,
m_help->addAction(QIcon::fromTheme("help-about"), "Feedback", this,
SLOT(about()));
// menu = new QMenuBar(this);
@ -1187,10 +1186,7 @@ void Qps::make_command_menu()
//#ifdef SOLARIS
/* Solaris CDE don't have a tray, so we need a method to terminate */
m_command->addSeparator();
// m_command->addAction(QtIconLoader::icon("application-exit"), "&Quit",
// this,
// SLOT(save_quit()), Qt::ALT + Qt::Key_Q);
m_command->addAction(QtIconLoader::icon("gtk-quit"), "&Quit", this,
m_command->addAction(QIcon::fromTheme(QStringLiteral("application-exit")), "&Quit", this,
SLOT(save_quit()), Qt::ALT + Qt::Key_Q);
//#endif
}
@ -2145,80 +2141,6 @@ void Qps::hideEvent(QHideEvent *event)
// geo=saveGeometry();
}
// MOD!!!: For systray update.
// this trick very suck, but I can't find a better solution.
class QpsApp : public QApplication
{
public:
QpsApp(int &argc, char **argv) : QApplication(argc, argv){};
void commitData(QSessionManager &sm);
void saveState(QSessionManager &manager);
/*
virtual bool x11EventFilter ( XEvent *xev ){
// catch X11 event for systray_update !! which event?
///if(trayicon!=NULL) return
trayicon->checkNewTrayEvent(xev);
return false; // events to qt.
}; */
};
#include <QSessionManager>
void QpsApp::saveState(QSessionManager &manager)
{
// printf("saveState()\n");
// manager.setRestartHint(QSessionManager::RestartIfRunning);
// manager.release();
}
// this is called when X Logout
// closeEvent() never called !!!
void QpsApp::commitData(QSessionManager &manager)
{
/*
printf("commitData()\n");
manager.setRestartHint(QSessionManager::RestartIfRunning);
qps->flag_exit=true; // ready to Logout
qps->save_settings() ;
manager.release();
sleep(2);
return;
if (manager.allowsInteraction()) {
int ret = QMessageBox::warning(
qps,
tr("My Application"),
tr("Save changes to document?"),
QMessageBox::Save | QMessageBox::Discard |
QMessageBox::Cancel);
switch (ret) {
case QMessageBox::Save:
manager.release();
// if (!saveDocument()) manager.cancel();
break;
case QMessageBox::Discard:
break;
case QMessageBox::Cancel:
default:
manager.cancel();
}
} else {
manager.release();
// we did not get permission to interact, then
// do something reasonable instead
}
*/
/*
//DEL sm.release();
qDebug("Qps: Session saved\n");
// sm.cancel();
//sm.setRestartHint (QSessionManager::RestartIfRunning);
QApplication::commitData(sm);
*/
}
#include <signal.h>
void signal_handler(int sig)
{

@ -43,6 +43,9 @@
#define FUNC_END
#include <QSystemTrayIcon>
class CommandDialog;
class Qps : public QWidget
{
Q_OBJECT

@ -0,0 +1,61 @@
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
// fasthyun@magicn.com 2005-2012
// daehyun.yang@gmail.com 2015-
#include "qpsapp.h"
void QpsApp::saveState(QSessionManager &manager)
{
// printf("saveState()\n");
// manager.setRestartHint(QSessionManager::RestartIfRunning);
// manager.release();
}
// this is called when X Logout
// closeEvent() never called !!
void QpsApp::commitData(QSessionManager &manager)
{
/*
printf("commitData()\n");
manager.setRestartHint(QSessionManager::RestartIfRunning);
qps->flag_exit=true; // ready to Logout
qps->save_settings() ;
manager.release();
sleep(2);
return;
if (manager.allowsInteraction()) {
int ret = QMessageBox::warning(
qps,
tr("My Application"),
tr("Save changes to document?"),
QMessageBox::Save | QMessageBox::Discard |
QMessageBox::Cancel);
switch (ret) {
case QMessageBox::Save:
manager.release();
// if (!saveDocument()) manager.cancel();
break;
case QMessageBox::Discard:
break;
case QMessageBox::Cancel:
default:
manager.cancel();
}
} else {
manager.release();
// we did not get permission to interact, then
// do something reasonable instead
}
*/
/*
//DEL sm.release();
qDebug("Qps: Session saved\n");
// sm.cancel();
//sm.setRestartHint (QSessionManager::RestartIfRunning);
QApplication::commitData(sm);
*/
}

@ -0,0 +1,29 @@
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
// fasthyun@magicn.com 2005-2012
// daehyun.yang@gmail.com 2015-
#ifndef QPSAPP_H
#define QPSAPP_H
#include <QApplication>
// MOD!!!: For systray update.
// this trick very suck, but I can't find a better solution.
class QpsApp : public QApplication
{
public:
QpsApp(int &argc, char **argv) : QApplication(argc, argv){};
void commitData(QSessionManager &sm);
void saveState(QSessionManager &manager);
/*
virtual bool x11EventFilter ( XEvent *xev ){
// catch X11 event for systray_update !! which event?
///if(trayicon!=NULL) return
trayicon->checkNewTrayEvent(xev);
return false; // events to qt.
}; */
};
#endif // QPSAPP_H

@ -1,389 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** Commercial Usage
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain
** additional rights. These rights are described in the Nokia Qt LGPL
** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
** package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at qt-sales@nokia.com.
**
****************************************************************************/
#include "qticonloader.h"
#include <QtGui/QPixmapCache>
#include <QtCore/QList>
#include <QtCore/QHash>
#include <QtCore/QDir>
#include <QtCore/QString>
#include <QtCore/QLibrary>
#include <QtCore/QSettings>
#include <QtCore/QTextStream>
#ifdef Q_WS_X11
class QIconTheme
{
public:
QIconTheme(QHash<int, QString> dirList, QStringList parents)
: _dirList(dirList), _parents(parents), _valid(true)
{
}
QIconTheme() : _valid(false) {}
QHash<int, QString> dirList() { return _dirList; }
QStringList parents() { return _parents; }
bool isValid() { return _valid; }
private:
QHash<int, QString> _dirList;
QStringList _parents;
bool _valid;
};
class QtIconLoaderImplementation
{
public:
QtIconLoaderImplementation();
QPixmap findIcon(int size, const QString &name) const;
private:
QIconTheme parseIndexFile(const QString &themeName) const;
void lookupIconTheme() const;
QPixmap findIconHelper(int size, const QString &themeName,
const QString &iconName, QStringList &visited) const;
mutable QString themeName;
mutable QStringList iconDirs;
mutable QHash<QString, QIconTheme> themeList;
};
Q_GLOBAL_STATIC(QtIconLoaderImplementation, iconLoaderInstance)
#endif
/*!
Returns the standard icon for the given icon /a name
as specified in the freedesktop icon spec
http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
/a fallback is an optional argument to specify the icon to be used if
no icon is found on the platform. This is particularily useful for
crossplatform code.
*/
QIcon QtIconLoader::icon(const QString &name, const QIcon &fallback)
{
QIcon icon;
#ifdef Q_WS_X11
QString pngExtension(QLatin1String(".png"));
QList<int> iconSizes;
iconSizes << 16 << 24 << 32 << 48 << 64;
Q_FOREACH (int size, iconSizes)
{
icon.addPixmap(
iconLoaderInstance()->findIcon(size, name + pngExtension));
// icon.addPixmap(iconLoaderInstance()->findIcon(size,
// name));
}
#endif
if (icon.isNull())
icon = fallback;
Q_UNUSED(name);
return icon;
}
#ifdef Q_WS_X11
QtIconLoaderImplementation::QtIconLoaderImplementation() { lookupIconTheme(); }
extern "C" {
struct GConfClient;
struct GError;
typedef void (*Ptr_g_type_init)();
typedef GConfClient *(*Ptr_gconf_client_get_default)();
typedef char *(*Ptr_gconf_client_get_string)(GConfClient *, const char *,
GError **);
typedef void (*Ptr_g_object_unref)(void *);
typedef void (*Ptr_g_error_free)(GError *);
typedef void (*Ptr_g_free)(void *);
static Ptr_g_type_init p_g_type_init = 0;
static Ptr_gconf_client_get_default p_gconf_client_get_default = 0;
static Ptr_gconf_client_get_string p_gconf_client_get_string = 0;
static Ptr_g_object_unref p_g_object_unref = 0;
static Ptr_g_error_free p_g_error_free = 0;
static Ptr_g_free p_g_free = 0;
}
static int kdeVersion()
{
static int version = qgetenv("KDE_SESSION_VERSION").toInt();
return version;
}
static QString kdeHome()
{
static QString kdeHomePath;
if (kdeHomePath.isEmpty())
{
kdeHomePath = QFile::decodeName(qgetenv("KDEHOME"));
if (kdeHomePath.isEmpty())
{
int kdeSessionVersion = kdeVersion();
QDir homeDir(QDir::homePath());
QString kdeConfDir(QLatin1String("/.kde"));
if (4 == kdeSessionVersion &&
homeDir.exists(QLatin1String(".kde4")))
kdeConfDir = QLatin1String("/.kde4");
kdeHomePath = QDir::homePath() + kdeConfDir;
}
}
return kdeHomePath;
}
void QtIconLoaderImplementation::lookupIconTheme() const
{
#ifdef Q_WS_X11
QString dataDirs = QFile::decodeName(getenv("XDG_DATA_DIRS"));
if (dataDirs.isEmpty())
dataDirs = QLatin1String("/usr/local/share/:/usr/share/");
dataDirs.prepend(QDir::homePath() + QLatin1String("/:"));
iconDirs = dataDirs.split(QLatin1Char(':'));
// If we are running GNOME we resolve and use GConf. In all other
// cases we currently use the KDE icon theme
if (qgetenv("DESKTOP_SESSION") == "gnome" ||
!qgetenv("GNOME_DESKTOP_SESSION_ID").isEmpty())
{
if (themeName.isEmpty())
{
// Resolve glib and gconf
p_g_type_init = (Ptr_g_type_init)QLibrary::resolve(
QLatin1String("gobject-2.0"), 0, "g_type_init");
p_gconf_client_get_default =
(Ptr_gconf_client_get_default)QLibrary::resolve(
QLatin1String("gconf-2"), 4, "gconf_client_get_default");
p_gconf_client_get_string =
(Ptr_gconf_client_get_string)QLibrary::resolve(
QLatin1String("gconf-2"), 4, "gconf_client_get_string");
p_g_object_unref = (Ptr_g_object_unref)QLibrary::resolve(
QLatin1String("gobject-2.0"), 0, "g_object_unref");
p_g_error_free = (Ptr_g_error_free)QLibrary::resolve(
QLatin1String("glib-2.0"), 0, "g_error_free");
p_g_free = (Ptr_g_free)QLibrary::resolve(QLatin1String("glib-2.0"),
0, "g_free");
if (p_g_type_init && p_gconf_client_get_default &&
p_gconf_client_get_string && p_g_object_unref &&
p_g_error_free && p_g_free)
{
p_g_type_init();
GConfClient *client = p_gconf_client_get_default();
GError *err = 0;
char *str = p_gconf_client_get_string(
client, "/desktop/gnome/interface/icon_theme", &err);
if (!err)
{
themeName = QString::fromUtf8(str);
p_g_free(str);
}
p_g_object_unref(client);
if (err)
p_g_error_free(err);
}
if (themeName.isEmpty())
themeName = QLatin1String("gnome");
}
if (!themeName.isEmpty())
return;
}
// KDE (and others)
if (dataDirs.isEmpty())
dataDirs = QLatin1String("/usr/local/share/:/usr/share/");
dataDirs += QLatin1Char(':') + kdeHome() + QLatin1String("/share");
dataDirs.prepend(QDir::homePath() + QLatin1String("/:"));
QStringList kdeDirs =
QFile::decodeName(getenv("KDEDIRS")).split(QLatin1Char(':'));
Q_FOREACH (const QString dirName, kdeDirs)
dataDirs.append(QLatin1Char(':') + dirName + QLatin1String("/share"));
iconDirs = dataDirs.split(QLatin1Char(':'));
QFileInfo fileInfo(QLatin1String("/usr/share/icons/default.kde"));
QDir dir(fileInfo.canonicalFilePath());
QString kdeDefault = kdeVersion() >= 4 ? QString::fromLatin1("oxygen")
: QString::fromLatin1("crystalsvg");
QString defaultTheme = fileInfo.exists() ? dir.dirName() : kdeDefault;
QSettings settings(kdeHome() + QLatin1String("/share/config/kdeglobals"),
QSettings::IniFormat);
settings.beginGroup(QLatin1String("Icons"));
themeName = settings.value(QLatin1String("Theme"), defaultTheme).toString();
#endif
}
QIconTheme
QtIconLoaderImplementation::parseIndexFile(const QString &themeName) const
{
QIconTheme theme;
QFile themeIndex;
QStringList parents;
QHash<int, QString> dirList;
for (int i = 0; i < iconDirs.size() && !themeIndex.exists(); ++i)
{
const QString &contentDir = QLatin1String(
iconDirs[i].startsWith(QDir::homePath()) ? "/.icons/" : "/icons/");
themeIndex.setFileName(iconDirs[i] + contentDir + themeName +
QLatin1String("/index.theme"));
}
if (themeIndex.exists())
{
QSettings indexReader(themeIndex.fileName(), QSettings::IniFormat);
Q_FOREACH (const QString &key, indexReader.allKeys())
{
if (key.endsWith("/Size"))
{
if (int size = indexReader.value(key).toInt())
dirList.insertMulti(size, key.left(key.size() - 5));
}
}
// Parent themes provide fallbacks for missing icons
parents = indexReader.value(QLatin1String("Icon Theme/Inherits"))
.toStringList();
}
if (kdeVersion() >= 3)
{
QFileInfo fileInfo(QLatin1String("/usr/share/icons/default.kde"));
QDir dir(fileInfo.canonicalFilePath());
QString defaultKDETheme =
dir.exists() ? dir.dirName()
: kdeVersion() == 3 ? QString::fromLatin1("crystalsvg")
: QString::fromLatin1("oxygen");
if (!parents.contains(defaultKDETheme) && themeName != defaultKDETheme)
parents.append(defaultKDETheme);
}
else if (parents.isEmpty() && themeName != QLatin1String("hicolor"))
{
parents.append(QLatin1String("hicolor"));
}
theme = QIconTheme(dirList, parents);
return theme;
}
QPixmap QtIconLoaderImplementation::findIconHelper(int size,
const QString &themeName,
const QString &iconName,
QStringList &visited) const
{
QPixmap pixmap;
if (!themeName.isEmpty())
{
visited << themeName;
QIconTheme theme = themeList.value(themeName);
if (!theme.isValid())
{
theme = parseIndexFile(themeName);
themeList.insert(themeName, theme);
}
if (!theme.isValid())
return QPixmap();
QList<QString> subDirs = theme.dirList().values(size);
for (int i = 0; i < iconDirs.size(); ++i)
{
for (int j = 0; j < subDirs.size(); ++j)
{
QString contentDir = (iconDirs[i].startsWith(QDir::homePath()))
? QLatin1String("/.icons/")
: QLatin1String("/icons/");
QString fileName = iconDirs[i] + contentDir + themeName +
QLatin1Char('/') + subDirs[j] +
QLatin1Char('/') + iconName;
QFile file(fileName);
if (file.exists())
pixmap.load(fileName);
if (!pixmap.isNull())
break;
}
}
if (pixmap.isNull())
{
QStringList parents = theme.parents();
// search recursively through inherited themes
for (int i = 0; pixmap.isNull() && i < parents.size(); ++i)
{
QString parentTheme = parents[i].trimmed();
if (!visited.contains(parentTheme)) // guard
// against
// endless
// recursion
pixmap =
findIconHelper(size, parentTheme, iconName, visited);
}
}
}
return pixmap;
}
QPixmap QtIconLoaderImplementation::findIcon(int size,
const QString &name) const
{
QPixmap pixmap;
QString pixmapName = QLatin1String("$qt") + name + QString::number(size);
if (QPixmapCache::find(pixmapName, pixmap))
return pixmap;
if (!themeName.isEmpty())
{
QStringList visited;
pixmap = findIconHelper(size, themeName, name, visited);
}
QPixmapCache::insert(pixmapName, pixmap);
return pixmap;
}
#endif // Q_WS_X11

@ -1,55 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** Commercial Usage
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain
** additional rights. These rights are described in the Nokia Qt LGPL
** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
** package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at qt-sales@nokia.com.
**
****************************************************************************/
#ifndef QTICONLOADER_H
#define QTICONLOADER_H
#include <QtGui/QIcon>
// This is the QtIconLoader
// Version 0.1
//
class QtIconLoader
{
public:
static QIcon icon(const QString &name, const QIcon &fallback = QIcon());
};
#endif // QTICONLOADER_H

@ -0,0 +1,18 @@
// tablefield.h emacs, this is written in -*-c++-*-
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdegård, 1997-1999
#ifndef TABLEFIELD_H
#define TABLEFIELD_H
struct TableField
{
const char *name;
int width;
int gap;
int align;
const char *tooltip;
};
#endif // TABLEFIELD_H

@ -0,0 +1,76 @@
// watchcond.cpp
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#include "watchcond.h"
QString watchCond::getVal(QString &str, const char *key)
{
int n; // key.length();
int idx = str.indexOf(key);
if (idx < 0)
return "cant' found";
idx = str.indexOf("[", idx);
if (idx < 0)
return "[ error";
int idx_end = str.indexOf("]", idx);
if (idx_end < 0)
return "] error";
n = idx_end - idx;
return str.mid(idx + 1, n - 1);
}
QString watchCond::getstring()
{
QString string;
string.clear();
switch (cond)
{
case WATCH_PROCESS_FINISH:
string.append("if process [" + procname + "] finish, ");
// string=string.sprintf("if process [%s] finish",procname);
break;
case WATCH_PROCESS_START:
string.append("if process [" + procname + "] start, ");
break;
case WATCH_SYS_CPU_OVER:
string.append("if sys_cpu over [" + QString::number(cpu) + "], ");
break;
case WATCH_SYS_CPU_UNDER:
string.append("if sys_cpu under [" + QString::number(cpu) + "], ");
break;
default:
;
}
if (!command.isEmpty())
string.append("exec [" + command + "] ");
if (!message.isEmpty())
string.append("showmsg [" + message + "] ");
if (enable)
string.append("enabled");
else
string.append("disabled");
return string;
}
void watchCond::putstring(QString str)
{
if (str.contains("if process"))
{
if (str.contains("start"))
cond = WATCH_PROCESS_START;
if (str.contains("finish"))
cond = WATCH_PROCESS_FINISH;
procname = getVal(str, "if process");
}
if (str.contains("exec"))
command = getVal(str, "exec");
if (str.contains("showmsg"))
message = getVal(str, "showmsg");
if (str.contains("enabled"))
enable = true;
else
enable = false;
}

@ -0,0 +1,50 @@
// watchcond.h
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#ifndef WATCHCOND_H
#define WATCHCOND_H
#include <QString>
#define WATCH_PROCESS_START 0
#define WATCH_PROCESS_FINISH 1
#define WATCH_PROCESS_CPU_OVER 2
#define WATCH_SYS_CPU_OVER 3
#define WATCH_SYS_CPU_UNDER 4
// if process [name] start, exec [command], showmsg [xxx]
// if process [name] finish exec [command], showmsg [xxx]
// if system cpu over [90%], exec [command], msg [xxx]
// if system cpu under [10%], exec [command], msg [xxx]
// if process [name] cpu over [90%] exec [command] msg [xxx]
// if process [name] start, kill_it, msg [xxx]
// if process [name] start, soundplay [ ], msg [xxx]
class watchCond
{
public:
int cond;
int enable;
int cpu;
QString procname;
QString command;
QString message;
watchCond()
{
enable = 0;
// procname[0]=0; command[0]=0;
// message[0]=0;
}
// key [txt] [a]
// QString getVal(QString &str, QString &key)
QString getVal(QString &str, const char *key);
QString getstring();
void putstring(QString str);
};
#endif // WATCHCOND_H

@ -0,0 +1,239 @@
// watchdialog.h
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#include "watchdogdialog.h"
#include "listmodel.h"
#include "checkboxdelegate.h"
#include "misc.h" // TBloon class
#include "qps.h"
#include "watchcond.h"
#include <QShowEvent>
extern QList<watchCond *> watchlist;
extern Qps *qps;
WatchdogDialog::WatchdogDialog()
{
setupUi(this);
listmodel = new ListModel();
tableView->setModel(listmodel);
checkBoxDelegate delegate;
tableView->setEditTriggers(QAbstractItemView::SelectedClicked);
/// tableView->setItemDelegate(&delegate);
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
tableView->setSelectionMode(QAbstractItemView::SingleSelection);
QHeaderView *h = tableView->verticalHeader();
h->setVisible(false);
QHeaderView *v = tableView->horizontalHeader();
#if QT_VERSION >= 0x050000
v->setSectionResizeMode(0, QHeaderView::Stretch);
v->setSectionResizeMode(1, QHeaderView::ResizeToContents);
#endif
// v->setClickable (false);
connect(newButton, SIGNAL(clicked()), this, SLOT(_new()));
connect(closeButton, SIGNAL(clicked()), this, SLOT(apply()));
connect(addButton, SIGNAL(clicked()), this, SLOT(add()));
connect(delButton, SIGNAL(clicked()), this, SLOT(del()));
connect(comboBox, SIGNAL(activated(int)), SLOT(comboChanged(int)));
connect(comboBox, SIGNAL(highlighted(const QString &)),
SLOT(condChanged(const QString &)));
connect(tableView, SIGNAL(clicked(const QModelIndex &)),
SLOT(eventcat_slected(const QModelIndex &)));
connect(message, SIGNAL(textEdited(const QString &)),
SLOT(Changed(const QString &)));
connect(command, SIGNAL(textEdited(const QString &)),
SLOT(Changed(const QString &)));
connect(proc_name, SIGNAL(textEdited(const QString &)),
SLOT(Changed(const QString &)));
connect(comboBox, SIGNAL(activated(const QString &)),
SLOT(Changed(const QString &)));
checkBox_alreadyrun->hide();
listView->hide();
spinBox->hide();
label_cpu->hide();
/// printf("close ...\n");
// tableView->update();
// listmodel->update(); // meaningless..
TBloon *bloon = new TBloon(this);
return;
}
void WatchdogDialog::showEvent(QShowEvent *event)
{
// Qt 4.4.0 bug?
// printf("show!!!!!!!!!\n");
listmodel->update();
}
void WatchdogDialog::comboChanged(int idx)
{
// itemText(idx);
QString str = comboBox->currentText();
if (str.contains("cpu"))
{
label_cpu->show();
spinBox->show();
}
else
{
spinBox->hide();
label_cpu->hide();
}
if (str.contains("process"))
{
label_procname->show();
proc_name->show();
}
else
{
label_procname->hide();
proc_name->hide();
}
if (message->text().isEmpty())
{
// if(str.contains("start")) message->setText("%CMD start
// with pid %PID");
// if(str.contains("finish")) message->setText("%CMD
// finish with pid
//%PID");
}
}
void WatchdogDialog::eventcat_slected(const QModelIndex &idx)
{
watchCond *w = watchlist[idx.row()];
// printf("row=%d\n",at=idx.row());
if (idx.column() == 1)
{
w->enable = !(w->enable);
listmodel->update(idx.row());
return;
}
QString str = idx.data().toString(); // Qt::DisplayRol
if (str.contains("process"))
proc_name->setText(w->procname);
else
proc_name->setText("");
if (str.contains("cpu"))
spinBox->setSingleStep(w->cpu);
else
spinBox->setSingleStep(50);
if (str.contains("exec"))
command->setText(w->command);
else
command->setText("");
if (str.contains("showmsg"))
message->setText(w->message);
else
message->setText("");
checkCombo();
comboBox->setCurrentIndex(w->cond);
}
void WatchdogDialog::Changed(const QString &str)
{
QModelIndex idx = tableView->currentIndex();
// QModelIndexList list=tableView->selectedIndexes ();
bool flag = tableView->selectionModel()->hasSelection();
// if(list.count() and idx.isValid())
if (flag and idx.isValid())
{
int at = idx.row();
watchCond *w = watchlist[at];
w->message = message->text();
w->command = command->text();
w->procname = proc_name->text();
w->cond = comboBox->currentIndex();
listmodel->update(at);
// watchlist.removeAt(at);
}
// listmodel->update();
}
void WatchdogDialog::checkCombo()
{
if (comboBox->count() == 1)
{
comboBox->clear();
comboBox->addItem("if process start");
comboBox->addItem("if process finish");
return;
}
}
// comboChanged() -> checkCombo()
void WatchdogDialog::condChanged(const QString &str)
{
checkCombo();
// what is this?
// printf("chagend\n");
// comboBox->currentText();
// command->text();
// message->text();
}
void WatchdogDialog::_new()
{
tableView->clearSelection();
proc_name->clear();
command->clear();
message->clear();
comboBox->clear();
comboBox->addItem("select condition");
}
void WatchdogDialog::add()
{
watchCond *w = new watchCond;
w->enable = true;
w->cond = comboBox->currentIndex();
w->command = command->text();
w->message = message->text();
w->procname = proc_name->text();
watchlist.append(w);
// listView->update(QModelIndex());
// listView->reset();
// tableView->reset();
// listmodel->insertRow(listmodel->rowCount(QModelIndex()));
// tableView->update(QModelIndex());
// tableView->dataChanged(QModelIndex(),QModelIndex()); //protected
listmodel->update();
}
void WatchdogDialog::del()
{
// QModelIndex idx=listView->currentIndex();
QModelIndex idx = tableView->currentIndex();
if (idx.isValid())
{
int at = idx.row();
watchlist.removeAt(at);
}
listmodel->update();
tableView->setCurrentIndex(idx);
}
void WatchdogDialog::apply()
{
qps->write_settings();
close();
}

@ -0,0 +1,48 @@
// watchdogdialog.cpp
//
// This program is free software. See the file COPYING for details.
// Author: Mattias Engdeg?rd, 1997-1999
#ifndef WATCHDOGDIALOG_H
#define WATCHDOGDIALOG_H
#include "ui_watchdog.h"
#include <QDialog>
#include <QModelIndex>
#include <QString>
class ListModel;
class QShowEvent;
class WatchdogDialog : public QDialog, private Ui_EventDialog
{
Q_OBJECT
public:
WatchdogDialog();
ListModel *listmodel;
// signals:
// void command_change();
void checkCombo();
protected slots:
void _new();
void apply();
void add();
void del();
void condChanged(const QString &str);
void Changed(const QString &str);
void comboChanged(int);
void eventcat_slected(const QModelIndex &idx);
protected:
virtual void showEvent(QShowEvent *event);
// void set_select( const QModelIndex & );
// void event_name_midified(const QString &new_name);
// void event_cmd_modified();
// void event_toolbar_checked(bool);
private:
};
#endif // WATCHDOGDIALOG_H
Loading…
Cancel
Save