1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
|
(*
Copyright (c) 2001
David C.J. Matthews
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*)
(* Comboboxes. *)
structure Combobox:
sig
structure Style:
sig
include BIT_FLAGS where type flags = Window.Style.flags
val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags
and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags
and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags
and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags
and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags
and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags
and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags
and WS_POPUPWINDOW: flags and WS_CHILDWINDOW: flags
and CBS_SIMPLE: flags and CBS_DROPDOWN: flags and CBS_DROPDOWNLIST: flags
and CBS_OWNERDRAWFIXED: flags and CBS_OWNERDRAWVARIABLE: flags and CBS_AUTOHSCROLL: flags
and CBS_OEMCONVERT: flags and CBS_SORT: flags and CBS_HASSTRINGS: flags
and CBS_NOINTEGRALHEIGHT: flags and CBS_DISABLENOSCROLL: flags
and CBS_UPPERCASE: flags and CBS_LOWERCASE: flags
end
structure Notifications:
sig
val CBN_SELCHANGE: int
val CBN_DBLCLK: int
val CBN_SETFOCUS: int
val CBN_KILLFOCUS: int
val CBN_EDITCHANGE: int
val CBN_EDITUPDATE: int
val CBN_DROPDOWN: int
val CBN_CLOSEUP: int
val CBN_SELENDOK: int
val CBN_SELENDCANCEL: int
end
datatype CBDirAttr =
DDL_READWRITE | DDL_READONLY | DDL_HIDDEN | DDL_SYSTEM | DDL_DIRECTORY |
DDL_ARCHIVE | DDL_POSTMSGS | DDL_DRIVES | DDL_EXCLUSIVE
end
=
struct
open ComboBase
structure Style =
struct
open Window.Style (* Include all the windows styles. *)
val CBS_SIMPLE = fromWord 0wx0001
val CBS_DROPDOWN = fromWord 0wx0002
val CBS_DROPDOWNLIST = fromWord 0wx0003
val CBS_OWNERDRAWFIXED = fromWord 0wx0010
val CBS_OWNERDRAWVARIABLE = fromWord 0wx0020
val CBS_AUTOHSCROLL = fromWord 0wx0040
val CBS_OEMCONVERT = fromWord 0wx0080
val CBS_SORT = fromWord 0wx0100
val CBS_HASSTRINGS = fromWord 0wx0200
val CBS_NOINTEGRALHEIGHT = fromWord 0wx0400
val CBS_DISABLENOSCROLL = fromWord 0wx0800
val CBS_UPPERCASE = fromWord 0wx2000
val CBS_LOWERCASE = fromWord 0wx4000
val all = flags[Window.Style.all, CBS_SIMPLE, CBS_DROPDOWN, CBS_DROPDOWNLIST,
CBS_OWNERDRAWFIXED, CBS_OWNERDRAWVARIABLE, CBS_AUTOHSCROLL,
CBS_OEMCONVERT, CBS_SORT, CBS_HASSTRINGS, CBS_NOINTEGRALHEIGHT,
CBS_DISABLENOSCROLL, CBS_UPPERCASE, CBS_LOWERCASE]
val intersect =
List.foldl (fn (a, b) => fromWord(SysWord.andb(toWord a, toWord b))) all
end
structure Notifications =
struct
val CBN_SELCHANGE = 1
val CBN_DBLCLK = 2
val CBN_SETFOCUS = 3
val CBN_KILLFOCUS = 4
val CBN_EDITCHANGE = 5
val CBN_EDITUPDATE = 6
val CBN_DROPDOWN = 7
val CBN_CLOSEUP = 8
val CBN_SELENDOK = 9
val CBN_SELENDCANCEL = 10
end
(*
DlgDirListComboBox
DlgDirSelectEx
DlgDirSelectComboBoxEx
*)
end;
(*
let
open Combobox.Style
val flagTable =
[(CBS_DROPDOWNLIST, "CBS_DROPDOWNLIST"), (* Must come before the next two. *)
(CBS_SIMPLE, "CBS_SIMPLE"),
(CBS_DROPDOWN, "CBS_DROPDOWN"),
(CBS_OWNERDRAWFIXED, "CBS_OWNERDRAWFIXED"),
(CBS_OWNERDRAWVARIABLE, "CBS_OWNERDRAWVARIABLE"),
(CBS_AUTOHSCROLL, "CBS_AUTOHSCROLL"),
(CBS_OEMCONVERT, "CBS_OEMCONVERT"),
(CBS_SORT, "CBS_SORT"),
(CBS_HASSTRINGS, "CBS_HASSTRINGS"),
(CBS_NOINTEGRALHEIGHT, "CBS_NOINTEGRALHEIGHT"),
(CBS_DISABLENOSCROLL, "CBS_DISABLENOSCROLL"),
(CBS_UPPERCASE, "CBS_UPPERCASE"),
(CBS_LOWERCASE, "CBS_LOWERCASE"),
(WS_POPUP, "WS_POPUP"),
(WS_CHILD, "WS_CHILD"),
(WS_MINIMIZE, "WS_MINIMIZE"),
(WS_VISIBLE, "WS_VISIBLE"),
(WS_DISABLED, "WS_DISABLED"),
(WS_CLIPSIBLINGS, "WS_CLIPSIBLINGS"),
(WS_CLIPCHILDREN, "WS_CLIPCHILDREN"),
(WS_MAXIMIZE, "WS_MAXIMIZE"),
(WS_CAPTION, "WS_CAPTION"),
(WS_BORDER, "WS_BORDER"),
(WS_DLGFRAME, "WS_DLGFRAME"),
(WS_VSCROLL, "WS_VSCROLL"),
(WS_HSCROLL, "WS_HSCROLL"),
(WS_SYSMENU, "WS_SYSMENU"),
(WS_THICKFRAME, "WS_THICKFRAME"),
(WS_GROUP, "WS_GROUP"),
(WS_TABSTOP, "WS_TABSTOP"),
(WS_MINIMIZEBOX, "WS_MINIMIZEBOX"),
(WS_MAXIMIZEBOX, "WS_MAXIMIZEBOX")]
fun accumulateFlags f [] = []
| accumulateFlags f ((w, s)::t) =
if allSet(w, f) then s :: accumulateFlags(clear(w, f)) t
else accumulateFlags f t
fun printFlags(put, beg, brk, nd) depth _ x =
(* This is just the code to print a list. *)
let
val stringFlags = accumulateFlags x flagTable
fun plist [] depth = ()
| plist _ 0 = put "..."
| plist [h] depth = put h
| plist (h::t) depth =
( put (h^",");
brk (1, 0);
plist t (depth - 1)
)
in
beg (3, false);
put "[";
if depth <= 0 then put "..." else plist stringFlags depth;
put "]";
nd ()
end
in
PolyML.install_pp printFlags
end;
*)
|