- MGR: Enable the manager to be able to deal with any size notice.

clientgui/
        DlgEventLog.cpp
        MainDocument.cpp, .h
        NoticeListCtrl.cpp

svn path=/trunk/boinc/; revision=22053
This commit is contained in:
Rom Walton 2010-07-23 22:57:54 +00:00
parent 6b8a569d6d
commit 7e8ca91dc5
6 changed files with 58 additions and 67 deletions

View File

@ -5576,3 +5576,11 @@ David 23 Jul 2010
sched_send.cpp,h
sched_locality.cpp
sched_types.cpp
Rom 23 July 2010
- MGR: Enable the manager to be able to deal with any size notice.
clientgui/
DlgEventLog.cpp
MainDocument.cpp, .h
NoticeListCtrl.cpp

View File

@ -305,7 +305,6 @@ void CBOINCBaseFrame::OnAlert(CFrameAlertEvent& event) {
void CBOINCBaseFrame::OnClose(wxCloseEvent& event) {
wxLogTrace(wxT("Function Start/End"), wxT("CBOINCBaseFrame::OnClose - Function Begin"));
if (!event.CanVeto() || IsIconized()) {
wxGetApp().FrameClosed();
Destroy();

View File

@ -861,9 +861,10 @@ wxInt32 CDlgEventLog::FormatTime(wxInt32 item, wxString& strBuffer) const {
wxInt32 CDlgEventLog::FormatMessage(wxInt32 item, wxString& strBuffer) const {
MESSAGE* message = wxGetApp().GetDocument()->message(item);
if (message) {
strBuffer = process_client_message(message->body.c_str());
strBuffer = wxString(message->body.c_str(), wxConvUTF8);
wxGetApp().GetDocument()->LocalizeNoticeText(strBuffer);
}
return 0;

View File

@ -1924,6 +1924,37 @@ int CMainDocument::ResetNoticeState() {
}
// parse out the _(...)'s, and translate them
//
bool CMainDocument::LocalizeNoticeText(wxString& strMessage) {
wxString strBuffer = wxEmptyString;
wxString strStart = wxString(wxT("_(\""));
wxString strEnd = wxString(wxT("\")"));
// Replace CRLFs with HTML breaks.
strMessage.Replace(wxT("\r\n"), wxT("<BR>"));
// Replace LFs with HTML breaks.
strMessage.Replace(wxT("\n"), wxT("<BR>"));
// Localize translatable text
while (strMessage.Find(strStart.c_str()) != wxNOT_FOUND) {
strBuffer =
strMessage.SubString(
strMessage.Find(strStart.c_str()) + strStart.Length(),
strMessage.Find(strEnd.c_str()) - (strEnd.Length() - 1)
);
strMessage.Replace(
wxString(strStart + strBuffer + strEnd).c_str(),
wxGetTranslation(strBuffer.c_str())
);
}
return true;
}
// Call this only when message buffer is stable
// Note: This must not call any rpcs.
// This is now called after each get_messages RPC from
@ -2446,38 +2477,3 @@ wxString result_description(RESULT* result) {
return strBuffer;
}
// parse out the _(...)'s, and translate them
//
wxString process_client_message(const char* msg) {
wxString result;
const char* START = "_(\"";
const char* END = "\")";
char buf[1024];
char* p = buf, *q;
strcpy(buf, msg);
q = strchr(p, '\n');
if (q) *q = 0;
while (*p) {
q = strstr(p, START);
if (!q) {
result += wxString(p, wxConvUTF8);
break;
}
if (p != q) {
*q = 0;
result += wxString(p, wxConvUTF8);
}
p = q + strlen(START);
if (!p) break; // paranoia
q = strstr(p, END);
if (!q) { // paranoia
result += wxString(p, wxConvUTF8);
break;
}
*q = 0;
result += wxGetTranslation(wxString(p, wxConvUTF8));
p = q + strlen(END);
}
return result;
}

View File

@ -303,6 +303,7 @@ public:
void UpdateUnreadNoticeState();
int ResetNoticeState();
bool LocalizeNoticeText(wxString& strMessage);
//

View File

@ -60,7 +60,8 @@ wxAccStatus CNoticeListCtrlAccessible::GetName(int childId, wxString* name)
if (pDoc)
{
strBuffer = wxString(process_client_message(pDoc->notice(childId-1)->title), wxConvUTF8);
strBuffer = wxString(pDoc->notice(childId-1)->title, wxConvUTF8);
pDoc->LocalizeNoticeText(strBuffer);
strBuffer = StripHTMLTags(strBuffer);
*name = strBuffer.c_str();
}
@ -172,44 +173,27 @@ wxAccStatus CNoticeListCtrlAccessible::DoDefaultAction(int childId)
return wxACC_NOT_IMPLEMENTED;
}
// WxWidget's HTML renderer gets messed up by \n's. change to <br>
//
static void fix_html(const char* in, char* out) {
while (*in) {
switch (*in) {
case '\n':
strcpy(out, "<br>");
out += 4;
break;
case '\r':
break;
default:
*out++ = *in;
}
in++;
}
*out = 0;
}
// Returns the description for this object or a child.
wxAccStatus CNoticeListCtrlAccessible::GetDescription(int childId, wxString* description)
{
CMainDocument* pDoc = wxGetApp().GetDocument();
static wxString strBuffer;
wxDateTime dtBuffer;
wxString strDescription;
wxString strDescription = wxEmptyString;
wxString strProjectName = wxEmptyString;
wxString strArrivalTime = wxEmptyString;
if (pDoc && (childId != wxACC_SELF)) {
strBuffer = wxEmptyString;
char buf[65000];
fix_html(pDoc->notice(childId-1)->description.c_str(), buf);
strDescription = process_client_message(buf);
strProjectName = wxString(pDoc->notice(childId-1)->project_name, wxConvUTF8);
strDescription = wxString(pDoc->notice(childId-1)->description.c_str(), wxConvUTF8);
pDoc->LocalizeNoticeText(strDescription);
dtBuffer.Set((time_t)pDoc->notice(childId-1)->arrival_time);
strArrivalTime = dtBuffer.Format();
if (strProjectName.IsEmpty()) {
strBuffer.Printf(_("%s; received on %s"), strDescription.c_str(), strArrivalTime.c_str());
} else {
@ -531,7 +515,7 @@ void CNoticeListCtrl::OnLinkClicked( wxHtmlLinkEvent& event )
wxString CNoticeListCtrl::OnGetItem(size_t i) const
{
CMainDocument* pDoc = wxGetApp().GetDocument();
CMainDocument* pDoc = wxGetApp().GetDocument();
wxString strTitle = wxEmptyString;
wxString strDescription = wxEmptyString;
wxString strProjectName = wxEmptyString;
@ -548,10 +532,12 @@ wxString CNoticeListCtrl::OnGetItem(size_t i) const
strProjectName = wxString(np->project_name, wxConvUTF8);
strURL = wxString(np->link, wxConvUTF8);
strTitle = wxString(process_client_message(np->title), wxConvUTF8);
char buf[65000];
fix_html(np->description.c_str(), buf);
strDescription = process_client_message(buf);
strTitle = wxString(np->title, wxConvUTF8);
pDoc->LocalizeNoticeText(strTitle);
strDescription = wxString(np->description.c_str(), wxConvUTF8);
pDoc->LocalizeNoticeText(strDescription);
dtBuffer.Set((time_t)np->arrival_time);
strArrivalTime = dtBuffer.Format();