Index: src/sdk/editorconfigurationdlg.cpp
===================================================================
--- src/sdk/editorconfigurationdlg.cpp (revision 7582)
+++ src/sdk/editorconfigurationdlg.cpp (working copy)
@@ -20,7 +20,7 @@
#include <wx/stattext.h>
#include <wx/textdlg.h>
#include <wx/xrc/xmlres.h>
-
+
#include "manager.h"
#include "configmanager.h"
#include "pluginmanager.h"
@@ -118,6 +118,7 @@
XRCCTRL(*this, "chkUseChangebar", wxCheckBox)->SetValue(m_EnableChangebar);
XRCCTRL(*this, "chkShowIndentGuides", wxCheckBox)->SetValue(cfg->ReadBool(_T("/show_indent_guides"), false));
XRCCTRL(*this, "chkBraceSmartIndent", wxCheckBox)->SetValue(cfg->ReadBool(_T("/brace_smart_indent"), true));
+ XRCCTRL(*this, "chkSelectionBraceCompletion", wxCheckBox)->SetValue(cfg->ReadBool(_T("/selection_brace_completion"), false));
XRCCTRL(*this, "chkTabIndents", wxCheckBox)->SetValue(cfg->ReadBool(_T("/tab_indents"), true));
XRCCTRL(*this, "chkBackspaceUnindents", wxCheckBox)->SetValue(cfg->ReadBool(_T("/backspace_unindents"), true));
XRCCTRL(*this, "chkWordWrap", wxCheckBox)->SetValue(cfg->ReadBool(_T("/word_wrap"), false));
@@ -795,6 +796,7 @@
cfg->Write(_T("/use_tab"), XRCCTRL(*this, "chkUseTab", wxCheckBox)->GetValue());
cfg->Write(_T("/show_indent_guides"), XRCCTRL(*this, "chkShowIndentGuides", wxCheckBox)->GetValue());
cfg->Write(_T("/brace_smart_indent"), XRCCTRL(*this, "chkBraceSmartIndent", wxCheckBox)->GetValue());
+ cfg->Write(_T("/selection_brace_completion"), XRCCTRL(*this, "chkSelectionBraceCompletion", wxCheckBox)->GetValue());
cfg->Write(_T("/tab_indents"), XRCCTRL(*this, "chkTabIndents", wxCheckBox)->GetValue());
cfg->Write(_T("/backspace_unindents"), XRCCTRL(*this, "chkBackspaceUnindents", wxCheckBox)->GetValue());
cfg->Write(_T("/word_wrap"), XRCCTRL(*this, "chkWordWrap", wxCheckBox)->GetValue());
Index: src/sdk/cbeditor.cpp
===================================================================
--- src/sdk/cbeditor.cpp (revision 7582)
+++ src/sdk/cbeditor.cpp (working copy)
@@ -2897,7 +2897,7 @@
wxTreeItemId sel = Manager::Get()->GetProjectManager()->GetTreeSelection();
if (sel.IsOk())
tree->SelectItem(sel, false);
-
+
const wxTreeItemId &itemId = m_pProjectFile->GetTreeItemId();
if (itemId.IsOk())
{
@@ -3022,6 +3022,104 @@
static int autoUnIndentValue = -1;
static int autoUnIndentLine = -1;
+ bool SelectionBraceCompletion = Manager::Get()->GetConfigManager(_T("editor"))->ReadBool(_T("/selection_brace_completion"), false);
+ if (SelectionBraceCompletion && !control->GetLastSelectedText().IsEmpty())
+ {
+ wxString selectedText = control->GetLastSelectedText();
+ switch (ch)
+ {
+ case _T('\''):
+ {
+ control->BeginUndoAction();
+ control->DeleteBack();
+ selectedText.Replace(wxT("\\'"), wxT("'"));
+ selectedText.Replace(wxT("'"), wxT("\\'"));
+ control->InsertText(pos - 1, wxT("'") + selectedText + wxT("'"));
+ control->SetEmptySelection(pos + selectedText.Length() + 1);
+ control->EndUndoAction();
+ return;
+ }
+ case _T('"'):
+ {
+ control->BeginUndoAction();
+ control->DeleteBack();
+ selectedText.Replace(wxT("\\\""), wxT("\""));
+ selectedText.Replace(wxT("\""), wxT("\\\""));
+ control->InsertText(pos - 1, wxT("\"") + selectedText + wxT("\""));
+ control->SetCurrentPos(pos + selectedText.Length() + 1);
+ control->EndUndoAction();
+ return;
+ }
+ case _T('('):
+ case _T(')'):
+ {
+ control->BeginUndoAction();
+ control->DeleteBack();
+ control->InsertText(pos - 1, wxT("(") + selectedText + wxT(")"));
+ if(ch == _T(')'))
+ {
+ control->SetEmptySelection(pos + selectedText.Length() + 1);
+ }
+ control->EndUndoAction();
+ return;
+ }
+ case _T('['):
+ case _T(']'):
+ {
+ control->BeginUndoAction();
+ control->DeleteBack();
+ control->InsertText(pos - 1, wxT("[") + selectedText + wxT("]"));
+ if(ch == _T(']'))
+ {
+ control->SetEmptySelection(pos + selectedText.Length() + 1);
+ }
+ control->EndUndoAction();
+ return;
+ }
+ case _T('<'):
+ case _T('>'):
+ {
+ control->BeginUndoAction();
+ control->DeleteBack();
+ control->InsertText(pos - 1, wxT("<") + selectedText + wxT(">"));
+ if(ch == _T('>'))
+ {
+ control->SetEmptySelection(pos + selectedText.Length() + 1);
+ }
+ control->EndUndoAction();
+ return;
+ }
+ case _T('{'):
+ case _T('}'):
+ {
+ control->BeginUndoAction();
+ control->DeleteBack();
+ control->InsertText(pos - 1, selectedText);
+ control->SetSelectionVoid(pos - 1, pos + selectedText.Length() - 1);
+ int startLine = control->LineFromPosition(control->GetSelectionStart());
+ int endLine = control->LineFromPosition(control->GetSelectionEnd());
+ if(startLine == endLine)
+ {
+ control->Home();
+ }
+ control->Tab();
+ control->SetEmptySelection(control->GetLineEndPosition(endLine));
+ control->NewLine();
+ control->BackTab();
+ control->InsertText(control->GetCurrentPos(), wxT("}"));
+ control->SetEmptySelection(control->GetLineEndPosition(startLine - 1));
+ control->NewLine();
+ control->InsertText(control->GetCurrentPos(), wxT("{"));
+ if(ch == _T('}'))
+ {
+ control->SetEmptySelection(control->GetLineEndPosition(endLine + 2));
+ }
+ control->EndUndoAction();
+ return;
+ }
+ }
+ }
+
// indent
if (ch == _T('\n'))
{
Index: src/sdk/cbstyledtextctrl.cpp
===================================================================
--- src/sdk/cbstyledtextctrl.cpp (revision 7582)
+++ src/sdk/cbstyledtextctrl.cpp (working copy)
@@ -123,6 +123,8 @@
void cbStyledTextCtrl::OnKeyDown(wxKeyEvent& event)
{
+ m_lastSelectedText = GetSelectedText();
+
switch (event.GetKeyCode())
{
case WXK_TAB:
Index: src/sdk/resources/editor_configuration.xrc
===================================================================
--- src/sdk/resources/editor_configuration.xrc (revision 7582)
+++ src/sdk/resources/editor_configuration.xrc (working copy)
@@ -154,7 +154,7 @@
</object>
<object class="sizeritem">
<object class="wxStaticBoxSizer">
- <label>End-of-line options</label>
+ <label>Highlight occurrences</label>
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<object class="wxFlexGridSizer">
@@ -162,64 +162,54 @@
<vgap>4</vgap>
<hgap>4</hgap>
<object class="sizeritem">
- <object class="wxCheckBox" name="chkShowEOL">
- <label>Show end-of-line chars</label>
+ <object class="wxCheckBox" name="chkHighlightOccurrences">
+ <label>Highlight occurrences</label>
+ <checked>1</checked>
</object>
<flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
</object>
<object class="sizeritem">
- <object class="wxCheckBox" name="chkStripTrailings">
- <label>Strip trailing blanks</label>
+ <object class="wxCheckBox" name="chkHighlightOccurrencesCaseSensitive">
+ <label>Case sensitive</label>
<checked>1</checked>
</object>
- <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxLEFT|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>10</border>
</object>
<object class="sizeritem">
- <object class="wxCheckBox" name="chkEnsureFinalEOL">
- <label>End files with blank line</label>
+ <object class="wxCheckBox" name="chkHighlightOccurrencesWholeWord">
+ <label>Whole words only</label>
+ <checked>1</checked>
</object>
- <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxLEFT|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>10</border>
</object>
<object class="sizeritem">
- <object class="wxCheckBox" name="chkEnsureConsistentEOL">
- <label>Ensure consistent EOLs</label>
- </object>
- <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
- </object>
- <object class="sizeritem">
<object class="wxBoxSizer">
<object class="sizeritem">
- <object class="wxStaticText" name="ID_STATICTEXT2">
- <label>End-of-line mode:</label>
+ <object class="wxStaticText" name="stHighlightColour">
+ <label>Highlight colour</label>
</object>
- <flag>wxTOP|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
- <border>4</border>
+ <flag>wxRIGHT|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+ <border>5</border>
</object>
<object class="sizeritem">
- <object class="wxComboBox" name="cmbEOLMode">
- <content>
- <item>CR LF</item>
- <item>CR</item>
- <item>LF</item>
- </content>
- <style>wxCB_READONLY</style>
+ <object class="wxButton" name="btnHighlightColour">
+ <label>...</label>
+ <bg>#FF0000</bg>
</object>
- <flag>wxLEFT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
- <border>16</border>
- <option>1</option>
+ <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
</object>
</object>
- <flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
- <option>1</option>
+ <flag>wxLEFT|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>10</border>
</object>
</object>
<flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>4</border>
- <option>1</option>
</object>
</object>
<flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
- <border>4</border>
<option>1</option>
</object>
<object class="sizeritem">
@@ -260,17 +250,23 @@
<flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
</object>
<object class="sizeritem">
- <object class="wxCheckBox" name="chkShowIndentGuides">
- <label>Show indentation guides</label>
+ <object class="wxCheckBox" name="chkBraceSmartIndent">
+ <label>Brace Smart Indent</label>
</object>
<flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
</object>
<object class="sizeritem">
- <object class="wxCheckBox" name="chkBraceSmartIndent">
- <label>Brace Smart Indent</label>
+ <object class="wxCheckBox" name="chkSelectionBraceCompletion">
+ <label>Selection brace completion</label>
</object>
<flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
</object>
+ <object class="sizeritem">
+ <object class="wxCheckBox" name="chkShowIndentGuides">
+ <label>Show indentation guides</label>
+ </object>
+ <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
+ </object>
</object>
<flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>4</border>
@@ -281,7 +277,7 @@
</object>
<object class="sizeritem">
<object class="wxStaticBoxSizer">
- <label>Highlight occurrences</label>
+ <label>End-of-line options</label>
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<object class="wxFlexGridSizer">
@@ -289,54 +285,64 @@
<vgap>4</vgap>
<hgap>4</hgap>
<object class="sizeritem">
- <object class="wxCheckBox" name="chkHighlightOccurrences">
- <label>Highlight occurrences</label>
- <checked>1</checked>
+ <object class="wxCheckBox" name="chkShowEOL">
+ <label>Show end-of-line chars</label>
</object>
<flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
</object>
<object class="sizeritem">
- <object class="wxCheckBox" name="chkHighlightOccurrencesCaseSensitive">
- <label>Case sensitive</label>
+ <object class="wxCheckBox" name="chkStripTrailings">
+ <label>Strip trailing blanks</label>
<checked>1</checked>
</object>
- <flag>wxLEFT|wxALIGN_LEFT|wxALIGN_TOP</flag>
- <border>10</border>
+ <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
</object>
<object class="sizeritem">
- <object class="wxCheckBox" name="chkHighlightOccurrencesWholeWord">
- <label>Whole words only</label>
- <checked>1</checked>
+ <object class="wxCheckBox" name="chkEnsureFinalEOL">
+ <label>End files with blank line</label>
</object>
- <flag>wxLEFT|wxALIGN_LEFT|wxALIGN_TOP</flag>
- <border>10</border>
+ <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
</object>
<object class="sizeritem">
+ <object class="wxCheckBox" name="chkEnsureConsistentEOL">
+ <label>Ensure consistent EOLs</label>
+ </object>
+ <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
+ </object>
+ <object class="sizeritem">
<object class="wxBoxSizer">
<object class="sizeritem">
- <object class="wxStaticText" name="stHighlightColour">
- <label>Highlight colour</label>
+ <object class="wxStaticText" name="ID_STATICTEXT2">
+ <label>End-of-line mode:</label>
</object>
- <flag>wxRIGHT|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
- <border>5</border>
+ <flag>wxTOP|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>4</border>
</object>
<object class="sizeritem">
- <object class="wxButton" name="btnHighlightColour">
- <label>...</label>
- <bg>#FF0000</bg>
+ <object class="wxComboBox" name="cmbEOLMode">
+ <content>
+ <item>CR LF</item>
+ <item>CR</item>
+ <item>LF</item>
+ </content>
+ <style>wxCB_READONLY</style>
</object>
- <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxLEFT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>16</border>
+ <option>1</option>
</object>
</object>
- <flag>wxLEFT|wxALIGN_LEFT|wxALIGN_TOP</flag>
- <border>10</border>
+ <flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <option>1</option>
</object>
</object>
<flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>4</border>
+ <option>1</option>
</object>
</object>
<flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>4</border>
<option>1</option>
</object>
</object>