|
Does every item get an own variable of the NOTATIONINFO structure
with unque filled field szEvent ?
virtual void BeHappy() = 0;
|
|
|
|
|
yes
im initializing
NotationInfo = new ArrayVector<NOTATIONINFO> (500);
at my initdialog function
and my fillList function is having a local temp variable
NOTATIONINFO notTemp={0}<
which will get each event,epoch and datetime
NotationInfo->Add(notTemp)
|
|
|
|
|
Have you something like this ? :
...
NOTATIONINFO notTemp = {0};
...
TCHAR szEventToSet[30] = {0};
...
_tcscpy_s(notTemp.szEvent, _countof(notTemp.szEvent), szEventToSet);
NotationInfo->Add(notTemp);
...
virtual void BeHappy() = 0;
|
|
|
|
|
|
OK And how will the structure be associated with an item ?
virtual void BeHappy() = 0;
|
|
|
|
|
there is no association as of now...
i m just reading data and storing in structure
|
|
|
|
|
That is good
But your should set the address of the stored structure in the array
(not the address of the local variable) - at the item data...
Please see the given earlier example from MS
how to insert the items with the data assotiations.
virtual void BeHappy() = 0;
|
|
|
|
|
ok ......
what i should write inside my call back function?
|
|
|
|
|
I would not change the last comparing code given by you -
for the first test step
...but extend the inserting the items by the assotiations.
virtual void BeHappy() = 0;
|
|
|
|
|
Is that must to add data to listview from the structure NOTATIONINFO
currently i m updating Listview values to structue NOTATIONINFO
this is how current association happening
|
|
|
|
|
Please post your items-inserting code
virtual void BeHappy() = 0;
|
|
|
|
|
for (int i = 0; i < Nnots; i++)
{
if (!(*m_NotHeader)[i]->Time)
{
continue;
}
char szEpoch[20] = {0};
char szTime[20] = {0};
char szEvent[NOT_STRING_LENGTH] = {0};
long sec_on_this_day = (*m_NotHeader)[i]->Time % 86400;
int tm_hour = sec_on_this_day / 3600;
int tm_min = (sec_on_this_day / 60) % 60;
int tm_sec = sec_on_this_day % 60;
LONG lEpoch = (*m_NotHeader)[i]->Time;
::SendMessage(m_hReviewWnd, TWM_WEEG_MESSAGE, TWGM_WEEG_GETEPOCHFORTIME, (LPARAM) &lEpoch);
wsprintf(szEpoch, "%ld", lEpoch);
wsprintf(szTime, "%02d:%02d:%02d.%02d", tm_hour, tm_min, tm_sec, ((*m_NotHeader)[i]->Fractional * 100 / nfh.Fraction_Second_Reference));
int flagsToUse = flags;
if (m_dwStaticEndTime)
{
SampleID NT = { (*m_NotHeader)[i]->Time, (*m_NotHeader)[i]->Fractional };
if (NT >= ST || m_dwStaticEndTime == MAXDWORD)
{
flagsToUse ^= NSI_MARK_IF_NOT_IN_FILES;
}
}
szEvent[0] = '\0';
NotationString(m_hNotation, (*m_NotHeader)[i], szEvent, sizeof(szEvent), flagsToUse);
int nItemCount = ListView_GetItemCount(hLVWnd);
LVITEM lvi;
lvi.mask = LVIF_TEXT;
lvi.iItem = nItemCount;
lvi.iSubItem = 0;
lvi.pszText = szEpoch;
listItemIndex = ListView_InsertItem(hLVWnd, &lvi);
NotationList.nEpoch = atoi(szEpoch);
if (listItemIndex != LV_ERR)
{
ListView_SetItemText(hLVWnd, nItemCount, 1, szTime);
strcpy(NotationList.szDateTime,szTime);
ListView_SetItemText(hLVWnd, nItemCount, 2, szEvent);
strcpy(NotationList.szEvent,szEvent);
assert((*m_NotHeader)[i]);
lvi.mask = LVIF_PARAM;
lvi.lParam = (LPARAM)(*m_NotHeader)[i];
ListView_SetItem(hLVWnd, &lvi);
ListView_SetTextColor(hLVWnd,NewColor);
}
NotationInfo->Add(NotationList);
}
|
|
|
|
|
Try to change to :
...
if (listItemIndex != LV_ERR) {
ListView_SetItemText(hLVWnd, nItemCount, 1, szTime);
strcpy(NotationList.szDateTime,szTime);
ListView_SetItemText(hLVWnd, nItemCount, 2, szEvent);
strcpy(NotationList.szEvent,szEvent);
NotationInfo->Add(NotationList);
lvi.mask = LVIF_PARAM;
lvi.lParam = (LPARAM) &NotationInfo->GetTail();
ListView_SetItem(hLVWnd, &lvi);
ListView_SetTextColor(hLVWnd, NewColor);
}
...
virtual void BeHappy() = 0;
|
|
|
|
|
now i m getting this error
Error 19 error C2039: 'GetTail' : is not a member of 'ArrayVector<Item>'
|
|
|
|
|
Try it :
...
if (listItemIndex != LV_ERR) {
...
lvi.mask = LVIF_PARAM;
lvi.lParam = (LPARAM) &NotationInfo[iInserted++];
...
}
...
virtual void BeHappy() = 0;
|
|
|
|
|
Yup.....
Now my code is like this
on WM_NOTIFY
case LVN_COLUMNCLICK:
{
int iCol = ((LPNMLISTVIEW) lParam)->iSubItem;
if (0 <= iCol && iCol < 3)
{
g_arOrders[iCol] = !g_arOrders[iCol];
ListView_SortItems((GetDlgItem(hDlg,LV_NOTATIONS)), ListViewCompareProc, iCol);
}
and my ListViewCompareProc method is
int CALLBACK SelectNotationsDlg::ListViewCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
LPLVITEMDATA lplvid1 = (LPLVITEMDATA) lParam1;
LPLVITEMDATA lplvid2 = (LPLVITEMDATA) lParam2;
int rc = 0;
int second_sort = FALSE;
char epoch1[100];
char epoch2[100];
if (lParamSort & second_sort)
{
lParamSort &= ~second_sort;
second_sort = TRUE;
}
switch (lParamSort)
{
case 0:
{
itoa((*NotationInfo)[lplvid1->ListNumber].nEpoch,epoch1,10);
itoa((*NotationInfo)[lplvid2->ListNumber].nEpoch,epoch2,10);
rc = Left_Greater_Than_Right(epoch1,epoch2,
20, TRUE);
break;
}
case 1:
{
rc = Left_Greater_Than_Right((*NotationInfo)[lplvid1->ListNumber].szDateTime, (*NotationInfo)[lplvid2->ListNumber].szDateTime,
max(lstrlen((*NotationInfo)[lplvid1->ListNumber].szDateTime), lstrlen((*NotationInfo)[lplvid2->ListNumber].szDateTime)),
FALSE);
break;
}
case 2:
{
rc = Left_Greater_Than_Right((*NotationInfo)[lplvid1->ListNumber].szEvent ,
(*NotationInfo)[lplvid2->ListNumber].szEvent, 6, FALSE);
break;
}
}
if ((!rc) && (Sort1 != Sort2) && (!second_sort))
{
rc = ListViewCompareProc(lParam1, lParam2, (Sort2 | second_sort));
}
return (rc * g_arOrders[lParamSort]);
}
still not able to get sorted
still missing something?
|
|
|
|
|
Please try it firstly :
int CALLBACK ListViewCompareProc(LPARAM lParam1,
LPARAM lParam2,
LPARAM lParamSort)
{
int iResult = 0;
int iClickedCol = int(lParamSort);
if (0 <= iClickedCol && iClickedCol < 3) {
NOTATIONINFO* nNot1=(NOTATIONINFO*) lParam1;
NOTATIONINFO* nNot2=(NOTATIONINFO*) lParam2;
iResult = g_arOrders[iClickedCol] ?
_tcscmp(nNot1->szEvent, nNot2->szEvent) :
_tcscmp(nNot2->szEvent, nNot1->szEvent);
}
return iResult;
}
virtual void BeHappy() = 0;
|
|
|
|
|
its sorting my List View
based on the First Coloum that is epoch
epoch is of numbers
but is it possible to sort based on each column repective on click on them
|
|
|
|
|
Stop
Is'nt it sorted by szEvent now ?
virtual void BeHappy() = 0;
|
|
|
|
|
No...
its getting sorted by the Epoch ie is the number
|
|
|
|
|
Please make a test :
- modify your insertion:
...
lvi.pszText = _T("0");
listItemIndex = ListView_InsertItem(hLVWnd, &lvi);
... - try to sort
- post the results please
virtual void BeHappy() = 0;
|
|
|
|
|
still not sorting based on event
now its rearranging the list ... but not in alfabetical order
|
|
|
|
|
List is like this
--------------------------------------------
Epoch | Time | Event
--------------------------------------------
1 01:12:00 started
2 01:13:00 arousal-1
3 01:14:00 arousal-2
4 01:15:00 stopped
after sorting by clicking Event coloumn its diplaying like this
--------------------------------------------
Epoch | Time | Event
--------------------------------------------
4 01:15:00 stopped
3 01:14:00 arousal-2
2 01:13:00 arousal-1
1 01:12:00 started
|
|
|
|
|
Please make a test :
int CALLBACK ListViewCompareProc(LPARAM lParam1,
LPARAM lParam2,
LPARAM lParamSort)
{
int iResult = 0;
int iClickedCol = int(lParamSort);
if (0 <= iClickedCol && iClickedCol < 3) {
NOTATIONINFO* nNot1=(NOTATIONINFO*) lParam1;
NOTATIONINFO* nNot2=(NOTATIONINFO*) lParam2;
MessageBox(NULL,
nNot1->szEvent,
nNot2->szEvent,
MB_OK);
iResult = g_arOrders[iClickedCol] ?
_tcscmp(nNot1->szEvent, nNot2->szEvent) :
_tcscmp(nNot2->szEvent, nNot1->szEvent);
}
return iResult;
}
virtual void BeHappy() = 0;
|
|
|
|
|
Message box is showing some junk values
|
|
|
|