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

451 lines
17 KiB
C++
Raw Normal View History

/*
* 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; version 2 of the License.
*
* 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
*/
2007-09-07 23:17:30 +02:00
#include <wx/bookctrl.h>
#include <wx/fontenum.h>
#include "mypropertysheet.h"
2007-09-08 00:25:30 +02:00
BEGIN_EVENT_TABLE ( MyPropertySheet, wxPropertySheetDialog )
EVT_BUTTON ( wxID_OK, MyPropertySheet::OnOk )
EVT_BUTTON (
2007-09-07 23:17:30 +02:00
APPLICATION_DIR_BROWSE,
2007-09-08 00:25:30 +02:00
MyPropertySheet::OnApplicationDirBrowse )
EVT_BUTTON (
2007-09-07 23:17:30 +02:00
BROWSER_COMMAND_BROWSE,
2007-09-08 00:25:30 +02:00
MyPropertySheet::OnBrowserCommandBrowse )
2007-09-07 23:17:30 +02:00
END_EVENT_TABLE()
2007-09-08 00:25:30 +02:00
MyPropertySheet::MyPropertySheet (
wxWindow *parent,
XmlCtrlProperties& propertiesParameter,
wxString& applicationDirParameter,
wxString& browserCommandParameter,
bool rememberOpenTabsParameter,
bool libxmlNetAccessParameter,
bool singleInstanceCheckParameter,
bool saveBomParameter,
bool unlimitedUndoParameter,
bool restoreLayoutParameter,
bool expandInternalEntitiesParameter,
bool showFullPathOnFrameParameter,
int lang,
2007-09-07 23:17:30 +02:00
#ifdef __WXMSW__
2007-09-08 00:25:30 +02:00
bool useCoolBarParameter,
#endif
wxWindowID id,
wxString title,
const wxPoint& position,
const wxSize& size,
long style ) : wxPropertySheetDialog (
parent, id, title, position, size, style ),
properties ( propertiesParameter ),
applicationDir ( applicationDirParameter ),
browserCommand ( browserCommandParameter )
2007-09-07 23:17:30 +02:00
{
2007-09-08 00:25:30 +02:00
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 );
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 );
deleteWholeTagBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "I&ntelligent backspace/delete" ) );
deleteWholeTagBox->SetValue ( properties.deleteWholeTag );
completionBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Tag completion" ) );
completionBox->SetValue ( properties.completion );
foldBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Folding" ) );
foldBox->SetValue ( properties.fold );
currentLineBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Highlight current line" ) );
currentLineBox->SetValue ( properties.currentLine );
indentLinesBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Indentation guides" ) );
indentLinesBox->SetValue ( properties.indentLines );
insertCloseTagBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&Always insert closing tag" ) );
insertCloseTagBox->SetValue ( properties.insertCloseTag );
highlightSyntaxBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "Hi&ghlight syntax" ) );
highlightSyntaxBox->SetValue ( properties.highlightSyntax );
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 );
whitespaceVisibleBox =
new wxCheckBox ( editorPanel, wxID_ANY, _ ( "&White space visible" ) );
whitespaceVisibleBox->SetValue ( properties.whitespaceVisible );
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 );
col1sizer->Add ( insertCloseTagBox, 0, wxALL | wxALIGN_LEFT, 5 );
col1sizer->Add ( foldBox, 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 *hsizerBrowser = 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 *labelBrowser = new wxStaticText (
generalPanel,
wxID_ANY,
_ ( "Browser" ) );
browserCommandEdit = new wxTextCtrl (
generalPanel,
wxID_ANY,
browserCommand,
wxDefaultPosition,
wxSize ( 240, -1 ) );
wxButton *browseCommand = new wxButton (
generalPanel,
BROWSER_COMMAND_BROWSE,
_ ( "Browse" ),
wxDefaultPosition,
wxSize ( -1, browserCommandEdit->GetSize().GetHeight() ) );
wxStaticText *labelLanguage = new wxStaticText (
generalPanel,
wxID_ANY,
_ ( "Language (restart required)" ) );
languageBox = new wxChoice (
generalPanel,
wxID_ANY );
languageBox->Insert ( _T ( "Chinese Simplified" ), INDEX_CHINESE_SIMPLIFIED );
languageBox->Insert ( _T ( "Chinese Traditional" ), INDEX_CHINESE_TRADITIONAL );
languageBox->Insert ( _T ( "English (US)" ), INDEX_ENGLISH_US );
languageBox->Insert ( _T ( "French" ), INDEX_FRENCH );
languageBox->Insert ( _T ( "German" ), INDEX_GERMAN );
languageBox->Insert ( _T ( "Slovak" ), INDEX_SLOVAK );
languageBox->Insert ( _T ( "Swedish" ), INDEX_SWEDISH );
languageBox->Insert ( _T ( "Ukrainian" ), INDEX_UKRAINIAN );
switch ( lang )
{
2007-09-07 23:17:30 +02:00
case wxLANGUAGE_GERMAN:
2007-09-08 00:25:30 +02:00
languageBox->SetSelection ( INDEX_GERMAN );
break;
2007-09-07 23:17:30 +02:00
case wxLANGUAGE_FRENCH:
2007-09-08 00:25:30 +02:00
languageBox->SetSelection ( INDEX_FRENCH );
break;
2007-09-07 23:17:30 +02:00
case wxLANGUAGE_SLOVAK:
2007-09-08 00:25:30 +02:00
languageBox->SetSelection ( INDEX_SLOVAK );
break;
2007-09-07 23:17:30 +02:00
case wxLANGUAGE_SWEDISH:
2007-09-08 00:25:30 +02:00
languageBox->SetSelection ( INDEX_SWEDISH );
break;
2007-09-07 23:17:30 +02:00
case wxLANGUAGE_CHINESE_SIMPLIFIED:
2007-09-08 00:25:30 +02:00
languageBox->SetSelection ( INDEX_CHINESE_SIMPLIFIED );
break;
2007-09-07 23:17:30 +02:00
case wxLANGUAGE_CHINESE_TRADITIONAL:
2007-09-08 00:25:30 +02:00
languageBox->SetSelection ( INDEX_CHINESE_TRADITIONAL );
break;
2007-09-07 23:17:30 +02:00
case wxLANGUAGE_UKRAINIAN:
2007-09-08 00:25:30 +02:00
languageBox->SetSelection ( INDEX_UKRAINIAN );
break;
2007-09-07 23:17:30 +02:00
default:
2007-09-08 00:25:30 +02:00
languageBox->SetSelection ( INDEX_ENGLISH_US );
break;
}
libxmlNetAccessBox = new wxCheckBox (
generalPanel, wxID_ANY, _ ( "&Enable network access for DTD 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 );
2007-09-07 23:17:30 +02:00
#ifdef __WXMSW__
2007-09-08 00:25:30 +02:00
useCoolBarBox = new wxCheckBox (
generalPanel, wxID_ANY, _ ( "&Use Microsoft rebar control (restart required)" ) );
useCoolBarBox->SetValue ( useCoolBarParameter );
#endif
hsizer->Add ( applicationDirEdit, 0, wxALL | wxALIGN_LEFT, 0 );
hsizer->Add ( browse, 0, wxLEFT | wxALIGN_LEFT, 5 );
hsizerBrowser->Add ( browserCommandEdit, 0, wxALL | wxALIGN_LEFT, 0 );
hsizerBrowser->Add ( browseCommand, 0, wxLEFT | wxALIGN_LEFT, 5 );
vsizer->Add ( label, 0, wxLEFT | wxTOP | wxALIGN_LEFT, 5 );
vsizer->Add ( hsizer, 0, wxALL | wxALIGN_LEFT, 5 );
vsizer->Add ( labelBrowser, 0, wxLEFT | wxTOP | wxALIGN_LEFT, 5 );
vsizer->Add ( hsizerBrowser, 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 );
vsizerCheckbox1->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 );
2007-09-07 23:17:30 +02:00
#ifdef __WXMSW__
2007-09-08 00:25:30 +02:00
vsizerCheckbox2->Add ( useCoolBarBox, 0, wxALL | wxALIGN_LEFT, 5 );
2007-09-07 23:17:30 +02:00
#endif
2007-09-08 00:25:30 +02:00
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 );
2007-09-07 23:17:30 +02:00
2007-09-08 00:25:30 +02:00
editorSizer->Layout();
vsizer->Layout();
GetBookCtrl()->AddPage ( generalPanel, _ ( "General" ) );
GetBookCtrl()->AddPage ( editorPanel, _ ( "Editor" ) );
2007-09-07 23:17:30 +02:00
2007-09-08 00:25:30 +02:00
LayoutDialog();
2007-09-07 23:17:30 +02:00
}
2007-09-08 00:25:30 +02:00
MyPropertySheet::~MyPropertySheet()
{}
2007-09-07 23:17:30 +02:00
2007-09-08 00:25:30 +02:00
void MyPropertySheet::OnOk ( wxCommandEvent& e )
2007-09-07 23:17:30 +02:00
{
2007-09-08 00:25:30 +02:00
properties.completion = completionBox->GetValue();
properties.fold = foldBox->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();
wxString testDir = applicationDirEdit->GetValue();
if ( !wxFileName::DirExists ( testDir ) )
{
wxMessageBox ( _ ( "Cannot access application directory" ), _ ( "Options" ) );
// tbd: show general tab
return;
}
else
applicationDir = testDir;
browserCommand = browserCommandEdit->GetValue(); // permit incorrect value
singleInstanceCheck = singleInstanceCheckBox->GetValue();
restoreLayout = restoreLayoutBox->GetValue();
rememberOpenTabs = rememberOpenTabsBox->GetValue();
libxmlNetAccess = libxmlNetAccessBox->GetValue();
saveBom = saveBomBox->GetValue();
unlimitedUndo = unlimitedUndoBox->GetValue();
expandInternalEntities = expandInternalEntitiesBox->GetValue();
showFullPathOnFrame = fullPathBox->GetValue();
2007-09-07 23:17:30 +02:00
#ifdef __WXMSW__
2007-09-08 00:25:30 +02:00
useCoolBar = useCoolBarBox->GetValue();
2007-09-07 23:17:30 +02:00
#endif
2007-09-08 00:25:30 +02:00
int languageChoice = languageBox->GetSelection();
switch ( languageChoice )
{
2007-09-07 23:17:30 +02:00
case INDEX_GERMAN:
2007-09-08 00:25:30 +02:00
lang = wxLANGUAGE_GERMAN;
break;
2007-09-07 23:17:30 +02:00
case INDEX_CHINESE_SIMPLIFIED:
2007-09-08 00:25:30 +02:00
lang = wxLANGUAGE_CHINESE_SIMPLIFIED;
break;
2007-09-07 23:17:30 +02:00
case INDEX_CHINESE_TRADITIONAL:
2007-09-08 00:25:30 +02:00
lang = wxLANGUAGE_CHINESE_TRADITIONAL;
break;
2007-09-07 23:17:30 +02:00
case INDEX_FRENCH:
2007-09-08 00:25:30 +02:00
lang = wxLANGUAGE_FRENCH;
break;
2007-09-07 23:17:30 +02:00
case INDEX_SLOVAK:
2007-09-08 00:25:30 +02:00
lang = wxLANGUAGE_SLOVAK;
break;
2007-09-07 23:17:30 +02:00
case INDEX_SWEDISH:
2007-09-08 00:25:30 +02:00
lang = wxLANGUAGE_SWEDISH;
break;
2007-09-07 23:17:30 +02:00
case INDEX_UKRAINIAN:
2007-09-08 00:25:30 +02:00
lang = wxLANGUAGE_UKRAINIAN;
break;
2007-09-07 23:17:30 +02:00
default:
2007-09-08 00:25:30 +02:00
lang = wxLANGUAGE_ENGLISH_US;
break;
}
e.Skip();
2007-09-07 23:17:30 +02:00
}
2007-09-08 00:25:30 +02:00
void MyPropertySheet::OnApplicationDirBrowse ( wxCommandEvent& e )
2007-09-07 23:17:30 +02:00
{
2007-09-08 00:25:30 +02:00
wxDirDialog *browseDialog = new wxDirDialog ( this );
if ( browseDialog->ShowModal() == wxID_OK )
applicationDirEdit->SetValue ( browseDialog->GetPath() );
2007-09-07 23:17:30 +02:00
}
2007-09-08 00:25:30 +02:00
void MyPropertySheet::OnBrowserCommandBrowse ( wxCommandEvent& e )
2007-09-07 23:17:30 +02:00
{
2007-09-08 00:25:30 +02:00
wxFileDialog *browseDialog = new wxFileDialog ( this );
if ( browseDialog->ShowModal() == wxID_OK )
browserCommandEdit->SetValue ( browseDialog->GetPath() );
2007-09-07 23:17:30 +02:00
}
XmlCtrlProperties MyPropertySheet::getProperties()
{
2007-09-08 00:25:30 +02:00
return properties;
2007-09-07 23:17:30 +02:00
}
wxString MyPropertySheet::getApplicationDir()
{
2007-09-08 00:25:30 +02:00
return applicationDir;
2007-09-07 23:17:30 +02:00
}
wxString MyPropertySheet::getBrowserCommand()
{
2007-09-08 00:25:30 +02:00
return browserCommand;
2007-09-07 23:17:30 +02:00
}
bool MyPropertySheet::getSingleInstanceCheck()
{
2007-09-08 00:25:30 +02:00
return singleInstanceCheck;
2007-09-07 23:17:30 +02:00
}
bool MyPropertySheet::getRememberOpenTabs()
{
2007-09-08 00:25:30 +02:00
return rememberOpenTabs;
2007-09-07 23:17:30 +02:00
}
bool MyPropertySheet::getLibxmlNetAccess()
{
2007-09-08 00:25:30 +02:00
return libxmlNetAccess;
2007-09-07 23:17:30 +02:00
}
bool MyPropertySheet::getSaveBom()
{
2007-09-08 00:25:30 +02:00
return saveBom;
2007-09-07 23:17:30 +02:00
}
bool MyPropertySheet::getUnlimitedUndo()
{
2007-09-08 00:25:30 +02:00
return unlimitedUndo;
2007-09-07 23:17:30 +02:00
}
#ifdef __WXMSW__
bool MyPropertySheet::getUseCoolBar()
{
2007-09-08 00:25:30 +02:00
return useCoolBar;
2007-09-07 23:17:30 +02:00
}
#endif
int MyPropertySheet::getLang()
{
2007-09-08 00:25:30 +02:00
return lang;
2007-09-07 23:17:30 +02:00
}
bool MyPropertySheet::getRestoreLayout()
{
2007-09-08 00:25:30 +02:00
return restoreLayout;
2007-09-07 23:17:30 +02:00
}
bool MyPropertySheet::getExpandInternalEntities()
{
2007-09-08 00:25:30 +02:00
return expandInternalEntities;
2007-09-07 23:17:30 +02:00
}
bool MyPropertySheet::getShowFullPathOnFrame()
{
2007-09-08 00:25:30 +02:00
return showFullPathOnFrame;
2007-09-07 23:17:30 +02:00
}