summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorleo2005-06-03 23:28:10 +0000
committerleo2005-06-03 23:28:10 +0000
commit583033b8bc46f46a039144c0d8fa97d406bc64ee (patch)
tree7d41b7aefce3b5e602c70dfc0ae95d8d669396fc
parent6ebd2ed9b1bd07d0420d0ba6cd79ce3a62cb63a4 (diff)
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
-rw-r--r--win/LeoCAD.rc33
-rw-r--r--win/Seldlg.cpp37
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()