Aegisub/contrib/assdraw/src/assdraw.hpp

210 lines
6.5 KiB
C++

/*
* Copyright (c) 2007, ai-chan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ASSDraw3 Team nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
///////////////////////////////////////////////////////////////////////////////
// Name: assdraw.hpp
// Purpose: header file for ASSDraw main source file; also includes
// declarations for all GUI elements (except wxRuler, which has
// its own header file)
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
#pragma once
#include "_common.hpp"
#include <vector>
#include <wx/wxprec.h>
#include <wx/aui/aui.h>
#include <wx/fileconf.h>
#include <wx/help.h>
#include "canvas.hpp" // the canvas
#include "dlgctrl.hpp" // custom dialogs & controls
#include "settings.hpp" // settings property grid
#include "library.hpp" // shape library
//#define BETAVERSION 2
#define VERSION _T("3.0 final")
// this header file declares the following classes
class ASSDrawApp;
class ASSDrawFrame;
class ASSDrawCanvas;
class ASSDrawApp : public wxApp
{
public:
bool OnInit();
};
class ASSDrawFrame : public wxFrame
{
public:
// constructor
ASSDrawFrame(wxApp *app, const wxString& title, const wxPoint& pos, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE);
virtual ~ASSDrawFrame();
// event handlers (these functions should _not_ be virtual)
// OnSelect_* for single items, OnChoose_* for many-choose-one items
void OnSelect_Clear(wxCommandEvent& WXUNUSED(event)) { _Clear(); }
void OnSelect_Preview(wxCommandEvent& WXUNUSED(event)) { _Preview(); }
void OnSelect_Transform(wxCommandEvent& WXUNUSED(event)) { _Transform(); }
void OnSelect_Library(wxCommandEvent& WXUNUSED(event)) { _ToggleLibrary(); }
void OnSelect_Settings(wxCommandEvent& WXUNUSED(event)) { _ToggleSettings(); }
void OnSelect_ResetPerspective(wxCommandEvent& WXUNUSED(event)) { _ResetPerspective(); }
void OnSelect_Help(wxCommandEvent& WXUNUSED(event)) { _Help(); }
void OnSelect_About(wxCommandEvent& WXUNUSED(event)) { _About(); }
void OnSelect_Undo(wxCommandEvent& WXUNUSED(event)) { UndoOrRedo( true ); }
void OnSelect_Redo(wxCommandEvent& WXUNUSED(event)) { UndoOrRedo( false ); }
void OnSelect_Paste(wxCommandEvent& WXUNUSED(event)) { _Paste(); }
void OnSelect_RemoveBG(wxCommandEvent& WXUNUSED(event)) { m_canvas->RemoveBackgroundImage(); }
void OnSelect_AlphaBG(wxCommandEvent& WXUNUSED(event)) { m_canvas->AskUserForBackgroundAlpha(); }
void OnChoose_Recenter(wxCommandEvent& event);
void OnChoose_RecenterToBG(wxCommandEvent& event);
void OnChoose_Mode(wxCommandEvent& event);
void OnChoose_DragMode(wxCommandEvent& event);
void OnZoomSliderChanged(wxScrollEvent &event);
void OnToolRClick(wxCommandEvent& event);
void OnChoose_TBarRClickMenu(wxCommandEvent& event);
void OnSettingsChanged(wxCommandEvent& event);
void OnClose(wxCloseEvent &event);
void UpdateASSCommandStringToSrcTxtCtrl(wxString cmds);
void UpdateASSCommandStringFromSrcTxtCtrl(wxString cmds);
void UndoOrRedo(bool isundo);
void UpdateUndoRedoMenu();
void _Clear();
void _Preview();
void _Transform();
void _ToggleLibrary();
void _ToggleSettings();
void _Help();
void _About(unsigned timeout = 0);
void _Paste();
void _ResetPerspective();
void UpdateFrameUI(unsigned level = 0);
// the canvas
wxApp *m_app;
ASSDrawCanvas* m_canvas;
wxAuiManager m_mgr;
wxString default_perspective;
ASSDrawSrcTxtCtrl* srctxtctrl;
// config
wxString configfile;
wxFileConfig *config;
// toolbars
wxToolBar *drawtbar, *modetbar, *bgimgtbar;
// zoom slider
wxSlider* zoomslider;
//library
ASSDrawShapeLibrary *shapelib;
typedef std::vector< ASSDrawEngine* > DrawEngineVec;
DrawEngineVec libshapes;
// menus
#if wxUSE_MENUS
wxMenu *drawMenu;
wxMenu *modeMenu;
wxMenu *bgimgMenu;
wxMenu *viewMenu;
wxMenu *tbarMenu;
#endif
// dialogs
ASSDrawTransformDlg* transformdlg;
ASSDrawSettingsDialog* settingsdlg;
// colors
struct
{
wxColour canvas_bg;
wxColour canvas_shape_normal;
wxColour canvas_shape_preview;
wxColour canvas_shape_outline;
wxColour canvas_shape_guideline;
wxColour canvas_shape_mainpoint;
wxColour canvas_shape_controlpoint;
wxColour canvas_shape_selectpoint;
wxColour library_shape;
wxColour library_libarea;
wxColour origin, ruler_h, ruler_v;
} colors;
struct
{
long canvas_shape_normal;
long canvas_shape_preview;
long canvas_shape_outline;
long canvas_shape_guideline;
long canvas_shape_mainpoint;
long canvas_shape_controlpoint;
long canvas_shape_selectpoint;
} alphas;
struct
{
long origincross;
} sizes;
struct
{
bool capitalizecmds;
bool autoaskimgopac;
bool parse_spc;
bool nosplashscreen;
bool confirmquit;
} behaviors;
void LoadSettings();
void SaveSettings();
void InitializeDefaultSettings();
void ApplySettings();
static void wxColourToAggRGBA(wxColour &colour, agg::rgba &rgba);
static void wxColourSetAlpha(wxColour &colour, long alpha);
protected:
virtual void SetToolBars();
virtual void SetMenus();
virtual void SetPanes();
DECLARE_EVENT_TABLE()
wxHelpController helpcontroller;
};