698 lines
17 KiB
C++
698 lines
17 KiB
C++
#ifndef BUTTONS_INCLUDED
|
|
#define BUTTONS_INCLUDED
|
|
|
|
|
|
#include "minorGems/graphics/openGL/gui/ButtonGL.h"
|
|
|
|
#include "color.h"
|
|
|
|
|
|
|
|
|
|
class ToolTipButtonGL : public ButtonGL {
|
|
public:
|
|
ToolTipButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
virtual ~ToolTipButtonGL();
|
|
|
|
// defaults to no tip
|
|
// automatically invokes TranslationManager on passed-in key
|
|
// if inUseTranslationManager is false, uses Key as tool tip directly
|
|
virtual void setToolTip( const char *inTipTranslationKey,
|
|
char inUseTranslationManager = true );
|
|
|
|
|
|
// override functions in ButtonGL
|
|
virtual void mouseMoved( double inX, double inY );
|
|
virtual void mouseDragged( double inX, double inY );
|
|
virtual void mouseReleased( double inX, double inY );
|
|
protected:
|
|
char *mTip;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class BorderButtonGL : public ToolTipButtonGL {
|
|
public:
|
|
void setFillColor( rgbaColor inColor );
|
|
|
|
void setBorderColor( rgbaColor inColor );
|
|
|
|
protected:
|
|
BorderButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
|
|
virtual void drawBorder();
|
|
|
|
rgbaColor mBorderColor;
|
|
rgbaColor mFillColor;
|
|
|
|
};
|
|
|
|
|
|
|
|
// base class for buttons with icons
|
|
class IconButtonGL : public BorderButtonGL {
|
|
|
|
public:
|
|
IconButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
virtual void drawPressed();
|
|
|
|
virtual void drawUnpressed();
|
|
|
|
protected:
|
|
// subclasses must implement this
|
|
virtual void drawIcon() = 0;
|
|
};
|
|
|
|
|
|
|
|
|
|
class AddButtonGL : public IconButtonGL {
|
|
|
|
public:
|
|
AddButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
protected:
|
|
|
|
void drawIcon();
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "Sprite.h"
|
|
|
|
|
|
// buttons that display sprites inside a border
|
|
// sprite can be NULL
|
|
// invisible when disabled
|
|
class SpriteButtonGL : public BorderButtonGL {
|
|
|
|
public:
|
|
// sprite is destroyed by this class
|
|
SpriteButtonGL( Sprite *inSprite,
|
|
double inSpriteDrawScale,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
virtual ~SpriteButtonGL();
|
|
|
|
// defaults to white, destroyed internally
|
|
// set to NULL to restore to white
|
|
void setColor( Color *inColor );
|
|
|
|
|
|
// replaces sprite
|
|
virtual void setSprite( Sprite *inSprite );
|
|
|
|
virtual void drawPressed();
|
|
|
|
virtual void drawUnpressed();
|
|
|
|
protected:
|
|
Sprite *mSprite;
|
|
double mSpriteDrawScale;
|
|
|
|
Color *mColor;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class LeftButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
LeftButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
|
|
class RightButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
RightButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
|
|
class EditButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
EditButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
|
|
|
|
class SmallAddButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
SmallAddButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
// delete button with no confirmation behavior
|
|
class QuickDeleteButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
QuickDeleteButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
|
|
// a button with a keyboard equivalent (when CTRL held)
|
|
class KeyEquivButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
|
|
KeyEquivButtonGL( Sprite *inSprite,
|
|
double inSpriteDrawScale,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight,
|
|
char inKeyA, char inKeyB );
|
|
|
|
// always focused, listens for ctrl-z
|
|
virtual char isFocused();
|
|
virtual void keyPressed( unsigned char inKey, double inX, double inY );
|
|
protected:
|
|
char mKeyA, mKeyB;
|
|
};
|
|
|
|
|
|
|
|
|
|
class CloseButtonGL : public KeyEquivButtonGL {
|
|
|
|
public:
|
|
CloseButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
// override this to make click area slightly bigger
|
|
// (so it's infinite if this button in corner of screen)
|
|
virtual char isInside( double inX, double inY );
|
|
|
|
};
|
|
|
|
|
|
|
|
class NoKeyCloseButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
NoKeyCloseButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
// override this to make click area slightly bigger
|
|
// (so it's infinite if this button in corner of screen)
|
|
virtual char isInside( double inX, double inY );
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class UndoButtonGL : public KeyEquivButtonGL {
|
|
|
|
public:
|
|
UndoButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
};
|
|
|
|
|
|
|
|
class RedoButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
RedoButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
|
|
class FlipHButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
FlipHButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
class FlipVButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
FlipVButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
class RotateCCWButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
RotateCCWButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
class RotateCWButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
RotateCWButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
|
|
class ClearButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
ClearButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
class ColorizeButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
ColorizeButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
|
|
|
|
// buttons that shows a color
|
|
// responds to dragging across it and pressing (as well as releasing)
|
|
// by firing events
|
|
class ColorButtonGL : public BorderButtonGL {
|
|
|
|
public:
|
|
ColorButtonGL( rgbaColor inColor,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
// replaces color
|
|
void setColor( rgbaColor inColor, char inForceDarkBorder = false );
|
|
|
|
// was last action triggered by hover w/out press or release
|
|
char wasLastActionHover();
|
|
|
|
|
|
|
|
virtual void drawPressed();
|
|
|
|
virtual void drawUnpressed();
|
|
|
|
|
|
// overrides these
|
|
virtual void mousePressed( double inX, double inY );
|
|
virtual void mouseDragged( double inX, double inY );
|
|
virtual void mouseMoved( double inX, double inY );
|
|
virtual void mouseReleased( double inX, double inY );
|
|
|
|
|
|
protected:
|
|
rgbaColor mColor;
|
|
|
|
char mLastActionHover;
|
|
};
|
|
|
|
|
|
|
|
|
|
// button that has a highlight that can be toggled
|
|
class HighlightColorButtonGL : public ColorButtonGL {
|
|
public:
|
|
HighlightColorButtonGL( rgbaColor inColor,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
virtual void setHighlight( char inHighlightOn );
|
|
|
|
virtual void setSelection( char inSelectionOn );
|
|
|
|
virtual void setOverlay( char inOverlayOn );
|
|
|
|
virtual void setOverlayColor( rgbaColor inColor );
|
|
|
|
// does overlay represent a transparent area
|
|
virtual void setOverlayTrans( char inTrans );
|
|
|
|
// override
|
|
virtual void drawPressed();
|
|
|
|
virtual void drawUnpressed();
|
|
|
|
protected:
|
|
char mHighlightOn;
|
|
|
|
char mSelectionOn;
|
|
|
|
char mOverlayOn;
|
|
char mOverlayTrans;
|
|
|
|
rgbaColor mOverlayColor;
|
|
|
|
|
|
void drawCheckerboard( unsigned char inAlpha );
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// buttons that display sprites without a border
|
|
// sprite can be NULL
|
|
// invisible when disabled
|
|
// responds to dragging across it and pressing (as well as releasing)
|
|
// by firing events
|
|
class SpriteCellButtonGL : public ToolTipButtonGL {
|
|
|
|
public:
|
|
// sprite is destroyed by this class
|
|
SpriteCellButtonGL( Sprite *inSprite,
|
|
double inSpriteDrawScale,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
~SpriteCellButtonGL();
|
|
|
|
virtual void setHighlight( char inHighlightOn );
|
|
|
|
|
|
// replaces sprite
|
|
// destroyed by this class
|
|
virtual void setSprite( Sprite *inSprite );
|
|
|
|
virtual Sprite *getSprite();
|
|
|
|
|
|
// sets the sprite to draw when main sprite is NULL
|
|
// defaults to NULL (draw nothing)
|
|
// NOT destroyed by this class
|
|
virtual void setBlankSprite( Sprite *inSprite );
|
|
|
|
|
|
// defaults to white, destroyed internally
|
|
// set to NULL to restore to white
|
|
void setColor( Color *inColor );
|
|
|
|
|
|
virtual void drawPressed();
|
|
|
|
virtual void drawUnpressed();
|
|
|
|
// overrides these
|
|
virtual void mousePressed( double inX, double inY );
|
|
virtual void mouseDragged( double inX, double inY );
|
|
virtual void mouseReleased( double inX, double inY );
|
|
|
|
protected:
|
|
Sprite *mSprite;
|
|
Sprite *mBlankSprite;
|
|
double mSpriteDrawScale;
|
|
|
|
char mHighlightOn;
|
|
|
|
Color *mColor;
|
|
|
|
// on by default... subclasses can turn off
|
|
char mFireOnDrag;
|
|
char mFireOnRelease;
|
|
};
|
|
|
|
|
|
|
|
// a SpriteCellButtonGL that also has a time position overlay,
|
|
// only displayed when sprite not NULL
|
|
class MusicCellButtonGL : public SpriteCellButtonGL {
|
|
|
|
public:
|
|
// sprite is destroyed by this class
|
|
MusicCellButtonGL( Sprite *inSprite,
|
|
double inSpriteDrawScale,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
void setMusicInfo( int inPartNumber, int inPhraseNumber );
|
|
|
|
// override to draw timeline
|
|
void drawUnpressed();
|
|
|
|
|
|
protected:
|
|
Sprite mTimeMark;
|
|
int mPartNumber, mPhraseNumber;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// a button that has a double-border when selected
|
|
// make sure sizing makes room for two borders
|
|
class SelectableButtonGL : public SpriteButtonGL {
|
|
public:
|
|
SelectableButtonGL( Sprite *inSprite,
|
|
double inSpriteDrawScale,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
void setSelected( char inSelected );
|
|
char getSelected();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
// overrides from BorderButtonGL
|
|
virtual void drawBorder();
|
|
|
|
private:
|
|
|
|
char mSelected;
|
|
|
|
double mOuterAnchorX, mOuterAnchorY, mOuterWidth, mOuterHeight;
|
|
};
|
|
|
|
|
|
|
|
|
|
// button that must be pressed twice before firing
|
|
// confirmation
|
|
class DoublePressSpriteButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
// sprite is destroyed by this class
|
|
DoublePressSpriteButtonGL( Sprite *inSprite, Sprite *inConfirmSprite,
|
|
double inSpriteDrawScale,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
~DoublePressSpriteButtonGL();
|
|
|
|
// resets button back to first, unpressed state
|
|
//void resetPressState();
|
|
|
|
// override to unpress when disabled
|
|
void setEnabled( char inEnabled );
|
|
|
|
|
|
// overrides to PREVENT sprite replacement
|
|
virtual void setSprite( Sprite *inSprite );
|
|
|
|
// overrides
|
|
virtual void setToolTip( const char *inTipTranslationKey );
|
|
virtual void mouseReleased( double inX, double inY );
|
|
|
|
protected:
|
|
Sprite *mOtherSprite;
|
|
|
|
char mPressedOnce;
|
|
|
|
char *mFirstTip;
|
|
char *mConfirmTip;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class DeleteButtonGL : public DoublePressSpriteButtonGL {
|
|
|
|
public:
|
|
DeleteButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
};
|
|
|
|
|
|
|
|
class SendButtonGL : public DoublePressSpriteButtonGL {
|
|
|
|
public:
|
|
SendButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// button that that has two states and two sprites (toggles when pressed)
|
|
class ToggleSpriteButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
// sprite is destroyed by this class
|
|
ToggleSpriteButtonGL( Sprite *inSprite, Sprite *inSecondSprite,
|
|
double inSpriteDrawScale,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
~ToggleSpriteButtonGL();
|
|
|
|
char getState() {
|
|
return mState;
|
|
}
|
|
|
|
void setState( char inState );
|
|
|
|
|
|
virtual void setSecondToolTip( const char *inTipTranslationKey );
|
|
|
|
// overrides to PREVENT sprite replacement
|
|
virtual void setSprite( Sprite *inSprite );
|
|
|
|
// overrides
|
|
virtual void setToolTip( const char *inTipTranslationKey );
|
|
virtual void mouseReleased( double inX, double inY );
|
|
|
|
protected:
|
|
Sprite *mOtherSprite;
|
|
|
|
char mState;
|
|
|
|
char *mFirstTip;
|
|
char *mSecondTip;
|
|
};
|
|
|
|
|
|
|
|
|
|
// a ToggleSpriteButtonGL that becomes brighter when it's scale note is
|
|
// being played
|
|
class ScaleToggleButton : public ToggleSpriteButtonGL {
|
|
|
|
public:
|
|
ScaleToggleButton( Sprite *inSprite, Sprite *inSecondSprite,
|
|
double inSpriteDrawScale,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
void setMusicInfo( int inNoteNumber, int inNotesPerOctave,
|
|
int inPartToWatch );
|
|
|
|
// override to change draw color
|
|
void drawUnpressed();
|
|
void drawPressed();
|
|
|
|
|
|
protected:
|
|
Color *getDrawColor();
|
|
|
|
int mNoteNumber, mNotesPerOctave, mPartToWatch;
|
|
double mOnFade;
|
|
int mLastColumnOn;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class StackSearchButtonGL : public ToggleSpriteButtonGL {
|
|
|
|
public:
|
|
StackSearchButtonGL( double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// buttons that display TWO layered sprites inside a border
|
|
// sprites can be NULL
|
|
// invisible when disabled
|
|
class TwoSpriteButtonGL : public SpriteButtonGL {
|
|
|
|
public:
|
|
// sprites are destroyed by this class
|
|
TwoSpriteButtonGL( Sprite *inSprite,
|
|
Sprite *inFrontSprite,
|
|
double inSpriteDrawScale,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
virtual ~TwoSpriteButtonGL();
|
|
|
|
// replaces sprite
|
|
virtual void setFrontSprite( Sprite *inSprite );
|
|
|
|
virtual void drawPressed();
|
|
|
|
virtual void drawUnpressed();
|
|
|
|
protected:
|
|
Sprite *mFrontSprite;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// version of two-sprite button that fires action upon press too, to
|
|
// potentially initiate drag and drop functionality
|
|
class DraggableTwoSpriteButtonGL : public TwoSpriteButtonGL {
|
|
|
|
public:
|
|
// sprites are destroyed by this class
|
|
DraggableTwoSpriteButtonGL( Sprite *inSprite,
|
|
Sprite *inFrontSprite,
|
|
double inSpriteDrawScale,
|
|
double inAnchorX, double inAnchorY,
|
|
double inWidth, double inHeight );
|
|
|
|
// override functions in ButtonGL
|
|
virtual void mousePressed( double inX, double inY );
|
|
virtual void mouseReleased( double inX, double inY );
|
|
|
|
char mLastActionFromPress;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|