forked from mia/Aegisub
Replaced SubsEditBox with a wxScintilla control
Originally committed to SVN as r598.
This commit is contained in:
parent
99f2323799
commit
8e357ab4c4
7 changed files with 275 additions and 129 deletions
|
@ -1182,14 +1182,26 @@ void FrameMain::OnCloseWindow (wxCloseEvent &event) {
|
||||||
//////////////////
|
//////////////////
|
||||||
// Cut/copy/paste
|
// Cut/copy/paste
|
||||||
void FrameMain::OnCut (wxCommandEvent &event) {
|
void FrameMain::OnCut (wxCommandEvent &event) {
|
||||||
|
if (FindFocus() == EditBox->TextEdit) {
|
||||||
|
EditBox->TextEdit->Cut();
|
||||||
|
return;
|
||||||
|
}
|
||||||
SubsBox->CutLines(SubsBox->GetSelection());
|
SubsBox->CutLines(SubsBox->GetSelection());
|
||||||
}
|
}
|
||||||
|
|
||||||
void FrameMain::OnCopy (wxCommandEvent &event) {
|
void FrameMain::OnCopy (wxCommandEvent &event) {
|
||||||
|
if (FindFocus() == EditBox->TextEdit) {
|
||||||
|
EditBox->TextEdit->Copy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
SubsBox->CopyLines(SubsBox->GetSelection());
|
SubsBox->CopyLines(SubsBox->GetSelection());
|
||||||
}
|
}
|
||||||
|
|
||||||
void FrameMain::OnPaste (wxCommandEvent &event) {
|
void FrameMain::OnPaste (wxCommandEvent &event) {
|
||||||
|
if (FindFocus() == EditBox->TextEdit) {
|
||||||
|
EditBox->TextEdit->Paste();
|
||||||
|
return;
|
||||||
|
}
|
||||||
SubsBox->PasteLines(SubsBox->GetFirstSelRow());
|
SubsBox->PasteLines(SubsBox->GetFirstSelRow());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -135,6 +135,7 @@ void OptionsManager::LoadDefaults() {
|
||||||
SetColour(_T("Syntax Highlight Brackets"),wxColour(20,50,255));
|
SetColour(_T("Syntax Highlight Brackets"),wxColour(20,50,255));
|
||||||
SetColour(_T("Syntax Highlight Slashes"),wxColour(255,0,200));
|
SetColour(_T("Syntax Highlight Slashes"),wxColour(255,0,200));
|
||||||
SetColour(_T("Syntax Highlight Tags"),wxColour(90,90,90));
|
SetColour(_T("Syntax Highlight Tags"),wxColour(90,90,90));
|
||||||
|
SetColour(_T("Syntax Highlight Numbers"),wxColour(0,90,0));
|
||||||
SetColour(_T("Syntax Highlight Error"),wxColour(200,0,0));
|
SetColour(_T("Syntax Highlight Error"),wxColour(200,0,0));
|
||||||
SetColour(_T("Edit Box Need Enter Background"),wxColour(192,192,255));
|
SetColour(_T("Edit Box Need Enter Background"),wxColour(192,192,255));
|
||||||
#if defined(__WINDOWS__)
|
#if defined(__WINDOWS__)
|
||||||
|
|
|
@ -110,6 +110,15 @@
|
||||||
#endif // wxWidgets
|
#endif // wxWidgets
|
||||||
|
|
||||||
|
|
||||||
|
/////////////
|
||||||
|
// Scintilla
|
||||||
|
#ifdef __WXDEBUG__
|
||||||
|
#pragma comment(lib, "wxscintillaud.lib")
|
||||||
|
#else
|
||||||
|
#pragma comment(lib, "wxscintillau.lib")
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
// Standard Win32 Libraries
|
// Standard Win32 Libraries
|
||||||
#pragma comment(lib, "Vfw32.lib")
|
#pragma comment(lib, "Vfw32.lib")
|
||||||
|
|
|
@ -75,6 +75,9 @@
|
||||||
#include <wx/spinctrl.h>
|
#include <wx/spinctrl.h>
|
||||||
#include <wx/wfstream.h>
|
#include <wx/wfstream.h>
|
||||||
#include <wx/tipdlg.h>
|
#include <wx/tipdlg.h>
|
||||||
|
#include <wx/event.h>
|
||||||
|
#include <wx/wxscintilla.h>
|
||||||
|
#include <wx/string.h>
|
||||||
|
|
||||||
|
|
||||||
///////////////
|
///////////////
|
||||||
|
|
|
@ -36,6 +36,9 @@
|
||||||
|
|
||||||
////////////
|
////////////
|
||||||
// Includes
|
// Includes
|
||||||
|
#include "setup.h"
|
||||||
|
#include <wx/colordlg.h>
|
||||||
|
#include <wx/fontdlg.h>
|
||||||
#include "subs_edit_box.h"
|
#include "subs_edit_box.h"
|
||||||
#include "subs_grid.h"
|
#include "subs_grid.h"
|
||||||
#include "ass_file.h"
|
#include "ass_file.h"
|
||||||
|
@ -49,8 +52,6 @@
|
||||||
#include "hilimod_textctrl.h"
|
#include "hilimod_textctrl.h"
|
||||||
#include "video_display.h"
|
#include "video_display.h"
|
||||||
#include "validators.h"
|
#include "validators.h"
|
||||||
#include <wx/colordlg.h>
|
|
||||||
#include <wx/fontdlg.h>
|
|
||||||
#include "dialog_colorpicker.h"
|
#include "dialog_colorpicker.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "frame_main.h"
|
#include "frame_main.h"
|
||||||
|
@ -294,6 +295,98 @@ void SubsEditBox::SetToLine(int n) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// Style a range
|
||||||
|
void SubsEditBox::UpdateStyle(int start, int _length) {
|
||||||
|
// Styling enabled?
|
||||||
|
if (Options.AsBool(_T("Syntax Highlight Enabled")) == 0) return;
|
||||||
|
|
||||||
|
// Set variables
|
||||||
|
wxString text = TextEdit->GetText();
|
||||||
|
int len = _length;
|
||||||
|
if (len < 0) len = text.Length();
|
||||||
|
|
||||||
|
// Begin styling
|
||||||
|
TextEdit->StartStyling(0,31);
|
||||||
|
int ran = 0;
|
||||||
|
int depth = 0;
|
||||||
|
int curStyle = 0;
|
||||||
|
wxChar curChar = 0;
|
||||||
|
wxChar prevChar = 0;
|
||||||
|
|
||||||
|
// Loop through
|
||||||
|
for (int i=start;i<len;i++) {
|
||||||
|
// Current/previous characters
|
||||||
|
prevChar = curChar;
|
||||||
|
curChar = text[i];
|
||||||
|
|
||||||
|
// Erroneous
|
||||||
|
if (depth < 0 || depth > 1) {
|
||||||
|
TextEdit->SetStyling(ran,curStyle);
|
||||||
|
ran = 0;
|
||||||
|
curStyle = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start override block
|
||||||
|
if (curChar == _T('{')) {
|
||||||
|
TextEdit->SetStyling(ran,curStyle);
|
||||||
|
ran = 0;
|
||||||
|
depth++;
|
||||||
|
if (depth == 1) curStyle = 1;
|
||||||
|
else curStyle = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// End override block
|
||||||
|
else if (curChar == _T('}')) {
|
||||||
|
TextEdit->SetStyling(ran,curStyle);
|
||||||
|
ran = 0;
|
||||||
|
depth--;
|
||||||
|
if (depth == 0) curStyle = 1;
|
||||||
|
else curStyle = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Outside
|
||||||
|
else if (depth == 0 && curStyle != 0) {
|
||||||
|
TextEdit->SetStyling(ran,curStyle);
|
||||||
|
ran = 0;
|
||||||
|
curStyle = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inside
|
||||||
|
else if (depth == 1) {
|
||||||
|
// Special character
|
||||||
|
if (curChar == _T('\\') || curChar == _T('(') || curChar == _T(')') || curChar == _T(',')) {
|
||||||
|
if (curStyle != 2) {
|
||||||
|
TextEdit->SetStyling(ran,curStyle);
|
||||||
|
ran = 0;
|
||||||
|
curStyle = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Number
|
||||||
|
else if ((curChar >= '0' && curChar <= '9') || curChar == '.' || curChar == '&' || curChar == '+' || curChar == '-' || (curChar == 'H' && prevChar == '&')) {
|
||||||
|
if (curStyle != 5) {
|
||||||
|
TextEdit->SetStyling(ran,curStyle);
|
||||||
|
ran = 0;
|
||||||
|
curStyle = 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tag name
|
||||||
|
else if (curStyle != 3) {
|
||||||
|
TextEdit->SetStyling(ran,curStyle);
|
||||||
|
ran = 0;
|
||||||
|
curStyle = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Increase ran length
|
||||||
|
ran++;
|
||||||
|
}
|
||||||
|
TextEdit->SetStyling(ran,curStyle);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
// Set text to a new value
|
// Set text to a new value
|
||||||
void SubsEditBox::SetText(const wxString _text) {
|
void SubsEditBox::SetText(const wxString _text) {
|
||||||
|
@ -306,115 +399,21 @@ void SubsEditBox::SetText(const wxString _text) {
|
||||||
text.Replace(_T("\r"),_T("\\N"));
|
text.Replace(_T("\r"),_T("\\N"));
|
||||||
text.Replace(_T("\n"),_T("\\N"));
|
text.Replace(_T("\n"),_T("\\N"));
|
||||||
|
|
||||||
// Mode
|
|
||||||
int mode = 0;
|
|
||||||
if (Options.AsBool(_T("Syntax Highlight Enabled"))) mode = 1;
|
|
||||||
|
|
||||||
// Syntax highlighted
|
|
||||||
if (mode == 1) {
|
|
||||||
// Define attributes
|
|
||||||
wxTextAttr Normal(Options.AsColour(_T("Syntax Highlight Normal")));
|
|
||||||
wxTextAttr Brackets(Options.AsColour(_T("Syntax Highlight Brackets")));
|
|
||||||
wxTextAttr Slashes(Options.AsColour(_T("Syntax Highlight Slashes")));
|
|
||||||
wxTextAttr Tags(Options.AsColour(_T("Syntax Highlight Tags")));
|
|
||||||
wxTextAttr Error(Options.AsColour(_T("Syntax Highlight Error")));
|
|
||||||
wxTextAttr *cur;
|
|
||||||
|
|
||||||
// Define font size
|
|
||||||
wxFont font = Normal.GetFont();
|
|
||||||
wxString fontname = Options.AsText(_T("Font Face"));
|
|
||||||
if (fontname != _T("")) font.SetFaceName(fontname);
|
|
||||||
font.SetPointSize(Options.AsInt(_T("Font Size")));
|
|
||||||
Normal.SetFont(font);
|
|
||||||
Brackets.SetFont(font);
|
|
||||||
Slashes.SetFont(font);
|
|
||||||
Tags.SetFont(font);
|
|
||||||
Error.SetFont(font);
|
|
||||||
|
|
||||||
// Prepare
|
// Prepare
|
||||||
cur = &Normal;
|
int from=0,to=0;
|
||||||
long from=0,to=0;
|
|
||||||
TextEdit->GetSelection(&from,&to);
|
|
||||||
TextEdit->Clear();
|
|
||||||
TextEdit->SetValue(text);
|
|
||||||
TextEdit->SetStyle(0,TextEdit->GetLastPosition()+1,Tags);
|
|
||||||
|
|
||||||
// Scan
|
|
||||||
size_t len = text.Len();
|
|
||||||
size_t start = 0;
|
|
||||||
int depth = 0;
|
|
||||||
wchar_t curchar;
|
|
||||||
for (unsigned int i=0;i<len;i++) {
|
|
||||||
curchar = text[i];
|
|
||||||
if (curchar == _T('{')) {
|
|
||||||
depth++;
|
|
||||||
if (cur) TextEdit->SetStyle(start,i,*cur);
|
|
||||||
start = i+1;
|
|
||||||
cur = &Brackets;
|
|
||||||
TextEdit->SetStyle(start-1,start,*cur);
|
|
||||||
if (depth == 0) cur = &Normal;
|
|
||||||
//else if (depth == 1) cur = &Tags;
|
|
||||||
else if (depth == 1) cur = NULL;
|
|
||||||
else {
|
|
||||||
cur = &Error;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (curchar == _T('}')) {
|
|
||||||
depth--;
|
|
||||||
if (cur) TextEdit->SetStyle(start,i,*cur);
|
|
||||||
start = i+1;
|
|
||||||
cur = &Brackets;
|
|
||||||
TextEdit->SetStyle(start-1,start,*cur);
|
|
||||||
if (depth == 0) cur = &Normal;
|
|
||||||
//else if (depth == 1) cur = &Tags;
|
|
||||||
else if (depth == 1) cur = NULL;
|
|
||||||
else {
|
|
||||||
cur = &Error;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (depth > 0 && curchar == _T('\\')) {
|
|
||||||
if (cur) TextEdit->SetStyle(start,i,*cur);
|
|
||||||
start = i+1;
|
|
||||||
TextEdit->SetStyle(start-1,start,Slashes);
|
|
||||||
//cur = &Tags;
|
|
||||||
cur = NULL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (cur) TextEdit->SetStyle(start,TextEdit->GetLastPosition()+1,*cur);
|
|
||||||
TextEdit->SetSelection(from,to);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 0x2600
|
|
||||||
else if (mode == 2) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Plain
|
|
||||||
else {
|
|
||||||
// Prepare
|
|
||||||
long from=0,to=0;
|
|
||||||
TextEdit->GetSelection(&from,&to);
|
TextEdit->GetSelection(&from,&to);
|
||||||
TextEdit->Clear();
|
TextEdit->Clear();
|
||||||
|
|
||||||
// Make style
|
// Set text
|
||||||
wxTextAttr Normal(Options.AsColour(_T("Syntax Highlight Normal")));
|
TextEdit->SetText(text);
|
||||||
wxFont font = Normal.GetFont();
|
|
||||||
wxString fontname = Options.AsText(_T("Font Face"));
|
|
||||||
if (fontname != _T("")) font.SetFaceName(fontname);
|
|
||||||
font.SetPointSize(Options.AsInt(_T("Font Size")));
|
|
||||||
Normal.SetFont(font);
|
|
||||||
|
|
||||||
// Set
|
// Style
|
||||||
TextEdit->SetValue(text);
|
UpdateStyle();
|
||||||
TextEdit->SetStyle(0,text.Length(),Normal);
|
|
||||||
|
// Restore selection
|
||||||
TextEdit->SetSelection(from,to);
|
TextEdit->SetSelection(from,to);
|
||||||
}
|
|
||||||
|
|
||||||
|
// Finish
|
||||||
TextEdit->Thaw();
|
TextEdit->Thaw();
|
||||||
textEditReady = true;
|
textEditReady = true;
|
||||||
}
|
}
|
||||||
|
@ -423,7 +422,8 @@ void SubsEditBox::SetText(const wxString _text) {
|
||||||
///////////////
|
///////////////
|
||||||
// Event table
|
// Event table
|
||||||
BEGIN_EVENT_TABLE(SubsEditBox, wxPanel)
|
BEGIN_EVENT_TABLE(SubsEditBox, wxPanel)
|
||||||
EVT_TEXT(EDIT_BOX, SubsEditBox::OnEditText)
|
//EVT_SCI_MODIFIED(EDIT_BOX,SubsEditBox::OnEditText)
|
||||||
|
EVT_SCI_STYLENEEDED(EDIT_BOX,SubsEditBox::OnNeedStyle)
|
||||||
EVT_CHECKBOX(SYNTAX_BOX, SubsEditBox::OnSyntaxBox)
|
EVT_CHECKBOX(SYNTAX_BOX, SubsEditBox::OnSyntaxBox)
|
||||||
EVT_RADIOBUTTON(RADIO_TIME_BY_FRAME, SubsEditBox::OnFrameRadio)
|
EVT_RADIOBUTTON(RADIO_TIME_BY_FRAME, SubsEditBox::OnFrameRadio)
|
||||||
EVT_RADIOBUTTON(RADIO_TIME_BY_TIME, SubsEditBox::OnTimeRadio)
|
EVT_RADIOBUTTON(RADIO_TIME_BY_TIME, SubsEditBox::OnTimeRadio)
|
||||||
|
@ -463,18 +463,33 @@ END_EVENT_TABLE()
|
||||||
|
|
||||||
/////////////////////
|
/////////////////////
|
||||||
// Text edited event
|
// Text edited event
|
||||||
void SubsEditBox::OnEditText(wxCommandEvent &event) {
|
void SubsEditBox::OnEditText(wxScintillaEvent &event) {
|
||||||
if (textEditReady) {
|
//int type = event.GetModificationType();
|
||||||
SetText(TextEdit->GetValue());
|
//if (!(type | wxSCI_MOD_BEFOREINSERT) && textEditReady) {
|
||||||
event.Skip();
|
// SetText(TextEdit->GetText());
|
||||||
|
// event.Skip();
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////
|
||||||
|
// Need style
|
||||||
|
void SubsEditBox::OnNeedStyle(wxScintillaEvent &event) {
|
||||||
|
// Check if it needs to fix text
|
||||||
|
wxString text = TextEdit->GetText();
|
||||||
|
if (text.Contains(_T("\n")) || text.Contains(_T("\r"))) {
|
||||||
|
SetText(TextEdit->GetText());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Just update style
|
||||||
|
else UpdateStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
// Syntax highlight checkbox
|
// Syntax highlight checkbox
|
||||||
void SubsEditBox::OnSyntaxBox(wxCommandEvent &event) {
|
void SubsEditBox::OnSyntaxBox(wxCommandEvent &event) {
|
||||||
SetText(TextEdit->GetValue());
|
SetText(TextEdit->GetText());
|
||||||
Options.SetBool(_T("Syntax Highlight Enabled"),SyntaxHighlight->GetValue());
|
Options.SetBool(_T("Syntax Highlight Enabled"),SyntaxHighlight->GetValue());
|
||||||
Options.Save();
|
Options.Save();
|
||||||
event.Skip();
|
event.Skip();
|
||||||
|
@ -519,7 +534,7 @@ void SubsEditBox::SetControlsState (bool state) {
|
||||||
controlState = state;
|
controlState = state;
|
||||||
|
|
||||||
// HACK: TextEdit workaround the stupid colour lock bug
|
// HACK: TextEdit workaround the stupid colour lock bug
|
||||||
TextEdit->SetEditable(state);
|
TextEdit->SetReadOnly(!state);
|
||||||
if (state) TextEdit->SetBackgroundColour(origBgColour);
|
if (state) TextEdit->SetBackgroundColour(origBgColour);
|
||||||
else TextEdit->SetBackgroundColour(disabledBgColour);
|
else TextEdit->SetBackgroundColour(disabledBgColour);
|
||||||
|
|
||||||
|
@ -551,7 +566,7 @@ void SubsEditBox::SetControlsState (bool state) {
|
||||||
|
|
||||||
// Clear values if it's false
|
// Clear values if it's false
|
||||||
if (state==false) {
|
if (state==false) {
|
||||||
TextEdit->SetValue(_T(""));
|
TextEdit->SetText(_T(""));
|
||||||
StartTime->SetTime(0);
|
StartTime->SetTime(0);
|
||||||
EndTime->SetTime(0);
|
EndTime->SetTime(0);
|
||||||
Layer->SetValue(_T(""));
|
Layer->SetValue(_T(""));
|
||||||
|
@ -896,7 +911,7 @@ void SubsEditBox::CommitText() {
|
||||||
|
|
||||||
// Update line
|
// Update line
|
||||||
if (cur) {
|
if (cur) {
|
||||||
cur->Text = TextEdit->GetValue();
|
cur->Text = TextEdit->GetText();
|
||||||
//cur->ParseASSTags();
|
//cur->ParseASSTags();
|
||||||
cur->UpdateData();
|
cur->UpdateData();
|
||||||
grid->Refresh(false);
|
grid->Refresh(false);
|
||||||
|
@ -907,23 +922,71 @@ void SubsEditBox::CommitText() {
|
||||||
|
|
||||||
////////////////////////
|
////////////////////////
|
||||||
// Edit box constructor
|
// Edit box constructor
|
||||||
SubsTextEditCtrl::SubsTextEditCtrl(wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name)
|
SubsTextEditCtrl::SubsTextEditCtrl(wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& wsize, long style, const wxValidator& validator, const wxString& name)
|
||||||
: wxTextCtrl(parent, id, value, pos, size, style, validator, name)
|
: wxScintilla(parent, id, pos, wsize, 0, value)
|
||||||
{
|
{
|
||||||
|
// Set properties
|
||||||
|
SetWrapMode(wxSCI_WRAP_WORD);
|
||||||
|
SetMarginWidth(1,0);
|
||||||
|
PushEventHandler(new SubsTextEditHandler(this,(SubsEditBox*)parent));
|
||||||
|
|
||||||
|
// Styles
|
||||||
|
wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
|
||||||
|
wxString fontname = Options.AsText(_T("Font Face"));
|
||||||
|
if (fontname != _T("")) font.SetFaceName(fontname);
|
||||||
|
int size = Options.AsInt(_T("Font Size"));
|
||||||
|
|
||||||
|
// Normal style
|
||||||
|
StyleSetFont(0,font);
|
||||||
|
StyleSetSize(0,size);
|
||||||
|
StyleSetForeground(0,Options.AsColour(_T("Syntax Highlight Normal")));
|
||||||
|
|
||||||
|
// Brackets style
|
||||||
|
StyleSetFont(1,font);
|
||||||
|
StyleSetSize(1,size);
|
||||||
|
StyleSetForeground(1,Options.AsColour(_T("Syntax Highlight Brackets")));
|
||||||
|
|
||||||
|
// Slashes/Parenthesis/Comma style
|
||||||
|
StyleSetFont(2,font);
|
||||||
|
StyleSetSize(2,size);
|
||||||
|
StyleSetForeground(2,Options.AsColour(_T("Syntax Highlight Slashes")));
|
||||||
|
|
||||||
|
// Tags style
|
||||||
|
StyleSetFont(3,font);
|
||||||
|
StyleSetSize(3,size);
|
||||||
|
StyleSetBold(3,true);
|
||||||
|
StyleSetForeground(3,Options.AsColour(_T("Syntax Highlight Tags")));
|
||||||
|
|
||||||
|
// Error style
|
||||||
|
StyleSetFont(4,font);
|
||||||
|
StyleSetSize(4,size);
|
||||||
|
StyleSetForeground(4,Options.AsColour(_T("Syntax Highlight Error")));
|
||||||
|
|
||||||
|
// Tag Number Parameters style
|
||||||
|
StyleSetFont(5,font);
|
||||||
|
StyleSetSize(5,size);
|
||||||
|
StyleSetForeground(5,Options.AsColour(_T("Syntax Highlight Numbers")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////////
|
////////////////////////
|
||||||
// Edit box event table
|
// Edit box event table
|
||||||
BEGIN_EVENT_TABLE(SubsTextEditCtrl,wxTextCtrl)
|
BEGIN_EVENT_TABLE(SubsTextEditCtrl,wxScintilla)
|
||||||
EVT_MOUSE_EVENTS(SubsTextEditCtrl::OnMouseEvent)
|
EVT_MOUSE_EVENTS(SubsTextEditCtrl::OnMouseEvent)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
|
// Edit box event handler
|
||||||
|
BEGIN_EVENT_TABLE(SubsTextEditHandler,wxEvtHandler)
|
||||||
|
EVT_KEY_DOWN(SubsTextEditHandler::OnKeyDown)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////
|
///////////////////////////////
|
||||||
// Split line preserving times
|
// Split line preserving times
|
||||||
void SubsEditBox::OnSplitLinePreserve (wxCommandEvent &event) {
|
void SubsEditBox::OnSplitLinePreserve (wxCommandEvent &event) {
|
||||||
long from,to;
|
int from,to;
|
||||||
TextEdit->GetSelection(&from, &to);
|
TextEdit->GetSelection(&from, &to);
|
||||||
grid->SplitLine(linen,from,0);
|
grid->SplitLine(linen,from,0);
|
||||||
}
|
}
|
||||||
|
@ -932,7 +995,7 @@ void SubsEditBox::OnSplitLinePreserve (wxCommandEvent &event) {
|
||||||
///////////////////////////////
|
///////////////////////////////
|
||||||
// Split line estimating times
|
// Split line estimating times
|
||||||
void SubsEditBox::OnSplitLineEstimate (wxCommandEvent &event) {
|
void SubsEditBox::OnSplitLineEstimate (wxCommandEvent &event) {
|
||||||
long from,to;
|
int from,to;
|
||||||
TextEdit->GetSelection(&from, &to);
|
TextEdit->GetSelection(&from, &to);
|
||||||
grid->SplitLine(linen,from,1);
|
grid->SplitLine(linen,from,1);
|
||||||
}
|
}
|
||||||
|
@ -983,8 +1046,8 @@ void SubsTextEditCtrl::OnMouseEvent(wxMouseEvent &event) {
|
||||||
wxMenu menu;
|
wxMenu menu;
|
||||||
menu.Append(EDIT_MENU_UNDO,_("&Undo"))->Enable(CanUndo());
|
menu.Append(EDIT_MENU_UNDO,_("&Undo"))->Enable(CanUndo());
|
||||||
menu.AppendSeparator();
|
menu.AppendSeparator();
|
||||||
menu.Append(EDIT_MENU_CUT,_("Cu&t"))->Enable(CanCut());
|
menu.Append(EDIT_MENU_CUT,_("Cu&t"))->Enable(GetSelectionStart()-GetSelectionEnd() != 0);
|
||||||
menu.Append(EDIT_MENU_COPY,_("&Copy"))->Enable(CanCopy());
|
menu.Append(EDIT_MENU_COPY,_("&Copy"))->Enable(GetSelectionStart()-GetSelectionEnd() != 0);
|
||||||
menu.Append(EDIT_MENU_PASTE,_("&Paste"))->Enable(CanPaste());
|
menu.Append(EDIT_MENU_PASTE,_("&Paste"))->Enable(CanPaste());
|
||||||
menu.AppendSeparator();
|
menu.AppendSeparator();
|
||||||
menu.Append(EDIT_MENU_SELECT_ALL,_("Select &All"));
|
menu.Append(EDIT_MENU_SELECT_ALL,_("Select &All"));
|
||||||
|
@ -1000,12 +1063,46 @@ void SubsTextEditCtrl::OnMouseEvent(wxMouseEvent &event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////
|
||||||
|
// Key Event
|
||||||
|
SubsTextEditHandler::SubsTextEditHandler(wxScintilla *scint,SubsEditBox *edit) {
|
||||||
|
box = edit;
|
||||||
|
parent = scint;
|
||||||
|
//Connect(wxEVT_SCI_MODIFIED,wxCommandEventHandler(SubsTextEditHandler::OnChange));
|
||||||
|
}
|
||||||
|
|
||||||
|
void SubsTextEditHandler::OnKeyDown(wxKeyEvent &event) {
|
||||||
|
// Ctrl held?
|
||||||
|
int key = event.GetKeyCode();
|
||||||
|
|
||||||
|
if (event.GetModifiers() == wxMOD_CONTROL) {
|
||||||
|
if (key == 'C') {
|
||||||
|
parent->Copy();
|
||||||
|
event.StopPropagation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (key == 'X') {
|
||||||
|
parent->Cut();
|
||||||
|
event.StopPropagation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (key == 'V') {
|
||||||
|
parent->Paste();
|
||||||
|
event.StopPropagation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////
|
//////////////////////////////////////
|
||||||
// Gets block number at text position
|
// Gets block number at text position
|
||||||
int SubsEditBox::BlockAtPos(int pos) {
|
int SubsEditBox::BlockAtPos(int pos) {
|
||||||
// Prepare
|
// Prepare
|
||||||
int n=0;
|
int n=0;
|
||||||
wxString text = TextEdit->GetValue();;
|
wxString text = TextEdit->GetText();;
|
||||||
int max = text.Length()-1;
|
int max = text.Length()-1;
|
||||||
|
|
||||||
// Find block number at pos
|
// Find block number at pos
|
||||||
|
@ -1022,13 +1119,13 @@ int SubsEditBox::BlockAtPos(int pos) {
|
||||||
// Set override
|
// Set override
|
||||||
void SubsEditBox::SetOverride (wxString tagname,wxString preValue,int forcePos) {
|
void SubsEditBox::SetOverride (wxString tagname,wxString preValue,int forcePos) {
|
||||||
// Selection
|
// Selection
|
||||||
long selstart, selend;
|
int selstart, selend;
|
||||||
if (forcePos != -1) {
|
if (forcePos != -1) {
|
||||||
selstart = forcePos;
|
selstart = forcePos;
|
||||||
selend = forcePos;
|
selend = forcePos;
|
||||||
}
|
}
|
||||||
else TextEdit->GetSelection(&selstart,&selend);
|
else TextEdit->GetSelection(&selstart,&selend);
|
||||||
int len = TextEdit->GetValue().Length();
|
int len = TextEdit->GetText().Length();
|
||||||
selstart = MID(0,selstart,len);
|
selstart = MID(0,selstart,len);
|
||||||
selend = MID(0,selend,len);
|
selend = MID(0,selend,len);
|
||||||
|
|
||||||
|
@ -1039,7 +1136,7 @@ void SubsEditBox::SetOverride (wxString tagname,wxString preValue,int forcePos)
|
||||||
// Get block at start
|
// Get block at start
|
||||||
size_t blockn = BlockAtPos(selstart);
|
size_t blockn = BlockAtPos(selstart);
|
||||||
AssDialogue *line = new AssDialogue();
|
AssDialogue *line = new AssDialogue();
|
||||||
line->Text = TextEdit->GetValue();
|
line->Text = TextEdit->GetText();
|
||||||
line->ParseASSTags();
|
line->ParseASSTags();
|
||||||
AssDialogueBlock *block = line->Blocks.at(blockn);
|
AssDialogueBlock *block = line->Blocks.at(blockn);
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
////////////
|
////////////
|
||||||
// Includes
|
// Includes
|
||||||
#include <wx/wxprec.h>
|
#include <wx/wxprec.h>
|
||||||
|
#include <wx/wxscintilla.h>
|
||||||
|
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
|
@ -50,11 +51,26 @@ class SubsEditBox;
|
||||||
class AudioDisplay;
|
class AudioDisplay;
|
||||||
class HiliModTextCtrl;
|
class HiliModTextCtrl;
|
||||||
class VideoDisplay;
|
class VideoDisplay;
|
||||||
|
class wxScintilla;
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// Event handler
|
||||||
|
class SubsTextEditHandler : public wxEvtHandler {
|
||||||
|
private:
|
||||||
|
wxScintilla *parent;
|
||||||
|
SubsEditBox *box;
|
||||||
|
void OnKeyDown(wxKeyEvent &event);
|
||||||
|
|
||||||
|
public:
|
||||||
|
SubsTextEditHandler(wxScintilla *scint,SubsEditBox *editbox);
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
////////////////////
|
////////////////////
|
||||||
// SubsTextEditCtrl
|
// SubsTextEditCtrl
|
||||||
class SubsTextEditCtrl : public wxTextCtrl {
|
class SubsTextEditCtrl : public wxScintilla {
|
||||||
private:
|
private:
|
||||||
void OnMouseEvent(wxMouseEvent &event);
|
void OnMouseEvent(wxMouseEvent &event);
|
||||||
|
|
||||||
|
@ -69,6 +85,8 @@ public:
|
||||||
//////////////////
|
//////////////////
|
||||||
// Edit box class
|
// Edit box class
|
||||||
class SubsEditBox : public wxPanel {
|
class SubsEditBox : public wxPanel {
|
||||||
|
friend class SubsTextEditHandler;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool enabled;
|
bool enabled;
|
||||||
bool textEditReady;
|
bool textEditReady;
|
||||||
|
@ -107,6 +125,9 @@ private:
|
||||||
|
|
||||||
int BlockAtPos(int pos);
|
int BlockAtPos(int pos);
|
||||||
|
|
||||||
|
void OnEditText(wxScintillaEvent &event);
|
||||||
|
void OnNeedStyle(wxScintillaEvent &event);
|
||||||
|
|
||||||
void OnButtonColor1(wxCommandEvent &event);
|
void OnButtonColor1(wxCommandEvent &event);
|
||||||
void OnButtonColor2(wxCommandEvent &event);
|
void OnButtonColor2(wxCommandEvent &event);
|
||||||
void OnButtonColor3(wxCommandEvent &event);
|
void OnButtonColor3(wxCommandEvent &event);
|
||||||
|
@ -117,7 +138,6 @@ private:
|
||||||
void OnButtonUnderline(wxCommandEvent &event);
|
void OnButtonUnderline(wxCommandEvent &event);
|
||||||
void OnButtonStrikeout(wxCommandEvent &event);
|
void OnButtonStrikeout(wxCommandEvent &event);
|
||||||
|
|
||||||
void OnEditText(wxCommandEvent &event);
|
|
||||||
void OnSyntaxBox(wxCommandEvent &event);
|
void OnSyntaxBox(wxCommandEvent &event);
|
||||||
void OnFrameRadio(wxCommandEvent &event);
|
void OnFrameRadio(wxCommandEvent &event);
|
||||||
void OnTimeRadio(wxCommandEvent &event);
|
void OnTimeRadio(wxCommandEvent &event);
|
||||||
|
@ -155,6 +175,7 @@ public:
|
||||||
|
|
||||||
void CommitText();
|
void CommitText();
|
||||||
void SetText(const wxString text);
|
void SetText(const wxString text);
|
||||||
|
void UpdateStyle(int start=0,int length=-1);
|
||||||
void Update(bool timeOnly=false);
|
void Update(bool timeOnly=false);
|
||||||
void UpdateGlobals();
|
void UpdateGlobals();
|
||||||
void SetToLine(int n);
|
void SetToLine(int n);
|
||||||
|
|
|
@ -265,16 +265,19 @@ void SubtitlesGrid::OnKeyDown(wxKeyEvent &event) {
|
||||||
// Copy
|
// Copy
|
||||||
if (Hotkeys.IsPressed(_T("Copy"))) {
|
if (Hotkeys.IsPressed(_T("Copy"))) {
|
||||||
CopyLines(GetSelection());
|
CopyLines(GetSelection());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cut
|
// Cut
|
||||||
if (Hotkeys.IsPressed(_T("Cut"))) {
|
if (Hotkeys.IsPressed(_T("Cut"))) {
|
||||||
CutLines(GetSelection());
|
CutLines(GetSelection());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Paste
|
// Paste
|
||||||
if (Hotkeys.IsPressed(_T("Paste"))) {
|
if (Hotkeys.IsPressed(_T("Paste"))) {
|
||||||
PasteLines(GetFirstSelRow());
|
PasteLines(GetFirstSelRow());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
|
|
Loading…
Reference in a new issue