mirror of
https://github.com/n5ac/mmvari.git
synced 2025-12-06 04:12:03 +01:00
309 lines
9.4 KiB
C++
309 lines
9.4 KiB
C++
|
|
//Copyright+LGPL
|
|||
|
|
|
|||
|
|
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba
|
|||
|
|
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// This file is part of MMVARI.
|
|||
|
|
|
|||
|
|
// MMVARI is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License
|
|||
|
|
// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|||
|
|
|
|||
|
|
// MMVARI 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 Lesser General Public License for more details.
|
|||
|
|
|
|||
|
|
// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see
|
|||
|
|
// <http://www.gnu.org/licenses/>.
|
|||
|
|
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
#include <vcl.h>
|
|||
|
|
#pragma hdrstop
|
|||
|
|
|
|||
|
|
#include "FEdit.h"
|
|||
|
|
#include "ComLib.h"
|
|||
|
|
#include "Main.h"
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
#pragma package(smart_init)
|
|||
|
|
#pragma resource "*.dfm"
|
|||
|
|
//TFileEdit *FileEdit;
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
__fastcall TFileEdit::TFileEdit(TComponent* Owner)
|
|||
|
|
: TForm(Owner)
|
|||
|
|
{
|
|||
|
|
m_hWnd = NULL;
|
|||
|
|
m_uMsg = 0;
|
|||
|
|
m_FileName = "";
|
|||
|
|
REdit->Font->Pitch = fpFixed;
|
|||
|
|
if( sys.m_MsgEng ){
|
|||
|
|
REdit->Font->Name = "Courier New";
|
|||
|
|
REdit->Font->Charset = ANSI_CHARSET;
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
REdit->Font->Name = "<EFBFBD>l<EFBFBD>r <20>S<EFBFBD>V<EFBFBD>b<EFBFBD>N";
|
|||
|
|
REdit->Font->Charset = SHIFTJIS_CHARSET;
|
|||
|
|
|
|||
|
|
KF->Caption = "<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43>(&F)";
|
|||
|
|
KFN->Caption = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɐ<EFBFBD><EFBFBD>ւ<EFBFBD>(&N)";
|
|||
|
|
KFX->Caption = "<EFBFBD>I<EFBFBD><EFBFBD>(&X)";
|
|||
|
|
KE->Caption = "<EFBFBD>ҏW(&E)";
|
|||
|
|
KFA->Caption = "<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>ĕۑ<EFBFBD>(&A)...";
|
|||
|
|
KEU->Caption = "<EFBFBD><EFBFBD><EFBFBD>ɖ߂<EFBFBD>(&U)";
|
|||
|
|
KEC->Caption = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&T)";
|
|||
|
|
KECP->Caption = "<EFBFBD>R<EFBFBD>s<EFBFBD>[(&C)";
|
|||
|
|
KEP->Caption = "<EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD>(&P)";
|
|||
|
|
KEA->Caption = "<EFBFBD><EFBFBD><EFBFBD>ׂđI<EFBFBD><EFBFBD>(&L)";
|
|||
|
|
KS->Caption = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&S)";
|
|||
|
|
KSS->Caption = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&F)...";
|
|||
|
|
KSN->Caption = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&N)";
|
|||
|
|
}
|
|||
|
|
for( int i = 0; i < KE->Count; i++ ){
|
|||
|
|
TMenuItem *pMenu = new TMenuItem(this);
|
|||
|
|
pMenu->Caption = KE->Items[i]->Caption;
|
|||
|
|
pMenu->OnClick = KE->Items[i]->OnClick;
|
|||
|
|
PopupMenu->Items->Add(pMenu);
|
|||
|
|
}
|
|||
|
|
m_fDelFile = FALSE;
|
|||
|
|
m_InitFirst = TRUE;
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::Execute(LPCSTR pName, BOOL fReadOnly)
|
|||
|
|
{
|
|||
|
|
DWORD dw = ::GetFileAttributes(pName);
|
|||
|
|
if( (dw != 0xffffffff) && (dw & FILE_ATTRIBUTE_READONLY) ){
|
|||
|
|
fReadOnly = TRUE;
|
|||
|
|
}
|
|||
|
|
REdit->ReadOnly = fReadOnly;
|
|||
|
|
AnsiString as = pName;
|
|||
|
|
if( fReadOnly ) as += sys.m_MsgEng ? " (Read only)" : " (<28>ǂݎ<C782><DD8E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p)";
|
|||
|
|
Caption = as;
|
|||
|
|
CWaitCursor tw;
|
|||
|
|
m_FileName = pName;
|
|||
|
|
OnWave();
|
|||
|
|
try {
|
|||
|
|
REdit->Lines->LoadFromFile(pName);
|
|||
|
|
}
|
|||
|
|
catch(...){
|
|||
|
|
FILE *fp;
|
|||
|
|
if( (fp = fopen(pName, "rt")) != NULL ){
|
|||
|
|
OnWave();
|
|||
|
|
char bf[2048];
|
|||
|
|
REdit->Lines->Clear();
|
|||
|
|
while(!feof(fp)){
|
|||
|
|
if( fgets(bf, sizeof(bf), fp) ){
|
|||
|
|
ClipLF(bf);
|
|||
|
|
REdit->Lines->Add(bf);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
fclose(fp);
|
|||
|
|
REdit->ReadOnly = TRUE;
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
ErrorMB(sys.m_MsgEng ? "Sorry, could not open <%s>...":"<%s><3E><><EFBFBD>I<EFBFBD>[<5B>v<EFBFBD><76><EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82><EFBFBD><EFBFBD>ł<EFBFBD><C582><EFBFBD>", pName);
|
|||
|
|
Close();
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if( m_fDelFile ){
|
|||
|
|
m_fDelFile = FALSE;
|
|||
|
|
unlink(pName);
|
|||
|
|
}
|
|||
|
|
REdit->Modified = FALSE;
|
|||
|
|
m_InitFirst = FALSE;
|
|||
|
|
OnWave();
|
|||
|
|
AdjustTop();
|
|||
|
|
Show();
|
|||
|
|
if( !::IsWindowEnabled(Handle) ) ::EnableWindow(Handle, TRUE);
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::Execute(AnsiString &as, LPCSTR pTitle, LPCSTR pName)
|
|||
|
|
{
|
|||
|
|
Caption = pTitle;
|
|||
|
|
m_FileName = pName;
|
|||
|
|
CWaitCursor tw;
|
|||
|
|
REdit->Text = as;
|
|||
|
|
REdit->ReadOnly = FALSE;
|
|||
|
|
REdit->Modified = FALSE;
|
|||
|
|
m_InitFirst = TRUE;
|
|||
|
|
OnWave();
|
|||
|
|
Show();
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::FormCloseQuery(TObject *Sender, bool &CanClose)
|
|||
|
|
{
|
|||
|
|
if( REdit->Modified ){
|
|||
|
|
int r = YesNoCancelMB(sys.m_MsgEng ? "Overwrite to the file (%s) ?" : "<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43> (%s) <20>ɏ㏑<C98F><E38F91><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD>?", m_FileName.c_str());
|
|||
|
|
switch(r){
|
|||
|
|
case IDYES:
|
|||
|
|
{
|
|||
|
|
CWaitCursor w;
|
|||
|
|
REdit->Lines->SaveToFile(m_FileName);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case IDCANCEL:
|
|||
|
|
CanClose = FALSE;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
CanClose = TRUE;
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::KECClick(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
REdit->CutToClipboard();
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::KECPClick(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
REdit->CopyToClipboard();
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::KEPClick(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
REdit->PasteFromClipboard();
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::KEUClick(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
if( REdit->HandleAllocated() ){
|
|||
|
|
SendMessage(REdit->Handle, EM_UNDO, 0, 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::KEAClick(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
REdit->SelectAll();
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::KEClick(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
BOOL f = !REdit->ReadOnly;
|
|||
|
|
KEU->Enabled = f && REdit->Modified;
|
|||
|
|
KECP->Enabled = REdit->SelLength;
|
|||
|
|
KEC->Enabled = f && KECP->Enabled;
|
|||
|
|
KEP->Enabled = f && ::IsClipboardFormatAvailable(CF_TEXT);
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::KFAClick(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
AnsiString FileName = m_FileName.c_str();
|
|||
|
|
SetEXT(FileName.c_str(), "");
|
|||
|
|
LPCSTR pEXT = GetEXT(m_FileName.c_str());
|
|||
|
|
SaveDialog->FileName = FileName;
|
|||
|
|
SaveDialog->DefaultExt = pEXT;
|
|||
|
|
if( SaveDialog->Execute() ) {
|
|||
|
|
// Options + OverwritePrompt = True thus no need to check.
|
|||
|
|
REdit->Lines->SaveToFile(SaveDialog->FileName);
|
|||
|
|
m_FileName = SaveDialog->FileName;
|
|||
|
|
REdit->Modified = FALSE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::KFXClick(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
Close();
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::PopupMenuPopup(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
KEClick(NULL);
|
|||
|
|
for( int i = 0; i < PopupMenu->Items->Count; i++ ){
|
|||
|
|
PopupMenu->Items->Items[i]->Enabled = KE->Items[i]->Enabled;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::KSSClick(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
FindDialog->Execute();
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::FindDialogFind(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
int FoundAt, StartPos, ToEnd;
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>͌<EFBFBD><CD8C>ݑI<DD91><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>ꏊ<EFBFBD><EA8F8A><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>n<EFBFBD><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482>Ȃ<EFBFBD><C882>ꍇ<EFBFBD>́C
|
|||
|
|
// <20>e<EFBFBD>L<EFBFBD>X<EFBFBD>g<EFBFBD>̍ŏ<CC8D><C58F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>n<EFBFBD><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(REdit->SelLength){
|
|||
|
|
StartPos = REdit->SelStart + REdit->SelLength;
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
StartPos = 0;
|
|||
|
|
}
|
|||
|
|
// ToEnd <20>͌<EFBFBD><CD8C><EFBFBD><EFBFBD>͈͂̕<CD82><CC95><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ToEnd = REdit->Text.Length() - StartPos;
|
|||
|
|
|
|||
|
|
|
|||
|
|
TSearchTypes stype;
|
|||
|
|
if( FindDialog->Options.Contains(frMatchCase) ) stype << stMatchCase;
|
|||
|
|
if( FindDialog->Options.Contains(frWholeWord) ) stype << stWholeWord;
|
|||
|
|
FoundAt = REdit->FindText(FindDialog->FindText, StartPos, ToEnd, stype);
|
|||
|
|
if( FoundAt != -1 ){
|
|||
|
|
REdit->SetFocus();
|
|||
|
|
REdit->SelStart = FoundAt;
|
|||
|
|
REdit->SelLength = FindDialog->FindText.Length();
|
|||
|
|
keybd_event(VK_RIGHT, 0, 0, 0);
|
|||
|
|
keybd_event(VK_RIGHT, 0, KEYEVENTF_KEYUP, 0);
|
|||
|
|
Application->ProcessMessages();
|
|||
|
|
REdit->SelStart = FoundAt;
|
|||
|
|
REdit->SelLength = FindDialog->FindText.Length();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::KSClick(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
KSN->Enabled = !FindDialog->FindText.IsEmpty();
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::KFNClick(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
CWaitCursor w;
|
|||
|
|
REdit->Lines->SaveToFile(m_FileName);
|
|||
|
|
REdit->Modified = FALSE;
|
|||
|
|
|
|||
|
|
Close();
|
|||
|
|
|
|||
|
|
char bf[256];
|
|||
|
|
sprintf(bf, "NOTEPAD %s", m_FileName.c_str());
|
|||
|
|
WinExec(bf, SW_SHOWDEFAULT);
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::FormClose(TObject *Sender, TCloseAction &Action)
|
|||
|
|
{
|
|||
|
|
if( (Action == caHide) && m_hWnd && m_uMsg && m_wParam){
|
|||
|
|
::PostMessage(m_hWnd, m_uMsg, m_wParam, DWORD(this));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::SetEvent(HWND hWnd, UINT uMsg, DWORD wParam)
|
|||
|
|
{
|
|||
|
|
m_hWnd = hWnd;
|
|||
|
|
m_uMsg = uMsg;
|
|||
|
|
m_wParam = wParam;
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::FormPaint(TObject *Sender)
|
|||
|
|
{
|
|||
|
|
if( m_InitFirst ){
|
|||
|
|
m_InitFirst = FALSE;
|
|||
|
|
const short _tt[]={
|
|||
|
|
VK_CONTROL, VK_END, VK_END|0x8000, VK_CONTROL|0x8000,
|
|||
|
|
0
|
|||
|
|
};
|
|||
|
|
KeyEvent(_tt);
|
|||
|
|
AdjustTop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
void __fastcall TFileEdit::AdjustTop(void)
|
|||
|
|
{
|
|||
|
|
int ot = MainVARI->GetOverlayTop();
|
|||
|
|
if( ot > Top ){
|
|||
|
|
Top = ot;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
|