⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ceditdoc.h

📁 日本的开源编辑器源码
💻 H
字号:
//	$Id: CEditDoc.h,v 1.41 2004/10/09 03:39:39 genta Exp $
/*!	@file
	@brief 文書関連情報の管理

	@author Norio Nakatani
	@date	1998/03/13 作成
	$Revision: 1.41 $
*/
/*
	Copyright (C) 1998-2001, Norio Nakatani

	This source code is designed for sakura editor.
	Please contact the copyright holder to use this code for other purpose.
*/

#ifndef _CEDITDOC_H_
#define _CEDITDOC_H_


#include <windows.h>
#include "CDocLineMgr.h"
#include "CLayoutMgr.h"
#include "COpeBuf.h"
#include "CDlgFind.h"
#include "CDlgReplace.h"
#include "CShareData.h"
#include "CEditView.h"
#include "CSplitterWnd.h"
#include "CDlgOpenFile.h"
#include "CDlgGrep.h"
#include "CDlgJump.h"
#include "CPropCommon.h"
#include "CPropTypes.h"
#include "CDlgFuncList.h"
#include "CHokanMgr.h"
#include "CAutoSave.h"
#include "CFuncLookup.h"
class CImageListMgr; // 2002/2/10 aroka
class CSMacroMgr; // 2002/2/10 aroka
class CEditWnd; // Sep. 10, 2002 genta
struct oneRule; // 2004.04.11 genta パラメータ内のstructを削除するため.doxygen対策

//! 文書関連情報の管理
//	@date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。
class SAKURA_CORE_API CEditDoc
{
public:
	/*
	||  Constructors
	*/
	CEditDoc();
	~CEditDoc();

	/*
	||  初期化系メンバ関数
	*/
	BOOL Create( HINSTANCE, HWND, CImageListMgr* /*, int, int, int, int*/ );
	void Init( void );	/* 既存データのクリア */
	void InitAllView();	/* 全ビューの初期化:ファイルオープン/クローズ時等に、ビューを初期化する */

	/*
	|| 状態
	*/
	BOOL IsTextSelected( void );	/* テキストが選択されているか */
	BOOL IsEnableUndo( void );		/* Undo(元に戻す)可能な状態か? */
	BOOL IsEnableRedo( void );		/* Redo(やり直し)可能な状態か? */
	BOOL IsEnablePaste( void );		/* クリップボードから貼り付け可能か? */
	void SetFileInfo( FileInfo* );	/* 編集ファイル情報を格納 */

	/* いろいろ */
	LRESULT DispatchEvent( HWND, UINT, WPARAM, LPARAM );	/* メッセージディスパッチャ */
	void OnMove( int , int , int , int );
	BOOL OnFileClose( void );	/* ファイルを閉じるときのMRU登録 & 保存確認 & 保存実行 */
	BOOL HandleCommand( int );
	void SetActivePane( int );	/* アクティブなペインを設定 */
	int GetActivePane( void );	/* アクティブなペインを取得 */
	void RedrawInactivePane( void );	/* 非アクティブなペインをRedrawする */
	BOOL DetectWidthOfLineNumberAreaAllPane( BOOL bRedraw );	/* すべてのペインで、行番号表示に必要な幅を再設定する(必要なら再描画する) */
	BOOL SelectFont( LOGFONT* );
	BOOL FileRead( /*const*/ char* , BOOL*, int, BOOL, BOOL );	/* ファイルを開く */
	//	Feb. 9, 2001 genta 引数追加
	BOOL FileWrite( const char*, enumEOLType cEolType );
	bool SaveFile( const char* path );	//	ファイルの保存(に伴ういろいろ)
	void OpenFile( const char *filename = NULL, int nCharCode = CODE_AUTODETECT,
		BOOL bReadOnly = FALSE );	//	Oct. 9, 2004 genta CEditViewより移動

	int MakeBackUp( const char* target_file );	/* バックアップの作成 */
	void SetParentCaption( BOOL = FALSE );	/* 親ウィンドウのタイトルを更新 */
	BOOL OpenPropertySheet( int/*, int*/ );	/* 共通設定 */
	BOOL OpenPropertySheetTypes( int, int );	/* タイプ別設定 */

	BOOL OpenFileDialog( HWND, const char*, char*, int*, BOOL* );	/* 「ファイルを開く」ダイアログ */
	void OnChangeSetting( void );	/* ビューに設定変更を反映させる */
// 2004/06/21 novice タグジャンプ機能追加
#if 0
	void SetReferer( HWND , int, int );	/* タグジャンプ元など参照元の情報を保持する */
#endif
	//	Jul. 26, 2003 ryoji BOMオプション追加
	BOOL SaveFileDialog( char*, int*, CEOL* pcEol = NULL, BOOL* pbBomExist = NULL );	/* 「ファイル名を付けて保存」ダイアログ */

	void CheckFileTimeStamp( void );	/* ファイルのタイムスタンプのチェック処理 */
	void ReloadCurrentFile( BOOL, BOOL );/* 同一ファイルの再オープン */

	//	May 15, 2000 genta
	CEOL  GetNewLineCode() const { return m_cNewLineCode; }
	void  SetNewLineCode(const CEOL& t){ m_cNewLineCode = t; }

	//	Aug. 14, 2000 genta
	bool IsModificationForbidden( int nCommand );

	//	Aug. 21, 2000 genta
	CPassiveTimer	m_cAutoSave;	//!<	自動保存管理
	void	CheckAutoSave(void);
	void	ReloadAutoSaveParam(void);	//	設定をSharedAreaから読み出す

	//	Aug. 31, 2000 genta
	const CEditView& ActiveView(void) const { return m_cEditViewArr[m_nActivePaneIndex]; }
	CEditView& ActiveView(void) { return m_cEditViewArr[m_nActivePaneIndex]; }
	//	Nov. 20, 2000 genta
	void SetImeMode(int mode);	//	IME状態の設定

	//	Sep. 9, 2002 genta
	const char* GetFilePath(void) const { return m_szFilePath; }
	bool IsFilePathAvailable(void) const { return m_szFilePath[0] != '\0'; }
	//	2002.10.13 Moca
	const char* GetFileName(void) const; //!< ファイル名(パスなし)を取得
	void SetDocumentIcon(void);	// Sep. 10, 2002 genta

	//	Nov. 29, 2000 From Here	genta
	//	設定の一時変更時に拡張子による強制的な設定変更を無効にする
	void LockDocumentType(void){ m_nSettingTypeLocked = true; }
	void UnlockDocumentType(void){ m_nSettingTypeLocked = false; }
	bool GetDocumentLockState(void){ return m_nSettingTypeLocked; }
	//	Nov. 29, 2000 To Here
	//	Nov. 23, 2000 From Here	genta
	//	文書種別情報の設定,取得Interface
	void SetDocumentType(int type, bool force)	//	文書種別の設定
	{
		if( (!m_nSettingTypeLocked) || force ){
			m_nSettingType = type;
			UnlockDocumentType();
			m_pShareData->m_Types[m_nSettingType].m_nRegexKeyMagicNumber++;	//@@@ 2001.11.17 add MIK
			SetDocumentIcon();	// Sep. 11, 2002 genta
		}
	}
	int GetDocumentType(void) const	//!<	文書種別の読み出し
	{
		return m_nSettingType;
	}
	Types& GetDocumentAttribute(void) const	//!<	設定された文書情報への参照を返す
	{
		return m_pShareData->m_Types[m_nSettingType];
	}
	//	Nov. 23, 2000 To Here

	//	May 18, 2001 genta
	//! ReadOnly状態の読み出し
	BOOL IsReadOnly( void ){ return m_bReadOnly; }
	//! ReadOnly状態の設定
	void SetReadOnly( BOOL flag){ m_bReadOnly = flag; }
	
	//	Jan. 22, 2002 genta Modified Flagの設定
	void SetModified( bool flag, bool redraw);
	/** ファイルが修正中かどうか
		@retval true ファイルは修正されている
		@retval false ファイルは修正されていない
	*/
	bool IsModified( void ) const { return m_bIsModified; }

	//	Jan. 28, 2002 genta Modified Flagの設定 (暫定BOOL Version)
	void SetModified( bool flag, BOOL redraw){
		SetModified( flag, redraw != FALSE );
	}
	void SetModified( BOOL flag, bool redraw){
		SetModified( flag != FALSE, redraw );
	}

	void AddToMRU(void); // Mar. 30, 2003 genta
	// Mar. 31, 2003 genta ExpandParameter補助関数
	const char* ExParam_SkipCond(const char* pszSource, int part);
	int ExParam_Evaluate( const char* pCond );

protected:
	int				m_nSettingType;
	bool			m_nSettingTypeLocked;	//	文書種別の一時設定状態
	//	Jan. 22, 2002 genta public -> protectedに移動
	/*! 変更フラグ
		@date 2002.01.22 genta public→protectedに移動.型をint→boolに.
	*/
	bool			m_bIsModified;
	//	Sep. 9, 2002 genta protectedに移動
	char			m_szFilePath[_MAX_PATH];	/* 現在編集中のファイルのパス */
	
	void SetFilePath(const char*);	// Sep. 9, 2002 genta

public: /* テスト用にアクセス属性を変更 */
	/* 入力補完 */
	CHokanMgr		m_cHokanMgr;
	BOOL			m_bGrepRunning;				/* Grep処理中 */
//@@@ 2002.01.14 YAZAKI 印刷プレビューをCPrintPreviewに独立させたことによる変更
//	BOOL			m_bPrintPreviewMode;		/* 印刷プレビューモードか */
	int				m_nCommandExecNum;			/* コマンド実行回数 */
	FILETIME		m_FileTime;					/* ファイルの最終更新日付 */
	CDocLineMgr		m_cDocLineMgr;
	CLayoutMgr		m_cLayoutMgr;
	int				m_nCharCode;				/* 文字コード種別 */
	BOOL			m_bBomExist;	//!< 保存時にBOMを付けるかどうか Jul. 26, 2003 ryoji 

	//	May 15, 2000 genta
protected:
	CEOL 			m_cNewLineCode;				//	Enter押下時に挿入する改行コード種別
public:
	CEOL			m_cSaveLineCode;			//	保存時の改行コード種別(EOL_NONE:変換なし)


	BOOL			m_bReadOnly;				/* 読み取り専用モード */
	BOOL			m_bDebugMode;				/* デバッグモニタモード */
	BOOL			m_bGrepMode;				/* Grepモードか */
	char			m_szGrepKey[1024];			/* Grepモードの場合、その検索キー */
	HWND			m_hWnd;						/* 編集ウィンドウハンドル(CSplitterWndが管理) */
	COpeBuf			m_cOpeBuf;					/* アンドゥバッファ */
public:
	void			MakeFuncList_C( CFuncInfoArr*,bool bVisibleMemberFunc = true );		/* C/C++関数リスト作成 */
	void 			MakeFuncList_PLSQL( CFuncInfoArr* );	/* PL/SQL関数リスト作成 */
	void 			MakeTopicList_txt( CFuncInfoArr* );		/* テキスト?トピックリスト作成 */
	void			MakeFuncList_Java( CFuncInfoArr* );		/* Java関数リスト作成 */
	void			MakeTopicList_cobol( CFuncInfoArr* );	/* COBOL アウトライン解析 */
	void			MakeTopicList_asm( CFuncInfoArr* );		/* アセンブラ アウトライン解析 */
	void			MakeFuncList_Perl( CFuncInfoArr* );		/* Perl関数リスト作成 */	//	Sep. 8, 2000 genta
	void			MakeFuncList_VisualBasic( CFuncInfoArr* );/* Visual Basic関数リスト作成 */ //June 23, 2001 N.Nakatani
	void			MakeTopicList_wztxt(CFuncInfoArr*);		/* 階層付きテキスト アウトライン解析 */ // 2003.05.20 zenryaku
	void			MakeTopicList_html(CFuncInfoArr*);		/* HTML アウトライン解析 */ // 2003.05.20 zenryaku
	void			MakeTopicList_tex(CFuncInfoArr*);		/* TeX アウトライン解析 */ // 2003.07.20 naoh
	void			MakeFuncList_RuleFile( CFuncInfoArr* );	/* ルールファイルを使ってリスト作成 2002.04.01 YAZAKI */
	int				ReadRuleFile( const char* pszFilename, oneRule* pcOneRule, int nMaxCount );	/* ルールファイル読込 2002.04.01 YAZAKI */

// From Here 2001.12.03 hor
	void			MakeFuncList_BookMark( CFuncInfoArr* );	/* ブックマークリスト作成 */
// To Here 2001.12.03 hor

	CSplitterWnd	m_cSplitterWnd;				/* 分割フレーム */
	CEditView		m_cEditViewArr[4];			/* ビュー */
	int				m_nActivePaneIndex;			/* アクティブなビュー */
//	HWND			m_hwndActiveDialog;			/* アクティブな子ダイアログ */
	CDlgFind		m_cDlgFind;					/* 「検索」ダイアログ */
	CDlgReplace		m_cDlgReplace;				/* 「置換」ダイアログ */
	CDlgJump		m_cDlgJump;					/* 「指定行へジャンプ」ダイアログ */
//	CDlgSendMail	m_cDlgSendMail;				/* メール送信ダイアログ */
	CDlgGrep		m_cDlgGrep;					/* Grepダイアログ */
	CDlgFuncList	m_cDlgFuncList;				/* アウトライン解析結果ダイアログ */
	CEditWnd*		m_pcEditWnd;	//	Sep. 10, 2002
	/*
	||  メンバ変数
	*/
	char*			m_pszAppName;		/* Mutex作成用?ウィンドウクラス名 */
	HINSTANCE		m_hInstance;		/* インスタンスハンドル */
	HWND			m_hwndParent;		/* 親ウィンドウ(CEditWndが管理)ハンドル */

	DLLSHAREDATA*	m_pShareData;

//@@@ 2002.01.14 YAZAKI 不使用のため
//	COpeBlk*		m_pcOpeBlk;			/* 操作ブロック */
	BOOL			m_bDoing_UndoRedo;	/* アンドゥ?リドゥの実行中か */
	CDlgOpenFile	m_cDlgOpenFile;	/* ファイルオープンダイアログ */
	char			m_szDefaultWildCard[_MAX_PATH + 1];	/* 「開く」での最初のワイルドカード */
//	2004.03.28 Moca 未使用変数削除

//	2004.02.16 Moca メンバから外す
//	CHOOSEFONT		m_cf;				/* フォント選択ダイアログ用 */

//@@	CProp1			m_cProp1;			/* 設定プロパティシート */
	CPropCommon		m_cPropCommon;
	CPropTypes		m_cPropTypes;

	int				m_nFileShareModeOld;	/* ファイルの排他制御モード */
	HFILE			m_hLockedFile;			/* ロックしているファイルのハンドル */

// 2004/06/21 novice タグジャンプ機能追加
#if 0
	HWND			m_hwndReferer;	/* 参照元ウィンドウ */
	int				m_nRefererX;	/* 参照元 行頭からのバイト位置桁 */
	int				m_nRefererLine;	/* 参照元行 折り返し無しの物理行位置 */
#endif
	
	//	Sep. 29, 2001 genta
	CSMacroMgr*		m_pcSMacroMgr;	//!< マクロ
//@@@ 2002.2.2 YAZAKI マクロをCSMacroMgrに統一。
//	CKeyMacroMgr	m_CKeyMacroMgr;	//	キーボードマクロ @@@ 2002.1.24 YAZAKI DLLSHAREDATAから移動
	//	Oct. 2, 2001 genta
	CFuncLookup		m_cFuncLookup;	//!< 機能名,機能番号などのresolve

	//	From Here Dec. 4, 2002 genta
	//	更新監視と更新通知
	/*!
		ファイルが更新された場合に再読込を行うかどうかのフラグ
	*/
	enum WatchUpdate {
		WU_QUERY,	//!< 再読込を行うかどうかダイアログボックスで問い合わせる
		WU_NOTIFY,	//!< 更新されたことをステータスバーで通知
		WU_NONE		//!< 更新監視を行わない
	};
	WatchUpdate		m_eWatchUpdate;	//!< 更新監視方法
	//	To Here Dec. 4, 2002 genta

//	CDlgTest*		m_pcDlgTest;

	/*
	||  実装ヘルパ関数
	*/
	void ExpandParameter(const char* pszSource, char* pszBuffer, int nBufferLen);	//	pszSourceを展開して、pszBufferにコピー。
protected:
	void DoFileLock( void );	/* ファイルの排他ロック */
	void DoFileUnLock( void );	/* ファイルの排他ロック解除 */
	//char			m_pszCaption[1024];	//@@@ YAZAKI
};



///////////////////////////////////////////////////////////////////////
#endif /* _CEDITDOC_H_ */


/*[EOF]*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -