Import upstream version 5.3.
[mup] / mup / mupmate / File.H
1 /* Copyright (c) 2006 by Arkkra Enterprises */
2 /* All rights reserved */
3
4 #ifndef _FILE_H_
5 #define _FILE_H_
6
7 #include <FL/Fl.H>
8 #include <FL/Fl_Widget.H>
9 #include <FL/Fl_Double_Window.H>
10 #include <FL/Fl_Box.H>
11 #include <FL/Fl_Input.H>
12 #include <FL/Fl_Text_Editor.H>
13 #include <FL/Fl_File_Browser.H>
14 #include <FL/Fl_Button.H>
15 #include <FL/Fl_Return_Button.H>
16 #include <FL/Fl_Choice.H>
17 #include <FL/filename.H>
18
19 class Main;
20
21
22 // Class used to ask user if they want to save changes.
23 // The FLTK fl_choice doesn't do quite what we want, so we make our own...
24
25 class Save_confirm_dialog : Fl_Double_Window {
26 public:
27 enum Answer { Cancel, No, Yes };
28
29 // This brings up the dialog
30 static Answer confirm_save(const char * text, bool hide_the_No = false);
31
32 private:
33 Save_confirm_dialog(const char * text);
34 ~Save_confirm_dialog(void);
35
36 // Widgets
37 Fl_Box * icon_p;
38 Fl_Box * message_p;
39 Fl_Return_Button * yes_p;
40 Fl_Button * no_p;
41 Fl_Button * cancel_p;
42 };
43
44
45
46 // Class for the items off of "File" on the main menu bar
47
48 class File {
49
50 friend class Run;
51
52 public:
53 File();
54 ~File();
55
56 // Callbacks
57 static void modify_cb(int, int, int, int, const char *, void * data);
58 static void New_cb(Fl_Widget *, void * data);
59 static void NewFromTemplate_cb(Fl_Widget *, void * data);
60 static void Open_cb(Fl_Widget *, void * data);
61 static void Save_cb(Fl_Widget *, void * data);
62 static void SaveAs_cb(Fl_Widget *, void * data);
63 static void Exit_cb(Fl_Widget *, void * data);
64
65 // Load a file into the text editor
66 void load_file(const char * name);
67
68 // Give access to the text editor buffer
69 Fl_Text_Buffer * get_buffer() { return editor_p->buffer(); }
70
71 // Gives real filename, or "Untitled.mup" if there is none
72 const char * effective_filename();
73
74 // This class needs access to Main class and its text editor.
75 // Creator should call these to point to the proper instances
76 void set_editor(Fl_Text_Editor * ed_p);
77 void set_parent(Main * main_p);
78
79 // These show the dialog and return the file name the user enters.
80 const char * open_ask_user(void);
81 const char * save_as_ask_user(void);
82
83 // Ask user if they want to save the currently unsaved changes.
84 Save_confirm_dialog::Answer save_changes_check(const char * extra_text = "",
85 bool hide_the_No = false);
86
87 #ifndef OS_LIKE_WIN32
88 // Make icon for Mup files.
89 static void add_mup_icon(void);
90 #endif
91
92
93 private:
94 // Callbacks
95 void New(void);
96 void Open(void);
97 void NewFromTemplate(void);
98 void Save(bool honor_auto_display = true);
99 void SaveAs(bool honor_auto_display = true);
100 void Exit(void);
101
102 // Write out the current file
103 void save_file(bool honor_auto_display);
104
105 // Put current file name in window label
106 void set_window_label(void);
107
108 // Reset things for starting to edit a different file
109 void begin_new_file(void);
110
111 // The name of file being edited
112 char * filename;
113
114 // If buffer has changed since last being saved
115 bool unsaved_changes;
116
117 // Pointers to other class instances we need
118 Fl_Text_Editor * editor_p;
119 Main * parent_window_p;
120 };
121
122 #endif