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>