Что именно было сделано:
- В зависимости от статуса активности веб-сервера меняются иконки в трее (красный квадрат, если сервер остановлен и зелёная галочка, если запущен);
- В контекстное меню добавлены иконки для всех пунктов;
- Также от статуса сервера становятся неактивными некоторые пункты меню. Если сервер запущен, то неактивен пункт "Запустить Apache', а если остановлен, то, наоборот, только он является активным;
- Добавлены пункты "Выход" и "О программе".
Хочу обратить ваше внимание, что для проверки запущенности сервера программа проверяет наличие файла /var/run/apache2.pid. В вашей ОС или дистрибьютиве этот файл может находиться в другом месте.
Используемые иконки я загрузил на
- ifolder.ru: http://ifolder.ru/12674184
- dump.ru: http://dump.ru/file/2916109
Полный код программы:
<?php
$tray = new GtkStatusIcon;
$tray->connect('popup-menu', 'on_popup_menu');
if (file_exists('/var/run/apache2.pid'))
{
$tray->set_tooltip('Веб-сервер запущен');
$tray->set_from_file('./start.png');
}
else
{
$tray->set_tooltip('Веб-сервер остановлен');
$tray->set_from_file('./stop.png');
}
Gtk::main();
function on_popup_menu()
{
global $item, $tray;
$menu = new GtkMenu;
$item['start'] = new GtkImageMenuItem('Запустить Apache');
$item['start']->set_image(GtkImage::new_from_file('./start_small.png'));
$item['start']->connect_simple('activate', 'apache', 'start');
$item['restart'] = new GtkImageMenuItem('Перезапустить Apache');
$item['restart']->set_image(GtkImage::new_from_file('./restart_small.png'));
$item['restart']->connect_simple('activate', 'apache', 'restart');
$item['stop'] = new GtkImageMenuItem('Остановить Apache');
$item['stop']->set_image(GtkImage::new_from_file('./stop_small.png'));
$item['stop']->connect_simple('activate', 'apache', 'stop');
$item['separator_one'] = new GtkSeparatorMenuItem;
$item['about'] = new GtkImageMenuItem(Gtk::STOCK_ABOUT);
$item['about']->connect_simple('activate', 'about');
$item['separator_two'] = new GtkSeparatorMenuItem;
$item['close'] = new GtkMenuItem('Выйти');
$item['close']->connect_simple('activate', array('Gtk', 'main_quit'));
foreach ($item as $value)
$menu->append($value);
if (file_exists('/var/run/apache2.pid'))
{
$item['start']->set_sensitive(FALSE);
}
else
{
$item['restart']->set_sensitive(FALSE);
$item['stop']->set_sensitive(FALSE);
}
$menu->show_all();
$menu->popup();
}
function apache($comand)
{
global $item, $tray;
if ($comand == 'start')
{
$tray->set_tooltip('Веб-сервер запущен');
$tray->set_from_file('./start.png');
$item['start']->set_sensitive(FALSE);
$item['restart']->set_sensitive(TRUE);
$item['stop']->set_sensitive(TRUE);
}
elseif ($comand == 'stop')
{
$tray->set_tooltip('Веб-сервер остановлен');
$tray->set_from_file('./stop.png');
$item['start']->set_sensitive(TRUE);
$item['restart']->set_sensitive(FALSE);
$item['stop']->set_sensitive(FALSE);
}
system('gksu /etc/init.d/apache2 '.$comand);
}
function about()
{
$about = new GtkAboutDialog;
$about->set_program_name('Управление веб-сервером Apache');
$about->set_copyright('Copyright (C) 2009');
$about->set_authors(array('Вавилов Егор <shecspi@gmail.com>'));
$about->set_website('http://shecspi.blogspot.com');
$about->run();
$about->destroy();
}
?>
2 комментария:
Ссылки на иконки у вас битые
Да, их уже удалили. Но это не принципиально. Можно использовать любые. Я взял из набора gnome-look.
Отправить комментарий