Aegisub/contrib/assdraw/src/settings.cpp

224 lines
12 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: settings.cpp
// Purpose: settings property grid
// Author: ai-chan
// Created: 08/26/06
// Copyright: (c) ai-chan
// Licence: 3-clause BSD
///////////////////////////////////////////////////////////////////////////////
#include "assdraw.hpp"
#include "settings.hpp"
DEFINE_EVENT_TYPE(wxEVT_SETTINGS_CHANGED)
// ----------------------------------------------------------------------------
// ASSDrawSettingsDialog
// ----------------------------------------------------------------------------
ASSDrawSettingsDialog::ASSDrawSettingsDialog(wxWindow *parent, ASSDrawFrame *frame, int id)
: wxPanel(parent, id)
{
m_frame = frame;
propgrid = NULL;
}
void ASSDrawSettingsDialog::Init()
{
propgrid = new wxPropertyGrid(this,
wxID_ANY,
wxDefaultPosition,
wxDefaultSize,
//wxPG_BOLD_MODIFIED |
//wxPG_SPLITTER_AUTO_CENTER |
//wxPG_AUTO_SORT |
//wxPG_HIDE_MARGIN | wxPG_STATIC_SPLITTER |
wxPG_TOOLTIPS |
//wxPG_NOCATEGORIES |
wxTAB_TRAVERSAL //|
//wxSUNKEN_BORDER
);
#define APPENDCOLOURPROP(pgid, label, color) pgid = propgrid->Append(new wxColourProperty(label, wxPG_LABEL, color));
#define APPENDUINTPROP(pgid, label, uint) \
pgid = propgrid->Append(new wxUIntProperty(label, wxPG_LABEL, uint) ); \
propgrid->SetPropertyValidator( pgid, validator );
#define APPENDBOOLPROP(pgid, label, boolvar) \
pgid = propgrid->Append(new wxBoolProperty (label, wxPG_LABEL, boolvar ) ); \
propgrid->SetPropertyAttribute( pgid, wxPG_BOOL_USE_CHECKBOX, (long)1 );
wxLongPropertyValidator validator(0x0,0xFF);
propgrid->Append(new wxPropertyCategory(_T("Appearance"),wxPG_LABEL) );
APPENDCOLOURPROP(colors_canvas_bg_pgid, _T("Canvas"), m_frame->colors.canvas_bg)
APPENDCOLOURPROP(colors_canvas_shape_normal_pgid, _T("Drawing"), m_frame->colors.canvas_shape_normal)
APPENDUINTPROP(alphas_canvas_shape_normal_pgid, _T("Drawing @"), m_frame->alphas.canvas_shape_normal)
APPENDCOLOURPROP(colors_canvas_shape_preview_pgid, _T("Preview"), m_frame->colors.canvas_shape_preview)
APPENDUINTPROP(alphas_canvas_shape_preview_pgid, _T("Preview @"), m_frame->alphas.canvas_shape_preview)
APPENDCOLOURPROP(colors_canvas_shape_outline_pgid, _T("Outline"), m_frame->colors.canvas_shape_outline)
APPENDUINTPROP(alphas_canvas_shape_outline_pgid, _T("Outline @"), m_frame->alphas.canvas_shape_outline)
APPENDCOLOURPROP(colors_canvas_shape_guideline_pgid, _T("Control lines"), m_frame->colors.canvas_shape_guideline)
APPENDUINTPROP(alphas_canvas_shape_guideline_pgid, _T("Control lines @"), m_frame->alphas.canvas_shape_guideline)
APPENDCOLOURPROP(colors_canvas_shape_mainpoint_pgid, _T("Points"), m_frame->colors.canvas_shape_mainpoint)
APPENDUINTPROP(alphas_canvas_shape_mainpoint_pgid, _T("Points @"), m_frame->alphas.canvas_shape_mainpoint)
APPENDCOLOURPROP(colors_canvas_shape_controlpoint_pgid, _T("Control points"), m_frame->colors.canvas_shape_controlpoint)
APPENDUINTPROP(alphas_canvas_shape_controlpoint_pgid, _T("Control points @"), m_frame->alphas.canvas_shape_controlpoint)
APPENDCOLOURPROP(colors_canvas_shape_selectpoint_pgid, _T("Selected points"), m_frame->colors.canvas_shape_selectpoint)
APPENDUINTPROP(alphas_canvas_shape_selectpoint_pgid, _T("Selected points @"), m_frame->alphas.canvas_shape_selectpoint)
APPENDCOLOURPROP(colors_library_libarea_pgid, _T("Library"), m_frame->colors.library_libarea)
APPENDCOLOURPROP(colors_library_shape_pgid, _T("Library shapes"), m_frame->colors.library_shape)
APPENDCOLOURPROP(colors_origin_pgid, _T("Origin"), m_frame->colors.origin)
APPENDUINTPROP(sizes_origincross_pgid, _T("Origin cross size"), m_frame->sizes.origincross)
APPENDCOLOURPROP(colors_ruler_h_pgid, _T("H ruler"), m_frame->colors.ruler_h)
APPENDCOLOURPROP(colors_ruler_v_pgid, _T("V ruler"), m_frame->colors.ruler_v)
propgrid->Append(new wxPropertyCategory(_T("Behaviors"),wxPG_LABEL) );
APPENDBOOLPROP(behaviors_capitalizecmds_pgid, _T("Capitalize commands"), m_frame->behaviors.capitalizecmds);
APPENDBOOLPROP(behaviors_autoaskimgopac_pgid, _T("Ask for image opacity"), m_frame->behaviors.autoaskimgopac);
APPENDBOOLPROP(behaviors_parse_spc_pgid, _T("Parse S/P/C"), m_frame->behaviors.parse_spc);
APPENDBOOLPROP(behaviors_nosplashscreen_pgid, _T("No splash screen"), m_frame->behaviors.nosplashscreen);
APPENDBOOLPROP(behaviors_confirmquit_pgid, _T("Confirm quit"), m_frame->behaviors.confirmquit);
wxFlexGridSizer *sizer = new wxFlexGridSizer(2, 1, 0, 0);
sizer->AddGrowableCol(0);
sizer->AddGrowableRow(0);
sizer->Add(propgrid, 1, wxEXPAND);
wxBoxSizer *bsizer = new wxBoxSizer(wxHORIZONTAL);
wxButton *abutton = new wxButton(this, wxID_ANY, _T("Apply"));
abutton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ASSDrawSettingsDialog::OnSettingsApplyButtonClicked), NULL, this);
bsizer->Add(abutton, 2, wxEXPAND);
wxButton *rbutton = new wxButton(this, wxID_ANY, _T("Revert"));
rbutton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ASSDrawSettingsDialog::OnSettingsRevertButtonClicked), NULL, this);
bsizer->Add(rbutton, 1, wxEXPAND);
bsizer->Layout();
sizer->Add(bsizer, 1, wxEXPAND);
sizer->Layout();
SetSizer(sizer);
}
ASSDrawSettingsDialog::~ASSDrawSettingsDialog()
{
if (propgrid) propgrid->Clear();
}
void ASSDrawSettingsDialog::OnSettingsApplyButtonClicked(wxCommandEvent &event)
{
wxButton *button = (wxButton *) event.GetEventObject();
//wxPropertyGrid *propgrid = (wxPropertyGrid *) button->GetClientData();
if (propgrid == NULL) return;
#define PARSECOLOR(color, pgid) \
{ \
wxVariant variant = propgrid->GetPropertyValue(pgid); \
color = *wxGetVariantCast(variant,wxColour); \
}
#define PARSE(ptr, pgid) propgrid->GetPropertyValue(pgid).Convert(ptr);
PARSECOLOR(m_frame->colors.canvas_bg, colors_canvas_bg_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_controlpoint, colors_canvas_shape_controlpoint_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_guideline, colors_canvas_shape_guideline_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_mainpoint, colors_canvas_shape_mainpoint_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_normal, colors_canvas_shape_normal_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_outline, colors_canvas_shape_outline_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_preview, colors_canvas_shape_preview_pgid)
PARSECOLOR(m_frame->colors.canvas_shape_selectpoint, colors_canvas_shape_selectpoint_pgid)
PARSECOLOR(m_frame->colors.library_libarea, colors_library_libarea_pgid)
PARSECOLOR(m_frame->colors.library_shape, colors_library_shape_pgid)
PARSECOLOR(m_frame->colors.origin, colors_origin_pgid)
PARSECOLOR(m_frame->colors.ruler_h, colors_ruler_h_pgid)
PARSECOLOR(m_frame->colors.ruler_v, colors_ruler_v_pgid)
PARSE(&m_frame->alphas.canvas_shape_controlpoint, alphas_canvas_shape_controlpoint_pgid)
PARSE(&m_frame->alphas.canvas_shape_guideline, alphas_canvas_shape_guideline_pgid)
PARSE(&m_frame->alphas.canvas_shape_mainpoint, alphas_canvas_shape_mainpoint_pgid)
PARSE(&m_frame->alphas.canvas_shape_normal, alphas_canvas_shape_normal_pgid)
PARSE(&m_frame->alphas.canvas_shape_outline, alphas_canvas_shape_outline_pgid)
PARSE(&m_frame->alphas.canvas_shape_preview, alphas_canvas_shape_preview_pgid)
PARSE(&m_frame->alphas.canvas_shape_selectpoint, alphas_canvas_shape_selectpoint_pgid)
PARSE(&m_frame->sizes.origincross, sizes_origincross_pgid)
PARSE(&m_frame->behaviors.autoaskimgopac, behaviors_autoaskimgopac_pgid)
PARSE(&m_frame->behaviors.capitalizecmds, behaviors_capitalizecmds_pgid)
PARSE(&m_frame->behaviors.parse_spc, behaviors_parse_spc_pgid)
PARSE(&m_frame->behaviors.nosplashscreen, behaviors_nosplashscreen_pgid)
PARSE(&m_frame->behaviors.confirmquit, behaviors_confirmquit_pgid)
wxCommandEvent evento( wxEVT_SETTINGS_CHANGED, event.GetId() );
evento.SetEventObject( button );
m_frame->GetEventHandler()->ProcessEvent( evento );
}
void ASSDrawSettingsDialog::OnSettingsRevertButtonClicked(wxCommandEvent &event)
{
RefreshSettingsDisplay();
}
void ASSDrawSettingsDialog::RefreshSettingsDisplay()
{
if (propgrid == NULL) return;
#define UPDATESETTING(value, pgid) propgrid->SetPropertyValue(pgid, value);
UPDATESETTING(m_frame->colors.canvas_bg, colors_canvas_bg_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_controlpoint, colors_canvas_shape_controlpoint_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_guideline, colors_canvas_shape_guideline_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_mainpoint, colors_canvas_shape_mainpoint_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_normal, colors_canvas_shape_normal_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_outline, colors_canvas_shape_outline_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_preview, colors_canvas_shape_preview_pgid)
UPDATESETTING(m_frame->colors.canvas_shape_selectpoint, colors_canvas_shape_selectpoint_pgid)
UPDATESETTING(m_frame->colors.library_libarea, colors_library_libarea_pgid)
UPDATESETTING(m_frame->colors.library_shape, colors_library_shape_pgid)
UPDATESETTING(m_frame->colors.origin, colors_origin_pgid)
UPDATESETTING(m_frame->colors.ruler_h, colors_ruler_h_pgid)
UPDATESETTING(m_frame->colors.ruler_v, colors_ruler_v_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_controlpoint, alphas_canvas_shape_controlpoint_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_guideline, alphas_canvas_shape_guideline_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_mainpoint, alphas_canvas_shape_mainpoint_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_normal, alphas_canvas_shape_normal_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_outline, alphas_canvas_shape_outline_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_preview, alphas_canvas_shape_preview_pgid)
UPDATESETTING(m_frame->alphas.canvas_shape_selectpoint, alphas_canvas_shape_selectpoint_pgid)
UPDATESETTING(m_frame->sizes.origincross, sizes_origincross_pgid)
UPDATESETTING(m_frame->behaviors.capitalizecmds, behaviors_capitalizecmds_pgid)
UPDATESETTING(m_frame->behaviors.autoaskimgopac, behaviors_autoaskimgopac_pgid)
UPDATESETTING(m_frame->behaviors.parse_spc, behaviors_parse_spc_pgid)
UPDATESETTING(m_frame->behaviors.nosplashscreen, behaviors_nosplashscreen_pgid)
UPDATESETTING(m_frame->behaviors.confirmquit, behaviors_confirmquit_pgid)
}