/*!	@brief 結合して表示

	タブウィンドウの結合、非結合を切り替えるコマンドです。
	[共通設定]->[ウィンドウ]->[タブ表示 まとめない]の切り替えと同じです。
	@author Kazika
	@date 2004.07.14 Kazika 新規作成
	@date 2007.06.20 ryoji GetDllShareData().m_TabWndWndplの廃止,グループIDリセット
*/
void CViewCommander::Command_BIND_WINDOW( void )
{
	//タブモードであるならば
	if (GetDllShareData().m_Common.m_sTabBar.m_bDispTabWnd)
	{
		//タブウィンドウの設定を変更
		GetDllShareData().m_Common.m_sTabBar.m_bDispTabWndMultiWin = !GetDllShareData().m_Common.m_sTabBar.m_bDispTabWndMultiWin;

		// まとめるときは WS_EX_TOPMOST 状態を同期する	// 2007.05.18 ryoji
		if( !GetDllShareData().m_Common.m_sTabBar.m_bDispTabWndMultiWin )
		{
			GetEditWindow()->WindowTopMost(
				( (DWORD)::GetWindowLongPtr( GetEditWindow()->GetHwnd(), GWL_EXSTYLE ) & WS_EX_TOPMOST )? 1: 2
			);
		}

		//Start 2004.08.27 Kazika 変更
		//タブウィンドウの設定を変更をブロードキャストする
		CAppNodeManager::getInstance()->ResetGroupId();
		CAppNodeGroupHandle(0).PostMessageToAllEditors(
			MYWM_TAB_WINDOW_NOTIFY,						//タブウィンドウイベント
			(WPARAM)((GetDllShareData().m_Common.m_sTabBar.m_bDispTabWndMultiWin) ? TWNT_MODE_DISABLE : TWNT_MODE_ENABLE),//タブモード有効/無効化イベント
			(LPARAM)GetEditWindow()->GetHwnd(),	//CEditWndのウィンドウハンドル
			m_pCommanderView->GetHwnd());									//自分自身
		//End 2004.08.27 Kazika
	}
}
void CMruListener::OnAfterLoad(const SLoadInfo& sLoadInfo)
{
	CEditDoc* pcDoc = GetListeningDoc();

	CMRUFile		cMRU;

	EditInfo	eiOld;
	bool bIsExistInMRU = cMRU.GetEditInfo(pcDoc->m_cDocFile.GetFilePath(),&eiOld);

	//キャレット位置の復元
	if( bIsExistInMRU && GetDllShareData().m_Common.m_sFile.GetRestoreCurPosition() ){
		//キャレット位置取得
		CLayoutPoint ptCaretPos;
		pcDoc->m_cLayoutMgr.LogicToLayout(eiOld.m_ptCursor, &ptCaretPos);

		//ビュー取得
		CEditView& cView = pcDoc->m_pcEditWnd->GetActiveView();

		if( ptCaretPos.GetY2() >= pcDoc->m_cLayoutMgr.GetLineCount() ){
			//ファイルの最後に移動
			cView.GetCommander().HandleCommand( F_GOFILEEND, false, 0, 0, 0, 0 );
		}
		else{
			cView.GetTextArea().SetViewTopLine( eiOld.m_nViewTopLine ); // 2001/10/20 novice
			cView.GetTextArea().SetViewLeftCol( eiOld.m_nViewLeftCol ); // 2001/10/20 novice
			// From Here Mar. 28, 2003 MIK
			// 改行の真ん中にカーソルが来ないように。
			const CDocLine *pTmpDocLine = pcDoc->m_cDocLineMgr.GetLine( eiOld.m_ptCursor.GetY2() );	// 2008.08.22 ryoji 改行単位の行番号を渡すように修正
			if( pTmpDocLine ){
				if( pTmpDocLine->GetLengthWithoutEOL() < eiOld.m_ptCursor.x ) ptCaretPos.x--;
			}
			// To Here Mar. 28, 2003 MIK
			cView.GetCaret().MoveCursor( ptCaretPos, true );
			cView.GetCaret().m_nCaretPosX_Prev = cView.GetCaret().GetCaretLayoutPos().GetX2();
		}
	}

	// ブックマーク復元  // 2002.01.16 hor
	if( bIsExistInMRU ){
		if( GetDllShareData().m_Common.m_sFile.GetRestoreBookmarks() ){
			CBookmarkManager(&pcDoc->m_cDocLineMgr).SetBookMarks(eiOld.m_szMarkLines);
		}
	}
	else{
		eiOld.m_szMarkLines[0] = L'\0';
	}

	// MRUリストへの登録
	EditInfo	eiNew;
	pcDoc->GetEditInfo(&eiNew);
	// 2014.07.04 ブックマークの保持(エディタが落ちたときブックマークが消えるため)
	if( bIsExistInMRU ){
		if( GetDllShareData().m_Common.m_sFile.GetRestoreBookmarks() ){
			// SetBookMarksでデータがNUL区切りに書き換わっているので再取得
			cMRU.GetEditInfo(pcDoc->m_cDocFile.GetFilePath(),&eiOld);
			auto_strcpy(eiNew.m_szMarkLines, eiOld.m_szMarkLines);
		}
	}
	cMRU.Add( &eiNew );
}
Exemple #3
0
/*! GREP置換ダイアログの表示
*/
void CViewCommander::Command_GREP_REPLACE_DLG( void )
{
	CNativeW	cmemCurText;
	CDlgGrepReplace& cDlgGrepRep = GetEditWindow()->m_cDlgGrepReplace;

	// 複数Grepウィンドウを使い分けている場合などに影響しないように、未設定のときだけHistoryを見る
	bool bGetHistory = cDlgGrepRep.m_bSetText == false;

	m_pCommanderView->GetCurrentTextForSearchDlg( cmemCurText, bGetHistory );

	if( 0 < cmemCurText.GetStringLength() ){
		cDlgGrepRep.m_strText = cmemCurText.GetStringPtr();
		cDlgGrepRep.m_bSetText = true;
	}
	if( 0 < GetDllShareData().m_sSearchKeywords.m_aReplaceKeys.size() ){
		if( cDlgGrepRep.m_nReplaceKeySequence < GetDllShareData().m_Common.m_sSearch.m_nReplaceKeySequence ){
			cDlgGrepRep.m_strText2 = GetDllShareData().m_sSearchKeywords.m_aReplaceKeys[0];
		}
	}

	int nRet = cDlgGrepRep.DoModal( G_AppInstance(), m_pCommanderView->GetHwnd(), GetDocument()->m_cDocFile.GetFilePath(), (LPARAM)m_pCommanderView );
	if( !nRet ){
		return;
	}
	HandleCommand(F_GREP_REPLACE, TRUE, 0, 0, 0, 0);	//	GREPコマンドの発行
}
Exemple #4
0
/*!
	@brief ツールバーの表示を更新する
	
	@note 他から呼べるようにOnToolbarTimer()より切り出した
	
	@date 2008.10.05 nasukoji
*/
void CMainToolBar::UpdateToolbar( void )
{
	// 印刷プレビュー中なら、何もしない。
	if( m_pOwner->IsInPreviewMode() )return;
	
	// ツールバーの状態更新
	if( m_hwndToolBar )
	{
		for( int i = 0; i < GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonNum; ++i )
		{
			TBBUTTON tbb = m_pOwner->GetMenuDrawer().getButton(
				GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonIdxArr[i]
			);
			int state = Toolbar_GetState( m_hwndToolBar, tbb.idCommand );
			if( state != -1 )
			{
				WORD stateToSet = 0;
				// 機能が利用可能か調べる
				if( IsFuncEnable( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) )
				{
					stateToSet |= TBSTATE_ENABLED;
				}
				// 機能がチェック状態か調べる
				if( IsFuncChecked( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand ) )
				{
					stateToSet |= TBSTATE_CHECKED;
				}
				if( state != stateToSet )
				{
					Toolbar_SetState( m_hwndToolBar, tbb.idCommand, stateToSet );
				}
			}
		}
	}
}
Exemple #5
0
//検索ボックスを更新
void CMainToolBar::AcceptSharedSearchKey()
{
	if( m_hwndSearchBox )
	{
		int	i;
		// 2013.05.28 Combo_ResetContentだとちらつくのでDeleteStringでリストだけ削除
		while (Combo_GetCount(m_hwndSearchBox) > 0) {
			Combo_DeleteString(m_hwndSearchBox, 0);
		}
		int nSize = GetDllShareData().m_sSearchKeywords.m_aSearchKeys.size();
		for( i = 0; i < nSize; i++ )
		{
			Combo_AddString( m_hwndSearchBox, GetDllShareData().m_sSearchKeywords.m_aSearchKeys[i] );
		}
		const wchar_t* pszText;
		if( GetDllShareData().m_Common.m_sSearch.m_bInheritKeyOtherView
			&& m_pOwner->GetActiveView().m_nCurSearchKeySequence < GetDllShareData().m_Common.m_sSearch.m_nSearchKeySequence
				|| 0 == m_pOwner->GetActiveView().m_strCurSearchKey.size() ){
			if( 0 < nSize ){
				pszText = GetDllShareData().m_sSearchKeywords.m_aSearchKeys[0];
			}else{
				pszText = L"";
			}
		}else{
			pszText = m_pOwner->GetActiveView().m_strCurSearchKey.c_str();
		}
		std::wstring strText;
		GetSearchKey(strText);
		if( 0 < nSize && 0 != wcscmp(strText.c_str(), pszText) ){
			::SetWindowText(m_hwndSearchBox, to_tchar(pszText));
		}
	}
}
/*!
	@brief ツールバーの表示を更新する
	
	@note 他から呼べるようにOnToolbarTimer()より切り出した
	
	@date 2008.10.05 nasukoji
*/
void CMainToolBar::UpdateToolbar( void )
{
	// 印刷プレビュー中なら、何もしない。
	if( m_pOwner->IsInPreviewMode() )return;
	
	// ツールバーの状態更新
	if( m_hwndToolBar )
	{
		for( int i = 0; i < GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonNum; ++i )
		{
			TBBUTTON tbb = m_pOwner->GetMenuDrawer().getButton(
				GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonIdxArr[i]
			);

			// 機能が利用可能か調べる
			Toolbar_EnableButton(
				m_hwndToolBar,
				tbb.idCommand,
				IsFuncEnable( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand )
			);

			// 機能がチェック状態か調べる
			Toolbar_CheckButton(
				m_hwndToolBar,
				tbb.idCommand,
				IsFuncChecked( m_pOwner->GetDocument(), &GetDllShareData(), (EFunctionCode)tbb.idCommand )
			);
		}
	}
}
void CViewCommander::Command_GROUPCLOSE( void )
{
	if( GetDllShareData().m_Common.m_sTabBar.m_bDispTabWnd && !GetDllShareData().m_Common.m_sTabBar.m_bDispTabWndMultiWin ){
		int nGroup = CAppNodeManager::getInstance()->GetEditNode( GetMainWindow() )->GetGroup();
		CControlTray::CloseAllEditor( TRUE, GetMainWindow(), TRUE, nGroup );
	}
	return;
}
Exemple #8
0
static bool MakeDiffTmpFile_core(CTextOutputStream& out, HWND hwnd, CEditView& view, bool bBom)
{
	CLogicInt y = CLogicInt(0);
	const wchar_t*	pLineData;
	if( !hwnd ){
		const CDocLineMgr& docMgr = view.m_pcEditDoc->m_cDocLineMgr;
		for(;;){
			CLogicInt		nLineLen;
			pLineData = docMgr.GetLine(y)->GetDocLineStrWithEOL(&nLineLen);
			// 正常終了
			if( 0 == nLineLen || NULL == pLineData ) break;
			if( bBom ){
				CNativeW cLine2(L"\ufeff");
				cLine2.AppendString(pLineData, nLineLen);
				out.WriteString(cLine2.GetStringPtr(), cLine2.GetStringLength());
				bBom = false;
			}else{
				out.WriteString(pLineData,nLineLen);
			}
			y++;
		}
	}else if( IsSakuraMainWindow(hwnd) ) {
		const int max_size = (int)GetDllShareData().m_sWorkBuffer.GetWorkBufferCount<const EDIT_CHAR>();
		pLineData = GetDllShareData().m_sWorkBuffer.GetWorkBuffer<const EDIT_CHAR>();
		for(;;){
			int nLineOffset = 0;
			int nLineLen = 0; //初回用仮値
			do{
				// m_sWorkBuffer#m_Workの排他制御。外部コマンド出力/TraceOut/Diffが対象
				LockGuard<CMutex> guard( CShareData::GetMutexShareWork() );
				{
					nLineLen = ::SendMessageAny( hwnd, MYWM_GETLINEDATA, y, nLineOffset );
					if( nLineLen == 0 ){ return true; } // EOF => 正常終了
					if( nLineLen < 0 ){ return false; } // 何かエラー
					if( bBom ){
						CNativeW cLine2(L"\ufeff");
						cLine2.AppendString(pLineData, t_min(nLineLen, max_size));
						out.WriteString(cLine2.GetStringPtr(), cLine2.GetStringLength());
						bBom = false;
					}else{
						out.WriteString(pLineData, t_min(nLineLen, max_size));
					}
				}
				nLineOffset += max_size;
			}while(max_size < nLineLen);
			y++;
		}
	}else{
		return false;
	}
	if( bBom ){
		out.WriteString(L"\ufeff", 1);
	}
	return true;
}
/*! キャレット位置の単語を辞書検索ON-OFF

	@date 2006.03.24 fon 新規作成
*/
void CViewCommander::Command_ToggleKeySearch( int option )
{	/* 共通設定ダイアログの設定をキー割り当てでも切り替えられるように */
	if( option == 0 ){
		if( GetDllShareData().m_Common.m_sSearch.m_bUseCaretKeyWord ){
			GetDllShareData().m_Common.m_sSearch.m_bUseCaretKeyWord = FALSE;
		}else{
			GetDllShareData().m_Common.m_sSearch.m_bUseCaretKeyWord = TRUE;
		}
	}else if( option == 1 ){
		GetDllShareData().m_Common.m_sSearch.m_bUseCaretKeyWord = TRUE;
	}else if( option == 2 ){
		GetDllShareData().m_Common.m_sSearch.m_bUseCaretKeyWord = FALSE;
	}
}
/*! キーのデフォルト機能を取得する

	@param nKeyCode [in] キーコード
	@param nState [in] Shift,Ctrl,Altキー状態

	@return 機能番号

	@date 2007.02.22 ryoji 新規作成
*/
EFunctionCode CKeyBind::GetDefFuncCode( int nKeyCode, int nState )
{
	DLLSHAREDATA* pShareData = &GetDllShareData();
	if( pShareData == NULL )
		return F_DEFAULT;

	EFunctionCode nDefFuncCode = F_DEFAULT;
	if( nKeyCode == VK_F4 ){
		if( nState == _CTRL ){
			nDefFuncCode = F_FILECLOSE;	// 閉じて(無題)
			if( pShareData->m_Common.m_sTabBar.m_bDispTabWnd && !pShareData->m_Common.m_sTabBar.m_bDispTabWndMultiWin ){
				nDefFuncCode = F_WINCLOSE;	// 閉じる
			}
		}
		else if( nState == _ALT ){
			nDefFuncCode = F_WINCLOSE;	// 閉じる
			if( pShareData->m_Common.m_sTabBar.m_bDispTabWnd && !pShareData->m_Common.m_sTabBar.m_bDispTabWndMultiWin ){
				if( !pShareData->m_Common.m_sTabBar.m_bTab_CloseOneWin ){
					nDefFuncCode = F_GROUPCLOSE;	// グループを閉じる	// 2007.06.20 ryoji
				}
			}
		}
	}
	return nDefFuncCode;
}
Exemple #11
0
/*!	m_aSearchKeysにpszSearchKeyを追加する。
	YAZAKI
*/
void CSearchKeywordManager::AddToSearchKeyArr( const wchar_t* pszSearchKey )
{
	CRecentSearch	cRecentSearchKey;
	cRecentSearchKey.AppendItem( pszSearchKey );
	cRecentSearchKey.Terminate();
	GetDllShareData().m_Common.m_sSearch.m_nSearchKeySequence++;
}
//	Readme ファイルの表示	2011/11/2 Uchi
bool CPropPlugin::BrowseReadMe(const std::tstring& sReadMeName)
{
    // -- -- -- -- コマンドライン文字列を生成 -- -- -- -- //
    CCommandLineString cCmdLineBuf;

    //アプリケーションパス
    TCHAR szExePath[MAX_PATH + 1];
    ::GetModuleFileName( NULL, szExePath, _countof( szExePath ) );
    cCmdLineBuf.AppendF( _T("\"%ts\""), szExePath );

    // ファイル名
    cCmdLineBuf.AppendF( _T(" \"%ts\""), sReadMeName.c_str() );

    // コマンドラインオプション
    cCmdLineBuf.AppendF(_T(" -R -CODE=99"));

    // グループID
    int nGroup = GetDllShareData().m_sNodes.m_nGroupSequences;
    if( nGroup > 0 ) {
        cCmdLineBuf.AppendF( _T(" -GROUP=%d"), nGroup+1 );
    }

    //CreateProcessに渡すSTARTUPINFOを作成
    STARTUPINFO	sui;
    ::GetStartupInfo(&sui);

    PROCESS_INFORMATION	pi;
    ZeroMemory( &pi, sizeof(pi) );

    TCHAR	szCmdLine[1024];
    auto_strcpy_s(szCmdLine, _countof(szCmdLine), cCmdLineBuf.c_str());
    return (::CreateProcess( NULL, szCmdLine, NULL, NULL, TRUE,
                             CREATE_NEW_CONSOLE, NULL, NULL, &sui, &pi ) != 0);
}
/*
	閉じて(無題)。
	ユーザキャンセル操作等によりクローズされなかった場合は false を返す。

	@date 2006.12.30 ryoji CEditView::Command_FILESAVEAS()から処理本体を切り出し
*/
bool CDocFileOperation::FileClose()
{
	/* ファイルを閉じるときのMRU登録 & 保存確認 & 保存実行 */
	if( !m_pcDocRef->OnFileClose(false) ){
		return false;
	}

	//プラグイン:DocumentCloseイベント実行
	CPlug::Array plugs;
	CWSHIfObj::List params;
	CJackManager::getInstance()->GetUsablePlug( PP_DOCUMENT_CLOSE, 0, &plugs );
	for( CPlug::ArrayIter it = plugs.begin(); it != plugs.end(); it++ ){
		(*it)->Invoke(&m_pcDocRef->m_pcEditWnd->GetActiveView(), params);
	}

	/* 既存データのクリア */
	m_pcDocRef->InitDoc();

	/* 全ビューの初期化 */
	m_pcDocRef->InitAllView();

	m_pcDocRef->SetCurDirNotitle();

	// 無題番号取得
	CAppNodeManager::getInstance()->GetNoNameNumber( m_pcDocRef->m_pcEditWnd->GetHwnd() );

	/* 親ウィンドウのタイトルを更新 */
	m_pcDocRef->m_pcEditWnd->UpdateCaption();

	// 2006.09.01 ryoji オープン後自動実行マクロを実行する
	m_pcDocRef->RunAutoMacro( GetDllShareData().m_Common.m_sMacro.m_nMacroOnOpened );

	return true;
}
//! 前のブックマークを探し,見つかったら移動する.
void CViewCommander::Command_FUNCLIST_PREV(void)
{

	CLogicPoint	ptXY(0,GetCaret().GetCaretLogicPos().y);
	int			nYOld = ptXY.y;

	for(int n = 0; n < 2; n++){
		if(CFuncListManager().SearchFuncListMark(&GetDocument()->m_cDocLineMgr,
				ptXY.GetY2(), SEARCH_BACKWARD, &ptXY.y)){
			CLayoutPoint ptLayout;
			GetDocument()->m_cLayoutMgr.LogicToLayout(ptXY,&ptLayout);
			m_pCommanderView->MoveCursorSelecting( ptLayout,
				m_pCommanderView->GetSelectionInfo().m_bSelectingLock );
			if( nYOld <= ptXY.y ){
				m_pCommanderView->SendStatusMessage(LS(STR_ERR_SRPREV1));
			}
			return;
		}
		if( !GetDllShareData().m_Common.m_sSearch.m_bSearchAll ){
			break;
		}
		ptXY.y= GetDocument()->m_cDocLineMgr.GetLineCount();
	}
	m_pCommanderView->SendStatusMessage(LS(STR_ERR_SRPREV2));
	AlertNotFound( m_pCommanderView->GetHwnd(), false, LS(STR_FUCLIST_PREV_NOT_FOUND) );
	return;
}
//	@date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。
CPropCommon::CPropCommon()
{
	{
		assert( sizeof(CPropGeneral)   - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropWin)       - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropMainMenu)  - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropToolbar)   - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropTab)       - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropStatusbar) - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropEdit)      - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropFile)      - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropFileName)  - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropBackup)    - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropFormat)    - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropGrep)      - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropKeybind)   - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropCustmenu)  - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropKeyword)   - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropHelper)    - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropMacro)     - sizeof(CPropCommon) == 0 );
		assert( sizeof(CPropPlugin)    - sizeof(CPropCommon) == 0 );
	}

	/* 共有データ構造体のアドレスを返す */
	m_pShareData = &GetDllShareData();

	m_hwndParent = NULL;	/* オーナーウィンドウのハンドル */
	m_hwndThis  = NULL;		/* このダイアログのハンドル */
	m_nPageNum = ID_PROPCOM_PAGENUM_GENERAL;
	m_nKeywordSet1 = -1;

	return;
}
void CViewCommander::Command_TAB_CLOSERIGHT( void )
{
	if( GetDllShareData().m_Common.m_sTabBar.m_bDispTabWnd ){
		int nGroup = 0;

		// ウィンドウ一覧を取得する
		EditNode* pEditNode;
		int nCount = CAppNodeManager::getInstance()->GetOpenedWindowArr( &pEditNode, TRUE );
		BOOL bSelfFound = FALSE;
		if( 0 >= nCount )return;

		for( int i = 0; i < nCount; i++ ){
			if( pEditNode[i].m_hWnd == GetMainWindow() ){
				pEditNode[i].m_hWnd = NULL;		//自分自身は閉じない
				nGroup = pEditNode[i].m_nGroup;
				bSelfFound = TRUE;
			}else if( !bSelfFound ){
				pEditNode[i].m_hWnd = NULL;		//左は閉じない
			}
		}

		//終了要求を出す
		CAppNodeGroupHandle(nGroup).RequestCloseEditor( pEditNode, nCount, FALSE, TRUE, GetMainWindow() );
		delete []pEditNode;
	}
	return;
}
BOOL CDlgCompare::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam )
{
	_SetHwnd(hwndDlg);

	CreateSizeBox();
	CDialog::OnSize();
	
	RECT rc;
	::GetWindowRect( hwndDlg, &rc );
	m_ptDefaultSize.x = rc.right - rc.left;
	m_ptDefaultSize.y = rc.bottom - rc.top;

	for( int i = 0; i < _countof(anchorList); i++ ){
		GetItemClientRect( anchorList[i].id, m_rcItems[i] );
	}

	RECT rcDialog = GetDllShareData().m_Common.m_sOthers.m_rcCompareDialog;
	if( rcDialog.left != 0 ||
		rcDialog.bottom != 0 ){
		m_xPos = rcDialog.left;
		m_yPos = rcDialog.top;
		m_nWidth = rcDialog.right - rcDialog.left;
		m_nHeight = rcDialog.bottom - rcDialog.top;
	}

	return CDialog::OnInitDialog( hwndDlg, wParam, lParam );
}
//	@date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。
bool CPPA::Execute(CEditView* pcEditView, int flags )
{
	//PPAの多重起動禁止 2008.10.22 syat
	if ( CPPA::m_bIsRunning ) {
		MYMESSAGEBOX( pcEditView->GetHwnd(), MB_OK, LS(STR_ERR_DLGPPA7), LS(STR_ERR_DLGPPA1) );
		m_fnAbort();
		CPPA::m_bIsRunning = false;
		return false;
	}
	CPPA::m_bIsRunning = true;

	PpaExecInfo info;
	info.m_pcEditView = pcEditView;
	info.m_pShareData = &GetDllShareData();
	info.m_bError = false;			//	2003.06.01 Moca
	info.m_cMemDebug.SetString("");	//	2003.06.01 Moca
	info.m_commandflags = flags | FA_FROMMACRO;	//	2007.07.22 genta
	
	//	実行前にインスタンスを待避する
	PpaExecInfo* old_instance = m_CurInstance;
	m_CurInstance = &info;
	m_fnExecute();
	
	//	マクロ実行完了後はここに戻ってくる
	m_CurInstance = old_instance;

	//PPAの多重起動禁止 2008.10.22 syat
	CPPA::m_bIsRunning = false;
	return !info.m_bError;
}
/*! ウィンドウ一覧表示
*/
void CViewCommander::Command_DLGWINLIST( void )
{
	DWORD dwPid;
	HWND hwnd = GetDllShareData().m_sHandles.m_hwndTray;
	::GetWindowThreadProcessId(hwnd, &dwPid);
	::AllowSetForegroundWindow(dwPid);
	::PostMessage(hwnd, MYWM_DLGWINLIST, 0, 0);
}
Exemple #20
0
/*!	外部ファイルを指定でのファイルを表示
*/
BOOL CEditView::MakeDiffTmpFile2( TCHAR* tmpName, const TCHAR* orgName, ECodeType code, ECodeType saveCode )
{
	//一時
	TCHAR* pszTmpName = _ttempnam( NULL, SAKURA_DIFF_TEMP_PREFIX );
	if( NULL == pszTmpName ){
		WarningMessage( NULL, LS(STR_DIFF_FAILED) );
		return FALSE;
	}

	_tcscpy( tmpName, pszTmpName );
	free( pszTmpName );

	bool bBom = false;
	const STypeConfigMini* typeMini;
	CDocTypeManager().GetTypeConfigMini( CDocTypeManager().GetDocumentTypeOfPath( orgName ), &typeMini );
	CFileLoad	cfl( typeMini->m_encoding );
	CTextOutputStream out(tmpName, saveCode, true, false);
	if(!out){
		WarningMessage( NULL, LS(STR_DIFF_FAILED_TEMP) );
		return FALSE;
	}
	try{
		bool bBigFile;
#ifdef _WIN64
		bBigFile = true;
#else
		bBigFile = false;
#endif
		cfl.FileOpen( orgName, bBigFile, code, GetDllShareData().m_Common.m_sFile.GetAutoMIMEdecode(), &bBom );
		CNativeW cLine;
		CEol cEol;
		while( RESULT_FAILURE != cfl.ReadLine( &cLine, &cEol ) ) {
			const wchar_t*	pLineData;
			CLogicInt		nLineLen;
			pLineData= cLine.GetStringPtr(&nLineLen);
			if( 0 == nLineLen || NULL == pLineData ) break;
			if( bBom ){
				CNativeW cLine2(L"\ufeff");
				cLine2.AppendString(pLineData, nLineLen);
				out.WriteString(cLine2.GetStringPtr(), cLine2.GetStringLength());
				bBom = false;
			}else{
				out.WriteString(pLineData,nLineLen);
			}
		}
		if( bBom ){
			out.WriteString(L"\ufeff", 1);
		}
	}
	catch(...){
		out.Close();
		_tunlink( tmpName );	//関数の実行に失敗したとき、一時ファイルの削除は関数内で行う。
		WarningMessage( NULL, LS(STR_DIFF_FAILED_TEMP) );
		return FALSE;
	}

	return TRUE;
}
Exemple #21
0
/*!	m_aReplaceKeysにpszReplaceKeyを追加する
	YAZAKI
*/
void CSearchKeywordManager::AddToReplaceKeyArr( const wchar_t* pszReplaceKey )
{
	CRecentReplace	cRecentReplaceKey;
	cRecentReplaceKey.AppendItem( pszReplaceKey );
	cRecentReplaceKey.Terminate();
	GetDllShareData().m_Common.m_sSearch.m_nReplaceKeySequence++;

	return;
}
//! 同一ファイルの再オープン
void CDocFileOperation::ReloadCurrentFile(
	ECodeType	nCharCode		//!< [in] 文字コード種別
)
{
	//プラグイン:DocumentCloseイベント実行
	CPlug::Array plugs;
	CWSHIfObj::List params;
	CJackManager::getInstance()->GetUsablePlug( PP_DOCUMENT_CLOSE, 0, &plugs );
	for( CPlug::ArrayIter it = plugs.begin(); it != plugs.end(); it++ ){
		(*it)->Invoke(&m_pcDocRef->m_pcEditWnd->GetActiveView(), params);
	}

	if( !fexist(m_pcDocRef->m_cDocFile.GetFilePath()) ){
		/* ファイルが存在しない */
		//	Jul. 26, 2003 ryoji BOMを標準設定に	// IsBomDefOn使用 2013/5/17	Uchi
		m_pcDocRef->m_cDocFile.SetCodeSet( nCharCode,  CCodeTypeName( nCharCode ).IsBomDefOn() );
		// カーソル位置表示を更新する	// 2008.07.22 ryoji
		m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().ShowCaretPosInfo();
		return;
	}

	//カーソル位置保存
	CLayoutInt		nViewTopLine = m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().GetViewTopLine();	/* 表示域の一番上の行(0開始) */
	CLayoutInt		nViewLeftCol = m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().GetViewLeftCol();	/* 表示域の一番左の桁(0開始) */
	CLayoutPoint	ptCaretPosXY = m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().GetCaretLayoutPos();

	//ロード
	SLoadInfo sLoadInfo;
	sLoadInfo.cFilePath=m_pcDocRef->m_cDocFile.GetFilePath();
	sLoadInfo.eCharCode=nCharCode;
	sLoadInfo.bViewMode=CAppMode::getInstance()->IsViewMode(); // 2014.06.13 IsEditable->IsViewModeに戻す。かわりに bForceNoMsgを追加
	sLoadInfo.bWritableNoMsg = !m_pcDocRef->IsEditable(); // すでに編集できない状態ならファイルロックのメッセージを表示しない
	sLoadInfo.bRequestReload=true;
	bool bRet = this->DoLoadFlow(&sLoadInfo);

	// カーソル位置復元 (※ここではオプションのカーソル位置復元(=改行単位)が指定されていない場合でも復元する)
	// 2007.08.23 ryoji 表示領域復元
	if( ptCaretPosXY.GetY2() < m_pcDocRef->m_cLayoutMgr.GetLineCount() ){
		m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().SetViewTopLine(nViewTopLine);
		m_pcDocRef->m_pcEditWnd->GetActiveView().GetTextArea().SetViewLeftCol(nViewLeftCol);
	}
	m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().MoveCursorProperly( ptCaretPosXY, true );	// 2007.08.23 ryoji MoveCursor()->MoveCursorProperly()
	m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().m_nCaretPosX_Prev = m_pcDocRef->m_pcEditWnd->GetActiveView().GetCaret().GetCaretLayoutPos().GetX2();

	// 2006.09.01 ryoji オープン後自動実行マクロを実行する
	if( bRet ){
		m_pcDocRef->RunAutoMacro( GetDllShareData().m_Common.m_sMacro.m_nMacroOnOpened );

		//プラグイン:DocumentOpenイベント実行
		CPlug::Array plugs;
		CWSHIfObj::List params;
		CJackManager::getInstance()->GetUsablePlug( PP_DOCUMENT_OPEN, 0, &plugs );
		for( CPlug::ArrayIter it = plugs.begin(); it != plugs.end(); it++ ){
			(*it)->Invoke(&m_pcDocRef->m_pcEditWnd->GetActiveView(), params);
		}
	}
}
/*!
	コマンドコードの変換(grep mode時)
*/
void CEditView::TranslateCommand_grep(
	EFunctionCode&	nCommand,
	bool&			bRedraw,
	LPARAM&			lparam1,
	LPARAM&			lparam2,
	LPARAM&			lparam3,
	LPARAM&			lparam4
)
{
	if( ! CEditApp::getInstance()->m_pcGrepAgent->m_bGrepMode )
		return;

	if( nCommand == F_WCHAR ){
		//	Jan. 23, 2005 genta 文字判定忘れ
		if( WCODE::IsLineDelimiter((wchar_t)lparam1, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol)
				&& GetDllShareData().m_Common.m_sSearch.m_bGTJW_RETURN ){
			nCommand = F_TAGJUMP;
			lparam1 = GetKeyState_Control()?1:0;
		}
	}
}
/*! 正規表現の検索パターンを必要に応じて更新する(ライブラリが使用できないときはFALSEを返す)
	@date 2002.01.16 hor 共通ロジックを関数にしただけ・・・
	@date 2011.12.18 Moca シーケンス導入。viewの検索文字列長の撤廃。他のビューの検索条件を引き継ぐフラグを追加
*/
BOOL CEditView::ChangeCurRegexp( bool bRedrawIfChanged )
{
	bool	bChangeState = false;

	if( GetDllShareData().m_Common.m_sSearch.m_bInheritKeyOtherView
			&& m_nCurSearchKeySequence < GetDllShareData().m_Common.m_sSearch.m_nSearchKeySequence
		|| 0 == m_strCurSearchKey.size() ){
		// 履歴の検索キーに更新
		m_strCurSearchKey = GetDllShareData().m_sSearchKeywords.m_aSearchKeys[0];		// 検索文字列
		m_sCurSearchOption = GetDllShareData().m_Common.m_sSearch.m_sSearchOption;// 検索/置換  オプション
		m_nCurSearchKeySequence = GetDllShareData().m_Common.m_sSearch.m_nSearchKeySequence;
		bChangeState = true;
	}else if( m_bCurSearchUpdate ){
		bChangeState = true;
	}
	m_bCurSearchUpdate = false;
	if( bChangeState ){
		if( !m_sSearchPattern.SetPattern(this->GetHwnd(), m_strCurSearchKey.c_str(), m_strCurSearchKey.size(),
			m_sCurSearchOption, &m_CurRegexp) ){
				m_bCurSrchKeyMark = false;
				return FALSE;
		}
		m_bCurSrchKeyMark = true;
		if( bRedrawIfChanged ){
			Redraw();
		}
		m_pcEditWnd->m_cToolbar.AcceptSharedSearchKey();
		return TRUE;
	}
	if( ! m_bCurSrchKeyMark ){
		m_bCurSrchKeyMark = true;
		// 検索文字列のマークだけ設定
		if( bRedrawIfChanged ){
			Redraw(); // 自View再描画
		}
	}

	return TRUE;
}
bool CDocFileOperation::_ToDoLock() const
{
	// ファイルを開いていない
	if( !m_pcDocRef->m_cDocFile.GetFilePathClass().IsValidPath() )return false;

	// ビューモード
	if( CAppMode::getInstance()->IsViewMode() )return false;

	// 排他設定
	if( GetDllShareData().m_Common.m_sFile.m_nFileShareMode == SHAREMODE_NOT_EXCLUSIVE )return false;

	return true;
}
Exemple #26
0
/*!
	@date 2014.07.11 新規追加
*/
void CViewCommander::Sub_BoxSelectLock( int flags )
{
	bool bSelLock;
	if( flags == 0x00 ){
		bSelLock = GetDllShareData().m_Common.m_sEdit.m_bBoxSelectLock;
	}else if( flags == 0x01 ){
		bSelLock = true;
	}else if( flags == 0x02 ){
		bSelLock = false;
	}
	if( ! this->m_pCommanderView->GetSelectionInfo().IsBoxSelecting() ) {
		this->Command_BEGIN_BOXSELECT( bSelLock );
	}
}
void CViewCommander::Command_MINIMIZE_ALL( void )
{
	HWND*	phWndArr;
	int		i;
	int		j;
	j = GetDllShareData().m_sNodes.m_nEditArrNum;
	if( 0 == j ){
		return;
	}
	phWndArr = new HWND[j];
	for( i = 0; i < j; ++i ){
		phWndArr[i] = GetDllShareData().m_sNodes.m_pEditArr[i].GetHwnd();
	}
	for( i = 0; i < j; ++i ){
		if( IsSakuraMainWindow( phWndArr[i] ) )
		{
			if( ::IsWindowVisible( phWndArr[i] ) )
				::ShowWindow( phWndArr[i], SW_MINIMIZE );
		}
	}
	delete [] phWndArr;
	return;
}
void CDocLine::SetEol()
{
	const wchar_t* pData = m_cLine.GetStringPtr();
	int nLength = m_cLine.GetStringLength();
	//改行コード設定
	const wchar_t* p = &pData[nLength] - 1;
	while(p>=pData && WCODE::IsLineDelimiter(*p, GetDllShareData().m_Common.m_sEdit.m_bEnableExtEol))p--;
	p++;
	if(p>=pData){
		m_cEol.SetTypeByString(p, &pData[nLength]-p);
	}
	else{
		m_cEol = EOL_NONE;
	}
}
Exemple #29
0
		void Select( ECharWidthFontMode fMode, ECharWidthCacheMode cMode )
		{
			ECharWidthCacheMode cmode = (cMode==CWM_CACHE_NEUTRAL)?m_eLastEditCacheMode:cMode;

			pcache = &m_localcache[fMode];
			if( cmode == CWM_CACHE_SHARE ){
				pcache->SelectCache( &(GetDllShareData().m_sCharWidth) );
			}else{
				if( m_parCache[fMode] == 0 ){
					m_parCache[fMode] = new SCharWidthCache;
				}
				pcache->SelectCache( m_parCache[fMode] );
			}
			if( fMode==CWM_FONT_EDIT ){ m_eLastEditCacheMode = cmode; }
			WCODE::s_MultiFont = pcache->GetMultiFont();
		}
/* カスタムメニュー表示 */
int CViewCommander::Command_CUSTMENU( int nMenuIdx )
{
	HMENU		hMenu;

	GetEditWindow()->GetMenuDrawer().ResetContents();

	//	Oct. 3, 2001 genta

	if( nMenuIdx < 0 || MAX_CUSTOM_MENU <= nMenuIdx ){
		return 0;
	}
	if( 0 == GetDllShareData().m_Common.m_sCustomMenu.m_nCustMenuItemNumArr[nMenuIdx] ){
		return 0;
	}
	hMenu = ::CreatePopupMenu();
	return m_pCommanderView->CreatePopUpMenuSub( hMenu, nMenuIdx, NULL, KEYHELP_RMENU_NONE );
}