/**** ファイル名 : MainWindow.h ****/
#ifndef MAINWINDOW #define MAINWINDOW //--------------------------------------------------------------------- #include <Be.h> #include "BMemoView.h" //--------------------------------------------------------------------- #define MAINWINDOW_TITLE "BTinyEditor" #define MAINWINDOW_POSITION_LEFT 100 #define MAINWINDOW_POSITION_TOP 100 #define MAINWINDOW_POSITION_WIDTH 600 #define MAINWINDOW_POSITION_HEIGHT 400 #define MAINWINDOW_WINDOWSTYLE (B_DOCUMENT_WINDOW) //--------------------------------------------------------------------- #define MSG_OPEN 'mopn' #define MSG_SAVE 'msav' #define MSG_SAVEAS 'msva' //--------------------------------------------------------------------- class BEditorView : public BView { public: BMemoView *memo; BEditorView(BRect frame); }; //--------------------------------------------------------------------- class BEditorWindow : public BWindow { private: BFilePanel *save_filepanel; public: BEditorView *mainview; //----------------------------------------------------------------- BEditorWindow(BRect frame,const char *title); ~BEditorWindow(); virtual void MessageReceived(BMessage *msg); void OpenFile(BEntry *entry); //----------------------------------------------------------------- bool QuitRequested() { be_app->PostMessage(B_QUIT_REQUESTED); return true; }; }; //--------------------------------------------------------------------- #endif
/**** ファイル名 : MainWindow.cpp ****/
//--------------------------------------------------------------------- BEditorWindow::BEditorWindow(BRect frame,const char *title) :BWindow(frame,title,MAINWINDOW_WINDOWSTYLE,0) { mainview=new BEditorView(Bounds()); AddChild(mainview); save_filepanel=new BFilePanel(B_SAVE_PANEL); } //--------------------------------------------------------------------- BEditorWindow::~BEditorWindow() { delete save_filepanel; } //--------------------------------------------------------------------- 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: break; case MSG_SAVEAS: save_filepanel->SetTarget(this); save_filepanel->Show(); break; case B_SAVE_REQUESTED: BAlert *altmsg = new BAlert("Message", "B_SAVE_REQUESTED","OK"); altmsg->Go(); break; default: BWindow::MessageReceived(msg); } } //---------------------------------------------------------------------
/**** ファイル名 : MainWindow.cpp ****/
//--------------------------------------------------------------------- void BEditorWindow::SaveFile(BEntry *entry) { BFile fil; off_t wsize; off_t tsize; bool errflg; 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); errflg=(tsize!=wsize); } catch(...) { errflg=true; } if(errflg) { BAlert *altmsg = new BAlert("Error", "File write failed!!","OK", NULL,NULL,B_WIDTH_AS_USUAL, B_WARNING_ALERT); altmsg->Go(); } } //---------------------------------------------------------------------
/**** ファイル名 : 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); } catch(...) { BAlert *altmsg = new BAlert("Error", "File read failed!!","OK", NULL,NULL,B_WIDTH_AS_USUAL, B_WARNING_ALERT); altmsg->Go(); } } } //---------------------------------------------------------------------
/**** ファイル名 : MainWindow.cpp ****/
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;
圧縮ファイル R5 Intel環境で確認 |
BTinyEditor20000406.zip |
ソースファイル | BTinyEditor.h |
BMemoView.cpp | |
BMemoView.h | |
main.cpp | |
MainWindow.cpp | |
MainWindow.h |