550 lines
14 KiB
C++
550 lines
14 KiB
C++
#include "Editor.h"
|
|
#include "BorderPanel.h"
|
|
#include "buttons.h"
|
|
#include "ColorEditor.h"
|
|
#include "TileEditor.h"
|
|
#include "RoomEditor.h"
|
|
#include "SpriteEditor.h"
|
|
#include "StateObjectEditor.h"
|
|
#include "SongEditor.h"
|
|
#include "MusicEditor.h"
|
|
#include "TimbreEditor.h"
|
|
#include "ScaleEditor.h"
|
|
#include "PaletteEditor.h"
|
|
#include "PlayerMoveEditor.h"
|
|
|
|
#include "SpritePicker.h"
|
|
|
|
#include "ToolTipDisplay.h"
|
|
#include "TimerDisplay.h"
|
|
#include "WarningDisplay.h"
|
|
|
|
|
|
extern int gameWidth, gameHeight;
|
|
|
|
extern ColorEditor *mainColorEditor;
|
|
extern TileEditor *mainTileEditor;
|
|
extern RoomEditor *mainRoomEditor;
|
|
extern SpriteEditor *mainSpriteEditor;
|
|
extern StateObjectEditor *mainStateObjectEditor;
|
|
extern MusicEditor *mainMusicEditor;
|
|
extern TimbreEditor *mainTimbreEditor;
|
|
extern ScaleEditor *mainScaleEditor;
|
|
extern SongEditor *mainSongEditor;
|
|
extern PaletteEditor *mainPaletteEditor;
|
|
extern PlayerMoveEditor *mainPracticePlayerEditor;
|
|
|
|
|
|
extern SpritePicker *mainSpritePicker;
|
|
extern SpritePicker *mainSpritePickerLower;
|
|
|
|
|
|
extern ToolTipDisplay *mainTipDisplay;
|
|
extern TimerDisplay *mainTimerDisplay;
|
|
extern WarningDisplay *mainWarningDisplay;
|
|
|
|
|
|
|
|
Editor::Editor( ScreenGL *inScreen, char inHasMainArea, char inHasSidePanel )
|
|
: mScreen( inScreen ),
|
|
mVisible( false ),
|
|
mHasSidePanel( inHasSidePanel ),
|
|
mHasMainArea( inHasMainArea ) {
|
|
|
|
|
|
double mainPanelXOffset = 0;
|
|
|
|
if( !mHasMainArea ) {
|
|
mainPanelXOffset = gameHeight;
|
|
}
|
|
|
|
|
|
// panel covering whole screen
|
|
mMainPanel = new PressActionGUIPanelGL( mainPanelXOffset, 0,
|
|
gameWidth - mainPanelXOffset,
|
|
gameWidth,
|
|
new Color( 0, 0, 0, 1.0 ) );
|
|
|
|
|
|
|
|
mMainPanelGuiTranslator = new GUITranslatorGL( mMainPanel, mScreen,
|
|
gameWidth );
|
|
|
|
mSidePanel = NULL;
|
|
|
|
if( mHasSidePanel ) {
|
|
|
|
// panel covering right edge of screen,
|
|
// leaving a perfect square to left
|
|
mSidePanel = new BorderPanel( gameHeight, 40,
|
|
gameWidth - gameHeight, gameHeight,
|
|
new Color( 0, 0, 0, 1.0 ),
|
|
new Color( .4, .4, .4, 1.0 ), 2 );
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
mCloseButton = NULL;
|
|
|
|
if( ! mHasMainArea && mHasSidePanel ) {
|
|
|
|
// don't attach key equivalent for button that won't close whole
|
|
// window
|
|
mCloseButton = new NoKeyCloseButtonGL( 242, 270, 8, 8 );
|
|
mSidePanel->add( mCloseButton );
|
|
}
|
|
else {
|
|
// whole window close... key equivalent
|
|
mCloseButton = new CloseButtonGL( 0, 272, 8, 8 );
|
|
// add to Main on top of all else
|
|
}
|
|
|
|
if( mCloseButton != NULL ) {
|
|
mCloseButton->addActionListener( this );
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::postConstruction() {
|
|
// put side panel and main widgets on top of everything else
|
|
|
|
postConstructionSide();
|
|
postConstructionMain();
|
|
}
|
|
|
|
|
|
|
|
void Editor::postConstructionSide() {
|
|
|
|
|
|
if( mHasSidePanel ) {
|
|
// on top of everything else
|
|
mSidePanel->add( mainWarningDisplay );
|
|
|
|
|
|
mMainPanel->add( mSidePanel );
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void Editor::postConstructionMain() {
|
|
if( ! mHasMainArea && mHasSidePanel ) {
|
|
// side-panel only, nothing left to add
|
|
}
|
|
else {
|
|
mMainPanel->add( mCloseButton );
|
|
|
|
mMainPanel->add( mainTipDisplay );
|
|
mMainPanel->add( mainTimerDisplay );
|
|
}
|
|
}
|
|
|
|
|
|
Editor::~Editor() {
|
|
|
|
setVisible( false );
|
|
|
|
if( mSidePanel != NULL ) {
|
|
mSidePanel->remove( mainWarningDisplay );
|
|
|
|
if( ! mMainPanel->contains( mSidePanel ) ) {
|
|
delete mSidePanel;
|
|
}
|
|
}
|
|
|
|
|
|
if( mMainPanel->contains( mainTipDisplay ) ) {
|
|
// we don't destroy this
|
|
mMainPanel->remove( mainTipDisplay );
|
|
mMainPanel->remove( mainTimerDisplay );
|
|
}
|
|
|
|
|
|
|
|
// recursively deletes all sub-components
|
|
delete mMainPanelGuiTranslator;
|
|
}
|
|
|
|
|
|
|
|
|
|
void Editor::setVisible( char inIsVisible ) {
|
|
|
|
if( inIsVisible && !mVisible) {
|
|
|
|
mScreen->addSceneHandler( mMainPanelGuiTranslator );
|
|
mScreen->addKeyboardHandler( mMainPanelGuiTranslator );
|
|
mScreen->addMouseHandler( mMainPanelGuiTranslator );
|
|
}
|
|
if( !inIsVisible && mVisible) {
|
|
mScreen->removeSceneHandler( mMainPanelGuiTranslator );
|
|
mScreen->removeKeyboardHandler( mMainPanelGuiTranslator );
|
|
mScreen->removeMouseHandler( mMainPanelGuiTranslator );
|
|
}
|
|
|
|
mVisible = inIsVisible;
|
|
}
|
|
|
|
|
|
|
|
char Editor::isVisible() {
|
|
return mVisible;
|
|
}
|
|
|
|
|
|
|
|
void Editor::showColorEditor() {
|
|
mainColorEditor->addActionListener( this );
|
|
|
|
if( mSidePanel != NULL ) {
|
|
mMainPanel->remove( mSidePanel );
|
|
}
|
|
|
|
mainColorEditor->setVisible( true );
|
|
}
|
|
|
|
|
|
|
|
|
|
void Editor::showTileEditor() {
|
|
setVisible( false );
|
|
|
|
mainTileEditor->addActionListener( this );
|
|
|
|
mainTileEditor->setVisible( true );
|
|
}
|
|
|
|
|
|
|
|
void Editor::showRoomEditor() {
|
|
setVisible( false );
|
|
|
|
mainRoomEditor->addActionListener( this );
|
|
|
|
mainRoomEditor->setVisible( true );
|
|
}
|
|
|
|
|
|
|
|
void Editor::showSpriteEditor() {
|
|
setVisible( false );
|
|
|
|
// make sure pickers match (editor shows mainSpritePicker)
|
|
mainSpritePickerLower->cloneState( mainSpritePicker );
|
|
|
|
|
|
mainSpriteEditor->addActionListener( this );
|
|
|
|
mainSpriteEditor->setVisible( true );
|
|
}
|
|
|
|
|
|
|
|
void Editor::showStateObjectEditor() {
|
|
setVisible( false );
|
|
|
|
mainStateObjectEditor->addActionListener( this );
|
|
|
|
mainStateObjectEditor->setVisible( true );
|
|
}
|
|
|
|
|
|
|
|
void Editor::showMusicEditor() {
|
|
setVisible( false );
|
|
|
|
mainMusicEditor->addActionListener( this );
|
|
|
|
mainMusicEditor->setVisible( true );
|
|
}
|
|
|
|
void Editor::showTimbreEditor() {
|
|
setVisible( false );
|
|
|
|
mainTimbreEditor->addActionListener( this );
|
|
|
|
mainTimbreEditor->setVisible( true );
|
|
}
|
|
|
|
void Editor::showScaleEditor() {
|
|
setVisible( false );
|
|
|
|
mainScaleEditor->addActionListener( this );
|
|
|
|
mainScaleEditor->setVisible( true );
|
|
}
|
|
|
|
|
|
void Editor::showSongEditor() {
|
|
setVisible( false );
|
|
|
|
mainSongEditor->addActionListener( this );
|
|
|
|
mainSongEditor->setVisible( true );
|
|
}
|
|
|
|
|
|
|
|
void Editor::showPaletteEditor() {
|
|
setVisible( false );
|
|
|
|
mainPaletteEditor->addActionListener( this );
|
|
|
|
mainPaletteEditor->setVisible( true );
|
|
}
|
|
|
|
|
|
|
|
void Editor::showPracticePlayerEditor() {
|
|
setVisible( false );
|
|
|
|
// any sub-editor open?
|
|
|
|
if( mainPaletteEditor->isVisible() ) {
|
|
if( mainColorEditor->isVisible() ) {
|
|
mainColorEditor->setVisible( false );
|
|
mainColorEditor->removeActionListener( mainPaletteEditor );
|
|
|
|
if( mainPaletteEditor->mSidePanel != NULL ) {
|
|
mainPaletteEditor->mMainPanel->add(
|
|
mainPaletteEditor->mSidePanel );
|
|
}
|
|
}
|
|
mainPaletteEditor->setVisible( false );
|
|
|
|
if( mainPaletteEditor->isListening( mainTileEditor ) ) {
|
|
|
|
mainPaletteEditor->removeActionListener( mainTileEditor );
|
|
mainTileEditor->setVisible( true );
|
|
}
|
|
else if( mainPaletteEditor->isListening( mainRoomEditor ) ) {
|
|
|
|
mainPaletteEditor->removeActionListener( mainRoomEditor );
|
|
mainRoomEditor->setVisible( true );
|
|
}
|
|
}
|
|
|
|
|
|
if( mainTileEditor->isVisible() ) {
|
|
|
|
if( mainColorEditor->isVisible() ) {
|
|
mainColorEditor->setVisible( false );
|
|
mainColorEditor->removeActionListener( mainTileEditor );
|
|
|
|
if( mainTileEditor->mSidePanel != NULL ) {
|
|
mainTileEditor->mMainPanel->add( mainTileEditor->mSidePanel );
|
|
}
|
|
}
|
|
mainTileEditor->setVisible( false );
|
|
mainTileEditor->removeActionListener( mainRoomEditor );
|
|
mainRoomEditor->setVisible( true );
|
|
}
|
|
|
|
|
|
if( mainSpriteEditor->isVisible() ) {
|
|
|
|
if( mainColorEditor->isVisible() ) {
|
|
mainColorEditor->setVisible( false );
|
|
mainColorEditor->removeActionListener( mainSpriteEditor );
|
|
|
|
if( mainSpriteEditor->mSidePanel != NULL ) {
|
|
mainSpriteEditor->mMainPanel->add(
|
|
mainSpriteEditor->mSidePanel );
|
|
}
|
|
}
|
|
mainSpriteEditor->setVisible( false );
|
|
mainSpriteEditor->removeActionListener( mainStateObjectEditor );
|
|
mainStateObjectEditor->setVisible( true );
|
|
}
|
|
|
|
if( mainTimbreEditor->isVisible() ) {
|
|
|
|
mainTimbreEditor->setVisible( false );
|
|
mainTimbreEditor->removeActionListener( mainSongEditor );
|
|
mainSongEditor->setVisible( true );
|
|
}
|
|
|
|
if( mainScaleEditor->isVisible() ) {
|
|
|
|
mainScaleEditor->setVisible( false );
|
|
mainScaleEditor->removeActionListener( mainSongEditor );
|
|
mainSongEditor->setVisible( true );
|
|
}
|
|
|
|
if( mainMusicEditor->isVisible() ) {
|
|
mainMusicEditor->setVisible( false );
|
|
mainMusicEditor->removeActionListener( mainSongEditor );
|
|
mainSongEditor->setVisible( true );
|
|
}
|
|
|
|
|
|
|
|
if( mainRoomEditor->isVisible() ) {
|
|
// special case for RoomEditor, so it can reset shared
|
|
// GameStateDisplay
|
|
mainRoomEditor->editorClosing();
|
|
|
|
mainRoomEditor->setVisible( false );
|
|
mainRoomEditor->removeActionListener( this );
|
|
}
|
|
|
|
|
|
if( mainStateObjectEditor->isVisible() ) {
|
|
mainStateObjectEditor->setVisible( false );
|
|
mainRoomEditor->removeActionListener( this );
|
|
}
|
|
|
|
if( mainSongEditor->isVisible() ) {
|
|
mainSongEditor->setVisible( false );
|
|
mainSongEditor->removeActionListener( this );
|
|
}
|
|
|
|
|
|
mainPracticePlayerEditor->setVisible( true );
|
|
}
|
|
|
|
|
|
|
|
void Editor::hidePracticePlayerEditor() {
|
|
mainPracticePlayerEditor->setVisible( false );
|
|
|
|
setVisible( true );
|
|
}
|
|
|
|
|
|
|
|
void Editor::redrawMainPanel() {
|
|
mMainPanel->fireRedraw();
|
|
}
|
|
|
|
|
|
|
|
void Editor::actionPerformed( GUIComponent *inTarget ) {
|
|
if( mCloseButton != NULL && inTarget == mCloseButton ) {
|
|
|
|
// tell subclass about it
|
|
editorClosing();
|
|
|
|
|
|
if( this != mainColorEditor &&
|
|
mainColorEditor->isVisible() ) {
|
|
// color editor on top of our side panel
|
|
|
|
// force it to close and redisplay our side panel
|
|
mainColorEditor->setVisible( false );
|
|
mainColorEditor->removeActionListener( this );
|
|
|
|
if( mSidePanel != NULL ) {
|
|
mMainPanel->add( mSidePanel );
|
|
}
|
|
}
|
|
|
|
// fire action telling others that we got a close-button press
|
|
fireActionPerformed( this );
|
|
}
|
|
else if( inTarget == mainColorEditor ) {
|
|
|
|
// color editor closed
|
|
mainColorEditor->setVisible( false );
|
|
mainColorEditor->removeActionListener( this );
|
|
|
|
if( mSidePanel != NULL ) {
|
|
mMainPanel->add( mSidePanel );
|
|
}
|
|
colorEditorClosed();
|
|
}
|
|
else if( inTarget == mainTileEditor ) {
|
|
// tile editor closed
|
|
|
|
mainTileEditor->setVisible( false );
|
|
mainTileEditor->removeActionListener( this );
|
|
|
|
setVisible( true );
|
|
}
|
|
else if( inTarget == mainRoomEditor ) {
|
|
// room editor closed
|
|
|
|
mainRoomEditor->setVisible( false );
|
|
mainRoomEditor->removeActionListener( this );
|
|
|
|
setVisible( true );
|
|
}
|
|
else if( inTarget == mainSpriteEditor ) {
|
|
// sprite editor closed
|
|
|
|
mainSpriteEditor->setVisible( false );
|
|
mainSpriteEditor->removeActionListener( this );
|
|
|
|
|
|
// make sure pickers match (editor showed mainSpritePicker, so copy
|
|
// changes from there back into Lower picker)
|
|
mainSpritePicker->cloneState( mainSpritePickerLower );
|
|
|
|
|
|
setVisible( true );
|
|
}
|
|
else if( inTarget == mainStateObjectEditor ) {
|
|
// object editor closed
|
|
|
|
mainStateObjectEditor->setVisible( false );
|
|
mainStateObjectEditor->removeActionListener( this );
|
|
|
|
setVisible( true );
|
|
}
|
|
else if( inTarget == mainMusicEditor ) {
|
|
// music editor closed
|
|
|
|
mainMusicEditor->setVisible( false );
|
|
mainMusicEditor->removeActionListener( this );
|
|
|
|
setVisible( true );
|
|
}
|
|
else if( inTarget == mainTimbreEditor ) {
|
|
// music editor closed
|
|
|
|
mainTimbreEditor->setVisible( false );
|
|
mainTimbreEditor->removeActionListener( this );
|
|
|
|
setVisible( true );
|
|
}
|
|
else if( inTarget == mainScaleEditor ) {
|
|
// music editor closed
|
|
|
|
mainScaleEditor->setVisible( false );
|
|
mainScaleEditor->removeActionListener( this );
|
|
|
|
setVisible( true );
|
|
}
|
|
else if( inTarget == mainSongEditor ) {
|
|
// song editor closed
|
|
|
|
mainSongEditor->setVisible( false );
|
|
mainSongEditor->removeActionListener( this );
|
|
|
|
setVisible( true );
|
|
}
|
|
else if( inTarget == mainPaletteEditor ) {
|
|
// music editor closed
|
|
|
|
mainPaletteEditor->setVisible( false );
|
|
mainPaletteEditor->removeActionListener( this );
|
|
|
|
setVisible( true );
|
|
}
|
|
else if( inTarget == mainPracticePlayerEditor ) {
|
|
// practice player editor closed
|
|
|
|
mainPracticePlayerEditor->setVisible( false );
|
|
mainPracticePlayerEditor->removeActionListener( this );
|
|
|
|
setVisible( true );
|
|
}
|
|
|
|
}
|