xml-copy-editor-code/src/mypropertysheet.cpp

307 lines
13 KiB
C++

/*
* Copyright 2005-2007 Gerald Schmidt.
*
* This file is part of Xml Copy Editor.
*
* Xml Copy Editor 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.
*
* Xml Copy Editor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Xml Copy Editor; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <wx/bookctrl.h>
#include <wx/fontenum.h>
#include "mypropertysheet.h"
BEGIN_EVENT_TABLE ( MyPropertySheet, wxPropertySheetDialog )
EVT_BUTTON ( wxID_OK, MyPropertySheet::OnOk )
EVT_BUTTON (
APPLICATION_DIR_BROWSE,
MyPropertySheet::OnApplicationDirBrowse )
END_EVENT_TABLE()
MyPropertySheet::MyPropertySheet (
wxWindow *parent,
XmlCtrlProperties& propertiesParameter,
wxString& applicationDirParameter,
bool &rememberOpenTabsParameter,
bool &libxmlNetAccessParameter,
bool &singleInstanceCheckParameter,
bool &saveBomParameter,
bool &unlimitedUndoParameter,
bool &restoreLayoutParameter,
bool &expandInternalEntitiesParameter,
bool &showFullPathOnFrameParameter,
int &lang,
const std::set<const wxLanguageInfo *> &translations,
wxWindowID id,
wxString title,
const wxPoint& position,
const wxSize& size,
long style
)
: wxPropertySheetDialog ( parent, id, title, position, size, style )
, lang ( lang )
, properties ( propertiesParameter )
, applicationDir ( applicationDirParameter )
, singleInstanceCheck ( singleInstanceCheckParameter )
, rememberOpenTabs ( rememberOpenTabsParameter )
, libxmlNetAccess ( libxmlNetAccessParameter )
, saveBom ( saveBomParameter )
, unlimitedUndo ( unlimitedUndoParameter )
, restoreLayout ( restoreLayoutParameter )
, expandInternalEntities ( expandInternalEntitiesParameter )
, showFullPathOnFrame ( showFullPathOnFrameParameter )
{
CreateButtons ( wxOK | wxCANCEL );
// editor
wxPanel *editorPanel = new wxPanel ( GetBookCtrl() );
wxBoxSizer *editorSizer = new wxBoxSizer ( wxVERTICAL );
wxBoxSizer *col1sizer = new wxBoxSizer ( wxVERTICAL );
wxBoxSizer *col2sizer = new wxBoxSizer ( wxVERTICAL );
wxBoxSizer *tablesizer = new wxBoxSizer ( wxHORIZONTAL );
insertCloseTagBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Always insert closing tag" ) );
insertCloseTagBox->SetValue ( properties.insertCloseTag );
foldBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Folding" ) );
foldBox->SetValue ( properties.fold );
foldCompactBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "Fol&d blank lines" ) );
foldCompactBox->SetValue ( properties.foldCompact );
currentLineBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Highlight current line" ) );
currentLineBox->SetValue ( properties.currentLine );
highlightSyntaxBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "Hi&ghlight syntax" ) );
highlightSyntaxBox->SetValue ( properties.highlightSyntax );
indentLinesBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Indentation guides" ) );
indentLinesBox->SetValue ( properties.indentLines );
deleteWholeTagBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "I&ntelligent backspace/delete" ) );
deleteWholeTagBox->SetValue ( properties.deleteWholeTag );
numberBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Line numbers" ) );
numberBox->SetValue ( properties.number );
protectHiddenElementsBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "L&ock hidden tags" ) );
protectHiddenElementsBox->SetValue ( properties.protectHiddenElements );
completionBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Tag completion" ) );
completionBox->SetValue ( properties.completion );
validateAsYouTypeBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Validate as you type" ) );
validateAsYouTypeBox->SetValue ( properties.validateAsYouType );
toggleLineBackgroundBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "Va&riable highlight in tag free view" ) );
toggleLineBackgroundBox->SetValue ( properties.toggleLineBackground );
whitespaceVisibleBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&White space visible" ) );
whitespaceVisibleBox->SetValue ( properties.whitespaceVisible );
wxStaticText *labelFont = new wxStaticText (
editorPanel,
wxID_ANY,
_ ( "Font" ) );
fontBox = new wxChoice (
editorPanel,
wxID_ANY );
wxArrayString fontArray;
fontArray = wxFontEnumerator::GetFacenames();
fontArray.Sort();
for ( size_t i = 0; i < fontArray.GetCount(); i++ )
{
fontBox->Insert ( fontArray.Item ( i ), i );
}
fontBox->SetStringSelection ( properties.font );
col1sizer->Add ( insertCloseTagBox, 0, wxALL | wxALIGN_LEFT, 5 );
col1sizer->Add ( foldBox, 0, wxALL | wxALIGN_LEFT, 5 );
col1sizer->Add ( foldCompactBox, 0, wxALL | wxALIGN_LEFT, 5 );
col1sizer->Add ( currentLineBox, 0, wxALL | wxALIGN_LEFT, 5 );
col1sizer->Add ( highlightSyntaxBox, 0, wxALL | wxALIGN_LEFT, 5 );
col1sizer->Add ( indentLinesBox, 0, wxALL | wxALIGN_LEFT, 5 );
col1sizer->Add ( deleteWholeTagBox, 0, wxALL | wxALIGN_LEFT, 5 );
col2sizer->Add ( numberBox, 0, wxALL | wxALIGN_LEFT, 5 );
col2sizer->Add ( protectHiddenElementsBox, 0, wxALL | wxALIGN_LEFT, 5 );
col2sizer->Add ( completionBox, 0, wxALL | wxALIGN_LEFT, 5 );
col2sizer->Add ( validateAsYouTypeBox, 0, wxALL | wxALIGN_LEFT, 5 );
col2sizer->Add ( toggleLineBackgroundBox, 0, wxALL | wxALIGN_LEFT, 5 );
col2sizer->Add ( whitespaceVisibleBox, 0, wxALL | wxALIGN_LEFT, 5 );
tablesizer->Add ( col1sizer, 0, wxALL | wxALIGN_LEFT, 0 );
tablesizer->Add ( col2sizer, 0, wxALL | wxALIGN_LEFT, 0 );
editorSizer->Add ( tablesizer, 0, wxALL | wxALIGN_LEFT, 0 );
editorSizer->Add ( labelFont, 0, wxLEFT | wxTOP | wxALIGN_LEFT, 5 );
editorSizer->Add ( fontBox, 0, wxALL | wxALIGN_LEFT, 5 );
editorPanel->SetSizer ( editorSizer );
// general
wxPanel *generalPanel = new wxPanel ( GetBookCtrl() );
wxBoxSizer *vsizer = new wxBoxSizer ( wxVERTICAL );
wxBoxSizer *hsizer = new wxBoxSizer ( wxHORIZONTAL );
wxBoxSizer *hsizerCheckboxes = new wxBoxSizer ( wxHORIZONTAL );
wxBoxSizer *vsizerCheckbox1 = new wxBoxSizer ( wxVERTICAL );
wxBoxSizer *vsizerCheckbox2 = new wxBoxSizer ( wxVERTICAL );
wxStaticText *label = new wxStaticText (
generalPanel,
wxID_ANY,
_ ( "Application directory" ) );
applicationDirEdit = new wxTextCtrl (
generalPanel,
wxID_ANY,
applicationDir,
wxDefaultPosition,
wxSize ( 240, -1 ) );
wxButton *browse = new wxButton (
generalPanel,
APPLICATION_DIR_BROWSE,
_ ( "Browse" ),
wxDefaultPosition,
wxSize ( -1, applicationDirEdit->GetSize().GetHeight() ) );
wxStaticText *labelLanguage = new wxStaticText (
generalPanel,
wxID_ANY,
_ ( "Language (restart required)" ) );
languageBox = new wxChoice (
generalPanel,
wxID_ANY );
languageBox->SetExtraStyle ( languageBox->GetExtraStyle() | wxCB_SORT );
languageBox->Append ( _ ( "Default" ), ( void* ) wxLANGUAGE_DEFAULT );
languageBox->SetSelection ( 0 );
int index;
std::set<const wxLanguageInfo *>::const_iterator t = translations.begin();
for ( ; t != translations.end(); ++t )
{
index = languageBox->Append ( wxGetTranslation ( ( **t ).Description ),
( void* ) ( wxIntPtr ) ( **t ).Language );
if (lang == ( **t ).Language)
languageBox->SetSelection ( index );
}
libxmlNetAccessBox = new wxCheckBox (
generalPanel, wxID_ANY, _ ( "&Enable network access for XML validation" ) );
libxmlNetAccessBox->SetValue ( libxmlNetAccessParameter );
expandInternalEntitiesBox = new wxCheckBox (
generalPanel, wxID_ANY, _ ( "E&xpand internal entities on open" ) );
expandInternalEntitiesBox->SetValue ( expandInternalEntitiesParameter );
singleInstanceCheckBox = new wxCheckBox (
generalPanel, wxID_ANY, _ ( "&One application instance only" ) );
singleInstanceCheckBox->SetValue ( singleInstanceCheckParameter );
restoreLayoutBox = new wxCheckBox (
generalPanel, wxID_ANY, _ ( "Re&member layout on close" ) );
restoreLayoutBox->SetValue ( restoreLayoutParameter );
rememberOpenTabsBox = new wxCheckBox (
generalPanel, wxID_ANY, _ ( "&Remember open tabs on close" ) );
rememberOpenTabsBox->SetValue ( rememberOpenTabsParameter );
unlimitedUndoBox = new wxCheckBox (
generalPanel, wxID_ANY, _ ( "Re&tain undo history on save" ) );
unlimitedUndoBox->SetValue ( unlimitedUndoParameter );
saveBomBox = new wxCheckBox (
generalPanel, wxID_ANY, _ ( "&Save UTF-8 byte order mark" ) );
saveBomBox->SetValue ( saveBomParameter );
fullPathBox = new wxCheckBox (
generalPanel, wxID_ANY, _ ( "S&how full path on frame" ) );
fullPathBox->SetValue ( showFullPathOnFrameParameter );
hsizer->Add ( applicationDirEdit, 0, wxALL | wxALIGN_LEFT, 0 );
hsizer->Add ( browse, 0, wxLEFT | wxALIGN_LEFT, 5 );
vsizer->Add ( label, 0, wxLEFT | wxTOP | wxALIGN_LEFT, 5 );
vsizer->Add ( hsizer, 0, wxALL | wxALIGN_LEFT, 5 );
vsizer->Add ( labelLanguage, 0, wxLEFT | wxTOP | wxALIGN_LEFT, 5 );
vsizer->Add ( languageBox, 0, wxALL | wxALIGN_LEFT, 5 );
vsizerCheckbox1->Add ( libxmlNetAccessBox, 0, wxALL | wxALIGN_LEFT, 5 );
vsizerCheckbox1->Add ( expandInternalEntitiesBox, 0, wxALL | wxALIGN_LEFT, 5 );
vsizerCheckbox1->Add ( singleInstanceCheckBox, 0, wxALL | wxALIGN_LEFT, 5 );
vsizerCheckbox1->Add ( restoreLayoutBox, 0, wxALL | wxALIGN_LEFT, 5 );
vsizerCheckbox2->Add ( rememberOpenTabsBox, 0, wxALL | wxALIGN_LEFT, 5 );
vsizerCheckbox2->Add ( unlimitedUndoBox, 0, wxALL | wxALIGN_LEFT, 5 );
vsizerCheckbox2->Add ( saveBomBox, 0, wxALL | wxALIGN_LEFT, 5 );
vsizerCheckbox2->Add ( fullPathBox, 0, wxALL | wxALIGN_LEFT, 5 );
hsizerCheckboxes->Add ( vsizerCheckbox1, 0, wxALL | wxALIGN_LEFT, 0 );
hsizerCheckboxes->Add ( vsizerCheckbox2, 0, wxALL | wxALIGN_LEFT, 0 );
vsizer->Add ( hsizerCheckboxes, 0, wxALL | wxALIGN_LEFT, 5 );
generalPanel->SetSizer ( vsizer );
editorSizer->Layout();
vsizer->Layout();
GetBookCtrl()->AddPage ( generalPanel, _ ( "General" ) );
GetBookCtrl()->AddPage ( editorPanel, _ ( "Editor" ) );
LayoutDialog();
}
MyPropertySheet::~MyPropertySheet()
{}
void MyPropertySheet::OnOk ( wxCommandEvent& e )
{
wxString testDir = applicationDirEdit->GetValue();
if ( !wxDirExists ( testDir ) )
{
wxMessageBox ( _ ( "Cannot access application directory" ), _ ( "Options" ) );
// tbd: show general tab
return;
}
applicationDir = testDir;
properties.completion = completionBox->GetValue();
properties.fold = foldBox->GetValue();
properties.foldCompact = foldCompactBox->GetValue();
properties.number = numberBox->GetValue();
properties.currentLine = currentLineBox->GetValue();
properties.whitespaceVisible = whitespaceVisibleBox->GetValue();
properties.indentLines = indentLinesBox->GetValue();
properties.protectHiddenElements = protectHiddenElementsBox->GetValue();
properties.toggleLineBackground = toggleLineBackgroundBox->GetValue();
properties.insertCloseTag = insertCloseTagBox->GetValue();
properties.deleteWholeTag = deleteWholeTagBox->GetValue();
properties.validateAsYouType = validateAsYouTypeBox->GetValue();
properties.font = fontBox->GetStringSelection();
properties.highlightSyntax = highlightSyntaxBox->GetValue();
singleInstanceCheck = singleInstanceCheckBox->GetValue();
restoreLayout = restoreLayoutBox->GetValue();
rememberOpenTabs = rememberOpenTabsBox->GetValue();
libxmlNetAccess = libxmlNetAccessBox->GetValue();
saveBom = saveBomBox->GetValue();
unlimitedUndo = unlimitedUndoBox->GetValue();
expandInternalEntities = expandInternalEntitiesBox->GetValue();
showFullPathOnFrame = fullPathBox->GetValue();
int languageChoice = languageBox->GetSelection();
if ( languageChoice != wxNOT_FOUND )
lang = ( wxIntPtr ) languageBox->GetClientData ( languageChoice );
else
lang = wxLANGUAGE_DEFAULT;
e.Skip();
}
void MyPropertySheet::OnApplicationDirBrowse ( wxCommandEvent& e )
{
wxDirDialog browseDir ( this );
browseDir.SetPath ( applicationDirEdit->GetValue() );
if ( browseDir.ShowModal() == wxID_OK )
applicationDirEdit->SetValue ( browseDir.GetPath() );
}