Custom Properties

Marielle Lange mlange at lexicall.org
Thu Apr 13 15:44:10 EDT 2006


> Hi,
>
> I don't see what is to be gained using setProp's in this example?  
> Surely:
>
> function setEditMode pMode
>   if pMode then
>     enable button "Save"
>     enable button "TextColor"
>     set the lockText of fld "myfld" to true
>     set the traversalOn of fld "myFld" to true
>   else
>     disable button "Save"
>     disable button "TextColor"
>     set the lockText of fld "myfld" to false
>     set the traversalOn of fld "myFld" to false
>   end if
> end setEditMode
>
> ---------------
>
> get setEditMode(true/false)
>
> Would do the same job with less lines of code and be much easier to  
> follow?
>
> All the Best
> Dave

There is a bit of truth in both.

The way I would code the above is
    setProp/getProp editMode -- [t/f]

in the main script
     set the editmode of me to true
     viewrefresh

then

--
on viewrefresh
  if the editmode of me is true then
     enable button "Save"
     enable button "TextColor"
     set the lockText of fld "myfld" to true
     set the traversalOn of fld "myFld" to true
   else
     disable button "Save"
     disable button "TextColor"
     set the lockText of fld "myfld" to false
     set the traversalOn of fld "myFld" to false
   end if
end viewrefresh
--

Custom properties are best used to hold model data.

Concrete example. This corresponds to a small widget to open and  
display the content of a file. On the interface,
I have
1) a button with the icon of a folder (answer file)
2) a textfield that displays the name of the file in a special format  
(if the name of the file is longer than 40 characters, then ellipses  
are added)
3) a textfield that displays the content of the file
4) a button with double arrows as icon (refresh the display)

Don't mind the use of vw["UIobject"]. I use it so that the view  
objects are defined out of the script. Similarly, the defaults[""]  
are used to store default values, so that the user can change the  
custom prop value and then change its mind and restore to a default one.

------------------------------------------------------------------------ 
--------------------------------------
/*
|   @dependencies:   file.getcontent()   [lib_files]
|   @dependencies:   path.convert2ellipsest()   [lib_files]
*/

####################################
#
#     Model
#
#
####################################
/* ________________________
|        Model Data
__________________________
|
| 	file_name
| 	file_content
|        extension_filter  -- not implemented
|       dialog_prompt
___________________________
*/


---  getters ------------------------

getProp file_name
   put the  file_name of me into tValue
   if tValue is empty then put the defaults[" file_name"] of me into  
tValue
   return tValue
end file_name

getProp file_content
   put the file_name of me into tFileName
   return file.getcontent(tFileName)
end file_content

getProp extension_filter
   put the  extension_filter of me into tValue
   if tValue is empty then put the defaults["extension_filter"] of me  
into tValue
   if tValue is empty then put "*" into tValue
   return tValue
end extension_filter

getProp dialog_prompt
   put the dialog_prompt of me into tValue
   if tValue is empty then put the defaults["dialog_prompt"] of me  
into tValue
   if tValue is empty then put "Please Select a file" into tValue
   return tValue
end dialog_prompt

/* ________________________
|        Model Methods
__________________________
|      (strictly speaking, affect the view, but let's not discuss  
this here))
| 	file.getcontent
| 	path.convert2ellipses
___________________________
*/

-- that include business is so that I can automatically 
-- update this part of the script from my main library

# @include file.getcontent of lib_files
function file.getcontent pFile
   return URL ("file://" & pFile)
end file.getcontent
#include@

# @include path.convert2ellipses of lib_files
function path.convert2ellipses pPath, pNbChars
   if pPath is empty then return empty
   if pNbChars >= length(pPath) then return pPath
   --- now we are in a situation where elipses (...) need to be added
   set the itemdel to "/"
   put item -1 of pPath into tName
   put item 1 to -2 ofpPath into tPath
   ----------------
   -- Number of characters to hide
   put (length(pPath) - pNbChars) into pNbCharsToHide
   ----------------
   -- locate the half of the string
   put length(tPath)  into tLength
   if tLength < pNbCharsToHide then put length(pPath) into tLength
   put round(tLength/2) into tHalfOfString
   if tHalfOfString mod 2 = 0 then add -1 to tHalfOfString
   ----------------
   put tHalfOfString - round(pNbCharsToHide/2) into tStartOfHide
   put tHalfOfString + round(pNbCharsToHide/2) into tEndOfHide
   -- answer tHalfOfString, pNbCharsToHide, tStartOfHide, tEndOfHide
   if pNbCharsToHide mod 2 = 1 then add 1 to tEndOfHide
   put "..." into char tStartOfHide to tEndOfHide of pPath
   return pPath
end path.convert2ellipses
#include@


####################################
#
#    Controller (behaviours being implemented)
#
#
####################################
/* ________________________
|        controller's behaviours
|__________________________

|       askforfile (mouseup on directory icon)
| 	view.refresh (mouseup on refresh icon)
___________________________
*/

on mouseup
   if the behavior["mouseup"] of the target is empty then pass mouseup
   send (the behavior["mouseup"] of the target)
end mouseup

on askforfile
     answer file empty
     set the file_name of me to it
     view.refresh
end askforfile


####################################
#
#    View (ui elements being updated)
#
#
####################################

on view.refresh
   -- file content
   put the long ID of the vw["file_content"] of me into tContentObject
   put the file_content of me into tFileContent
   set the text of tContentObject to  tFileContent
   -- file name
   put the file_name of me into tFileName
   put the file_length of me into tNbChars
   put path.convert2ellipses(tFileName, tNbChars) into tFormatedName
   put the long ID of the vw["file_name"] of me into tFileNameObject
   set the text of tFileNameObject to tFormatedName
end view.refresh


------------------------------------------------------------------------ 
--------------------------------------
Marielle Lange (PhD),  Psycholinguist

Alternative emails: mlange at blueyonder.co.uk,

Homepage                                                            
http://homepages.widged.com/mlange/
Easy access to lexical databases                    http:// 
lexicall.widged.com/
Supporting Education Technologists              http:// 
revolution.widged.com/wiki/





More information about the use-livecode mailing list