diff lisp/dialog-items.el @ 442:abe6d1db359e r21-2-36

Import from CVS: tag r21-2-36
author cvs
date Mon, 13 Aug 2007 11:35:02 +0200
parents
children 42375619fa45
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/dialog-items.el	Mon Aug 13 11:35:02 2007 +0200
@@ -0,0 +1,115 @@
+;;; dialog-items.el --- Dialog-box content for XEmacs
+
+;; Copyright (C) 2000 Andy Piper.
+;; Copyright (C) 2000 Ben Wing.
+
+;; Maintainer: XEmacs Development Team
+;; Keywords: content, gui, internal, dumped
+
+;; This file is part of XEmacs.
+
+;; XEmacs is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; XEmacs is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with XEmacs; see the file COPYING.  If not, write to the 
+;; Free Software Foundation, 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Synched up with: Not in FSF.
+
+;;; Commentary:
+
+;;
+;; Simple search dialog
+;;
+(defvar search-dialog-direction t)
+(defvar search-dialog-regexp nil)
+(defvar search-dialog nil)
+
+(defun search-dialog-callback (parent image-instance event)
+  (save-selected-frame
+    (select-frame parent)
+    (let ((domain (frame-selected-window  (event-channel event))))
+      (funcall (if search-dialog-direction
+		   (if search-dialog-regexp
+		       're-search-forward
+		     'search-forward)
+		 (if search-dialog-regexp
+		     're-search-backward
+		   'search-backward))
+	       (glyph-image-property
+		(car (glyph-image-property 
+		      (nth 1 (glyph-image-property
+			    search-dialog :items domain))
+		      :items domain)) :text domain))
+      (isearch-highlight (match-beginning 0) (match-end 0)))))
+
+(defun make-search-dialog ()
+  "Popup a search dialog box."
+  (interactive)
+  (let ((parent (selected-frame)))
+    (make-dialog-box 
+     'general
+     :parent parent
+     :title "Search"
+     :spec
+     (setq search-dialog
+	   (make-glyph
+	    `[layout 
+	      :orientation horizontal :justify left
+	      ;; neither the following height/width nor the identical one
+	      ;; below should be necessary! (see below)
+	      :height 11 :width 40
+	      :border [string :data "Search"]
+	      :items 
+	      ([layout :orientation vertical :justify left
+		       :items 
+		       ([string :data "Search for:"]
+			[button :descriptor "Match Case"
+				:style toggle
+				:selected (not case-fold-search)
+				:callback (setq case-fold-search
+						(not case-fold-search))]
+			[button :descriptor "Regular Expression"
+				:style toggle
+				:selected search-dialog-regexp
+				:callback (setq search-dialog-regexp
+						(not search-dialog-regexp))]
+			[button :descriptor "Forwards"
+				:style radio
+				:selected search-dialog-direction
+				:callback (setq search-dialog-direction t)]
+			[button :descriptor "Backwards"
+				:style radio
+				:selected (not search-dialog-direction)
+				:callback (setq search-dialog-direction nil)]
+			)]
+	       [layout :orientation vertical :justify left
+		       :items 
+		       ([edit-field :width 15 :descriptor "" :active t
+				    :face default :initial-focus t]
+			[button :width 10 :descriptor "Find Next"
+				:callback-ex
+				(lambda (image-instance event)
+				  (search-dialog-callback ,parent
+							  image-instance
+							  event))]
+			[button :width 10 :descriptor "Cancel"
+				:callback-ex
+				(lambda (image-instance event)
+				  (isearch-dehighlight)
+				  (delete-frame 
+				   (event-channel event)))])])]))
+     ;; neither this height/width nor the identical one above should
+     ;; be necessary! (in fact, if you omit the one above, the layout
+     ;; sizes itself correctly; but the frame as a whole doesn't use
+     ;; the layout's size, as it should.)
+     :properties '(height 11 width 40))))