mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-05 08:35:26 +00:00
335 lines
7.3 KiB
C#
335 lines
7.3 KiB
C#
/* -*- Mode: C#; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is Manticore.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Silverstone Interactive.
|
|
* Portions created by the Initial Developer are Copyright (C) 2001
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Ben Goodger <ben@netscape.com>
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
namespace Silverstone.Manticore.Toolkit
|
|
{
|
|
using System;
|
|
using System.Collections;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Windows.Forms;
|
|
|
|
|
|
/// <summary>
|
|
/// Summary description for StripBar.
|
|
/// </summary>
|
|
public class StripBar : UserControl
|
|
{
|
|
public StripBar()
|
|
{
|
|
}
|
|
|
|
public ArrayList Rows = new ArrayList();
|
|
public ArrayList Bands = new ArrayList();
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// IStripBar Implementation
|
|
public void AddBand (StripBand aBand)
|
|
{
|
|
Bands.Add(aBand);
|
|
aBand.Bar = this;
|
|
|
|
if (aBand.NewRow)
|
|
{
|
|
StripRow row = new StripRow(this);
|
|
Rows.Add(row);
|
|
aBand.Row = row;
|
|
|
|
row.Bands.Add(aBand);
|
|
|
|
// TODO: Trigger Height-Changed Event
|
|
}
|
|
else
|
|
{
|
|
StripRow row;
|
|
if (Rows.Count >= 1)
|
|
row = Rows[Rows.Count-1] as StripRow;
|
|
else
|
|
{
|
|
row = new StripRow(this);
|
|
Rows.Add(row);
|
|
}
|
|
row.Bands.Add(aBand);
|
|
aBand.Row = row;
|
|
|
|
// Invalidate Row
|
|
Invalidate(row.Bounds);
|
|
}
|
|
}
|
|
|
|
public void RemoveBand(StripBand aStripBand)
|
|
{
|
|
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Overriden Methods
|
|
protected override void OnPaint(PaintEventArgs aPea)
|
|
{
|
|
int rowCount = Rows.Count;
|
|
for (int i = 0; i < rowCount; ++i)
|
|
{
|
|
StripRow currRow = Rows[i] as StripRow;
|
|
if (currRow.Bounds.IntersectsWith(aPea.ClipRectangle))
|
|
currRow.PaintRow(aPea);
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
public class StripBand
|
|
{
|
|
public StripBand()
|
|
{
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// IStripBand Implementation
|
|
protected StripRow mRow;
|
|
public StripRow Row
|
|
{
|
|
get
|
|
{
|
|
return mRow;
|
|
}
|
|
set
|
|
{
|
|
if (value != mRow)
|
|
mRow = value;
|
|
}
|
|
}
|
|
|
|
|
|
protected StripBar mBar;
|
|
public StripBar Bar
|
|
{
|
|
get
|
|
{
|
|
return mBar;
|
|
}
|
|
set
|
|
{
|
|
if (value != mBar)
|
|
mBar = value;
|
|
}
|
|
}
|
|
|
|
|
|
protected int mWidth;
|
|
public int Width
|
|
{
|
|
get
|
|
{
|
|
return mWidth;
|
|
}
|
|
set
|
|
{
|
|
if (value != mWidth)
|
|
mWidth = value;
|
|
}
|
|
}
|
|
|
|
|
|
protected int mHeight = 24;
|
|
public int Height
|
|
{
|
|
get
|
|
{
|
|
// Compute height:
|
|
// height = the larger of - decoration area (icon/text)
|
|
// - client area (control)
|
|
// + nonclient, nondecoration area (borders)
|
|
//
|
|
return mHeight;
|
|
}
|
|
}
|
|
|
|
|
|
protected bool mNewRow = false;
|
|
public bool NewRow
|
|
{
|
|
get
|
|
{
|
|
return mNewRow;
|
|
}
|
|
set
|
|
{
|
|
if (value != mNewRow)
|
|
{
|
|
mNewRow = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
protected Control mControl = null;
|
|
public Control Child
|
|
{
|
|
get
|
|
{
|
|
return mControl;
|
|
}
|
|
set
|
|
{
|
|
if (value != mControl)
|
|
{
|
|
mControl = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
protected Color mBackColor = Color.Red;
|
|
public Color BackColor
|
|
{
|
|
get
|
|
{
|
|
return mBackColor;
|
|
}
|
|
set
|
|
{
|
|
if (value != mBackColor)
|
|
{
|
|
mBackColor = value;
|
|
StripBar bar = mBar as StripBar;
|
|
bar.Invalidate(Bounds);
|
|
}
|
|
}
|
|
}
|
|
|
|
public Rectangle Bounds
|
|
{
|
|
get
|
|
{
|
|
int x, y, w, h, i;
|
|
|
|
int bandCount = mRow.Bands.Count;
|
|
for (i = 0, x = 0; i < bandCount; ++i)
|
|
{
|
|
StripBand currBand = mRow.Bands[i] as StripBand;
|
|
x += currBand.Bounds.Width;
|
|
}
|
|
y = mRow.Bounds.Y;
|
|
|
|
h = Height;
|
|
|
|
w = mBar.Width;
|
|
int bandIndex = mRow.Bands.IndexOf(this);
|
|
if (bandIndex == (mRow.Bands.Count - 1))
|
|
w = mBar.ClientRectangle.Width - x;
|
|
|
|
return new Rectangle(x, y, w, h);
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
//
|
|
public void PaintBand(PaintEventArgs aPea)
|
|
{
|
|
SolidBrush sbr = new SolidBrush(BackColor);
|
|
aPea.Graphics.FillRectangle(sbr, Bounds);
|
|
}
|
|
}
|
|
|
|
public class StripRow
|
|
{
|
|
public StripRow(StripBar aStripBar)
|
|
{
|
|
mStripBar = aStripBar;
|
|
}
|
|
|
|
protected StripBar mStripBar;
|
|
|
|
public ArrayList Bands = new ArrayList();
|
|
|
|
public Rectangle Bounds
|
|
{
|
|
get
|
|
{
|
|
int x, y, w, h;
|
|
w = mStripBar.ClientRectangle.Width;
|
|
h = Height;
|
|
|
|
x = mStripBar.ClientRectangle.Left;
|
|
|
|
int rowCount = mStripBar.Rows.Count;
|
|
StripRow currRow = mStripBar.Rows[0] as StripRow;
|
|
int i = 0;
|
|
for (y = 0; currRow != this; ++i)
|
|
y += currRow.Height;
|
|
|
|
return new Rectangle(x, y, w, h);
|
|
}
|
|
}
|
|
|
|
protected int mHeight = 24;
|
|
public int Height
|
|
{
|
|
get
|
|
{
|
|
return mHeight;
|
|
}
|
|
set
|
|
{
|
|
if (value != mHeight)
|
|
mHeight = value;
|
|
}
|
|
}
|
|
|
|
public void AddBand(StripBand aBand)
|
|
{
|
|
if (aBand.Height > mHeight)
|
|
mHeight = aBand.Height;
|
|
|
|
Bands.Add(aBand);
|
|
}
|
|
|
|
public void PaintRow(PaintEventArgs aPea)
|
|
{
|
|
int bandCount = Bands.Count;
|
|
for (int i = 0; i < bandCount; ++i)
|
|
{
|
|
StripBand currBand = Bands[i] as StripBand;
|
|
currBand.PaintBand(aPea);
|
|
}
|
|
}
|
|
}
|
|
}
|