File Annotation

Not logged in
dcdd144598 2011-02-23        kinaba: #include "stdafx.h"
dcdd144598 2011-02-23        kinaba: #include "rsrc/resource.h"
dcdd144598 2011-02-23        kinaba: #include "GpMain.h"
dcdd144598 2011-02-23        kinaba: using namespace ki;
dcdd144598 2011-02-23        kinaba: using namespace editwing;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // 新規プロセス起動
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void BootNewProcess( const TCHAR* cmd = TEXT("") )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	STARTUPINFO         sti;
dcdd144598 2011-02-23        kinaba: 	PROCESS_INFORMATION psi;
dcdd144598 2011-02-23        kinaba: 	::GetStartupInfo( &sti );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	String fcmd = Path(Path::ExeName).BeShortStyle();
dcdd144598 2011-02-23        kinaba: 	fcmd += ' ';
dcdd144598 2011-02-23        kinaba: 	fcmd += cmd;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	if( ::CreateProcess( NULL, const_cast<TCHAR*>(fcmd.c_str()),
dcdd144598 2011-02-23        kinaba: 			NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL,
dcdd144598 2011-02-23        kinaba: 			&sti, &psi ) )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		::CloseHandle( psi.hThread );
dcdd144598 2011-02-23        kinaba: 		::CloseHandle( psi.hProcess );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // ステータスバー制御
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: inline GpStBar::GpStBar()
dcdd144598 2011-02-23        kinaba: 	: str_(NULL)
dcdd144598 2011-02-23        kinaba: 	, lb_(2)
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: inline void GpStBar::SetCsText( const TCHAR* str )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// 文字コード表示領域にSetTextする
dcdd144598 2011-02-23        kinaba: 	SetText( str_=str, 1 );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: inline void GpStBar::SetLbText( int lb )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// 改行コード表示領域にSetTextする
dcdd144598 2011-02-23        kinaba: 	static const TCHAR* const lbstr[] = {TEXT("CR"),TEXT("LF"),TEXT("CRLF")};
dcdd144598 2011-02-23        kinaba: 	SetText( lbstr[lb_=lb], 2 );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: int GpStBar::AutoResize( bool maximized )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// 文字コード表示領域を確保しつつリサイズ
dcdd144598 2011-02-23        kinaba: 	int h = StatusBar::AutoResize( maximized );
dcdd144598 2011-02-23        kinaba: 	int w[] = { width()-5, width()-5, width()-5 };
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	HDC dc = ::GetDC( hwnd() );
dcdd144598 2011-02-23        kinaba: 	SIZE s;
dcdd144598 2011-02-23        kinaba: 	if( ::GetTextExtentPoint32( dc, TEXT("BBBBM"), 5, &s ) )
dcdd144598 2011-02-23        kinaba: 		w[1] = w[2] - s.cx;
dcdd144598 2011-02-23        kinaba: 	if( ::GetTextExtentPoint32( dc, TEXT("BBBBB"), 5, &s ) )
dcdd144598 2011-02-23        kinaba: 		w[0] = w[1] - s.cx;
dcdd144598 2011-02-23        kinaba: 	::ReleaseDC( hwnd(), dc );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	SetParts( countof(w), w );
dcdd144598 2011-02-23        kinaba: 	SetCsText( str_ );
dcdd144598 2011-02-23        kinaba: 	SetLbText( lb_ );
dcdd144598 2011-02-23        kinaba: 	return h;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // ディスパッチャ
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: LRESULT GreenPadWnd::on_message( UINT msg, WPARAM wp, LPARAM lp )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	switch( msg )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 	// アクティブ化。EditCtrlにフォーカスを。
dcdd144598 2011-02-23        kinaba: 	case WM_ACTIVATE:
dcdd144598 2011-02-23        kinaba: 		if( LOWORD(wp) != WA_INACTIVE )
dcdd144598 2011-02-23        kinaba: 			edit_.SetFocus();
dcdd144598 2011-02-23        kinaba: 		break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// サイズ変更。子窓を適当に移動。
dcdd144598 2011-02-23        kinaba: 	case WM_SIZE:
dcdd144598 2011-02-23        kinaba: 		if( wp==SIZE_MAXIMIZED || wp==SIZE_RESTORED )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			int ht = stb_.AutoResize( wp==SIZE_MAXIMIZED );
dcdd144598 2011-02-23        kinaba: 			edit_.MoveTo( 0, 0, LOWORD(lp), HIWORD(lp)-ht );
dcdd144598 2011-02-23        kinaba: 			cfg_.RememberWnd(this);
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// ウインドウ移動
dcdd144598 2011-02-23        kinaba: 	case WM_MOVE:
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			RECT rc;
dcdd144598 2011-02-23        kinaba: 			getPos(&rc);
dcdd144598 2011-02-23        kinaba: 			cfg_.RememberWnd(this);
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// システムコマンド。終了ボタンとか。
dcdd144598 2011-02-23        kinaba: 	case WM_SYSCOMMAND:
dcdd144598 2011-02-23        kinaba: 		if( wp==SC_CLOSE || wp==SC_DEFAULT )
dcdd144598 2011-02-23        kinaba: 			on_exit();
dcdd144598 2011-02-23        kinaba: 		else
dcdd144598 2011-02-23        kinaba: 			return WndImpl::on_message( msg, wp, lp );
dcdd144598 2011-02-23        kinaba: 		break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 右クリックメニュー
dcdd144598 2011-02-23        kinaba: 	case WM_CONTEXTMENU:
dcdd144598 2011-02-23        kinaba: 		if( reinterpret_cast<HWND>(wp) == edit_.hwnd() )
dcdd144598 2011-02-23        kinaba: 			::TrackPopupMenu(
dcdd144598 2011-02-23        kinaba: 				::GetSubMenu( ::GetMenu(hwnd()), 1 ), // 編集メニュー表示
dcdd144598 2011-02-23        kinaba: 				TPM_LEFTALIGN|TPM_TOPALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,
dcdd144598 2011-02-23        kinaba: 				LOWORD(lp), HIWORD(lp), 0, hwnd(), NULL );
dcdd144598 2011-02-23        kinaba: 		else
dcdd144598 2011-02-23        kinaba: 			return WndImpl::on_message( msg, wp, lp );
dcdd144598 2011-02-23        kinaba: 		break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// メニューのグレーアウト処理
dcdd144598 2011-02-23        kinaba: 	case WM_INITMENU:
dcdd144598 2011-02-23        kinaba: 	case WM_INITMENUPOPUP:
dcdd144598 2011-02-23        kinaba: 		on_initmenu( reinterpret_cast<HMENU>(wp), msg==WM_INITMENUPOPUP );
dcdd144598 2011-02-23        kinaba: 		break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// D&D
dcdd144598 2011-02-23        kinaba: 	case WM_DROPFILES:
dcdd144598 2011-02-23        kinaba: 		on_drop( reinterpret_cast<HDROP>(wp) );
dcdd144598 2011-02-23        kinaba: 		break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// MRU
dcdd144598 2011-02-23        kinaba: 	case GPM_MRUCHANGED:
dcdd144598 2011-02-23        kinaba: 		SetupMRUMenu();
dcdd144598 2011-02-23        kinaba: 		break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// その他
dcdd144598 2011-02-23        kinaba: 	default:
dcdd144598 2011-02-23        kinaba: 		return WndImpl::on_message( msg, wp, lp );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	return 0;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool GreenPadWnd::on_command( UINT id, HWND ctrl )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	switch( id )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 	// Window
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_NEXTWINDOW: on_nextwnd(); break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_PREVWINDOW: on_prevwnd(); break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// File
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_NEWFILE:    on_newfile();   break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_OPENFILE:   on_openfile();  break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_REOPENFILE: on_reopenfile();break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_SAVEFILE:   on_savefile();  break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_SAVEFILEAS: on_savefileas();break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_EXIT:       on_exit();      break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// Edit
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_UNDO:       edit_.getDoc().Undo();              break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_REDO:       edit_.getDoc().Redo();              break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_CUT:        edit_.getCursor().Cut();            break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_COPY:       edit_.getCursor().Copy();           break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_PASTE:      edit_.getCursor().Paste();          break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_DELETE: if( edit_.getCursor().isSelected() )
dcdd144598 2011-02-23        kinaba: 	                        edit_.getCursor().Del();            break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_SELECTALL:  edit_.getCursor().Home(true,false);
dcdd144598 2011-02-23        kinaba: 	                        edit_.getCursor().End(true,true);   break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_DATETIME:   on_datetime();                      break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// Search
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_FIND:       search_.ShowDlg();  break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_FINDNEXT:   search_.FindNext(); break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_FINDPREV:   search_.FindPrev(); break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_JUMP:       on_jump(); break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_GREP:       on_grep();break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// View
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_NOWRAP:     edit_.getView().SetWrapType( wrap_=-1 ); break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_WRAPWIDTH:  edit_.getView().SetWrapType( wrap_=cfg_.wrapWidth() ); break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_WRAPWINDOW: edit_.getView().SetWrapType( wrap_=0 ); break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_CONFIG:     on_config();    break;
dcdd144598 2011-02-23        kinaba: 	case ID_CMD_STATUSBAR:  on_statusBar(); break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// DocType
dcdd144598 2011-02-23        kinaba: 	default: if( ID_CMD_DOCTYPE <= id ) {
dcdd144598 2011-02-23        kinaba: 			on_doctype( id - ID_CMD_DOCTYPE );
dcdd144598 2011-02-23        kinaba: 			break;
dcdd144598 2011-02-23        kinaba: 		} else if( ID_CMD_MRU <= id ) {
dcdd144598 2011-02-23        kinaba: 			on_mru( id - ID_CMD_MRU );
dcdd144598 2011-02-23        kinaba: 			break;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// Default
dcdd144598 2011-02-23        kinaba: 		return false;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	return true;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool GreenPadWnd::PreTranslateMessage( MSG* msg )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// 苦肉の策^^;
dcdd144598 2011-02-23        kinaba: 	if( search_.TrapMsg(msg) )
dcdd144598 2011-02-23        kinaba: 		return true;
dcdd144598 2011-02-23        kinaba: 	// キーボードショートカット処理
dcdd144598 2011-02-23        kinaba: 	return 0 != ::TranslateAccelerator( hwnd(), accel_, msg );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // コマンド処理
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_dirtyflag_change( bool )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	UpdateWindowName();
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_newfile()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	BootNewProcess();
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_openfile()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	Path fn;
dcdd144598 2011-02-23        kinaba: 	int  cs;
dcdd144598 2011-02-23        kinaba: 	if( ShowOpenDlg( &fn, &cs ) )
dcdd144598 2011-02-23        kinaba: 		Open( fn, cs );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_reopenfile()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( !isUntitled() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		ReopenDlg dlg( charSets_, csi_ );
dcdd144598 2011-02-23        kinaba: 		dlg.GoModal( hwnd() );
dcdd144598 2011-02-23        kinaba: 		if( dlg.endcode()==IDOK && AskToSave() )
dcdd144598 2011-02-23        kinaba: 			OpenByMyself( filename_, charSets_[dlg.csi()].ID, false );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_savefile()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	Save_showDlgIfNeeded();
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_savefileas()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( ShowSaveDlg() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		Save();
dcdd144598 2011-02-23        kinaba: 		ReloadConfig(); // 文書タイプに応じて表示を更新
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_exit()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	search_.SaveToINI( cfg_.getImpl() );
dcdd144598 2011-02-23        kinaba: 	if( AskToSave() )
dcdd144598 2011-02-23        kinaba: 		Destroy();
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_initmenu( HMENU menu, bool editmenu_only )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	LOGGER("GreenPadWnd::ReloadConfig on_initmenu begin");
dcdd144598 2011-02-23        kinaba: 	MENUITEMINFO mi = { sizeof(MENUITEMINFO), MIIM_STATE };
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	mi.fState =
dcdd144598 2011-02-23        kinaba: 		(edit_.getCursor().isSelected() ? MFS_ENABLED : MFS_DISABLED);
dcdd144598 2011-02-23        kinaba: 	SetMenuItemInfo( menu, ID_CMD_CUT, FALSE, &mi );
dcdd144598 2011-02-23        kinaba: 	SetMenuItemInfo( menu, ID_CMD_COPY, FALSE, &mi );
dcdd144598 2011-02-23        kinaba: 	SetMenuItemInfo( menu, ID_CMD_DELETE, FALSE, &mi );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	mi.fState =
dcdd144598 2011-02-23        kinaba: 		(edit_.getDoc().isUndoAble() ? MFS_ENABLED : MFS_DISABLED);
dcdd144598 2011-02-23        kinaba: 	SetMenuItemInfo( menu, ID_CMD_UNDO, FALSE, &mi );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	mi.fState =
dcdd144598 2011-02-23        kinaba: 		(edit_.getDoc().isRedoAble() ? MFS_ENABLED : MFS_DISABLED);
dcdd144598 2011-02-23        kinaba: 	SetMenuItemInfo( menu, ID_CMD_REDO, FALSE, &mi );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	if( editmenu_only )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		LOGGER("GreenPadWnd::ReloadConfig on_initmenu end");
dcdd144598 2011-02-23        kinaba: 		return;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	mi.fState = (isUntitled() || edit_.getDoc().isModified()
dcdd144598 2011-02-23        kinaba: 		? MFS_ENABLED : MFS_DISABLED);
dcdd144598 2011-02-23        kinaba: 	SetMenuItemInfo( menu, ID_CMD_SAVEFILE, FALSE, &mi );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	mi.fState =
dcdd144598 2011-02-23        kinaba: 		(!isUntitled() ? MFS_ENABLED : MFS_DISABLED);
dcdd144598 2011-02-23        kinaba: 	SetMenuItemInfo( menu, ID_CMD_REOPENFILE, FALSE, &mi );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	mi.fState =
dcdd144598 2011-02-23        kinaba: 		(cfg_.grepExe().len()>0 ? MFS_ENABLED : MFS_DISABLED);
dcdd144598 2011-02-23        kinaba: 	SetMenuItemInfo( menu, ID_CMD_GREP, FALSE, &mi );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	UINT id = (wrap_==-1 ? ID_CMD_NOWRAP
dcdd144598 2011-02-23        kinaba: 		: (wrap_>0 ? ID_CMD_WRAPWIDTH : ID_CMD_WRAPWINDOW));
dcdd144598 2011-02-23        kinaba: 	::CheckMenuRadioItem(
dcdd144598 2011-02-23        kinaba: 		menu, ID_CMD_NOWRAP, ID_CMD_WRAPWINDOW, id, MF_BYCOMMAND );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	::CheckMenuItem( menu, ID_CMD_STATUSBAR,
dcdd144598 2011-02-23        kinaba: 		cfg_.showStatusBar()?MFS_CHECKED:MFS_UNCHECKED );
dcdd144598 2011-02-23        kinaba: 	LOGGER("GreenPadWnd::ReloadConfig on_initmenu end");
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_drop( HDROP hd )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	UINT iMax = ::DragQueryFile( hd, 0xffffffff, NULL, 0 );
dcdd144598 2011-02-23        kinaba: 	for( UINT i=0; i<iMax; ++i )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		TCHAR str[MAX_PATH];
dcdd144598 2011-02-23        kinaba: 		::DragQueryFile( hd, i, str, countof(str) );
dcdd144598 2011-02-23        kinaba: 		Open( str, AutoDetect );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	::DragFinish( hd );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_jump()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	struct JumpDlg : public DlgImpl {
dcdd144598 2011-02-23        kinaba: 		JumpDlg(HWND w) : DlgImpl(IDD_JUMP), w_(w) { GoModal(w); }
dcdd144598 2011-02-23        kinaba: 		void on_init() {
dcdd144598 2011-02-23        kinaba: 			SetCenter(hwnd(),w_); ::SetFocus(item(IDC_LINEBOX)); }
dcdd144598 2011-02-23        kinaba: 		bool on_ok() {
dcdd144598 2011-02-23        kinaba: 			TCHAR str[100];
dcdd144598 2011-02-23        kinaba: 			::GetWindowText( item(IDC_LINEBOX), str, countof(str) );
dcdd144598 2011-02-23        kinaba: 			LineNo = String(str).GetInt();
dcdd144598 2011-02-23        kinaba: 			return true;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		int LineNo; HWND w_;
dcdd144598 2011-02-23        kinaba: 	} dlg(hwnd());
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	if( IDOK == dlg.endcode() )
dcdd144598 2011-02-23        kinaba: 		JumpToLine( dlg.LineNo );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_grep()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	Path g = cfg_.grepExe();
dcdd144598 2011-02-23        kinaba: 	if( g.len() != 0 )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		Path d;
dcdd144598 2011-02-23        kinaba: 		if( filename_.len() )
dcdd144598 2011-02-23        kinaba: 			(d = filename_).BeDirOnly().BeBackSlash(false);
dcdd144598 2011-02-23        kinaba: 		else
dcdd144598 2011-02-23        kinaba: 			d = Path(Path::Cur);
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		String fcmd;
dcdd144598 2011-02-23        kinaba: 		for( int i=0, e=g.len(); i<e; ++i )
dcdd144598 2011-02-23        kinaba: 			if( g[i]==TEXT('%') )
dcdd144598 2011-02-23        kinaba: 			{
dcdd144598 2011-02-23        kinaba: 				if( g[i+1]==TEXT('1') || g[i+1]==TEXT('D') ) // '1' for bkwd compat
dcdd144598 2011-02-23        kinaba: 					++i, fcmd += d;
dcdd144598 2011-02-23        kinaba: 				else if( g[i+1]==TEXT('F') )
dcdd144598 2011-02-23        kinaba: 					++i, fcmd += filename_;
dcdd144598 2011-02-23        kinaba: 				else if( g[i+1]==TEXT('N') )
dcdd144598 2011-02-23        kinaba: 					++i, fcmd += filename_.name();
dcdd144598 2011-02-23        kinaba: 			}
dcdd144598 2011-02-23        kinaba: 			else
dcdd144598 2011-02-23        kinaba: 				fcmd += g[i];
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		PROCESS_INFORMATION psi;
dcdd144598 2011-02-23        kinaba: 		STARTUPINFO         sti = {sizeof(STARTUPINFO)};
dcdd144598 2011-02-23        kinaba: 		//sti.dwFlags = STARTF_USESHOWWINDOW;
dcdd144598 2011-02-23        kinaba: 		//sti.wShowWindow = SW_SHOWNORMAL;
dcdd144598 2011-02-23        kinaba: 		if( ::CreateProcess( NULL, const_cast<TCHAR*>(fcmd.c_str()),
dcdd144598 2011-02-23        kinaba: 				NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL,
dcdd144598 2011-02-23        kinaba: 				&sti, &psi ) )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			::CloseHandle( psi.hThread );
dcdd144598 2011-02-23        kinaba: 			::CloseHandle( psi.hProcess );
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_datetime()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	TCHAR buf[255], tmp[255];
dcdd144598 2011-02-23        kinaba: 	::GetTimeFormat
dcdd144598 2011-02-23        kinaba: 		( LOCALE_USER_DEFAULT, 0, NULL, TEXT("HH:mm "), buf, countof(buf));
dcdd144598 2011-02-23        kinaba: 	::GetDateFormat
dcdd144598 2011-02-23        kinaba: 		( LOCALE_USER_DEFAULT, 0, NULL, TEXT("yy/MM/dd"),tmp,countof(tmp));
dcdd144598 2011-02-23        kinaba: 	::lstrcat( buf, tmp );
dcdd144598 2011-02-23        kinaba: 	edit_.getCursor().Input( buf, ::lstrlen(buf) );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_doctype( int no )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( HMENU m = ::GetSubMenu( ::GetSubMenu(::GetMenu(hwnd()),3),4 ) )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		cfg_.SetDocTypeByMenu( no, m );
dcdd144598 2011-02-23        kinaba: 		ReloadConfig( true );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_config()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( cfg_.DoDialog(*this) )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		SetupSubMenu();
dcdd144598 2011-02-23        kinaba: 		SetupMRUMenu();
dcdd144598 2011-02-23        kinaba: 		ReloadConfig(false);
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: static inline void MyShowWnd( HWND wnd )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( ::IsIconic(wnd) )
dcdd144598 2011-02-23        kinaba: 		::ShowWindow( wnd, SW_RESTORE );
dcdd144598 2011-02-23        kinaba: 	::BringWindowToTop( wnd );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_nextwnd()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( HWND next = ::FindWindowEx( NULL, hwnd(), className_, NULL ) )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		HWND last=next, pos;
dcdd144598 2011-02-23        kinaba: 		while( last != NULL )
dcdd144598 2011-02-23        kinaba: 			last = ::FindWindowEx( NULL, pos=last, className_, NULL );
dcdd144598 2011-02-23        kinaba: 		if( pos != next )
dcdd144598 2011-02-23        kinaba: 			::SetWindowPos( hwnd(), pos,
dcdd144598 2011-02-23        kinaba: 				0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW );
dcdd144598 2011-02-23        kinaba: 		MyShowWnd( next );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_prevwnd()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	HWND pos=NULL, next=::FindWindowEx( NULL,NULL,className_,NULL );
dcdd144598 2011-02-23        kinaba: 	if( next==hwnd() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		while( next != NULL )
dcdd144598 2011-02-23        kinaba: 			next = ::FindWindowEx( NULL,pos=next,className_,NULL );
dcdd144598 2011-02-23        kinaba: 		if( pos!=hwnd())
dcdd144598 2011-02-23        kinaba: 			MyShowWnd( pos );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		while( next!=hwnd() && next!=NULL )
dcdd144598 2011-02-23        kinaba: 			next = ::FindWindowEx( NULL,pos=next,className_,NULL );
dcdd144598 2011-02-23        kinaba: 		if( next!=NULL )
dcdd144598 2011-02-23        kinaba: 			MyShowWnd( pos );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_statusBar()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	stb_.SetStatusBarVisible( !stb_.isStatusBarVisible() );
dcdd144598 2011-02-23        kinaba: 	cfg_.ShowStatusBarSwitch();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	WINDOWPLACEMENT wp = {sizeof(wp)};
dcdd144598 2011-02-23        kinaba: 	::GetWindowPlacement( hwnd(), &wp );
dcdd144598 2011-02-23        kinaba: 	if( wp.showCmd != SW_MINIMIZE )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		const int ht = stb_.AutoResize( wp.showCmd == SW_MAXIMIZE );
dcdd144598 2011-02-23        kinaba: 		RECT rc;
dcdd144598 2011-02-23        kinaba: 		getClientRect(&rc);
dcdd144598 2011-02-23        kinaba: 		edit_.MoveTo( 0, 0, rc.right, rc.bottom-ht );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_move( const DPos& c, const DPos& s )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	static int busy_cnt = 0;
dcdd144598 2011-02-23        kinaba: 	if( edit_.getDoc().isBusy() && ((++busy_cnt)&0xff) )
dcdd144598 2011-02-23        kinaba: 		return;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	ulong cad = c.ad;
dcdd144598 2011-02-23        kinaba: 	if( ! cfg_.countByUnicode() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// ShiftJIS風のByte数カウント
dcdd144598 2011-02-23        kinaba: 		const unicode* cu = edit_.getDoc().tl(c.tl);
dcdd144598 2011-02-23        kinaba: 		const ulong tab = cfg_.vConfig().tabstep;
dcdd144598 2011-02-23        kinaba: 		cad = 0;
dcdd144598 2011-02-23        kinaba: 		for( ulong i=0; i<c.ad; ++i )
dcdd144598 2011-02-23        kinaba: 			if( cu[i] == L'\t' )
dcdd144598 2011-02-23        kinaba: 				cad = (cad/tab+1)*tab;
dcdd144598 2011-02-23        kinaba: 			else if( cu[i]<0x80 || 0xff60<=cu[i] && cu[i]<=0xff9f )
dcdd144598 2011-02-23        kinaba: 				cad = cad + 1;
dcdd144598 2011-02-23        kinaba: 			else
dcdd144598 2011-02-23        kinaba: 				cad = cad + 2;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	String str;
dcdd144598 2011-02-23        kinaba: 	str += TEXT('(');
dcdd144598 2011-02-23        kinaba: 	str += String().SetInt(c.tl+1);
dcdd144598 2011-02-23        kinaba: 	str += TEXT(',');
dcdd144598 2011-02-23        kinaba: 	str += String().SetInt(cad+1);
dcdd144598 2011-02-23        kinaba: 	str += TEXT(')');
dcdd144598 2011-02-23        kinaba: 	if( c != s )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		ulong sad = s.ad;
dcdd144598 2011-02-23        kinaba: 		if( ! cfg_.countByUnicode() )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			// ShiftJIS風のByte数カウント
dcdd144598 2011-02-23        kinaba: 			const unicode* su = edit_.getDoc().tl(s.tl);
dcdd144598 2011-02-23        kinaba: 			sad = 0;
dcdd144598 2011-02-23        kinaba: 			for( ulong i=0; i<s.ad; ++i )
dcdd144598 2011-02-23        kinaba: 				sad += (su[i]<0x80 || 0xff60<=su[i] && su[i]<=0xff9f ? 1 : 2);
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		str += TEXT(" - (");
dcdd144598 2011-02-23        kinaba: 		str += String().SetInt(s.tl+1);
dcdd144598 2011-02-23        kinaba: 		str += TEXT(',');
dcdd144598 2011-02-23        kinaba: 		str += String().SetInt(sad+1);
dcdd144598 2011-02-23        kinaba: 		str += TEXT(')');
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	stb_.SetText( str.c_str() );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // ユーティリティー
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::JumpToLine( ulong ln )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	edit_.getCursor().MoveCur( DPos(ln-1,0), false );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::SetupSubMenu()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( HMENU m = ::GetSubMenu( ::GetSubMenu(::GetMenu(hwnd()),3),4 ) )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		cfg_.SetDocTypeMenu( m, ID_CMD_DOCTYPE );
dcdd144598 2011-02-23        kinaba: 		::DrawMenuBar( hwnd() );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::UpdateWindowName()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// タイトルバーに表示される文字列の調整
dcdd144598 2011-02-23        kinaba: 	// [FileName *] - GreenPad
dcdd144598 2011-02-23        kinaba: 	String name;
dcdd144598 2011-02-23        kinaba: 	name += TEXT('[');
dcdd144598 2011-02-23        kinaba: 	name += isUntitled() ? TEXT("untitled") : filename_.name();
dcdd144598 2011-02-23        kinaba: 	if( edit_.getDoc().isModified() ) name += TEXT(" *");
dcdd144598 2011-02-23        kinaba: 	name += TEXT("] - ");
dcdd144598 2011-02-23        kinaba: 	name += String(IDS_APPNAME).c_str();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	SetText( name.c_str() );
dcdd144598 2011-02-23        kinaba: 	stb_.SetCsText( charSets_[csi_].shortName );
dcdd144598 2011-02-23        kinaba: 	stb_.SetLbText( lb_ );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::SetupMRUMenu()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( HMENU m = ::GetSubMenu( ::GetSubMenu(::GetMenu(hwnd()),0),8 ) )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		cfg_.SetUpMRUMenu( m, ID_CMD_MRU );
dcdd144598 2011-02-23        kinaba: 		::DrawMenuBar( hwnd() );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_mru( int no )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	Path fn = cfg_.GetMRU(no);
dcdd144598 2011-02-23        kinaba: 	if( fn.len() != 0 )
dcdd144598 2011-02-23        kinaba: 		Open( fn, AutoDetect );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // 設定更新処理
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::ReloadConfig( bool noSetDocType )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// 文書タイプロード
dcdd144598 2011-02-23        kinaba: 	if( !noSetDocType )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		int t = cfg_.SetDocType( filename_ );
dcdd144598 2011-02-23        kinaba: 		if( HMENU m = ::GetSubMenu( ::GetSubMenu(::GetMenu(hwnd()),3),4 ) )
dcdd144598 2011-02-23        kinaba: 			cfg_.CheckMenu( m, t );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	LOGGER("GreenPadWnd::ReloadConfig DocTypeLoaded");
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// Undo回数制限
dcdd144598 2011-02-23        kinaba: 	edit_.getDoc().SetUndoLimit( cfg_.undoLimit() );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 行番号
dcdd144598 2011-02-23        kinaba: 	bool ln = cfg_.showLN();
dcdd144598 2011-02-23        kinaba: 	edit_.getView().ShowLineNo( ln );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 折り返し方式
dcdd144598 2011-02-23        kinaba: 	wrap_ = cfg_.wrapType();
dcdd144598 2011-02-23        kinaba: 	edit_.getView().SetWrapType( wrap_ );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 色・フォント
dcdd144598 2011-02-23        kinaba: 	VConfig vc = cfg_.vConfig();
dcdd144598 2011-02-23        kinaba: 	edit_.getView().SetFont( vc );
dcdd144598 2011-02-23        kinaba: 	LOGGER("GreenPadWnd::ReloadConfig ViewConfigLoaded");
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// キーワードファイル
dcdd144598 2011-02-23        kinaba: 	Path kwd = cfg_.kwdFile();
dcdd144598 2011-02-23        kinaba: 	FileR fp;
dcdd144598 2011-02-23        kinaba: 	if( kwd.len()!=0 && fp.Open(kwd.c_str()) )
dcdd144598 2011-02-23        kinaba: 		edit_.getDoc().SetKeyword((const unicode*)fp.base(),fp.size()/2);
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 		edit_.getDoc().SetKeyword(NULL,0);
dcdd144598 2011-02-23        kinaba: 	LOGGER("GreenPadWnd::ReloadConfig KeywordLoaded");
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // 開く処理
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool GreenPadWnd::ShowOpenDlg( Path* fn, int* cs )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// [Open][Cancel] 開くファイル名指定ダイアログを表示
dcdd144598 2011-02-23        kinaba: 	String flst[] = {
dcdd144598 2011-02-23        kinaba: 		String(IDS_TXTFILES),
dcdd144598 2011-02-23        kinaba: 		String(cfg_.txtFileFilter()),
dcdd144598 2011-02-23        kinaba: 		String(IDS_ALLFILES),
dcdd144598 2011-02-23        kinaba: 		String(TEXT("*.*"))
dcdd144598 2011-02-23        kinaba: 	};
dcdd144598 2011-02-23        kinaba: 	aarr<TCHAR> filt = OpenFileDlg::ConnectWithNull(flst,countof(flst));
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	OpenFileDlg ofd( charSets_ );
dcdd144598 2011-02-23        kinaba: 	bool ok = ofd.DoModal( hwnd(), filt.get(), filename_.c_str() );
dcdd144598 2011-02-23        kinaba: 	if( ok )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		*fn = ofd.filename();
dcdd144598 2011-02-23        kinaba: 		*cs = charSets_[ofd.csi()].ID;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	return ok;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool GreenPadWnd::Open( const ki::Path& fn, int cs )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( isUntitled() && !edit_.getDoc().isModified() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// 無題で無変更だったら自分で開く
dcdd144598 2011-02-23        kinaba: 		return OpenByMyself( fn, cs );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// 同じ窓で開くモードならそうする
dcdd144598 2011-02-23        kinaba: 		if( cfg_.openSame() )
dcdd144598 2011-02-23        kinaba: 			return ( AskToSave() ? OpenByMyself( fn, cs ) : true );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		// そうでなければ他へ回す
dcdd144598 2011-02-23        kinaba: 		String
dcdd144598 2011-02-23        kinaba: 			cmd  = TEXT("-c");
dcdd144598 2011-02-23        kinaba: 			cmd += String().SetInt( cs );
dcdd144598 2011-02-23        kinaba: 			cmd += TEXT(" \"");
dcdd144598 2011-02-23        kinaba: 			cmd += fn;
dcdd144598 2011-02-23        kinaba: 			cmd += TEXT('\"');
dcdd144598 2011-02-23        kinaba: 		BootNewProcess( cmd.c_str() );
dcdd144598 2011-02-23        kinaba: 		return true;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool GreenPadWnd::OpenByMyself( const ki::Path& fn, int cs, bool needReConf )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// ファイルを開けなかったらそこでおしまい。
dcdd144598 2011-02-23        kinaba: 	aptr<TextFileR> tf( new TextFileR(cs) );
dcdd144598 2011-02-23        kinaba: 	if( !tf->Open( fn.c_str() ) )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// ERROR!
dcdd144598 2011-02-23        kinaba: 		MsgBox( String(IDS_OPENERROR).c_str() );
dcdd144598 2011-02-23        kinaba: 		return false;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 自分内部の管理情報を更新
dcdd144598 2011-02-23        kinaba: 	if( fn[0]==TEXT('\\') || fn[1]==TEXT(':') )
dcdd144598 2011-02-23        kinaba: 		filename_ = fn;
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 		filename_ = Path( Path::Cur ) + fn;
dcdd144598 2011-02-23        kinaba: 	if( tf->size() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		csi_      = charSets_.findCsi( tf->codepage() );
dcdd144598 2011-02-23        kinaba: 		if( tf->nolb_found() )
dcdd144598 2011-02-23        kinaba: 			lb_       = cfg_.GetNewfileLB();
dcdd144598 2011-02-23        kinaba: 		else
dcdd144598 2011-02-23        kinaba: 			lb_       = tf->linebreak();
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 	{ // 空ファイルの場合は新規作成と同じ扱い
dcdd144598 2011-02-23        kinaba: 		csi_      = cfg_.GetNewfileCsi();
dcdd144598 2011-02-23        kinaba: 		lb_       = cfg_.GetNewfileLB();
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	filename_.BeShortLongStyle();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// カレントディレクトリを、ファイルのある位置以外にしておく
dcdd144598 2011-02-23        kinaba: 	// (こうしないと、開いているファイルのあるディレクトリが削除できない)
dcdd144598 2011-02-23        kinaba: 	::SetCurrentDirectory( Path(filename_).BeDriveOnly().c_str() );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 文書タイプに応じて表示を更新
dcdd144598 2011-02-23        kinaba: 	if( needReConf )
dcdd144598 2011-02-23        kinaba: 		ReloadConfig();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 開く
dcdd144598 2011-02-23        kinaba: 	edit_.getDoc().ClearAll();
dcdd144598 2011-02-23        kinaba: 	edit_.getDoc().OpenFile( tf );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// タイトルバー更新
dcdd144598 2011-02-23        kinaba: 	UpdateWindowName();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// [最近使ったファイル]へ追加
dcdd144598 2011-02-23        kinaba: 	cfg_.AddMRU( filename_ );
dcdd144598 2011-02-23        kinaba: 	HWND wnd = NULL;
dcdd144598 2011-02-23        kinaba: 	while( NULL!=(wnd=::FindWindowEx( NULL, wnd, className_, NULL )) )
dcdd144598 2011-02-23        kinaba: 		SendMessage( wnd, GPM_MRUCHANGED, 0, 0 );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	return true;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // 保存処理
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool GreenPadWnd::ShowSaveDlg()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// [Save][Cancel] 保存先ファイル名指定ダイアログを表示
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	String flst[] = {
dcdd144598 2011-02-23        kinaba: 		String(IDS_ALLFILES),
dcdd144598 2011-02-23        kinaba: 		String(TEXT("*.*"))
dcdd144598 2011-02-23        kinaba: 	};
dcdd144598 2011-02-23        kinaba: 	aarr<TCHAR> filt = SaveFileDlg::ConnectWithNull( flst, countof(flst) );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	SaveFileDlg sfd( charSets_, csi_, lb_ );
dcdd144598 2011-02-23        kinaba: 	if( !sfd.DoModal( hwnd(), filt.get(), filename_.c_str() ) )
dcdd144598 2011-02-23        kinaba: 		return false;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	filename_ = sfd.filename();
dcdd144598 2011-02-23        kinaba: 	csi_      = sfd.csi();
dcdd144598 2011-02-23        kinaba: 	lb_       = sfd.lb();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	return true;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool GreenPadWnd::Save_showDlgIfNeeded()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	bool wasUntitled = isUntitled();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// [Save][Cancel] ファイル名未定ならダイアログ表示
dcdd144598 2011-02-23        kinaba: 	if( isUntitled() )
dcdd144598 2011-02-23        kinaba: 		if( !ShowSaveDlg() )
dcdd144598 2011-02-23        kinaba: 			return false;
dcdd144598 2011-02-23        kinaba: 	if( Save() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		if( wasUntitled )
dcdd144598 2011-02-23        kinaba: 			ReloadConfig(); // 文書タイプに応じて表示を更新
dcdd144598 2011-02-23        kinaba: 		return true;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	return false;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool GreenPadWnd::AskToSave()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// 変更されていたら、
dcdd144598 2011-02-23        kinaba: 	// [Yes][No][Cancel] 保存するかどうか尋ねる。
dcdd144598 2011-02-23        kinaba: 	// 保存するなら
dcdd144598 2011-02-23        kinaba: 	// [Save][Cancel]    ファイル名未定ならダイアログ表示
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	if( edit_.getDoc().isModified() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		int answer = MsgBox(
dcdd144598 2011-02-23        kinaba: 			String(IDS_ASKTOSAVE).c_str(),
dcdd144598 2011-02-23        kinaba: 			String(IDS_APPNAME).c_str(),
dcdd144598 2011-02-23        kinaba: 			MB_YESNOCANCEL|MB_ICONQUESTION
dcdd144598 2011-02-23        kinaba: 		);
dcdd144598 2011-02-23        kinaba: 		if( answer == IDYES )    return Save_showDlgIfNeeded();
dcdd144598 2011-02-23        kinaba: 		if( answer == IDCANCEL ) return false;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	return true;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool GreenPadWnd::Save()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	TextFileW tf( charSets_[csi_].ID, lb_ );
dcdd144598 2011-02-23        kinaba: 	if( tf.Open( filename_.c_str() ) )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// 無事ファイルに保存できた場合
dcdd144598 2011-02-23        kinaba: 		edit_.getDoc().SaveFile( tf );
dcdd144598 2011-02-23        kinaba: 		UpdateWindowName();
dcdd144598 2011-02-23        kinaba: 		// [最近使ったファイル]更新
dcdd144598 2011-02-23        kinaba: 		cfg_.AddMRU( filename_ );
dcdd144598 2011-02-23        kinaba: 		HWND wnd = NULL;
dcdd144598 2011-02-23        kinaba: 		while( NULL!=(wnd=::FindWindowEx( NULL, wnd, className_, NULL )) )
dcdd144598 2011-02-23        kinaba: 			SendMessage( wnd, GPM_MRUCHANGED, 0, 0 );
dcdd144598 2011-02-23        kinaba: 		return true;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// Error!
dcdd144598 2011-02-23        kinaba: 	MsgBox( String(IDS_SAVEERROR).c_str() );
dcdd144598 2011-02-23        kinaba: 	return false;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // メインウインドウの初期化
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: GreenPadWnd::ClsName GreenPadWnd::className_ = TEXT("GreenPad MainWnd");
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: GreenPadWnd::GreenPadWnd()
dcdd144598 2011-02-23        kinaba: 	: WndImpl  ( className_, WS_OVERLAPPEDWINDOW, WS_EX_ACCEPTFILES )
dcdd144598 2011-02-23        kinaba: 	, charSets_( cfg_.GetCharSetList() )
dcdd144598 2011-02-23        kinaba: 	, csi_     ( cfg_.GetNewfileCsi() )
dcdd144598 2011-02-23        kinaba: 	, lb_      ( cfg_.GetNewfileLB() )
dcdd144598 2011-02-23        kinaba: 	, search_  ( *this, edit_ )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	LOGGER( "GreenPadWnd::Construct begin" );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	static WNDCLASSEX wc;
dcdd144598 2011-02-23        kinaba: 	wc.hIcon         = app().LoadIcon( IDR_MAIN );
dcdd144598 2011-02-23        kinaba: 	wc.hCursor       = app().LoadOemCursor( IDC_ARROW );
dcdd144598 2011-02-23        kinaba: 	wc.lpszMenuName  = MAKEINTRESOURCE( IDR_MAIN );
dcdd144598 2011-02-23        kinaba: 	wc.lpszClassName = className_;
dcdd144598 2011-02-23        kinaba: 	WndImpl::Register( &wc );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	ime().EnableGlobalIME( true );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	LOGGER( "GreenPadWnd::Construct end" );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::on_create( CREATESTRUCT* cs )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	LOGGER("GreenPadWnd::on_create begin");
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	accel_ = app().LoadAccel( IDR_MAIN );
dcdd144598 2011-02-23        kinaba: 	stb_.Create( hwnd() );
dcdd144598 2011-02-23        kinaba: 	edit_.Create( NULL, hwnd(), 0, 0, 100, 100 );
dcdd144598 2011-02-23        kinaba: 	LOGGER("GreenPadWnd::on_create edit created");
dcdd144598 2011-02-23        kinaba: 	edit_.getDoc().AddHandler( this );
dcdd144598 2011-02-23        kinaba: 	edit_.getCursor().AddHandler( this );
dcdd144598 2011-02-23        kinaba: 	stb_.SetStatusBarVisible( cfg_.showStatusBar() );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	LOGGER("GreenPadWnd::on_create halfway");
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	search_.LoadFromINI( cfg_.getImpl() );
dcdd144598 2011-02-23        kinaba: 	SetupSubMenu();
dcdd144598 2011-02-23        kinaba: 	SetupMRUMenu();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	LOGGER("GreenPadWnd::on_create menu");
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool GreenPadWnd::StartUp( const Path& fn, int cs, int ln )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	LOGGER( "GreenPadWnd::StartUp begin" );
dcdd144598 2011-02-23        kinaba: 	Create( 0, 0, cfg_.GetWndX(), cfg_.GetWndY(), cfg_.GetWndW(), cfg_.GetWndH(), 0 );
dcdd144598 2011-02-23        kinaba: 	LOGGER( "GreenPadWnd::Created" );
dcdd144598 2011-02-23        kinaba: 	if( fn.len()==0 || !OpenByMyself( fn, cs ) )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		LOGGER( "for new file..." );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		// ファイルを開か(け)なかった場合
dcdd144598 2011-02-23        kinaba: 		ReloadConfig( fn.len()==0 );
dcdd144598 2011-02-23        kinaba: 		LOGGER( "GreenPadWnd::StartUp reloadconfig end" );
dcdd144598 2011-02-23        kinaba: 		UpdateWindowName();
dcdd144598 2011-02-23        kinaba: 		LOGGER( "GreenPadWnd::StartUp updatewindowname end" );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 指定の行へジャンプ
dcdd144598 2011-02-23        kinaba: 	if( ln != -1 )
dcdd144598 2011-02-23        kinaba: 		JumpToLine( ln );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	LOGGER( "GreenPadWnd::StartUp end" );
dcdd144598 2011-02-23        kinaba: 	return true;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void GreenPadWnd::ShowUp2()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	Window::ShowUp( cfg_.GetWndM() ? SW_MAXIMIZE : SW_SHOW );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // スタートアップルーチン
dcdd144598 2011-02-23        kinaba: //	コマンドラインの解析を行う
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: int kmain()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	LOGGER( "kmain() begin" );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	Argv  arg;
dcdd144598 2011-02-23        kinaba: 	ulong   i;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	LOGGER( "argv processed" );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba:   //-- まずオプションスイッチを処理
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	int optL = -1;
dcdd144598 2011-02-23        kinaba: 	int optC = 0;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	for( i=1; i<arg.size() && arg[i][0]==TEXT('-'); ++i )
dcdd144598 2011-02-23        kinaba: 		switch( arg[i][1] )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 		case TEXT('c'):
dcdd144598 2011-02-23        kinaba: 			optC = String::GetInt( arg[i]+2 );
dcdd144598 2011-02-23        kinaba: 			break;
dcdd144598 2011-02-23        kinaba: 		case TEXT('l'):
dcdd144598 2011-02-23        kinaba: 			optL = String::GetInt( arg[i]+2 );
dcdd144598 2011-02-23        kinaba: 			break;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	LOGGER( "option processed" );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba:   //-- 次にファイル名
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	Path file;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	if( i < arg.size() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		file = arg[i];
dcdd144598 2011-02-23        kinaba: 		if( !file.isFile() )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			ulong j; // ""無しで半スペ入りでもそれなりに対処
dcdd144598 2011-02-23        kinaba: 			for( j=i+1; j<arg.size(); ++j )
dcdd144598 2011-02-23        kinaba: 			{
dcdd144598 2011-02-23        kinaba: 				file += ' ';
dcdd144598 2011-02-23        kinaba: 				file += arg[j];
dcdd144598 2011-02-23        kinaba: 				if( file.isFile() )
dcdd144598 2011-02-23        kinaba: 					break;
dcdd144598 2011-02-23        kinaba: 			}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 			if( j==arg.size() )
dcdd144598 2011-02-23        kinaba: 				file = arg[i];
dcdd144598 2011-02-23        kinaba: 			else
dcdd144598 2011-02-23        kinaba: 				i=j;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	LOGGER( "filename processed" );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba:   //-- 余ってる引数があれば、それで新規プロセス起動
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	if( ++i < arg.size() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		String cmd;
dcdd144598 2011-02-23        kinaba: 		for( ; i<arg.size(); ++i )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			cmd += TEXT('\"');
dcdd144598 2011-02-23        kinaba: 			cmd += arg[i];
dcdd144598 2011-02-23        kinaba: 			cmd += TEXT("\" ");
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		::BootNewProcess( cmd.c_str() );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	LOGGER( "newprocess booted" );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba:   //-- メインウインドウ発進
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	GreenPadWnd wnd;
dcdd144598 2011-02-23        kinaba: 	if( !wnd.StartUp(file,optC,optL) )
dcdd144598 2011-02-23        kinaba: 		return -1;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	LOGGER( "kmain() startup ok" );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba:   //-- メインループ
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	wnd.ShowUp2();
dcdd144598 2011-02-23        kinaba: 	LOGGER( "showup!" );
dcdd144598 2011-02-23        kinaba: 	wnd.MsgLoop();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	LOGGER( "fin" );
dcdd144598 2011-02-23        kinaba: 	return 0;
dcdd144598 2011-02-23        kinaba: }