From 09daf20b81cdae78772f07c0af22a571d7cc73eb Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Thu, 29 Nov 2001 19:24:00 +0000 Subject: Documentation updates galore (up to chapter 7, still need to do chapter 8 and 9, tweek the appendices, and recapture the screenshots...) git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@1786 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- documentation/editor.html | 673 +++++++++++++++++++++++++--------------------- 1 file changed, 361 insertions(+), 312 deletions(-) (limited to 'documentation/editor.html') diff --git a/documentation/editor.html b/documentation/editor.html index 236bc8162..565ba5ee0 100644 --- a/documentation/editor.html +++ b/documentation/editor.html @@ -1,25 +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: + +

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. Menubar/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. + +
  15. Provide a menubar/menus for all functions.
  16. +
  17. Edit a single text file, possibly with multiple views.
  18. +
  19. Load from a file.
  20. +
  21. Save to a file.
  22. +
  23. Cut/copy/delete/paste functions.
  24. +
  25. Search and replace functions.
  26. +
  27. Keep track of when the file has been changed.
  28. +
+

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 textbuf variable is the text editor buffer for our -window described previously. We'll cover the other variables as -we build the application. + +

Our text editor will need some global variables to keep track of +things: + +

+ +

The textbuf variable is the text editor buffer for +our window class described previously. We'll cover the other +variables as we build the application.

+

Menubars 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_Text_Editor -widget to edit the text: - +

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: -

The search and replace dialog.

- +

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_title() function is one that we will write to set +the changed status on the current file. We're doing it this way +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. +

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 loadfile() +method to "replace" the text in the buffer, or the insertfile() +method to insert text in the buffer from the named file. +

save_file()

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

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: - + +

or by using the fltk-config script 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!

+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 on the next page. -

The completed editor window.

- + +The final editor window should look like the image in Figure 4-2. + +

The completed editor window.
+Figure 4-2: The completed editor window

+ + + -- cgit v1.2.3