/** * @brief Write logfile */ bool CConfigLog::DoFile(bool writing, String &sError) { CVersionInfo version; String text; m_writing = writing; if (writing) { String sFileName = paths_ConcatPath(env_GetMyDocuments(NULL), WinMergeDocumentsFolder); paths_CreateIfNeeded(sFileName.c_str()); m_sFileName = paths_ConcatPath(sFileName, _T("WinMerge.txt")); if (!m_pfile->OpenCreateUtf8(m_sFileName.c_str())) { const UniFile::UniError &err = m_pfile->GetLastUniError(); sError = err.GetError(); return false; } m_pfile->SetBom(true); m_pfile->WriteBom(); } // Begin log FileWriteString(_T("WinMerge configuration log\r\n")); FileWriteString(_T("--------------------------\r\n")); FileWriteString(_T("Saved to: ")); FileWriteString(m_sFileName.c_str()); FileWriteString(_T("\r\n* Please add this information (or attach this file)\r\n")); FileWriteString(_T("* when reporting bugs.\r\n")); FileWriteString(_T("Module names prefixed with tilda (~) are currently loaded in WinMerge process.\r\n")); // Platform stuff FileWriteString(_T("\r\n\r\nVersion information:\r\n")); FileWriteString(_T(" WinMerge.exe: ")); FileWriteString(version.GetFixedProductVersion().c_str()); String privBuild = version.GetPrivateBuild(); if (!privBuild.empty()) { FileWriteString(_T(" - Private build: ")); FileWriteString(privBuild.c_str()); } text = GetBuildFlags(); FileWriteString(_T("\r\n Build config: ")); FileWriteString(text.c_str()); LPCTSTR szCmdLine = ::GetCommandLine(); ASSERT(szCmdLine != NULL); // Skip the quoted executable file name. if (szCmdLine != NULL) { szCmdLine = _tcschr(szCmdLine, '"'); if (szCmdLine != NULL) { szCmdLine += 1; // skip the opening quote. szCmdLine = _tcschr(szCmdLine, '"'); if (szCmdLine != NULL) { szCmdLine += 1; // skip the closing quote. } } } // The command line include a space after the executable file name, // which mean that empty command line will have length of one. if (lstrlen(szCmdLine) < 2) { szCmdLine = _T(" none"); } FileWriteString(_T("\r\n Command Line: ")); FileWriteString(szCmdLine); FileWriteString(_T("\r\n Windows: ")); text = GetWindowsVer(); FileWriteString(text.c_str()); FileWriteString(_T("\r\n")); WriteVersionOf1(1, _T("COMCTL32.dll")); WriteVersionOf1(1, _T("shlwapi.dll")); WriteVersionOf1(1, _T("MergeLang.dll")); WriteVersionOf1(1, _T("ShellExtension.dll")); WriteVersionOf1(1, _T("ShellExtensionU.dll")); WriteVersionOf1(1, _T("ShellExtensionX64.dll")); // WinMerge settings FileWriteString(_T("\r\nWinMerge configuration:\r\n")); FileWriteString(_T(" Compare settings:\r\n")); WriteItemYesNo(2, _T("Ignore blank lines"), &m_diffOptions.bIgnoreBlankLines); WriteItemYesNo(2, _T("Ignore case"), &m_diffOptions.bIgnoreCase); WriteItemYesNo(2, _T("Ignore carriage return differences"), &m_diffOptions.bIgnoreEol); WriteItemWhitespace(2, _T("Whitespace compare"), &m_diffOptions.nIgnoreWhitespace); WriteItemYesNo(2, _T("Detect moved blocks"), &m_miscSettings.bMovedBlocks); WriteItem(2, _T("Compare method"), m_compareSettings.nCompareMethod); WriteItemYesNo(2, _T("Stop after first diff"), &m_compareSettings.bStopAfterFirst); FileWriteString(_T("\r\n Other settings:\r\n")); WriteItemYesNo(2, _T("Automatic rescan"), &m_miscSettings.bAutomaticRescan); WriteItemYesNoInverted(2, _T("Simple EOL"), &m_miscSettings.bAllowMixedEol); WriteItemYesNo(2, _T("Automatic scroll to 1st difference"), &m_miscSettings.bScrollToFirst); WriteItemYesNo(2, _T("Backup original file"), &m_miscSettings.bBackup); FileWriteString(_T("\r\n Folder compare:\r\n")); WriteItemYesNo(2, _T("Identical files"), &m_viewSettings.bShowIdent); WriteItemYesNo(2, _T("Different files"), &m_viewSettings.bShowDiff); WriteItemYesNo(2, _T("Left Unique files"), &m_viewSettings.bShowUniqueLeft); WriteItemYesNo(2, _T("Right Unique files"), &m_viewSettings.bShowUniqueRight); WriteItemYesNo(2, _T("Binary files"), &m_viewSettings.bShowBinaries); WriteItemYesNo(2, _T("Skipped files"), &m_viewSettings.bShowSkipped); WriteItemYesNo(2, _T("Tree-mode enabled"), &m_viewSettings.bTreeView); FileWriteString(_T("\r\n File compare:\r\n")); WriteItemYesNo(2, _T("Preserve filetimes"), &m_miscSettings.bPreserveFiletimes); WriteItemYesNo(2, _T("Match similar lines"), &m_miscSettings.bMatchSimilarLines); FileWriteString(_T("\r\n Editor settings:\r\n")); WriteItemYesNo(2, _T("View Whitespace"), &m_miscSettings.bViewWhitespace); WriteItemYesNo(2, _T("Merge Mode enabled"), &m_miscSettings.bMergeMode); WriteItemYesNo(2, _T("Show linenumbers"), &m_miscSettings.bShowLinenumbers); WriteItemYesNo(2, _T("Wrap lines"), &m_miscSettings.bWrapLines); WriteItemYesNo(2, _T("Syntax Highlight"), &m_miscSettings.bSyntaxHighlight); WriteItem(2, _T("Tab size"), m_miscSettings.nTabSize); WriteItemYesNoInverted(2, _T("Insert tabs"), &m_miscSettings.nInsertTabs); // Font settings FileWriteString(_T("\r\n Font:\r\n")); FileWriteString(Fmt(_T(" Font facename: %s\r\n"), m_fontSettings.sFacename.c_str())); FileWriteString(Fmt(_T(" Font charset: %d (%s)\r\n"), m_fontSettings.nCharset, FontCharsetName(m_fontSettings.nCharset).c_str())); // System settings FileWriteString(_T("\r\nSystem settings:\r\n")); FileWriteString(_T(" codepage settings:\r\n")); WriteItem(2, _T("ANSI codepage"), GetACP()); WriteItem(2, _T("OEM codepage"), GetOEMCP()); WriteLocaleSettings(GetThreadLocale(), _T("Locale (Thread)")); WriteLocaleSettings(LOCALE_USER_DEFAULT, _T("Locale (User)")); WriteLocaleSettings(LOCALE_SYSTEM_DEFAULT, _T("Locale (System)")); // Codepage settings WriteItemYesNo(1, _T("Detect codepage automatically for RC and HTML files"), &m_cpSettings.bDetectCodepage); WriteItem(1, _T("unicoder codepage"), getDefaultCodepage()); // Plugins FileWriteString(_T("\r\nPlugins:\r\n")); WriteItemYesNo(1, _T("Plugins enabled"), &m_miscSettings.bPluginsEnabled); FileWriteString(_T(" Unpackers: ")); WritePluginsInLogFile(L"FILE_PACK_UNPACK"); WritePluginsInLogFile(L"BUFFER_PACK_UNPACK"); FileWriteString(_T("\r\n Prediffers: ")); WritePluginsInLogFile(L"FILE_PREDIFF"); WritePluginsInLogFile(L"BUFFER_PREDIFF"); FileWriteString(_T("\r\n Editor scripts: ")); WritePluginsInLogFile(L"EDITOR_SCRIPT"); if (IsWindowsScriptThere() == FALSE) FileWriteString(_T("\r\n .sct scripts disabled (Windows Script Host not found)\r\n")); FileWriteString(_T("\r\n\r\n")); WriteArchiveSupport(); CloseFile(); return true; }
void PeepsWindow::MessageReceived(BMessage *msg) { switch(msg->what) { case B_ABOUT_REQUESTED: { be_app->PostMessage(msg); break; } case M_RUN_TOOL: { BString sig; if(msg->FindString("signature",&sig)==B_OK) { if(strcmp(sig.String(),"application/x-vnd.wgp-PeopleMover")==0) { be_roster->Launch(sig.String()); break; } // Get the filename for the currently-selected person int32 selection=fPeopleList->CurrentSelection(); if(selection<0) break; PeepsListItem *peepsitem=(PeepsListItem*)fPeopleList->ItemAt(selection); if(!peepsitem || peepsitem->IsGroup()) break; PersonItem *personitem=(PersonItem*)peepsitem; PersonData *persondata=personitem->GetData(); if(!persondata) break; entry_ref ref=persondata->FileRef(); BPath path(&ref); char *launchv[1]; launchv[0]=new char[255]; sprintf(launchv[0],"%s",path.Path()); be_roster->Launch(sig.String(),1,launchv,NULL); delete [] launchv[0]; } break; } case M_SHOW_ACTIONS: { uint32 buttons; BPoint pt; fPeopleList->GetMouse(&pt,&buttons,false); pt.x=(pt.x>5)?pt.x-5:0; pt.y=(pt.y>5)?pt.y-5:0; fPeopleList->ShowContextMenu(fPeopleList->ConvertToScreen(pt)); break; } case M_BITMAP_REMOVED: case M_PHOTO_MODIFIED: { fPeopleList->SaveImageData(); break; } case B_REFS_RECEIVED: case B_SIMPLE_DATA: { entry_ref ref; if(msg->FindRef("refs",0,&ref)==B_OK) { if(!IsPerson(ref)) { // Might be an image dropped on the photo view. find out which child is the // target BPoint pt; if(msg->FindPoint("_drop_offset",&pt)!=B_OK) break; BView *target=FindView(pt); if(!target || strcmp(target->Name(),"photoview")!=0) break; // This will set the image, if possible target->MessageReceived(msg); // Save the image data to a real file and attach the Person attributes // to it fPeopleList->SaveImageData(); } // Offer to move/copy file if not in People directory BDirectory dir,peopledir("/boot/home/people"); BEntry entry(&ref); entry.GetParent(&dir); if(dir!=peopledir) { BString refname(ref.name); BString errstr=TRANSLATE("%s is not currently stored in the People folder. Mr. Peeps! will not" " see it on startup unless it is stored there. Would you like to move it" " there?"); char errmsg[errstr.CountChars() - 2 + refname.CountChars() + 1]; sprintf(errmsg,errstr.String(),refname.String()); BAlert *alert=new BAlert("Mr. Peeps!",errmsg,TRANSLATE("Move"),TRANSLATE("Don't Move")); if(alert->Go()==0) { entry.MoveTo(&peopledir); entry.GetRef(&ref); } } if(!SelectPerson(ref)) AddPerson(ref,true); } break; } case M_PREV_ITEM: { if(fPeopleList->CountItems()==0) break; int32 selection=fPeopleList->CurrentSelection(); if(!fPeopleList->IsFocus()) { fPeopleList->MakeFocus(true); PeepsListItem *pitem=(PeepsListItem*)fPeopleList->ItemAt(selection); if(!pitem->IsGroup()) { fPeopleList->SyncData((PersonItem*)pitem); // fPeopleList->SaveData(); } fPeopleList->SaveData(); } if(selection>=0) { if(selection>0) fPeopleList->Select(selection-1); } else { fPeopleList->Select(0L); } break; } case M_NEXT_ITEM: { if(fPeopleList->CountItems()==0) break; int32 selection=fPeopleList->CurrentSelection(); if(!fPeopleList->IsFocus()) { fPeopleList->MakeFocus(true); PeepsListItem *pitem=(PeepsListItem*)fPeopleList->ItemAt(selection); if(!pitem->IsGroup()) { fPeopleList->SyncData((PersonItem*)pitem); // fPeopleList->SaveData(); } fPeopleList->SaveData(); } if(selection==fPeopleList->CountItems()-1 || selection<0) fPeopleList->Select(fPeopleList->CountItems()-1); else fPeopleList->Select(selection+1); break; } case M_MOD_DATA: case M_SAVE: { fPeopleList->SyncData(NULL); fPeopleList->SaveData(); break; } case M_ADD_PERSON: { entry_ref ref; status_t stat=CreatePerson(&ref); if(stat==B_FILE_EXISTS) { for(int32 i=0;i<gPeopleData.CountItems(); i++) { PersonData *pdata=(PersonData*)gPeopleData.ItemAt(i); if(BString(TRANSLATE("New Person")).ICompare(pdata->Name())==0) { int32 selection=fPeopleList->CurrentSelection(); if(selection>=0) { PeepsListItem *peepsitem=(PeepsListItem*)fPeopleList->ItemAt(selection); if(peepsitem && !peepsitem->IsGroup()) fPeopleList->Collapse(fPeopleList->Superitem(peepsitem)); } PersonItem *pitem=pdata->InstanceAt(0); GroupItem *gitem=(GroupItem*)fPeopleList->Superitem(pitem); if(!gitem->IsExpanded()) fPeopleList->Expand(gitem); fPeopleList->Select(fPeopleList->IndexOf(pitem)); fPeopleList->ScrollToSelection(); break; } } } else { // Add the current group to the New Person's file so that we end up staying // in the current group. if(stat==B_OK) { int32 selection=fPeopleList->CurrentSelection(); BString groupstr(TRANSLATE("Ungrouped")); if(selection>=0) { PeepsListItem *currentitem=(PeepsListItem*)fPeopleList->ItemAt(selection); if(currentitem->IsGroup()) groupstr=currentitem->Name(); else groupstr=((PersonItem*)currentitem)->Group(); } PersonData *pdata=new PersonData(ref); pdata->SetGroup(groupstr.String()); pdata->SetName(TRANSLATE("New Person")); pdata->SaveToFile(); delete pdata; AddPerson(ref,true); SortList(); SelectPerson(TRANSLATE("New Person")); dataview->SetFirstFieldFocus(); } } break; } case M_DELETE_PERSON: { int32 selection=fPeopleList->CurrentSelection(); if(selection<0) break; PeepsListItem *item=(PeepsListItem*)fPeopleList->ItemAt(selection); if(item->IsGroup()) DeleteGroup((GroupItem*)item); else { DeletePerson(((PersonItem*)item)->GetData()); } break; } case M_DISABLE_DELETE: { BMenuItem *item=fPeopleMenu->FindItem(TRANSLATE("Move To Trash")); if(item) item->SetEnabled(false); break; } case M_ENABLE_DELETE: { BMenuItem *item=fPeopleMenu->FindItem(TRANSLATE("Move To Trash")); if(item) item->SetEnabled(true); break; } case M_SET_LANGUAGE: { // Restart MrPeeps! gRestartApp=true; int32 language; if(msg->FindInt32("index",&language)!=B_OK) break; BMenuItem *item = fLanguageMenu->ItemAt(language); if(!item) break; fLocale = item->Label(); WriteLocaleSettings(); be_app->PostMessage(B_QUIT_REQUESTED); break; } case M_HANDLE_NO_SELECTION: { // This is the initial case. No selection means quite a few different // menu items are disabled. fTabMenu->SetEnabled(false); fEditMenu->SetEnabled(false); if(fToolPeopleAtAGlance) fToolPeopleAtAGlance->SetEnabled(false); if(fToolVCardExport) fToolVCardExport->SetEnabled(false); UpdateActions(true); break; } case M_HANDLE_GROUP_SELECTION: { // This is the initial case. No selection means quite a few different // menu items are disabled. fTabMenu->SetEnabled(false); fEditMenu->SetEnabled(true); if(fToolPeopleAtAGlance) fToolPeopleAtAGlance->SetEnabled(false); if(fToolVCardExport) fToolVCardExport->SetEnabled(false); UpdateActions(true); break; } case M_HANDLE_PERSON_SELECTION: { // This is the initial case. No selection means quite a few different // menu items are disabled. fTabMenu->SetEnabled(true); fEditMenu->SetEnabled(true); if(fToolPeopleAtAGlance) fToolPeopleAtAGlance->SetEnabled(true); if(fToolVCardExport) fToolVCardExport->SetEnabled(true); UpdateActions(false); break; } case M_SEND_PERSONAL_EMAIL: { if(dataview->Email()) { BMessage *emailmsg=new BMessage(M_SEND_EMAIL); emailmsg->AddString("address",dataview->Email()); be_app->PostMessage(emailmsg); } break; } case M_SEND_WORK_EMAIL: { if(dataview->WorkEmail()) { BMessage *emailmsg=new BMessage(M_SEND_EMAIL); emailmsg->AddString("address",dataview->WorkEmail()); be_app->PostMessage(emailmsg); } break; } case M_SEND_ALT_EMAIL: { if(dataview->Email3()) { BMessage *emailmsg=new BMessage(M_SEND_EMAIL); emailmsg->AddString("address",dataview->Email3()); be_app->PostMessage(emailmsg); } break; } case M_BROWSE_WWW_HOME: { if(dataview->URL()) { BMessage *wwwmsg=new BMessage(M_LAUNCH_BROWSER); wwwmsg->AddString("address",dataview->URL()); be_app->PostMessage(wwwmsg); } break; } case M_BROWSE_WWW_WORK: { if(dataview->WorkURL()) { BMessage *wwwmsg=new BMessage(M_LAUNCH_BROWSER); wwwmsg->AddString("address",dataview->WorkURL()); be_app->PostMessage(wwwmsg); } break; } case M_BROWSE_WWW_ALT: { if(dataview->OtherURL()) { BMessage *wwwmsg=new BMessage(M_LAUNCH_BROWSER); wwwmsg->AddString("address",dataview->OtherURL()); be_app->PostMessage(wwwmsg); } break; } case M_TAB_1: { fPeopleList->SyncData(); fPeopleList->SaveData(); dataview->ShowTab(0); if(!fPeopleList->IsFocus()) dataview->SetFirstFieldFocus(); break; } case M_TAB_2: { fPeopleList->SyncData(); fPeopleList->SaveData(); dataview->ShowTab(1); if(!fPeopleList->IsFocus()) dataview->SetFirstFieldFocus(); break; } case M_TAB_3: { fPeopleList->SyncData(); fPeopleList->SaveData(); dataview->ShowTab(2); if(!fPeopleList->IsFocus()) dataview->SetFirstFieldFocus(); break; } case M_TAB_4: { fPeopleList->SyncData(); fPeopleList->SaveData(); dataview->ShowTab(3); if(!fPeopleList->IsFocus()) dataview->SetFirstFieldFocus(); break; } case M_TAB_5: { fPeopleList->SyncData(); fPeopleList->SaveData(); dataview->ShowTab(4); if(!fPeopleList->IsFocus()) dataview->SetFirstFieldFocus(); break; } case M_UNDO: { dataview->UndoField(); break; } case M_CUT: { dataview->CutField(); break; } case M_COPY: { dataview->CopyField(); break; } case M_PASTE: { dataview->PasteField(); break; } case B_NODE_MONITOR: { HandleNodeMonitoring(msg); break; } default: { BWindow::MessageReceived(msg); break; } } }