From d7b88a3bcc7e76f38ee5799be7722fd5a10781ef Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Wed, 13 Jan 1999 19:28:54 +0000 Subject: Updated all links so they work between files. Revision 1. git-svn-id: file:///fltk/svn/fltk/trunk@219 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- documentation/editor.html | 686 +++++++++++++++++++++------------------------- 1 file changed, 320 insertions(+), 366 deletions(-) (limited to 'documentation/editor.html') diff --git a/documentation/editor.html b/documentation/editor.html index 12c7edb12..d55616a83 100644 --- a/documentation/editor.html +++ b/documentation/editor.html @@ -1,41 +1,35 @@ - - - -

4 - Designing a Simple Text Editor

- -This chapter takes you through the design of a simple FLTK-based text editor. - + +

4 - Designing a Simple Text Editor

+ This chapter takes you through the design of a simple FLTK-based text +editor.

Determining the Goals of the Text Editor

- -Since this will be the first big project you'll be doing with FLTK, lets define -what we want our text editor to do: - -
    -
  1. Menu_Bar/menus for all functions. -
  2. Edit a single text file. -
  3. Load from a file. -
  4. Save to a file. -
  5. Cut/copy/delete/paste functions. -
  6. Search and replace functions. -
  7. Keep track of when the file has been changed. -
- + Since this will be the first big project you'll be doing with FLTK, +lets define what we want our text editor to do: +
    +
  1. Menu_Bar/menus for all functions.
  2. +
  3. Edit a single text file.
  4. +
  5. Load from a file.
  6. +
  7. Save to a file.
  8. +
  9. Cut/copy/delete/paste functions.
  10. +
  11. Search and replace functions.
  12. +
  13. Keep track of when the file has been changed.
  14. +

Designing the Main Window

- -Now that we've outlined the goals for our editor, we can begin with the design -of our GUI. Obviously the first thing that we need is a window: - -

Variables

- -Our text editor will need some global variables to keep track of things: - - + The window variable is our top-level window described +previously. We'll cover the other variables as we build the +application.

Menu_Bars and Menus

- -The first goal requires us to use a menubar and menus that define -each function the editor needs to perform. The -Fl_Menu_Item structure is used to -define the menus and items in a menubar: - - + We'll define the callback functions later.

Editing the Text

- -To keep things simple our text editor will use the -Fl_Multiline_Input widget to -edit the text: - - + So that we can keep track of changes to the file, we also want to add +a "changed" callback: + + Finally, we want to use a mono-spaced font like FL_COURIER: +

The Replace Dialog

- -We can use the FLTK convenience functions for many of the editor's -dialogs, however the replace dialog needs its own custom window. To -keep things simple we will have a "find" string, a "replace" string, -and "replace all", "replace next", and "cancel" buttons. The strings -are just Fl_Input widgets, the "replace all" and "cancel" -buttons are Fl_Button widgets, and the "replace next " button -is a Fl_Return_Button widget: - -
- - - + We can use the FLTK convenience functions for many of the editor's +dialogs, however the replace dialog needs its own custom window. To +keep things simple we will have a "find" string, a "replace" string, +and "replace all", "replace next", and "cancel" buttons. The strings +are just Fl_Input widgets, the "replace all" and "cancel" +buttons are Fl_Button widgets, and the "replace next " button +is a Fl_Return_Button widget: +
+

Callbacks

- -Now that we've defined the GUI components of our editor, we need to define -our callback functions. - + Now that we've defined the GUI components of our editor, we need to +define our callback functions.

changed_cb()

- -This function will be called whenever the user changes any text in the -input widget: - - + The set_changed() function is one that we will write to set +the changed status on the current file. We're doing it this way +because some of the other callbacks will set the changed status to 0, +and also because we want to show the changed status in the window's +title bar.

copy_cb()

- -This callback function will call -input->copy() to copy the currently selected text to the -clipboard: - -

cut_cb()

- -This callback function will call -input->copy() to copy the currently selected text to the -clipboard and then input->cut() -to delete it: - -

delete_cb()

- -This callback function will call -input->cut() to delete the selected text: - -

find_cb()

- -This callback function asks for a search string using the -fl_input() convenience function and -then calls the find2_cb() function to find the string: - -

find2_cb()

- -This function will find the next occurrence of the search string. If the -search string is blank then we want to pop up the search dialog: - - + If the search string cannot be found we use the +fl_alert() convenience function to display a message to that +effect.

new_cb()

- -This callback function will clear the input widget and current filename. -It also calls the check_save() function to give the user the -opportunity to save the current file first as needed: - -

open_cb()

- -This callback function will ask the user for a filename and then load -the specified file into the input widget and current filename. It also -calls the check_save() function to give the user the -opportunity to save the current file first as needed: - - + We call the load_file() function to actually load the file.

paste_cb()

- -This callback function will send a FL_PASTE message to the input -widget using the Fl::paste() method: - -

quit_cb()

- -The quit callback will first see if the current file has been modified, -and if so give the user a chance to save it. It then hides the main window: - -

replace_cb()

- -The replace callback just shows the replace dialog: - -

replace2_cb()

- -This callback will replace the next occurence of the replacement string. If -nothing has been entered for the replacement string, then the replace dialog -is displayed instead: - -

replall_cb()

- -This callback will replace all occurences of the search string in the file: - -

replcan_cb()

- -This callback just hides the replace dialog: - -

save_cb()

- -This callback saves the current file. If the current filename is blank it -calls the "save as" callback: - - + The save_file() function saves the current file to the +specified filename.

saveas_cb()

- -This callback asks the user for a filename and saves the current file: - - + The save_file() function saves the current file to the +specified filename.

undo_cb()

- -The undo callback just calls the -undo() method: - -

Other Functions

- -Now that we've defined the callback functions, we need our support functions -to make it all work: - + Now that we've defined the callback functions, we need our support +functions to make it all work:

check_save()

- -This function checks to see if the current file needs to be saved. If -so, it asks the user if they want to save it: - -

load_file()

- -This function loads the specified file into the input widget: - - + When loading the file we use the +input->replace() method to "replace" the text at the end +of the buffer. The pos variable keeps track of the end of the +buffer.

save_file()

- -This function saves the current buffer to the specified file: - -

set_changed()

- -This function sets the changed variable and updates the window label -accordingly: - -

Compiling the Editor

- -The complete source for our text editor can be found in the -test/editor.cxx source file. Both the Makefile and Visual C++ -workspace include the necessary rules to build the editor. You can -also compile it using a standard compiler with: - - + As noted in Chapter 1, you may need to +include compiler and linker options to tell them where to find the FLTK +library. Also, the CC command may also be called gcc + or c++ on your system. +

Congratulations, you've just built your own text editor!

The Final Product

- -The final editor window should look like the image below: - -
- - - + The final editor window should look like the image below: +
+ \ No newline at end of file -- cgit v1.2.3