[BACK]Return to GPWindow.cpp CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gnuplot / beos

Annotation of OpenXM_contrib/gnuplot/beos/GPWindow.cpp, Revision 1.1

1.1     ! ohara       1: /*[
        !             2:  * Copyright 1986 - 1993, 1998   Thomas Williams, Colin Kelley
        !             3:  *
        !             4:  * Permission to use, copy, and distribute this software and its
        !             5:  * documentation for any purpose with or without fee is hereby granted,
        !             6:  * provided that the above copyright notice appear in all copies and
        !             7:  * that both that copyright notice and this permission notice appear
        !             8:  * in supporting documentation.
        !             9:  *
        !            10:  * Permission to modify the software is granted, but not the right to
        !            11:  * distribute the complete modified source code.  Modifications are to
        !            12:  * be distributed as patches to the released version.  Permission to
        !            13:  * distribute binaries produced by compiling modified sources is granted,
        !            14:  * provided you
        !            15:  *   1. distribute the corresponding source modifications from the
        !            16:  *    released version in the form of a patch file along with the binaries,
        !            17:  *   2. add special version identification to distinguish your version
        !            18:  *    in addition to the base release version number,
        !            19:  *   3. provide your name and address as the primary contact for the
        !            20:  *    support of your modified version, and
        !            21:  *   4. retain our contact information in regard to use of the base
        !            22:  *    software.
        !            23:  * Permission to distribute the released version of the source code along
        !            24:  * with corresponding source modifications in the form of a patch file is
        !            25:  * granted with same provisions 2 through 4 for binary distributions.
        !            26:  *
        !            27:  * This software is provided "as is" without express or implied warranty
        !            28:  * to the extent permitted by applicable law.
        !            29: ]*/
        !            30:
        !            31: #include <Application.h>
        !            32: #include <Messenger.h>
        !            33: #include <Message.h>
        !            34: #include <Alert.h>
        !            35: #include <Roster.h>
        !            36: #include <Window.h>
        !            37: #include <View.h>
        !            38: #include <MenuBar.h>
        !            39: #include <Menu.h>
        !            40: #include <MenuField.h>
        !            41: #include <Entry.h>
        !            42: #include <Path.h>
        !            43: #include <Box.h>
        !            44: #include <MenuItem.h>
        !            45: #include <TextView.h>
        !            46: #include <FilePanel.h>
        !            47: #include <ScrollView.h>
        !            48: #include <OutlineListView.h>
        !            49: #include <string.h>
        !            50: #include <stdio.h>
        !            51: #include <stdlib.h>
        !            52:
        !            53: #include "constants.h"
        !            54: #include "GPApp.h"
        !            55: #include "GPBitmap.h"
        !            56: #include "GPView.h"
        !            57: #include "GPWindow.h"
        !            58:
        !            59: // Constructs the window we'll be drawing into.
        !            60: //
        !            61: GPWindow::GPWindow(BRect frame)
        !            62:                        : BWindow(frame, " ", B_TITLED_WINDOW, 0) {
        !            63:        _InitWindow();
        !            64:        Show();
        !            65: }
        !            66:
        !            67:
        !            68: // Create a window from a file.
        !            69: //
        !            70: GPWindow::GPWindow(BRect frame, plot_struct *plot)
        !            71:                        : BWindow(frame, "Untitled ", B_TITLED_WINDOW, 0) {
        !            72:
        !            73:        _InitWindow();
        !            74:
        !            75:        Show();
        !            76: }
        !            77:
        !            78:
        !            79: void GPWindow::_InitWindow(void) {
        !            80:        BRect r, rtool, plotframe;
        !            81:        BMenu *menu;
        !            82:        BMenuItem *item;
        !            83:
        !            84:
        !            85:        // Initialize variables
        !            86:
        !            87:        savemessage = NULL;                     // No saved path yet
        !            88:        r = rtool = plotframe = Bounds();
        !            89: //     rtool = Bounds();
        !            90: //     plotframe = Bounds();
        !            91:
        !            92:        // Add the menu bar
        !            93:        menubar = new BMenuBar(r, "menu_bar");
        !            94:
        !            95:        // Add File menu to menu bar
        !            96:        menu = new BMenu("File");
        !            97:        menu->AddItem(new BMenuItem("New", new BMessage(MENU_FILE_NEW), 'N'));
        !            98:
        !            99:        menu->AddItem(item=new BMenuItem("Open" B_UTF8_ELLIPSIS, new BMessage(MENU_FILE_OPEN), 'O'));
        !           100:        item->SetTarget(be_app);
        !           101:        menu->AddItem(new BMenuItem("Close", new BMessage(MENU_FILE_CLOSE), 'W'));
        !           102:        menu->AddSeparatorItem();
        !           103:        menu->AddItem(saveitem=new BMenuItem("Save", new BMessage(MENU_FILE_SAVE), 'S'));
        !           104:        saveitem->SetEnabled(false);
        !           105:        menu->AddItem(new BMenuItem("Save as" B_UTF8_ELLIPSIS, new BMessage(MENU_FILE_SAVEAS)));
        !           106:
        !           107:        menu->AddSeparatorItem();
        !           108:        menu->AddItem(item=new BMenuItem("Page Setup" B_UTF8_ELLIPSIS, new BMessage(MENU_FILE_PAGESETUP)));
        !           109:        item->SetEnabled(false);
        !           110:        menu->AddItem(item=new BMenuItem("Print" B_UTF8_ELLIPSIS, new BMessage(MENU_FILE_PRINT), 'P'));
        !           111:        item->SetEnabled(false);
        !           112:
        !           113:        menu->AddSeparatorItem();
        !           114:        menu->AddItem(new BMenuItem("Quit", new BMessage(MENU_FILE_QUIT), 'Q'));
        !           115:        menubar->AddItem(menu);
        !           116:
        !           117:        // Attach the menu bar to the window
        !           118:        AddChild(menubar);
        !           119:
        !           120:        // Add the plot view
        !           121: //     plotframe.left +=rtool.right+5;
        !           122:        plotframe.top = menubar->Bounds().bottom+2;
        !           123: //     plotframe.right -= B_V_SCROLL_BAR_WIDTH;
        !           124: //     plotframe.bottom -= B_H_SCROLL_BAR_HEIGHT;
        !           125:
        !           126:        BRect plotrect = plotframe;
        !           127:        plotrect.OffsetTo(B_ORIGIN);
        !           128:        r.InsetBy(3.0,3.0);
        !           129:
        !           130:        plotview = new GPView(plotframe, B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_PULSE_NEEDED, NULL);
        !           131: //     plotview = new BView(plotframe, "test", B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_PULSE_NEEDED);
        !           132:        AddChild(plotview);
        !           133:        //help menu
        !           134:        menu = new BMenu("Help");
        !           135:        menu->AddItem(new BMenuItem("Help",new BMessage(MENU_HELP_REQUESTED)));
        !           136:        menu->AddItem(new BMenuItem("About...",new BMessage(MENU_HELP_ABOUT)));
        !           137:
        !           138:        menubar->AddItem(menu);
        !           139:
        !           140:        // Create the save filepanel for this window
        !           141:
        !           142:        savePanel = new BFilePanel(B_SAVE_PANEL, new BMessenger(this), NULL, B_FILE_NODE, false);
        !           143:
        !           144:        // Tell the application that there's one more window
        !           145:        // and get the number for this untitled window.
        !           146:        Register(true);
        !           147:        Minimize(false);                // So Show() doesn't really make it visible
        !           148: }
        !           149:
        !           150:
        !           151: //
        !           152: // GPWindow::FrameResized
        !           153: //
        !           154: // Adjust the size of the BTextView's text rectangle
        !           155: // when the window is resized.
        !           156: //
        !           157: void GPWindow::FrameResized(float width, float height) {
        !           158:        BRect plotrect = plotview->Bounds();
        !           159:
        !           160:        plotrect.right = plotrect.left + (width - 3.0);
        !           161: //     plotview->SetTextRect(plotrect);
        !           162: }
        !           163:
        !           164:
        !           165: //
        !           166: // GPWindow::~GPWindow
        !           167: //
        !           168: // Destruct the window.  This calls Unregister().
        !           169: //
        !           170: GPWindow::~GPWindow() {
        !           171:        Unregister();
        !           172:        if (savemessage) {
        !           173:                delete savemessage;
        !           174:        }
        !           175:        delete savePanel;
        !           176: }
        !           177:
        !           178:
        !           179: //
        !           180: // GPWindow::MessageReceived
        !           181: //
        !           182: // Called when a message is received by our
        !           183: // application.
        !           184: //
        !           185: void GPWindow::MessageReceived(BMessage *message) {
        !           186:
        !           187:        switch(message->what) {
        !           188:
        !           189:                case WINDOW_REGISTRY_ADDED:
        !           190:                        {
        !           191:                                char s[22];
        !           192:                                BRect rect;
        !           193:                                if (message->FindInt32("new_window_number", &window_id) == B_OK) {
        !           194:                                        if (!savemessage) {             // if it's untitled
        !           195:                                                sprintf(s, "File%ld.html", window_id);
        !           196:                                                SetTitle(s);
        !           197:                                        }
        !           198:                                }
        !           199:                                if (message->FindRect("rect", &rect) == B_OK) {
        !           200:                                        MoveTo(rect.LeftTop());
        !           201:                                        ResizeTo(rect.Width(), rect.Height());
        !           202:                                }
        !           203:                                Minimize(false);
        !           204:                        }
        !           205:                        break;
        !           206:
        !           207:                case MENU_FILE_NEW:
        !           208:                        {
        !           209:                                BRect r;
        !           210:                                r = Frame();
        !           211:                                new GPWindow(r);
        !           212:                        }
        !           213:                        break;
        !           214:
        !           215:                case MENU_FILE_CLOSE:
        !           216:                        Quit();
        !           217:                        break;
        !           218:                case MENU_FILE_QUIT:
        !           219:                        be_app->PostMessage(B_QUIT_REQUESTED);
        !           220:                        break;
        !           221:                case MENU_FILE_SAVEAS:
        !           222:                        savePanel->Show();
        !           223:                        break;
        !           224:                case MENU_FILE_SAVE:
        !           225:                        Save(NULL);
        !           226:                        break;
        !           227:                case B_SAVE_REQUESTED:
        !           228:                        Save(message);
        !           229:                        break;
        !           230:
        !           231:                case MENU_HELP_REQUESTED:{
        !           232:                int arg_c;
        !           233:                char **_arg;
        !           234:                arg_c=1;
        !           235:                _arg = (char **)malloc(sizeof(char *) * (arg_c+ 1));
        !           236:                _arg[0]="/boot/home/peojects/WebEditor/help.html";
        !           237:                _arg[1]=NULL;
        !           238:                be_roster->Launch("application/x-vnd.Be-NPOS",arg_c,_arg,NULL);
        !           239:                free(_arg);
        !           240:                }
        !           241:                break;
        !           242:
        !           243:                case MENU_HELP_ABOUT:{
        !           244:                        BAlert          *alert;
        !           245:                        alert= new BAlert("About ", "WebEditor for BeOS™\n©François Jouen 1999.\ne-mail:jouen@epeire.univ-rouen.fr", "OK");
        !           246:                        alert->Go();
        !           247:
        !           248:                }
        !           249:                break;
        !           250:
        !           251: //             case B_MOUSE_UP:
        !           252: //                     printf("gor something\n");
        !           253: //             break;
        !           254:
        !           255:                case bmsgNewCmd:
        !           256:                case bmsgClrCmd:
        !           257:                case bmsgBitmapDirty:
        !           258:                case bmsgBitmapResize:
        !           259: //                     printf("gor something\n");
        !           260:                        plotview->MessageReceived(message);
        !           261:                break;
        !           262:
        !           263:                default:
        !           264:                        BWindow::MessageReceived(message);
        !           265:                        break;
        !           266:        }
        !           267: }
        !           268:
        !           269:
        !           270: //
        !           271: // GPWindow::Register
        !           272: //
        !           273: // Since MessageWorld can have multiple windows and
        !           274: // we need to know when there aren't any left so the
        !           275: // application can be shut down, this function is used
        !           276: // to tell the application that a new window has been
        !           277: // opened.
        !           278: //
        !           279: // If the need_id argument is true, we'll specify true
        !           280: // for the "need_id" field in the message we send; this
        !           281: // will cause the application to send back a
        !           282: // WINDOW_REGISTRY_ADDED message containing the window's
        !           283: // unique ID number.  If this argument is false, we won't
        !           284: // request an ID.
        !           285: //
        !           286: void GPWindow::Register(bool need_id) {
        !           287:        BMessenger messenger(APP_SIGNATURE);
        !           288:        BMessage message(WINDOW_REGISTRY_ADD);
        !           289:
        !           290:        message.AddBool("need_id", need_id);
        !           291:        messenger.SendMessage(&message, this);
        !           292: }
        !           293:
        !           294:
        !           295: //
        !           296: // GPWindow::Unregister
        !           297: //
        !           298: // Unregisters a window.  This tells the application that
        !           299: // one fewer windows are open.  The application will
        !           300: // automatically quit if the count goes to zero because
        !           301: // of this call.
        !           302: //
        !           303: void GPWindow::Unregister(void) {
        !           304:        BMessenger messenger(APP_SIGNATURE);
        !           305:
        !           306:        messenger.SendMessage(new BMessage(WINDOW_REGISTRY_SUB));
        !           307: }
        !           308:
        !           309:
        !           310: //
        !           311: // GPWindow::QuitRequested
        !           312: //
        !           313: // Here we just give permission to close the window.
        !           314: //
        !           315: bool GPWindow::QuitRequested() {
        !           316:        return true;
        !           317: }
        !           318:
        !           319:
        !           320: //
        !           321: // GPWindow::Save
        !           322: //
        !           323: // Save the contents of the window.  The message specifies
        !           324: // where to save it (see BFilePanel in the Storage Kit chapter
        !           325: // of the Be Book).
        !           326: //
        !           327: status_t GPWindow::Save(BMessage *message) {
        !           328:        entry_ref ref;          // For the directory to save into
        !           329:        status_t err = B_OK;            // For the return code
        !           330:
        !           331:        return err;
        !           332: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>