moel@202: /*
moel@176:   
moel@176:   Version: MPL 1.1/GPL 2.0/LGPL 2.1
moel@176: 
moel@176:   The contents of this file are subject to the Mozilla Public License Version
moel@176:   1.1 (the "License"); you may not use this file except in compliance with
moel@176:   the License. You may obtain a copy of the License at
moel@176:  
moel@176:   http://www.mozilla.org/MPL/
moel@176: 
moel@176:   Software distributed under the License is distributed on an "AS IS" basis,
moel@176:   WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
moel@176:   for the specific language governing rights and limitations under the License.
moel@176: 
moel@176:   The Original Code is the Open Hardware Monitor code.
moel@176: 
moel@176:   The Initial Developer of the Original Code is 
moel@176:   Michael Möller <m.moeller@gmx.ch>.
moel@302:   Portions created by the Initial Developer are Copyright (C) 2010-2011
moel@176:   the Initial Developer. All Rights Reserved.
moel@176: 
moel@176:   Contributor(s):
moel@176: 
moel@176:   Alternatively, the contents of this file may be used under the terms of
moel@176:   either the GNU General Public License Version 2 or later (the "GPL"), or
moel@176:   the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
moel@176:   in which case the provisions of the GPL or the LGPL are applicable instead
moel@176:   of those above. If you wish to allow use of your version of this file only
moel@176:   under the terms of either the GPL or the LGPL, and not to allow others to
moel@176:   use your version of this file under the terms of the MPL, indicate your
moel@176:   decision by deleting the provisions above and replace them with the notice
moel@176:   and other provisions required by the GPL or the LGPL. If you do not delete
moel@176:   the provisions above, a recipient may use your version of this file under
moel@176:   the terms of any one of the MPL, the GPL or the LGPL.
moel@176:  
moel@176: */
moel@176: 
moel@176: using System;
moel@176: using System.Drawing;
moel@176: using System.Windows.Forms;
moel@176: 
moel@176: namespace OpenHardwareMonitor.GUI {
moel@176:   public abstract class Gadget : IDisposable {
moel@176: 
moel@176:     private GadgetWindow window;
moel@176: 
moel@176:     public Gadget() {
moel@176:       this.window = new GadgetWindow();
moel@302:       this.window.Paint += delegate(object sender, PaintEventArgs e) {
moel@302:         OnPaint(e);
moel@302:       };
moel@176:     }
moel@176: 
moel@181:     public virtual void Dispose() {
moel@302:       window.Dispose();
moel@176:     }
moel@176: 
moel@176:     public Point Location {
moel@176:       get {
moel@176:         return window.Location;
moel@176:       }
moel@176:       set {
moel@176:         window.Location = value;
moel@176:       }
moel@176:     }
moel@176: 
moel@176:     public event EventHandler LocationChanged {
moel@176:       add {
moel@176:         window.LocationChanged += value;
moel@176:       }
moel@176:       remove {
moel@176:         window.LocationChanged -= value;
moel@176:       }
moel@176:     }
moel@176: 
moel@183:     public virtual Size Size {
moel@176:       get {
moel@176:         return window.Size; 
moel@176:       }
moel@183:       set {        
moel@183:         this.window.Size = value;
moel@183:       }
moel@183:     }
moel@183: 
moel@183:     public event EventHandler SizeChanged {
moel@183:       add {
moel@183:         window.SizeChanged += value;
moel@183:       }
moel@183:       remove {
moel@183:         window.SizeChanged -= value;
moel@176:       }
moel@176:     }
moel@176: 
moel@176:     public byte Opacity {
moel@176:       get {
moel@176:         return window.Opacity;
moel@176:       }
moel@176:       set {
moel@176:         window.Opacity = value;
moel@176:       }
moel@176:     }
moel@176: 
moel@183:     public bool LockPositionAndSize {
moel@176:       get {
moel@183:         return window.LockPositionAndSize;
moel@176:       }
moel@176:       set {
moel@183:         window.LockPositionAndSize = value;
moel@176:       }
moel@176:     }
moel@176: 
moel@176:     public bool AlwaysOnTop {
moel@176:       get {
moel@176:         return window.AlwaysOnTop;
moel@176:       }
moel@176:       set {
moel@176:         window.AlwaysOnTop = value;
moel@176:       }
moel@176:     }
moel@176: 
moel@176:     public ContextMenu ContextMenu {
moel@176:       get {
moel@176:         return window.ContextMenu;
moel@176:       }
moel@176:       set {
moel@176:         window.ContextMenu = value;
moel@176:       }
moel@176:     }
moel@176: 
moel@183:     public event HitTestEventHandler HitTest {
moel@183:       add {
moel@183:         window.HitTest += value;
moel@183:       }
moel@183:       remove {
moel@183:         window.HitTest -= value;
moel@183:       }
moel@244:     }
moel@244: 
moel@244:     public event MouseEventHandler MouseDoubleClick {
moel@244:       add {
moel@244:         window.MouseDoubleClick += value;
moel@244:       }
moel@244:       remove {
moel@244:         window.MouseDoubleClick -= value;
moel@244:       }
moel@244:     }
moel@183: 
moel@176:     public bool Visible {
moel@176:       get {
moel@176:         return window.Visible;
moel@176:       }
moel@176:       set {
moel@176:         if (value != window.Visible) {
moel@202:           window.Visible = value;
moel@289:           if (VisibleChanged != null)
moel@289:             VisibleChanged(this, EventArgs.Empty);
moel@176:           if (value)
moel@202:             Redraw();          
moel@176:         }
moel@176:       }
moel@176:     }
moel@176: 
moel@289:     public event EventHandler VisibleChanged;
moel@289: 
moel@176:     public void Redraw() {
moel@302:       window.Redraw();
moel@176:     }
moel@176: 
moel@176:     protected abstract void OnPaint(PaintEventArgs e);
moel@176:   
moel@176:   }
moel@176: }