mirror of
https://github.com/leozide/leocad
synced 2024-11-17 07:47:55 +01:00
153 lines
3.1 KiB
C++
153 lines
3.1 KiB
C++
// PieceCmb.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "leocad.h"
|
|
#include "PieceCmb.h"
|
|
#include "PieceBar.h"
|
|
#include "pieceinf.h"
|
|
#include "project.h"
|
|
#include "globals.h"
|
|
#include "library.h"
|
|
#include "lc_application.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPiecesCombo
|
|
|
|
CPiecesCombo::CPiecesCombo()
|
|
{
|
|
m_bAutoComplete = TRUE;
|
|
}
|
|
|
|
CPiecesCombo::~CPiecesCombo()
|
|
{
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPiecesCombo, CComboBox)
|
|
//{{AFX_MSG_MAP(CPiecesCombo)
|
|
ON_CONTROL_REFLECT(CBN_EDITUPDATE, OnEditupdate)
|
|
ON_CONTROL_REFLECT(CBN_SELCHANGE, OnSelchange)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPiecesCombo message handlers
|
|
|
|
void CPiecesCombo::OnEditupdate()
|
|
{
|
|
if (!m_bAutoComplete)
|
|
return;
|
|
|
|
char str[66];
|
|
PiecesLibrary *pLib = lcGetPiecesLibrary();
|
|
CPiecesBar* pBar = (CPiecesBar*)GetParent();
|
|
PieceInfo* pInfo;
|
|
|
|
if (int n = GetWindowText(str, 65))
|
|
{
|
|
char newstr[66];
|
|
int sel = -1;
|
|
strcpy (newstr, "Z");
|
|
for (int i = 0; i < pLib->GetPieceCount(); i++)
|
|
{
|
|
pInfo = pLib->GetPieceInfo(i);
|
|
|
|
if ((pInfo->m_strDescription[0] == '~') && !pBar->m_bSubParts)
|
|
continue;
|
|
|
|
if (_strnicmp (str, pInfo->m_strDescription, n) == 0)
|
|
{
|
|
if (_stricmp (newstr, pInfo->m_strDescription) > 0)
|
|
{
|
|
strcpy (newstr, pInfo->m_strDescription);
|
|
sel = i;
|
|
}
|
|
}
|
|
else
|
|
if (_strnicmp (str, pInfo->m_strName, n) == 0)
|
|
{
|
|
if (_stricmp (newstr, pInfo->m_strName) > 0)
|
|
{
|
|
strcpy (newstr, pInfo->m_strName);
|
|
sel = i;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (sel >= 0)
|
|
SelectPiece(pLib->GetPieceInfo(sel));
|
|
|
|
if (strlen (newstr) > 1)
|
|
{
|
|
SetWindowText(newstr);
|
|
SetEditSel(n, -1);
|
|
}
|
|
}
|
|
}
|
|
|
|
BOOL CPiecesCombo::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
if (pMsg->message == WM_KEYDOWN)
|
|
{
|
|
m_bAutoComplete = TRUE;
|
|
int nVirtKey = (int) pMsg->wParam;
|
|
if (nVirtKey == VK_DELETE || nVirtKey == VK_BACK)
|
|
{
|
|
CEdit* Edit = (CEdit*)GetWindow(GW_CHILD);
|
|
m_bAutoComplete = FALSE;
|
|
Edit->ReplaceSel("");
|
|
}
|
|
else if (nVirtKey == VK_RETURN)
|
|
{
|
|
PiecesLibrary* Lib = lcGetPiecesLibrary();
|
|
CString str;
|
|
|
|
GetWindowText(str);
|
|
|
|
int Index = Lib->FindCategoryIndex("Search Results");
|
|
|
|
if (Index == -1)
|
|
Lib->AddCategory("Search Results", (const char*)str);
|
|
else
|
|
Lib->SetCategory(Index, "Search Results", (const char*)str);
|
|
}
|
|
}
|
|
|
|
return CComboBox::PreTranslateMessage(pMsg);
|
|
}
|
|
|
|
void CPiecesCombo::OnSelchange()
|
|
{
|
|
char str[66];
|
|
CPiecesBar* pBar = (CPiecesBar*)GetParent();
|
|
PiecesLibrary *pLib = lcGetPiecesLibrary();
|
|
|
|
if (!GetLBText (GetCurSel(), str))
|
|
return;
|
|
|
|
for (int i = 0; i < pLib->GetPieceCount(); i++)
|
|
{
|
|
PieceInfo* pInfo = pLib->GetPieceInfo(i);
|
|
|
|
if (strcmp(str, pInfo->m_strDescription) == 0)
|
|
SelectPiece(pInfo);
|
|
}
|
|
}
|
|
|
|
void CPiecesCombo::SelectPiece(PieceInfo* Info)
|
|
{
|
|
PiecesLibrary *Lib = lcGetPiecesLibrary();
|
|
CPiecesBar* Bar = (CPiecesBar*)GetParent();
|
|
|
|
int Index = Lib->GetFirstCategory(Info);
|
|
|
|
if (Index != -1)
|
|
Bar->SelectPiece(Lib->GetCategoryName(Index), Info);
|
|
}
|