2 // This file is part of the aMule Project.
4 // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org )
5 // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net )
7 // Any parts of this program derived from the xMule, lMule or eMule project,
8 // or contributed by third-party developers are copyrighted by their
11 // This program is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation; either version 2 of the License, or
14 // (at your option) any later version.
16 // This program is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU General Public License for more details.
21 // You should have received a copy of the GNU General Public License
22 // along with this program; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26 #include "CommentDialogLst.h" // Interface declarations
27 #include "muuli_wdr.h" // Needed for commentLstDlg
28 #include "PartFile.h" // Needed for CPartFile
29 #include <common/Format.h> // Needed for CFormat
30 #include "MuleListCtrl.h" // Needed for CMuleListCtrl
31 #include "Preferences.h"
32 #include "amule.h" // Needed for theApp
36 BEGIN_EVENT_TABLE(CCommentDialogLst
,wxDialog
)
37 EVT_BUTTON(IDCOK
,CCommentDialogLst::OnBnClickedApply
)
38 EVT_BUTTON(IDCREF
,CCommentDialogLst::OnBnClickedRefresh
)
45 CCommentDialogLst::CCommentDialogLst(wxWindow
*parent
, CPartFile
* file
)
47 wxDialog(parent
, -1, wxString(_("File Comments")),
48 wxDefaultPosition
, wxDefaultSize
, wxDEFAULT_DIALOG_STYLE
| wxRESIZE_BORDER
),
51 wxSizer
* content
= commentLstDlg(this, true);
52 content
->Show(this, true);
54 m_list
= CastChild(IDC_LST
, CMuleListCtrl
);
55 m_list
->InsertColumn(0, _("Username"), wxLIST_FORMAT_LEFT
, 130);
56 m_list
->InsertColumn(1, _("File Name"), wxLIST_FORMAT_LEFT
, 130);
57 m_list
->InsertColumn(2, _("Rating"), wxLIST_FORMAT_LEFT
, 80);
58 m_list
->InsertColumn(3, _("Comment"), wxLIST_FORMAT_LEFT
, 340);
59 m_list
->SetSortFunc(SortProc
);
65 CCommentDialogLst::~CCommentDialogLst()
71 void CCommentDialogLst::OnBnClickedApply(wxCommandEvent
& WXUNUSED(evt
))
77 void CCommentDialogLst::OnBnClickedRefresh(wxCommandEvent
& WXUNUSED(evt
))
83 void CCommentDialogLst::UpdateList()
89 m_file
->GetRatingAndComments(list
);
90 for (FileRatingList::const_iterator it
= list
.begin(); it
!= list
.end(); ++it
) {
91 if (!thePrefs::IsCommentFiltered(it
->Comment
)) {
92 m_list
->InsertItem(count
, it
->UserName
);
93 m_list
->SetItem(count
, 1, it
->FileName
);
94 m_list
->SetItem(count
, 2, (it
->Rating
!= -1) ? GetRateString(it
->Rating
) : wxString(wxT("on")));
95 m_list
->SetItem(count
, 3, it
->Comment
);
96 m_list
->SetItemPtrData(count
, reinterpret_cast<wxUIntPtr
>(new SFileRating(*it
)));
103 info
= _("No comments");
105 info
= CFormat(wxPLURAL("%u comment", "%u comments", count
)) % count
;
108 FindWindow(IDC_CMSTATUS
)->SetLabel(info
);
109 FindWindow(IDC_CMSTATUS
)->GetParent()->Layout();
111 m_file
->UpdateFileRatingCommentAvail();
115 void CCommentDialogLst::ClearList()
117 size_t count
= m_list
->GetItemCount();
118 for (size_t i
= 0; i
< count
; ++i
) {
119 delete reinterpret_cast<SFileRating
*>(m_list
->GetItemData(i
));
122 m_list
->DeleteAllItems();
126 int CCommentDialogLst::SortProc(wxUIntPtr item1
, wxUIntPtr item2
, long sortData
)
128 SFileRating
* file1
= reinterpret_cast<SFileRating
*>(item1
);
129 SFileRating
* file2
= reinterpret_cast<SFileRating
*>(item2
);
131 int mod
= (sortData
& CMuleListCtrl::SORT_DES
) ? -1 : 1;
133 switch (sortData
& CMuleListCtrl::COLUMN_MASK
) {
134 case 0: return mod
* file1
->UserName
.Cmp(file2
->UserName
);
135 case 1: return mod
* file1
->FileName
.Cmp(file2
->FileName
);
136 case 2: return mod
* (file1
->Rating
- file2
->Rating
);
137 case 3: return mod
* file1
->Comment
.Cmp(file2
->Comment
);
142 // File_checked_for_headers