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

📄 matlabconsole.c

📁 图像处理的压缩算法
💻 C
📖 第 1 页 / 共 2 页
字号:
/*------------------------------------------------------------------------------*
 * File Name:Matlab Console	 													*
 * Creation:CPY 12/27/02														*
 * Purpose: OriginC Source C file for Dialog Buidler Matlab Console				*
 * Copyright (c) Originlab Corporation, 2002, 2003								*
 * All Rights Reserved															*
 * 																				*
 * Modification Log:															*
 *	DVT	1/2/03 QA70-3606 v7.0467 MATLAB_IMPORT_DIALOG_USE_MATLAB_CLASS			*
 *	DVT 7/1/03 QA70-4753 v7.0614 MATLAB_CONSOLE_PUT_COMPLEX						*
 *	DVT 8/14/03 MATLAB_SINGLE_INSTANCE_FOR_MENU_IMPORT							*
 *	AW 09/07/03 QA70-3859 FIX_SOME_CHARACTER_INPUT_PROBLEM						*
 *  Soapy 9/19/03 INCREASE_TEXT_LIMIT_IN_RICHEDIT								*
 *  Soapy 9/19/03 NO_DELETE_PROMPT												*
 *  Soapy 9/19/03 SUPPORT_MULTILINE_COMMAND										*
 *  Soapy 9/19/03 CHECK_MATRIX_SIZE_BEFORE_PUT_MATRIX							*
 *	Soapy 9/26/03 REMOVE_DUPLICATED_CODE										*
 *	Soapy 9/27/03 MORE_EFFECT_ON_COMMAND_WINDOW									*
 *	Soapy 10/22/03	DELETE_SPACE_BEFORE_COMMAND									*
 *  Soapy 11/4/03  	FIX_BUG_ON_BRACKET											*
 *  Soapy 11/12/03 GET_REAL_MATRIX_BY_VARIABLE_NAME								*
 *------------------------------------------------------------------------------*/
 
#include <Origin.h>
//#include <Project.h>
//#include <sys_utils.h> // basic routines implemeted through Origin C, see sys_utils.c
#include <Dialog.h>
//#include <utilities.h>
#include "ResizeDialog.h"

#include <externApps.h> // matlab class
#include "ODlg.h" // resource IDs, ODlg.dll also use this file for its res ids
#include "HelpID.h"			// dialog ID

////////////////////////////////////////////////////////////////////////////////////

#define STR_NO_MATLAB "Matlab not available"
#define STR_PROMPT	">>" //matlab prompt
#define STR_PROMPT_LEN 2
enum {CMDID_PUT_REAL, CMDID_GET_REAL, CMDID_PUT_COMPLEX, CMDID_GET_COMPLEX, CMDID_EXIT, CMDID_QUIT, CMDID_CLC, CMDID_COUNT};
// for simple list, we just keep the list consistent with CMDID_PUT etc
static StringArray s_asCmdList = {"pr", "gr", "pc", "gc",                   "exit",     "quit",     "clc"};
BOOL	MatlabImport(LPCSTR lpcszMatlabWkspaceName = NULL, HWND hParent = NULL, BOOL bSinle = FALSE);

///Soapy 9/19/03 INCREASE_TEXT_LIMIT_IN_RICHEDIT
#define TEXT_LIMITS 90000
///END INCREASE_TEXT_LIMIT_IN_RICHEDIT

enum {UNEDITABLE = 1, PARTEDITABLE, EDITABLE};  //Selection range status 

class MATLABConsoleDlg : public ResizeDialog
{
public:
	MATLABConsoleDlg() : ResizeDialog(IDD_MATLAB_CONSOLE, "ODlg")
	{
		m_pMATLABObj = NULL;
	}
	int Create(HWND hWndParent = NULL)
	{
		InitMsgMap();// will be called from internal later
		int nRet = ResizeDialog::Create(hWndParent);
		
		return nRet;
	}
	
///----------------------------------------------
///----------------- Message Map ----------------
///
protected:
	
EVENTS_BEGIN
	ON_INIT(OnInitDialog) 
	ON_SIZE(OnDlgResize)
	ON_KEY(IDC_MATLAB_RICHEDIT, OnKeyCmdWindow)
	ON_TIMER(OnTimer)
	ON_DESTROY(OnDestroy)

	ON_BN_CLICKED(IDC_MATLAB_OPEN_IMPORT, OnClickImport)
EVENTS_END
///----------------------------------------------
///	DVT	1/2/03 QA70-3606 v7.0467 MATLAB_IMPORT_DIALOG_USE_MATLAB_CLASS
// pending on Matlab::Attach(mlObj) or two BEGIN_EVENT_MAP in the same file (pending OriginC ## merge)
//	ON_BN_CLICKED(IDC_MATLAB_BTN_IMPORT, OnClickImport)

	BOOL OnInitDialog()
	{
		waitCursor junk;
		ResizeDialog::OnInitDialog();
		GetWindow().Text = "Connecting to Matlab...";
			
		m_reCntrl = GetItem(IDC_MATLAB_RICHEDIT);
		m_reCntrl.Enable = FALSE;// until ready by timer
				
		///Soapy 9/19/03 INCREASE_TEXT_LIMIT_IN_RICHEDIT
		m_reCntrl.LimitText(TEXT_LIMITS);
		///END INCREASE_TEXT_LIMIT_IN_RICHEDIT
		
		m_pMATLABObj = new Matlab(FALSE);			///DVT 
		
		m_nTimerID = SetTimer(5432,300);
		return TRUE;
	}
	
	BOOL OnTimer(UINT nTimerID)
	{
		ASSERT(nTimerID == m_nTimerID);
		
		KillTimer(m_nTimerID);
		m_nTimerID = 0;
		
		if(m_pMATLABObj && m_pMATLABObj->Attach(TRUE, FALSE, TRUE))		///	DVT MATLAB_SINGLE_INSTANCE_FOR_MENU_IMPORT using: Attach( bUseRunningInstance, bSingle, bKeepMatlabRunning )
		{
			add_str( STR_PROMPT, FALSE);
			GetWindow().Text = "Matlab Console";
			
			m_PromptPosition = 2;  		///Soapy 9/19/03 NO_DELETE_PROMPT
			
		}
		else
			GetWindow().Text = STR_NO_MATLAB;
			
		
		m_reCntrl.Enable = TRUE; // allow this no matter what
		///	DVT	1/2/03 QA70-3606 v7.0467 MATLAB_IMPORT_DIALOG_USE_MATLAB_CLASS
		//Import button added, have to set focus to the re control, Tarak will add SetFocus to Window class
		//reCntrl.SetFocus(TRUE);
		///	end MATLAB_IMPORT_DIALOG_USE_MATLAB_CLASS
	
		return TRUE;
	}
	
	BOOL OnDestroy(void)
	{
		// we keep this running so next time dialog open the workspace is still there
		//m_mlObj.Detach();
		///	DVT in case m_pMATLABObj->Attach(TRUE, FALSE, TRUE) overwritten externally:
		m_pMATLABObj->KeepMatlabRunning = TRUE;
		delete m_pMATLABObj;
		m_pMATLABObj = NULL;
		return TRUE;
	}
	
	BOOL OnClickImport(Control ctrl)
	{
		MatlabImport(NULL, GetSafeHwnd() );
		return TRUE;
	}
	
	BOOL OnDlgResize(int nType, int cx, int cy)
	{
		RECT r1;
		Control cntrlRichEdit;
		GetControlClientRect(IDC_MATLAB_RICHEDIT, r1, &cntrlRichEdit);
		r1.bottom = cy;
		r1.right = cx;		
		cntrlRichEdit.MoveWindow(&r1);
		return TRUE;
	}
	
	//return FALSE if not handled, and continue to be processed
	//return TRUE will stop default processing
	BOOL OnKeyCmdWindow(Control oCntrl, UINT msg, UINT wParam, UINT lParam)
	{	
		///Soapy 9/27/03 MORE_EFFECT_ON_COMMAND_WINDOW	
		int nStart, nEnd;
		int nSelectionStatus = checkAndReturnSelectionRange(nStart, nEnd);
		
		if( !is_sys_cmd_key(wParam) )
		{
			if( nSelectionStatus != EDITABLE)
					m_reCntrl.SetSel(-1,-1);
			
			return false;  // indicate default processing
		}
		///END MORE_EFFECT_ON_COMMAND_WINDOW	
		
		/// AW 09/07/03 QA70-3859 FIX_SOME_CHARACTER_INPUT_PROBLEM
		if(msg == WM_CHAR)
			return FALSE;
		/// END FIX_SOME_CHARACTER_INPUT_PROBLEM
		
		if(msg != WM_KEYDOWN)
			return TRUE;// we need to eat all other message related to Enter key
		
		switch(wParam)
		{
		case VK_RETURN:
			///Soapy 9/27/03 MORE_EFFECT_ON_COMMAND_WINDOW
			if(nSelectionStatus == UNEDITABLE) // Support selection execution
			{
				string strAddText = m_reCntrl.GetSelText();
				strAddText.Replace(">>","");
				m_reCntrl.SetSel(-1,-1);
				m_reCntrl.ReplaceSel(strAddText);
			}
			///END MORE_EFFECT_ON_COMMAND_WINDOW
			return OnEnterKey(nStart, nEnd);
			break;
			
		///Soapy 9/27/03 MORE_EFFECT_ON_COMMAND_WINDOW
		/*
		case VK_LEFT: case VK_BACK:
			// should not go left on prompt
			if(nStart - nLineStart <= strlen(STR_PROMPT))
				break;
			
			return FALSE;
		*/
		case VK_LEFT: case VK_RIGHT:
			return false;
			break;
			
		case VK_BACK:
			if(nSelectionStatus != EDITABLE)
			{
				m_reCntrl.SetSel(-1,-1);				
			}
			else
			{
				if((nStart == nEnd) &&(nStart>m_PromptPosition))
					m_reCntrl.SetSel(nStart-1,nEnd);
				m_reCntrl.ReplaceSel("");				
			}
			return true;
			break;
			
		case VK_DELETE:
			if(nSelectionStatus != EDITABLE)
			{
				m_reCntrl.SetSel(-1,-1);
			}
			return false;
			break;
		}
		///END MORE_EFFECT_ON_COMMAND_WINDOW
			
		return TRUE; // no more default processing	
	}
	
	BOOL OnEnterKey(int nStart, int nEnd)
	{
		///Soapy 9/19/03 SUPPORT_MULTILINE_COMMAND
		/*
		if(nEnd > nStart)		
		{
			// selected range, not supported for now,
			MessageBeep(0);
			return TRUE;// no more default processing
		}
		
		string strCmd = ed.GetLine();
		strCmd.TrimRight();
		string strPrompt = strCmd.Left(STR_PROMPT_LEN);
		
		if(strPrompt.Compare(STR_PROMPT) != 0)
			return TRUE;
				
		add_str("\r\n", FALSE);
		strCmd = strCmd.Mid(STR_PROMPT_LEN);
		*/
		m_reCntrl.SetSel(m_PromptPosition,-1);		
		string strCmd = m_reCntrl.GetSelText();
		m_reCntrl.SetSel(-1,-1);
		
	 	if(!isBracketMatch(strCmd,'[',']') ||!isBracketMatch(strCmd,'{','}' ))
			return false;
				
		add_str("\r\n", FALSE);		
		///END SUPPORT_MULTILINE_COMMAND
	
		string strOutput = STR_NO_MATLAB;
		if(m_pMATLABObj && !is_Origin_command(strCmd, strOutput) && *m_pMATLABObj)
		{
			strOutput = m_pMATLABObj->Execute(strCmd);
		}
		
		add_str(strOutput);	
		
		//we need put Enter in ourself as we were switching to anther control above
		add_str(STR_PROMPT, FALSE);
		
		///Soapy 9/19/03 NO_DELETE_PROMPT
		m_reCntrl.SetSel(-1,-1);

⌨️ 快捷键说明

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