/*
* Copyright (C) 2006 Eskil Bylund
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
using System;
using Gtk;
using Glade;
namespace DCSharp.GUI{
public class MessageArea : VBox
{
private Glade.XML xml;
private TipWindow tipWindow;
[Widget]
private Widget messageArea;
[Widget]
private VBox vbox;
[Widget]
private HBox hbox;
[Widget]
private Image image;
[Widget]
private Label primaryLabel;
[Widget]
private Label secondaryLabel;
#region Constructors
public MessageArea(string primaryText, string secondaryText,
MessageType messageType) : base()
{
xml = new Glade.XML (null, "MessageArea.glade", "messageArea",
null);
xml.BindFields (this);
AppPaintable = true;
BorderWidth = 6;
PrimaryText = primaryText;
SecondaryText = secondaryText;
MessageType = messageType;
tipWindow = new TipWindow();
tipWindow.EnsureStyle();
tipWindow.StyleSet += OnStyleSet;
OnStyleSet(null, null);
PackStart(messageArea);
}
#endregion
#region Classes
private class TipWindow : Gtk.Window
{
public TipWindow() : base(Gtk.WindowType.Popup)
{
Name = "gtk-tooltips";
AppPaintable = true;
BorderWidth = 4;
}
protected override bool OnExposeEvent(Gdk.EventExpose evnt)
{
Gtk.Style.PaintFlatBox(Style, GdkWindow, State, ShadowType.Out,
evnt.Area, this, "tooltip", Allocation.X, Allocation.Y,
Allocation.Width, Allocation.Height);
return base.OnExposeEvent(evnt);
}
}
#endregion
#region Properties
private string primaryText;
public string PrimaryText
{
get
{
return primaryText;
}
set
{
primaryText = value;
primaryLabel.Markup = String.Format("<b>{0}</b>", primaryText);
primaryLabel.Visible = primaryText != null;
}
}
private string secondaryText;
public string SecondaryText
{
get
{
return secondaryText;
}
set
{
secondaryText = value;
secondaryLabel.Text = secondaryText;
secondaryLabel.Visible = secondaryText != null;
}
}
private MessageType messageType;
public MessageType MessageType
{
get
{
return messageType;
}
set
{
messageType = value;
image.Visible = true;
switch (messageType)
{
case MessageType.Error:
image.Stock = Stock.DialogError;
break;
case MessageType.Info:
image.Stock = Stock.DialogInfo;
break;
case MessageType.Question:
image.Stock = Stock.DialogQuestion;
break;
case MessageType.Warning:
image.Stock = Stock.DialogWarning;
break;
default:
image.Visible = false;
break;
}
}
}
public VBox VBox
{
get
{
return vbox;
}
}
public HBox HBox
{
get
{
return hbox;
}
}
#endregion
#region Methods
protected override bool OnExposeEvent(Gdk.EventExpose evnt)
{
Gtk.Style.PaintFlatBox(Style, GdkWindow, State, ShadowType.Out,
evnt.Area, this, "tooltip", Allocation.X, Allocation.Y,
Allocation.Width, Allocation.Height);
return base.OnExposeEvent(evnt);
}
private void OnStyleSet(object obj, StyleSetArgs args)
{
Style = tipWindow.Style.Copy();
}
#endregion
}
}
|