/**** ファイル名 : MainWindow.cpp ****/
//--------------------------------------------------------------------- void BEditorWindow::SetFileName(BEntry *entry) { if(entry==NULL) { if(editingfile!=NULL) { delete editingfile; editingfile=NULL; } } else { if(editingfile==NULL) editingfile=new BEntry(); *editingfile=*entry; } if(editingfile!=NULL) { char nam[B_FILE_NAME_LENGTH]; editingfile->GetName(nam); SetTitle(nam); } else SetTitle(MAINWINDOW_TITLE); } //---------------------------------------------------------------------
/**** ファイル名 : MainWindow.cpp ****/
//--------------------------------------------------------------------- void BEditorWindow::OpenFile(BEntry *entry) { if(entry->Exists()) { BFile fil; off_t size; try { fil.SetTo(entry,B_READ_ONLY); fil.GetSize(&size); ((BTextView *)FindView("memo"))->SetText(&fil,0,size); SetFileName(entry); } catch(...) { BAlert *altmsg = new BAlert("Error", "File read failed!!","OK", NULL,NULL,B_WIDTH_AS_USUAL, B_WARNING_ALERT); altmsg->Go(); } } } //--------------------------------------------------------------------- void BEditorWindow::SaveFile(BEntry *entry) { BFile fil; off_t wsize; off_t tsize; try { fil.SetTo(entry,B_READ_WRITE | B_CREATE_FILE); tsize=strlen(((BTextView *)FindView("memo"))->Text()); wsize=fil.WriteAt(0,((BTextView *)FindView("memo"))->Text(), tsize); if(tsize==wsize) SetFileName(entry); } catch(...) { BAlert *altmsg = new BAlert("Error", "File write failed!!","OK", NULL,NULL,B_WIDTH_AS_USUAL, B_WARNING_ALERT); altmsg->Go(); } } //---------------------------------------------------------------------
/**** ファイル名 : MainWindow.cpp ****/
//--------------------------------------------------------------------- void BEditorWindow::MessageReceived(BMessage *msg) { switch(msg->what) { case B_UNDO: case B_COPY: case B_CUT: case B_PASTE: case B_SELECT_ALL: ((BMemoView *)FindView("memo"))->MessageReceived(msg); break; case MSG_SAVE: if(editingfile!=NULL) { SaveFile(editingfile); break; } case MSG_SAVEAS: save_filepanel->SetTarget(this); save_filepanel->Show(); break; case B_SAVE_REQUESTED: { entry_ref ref; BString nam; BDirectory dir; BEntry entry; msg->FindRef("directory",&ref); msg->FindString("name",&nam); dir.SetTo(&ref); if(entry.SetTo(&dir,nam.String())==B_OK) { SaveFile(&entry); return; } } break; default: BWindow::MessageReceived(msg); } } //---------------------------------------------------------------------
圧縮ファイル R5 Intel環境で確認 |
BTinyEditor20000414.zip |
ソースファイル | BTinyEditor.h |
BMemoView.cpp | |
BMemoView.h | |
main.cpp | |
MainWindow.cpp | |
MainWindow.h |