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

📄 worksbar.cpp

📁 用bcg库编写的java IDE 源码
💻 CPP
字号:

#include "stdafx.h"
#include "resource.h"
#include "editcmd.h"
#include "worksbar.h"
#include "wm.h"
#include "FileViewTree.h"
#include "ClassBrowserTree.h"

#include  "xGuiTabWnd.h"
#include "JavaDeclManager.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#pragma warning ( disable : 4711 )
/////////////////////////////////////////////////////////////////////////////
// CWorkspaceBar

#define ACCESS_IMAGE(nAccess) \
(nAccess == IS_PUBLIC)?0:(nAccess == IS_PROTECTED)?2: 1

CFileViewTree*      CWorkSpaceBar::m_pwndFileView;
CClassBrowserTree*  CWorkSpaceBar::m_pwndClassView;
CTreeCtrl*          CWorkSpaceBar::m_pwndResView;
CWizBarComboBox*    CWorkSpaceBar::m_pwndWizbarClass;
CWizBarComboBox*    CWorkSpaceBar::m_pwndWizbarMethod;

#define ID_CLASSVIEW_CONTAINER 0x45
#define ID_SOLVIEW_CONTAINER   0x55



CWorkSpaceBar::CWorkSpaceBar () //: CBaseDockBar()
{	
  m_bShow = TRUE;
  m_pwndFileView     = new CFileViewTree;
  m_pwndClassView    = new CClassBrowserTree;
  m_pwndResView      = new CTreeCtrl;
}

CWorkSpaceBar::~CWorkSpaceBar ()
{
  //delete m_pwndFileView;
  //delete m_pwndClassView;
  delete m_pwndResView;
}

BEGIN_MESSAGE_MAP (CWorkSpaceBar, CBaseDockBar)
      //{{AFX_MSG_MAP( CWorkspaceBar )
        ON_WM_CREATE ()
	    ON_WM_SIZE()
      //}}AFX_MSG_MAP
	  ON_WM_NCLBUTTONUP()
END_MESSAGE_MAP ()


/////////////////////////////////////////////////////////////////////////////
// CWorkspaceBar message handlers

int CWorkSpaceBar::OnCreate (LPCREATESTRUCT lpCreateStruct)
{
  if (CBaseDockBar::OnCreate (lpCreateStruct) == -1)
                return -1;
  CreateViews();
  return 0;
}

void CWorkSpaceBar::OnNcLButtonUp(UINT nHitTest, CPoint point)
{
    if (nHitTest == HTCLOSE)
         m_bShow = !m_bShow;
    CBaseDockBar::OnNcLButtonUp(nHitTest, point);
}


CString CWorkSpaceBar::GetName()
{
  return _T ("Workspace");
}

/////////////////////////////////////////////////////////////////////////////
#pragma warning ( default : 4711 )


void CWorkSpaceBar::CreateViews()
{

   if(!m_TabSolExplorer.Create(WS_VISIBLE|WS_CHILD,CRect(0,0,0,0),this,0x9999))
		return ;

   m_imgList.Create(IDB_EXPLORER,16,20,RGB(255,0,0));
   m_TabSolExplorer.SetImageList(&m_imgList);


   CreateSolView();
   m_TabSolExplorer.Addtab(&m_wndSolViewTabCont,"Solution Explorer",0);

   CreateClassView();
   m_TabSolExplorer.Addtab(&m_wndClassViewTabCont,"Class View",1);
}



HTREEITEM CWorkSpaceBar::AddItem(CString pszItem,HTREEITEM hParent /*=0*/,
									 UINT ntype /*= 0*/,UINT naccess /*=0*/
									 ,DWORD dwData /*= 0*/)
{
	HTREEITEM hItem= NULL;
	switch(ntype)
	{
	  case IS_CLASS:
		  {
		    if(m_pwndClassView->GetItemText(hParent).Find("Source:",0) != -1)
             hItem= m_pwndClassView->InsertItem(pszItem,0,0,hParent,TVI_LAST);//always keep imports at top.
			else
             hItem= m_pwndClassView->InsertItem(pszItem,0,0,hParent,TVI_SORT);

			m_pwndClassView->SetItemData(hItem,dwData);
			
            CJavaClassDecl* pClass = (CJavaClassDecl*)dwData;
	        int index     = m_pwndWizbarClass->AddString(pClass->getQualifiedName());
            m_pwndWizbarClass->SetItemData(index,dwData);
            m_pwndWizbarClass->SetCurSel(index);
	        return hItem;
		  }
	  case IS_INTERFACE:
		  {
		    if(m_pwndClassView->GetItemText(hParent).Find("Source:",0) != -1)
             hItem= m_pwndClassView->InsertItem(pszItem,16,16,hParent,TVI_LAST);
			else
             hItem= m_pwndClassView->InsertItem(pszItem,16,16,hParent,TVI_SORT);

			m_pwndClassView->SetItemData(hItem,dwData);			
			CJavaInterfaceDecl* pInterface = (CJavaInterfaceDecl*)dwData;

	        int index     = m_pwndWizbarClass->AddString(pInterface->getQualifiedName());
            m_pwndWizbarClass->SetItemData(index,dwData);
            m_pwndWizbarClass->SetCurSel(index);
	        return hItem;
		  }
	  case IS_FUNC:
		  {
            return CWorkSpaceBar::AddFunc(pszItem,hParent,naccess,dwData);
		  }
	  case IS_VAR:
		  {
             return CWorkSpaceBar::AddVar(pszItem,hParent,naccess,dwData);
		  }
	  case IS_LOCAL:
		  {
		    hItem= m_pwndClassView->InsertItem(pszItem,2,2,hParent);
			m_pwndClassView->SetItemData(hItem,dwData);
		    return hItem;
		  }
	  case IS_IMPORT:
		  {
		    hItem= m_pwndClassView->InsertItem(pszItem,12,12,hParent);
			m_pwndClassView->SetItemData(hItem,dwData);
		    return hItem;
		  }
	  case IS_PACKAGE:
		  {


		  }
	  case IS_BLOCK:
		  {
		    hItem = m_pwndClassView->InsertItem(pszItem,10,10,hParent);
			m_pwndClassView->SetItemData(hItem,dwData);
		    return hItem;
		  }
	  default:;
        m_pwndClassView->InsertItem(pszItem,8,8);
		return 0;
	}
  return 0;
}


void CWorkSpaceBar::RemoveItem(HTREEITEM hItem,UINT nType /*= -1*/)
{
   //CString strDebug =
   //m_pwndClassView->GetItemText(hItem);
   m_pwndClassView->DeleteItem(hItem);
}

HTREEITEM CWorkSpaceBar::AddFunc(CString pszItem,HTREEITEM hParent,
								 UINT naccess,DWORD dwData /*= 0*/)
{

  HTREEITEM  hItem = NULL;
  switch(naccess)
  {
     case  IS_PUBLIC:
		 {
            hItem = m_pwndClassView->InsertItem(pszItem,1,1,hParent,TVI_SORT);
			m_pwndClassView->SetItemData(hItem,dwData);
	          if(hItem == NULL)
		    m_pwndClassView->InsertItem("NULL PARENT:AddFunc IS_PUBLIC",8,8,TVI_ROOT,TVI_LAST);

			CJavaMethodDecl* pMethod = (CJavaMethodDecl*)dwData;
			CJavaClassDecl* pClass = GetFocusClass();
			CJavaClassDecl* pParent = (CJavaClassDecl*)pMethod->getParent();
            if(pClass == pMethod->getParent())
			{
              m_pwndWizbarMethod->AddString(pMethod->getDeclName(),ACCESS_IMAGE(pMethod->getAccess()));
			}
		    return hItem;
		 }
     case  IS_PROTECTED:
		 {
	        hItem = m_pwndClassView->InsertItem(pszItem,6,6,hParent,TVI_SORT);
		    m_pwndClassView->SetItemData(hItem,dwData);
	        if(hItem == NULL)
		    m_pwndClassView->InsertItem("NULL PARENT AddFunc IS_PROTECTED",8,8,TVI_ROOT,TVI_LAST);
			
			CJavaMethodDecl* pMethod = (CJavaMethodDecl*)dwData;
            if(GetFocusClass() == pMethod->getParent())
			{
              m_pwndWizbarMethod->AddString(pMethod->getDeclName(),ACCESS_IMAGE(pMethod->getAccess()));
			}
		   return hItem;
		 }
     default:;
		{
           hItem = m_pwndClassView->InsertItem(pszItem,4,4,hParent,TVI_SORT);
		   m_pwndClassView->SetItemData(hItem,dwData);
	         if(hItem == NULL)
		   m_pwndClassView->InsertItem("NULL PARENT AddFunc IS_PRIVATE",8,8,TVI_ROOT,TVI_LAST);

		   CJavaMethodDecl* pMethod = (CJavaMethodDecl*)dwData;
           if(GetFocusClass() == pMethod->getParent())
		   {
              m_pwndWizbarMethod->AddString(pMethod->getDeclName(),ACCESS_IMAGE(pMethod->getAccess()));
		   }
		   return hItem;
		}
  }return 0;
}


HTREEITEM CWorkSpaceBar::AddVar(CString pszItem,HTREEITEM hParent,
									              UINT naccess,DWORD dwData /*= 0*/)
{
  HTREEITEM hItem = NULL;
  switch(naccess)
  {
     case  IS_PUBLIC:
		 {
           hItem = m_pwndClassView->InsertItem(pszItem,3,3,hParent,TVI_SORT);
		   m_pwndClassView->SetItemData(hItem,dwData);
	        if(hItem == NULL)
		   m_pwndClassView->InsertItem("NULL PARENT",8,8,TVI_ROOT,TVI_LAST);
		   return hItem;
		 }
     case  IS_PROTECTED:
		 {
	       hItem = m_pwndClassView->InsertItem(pszItem,7,7,hParent,TVI_SORT);
		   m_pwndClassView->SetItemData(hItem,dwData);
	   	    if(hItem == NULL)
		   m_pwndClassView->InsertItem("NULL PARENT",8,8,TVI_ROOT,TVI_LAST);
		   return hItem;
		 }
     default:;
		{
           hItem= m_pwndClassView->InsertItem(pszItem,5,5,hParent,TVI_SORT);
		   m_pwndClassView->SetItemData(hItem,dwData);
	   	     if(hItem == NULL)
		   m_pwndClassView->InsertItem("NULL PARENT",8,8,TVI_ROOT,TVI_LAST);
		 return hItem;
	   }
  }
	return 0;
}
#include "DropDownButton.h"

void CWorkSpaceBar::CreateClassView()
{
  m_wndClassViewTabCont.Create(NULL,NULL,
	  WS_BORDER|WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE,CRect(),&m_TabSolExplorer,
	  ID_CLASSVIEW_CONTAINER);

  //return;

  const DWORD dwStyle =	WS_BORDER|WS_CHILD | WS_VISIBLE | TVS_HASLINES 
	                             | TVS_LINESATROOT | TVS_HASBUTTONS ;

  m_pwndClassView->Create(dwStyle,CRect(), &m_wndClassViewTabCont,ID_CLASSVIEW);
  m_wndClassViewTabCont.addComponent(m_pwndClassView,CPoint(1,30),CPoint(1,1));
  //m_pwndClassView = (CClassBrowserTree*)
  //	                 m_wndClassViewTabCont.addComponent(RUNTIME_CLASS(CClassBrowserTree)
  //	                ,0,dwStyle,CPoint(1,30),CPoint(1,1));


  m_classImg.Create(16,16,ILC_COLOR24|ILC_MASK,7,2);
  CBitmap bm;
  bm.LoadBitmap(IDB_CLASSIMG);
  m_classImg.Add(&bm,RGB(255,0,0));

  m_pwndClassView->SetImageList(&m_classImg,TVSIL_NORMAL);

  CDropDownButton* pDropDownMenu = new CDropDownButton;
  pDropDownMenu->Create(_T(""), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW, 
		CRect(0,4,40,27), &m_wndClassViewTabCont,0x1);
  //m_wndClassViewTabCont.addComponent(pDropDownMenu,CRect(0,0,30,10));
  m_wndClassViewTabCont.SetImageList(IDB_EXPLORER,16,24,RGB(255,0,0));
  m_wndClassViewTabCont.addButton(22,pDropDownMenu);
}

void CWorkSpaceBar::CreateSolView()
{
  m_wndSolViewTabCont.Create(NULL,NULL,
	  WS_BORDER|WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE,CRect(),&m_TabSolExplorer,
	  ID_SOLVIEW_CONTAINER);

  //return;
  const DWORD dwStyle =	WS_BORDER|WS_CHILD | WS_VISIBLE | TVS_HASLINES
	                             | TVS_LINESATROOT | TVS_HASBUTTONS ;
  
  
  m_pwndFileView->Create(dwStyle,CRect(), &m_wndSolViewTabCont,ID_FILEVIEW);

  m_wndSolViewTabCont.addComponent(m_pwndFileView,CPoint(1,30),CPoint(1,1));
  
  /**
  CTreeCtrl* pwndFileView = (CTreeCtrl*)
	               m_wndSolViewTabCont.addComponent(RUNTIME_CLASS(CTreeCtrl)
	               ,ID_FILEVIEW,dwStyle,CPoint(1,30),CPoint(1,1));
  m_pwndFileView->SubclassWindow(pwndFileView->Detach());
  **/
    
  m_fileImg.Create(16,16,ILC_COLOR24|ILC_MASK,7,2);
  CBitmap bm;
  bm.LoadBitmap(IDB_FILE_BUNDLE);
  m_fileImg.Add(&bm,RGB(255,0,255));

  m_pwndFileView->SetImageList(&m_fileImg,TVSIL_NORMAL);

  _CGuiToolButton* pBtn = new _CGuiToolButton;
  pBtn->Create(_T(""), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW, 
		       CRect(0,4,25,27), &m_wndSolViewTabCont,0x1);
  m_wndSolViewTabCont.SetImageList(IDB_EXPLORER,16,24,RGB(255,0,0));
  m_wndSolViewTabCont.addButton(23,pBtn);
}

void CWorkSpaceBar::CreateResView()
{


}



HTREEITEM AddFunc(CString pszItem,HTREEITEM hParent,
				               UINT naccess,DWORD dwData /*= 0*/)
{
  return CWorkSpaceBar::AddFunc(pszItem,hParent,naccess,dwData);
}

HTREEITEM AddVar(CString pszItem,HTREEITEM hParent, UINT naccess,
				                                              DWORD dwData /*= 0*/)
{
  return CWorkSpaceBar::AddVar(pszItem,hParent,naccess,dwData);
}


void RemoveItem(HTREEITEM hItem,UINT nType /*= -1*/)
{

  CWorkSpaceBar::RemoveItem(hItem,nType);
}

HTREEITEM AddItem(CString pszItem,HTREEITEM hParent,
		                                              UINT ntype,UINT naccess,
													  DWORD dwData /*= 0*/)
{

  return CWorkSpaceBar::AddItem(pszItem,hParent,ntype,naccess,dwData);
}

HTREEITEM addProject(CString strProj)
{
  HTREEITEM hFirst = CWorkSpaceBar::m_pwndClassView->GetFirstVisibleItem();
  for(hFirst; hFirst != NULL;)
  {
    CString strItem = CWorkSpaceBar::m_pwndClassView->GetItemText(hFirst);
	if(strItem.Compare(strProj+" classes") == 0)
		return hFirst;
    hFirst = CWorkSpaceBar::m_pwndClassView->GetNextVisibleItem(hFirst);
  }  
  return CWorkSpaceBar::m_pwndClassView->InsertItem(strProj+" classes",15,15);
}

HTREEITEM addSource(HTREEITEM hParent,CString strSource)
{
  return CWorkSpaceBar::m_pwndClassView->InsertItem(strSource,14,14,hParent);
}

HTREEITEM addImports(HTREEITEM hParent,CString strImports)
{
  return CWorkSpaceBar::m_pwndClassView->InsertItem(strImports,11,11,hParent,0);
}

HTREEITEM removeOnContainZero(HTREEITEM hItem)
{
  if(CWorkSpaceBar::m_pwndClassView->ItemHasChildren(hItem))
	  return hItem;
  else
    CWorkSpaceBar::m_pwndClassView->DeleteItem(hItem);
  return NULL;
}

void CWorkSpaceBar::OnSelchangeClass()
{
  //fill the method combobox
  CJavaClassDecl* pClass = GetFocusClass();

  CWorkSpaceBar::m_pwndWizbarMethod->ResetContent();

  DECL_LIST* pList = pClass->getMembers();
  for(POSITION pos = pList->GetHeadPosition(); pos != NULL;)
  {
    __CBaseDecl* pDecl = pList->GetNext(pos);
	if(pDecl->getKind() == METHOD_DECL)
	{
	   int index = m_pwndWizbarMethod->AddString(pDecl->getDeclName(),ACCESS_IMAGE(pDecl->getAccess()));
       m_pwndWizbarMethod->SetItemData(index,(DWORD)pDecl);
	}
  }
}

void CWorkSpaceBar::SelectMethod(__CBaseDecl* pMethod)
{
  //fill the method combobox
  CJavaClassDecl* pClass = GetFocusClass();


  DECL_LIST* pList = pClass->getMembers();
  for(POSITION pos = pList->GetHeadPosition(); pos != NULL;)
  {
    __CBaseDecl* pDecl = pList->GetNext(pos);
	if(pMethod == pDecl)
	{
	  CWorkSpaceBar::m_pwndWizbarMethod->SelectString(-1,pDecl->getDeclName());
	  return;
	}
  }
}

void CWorkSpaceBar::SelectClass(__CBaseDecl* pDecl)
{
  int count = m_pwndWizbarClass->GetCount();
  for(int i=0; i<count; i++)
  {
    CJavaClassDecl* pClass = (CJavaClassDecl*)
		CWorkSpaceBar::m_pwndWizbarClass->GetItemData(i);
	if(pClass == pDecl)
	{
      m_pwndWizbarClass->SetCurSel(i);break;

	}
  }
}


CJavaClassDecl* CWorkSpaceBar::GetFocusClass()
{
  int sel = CWorkSpaceBar::m_pwndWizbarClass->GetCurSel();
  return (CJavaClassDecl*)CWorkSpaceBar::m_pwndWizbarClass->GetItemData(sel);
}

void CWorkSpaceBar::OnSelchangeFunction()
{


}


void PrintBound(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine,
				                                   CString strLabel /*= ""*/)
{
  if(!strLabel.IsEmpty())
  CWorkSpaceBar::AddItem(strLabel);
  CString fm;
  fm.Format("%d",nStartLine);
  CWorkSpaceBar::AddItem("   StartLine:"+fm);
  fm.Format("%d",nStartIndex);
  CWorkSpaceBar::AddItem("   StartIndex:"+fm);
  fm.Format("%d",nEndLine);
  CWorkSpaceBar::AddItem("   EndLine:"+fm);
  fm.Format("%d",nEndIndex);
  CWorkSpaceBar::AddItem("   EndIndex:"+fm);
  CWorkSpaceBar::AddItem("************************");
}

⌨️ 快捷键说明

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