+ m_listctrl->SetImageList(imageList, wxIMAGE_LIST_SMALL);
+
+ // and fill it
+ wxString fmt = wxLog::GetTimestamp();
+ if ( !fmt )
+ {
+ // default format
+ fmt = wxDefaultDateTimeFormat;
+ }
+
+ size_t count = m_messages.GetCount();
+ for ( size_t n = 0; n < count; n++ )
+ {
+ int image;
+
+ if ( loadedIcons )
+ {
+ switch ( m_severity[n] )
+ {
+ case wxLOG_Error:
+ image = 0;
+ break;
+
+ case wxLOG_Warning:
+ image = 1;
+ break;
+
+ default:
+ image = 2;
+ }
+ }
+ else // failed to load images
+ {
+ image = -1;
+ }
+
+ m_listctrl->InsertItem(n, m_messages[n], image);
+ m_listctrl->SetItem(n, 1, TimeStamp(fmt, (time_t)m_times[n]));
+ }
+
+ // let the columns size themselves
+ m_listctrl->SetColumnWidth(0, wxLIST_AUTOSIZE);
+ m_listctrl->SetColumnWidth(1, wxLIST_AUTOSIZE);
+
+ // calculate an approximately nice height for the listctrl
+ int height = GetCharHeight()*(count + 4);
+
+ // but check that the dialog won't fall fown from the screen
+ //
+ // we use GetMinHeight() to get the height of the dialog part without the
+ // details and we consider that the "Save" button below and the separator
+ // line (and the margins around it) take about as much, hence double it
+ int heightMax = wxGetDisplaySize().y - GetPosition().y - 2*GetMinHeight();
+
+ // we should leave a margin
+ heightMax *= 9;
+ heightMax /= 10;
+
+ m_listctrl->SetSize(wxDefaultCoord, wxMin(height, heightMax));
+}
+
+void wxLogDialog::OnListSelect(wxListEvent& event)
+{
+ // we can't just disable the control because this looks ugly under Windows
+ // (wrong bg colour, no scrolling...), but we still want to disable
+ // selecting items - it makes no sense here
+ m_listctrl->SetItemState(event.GetIndex(), 0, wxLIST_STATE_SELECTED);