CASA/c_gui/CasaTray.cs

282 lines
7.2 KiB
C#
Raw Normal View History

2005-10-12 17:27:21 +02:00
using Gtk;
using Glade;
using System;
using System.IO;
using System.Diagnostics;
using System.Threading;
using Novell.CASA;
using Novell.CASA.MiCasa.Common;
using Novell.CASA.MiCasa.Communication;
namespace Novell.CASA.GUI
{
public class CasaTray
{
#if W32
private static System.Windows.Forms.NotifyIcon notifyIcon;
public static System.Drawing.Icon m_iconNormal;
public static System.Drawing.Icon m_iconLocked;
#endif
2005-10-13 00:47:25 +02:00
#if W32
2005-10-12 21:30:36 +02:00
EventBox eb;
private Gtk.Image m_imageLocked = new Image("gtk-dialog-authentication", IconSize.Menu);
private Gtk.Image m_imageUnlocked = new Image(Stock.MissingImage, IconSize.Menu);
2005-10-13 00:47:25 +02:00
2005-10-12 21:30:36 +02:00
#endif
2005-10-12 17:27:21 +02:00
private static CasaMain mCasaMain = null;
public CasaTray()
{
#if W32
Stream s = null;
notifyIcon = new System.Windows.Forms.NotifyIcon();
try
{
2005-10-13 00:47:25 +02:00
s = File.OpenRead("../images/CASAIcons.ico");
2005-10-12 17:27:21 +02:00
m_iconNormal = new System.Drawing.Icon(s);
notifyIcon.Icon = m_iconNormal;
}
catch (Exception e)
{
//MessageBox.Show("File 'notify.ico' cannot be found", "Error");
Console.WriteLine(e.ToString());
Console.WriteLine("File 'notify.ico' cannot be found");
return;
}
finally
{
if (s != null)
{
s.Close();
}
}
try
{
2005-10-13 00:47:25 +02:00
s = File.OpenRead("../images/CASAIconsLocked.ico");
2005-10-12 17:27:21 +02:00
m_iconLocked = new System.Drawing.Icon(s);
}
catch (Exception e)
{
2005-10-13 00:47:25 +02:00
Console.WriteLine("File 'CASAIcons.ico' cannot be found");
2005-10-12 17:27:21 +02:00
return;
}
finally
{
if (s != null)
{
s.Close();
}
}
//notifyIcon.Click +=new EventHandler(notifyIcon_Click);
notifyIcon.DoubleClick +=new EventHandler(notifyIcon_DoubleClick);
2005-10-13 00:47:25 +02:00
notifyIcon.MouseUp +=new System.Windows.Forms.MouseEventHandler(notifyIcon_MouseUp);
2005-10-12 17:27:21 +02:00
notifyIcon.Visible = true;
2005-10-13 00:47:25 +02:00
UpdateTrayIcon(MiCASAStore.IsLocked());
2005-10-12 17:27:21 +02:00
#endif
2005-10-12 19:13:47 +02:00
#if LINUX
2005-10-12 17:27:21 +02:00
/* in order to receive signals, we need a eventbox, because Gtk.Image doesn't receive signals */
2005-10-12 21:30:36 +02:00
eb = new EventBox();
2005-10-13 00:47:25 +02:00
eb.Add(); // using stock icon
2005-10-12 17:27:21 +02:00
// hooking event
2005-10-12 21:30:36 +02:00
eb.ButtonPressEvent += new ButtonPressEventHandler (this.OnImageClick);
2005-10-12 17:27:21 +02:00
Egg.TrayIcon icon = new Egg.TrayIcon("Test");
icon.Add(eb);
// showing the trayicon
icon.ShowAll();
#endif
}
private void ShowContextMenu()
{
Menu popupMenu = new Menu(); // creates the menu
MenuItem miSep = new MenuItem();
MenuItem miSep2 = new MenuItem();
MenuItem miSep3 = new MenuItem();
2005-10-13 00:47:25 +02:00
ImageMenuItem menuLaunchGUI = new ImageMenuItem ("Manage Secrets");
Image appimg = new Image("../images/CASA_16.png", IconSize.Menu);
2005-10-12 17:27:21 +02:00
menuLaunchGUI.Image = appimg; // sets the menu item's image
menuLaunchGUI.Activated +=new EventHandler(menuLaunchGUI_Activated);
popupMenu.Add(menuLaunchGUI);
popupMenu.Add(miSep);
ImageMenuItem menuLockMiCasa = new ImageMenuItem ("Lock Secrets");
//appimg = new Image(Stock.Close, IconSize.Menu);
appimg = new Image("gtk-dialog-authentication", IconSize.Menu);
menuLockMiCasa.Image = appimg; // sets the menu item's image
menuLockMiCasa.Activated +=new EventHandler(menuLockMiCasa_Activated);
ImageMenuItem menuUnLockMiCasa = new ImageMenuItem ("Unlock Secrets...");
appimg = new Image(Stock.Open, IconSize.Menu);
menuUnLockMiCasa.Image = appimg; // sets the menu item's image
menuUnLockMiCasa.Activated +=new EventHandler(menuLockMiCasa_Activated);
if (MiCASAStore.IsLocked())
{
menuLockMiCasa.Sensitive = false;
}
else
{
menuUnLockMiCasa.Sensitive = false;
}
popupMenu.Add(menuLockMiCasa);
popupMenu.Add(menuUnLockMiCasa);
popupMenu.Add(miSep2);
ImageMenuItem menuDestroyMiCasa = new ImageMenuItem ("Destroy Secrets");
appimg = new Image(Stock.Delete, IconSize.Menu);
menuDestroyMiCasa.Image = appimg; // sets the menu item's image
menuDestroyMiCasa.Activated +=new EventHandler(menuDestroyMiCasa_Activated);
popupMenu.Add(menuDestroyMiCasa);
ImageMenuItem menuOptionsMiCasa = new ImageMenuItem ("Options ....");
menuOptionsMiCasa.Sensitive = false;
popupMenu.Add(menuOptionsMiCasa);
popupMenu.Add(miSep3);
// creates a menu item with no image as default
ImageMenuItem menuPopup1 = new ImageMenuItem ("Exit");
appimg = new Image(Stock.Quit, IconSize.Menu);
menuPopup1.Image = appimg; // sets the menu item's image
popupMenu.Add(menuPopup1); // adds the menu item to the menu
// hooks a event when the user clicks the icon
menuPopup1.Activated += new EventHandler(this.OnPopupClick);
popupMenu.ShowAll(); // shows everything
// pops up the actual menu when the user right clicks
//popupMenu.Popup(null, null, null, IntPtr.Zero, args.Event.Button, args.Event.Time);
popupMenu.Popup();
}
private void OnImageClick (object o, ButtonPressEventArgs args) // handler for mouse click
{
if (args.Event.Button == 3) //right click
{
ShowContextMenu();
}
}
private void OnPopupClick(object o, EventArgs args)
{
Application.Quit(); // quits the application when the users clicks the popup menu
}
#if W32
private void notifyIcon_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
ShowContextMenu();
}
#endif
public void CasaManagerQuit()
{
mCasaMain = null;
}
private void menuLaunchGUI_Activated(object sender, EventArgs e)
{
if (mCasaMain == null)
mCasaMain = new CasaMain(null);
else
mCasaMain.Focus();
/*
// launch the GUI
Process myProcess = new Process();
#if W32
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("CASAManager.exe");
#else
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("mono");
myProcessStartInfo.Arguments = "/opt/novell/CASA/bin/CASAManager.exe";
#endif
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();
*/
}
private void menuLockMiCasa_Activated(object sender, EventArgs e)
{
if (MiCASAStore.IsLocked())
{
//if( false == miCASA.IsSecretPersistent(1,"") )
CommonGUI cg = new CommonGUI();
cg.HandleUnlock(mCasaMain, this);
//UpdateTrayIcon(false);
}
else
{
MiCasaRequestReply.Send(MiCasaRequestReply.VERB_LOCK_STORE);
if (mCasaMain != null)
mCasaMain.LockGUI();
UpdateTrayIcon(true);
}
}
/*
public bool IsMasterPasswordSet()
{
string MICASA_PASSCODE_BY_MASTER_PASSWD_FILE = "/.miCASAPCByMPasswd";
string fileName = Environment.GetEnvironmentVariable("HOME")+MICASA_PASSCODE_BY_MASTER_PASSWD_FILE;
return (File.Exists(fileName));
}
*/
private void notifyIcon_DoubleClick(object sender, EventArgs e)
{
menuLockMiCasa_Activated(sender, e);
}
private void menuDestroyMiCasa_Activated(object sender, EventArgs e)
{
CommonGUI.menuDestroyMiCasa_Activated(sender, e);
}
internal void UpdateTrayIcon(bool StoreIsLocked)
{
#if W32
if (StoreIsLocked)
2005-10-13 00:47:25 +02:00
{
notifyIcon.Text = "miCASA - Locked";
2005-10-12 17:27:21 +02:00
notifyIcon.Icon = m_iconLocked;
2005-10-13 00:47:25 +02:00
}
2005-10-12 17:27:21 +02:00
else
2005-10-13 00:47:25 +02:00
{
notifyIcon.Text = "miCASA - Not Locked";
2005-10-12 17:27:21 +02:00
notifyIcon.Icon = m_iconNormal;
2005-10-13 00:47:25 +02:00
}
2005-10-12 21:30:36 +02:00
#endif
2005-10-12 17:27:21 +02:00
}
}
}