summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2002-06-07 15:06:32 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>2002-06-07 15:06:32 +0000
commit861ad9769b94f52e3528817c8654c572d98ce760 (patch)
tree81868ee9e2a622094a9d873949311b3fc83ffc78 /test
parent5c17a15fd444acdc1c8e6bd8de2ba5669042b958 (diff)
New file chooser.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@2286 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'test')
-rw-r--r--test/file_chooser.cxx290
-rw-r--r--test/makedepend61
2 files changed, 298 insertions, 53 deletions
diff --git a/test/file_chooser.cxx b/test/file_chooser.cxx
index 3637250b8..2da5133f0 100644
--- a/test/file_chooser.cxx
+++ b/test/file_chooser.cxx
@@ -1,9 +1,9 @@
//
-// "$Id: file_chooser.cxx,v 1.4.2.3.2.4 2002/01/01 15:11:32 easysw Exp $"
+// "$Id: file_chooser.cxx,v 1.4.2.3.2.5 2002/06/07 15:06:32 easysw Exp $"
//
-// File chooser test program for the Fast Light Tool Kit (FLTK).
+// File chooser test program.
//
-// Copyright 1998-2002 by Bill Spitzak and others.
+// Copyright 1999-2002 by Michael Sweet.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -22,39 +22,273 @@
//
// Please report all bugs and problems to "fltk-bugs@fltk.org".
//
+// Contents:
+//
+// main() - Create a file chooser and wait for a selection to
+// be made.
+// close_callback() - Close the main window...
+// fc_callback() - Handle choices in the file chooser...
+// pdf_check() - Check for and load the first page of a PDF file.
+// ps_check() - Check for and load the first page of a PostScript
+// file.
+// show_callback() - Show the file chooser...
+//
+
+//
+// Include necessary headers...
+//
-#include <FL/Fl.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Input.H>
+#include <stdio.h>
#include <FL/Fl_File_Chooser.H>
#include <FL/Fl_File_Icon.H>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
+#include <FL/Fl_Shared_Image.H>
+#include <FL/Fl_PNM_Image.H>
+#include "../src/flstring.h"
-Fl_Input *pattern, *current;
-void pickfile(Fl_Widget *) {
- const char *p;
- p = fl_file_chooser("Pick a file",pattern->value(),current->value());
- if (p) current->value(p);
-}
+//
+// Globals...
+//
+
+Fl_Input *filter;
+Fl_File_Browser *files;
+Fl_File_Chooser *fc;
+Fl_Shared_Image *image = 0;
+
-int main(int argc, char **argv) {
+//
+// Functions...
+//
+
+void close_callback(void);
+void fc_callback(Fl_File_Chooser *, void *);
+Fl_Image *pdf_check(const char *, uchar *, int);
+Fl_Image *ps_check(const char *, uchar *, int);
+void show_callback(void);
+
+
+//
+// 'main()' - Create a file chooser and wait for a selection to be made.
+//
+
+int // O - Exit status
+main(int argc, // I - Number of command-line arguments
+ char *argv[]) // I - Command-line arguments
+{
+ Fl_Window *window;// Main window
+ Fl_Button *button;// Buttons
+ Fl_File_Icon *icon; // New file icon
+
+
+ // Make the file chooser...
+ Fl::scheme(NULL);
Fl_File_Icon::load_system_icons();
- Fl_Window window(310,110);
- pattern = new Fl_Input(100,10,200,25,"Pattern:");
- pattern->static_value("*");
- current = new Fl_Input(100,40,200,25,"Current:");
- Fl_Button button(200,75,100,25,"&Choose file");
- button.callback(pickfile);
- window.end();
- window.show(argc, argv);
- return Fl::run();
+
+ fc = new Fl_File_Chooser(".", "*", Fl_File_Chooser::MULTI, "Fl_File_Chooser Test");
+ fc->callback(fc_callback);
+// fc->type(Fl_File_Chooser::MULTI);
+// fc->color((Fl_Color)196);
+
+ // Register the PS and PDF image types...
+ Fl_Shared_Image::add_handler(pdf_check);
+ Fl_Shared_Image::add_handler(ps_check);
+
+ // Make the main window...
+ window = new Fl_Window(400, 200, "File Chooser Test");
+
+ filter = new Fl_Input(50, 10, 315, 25, "Filter:");
+ if (argc > 1)
+ filter->value(argv[1]);
+ else
+ filter->value("PDF Files (*.pdf)\t"
+ "PostScript Files (*.ps)\t"
+ "Image Files (*.{bmp,gif,jpg,png})\t"
+ "C/C++ Source Files (*.{c,C,cc,cpp,cxx})");
+
+ button = new Fl_Button(365, 10, 25, 25);
+ button->labelcolor(FL_YELLOW);
+ button->callback((Fl_Callback *)show_callback);
+
+ icon = Fl_File_Icon::find(".", Fl_File_Icon::DIRECTORY);
+ icon->label(button);
+
+ files = new Fl_File_Browser(50, 45, 340, 110, "Files:");
+ files->align(FL_ALIGN_LEFT);
+
+ button = new Fl_Button(340, 165, 50, 25, "Close");
+ button->callback((Fl_Callback *)close_callback);
+
+ window->end();
+ window->show();
+
+ Fl::run();
+
+ return (0);
}
+
+//
+// 'close_callback()' - Close the main window...
+//
+
+void
+close_callback(void)
+{
+ exit(0);
+}
+
+
+//
+// 'fc_callback()' - Handle choices in the file chooser...
+//
+
+void
+fc_callback(Fl_File_Chooser *fc, // I - File chooser
+ void *data) // I - Data
+{
+ const char *filename; // Current filename
+
+
+ printf("fc_callback(fc = %p, data = %p)\n", fc, data);
+
+ filename = fc->value();
+
+ printf(" filename = \"%s\"\n", filename ? filename : "(null)");
+}
+
+
+//
+// 'pdf_check()' - Check for and load the first page of a PDF file.
+//
+
+Fl_Image * // O - Page image or NULL
+pdf_check(const char *name, // I - Name of file
+ uchar *header, // I - Header data
+ int headerlen) // I - Length of header data
+{
+ const char *home; // Home directory
+ char preview[1024], // Preview filename
+ command[1024]; // Command
+
+
+ if (memcmp(header, "%PDF", 4) != 0)
+ return 0;
+
+ home = getenv("HOME");
+ snprintf(preview, sizeof(preview), "%s/.preview.ppm", home ? home : "");
+
+ snprintf(command, sizeof(command),
+ "gs -r100 -dFIXED -sDEVICE=ppmraw -dQUIET -dNOPAUSE -dBATCH "
+ "-sstdout=\"%%stderr\" -sOUTPUTFILE=\'%s\' "
+ "-dFirstPage=1 -dLastPage=1 \'%s\' 2>/dev/null", preview, name);
+
+ if (system(command)) return 0;
+
+ return new Fl_PNM_Image(preview);
+}
+
+
+//
+// 'ps_check()' - Check for and load the first page of a PostScript file.
+//
+
+Fl_Image * // O - Page image or NULL
+ps_check(const char *name, // I - Name of file
+ uchar *header, // I - Header data
+ int headerlen) // I - Length of header data
+{
+ const char *home; // Home directory
+ char preview[1024], // Preview filename
+ outname[1024], // Preview PS file
+ command[1024]; // Command
+ FILE *in, // Input file
+ *out; // Output file
+ int page; // Current page
+ char line[256]; // Line from file
+
+
+ if (memcmp(header, "%!", 2) != 0)
+ return 0;
+
+ home = getenv("HOME");
+ snprintf(preview, sizeof(preview), "%s/.preview.ppm", home ? home : "");
+
+ if (memcmp(header, "%!PS", 4) == 0) {
+ // PS file has DSC comments; extract the first page...
+ snprintf(outname, sizeof(outname), "%s/.preview.ps", home ? home : "");
+
+ if (strcmp(name, outname) != 0) {
+ in = fopen(name, "rb");
+ out = fopen(outname, "wb");
+ page = 0;
+
+ while (fgets(line, sizeof(line), in) != NULL) {
+ if (strncmp(line, "%%Page:", 7) == 0) {
+ page ++;
+ if (page > 1) break;
+ }
+
+ fputs(line, out);
+ }
+
+ fclose(in);
+ fclose(out);
+ }
+ } else {
+ // PS file doesn't have DSC comments; do the whole file...
+ strlcpy(outname, name, sizeof(outname));
+ }
+
+ snprintf(command, sizeof(command),
+ "gs -r100 -dFIXED -sDEVICE=ppmraw -dQUIET -dNOPAUSE -dBATCH "
+ "-sstdout=\"%%stderr\" -sOUTPUTFILE=\'%s\' \'%s\' 2>/dev/null",
+ preview, outname);
+
+ if (system(command)) return 0;
+
+ return new Fl_PNM_Image(preview);
+}
+
+
+//
+// 'show_callback()' - Show the file chooser...
+//
+
+void
+show_callback(void)
+{
+ int i; // Looping var
+ int count; // Number of files selected
+ char relative[1024]; // Relative filename
+
+
+ fc->show();
+ if (filter->value()[0])
+ fc->filter(filter->value());
+
+ fc->show();
+
+ while (fc->visible())
+ Fl::wait();
+
+ count = fc->count();
+ if (count > 0)
+ {
+ files->clear();
+
+ for (i = 1; i <= count; i ++)
+ {
+ fl_filename_relative(relative, sizeof(relative), fc->value(i));
+
+ files->add(relative,
+ Fl_File_Icon::find(fc->value(i), Fl_File_Icon::PLAIN));
+ }
+
+ files->redraw();
+ }
+}
+
+
//
-// End of "$Id: file_chooser.cxx,v 1.4.2.3.2.4 2002/01/01 15:11:32 easysw Exp $".
+// End of "$Id: file_chooser.cxx,v 1.4.2.3.2.5 2002/06/07 15:06:32 easysw Exp $".
//
diff --git a/test/makedepend b/test/makedepend
index 86b02c0a9..60adb457f 100644
--- a/test/makedepend
+++ b/test/makedepend
@@ -57,11 +57,12 @@ colbrowser.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Clock.H ../FL/Fl_Counter.H
colbrowser.o: ../FL/Fl_Dial.H ../FL/Fl_Free.H ../FL/fl_ask.H
colbrowser.o: ../FL/fl_show_colormap.H ../FL/filename.H
colbrowser.o: ../FL/Fl_File_Chooser.H ../FL/Fl.H ../FL/Fl_Window.H
-colbrowser.o: ../FL/Fl_Choice.H ../FL/Fl_Button.H ../FL/fl_ask.H
-colbrowser.o: ../FL/Fl_File_Browser.H ../FL/Fl_File_Icon.H
-colbrowser.o: ../FL/Fl_File_Input.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-colbrowser.o: ../FL/Fl_Return_Button.H ../FL/Fl_Input.H
-colbrowser.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Positioner.H
+colbrowser.o: ../FL/Fl_Group.H ../FL/Fl_Choice.H ../FL/Fl_Menu_Button.H
+colbrowser.o: ../FL/Fl_Button.H ../FL/Fl_Preferences.H ../FL/Fl_Tile.H
+colbrowser.o: ../FL/Fl_File_Browser.H ../FL/Fl_File_Icon.H ../FL/Fl_Box.H
+colbrowser.o: ../FL/Fl_Check_Button.H ../FL/Fl_File_Input.H ../FL/Fl_Input.H
+colbrowser.o: ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H ../FL/fl_ask.H
+colbrowser.o: ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H ../FL/Fl_Positioner.H
colbrowser.o: ../FL/Fl_Value_Slider.H ../FL/Fl_Timer.H
color_chooser.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
color_chooser.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
@@ -106,27 +107,31 @@ doublebuffer.o: ../FL/Fl_Valuator.H ../FL/math.h
editor.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/Fl_Group.H
editor.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
editor.o: ../FL/Fl_Widget.H ../FL/fl_ask.H ../FL/Fl_File_Chooser.H
-editor.o: ../FL/Fl_Window.H ../FL/Fl_Choice.H ../FL/Fl_Button.H
-editor.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H ../FL/Fl_Browser_.H
-editor.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-editor.o: ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/filename.H
-editor.o: ../FL/Fl_File_Input.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-editor.o: ../FL/Fl_Return_Button.H ../FL/Fl_Button.H ../FL/Fl_Menu_Bar.H
-editor.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/Fl_Text_Buffer.H
-editor.o: ../FL/Fl_Text_Editor.H ../FL/Fl_Text_Display.H ../FL/fl_draw.H
-editor.o: ../FL/Fl_Text_Buffer.H
+editor.o: ../FL/Fl_Window.H ../FL/Fl_Choice.H ../FL/Fl_Menu_Button.H
+editor.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/Fl_Button.H
+editor.o: ../FL/Fl_Preferences.H ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H
+editor.o: ../FL/Fl_Browser.H ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H
+editor.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_File_Icon.H
+editor.o: ../FL/Fl.H ../FL/filename.H ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
+editor.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H ../FL/Fl_File_Input.H
+editor.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H
+editor.o: ../FL/Fl_Menu_Bar.H ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Editor.H
+editor.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/Fl_Text_Buffer.H
fast_slow.o: fast_slow.h ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
fast_slow.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
fast_slow.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Box.H
file_chooser.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
file_chooser.o: ../FL/Fl_Button.H ../FL/Fl_Window.H ../FL/Fl_Group.H
file_chooser.o: ../FL/Fl_Widget.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-file_chooser.o: ../FL/Fl_File_Chooser.H ../FL/Fl_Choice.H ../FL/fl_ask.H
+file_chooser.o: ../FL/Fl_File_Chooser.H ../FL/Fl_Group.H ../FL/Fl_Choice.H
+file_chooser.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
+file_chooser.o: ../FL/Fl_Preferences.H ../FL/Fl_Tile.H
file_chooser.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
file_chooser.o: ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
file_chooser.o: ../FL/Fl_Valuator.H ../FL/Fl_File_Icon.H ../FL/Fl.H
-file_chooser.o: ../FL/filename.H ../FL/Fl_File_Input.H
-file_chooser.o: ../FL/Fl_Return_Button.H ../FL/Fl_Button.H
+file_chooser.o: ../FL/filename.H ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
+file_chooser.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
+file_chooser.o: ../FL/Fl_File_Input.H ../FL/Fl_Return_Button.H ../FL/fl_ask.H
file_chooser.o: ../FL/Fl_File_Icon.H
fonts.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/Fl_Window.H
fonts.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Hold_Browser.H
@@ -144,10 +149,12 @@ forms.o: ../FL/Fl_Check_Button.H ../FL/Fl_Chart.H ../FL/Fl_Choice.H
forms.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/Fl_Clock.H
forms.o: ../FL/Fl_Counter.H ../FL/Fl_Dial.H ../FL/Fl_Free.H ../FL/fl_ask.H
forms.o: ../FL/fl_show_colormap.H ../FL/filename.H ../FL/Fl_File_Chooser.H
-forms.o: ../FL/Fl.H ../FL/Fl_Window.H ../FL/Fl_Choice.H ../FL/Fl_Button.H
-forms.o: ../FL/fl_ask.H ../FL/Fl_File_Browser.H ../FL/Fl_File_Icon.H
-forms.o: ../FL/Fl_File_Input.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-forms.o: ../FL/Fl_Return_Button.H ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H
+forms.o: ../FL/Fl.H ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Choice.H
+forms.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Button.H ../FL/Fl_Preferences.H
+forms.o: ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H ../FL/Fl_File_Icon.H
+forms.o: ../FL/Fl_Box.H ../FL/Fl_Check_Button.H ../FL/Fl_File_Input.H
+forms.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H
+forms.o: ../FL/fl_ask.H ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H
forms.o: ../FL/Fl_Positioner.H ../FL/Fl_Value_Slider.H ../FL/Fl_Timer.H
forms.o: srs.xbm
fractals.o: ../config.h ../FL/glut.H ../FL/gl.h ../FL/Enumerations.H
@@ -257,13 +264,17 @@ pixmap_browser.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
pixmap_browser.o: ../FL/Fl_Box.H ../FL/Fl_Window.H ../FL/Fl_Group.H
pixmap_browser.o: ../FL/Fl_Widget.H ../FL/Fl_Button.H ../FL/Fl_Shared_Image.H
pixmap_browser.o: ../FL/Fl_Image.H ../FL/x.H ../FL/Fl_Window.H
-pixmap_browser.o: ../FL/Fl_File_Chooser.H ../FL/Fl_Choice.H ../FL/fl_ask.H
+pixmap_browser.o: ../FL/Fl_File_Chooser.H ../FL/Fl_Group.H ../FL/Fl_Choice.H
+pixmap_browser.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
+pixmap_browser.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Preferences.H ../FL/Fl_Tile.H
pixmap_browser.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
pixmap_browser.o: ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
pixmap_browser.o: ../FL/Fl_Valuator.H ../FL/Fl_File_Icon.H ../FL/Fl.H
-pixmap_browser.o: ../FL/filename.H ../FL/Fl_File_Input.H ../FL/Fl_Input.H
-pixmap_browser.o: ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H
-pixmap_browser.o: ../FL/Fl_Button.H ../FL/fl_message.H ../FL/fl_ask.H
+pixmap_browser.o: ../FL/filename.H ../FL/Fl_Check_Button.H
+pixmap_browser.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
+pixmap_browser.o: ../FL/Fl_File_Input.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
+pixmap_browser.o: ../FL/Fl_Return_Button.H ../FL/fl_ask.H ../FL/fl_message.H
+pixmap_browser.o: ../FL/fl_ask.H
pixmap.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/Fl_Window.H
pixmap.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Button.H
pixmap.o: ../FL/Fl_Pixmap.H ../FL/Fl_Image.H ../FL/x.H ../FL/Fl_Window.H