rexx-things/modules/windows/oodialog/simple/ChangeFont.rex
2025-03-12 20:50:48 +00:00

128 lines
5.4 KiB
Rexx
Executable File

/*----------------------------------------------------------------------------*/
/* */
/* Copyright (c) 2009-2014 Rexx Language Association. All rights reserved. */
/* */
/* This program and the accompanying materials are made available under */
/* the terms of the Common Public License v1.0 which accompanies this */
/* distribution. A copy is also available at the following address: */
/* https://www.oorexx.org/license.html */
/* */
/* Redistribution and use in source and binary forms, with or */
/* without modification, are permitted provided that the following */
/* conditions are met: */
/* */
/* Redistributions of source code must retain the above copyright */
/* notice, this list of conditions and the following disclaimer. */
/* Redistributions in binary form must reproduce the above copyright */
/* notice, this list of conditions and the following disclaimer in */
/* the documentation and/or other materials provided with the distribution. */
/* */
/* Neither the name of Rexx Language Association nor the names */
/* of its contributors may be used to endorse or promote products */
/* derived from this software without specific prior written permission. */
/* */
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */
/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */
/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */
/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
/* */
/*----------------------------------------------------------------------------*/
/**
* Simple Dialog showing how to: create a font. change the font of a control,
* manage buttons to prevent the user from getting the dialog in the wrong
* state.
*
* In this simple dialog, we don't want to manage the creation of lots of fonts,
* so after the user creates the first new font, we disable the button. That
* way the user can not create a new font thousands of times.
*/
dlg = .FileViewDialog~new
if dlg~initCode <> 0 then do
say "Dialog initialization failed. Program Abort."
return 99
end
dlg~create(30, 30, 260, 180, "File Viewing Dialog", "VISIBLE")
dlg~execute("SHOWTOP")
return 0
-- End of entry point.
::requires "ooDialog.cls"
::class 'FileViewDialog' subclass UserDialog
::method defineDialog
self~autoDetect = .false
self~constDir[IDC_EDIT] = 110
self~constDir[IDC_PB_OPEN] = 111
self~constDir[IDC_PB_CHANGE_FONT] = 112
styles = "VSCROLL HSCROLL MULTILINE"
self~createEdit(IDC_EDIT, 5, 5, 250, 150, styles)
self~createPushButton(IDC_PB_OPEN, 5, 160, 35, 15, , "Open", onOpen)
self~createPushButton(IDC_PB_CHANGE_FONT, 50, 160, 45, 15, , "Change Font", onFont)
self~createPushButton(IDOK, 220, 160, 35, 15, "DEFAULT", "OK")
::method initDialog
expose editControl newFont
newFont = .nil
editControl = self~newEdit(IDC_EDIT)
helpMsg = "Use the Open button to open a text file" || .endOfLine || -
"and then use the Change Font button to" || .endOfLine || -
"change the font."
editControl~setText(helpMsg)
self~newPushButton(IDC_PB_CHANGE_FONT)~disable
::method onOpen
expose editControl newFont
editControl~setText("")
-- Have the open file dialog start in the same directory as the location of
-- this program.
parse source . . programSrc
startDirectory = fileSpec('L', programSrc)
fileName = fileNameDialog(startDirectory, self~dlgHandle, , 1, "Open a File for Editing")
if fileName == 0 then return
fObj = .stream~new(fileName)
fObj~open
if fObj~state \== 'READY' then return self~abort
text = fObj~charin(1, fObj~chars)
fObj~close
editControl~setText(text)
if newFont == .nil then self~newPushButton(IDC_PB_CHANGE_FONT)~enable
::method onFont
expose editControl newFont
newFont = self~createFontEx("Courier", 12)
editControl~setFont(newFont)
self~newPushButton(IDC_PB_CHANGE_FONT)~disable
::method leaving
expose newFont
if newFont \= .nil then self~deleteFont(newFont)
::method abort private
j = errorDialog("There is an unexplained error. Program Abort")
return self~cancel