You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeedu/kstars/kstars/infobox.h

227 lines
7.1 KiB

/***************************************************************************
infobox.h - description
-------------------
begin : Thu May 30 2002
copyright : (C) 2002 by Jason Harris
email : jharris@30doradus.org
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#ifndef INFOBOX_H
#define INFOBOX_H
#include <tqobject.h>
#include <tqpoint.h>
#include <tqrect.h>
#include <tqsize.h>
#include <tqstring.h>
/**@class InfoBox
*InfoBoxencapsulates a lightweight floating "window" to be drawn directly
*on a pixmap. The window contains three lines of text, and it can
*be "shaded" to show only the top line. The window resizes itself
*automatically to contain the text within it.
*@author Jason Harris
*@version 1.0
*/
class TQPainter;
class InfoBox : public TQObject {
Q_OBJECT
public:
/**default constructor. Creates an infobox with empty text string
*and default geometry
*/
InfoBox();
/**General constructor. Specify The text string, x,y position and size.
*@param x the X-coordinate for the box
*@param y the Y-coordinate for the box
*@param shade if TRUE, apply text shading as well
*@param t1 The first line of text
*@param t2 The second line of text
*@param t3 The third line of text
*/
InfoBox( int x, int y, bool shade, TQString t1="", TQString t2="", TQString t3="" );
/**General constructor. Specify The text string, x,y position and size.
*This behaves just like the above function. It differs only in the data types
*of its arguments.
*@param p The (x,y) position of the box
*@param shade if TRUE, apply text shading as well
*@param t1 The first line of text
*@param t2 The second line of text
*@param t3 The third line of text
*/
InfoBox( TQPoint p, bool shade, TQString t1="", TQString t2="", TQString t3="" );
/**Destructor (empty)*/
~InfoBox();
/**Draw the InfoBox. First calls updateSize() and constrain() to make sure
*the box is onscreen and the correct size.
*@param p reference to the TQPainter on which to draw the box
*@param BGColor the background color to be used
*@param BGMode the background mode (0=none; 1=semi-transparent; 2=opaque)
*@see InfoBox::updateSize()
*@see InfoBox::constrain()
*/
void draw( TQPainter &p, TQColor BGColor, unsigned int BGMode );
/**Toggle the Shaded state of the box.
*/
bool toggleShade();
/**Reset the x,y position. Check the edge anchors.
*@param x the new X-position
*@param y the new Y-position
*/
void move( int x, int y );
/**Reset the x,y position. Check the edge anchors.
*This function behaves just like the above function. It differs
*only in the data type of its arguments.
*@param p the new (X,Y) position
*/
void move( TQPoint p );
/**Reset the width and height.
*@param w the new width
*@param h the new height
*/
void resize( int w, int h ) { Size.setWidth( w ); Size.setHeight( h ); }
/**Reset the width and height. This function behaves just like the above
*function. It differs only in the data type of its arguments.
*@param s the new size
*/
void resize( TQSize s ) { Size.setWidth( s.width() ); Size.setHeight( s.height() ); }
/**Set the size of the box to fit the current displayed text */
void updateSize();
/**Make sure the InfoBox is inside (or outside) the TQRect r.
*@return true if the function was able to obey the constraint.
*@param r the Rect which the box must lie completely inside/outside of.
*@param inside if TRUE (the default), the box must lie inside the rect r.
*Otherwise, the box must lie *outside* rect r.
*/
bool constrain( TQRect r, bool inside=true );
/**Reset the first text string
*@param newt the new text.
*/
void setText1( TQString newt ) { Text1 = newt; }
/**Reset the second text string
*@param newt the new text.
*/
void setText2( TQString newt ) { Text2 = newt; }
/**Reset the third text string
*@param newt the new text.
*/
void setText3( TQString newt ) { Text3 = newt; }
//temporarily, padx() and pady() simply return a constant
int padx() const { return 6; }
int pady() const { return 6; }
/**set the Visible flag according to the bool argument */
void setVisible( bool t ) { Visible = t; }
/**@return the X-position of the box*/
int x() const { return Pos.x(); }
/**@return the Y-position of the box*/
int y() const { return Pos.y(); }
/**@return the (X,Y) position of the box*/
TQPoint pos() const { return Pos; }
/**@return the width of the box*/
int width() const { return Size.width(); }
/**@return the height of the box*/
int height() const { return Size.height(); }
/**@return the size of the box*/
TQSize size() const { return Size; }
/**@return whether the box is visible */
bool isVisible() const { return Visible; }
/**@return the first line of text*/
TQString text1() const { return Text1; }
/**@return the second line of text*/
TQString text2() const { return Text2; }
/**@return the third line of text*/
TQString text3() const { return Text3; }
/**@return the geometry of the box*/
TQRect rect() const;
/**@return TRUE if the box is anchored to the right window edge*/
bool anchorRight() const { return ( AnchorFlag & AnchorRight ); }
/**@return TRUE if the box is anchored to the bottom window edge*/
bool anchorBottom() const { return ( AnchorFlag & AnchorBottom ); }
/**Set the box to be anchored to the right window edge*/
void setAnchorRight( const bool ar );
/**Set the box to be anchored to the bottom window edge*/
void setAnchorBottom( const bool ab );
/**@return the box's anchor flag bitmask.*/
int anchorFlag() const { return AnchorFlag; }
/**Set the box's anchor flag bitmask*/
void setAnchorFlag( const int af ) { AnchorFlag = af; }
enum AnchorType {
AnchorNone = 0x0000,
AnchorRight = 0x0001,
AnchorBottom = 0x0002,
AnchorBoth = AnchorRight | AnchorBottom
};
signals:
/**Signal emitted when the box is moved
*@param p the new (X,Y) position
*@see InfoBox::move()
*/
void moved( TQPoint p );
/**Signal emitted when the box's shaded-state is toggled
*@param s the new shaded state
*@see InfoBox::toggleShade()
*/
void shaded( bool s );
private:
bool Shaded, Visible;
//TextWidth, TextHeight are the text dimensions when box is unshaded;
//TextWidth1, TextHeight1 are the text dimensions when the box is shaded.
int FullTextWidth, FullTextHeight;
int ShadedTextWidth, ShadedTextHeight;
int AnchorFlag;
TQPoint Pos;
TQSize Size;
TQString Text1, Text2, Text3;
};
#endif