Made toggling comment work for file types other than XML
This commit is contained in:
parent
19b7a74641
commit
a3cfe9b55f
File diff suppressed because it is too large
Load Diff
|
@ -193,6 +193,7 @@ BEGIN_EVENT_TABLE ( MyFrame, wxFrame )
|
|||
EVT_UPDATE_UI ( wxID_CUT, MyFrame::OnUpdateCutCopy )
|
||||
EVT_UPDATE_UI ( wxID_COPY, MyFrame::OnUpdateCutCopy )
|
||||
EVT_UPDATE_UI ( ID_FIND_AGAIN, MyFrame::OnUpdateFindAgain )
|
||||
EVT_UPDATE_UI ( ID_TOGGLE_COMMENT, MyFrame::OnUpdateToggleComment )
|
||||
EVT_UPDATE_UI_RANGE ( ID_FIND, ID_EXPORT_MSWORD, MyFrame::OnUpdateDocRange )
|
||||
EVT_UPDATE_UI ( ID_PREVIOUS_DOCUMENT, MyFrame::OnUpdatePreviousDocument )
|
||||
EVT_UPDATE_UI ( ID_NEXT_DOCUMENT, MyFrame::OnUpdateNextDocument )
|
||||
|
@ -3699,6 +3700,20 @@ void MyFrame::OnUpdatePaste ( wxUpdateUIEvent& event )
|
|||
event.Enable ( getActiveDocument() != NULL );
|
||||
}
|
||||
|
||||
void MyFrame::OnUpdateToggleComment ( wxUpdateUIEvent& event )
|
||||
{
|
||||
XmlDoc *doc = getActiveDocument();
|
||||
if ( !doc )
|
||||
{
|
||||
event.Enable ( false );
|
||||
return;
|
||||
}
|
||||
|
||||
int from = doc->GetSelectionStart();
|
||||
int to = doc->GetSelectionEnd();
|
||||
event.Enable ( from != to || doc->getType() == FILE_TYPE_XML );
|
||||
}
|
||||
|
||||
void MyFrame::OnUpdatePreviousDocument ( wxUpdateUIEvent& event )
|
||||
{
|
||||
if ( !getActiveDocument() )
|
||||
|
|
|
@ -288,6 +288,7 @@ class MyFrame : public wxFrame
|
|||
void OnUpdateCutCopy ( wxUpdateUIEvent& event );
|
||||
void OnUpdateFindAgain ( wxUpdateUIEvent& event );
|
||||
void OnUpdatePaste ( wxUpdateUIEvent& event );
|
||||
void OnUpdateToggleComment ( wxUpdateUIEvent& event );
|
||||
void OnUpdateDocRange ( wxUpdateUIEvent& event );
|
||||
void OnUpdateReplaceRange ( wxUpdateUIEvent& event );
|
||||
void OnUpdateReload ( wxUpdateUIEvent& event );
|
||||
|
|
|
@ -2215,18 +2215,14 @@ void XmlCtrl::OnMiddleDown ( wxMouseEvent& event )
|
|||
Paste();
|
||||
}
|
||||
|
||||
void XmlCtrl::toggleComment()
|
||||
bool XmlCtrl::selectCurrentElement()
|
||||
{
|
||||
int pos = -1;
|
||||
wxString text = GetSelectedText();
|
||||
if ( text.IsEmpty() )
|
||||
{
|
||||
if ( type == FILE_TYPE_BINARY )
|
||||
return;
|
||||
if ( type != FILE_TYPE_XML )
|
||||
return false;
|
||||
|
||||
pos = GetCurrentPos();
|
||||
Colourise ( 0, -1 );
|
||||
|
||||
int pos = GetCurrentPos();
|
||||
int style = getLexerStyleAt ( pos ) ;
|
||||
if ( style == wxSTC_H_COMMENT )
|
||||
{
|
||||
|
@ -2247,21 +2243,68 @@ void XmlCtrl::toggleComment()
|
|||
int start = findPreviousStartTag ( pos, 1, '<', pos );
|
||||
if ( start < 0 )
|
||||
{
|
||||
wxMessageBox(_T("Cann't find the start tag"));
|
||||
return;
|
||||
MyFrame *frame = ( MyFrame * ) wxTheApp->GetTopWindow();
|
||||
frame->statusProgress ( _("Cannot find the start tag") );
|
||||
return false;
|
||||
}
|
||||
int range = GetTextLength() - pos;
|
||||
int end = findNextEndTag ( pos, 1, '>', range );
|
||||
if ( end < 0 )
|
||||
{
|
||||
wxMessageBox(_T("Cann't find the end tag"));
|
||||
return;
|
||||
MyFrame *frame = ( MyFrame * ) wxTheApp->GetTopWindow();
|
||||
frame->statusProgress ( _("Cannot find the end tag") );
|
||||
return false;
|
||||
}
|
||||
SetSelection ( start, end );
|
||||
}
|
||||
text = GetSelectedText();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void XmlCtrl::toggleComment()
|
||||
{
|
||||
MyFrame *frame = ( MyFrame * ) wxTheApp->GetTopWindow();
|
||||
frame->statusProgress ( wxEmptyString );
|
||||
|
||||
int pos = -1;
|
||||
wxString commentStart = _T ( "<!--" );
|
||||
wxString commentEnd = _T ( "-->" );
|
||||
|
||||
// Is there a selection?
|
||||
int from = GetSelectionStart();
|
||||
int to = GetSelectionEnd();
|
||||
switch ( type )
|
||||
{
|
||||
case FILE_TYPE_BINARY:
|
||||
return;
|
||||
|
||||
case FILE_TYPE_CSS:
|
||||
if ( from == to )
|
||||
return;
|
||||
|
||||
commentStart = _T ( "/*" );
|
||||
commentEnd = _T ( "*/" );
|
||||
break;
|
||||
|
||||
case FILE_TYPE_XML:
|
||||
if ( from != to )
|
||||
break;
|
||||
|
||||
// Select current element
|
||||
pos = GetCurrentPos();
|
||||
if ( !selectCurrentElement() )
|
||||
return;
|
||||
break;
|
||||
|
||||
default:
|
||||
if ( from == to )
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
wxString text = GetSelectedText();
|
||||
wxASSERT ( !text.IsEmpty() );
|
||||
|
||||
// Skip leading spaces
|
||||
wxString::iterator itr, start, end;
|
||||
itr = start = text.begin();
|
||||
|
@ -2269,9 +2312,6 @@ void XmlCtrl::toggleComment()
|
|||
while ( itr != end && wxIsspace ( *itr ) )
|
||||
++itr;
|
||||
|
||||
const static wxString commentStart = _T ( "<!--" );
|
||||
const static wxString commentEnd = _T ( "-->" );
|
||||
|
||||
size_t startPos = itr - start;
|
||||
int ret = text.compare ( startPos, commentStart.length(), commentStart );
|
||||
if ( ret == 0 )
|
||||
|
@ -2306,6 +2346,8 @@ void XmlCtrl::toggleComment()
|
|||
// Comment selection
|
||||
|
||||
// "--" is not allowed in comments
|
||||
if ( commentStart == _T ( "<!--" ) )
|
||||
{
|
||||
const static wxString doubleHyphen = _T ( "--" );
|
||||
size_t offset = 0;
|
||||
while ( ( offset = text.find ( doubleHyphen, offset ) ) != wxString::npos )
|
||||
|
@ -2313,6 +2355,7 @@ void XmlCtrl::toggleComment()
|
|||
text.replace ( offset, doubleHyphen.length(), _T ( "- -" ) );
|
||||
offset += 2; // WARNING: Not three!
|
||||
}
|
||||
}
|
||||
|
||||
text = commentStart + text + commentEnd;
|
||||
|
||||
|
|
|
@ -158,6 +158,7 @@ class XmlCtrl: public wxStyledTextCtrl
|
|||
std::string myGetTextRaw(); // alternative to faulty stc implementation
|
||||
bool getValidationRequired();
|
||||
void setValidationRequired ( bool b );
|
||||
bool selectCurrentElement();
|
||||
void toggleComment();
|
||||
private:
|
||||
ValidationThread *validationThread; // used for background validation
|
||||
|
|
Loading…
Reference in New Issue