[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

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>