From 583033b8bc46f46a039144c0d8fa97d406bc64ee Mon Sep 17 00:00:00 2001 From: leo Date: Fri, 3 Jun 2005 23:28:10 +0000 Subject: Improvements to the Select by Name Dialog: The list is now sorted, removed unused options and resized it. git-svn-id: http://svn.leocad.org/trunk@402 c7d43263-9d01-0410-8a33-9dba5d9f93d6 --- win/LeoCAD.rc | 33 +++++++++++++-------------------- win/Seldlg.cpp | 37 ++++++++++++++++++++++++++++++++++--- 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/win/LeoCAD.rc b/win/LeoCAD.rc index 8a7685b..8014e2c 100644 --- a/win/LeoCAD.rc +++ b/win/LeoCAD.rc @@ -656,34 +656,27 @@ BEGIN LVS_SINGLESEL | WS_BORDER | WS_TABSTOP,7,7,206,90 END -IDD_SELECT_OBJECTS DIALOG DISCARDABLE 0, 0, 246, 170 +IDD_SELECT_OBJECTS DIALOG DISCARDABLE 0, 0, 246, 230 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Select Objects" FONT 8, "MS Sans Serif" BEGIN - LISTBOX IDC_SELDLG_LIST,7,7,137,136,LBS_NOINTEGRALHEIGHT | + LISTBOX IDC_SELDLG_LIST,7,7,137,196,LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "All",IDC_SELDLG_ALL,12,150,38,11 - PUSHBUTTON "None",IDC_SELDLG_NONE,55,150,38,11 - PUSHBUTTON "Invert",IDC_SELDLG_INVERT,98,150,38,11 - GROUPBOX "Sort",IDC_STATIC,156,3,80,37 - CONTROL "By Name",IDC_SELDLG_NAME,"Button",BS_AUTORADIOBUTTON, - 172,15,53,8 - CONTROL "By Type",IDC_SELDLG_TYPE,"Button",BS_AUTORADIOBUTTON, - 172,26,53,8 - GROUPBOX "List Display",IDC_STATIC,156,46,80,65 + GROUPBOX "List Display",IDC_STATIC,157,7,80,66 CONTROL "Pieces",IDC_SELDLG_PIECES,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,172,61,43,8 + WS_TABSTOP,174,22,43,8 CONTROL "Cameras",IDC_SELDLG_CAMERAS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,172,73,43,8 + WS_TABSTOP,174,34,43,8 CONTROL "Lights",IDC_SELDLG_LIGHTS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,172,85,43,8 + WS_TABSTOP,174,46,43,8 CONTROL "Groups",IDC_SELDLG_GROUPS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,172,97,43,8 - EDITTEXT IDC_SELDLG_EDIT,166,125,62,10,ES_AUTOHSCROLL - DEFPUSHBUTTON "Select",IDOK,152,149,41,14 - PUSHBUTTON "Cancel",IDCANCEL,198,149,41,14 - GROUPBOX "Quick Search",IDC_STATIC,156,113,80,30 + WS_TABSTOP,174,58,43,8 + PUSHBUTTON "All",IDC_SELDLG_ALL,14,210,38,11 + PUSHBUTTON "None",IDC_SELDLG_NONE,57,210,38,11 + PUSHBUTTON "Invert",IDC_SELDLG_INVERT,100,210,38,11 + DEFPUSHBUTTON "Select",IDOK,152,209,41,14 + PUSHBUTTON "Cancel",IDCANCEL,198,209,41,14 END IDD_ARRAY DIALOG DISCARDABLE 0, 0, 224, 170 @@ -1498,7 +1491,7 @@ BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 239 TOPMARGIN, 7 - BOTTOMMARGIN, 163 + BOTTOMMARGIN, 223 END IDD_ARRAY, DIALOG diff --git a/win/Seldlg.cpp b/win/Seldlg.cpp index 3dc3792..9667c7a 100644 --- a/win/Seldlg.cpp +++ b/win/Seldlg.cpp @@ -21,12 +21,28 @@ static char THIS_FILE[] = __FILE__; ///////////////////////////////////////////////////////////////////////////// // CSelectDlg dialog +int SelectDlgCompare(const void* elem1, const void* elem2) +{ + LC_SEL_DATA* a = (LC_SEL_DATA*)elem1; + LC_SEL_DATA* b = (LC_SEL_DATA*)elem2; + + if (a->type == b->type) + return strcmp(a->name, b->name); + else + return a->type - b->type; +} CSelectDlg::CSelectDlg(void* pData, CWnd* pParent /*=NULL*/) : CDialog(CSelectDlg::IDD, pParent) { m_pData = (LC_SEL_DATA*)pData; + int count = 0; + for (LC_SEL_DATA* p = m_pData; p->pointer != NULL; p++) + count++; + + qsort(m_pData, count, sizeof(LC_SEL_DATA), SelectDlgCompare); + //{{AFX_DATA_INIT(CSelectDlg) m_bCameras = TRUE; m_bGroups = TRUE; @@ -68,7 +84,7 @@ END_MESSAGE_MAP() BOOL CSelectDlg::OnInitDialog() { UINT u = theApp.GetProfileInt(LC_SELDLG_KEY, LC_SELDLG_KEY_NAME, - LC_SELDLG_CAMERAS|LC_SELDLG_GROUPS|LC_SELDLG_LIGHTS|LC_SELDLG_PIECES); + LC_SELDLG_CAMERAS|LC_SELDLG_GROUPS|LC_SELDLG_LIGHTS|LC_SELDLG_PIECES); m_bCameras = (u & LC_SELDLG_CAMERAS) != 0; m_bGroups = (u & LC_SELDLG_GROUPS) != 0; @@ -79,35 +95,46 @@ BOOL CSelectDlg::OnInitDialog() UpdateList(TRUE); - return TRUE; // return TRUE unless you set the focus to a control - // EXCEPTION: OCX Property Pages should return FALSE + return TRUE; } void CSelectDlg::OnSeldlgAll() { + m_List.SetRedraw(FALSE); + for (int i = 0; i < m_List.GetCount(); i++) { m_List.SetSel(i); ((LC_SEL_DATA*)m_List.GetItemDataPtr(i))->selected = true; } + + m_List.SetRedraw(TRUE); } void CSelectDlg::OnSeldlgNone() { + m_List.SetRedraw(FALSE); + for (int i = 0; i < m_List.GetCount(); i++) { m_List.SetSel(i, FALSE); ((LC_SEL_DATA*)m_List.GetItemDataPtr(i))->selected = false; } + + m_List.SetRedraw(TRUE); } void CSelectDlg::OnSeldlgInvert() { + m_List.SetRedraw(FALSE); + for (int i = 0; i < m_List.GetCount(); i++) { m_List.SetSel(i, !m_List.GetSel(i)); ((LC_SEL_DATA*)m_List.GetItemDataPtr(i))->selected = (m_List.GetSel(i) != 0); } + + m_List.SetRedraw(TRUE); } void CSelectDlg::OnOK() @@ -137,6 +164,8 @@ void CSelectDlg::UpdateList(BOOL bFirst) UpdateData(TRUE); int i, idx; + m_List.SetRedraw(FALSE); + if ((m_bPieces != bPieces) || bFirst) { if (m_bPieces) @@ -227,6 +256,8 @@ void CSelectDlg::UpdateList(BOOL bFirst) for (idx = 0; idx < m_List.GetCount(); idx++) m_List.SetSel(idx, ((LC_SEL_DATA*)m_List.GetItemData(idx))->selected); + + m_List.SetRedraw(TRUE); } void CSelectDlg::OnSelChange() -- cgit v1.2.3