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

431 lines
15 KiB
C++
Raw Normal View History

#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)
EVT_BUTTON(
BROWSER_COMMAND_BROWSE,
MyPropertySheet::OnBrowserCommandBrowse)
END_EVENT_TABLE()
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,
#ifdef __WXMSW__
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)
{
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)
{
case wxLANGUAGE_GERMAN:
languageBox->SetSelection(INDEX_GERMAN);
break;
case wxLANGUAGE_FRENCH:
languageBox->SetSelection(INDEX_FRENCH);
break;
case wxLANGUAGE_SLOVAK:
languageBox->SetSelection(INDEX_SLOVAK);
break;
case wxLANGUAGE_SWEDISH:
languageBox->SetSelection(INDEX_SWEDISH);
break;
case wxLANGUAGE_CHINESE_SIMPLIFIED:
languageBox->SetSelection(INDEX_CHINESE_SIMPLIFIED);
break;
case wxLANGUAGE_CHINESE_TRADITIONAL:
languageBox->SetSelection(INDEX_CHINESE_TRADITIONAL);
break;
case wxLANGUAGE_UKRAINIAN:
languageBox->SetSelection(INDEX_UKRAINIAN);
break;
default:
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);
#ifdef __WXMSW__
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);
#ifdef __WXMSW__
vsizerCheckbox2->Add(useCoolBarBox, 0, wxALL | wxALIGN_LEFT, 5);
#endif
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)
{
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();
#ifdef __WXMSW__
useCoolBar = useCoolBarBox->GetValue();
#endif
int languageChoice = languageBox->GetSelection();
switch (languageChoice)
{
case INDEX_GERMAN:
lang = wxLANGUAGE_GERMAN;
break;
case INDEX_CHINESE_SIMPLIFIED:
lang = wxLANGUAGE_CHINESE_SIMPLIFIED;
break;
case INDEX_CHINESE_TRADITIONAL:
lang = wxLANGUAGE_CHINESE_TRADITIONAL;
break;
case INDEX_FRENCH:
lang = wxLANGUAGE_FRENCH;
break;
case INDEX_SLOVAK:
lang = wxLANGUAGE_SLOVAK;
break;
case INDEX_SWEDISH:
lang = wxLANGUAGE_SWEDISH;
break;
case INDEX_UKRAINIAN:
lang = wxLANGUAGE_UKRAINIAN;
break;
default:
lang = wxLANGUAGE_ENGLISH_US;
break;
}
e.Skip();
}
void MyPropertySheet::OnApplicationDirBrowse(wxCommandEvent& e)
{
wxDirDialog *browseDialog = new wxDirDialog(this);
if (browseDialog->ShowModal() == wxID_OK)
applicationDirEdit->SetValue(browseDialog->GetPath());
}
void MyPropertySheet::OnBrowserCommandBrowse(wxCommandEvent& e)
{
wxFileDialog *browseDialog = new wxFileDialog(this);
if (browseDialog->ShowModal() == wxID_OK)
browserCommandEdit->SetValue(browseDialog->GetPath());
}
XmlCtrlProperties MyPropertySheet::getProperties()
{
return properties;
}
wxString MyPropertySheet::getApplicationDir()
{
return applicationDir;
}
wxString MyPropertySheet::getBrowserCommand()
{
return browserCommand;
}
bool MyPropertySheet::getSingleInstanceCheck()
{
return singleInstanceCheck;
}
bool MyPropertySheet::getRememberOpenTabs()
{
return rememberOpenTabs;
}
bool MyPropertySheet::getLibxmlNetAccess()
{
return libxmlNetAccess;
}
bool MyPropertySheet::getSaveBom()
{
return saveBom;
}
bool MyPropertySheet::getUnlimitedUndo()
{
return unlimitedUndo;
}
#ifdef __WXMSW__
bool MyPropertySheet::getUseCoolBar()
{
return useCoolBar;
}
#endif
int MyPropertySheet::getLang()
{
return lang;
}
bool MyPropertySheet::getRestoreLayout()
{
return restoreLayout;
}
bool MyPropertySheet::getExpandInternalEntities()
{
return expandInternalEntities;
}
bool MyPropertySheet::getShowFullPathOnFrame()
{
return showFullPathOnFrame;
}