Dialog Box Editor (DBE) — File Browser
DialogBoxEditorDBEv2.3 / DialogBoxEditorDBEv2.3 / dbe.mrc
dbe.mrc — 52.71 KB — Download this file
; DBE.mrc - mIRC Dialog Box Editor script
; author: Klaatu
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; I N S T A L L A T I O N
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Read the dbe.txt file for installation instructions
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; H I S T O R Y
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Read the dbevers.txt file.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; EVENTS Section
;
; install/initialize the script
;
on 1:load:/install
on 1:start:/initialize
;on 1:keyup:@dialog:*:{
; //echo -s saw keyup: keyval = $keyval , keyrpt = $keyrpt
;}
; configure dialog - ok
on 1:dialog:dbeconfig:sclick:7:{
set %dbe.grid.width $did($dname,3).text
if ( %dbe.grid.width == $null ) set %dbe.grid.width 10
set %dbe.grid.height $did($dname,3).text
if ( %dbe.grid.height == $null ) set %dbe.grid.height 10
set %dbe.grid.snap $did(6).state
dbemakegrid
}
; MENUS Section
;
; Menubar Menu
menu menubar {
&DBE
.Edit dialog:/dbe
.Configure:/dbeconfig
.-
.Uninstall:/dbe.uninstall
.About:/echo -a DBE Script [ %dbe.ver ]
}
; ALIASES Section
;
; dbeconfig - configure the dbe
alias dbeconfig {
dialog -m dbeconfig dbeconfig
did -a dbeconfig 3 %dbe.grid.width
did -a dbeconfig 5 %dbe.grid.height
if ( %dbe.grid.snap == 1 ) { did -c dbeconfig 6 }
else { did -u dbeconfig 6 }
}
; DBE - edit a dialog box
alias dbe {
var %title
reinitialize
; create support window
window -hp @dialogs 1 1 $window(-1).w $window(-1).h
; tools window
convert $scriptdirdbetools.mdt
window -hk0p +L @dialogt $calc($window(-1).w - %dbe.ww) 1 %dbe.ww %dbe.wh @dialogt
drawdialog 1 @dialogt
; read dialog table
convert
; handle case where user canceled
if ( %dbe.tfn == $null ) {
window -c @dialogs
window -c @dialogt
return
}
; create the edit window
set %window @dialog
window -hk0p %window %dbe.wx %dbe.wy %dbe.ww %dbe.wh @dialog
set %title % $+ table. $+ %tables $+ .title
titlebar %window [ [ %title ] ]
; show the grid
drawcopy @dialogg 1 1 $window(%window).w $window(%window).h @dialog 1 1
; draw it
drawdialog 2 %window
; save the drawing
;drawcopy @dialog 1 1 %dbe.ww %dbe.wh @dialogs 1 1
drawcopy @dialog 1 1 $window(%window).w $window(%window).h @dialogs 1 1
; move tool window along right side of dialog window
window @dialogt $calc(%dbe.wx + %dbe.ww + 2) %dbe.wy
titlebar @dialogt DBE Tools
; show the tool window and the edit window
window -ar @dialogt
window -ar %window
}
; diadrawtext - draw text within an area
; $1=color, $2=x, $3=y, $4=w, $5=h
; $1=color, $2=x, $3=y, $4=w, $5=h, $6=type, $7-=text
alias diadrawtext {
var %line, %type = $6, %text = $7-
;//echo -s diadrawtext: $1 , $2 , $3 , $4 , $5 , $6 , $7-
; draw a box that shows the field size unless its text for a box object
if ( %type != box ) { drawrect %window 15 1 $2 $3 $4 $5 }
if ( %text == $null ) { return }
var %dbeh, %dbey, %dbe.len, %dbe.chars, %dbes, %dbec, %dbel, %dbe.tw, %dbex, %dbew, %dbecanwrap, %dbewrap, %dbew1
set %dbecanwrap $false
set %dbex $2
set %dbey $3
set %dbew $4
set %dbeh $5
; center text vertically
if ( %type isin buttoncheckradio ) {
%dbeh = $height(%text,%dbe.font,%dbe.fontsize)
%dbey = $calc( $3 + 2 + (($5 - %dbeh) / 2 ))
}
elseif ( %type == edit ) {
set %dbex $calc($2 + 6)
dec %dbew 8
set %dbey $calc($3 + 6)
dec %dbeh 8
; if vertical scroll bar narrow width
if ( vsbar isin %style ) { dec %dbew 15 }
; if horizontal scroll bar shorten height
if ( hsbar isin %style ) { dec %dbeh 15 }
; if multiline we can try to wrap
;elseif ( multi isin %style ) { set %dbecanwrap $true }
if ( multi isin %style ) { set %dbecanwrap $true }
}
elseif ( %type == text ) { set %dbecanwrap $true }
set %dbe.maxy $calc(%dbey + %dbeh - 1)
; draw the text within the object's area, wrap if necessary.
initgetword %text
:loop
set %line $buildline(%dbew)
if ( %line == $null ) { return }
; left, center, right justify text horizontally
%dbew1 = $width(%line,%dbe.font,%dbe.fontsize,0,0)
if ( center isin %style ) {
%dbex = $calc( $2 + (((%dbew - %dbew1) / 2 ) - 1))
}
elseif ( right isin %style ) {
;%dbex = $calc( $2 + (%dbew - %dbew1 - 2))
%dbex = $calc( $2 + ((%dbew - %dbew1) - 1))
}
drawtext -c %window $1 %dbe.font %dbe.fontsize %dbex %dbey %dbew %dbeh %line
if ( %dbecanwrap == $false ) { return }
inc %dbey %dbe.fh
dec %dbeh %dbe.fh
if ( %dbey > %dbe.maxy) { return }
; multiline editboxes need multiples of font height
if ( %type == edit && $calc(%dbe.maxy - %dbey + 1) < %dbe.fh ) { return }
goto loop
}
alias -l initgetword {
set %dbe.words $1-
set %dbe.numwords $numtok(%dbe.words,32)
set %dbe.nextword 1
}
alias -l peekword {
if ( %dbe.nextword > %dbe.numwords ) { return $null }
return $gettok(%dbe.words,%dbe.nextword,32)
}
alias -l getword {
set %dbe.word $peekword()
if ( %dbe.word != $null ) { inc %dbe.nextword 1 }
return %dbe.word
}
; buildline - accumulate words that will fit in specified width
; $1 = width
alias -l buildline {
var %width, %line, %word, %line2
set %width $1
set %line $null
:loop
set %word $peekword
if ( %word == $null ) { return %line }
if ( %line == $null ) { set %line2 %word }
else { set %line2 %line $+ $chr(32) $+ %word }
if ( $width(%line2,%dbe.font,%dbe.fontsize,0,0) >= %width ) { return %line }
set %line %line2
inc %dbe.nextword 1
goto loop
}
; Window Menu
menu @dialog {
mouse:{
; local variables
var %dist.x, %dist.y, %var, %type
%mx = $mouse.x
%my = $mouse.y
set %var % $+ table.3.item $+ %object $+ .type
set %type [ [ %var ] ]
if ( %dbe.move ) {
; object moved ... erase object from old position
drawcopy @dialogs %c1.x %c1.y %c1.w %c1.h @dialog %c1.x %c1.y
; calc new location = mouse location plus hot-spot offset
%c1.x = $calc($mouse.x + %dbe.deltax)
%c1.y = $calc($mouse.y + %dbe.deltay)
; now snap to grid
if ( %dbe.grid.snap ) {
set %c1.x $int($calc( %c1.x / %dbe.grid.width ))
set %c1.y $int($calc( %c1.y / %dbe.grid.height ))
set %c1.x $calc( %c1.x * %dbe.grid.width )
set %c1.y $calc( %c1.y * %dbe.grid.height )
}
; set objects new position and size
if ( %type == tab ) {
set %var % $+ table.3.tabsize
}
else {
set %var % $+ table.3.item $+ %object $+ .size
}
set [ [ %var ] ] %c1.x %c1.y %c1.w %c1.h
; draw the object
paintitem 3 %object %window %dbe.normal.color
}
if ( %dbe.resize ) {
; erase old image
drawcopy @dialogs %c1.x %c1.y %c1.w %c1.h @dialog %c1.x %c1.y
; calc new size - need distance we traveled in the resize direction only
%dist.x = $calc( $mouse.x - %c1.mx)
%dist.y = $calc( $mouse.y - %c1.my)
if (%c1.dir == 1 ) {
; resizing left
%c1.x = $calc(%c1.x + %dist.x)
%c1.w = $calc(%c1.w + (%dist.x * -1))
}
if (%c1.dir == 2 ) {
; resizing right
%c1.w = $calc(%c1.w + %dist.x)
}
if (%c1.dir == 3 ) {
; resizing up
%c1.y = $calc(%c1.y + %dist.y)
%c1.h = $calc(%c1.h + (%dist.y * -1))
}
if (%c1.dir == 4 ) {
; resizing down
%c1.h = $calc(%c1.h + %dist.y)
}
; save the new mouse position
%c1.mx = $mouse.x
%c1.my = $mouse.y
; show the resize rectangle
%x = %c1.x
%y = %c1.y
%w = %c1.w
%h = %c1.h
; set objects new position and size
if ( %type == tab ) {
set %var % $+ table.3.tabsize
}
else {
set %var % $+ table.3.item $+ %object $+ .size
}
set [ [ %var ] ] %c1.x %c1.y %c1.w %c1.h
; draw the object
paintitem 3 %object %window %dbe.normal.color
; draw the resizing line
if ( %c1.dir == 1 ) { drawline @dialog 3 1 %x %y %x $calc(%y + %h) }
elseif ( %c1.dir == 2 ) { drawline @dialog 3 1 $calc(%x + %w) %y $calc(%x + %w) $calc(%y + %h) }
elseif ( %c1.dir == 3 ) { drawline @dialog 3 1 %x %y $calc(%x + %w) %y }
else { drawline @dialog 3 1 %x $calc(%y + %h) $calc(%x + %w) $calc(%y + %h) }
}
; selecting multiple objects?
if ( %dbe.group ) {
; yes... erase old box
drawcopy @dialogs %dbe.gx %dbe.gy %dbe.gw %dbe.gh @dialog %dbe.gx %dbe.gy
; calc coordinates of top left corner
var %x, %y, %w, %h
set %w $calc(%mx - %c1.x)
if ( %w > 0 ) { set %x %c1.x }
else { set %x %mx | set %w $calc(%w * (0 - 1)) }
set %h $calc(%my - %c1.y)
if ( %h > 0 ) { set %y %c1.y }
else { set %y %my | set %h $calc(%h * (0 - 1)) }
; draw box from origin to current location
drawrect -c @dialog 4 1 %x %y %w %h
set %dbe.gx %x | set %dbe.gy %y | set %dbe.gw %w | set %dbe.gh %h
}
}
sclick:{
; left mouse button is down... prepare to move or resize object
; local variables
var %dist.x.m, %dist.w.m, %dist.y.m, %dist.h.m, %var, %tab, %tabfocus, %id, %size, %type
set %mx $mouse.x
set %my $mouse.y
; is mouse in a dialog object? note: $inobject returns with the object's
; position and size in %x, %y, %w, and %h
%object = $inobject(%mx, %my, %tables)
if ( %object != 0 ) {
; if object is a tab and tab doesn't have focus then give it the focus
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .type
set %type [ [ %var ] ]
if ( %type == tab ) {
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .id
set %id [ [ %var ] ]
set %var % $+ table. $+ %tables $+ .tabfocus
set %tabfocus [ [ %var ] ]
if ( %id != %tabfocus ) {
set [ [ %var ] ] %id
; draw whole dialog so we erase the controls on the now hidden tab
drawdialog %tables %window
; save new contents
drawcopy @dialog 1 1 $window(%window).w $window(%window).h @dialogs 1 1
}
; reset size to size of whole tab control
set %var % $+ table. $+ %tables $+ .tabsize
set %size [ [ %var ] ]
getposandsize %size
}
; we found an object (%object) that the mouse is in
; save the original coordinates so we can reposition tab controls
set %dbe.orgx %x
set %dbe.orgy %y
; calc hot-spot offset
%dbe.deltax = $calc(%x - %mx)
%dbe.deltay = $calc(%y - %my)
; resizing or moving?
if ( $mouse.key & 2 ) {
; resizing... copy object to table 3
copyitem 2 %object 3
;calc resize direction (the edge the mouse is closest to)
%dist.x.m = $calc(%mx - %x)
%dist.w.m = $calc((%x + %w) - %mx)
%dist.y.m = $calc(%my - %y)
%dist.h.m = $calc((%y + %h) - %my)
; assume direction is left
%c1.dir = 1
%c1.dir.size = %dist.x.m
; look for a better direction
if ( %dist.w.m < %c1.dir.size ) { %c1.dir = 2 | %c1.dir.size = %dist.w.m }
if ( %dist.y.m < %c1.dir.size ) { %c1.dir = 3 | %c1.dir.size = %dist.y.m }
if ( %dist.h.m < %c1.dir.size ) { %c1.dir = 4 }
; show the side we are resizing
if ( %c1.dir == 1 ) { drawline @dialog 3 1 %x %y %x $calc(%y + %h) }
elseif ( %c1.dir == 2 ) { drawline @dialog 3 1 $calc(%x + %w) %y $calc(%x + %w) $calc(%y + %h) }
elseif ( %c1.dir == 3 ) { drawline @dialog 3 1 %x %y $calc(%x + %w) %y }
else { drawline @dialog 3 1 %x $calc(%y + %h) $calc(%x + %w) $calc(%y + %h) }
; save objects current location and size
%c1.x = %x
%c1.y = %y
%c1.w = %w
%c1.h = %h
; save mouse location
%c1.mx = %mx
%c1.my = %my
; set resizing flag
set %dbe.resize $true
}
else {
;moving object... copy object to table 3
copyitem 2 %object 3
; save objects current location and size
%c1.x = %x
%c1.y = %y
%c1.w = %w
%c1.h = %h
; set moving flag
set %dbe.move $true
}
}
; left click outside of an object... prepare to box a group of objects
else {
if ( %table.9.items == $null ) {
set %dbe.group $true
; remember starting location
set %c1.x %mx
set %c1.y %my
; now snap to grid
if ( %dbe.grid.snap ) {
set %c1.x $int($calc( %c1.x / %dbe.grid.width ))
set %c1.y $int($calc( %c1.y / %dbe.grid.height ))
set %c1.x $calc( %c1.x * %dbe.grid.width )
set %c1.y $calc( %c1.y * %dbe.grid.height )
}
set %dbe.gx %c1.x | set %dbe.gy %c1.y | set %dbe.gw 0 | set %dbe.gh 0
}
else {
beep 3 200
var %tmp = $?!="Only one group at a time please."
}
}
}
leave:{
if ( %dbe.group ) {
; user was drawing a group box but moved outside of the edit window...
; if they unclicked outside we won't see the uclick event when they come back inside
; so we just abort drawing group box
set %dbe.group $false
; erase group box
drawcopy @dialogs %dbe.gx %dbe.gy %dbe.gw %dbe.gh @dialog %dbe.gx %dbe.gy
set %dbe.gx 0 | set %dbe.gy 0 | set %dbe.gw 0 | set %dbe.gh 0
}
}
dclick:{
; double mouse click ... edit object or dialog box properties
if ( %dbe.move || %dbe.resize || %dbe.group ) { return }
; local vars
var %var, %type, %text, %id, %tab, %info, %title, %filename, %index, %option
; turn off false sclick
set %dbe.move $false
set %dbe.resize $false
; edit object properties if mouse is in an object
set %mx $mouse.x
set %my $mouse.y
; is mouse in a dialog object?
%object = $inobject(%mx, %my, %tables)
if ( %object != 0 ) {
; we have an object...get info about the object
set %var % $+ table.2.item $+ %object $+ .type
set %type [ [ %var ] ]
set %var % $+ table.2.item $+ %object $+ .id
set %id [ [ %var ] ]
set %var % $+ table.2.item $+ %object $+ .tab
set %tab [ [ %var ] ]
set %var % $+ table.2.item $+ %object $+ .text
set %text [ [ %var ] ]
set %var % $+ table.2.item $+ %object $+ .style
set %info [ [ %var ] ]
if ( %type == text ) {
dialog -m proptext proptext
did -r proptext 2
did -o proptext 10 1 %id
did -a proptext 2 %text
if ( %info == $null ) {
did -c proptext 3
}
else {
if ( center isin %info ) { did -c proptext 4 }
elseif ( right isin %info ) { did -c proptext 8 }
else { did -c proptext 3 }
if ( disable isin %info ) { did -c proptext 12 }
if ( hide isin %info ) { did -c proptext13 }
if ( group isin %info ) { did -c proptext 14 }
if ( result isin %info ) { did -c proptext 15 }
}
}
if ( %type == edit ) {
dialog -m propedit propedit
did -r propedit 2
did -o propedit 24 1 %id
did -a propedit 2 %text
if ( %info == $null ) {
did -c propedit 3
}
else {
if ( center isin %info ) { did -c propedit 4 }
elseif ( right isin %info ) { did -c propedit 5 }
else did -c propedit 3
if ( multi isin %info ) { did -c propedit 6 }
if ( pass isin %info ) { did -c propedit 7 }
if ( read isin %info ) { did -c propedit 8 }
if ( return isin %info ) { did -c propedit 9 }
if ( disable isin %info ) { did -c propedit 10 }
if ( hide isin %info ) { did -c propedit 11 }
if ( group isin %info ) { did -c propedit 12 }
if ( result isin %info ) { did -c propedit 13 }
if ( hsbar isin %info ) { did -c propedit 14 }
if ( autohs isin %info ) { did -c propedit 15 }
if ( vsbar isin %info ) { did -c propedit 16 }
if ( autovs isin %info ) { did -c propedit 17 }
}
}
if ( %type == button ) {
dialog -m propbutt propbutt
did -r propbutt 2
did -o propbutt 16 1 %id
did -a propbutt 2 %text
did -o propbutt 18 1 %tab
if ( %info == $null ) {
did -c propbutt 4
}
else {
if ( default isin %info ) { did -c propbutt 3 }
if ( ok isin %info ) { did -c propbutt 5 }
elseif ( cancel isin %info ) { did -c propbutt 6 }
else did -c propbutt 4
if ( disable isin %info ) { did -c propbutt 7 }
if ( hide isin %info ) { did -c propbutt 8 }
if ( group isin %info ) { did -c propbutt 9 }
if ( result isin %info ) { did -c propbutt 10 }
}
}
if ( %type == check ) {
dialog -m propchk propchk
did -r propchk 2
did -o propchk 16 1 %id
did -a propchk 2 %text
if ( %info == $null ) {
did -c propchk 4
}
else {
if ( 3state isin %info ) { did -c propchk 3 }
if ( left isin %info ) { did -c propchk 5 }
elseif ( push isin %info ) { did -c propchk 6 }
else did -c propchk 4
if ( disable isin %info ) { did -c propchk 7 }
if ( hide isin %info ) { did -c propchk 8 }
if ( group isin %info ) { did -c propchk 9 }
if ( result isin %info ) { did -c propchk 10 }
}
}
if ( %type == radio ) {
dialog -m proprad proprad
did -r proprad 2
did -o proprad 15 1 %id
did -a proprad 2 %text
if ( %info == $null ) {
did -c proprad 3
}
else {
if ( left isin %info ) { did -c proprad 4 }
elseif ( push isin %info ) { did -c proprad 5 }
else did -c proprad 3
if ( disable isin %info ) { did -c proprad 6 }
if ( hide isin %info ) { did -c proprad 7 }
if ( group isin %info ) { did -c proprad 8 }
if ( result isin %info ) { did -c proprad 9 }
}
}
if ( %type == box ) {
dialog -m propbox propbox
did -r propbox 2
did -o propbox 11 1 %id
did -a propbox 2 %text
if ( %info != $null ) {
if ( disable isin %info ) { did -c propbox 3 }
if ( hide isin %info ) { did -c propbox 4 }
if ( group isin %info ) { did -c propbox 5 }
if ( result isin %info ) { did -c propbox 6 }
}
}
if ( %type == list ) {
dialog -m proplist proplist
did -o proplist 12 1 %id
if ( sort isin %info ) { did -c proplist 1 }
if ( disable isin %info ) { did -c proplist 2 }
if ( hide isin %info ) { did -c proplist 3 }
if ( group isin %info ) { did -c proplist 4 }
if ( result isin %info ) { did -c proplist 5 }
if ( extsel isin %info ) { did -c proplist 10 }
if ( size isin %info ) { did -c proplist 13 }
if ( vsbar isin %info ) { did -c proplist 14 }
if ( hsbar isin %info ) { did -c proplist 15 }
}
if ( %type == combo ) {
dialog -m propcombo propcombo
did -o propcombo 13 1 %id
if ( sort isin %info ) { did -c propcombo 1 }
if ( disable isin %info ) { did -c propcombo 2 }
if ( hide isin %info ) { did -c propcombo 3 }
if ( group isin %info ) { did -c propcombo 4 }
if ( result isin %info ) { did -c propcombo 5 }
if ( edit isin %info ) { did -c propcombo 10 }
if ( drop isin %info ) { did -c propcombo 11 }
if ( size isin %info ) { did -c propcombo 14 }
if ( vsbar isin %info ) { did -c propcombo 15 }
if ( hsbar isin %info ) { did -c propcombo 16 }
}
if ( %type == icon ) {
dialog -m propicon propicon
did -o propicon 2 1 %id
set %var % $+ table.2.item $+ %object $+ .filename
set %filename [ [ %var ] ]
did -o propicon 4 1 %filename
set %var % $+ table.2.item $+ %object $+ .index
set %index [ [ %var ] ]
did -o propicon 6 1 %index
if ( %info != $null ) {
if ( disable isin %info ) { did -c propicon 18 }
if ( hide isin %info ) { did -c propicon 19 }
if ( group isin %info ) { did -c propicon 20 }
if ( result isin %info ) { did -c propicon 21 }
}
}
if ( %type == tab ) {
dialog -m proptab proptab
did -o proptab 2 1 %id
did -o proptab 4 1 %text
}
}
else {
; double click outside of an object... global dialog properties.
dialog -m propdialog propdialog
did -r propdialog 2
set %var % $+ table.2.dialog
set %dbe [ [ %var ] ]
did -a propdialog 2 %dbe
did -r propdialog 6
set %var % $+ table.2.title
set %title [ [ %var ] ]
did -a propdialog 6 %title
set %var % $+ table.2.option
set %option [ [ %var ] ]
if ( dbu isin %option ) { did -c propdialog 8 }
if ( pixels isin %option ) { did -c propdialog 9 }
}
}
drop:{
if ( %dbe.dragtool ) {
; local vars
var %rec, %var, %type, %size, %text, %id, %style, %filename, %index
; save drop location
%mx = $mouse.x
%my = $mouse.y
; snap to grid
if ( %dbe.grid.snap ) {
set %mx $int($calc( %mx / %dbe.grid.width ))
set %my $int($calc( %my / %dbe.grid.height ))
set %mx $calc( %mx * %dbe.grid.width )
set %my $calc( %my * %dbe.grid.height )
}
; prepare to create object %dbe.tooltype
set %var % $+ table.1.item $+ %dbe.tooltype $+ .type
set %type [ [ %var ] ]
set %var % $+ table.1.item $+ %dbe.tooltype $+ .size
; if dropping a tab control, use the controls size
if ( %type == tab ) {
set %var % $+ table.1.tabsize
}
set %size [ [ %var ] ]
set %var % $+ table.1.item $+ %dbe.tooltype $+ .text
set %text $chr(34) $+ [ [ %var ] ] $+ $chr(34)
set %var % $+ table.1.item $+ %dbe.tooltype $+ .style
set %style [ [ %var ] ]
getposandsize %size
if ( %type isin texteditbuttoncheckradioboxtab ) {
//set %size %mx %my %w %h
; %type "text",id,size,style
set %style $dbe.entab(%mx,%my,%style)
set %rec %type %text $+ , 0, $+ %size $+ , %style
addtype1item %rec
; set the nextid
incnextid %tables
}
if ( %type isin listcombo ) {
//set %size %mx %my %w %h
; %type id,size,style
set %style $dbe.entab(%mx,%my,%style)
set %rec %type 0, $+ %size $+ , $+ %style
addtype2item %rec
; set the nextid
incnextid %tables
}
if ( %type == icon ) {
;ask user for icon filename...
set %filename $dir="Select Icon File" *.bmp
;continue only if user entered a filename and it exists
if ( %filename != $null && $exists(%filename) ) {
; convert path to a relative path
set %filename $remove(%filename, $mircdir )
; tbs - need to ask user for the index... use 1 for now
set %index 1
; we want actual size of icon... not size of tool icon!!!!
//set %size %mx %my $pic(%filename).width $pic(%filename).height
; icon id,size,filename,index
set %style $dbe.entab(%mx,%my,%style)
set %rec %type 0, $+ %size $+ , $+ %filename $+ , $+ %index
addtype3item %rec
; set the nextid
incnextid %tables
}
}
; draw the item
paintitem %tables %items %window %dbe.normal.color
; save new contents
drawcopy @dialog 1 1 $window(%window).w $window(%window).h @dialogs 1 1
; dragtool is done
%dbe.dragtool = $false
}
}
uclick:{
; local vars
var %var, %type, %size, %tab, %tabfocus, %id
if ( %dbe.move || %dbe.resize ) {
; did object move or was user changing size? if not user is probably doing a
; double click.
; 10/25/99 3:02PM handle tab control resizing
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .type
set %type [ [ %var ] ]
if ( %type == tab ) {
set %var % $+ table. $+ %tables $+ .tabsize
}
else {
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .size
}
set %size [ [ %var ] ]
getposandsize %size
if ( %x != %c1.x || %y != %c1.y || %dbe.resize ) {
; pos changed or user was resizing, save objects new location and size
set [ [ %var ] ] %c1.x %c1.y %c1.w %c1.h
; if we moved a tab ... adjust all positions of all the controls on it
if ( %dbe.move ) {
if ( %dbe.move && %type == tab ) {
; calc the new offsets
set %dbe.offx $calc(%c1.x - %dbe.orgx)
set %dbe.offy $calc(%c1.y - %dbe.orgy)
; get number of objects in this dialog table
set %var % $+ table. $+ %tables $+ .items
set %object [ [ %var ] ]
:loop
if ( %object != 0 ) {
; skip deleted objects
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .id
set %id [ [ %var ] ]
if ( %id != -1 ) {
; is this object part of the tab?
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .type
set %type [ [ %var ] ]
if ( %type != tab ) {
; object is not part of a tab control... is it on a tab control?
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .tab
set %tab [ [ %var ] ]
if ( %tab != 0 ) {
; object is on a tab... adjust its position
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .size
set %size [ [ %var ] ]
getposandsize %size
set %x $calc(%x + %dbe.offx)
set %y $calc(%y + %dbe.offy)
set [ [ %var ] ] %x %y %w %h
}
}
}
dec %object 1
goto loop
}
}
else {
; moved non-tab object... handle case where we moved it on/off a tab
; %c1.* has the new x y w h of the object... is it within the tab control if any?
set %var % $+ table. $+ %tables $+ .tabsize
set %size [ [ %var ] ]
getposandsize %size
set %var % $+ table. $+ %tables $+ .tabfocus
set %tabfocus [ [ %var ] ]
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .tab
if ( $inrect(%c1.x,%c1.y,%x,%y,%w,%h) ) {
; the control is on a tab... put it on the focustab
set [ [ %var ] ] %tabfocus
}
else {
; object is not on a tab
set [ [ %var ] ] 0
}
}
}
; repaint entire window
drawdialog %tables %window
; save new contents
drawcopy @dialog 1 1 $window(%window).w $window(%window).h @dialogs 1 1
}
; reset moving and resizing flags
set %dbe.move $false
set %dbe.resize $false
}
if ( %dbe.group ) {
; all done drawing group box
set %dbe.group $false
; erase group box
drawcopy @dialogs %dbe.gx %dbe.gy %dbe.gw %dbe.gh @dialog %dbe.gx %dbe.gy
; set the group flag for each object within the group box
var %i = 1, %found = $false, %id, %gxl = -1, %gxr = -1, %gyt = -1, %gyb = -1, %var, %size, %rec
set % $+ table.9.items 0
:loop
if ( %i <= %items ) {
; skip deleted objects
set %var % $+ table. $+ %tables $+ .item $+ %i $+ .id
set %id [ [ %var ] ]
if ( %id != -1 ) {
if ( $isobjectinrect(%tables, %i, %dbe.gx, %dbe.gy, %dbe.gw, %dbe.gh) ) {
set % $+ table. $+ %tables $+ .item $+ %i $+ .group $true
;paintitem %tables %i %dialog %window %dbe.group.color
; save the item
additem 2 %i 9
set %found $true
; keep track of the size of the group
; note: %x %y %w and %h are the objects - set by $isobjectinrect()
if ( %gxl == -1 ) {
; first object
set %gxl %x | set %gxr $calc(%x + %w - 1)
set %gyt %y | set %gyb $calc(%y + %h - 1)
}
else {
; subsequent object ... expand
if ( %x < %gxl ) set %gxl %x
if ( $calc(%x + %w - 1) > %gxr ) set %gxr $calc(%x + %w - 1)
if ( %y < %gyt ) set %gyt %y
if ( $calc(%y + %h - 1) > %gyb ) set %gyb $calc(%y + %h - 1)
}
}
else {
set % $+ table. $+ %tables $+ .item $+ %i $+ .group $false
}
}
inc %i 1
goto loop
}
if ( %found ) {
; set size of group
set %dbe.gx %gxl | set %dbe.gy %gyt
set %dbe.gw $calc(%gxr - %gxl)
set %dbe.gh $calc(%gyb - %gyt)
; create a hidden window to hold the image of the group
window -hp @group 1 1 %dbe.gw $calc(%dbe.gh + 50)
drawcopy @dialog %dbe.gx %dbe.gy %dbe.gw %dbe.gh @group 1 1
; now delete the individual group objects
deletegroup %tables
; replace the objects in the group with one group object
; %type id,size,table,window,org x,org y
set %rec group 0, $+ %dbe.gx %dbe.gy %dbe.gw %dbe.gh $+ ,9,@group, $+ %dbe.gx $+ , $+ %dbe.gy
addtype4item %tables %rec
; now show the group object
paintitem %tables %items %window %dbe.group.color
; set the nextid
incnextid %tables
}
else {
set %dbe.gx 0 | set %dbe.gy 0 | set %dbe.gw 0 | set %dbe.gh 0
unset %table.9.items
}
}
}
Delete:{
; local vars
var %object, %var, %gwin, %type, %id, %tid, %ttype, %tabs, %objects, %focus, %delorder, %focusorder
; is mouse in a dialog object?
%object = $inobject(%mx, %my, %tables)
if ( %object != 0 ) {
; we found an object (%object) that the mouse is in... delete it
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .id
set %id [ [ %var ] ]
set [ [ %var ] ] -1
; if object was group then group dies
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .type
set %type [ [ %var ] ]
if ( %type == group ) {
; don't need the items now
unset %table.9.*
; delete the window holding the image of the group
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .window
set %gwin [ [ %var ] ]
window -c %gwin
}
; if object was a tab then it and all of its controls dies
elseif ( %type == tab ) {
; delete all items on the deleted tab and reorder the remaining tabs to
; take up the position of the deleted tab
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .tab
set %delorder [ [ %var ] ]
set %var % $+ table. $+ %tables $+ .tabs
set %tabs [ [ %var ] ]
; %focusorder is order number of the tab that will get the focus
set %focusorder $iif(%delorder == %tabs,1,%delorder)
set %var % $+ table. $+ %tables $+ .items
set %objects [ [ %var ] ]
:loop
if ( %objects > 0 ) {
; skip deleted items
set %var % $+ table. $+ %tables $+ .item $+ %objects $+ .id
set %tid [ [ %var ] ]
if ( %tid != -1 ) {
set %var % $+ table. $+ %tables $+ .item $+ %objects $+ .type
set %ttype [ [ %var ] ]
; %tab: if type is tab, %tab is order else it's id of the tab the control is on
set %var % $+ table. $+ %tables $+ .item $+ %objects $+ .tab
set %tab [ [ %var ] ]
if ( %ttype != tab ) {
if ( %tab == %id ) {
; this control is on the deleted tab ... delete it too
set %var % $+ table. $+ %tables $+ .item $+ %objects $+ .id
set [ [ %var ] ] -1
}
}
else {
; reorder the remaining tabs after the deleted tab
if ( %tab > %delorder ) {
dec %tab 1
set % $+ table. $+ %tables $+ .item $+ %objects $+ .tab %tab
}
; since the delete tab had the focus we need to assign the focus to another
; tab... use the next tab if any else the 1st tab.
if ( %tab == %focusorder ) {
set %var % $+ table. $+ %tables $+ .item $+ %objects $+ .id
set %focus [ [ %var ] ]
}
}
}
dec %objects 1
goto loop
}
; one less tab control now
dec %tabs 1
set % $+ table. $+ %tables $+ .tabs %tabs
; if we deleted the last tab...
if ( %tabs == 0 ) {
set % $+ table. $+ %tables $+ .tabsize 0 0 0 0
set % $+ table. $+ %tables $+ .tabfocus 0
}
else {
; change the focus
set %var % $+ table. $+ %tables $+ .tabfocus
set [ [ %var ] ] %focus
}
}
; can't just erase object because it may be covering other objects
drawdialog %tables @dialog
}
}
Copy:{
; local vars
var %object, %var
; is mouse in a dialog object?
%object = $inobject(%mx, %my, %tables)
if ( %object != 0 ) {
; we found an object (%object) that the mouse is in... remember its id
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .id
diacopyitem %tables [ [ %var ] ] false no
}
}
Paste:{
; local vars
var %type, %size, %newsize
; ensure we have an item to copy
if ( %dbe.copy.item == $null ) { return }
; we have an item... paste it at current mouse location (%mx, %my)
if ( %dbe.grid.snap ) {
; snap to grid
set %mx $int($calc( %mx / %dbe.grid.width ))
set %my $int($calc( %my / %dbe.grid.height ))
set %mx $calc( %mx * %dbe.grid.width )
set %my $calc( %my * %dbe.grid.height )
}
; we need to know the item type
set %type $gettok(%dbe.copy.item,1,32)
; now add it
if ( %type isin texteditbuttoncheckradiobox ) {
set %size $gettok(%dbe.copy.item,3,44)
getposandsize %size
set %newsize %mx %my %w %h
set %dbe.copy.item $replace(%dbe.copy.item,%size,%newsize)
addtype1item %dbe.copy.item
}
else {
set %size $gettok(%dbe.copy.item,2,44)
getposandsize %size
set %newsize %mx %my %w %h
set %dbe.copy.item $replace(%dbe.copy.item,%size,%newsize)
}
if ( %type isin listcombo ) {
addtype2item %dbe.copy.item
}
if ( %type == icon ) {
addtype3item %dbe.copy.item
}
; all done... show the new item
incnextid %tables
paintitem %tables %items %window %dbe.normal.color
}
-
Details:{
; local vars
var %var, %type, %text, %id, %size, %filename, %index, %style
; show details about an object ... is mouse in a dialog object?
%object = $inobject(%mx, %my, %tables)
if ( %object != 0 ) {
; we found an object (%object) that the mouse is in...
dialog -m propdetails propdetails
; show command details first
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .id
set %id [ [ %var ] ]
did -o propdetails 2 1 %id
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .type
set %type [ [ %var ] ]
did -o propdetails 4 1 %type
if ( %type == tab ) {
set %var % $+ table. $+ %tables $+ .tabsize
}
else {
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .size
}
set %size [ [ %var ] ]
getposandsize %size
did -o propdetails 8 1 %x
did -o propdetails 10 1 %y
did -o propdetails 12 1 %w
did -o propdetails 14 1 %h
; text attribute
if ( %type isin texteditbuttoncheckradioboxtab ) {
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .text
set %text [ [ %var ] ]
did -o propdetails 6 1 %text
}
; only icon has filename and index attributes
if ( %type == icon ) {
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .filename
set %filename [ [ %var ] ]
did -o propdetails 19 1 %filename
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .index
set %index [ [ %var ] ]
did -o propdetails 21 1 %index
}
else {
; all objects except icon have style attribute
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .style
set %style [ [ %var ] ]
did -o propdetails 17 1 %style
}
}
}
Refresh:{
; redraw dialog edit box... first draw the grid
;drawcopy @dialogg 1 1 $window(%window).w $window(%window).h @dialog 1 1
; now the objects
drawdialog 2 %window
}
-
Save:{
; create .bak filename
set %dbe.bfn $nofile(%dbe.tfn) $+ $gettok($nopath(%dbe.tfn),1,46) $+ .bak
; delete .bak file
if ( $exists(%dbe.bfn) ) { remove %dbe.bfn }
; rename table file to .bak
if ( $exists(%dbe.tfn) ) { rename %dbe.tfn %dbe.bfn }
; create new table file
savedialog %tables %dbe.tfn
}
Save as:{
; get filename
%dbe.tfn = $$?="Enter filename:"
if ( %dbe.tfn == $nopath(%dbe.tfn) ) { set %dbe.tfn $scriptdir $+ %dbe.tfn }
; create new table file
savedialog %tables %dbe.tfn
}
-
Test:{
; local vars
var %var
; test current dialog table...
; ... first, set a temporary filename
set %dbe.testfn $scriptdirdbetest.mdt
; ... change the dialog name so it doesn't conflict with one in memory
set %var % $+ table. $+ %tables $+ .dialog
set %dbe.dialog.save [ [ %var ] ]
set [ [ %var ] ] dbetest
; ... save the dialog table to the temporary file
savedialog %tables %dbe.testfn
; ... load it as a script
.load -rs %dbe.testfn
; ... run it
dialog -m test dbetest
; ... clean up
.unload -rs %dbe.testfn
remove %dbe.testfn
; ... reset the dialog name
set %var % $+ table. $+ %tables $+ .dialog
set [ [ %var ] ] %dbe.dialog.save
}
-
Ungroup:{
var %group, %i = 1, %var, %id, %type, %size, %gx, %gy, %dx, %dy, %gitems, %gt, %gwin
; unset the group attribute on all grouped items if cursor is inside a group object
%object = $inobject(%mx, %my, %tables)
if ( %object != 0 ) {
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .type
set %type [ [ %var ] ]
if ( %type == group ) {
; which table are the group members in?
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .table
set %gt [ [ %var ] ]
; get groups position ... we'll need to adjust the group members positions
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .size
set %size [ [ %var ] ]
set %gx $gettok(%size,1,32)
set %gy $gettok(%size,2,32)
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .orgx
set %dx [ [ %var ] ]
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .orgy
set %dy [ [ %var ] ]
; delete the group object now
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .id
set [ [ %var ] ] -1
; calc groups movement delta so we can apply it to the group objects
set %dx $calc(%gx - %dx)
set %dy $calc(%gy - %dy)
; get number of items in the group
set %var % $+ table. $+ %gt $+ .items
set %gitems [ [ %var ] ]
; copy each group member object from the group table to the current table
; and modify its position
:loop
if ( %gitems > 0 ) {
set %var % $+ table. $+ %gt $+ .item $+ %gitems $+ .size
set %size [ [ %var ] ]
getposandsize %size
set %x $calc(%x + %dx)
set %y $calc(%y + %dy)
set % $+ table. $+ %gt $+ .item $+ %gitems $+ .size %x %y %w %h
additem %gt %gitems %tables
dec %gitems 1
goto loop
}
set %var % $+ table. $+ %tables $+ .items
set %items [ [ %var ] ]
; delete the group table
;unset %table. $+ %gt $+ .*
unset %table.9.*
; delete the window holding the image of the group
set %var % $+ table. $+ %tables $+ .item $+ %object $+ .window
set %gwin [ [ %var ] ]
window -c %gwin
; redraw dialog edit box... first draw the grid
drawcopy @dialogg 1 1 $window(%window).w $window(%window).h @dialog 1 1
; now the objects
drawdialog %tables %window
drawcopy @dialog 1 1 $window(%window).w $window(%window).h @dialogs 1 1
}
}
}
-
Close:{
window -c @dialog
window -c @dialogs
window -c @dialogt
unset %table.2*
unset %table.3*
}
}
; menu for toolbar
menu @dialogt {
sclick:{
set %mx $mouse.x
set %my $mouse.y
; is mouse in a dialog object?
%object = $inobject(%mx, %my, 1)
if ( %object != 0 ) {
; we found an object (%object) that the mouse is in...remember it
%dbe.tooltype = %object
}
}
leave:{
if ( $mouse.key & 1 ) {
%dbe.dragtool = $true
}
}
}
; Aliases
;
; inrect - returns $true if specified object is within specified rectangle
; $1 = table, $2 = object number, $3-$6 = x y w h
alias isobjectinrect {
var %rx = $3 + $5, %ry = $4 + $6, %var, %size, %ox, %oy
; get objects position and size
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .size
set %size [ [ %var ] ]
getposandsize %size
%ox = %x + %w
%oy = %y + %h
if ( $3 <= %x && %ox <= %rx ) {
if ($4 <= %y && %oy <= %ry ) { return $true }
}
return $false
}
; inobject - test if x,y location is within an object. If so return object number
; else return 0. NOTE: if x,y is within more than one object (i.e. objects overlap)
; then this returns the number of the smallest object!
;
; 10/25/99 1:36PM - if object is just tab page return the focus tab object
; 10/23/99 3:09PM - also check to see if object is in a tab.. if so only return object
; number of object that is on tabfocus.
; $1=x, $2=y, $3=table
alias inobject {
; local vars
var %io.a, %io.o, %io.tf, %var, %object, %id, %size, %tab, %tabfocus, %type
; keep track of objects size...we want the smallest one!
set %io.a $calc($window(-1).w * $window(-1).h)
set %io.o 0
; get number of objects in this dialog table
set %var % $+ table. $+ $3 $+ .items
set %object [ [ %var ] ]
; tabfocus is the id of tab that has the focus
set %var % $+ table. $+ $3 $+ .tabfocus
set %tabfocus [ [ %var ] ]
:loop
; skip deleted objects
set %var % $+ table. $+ $3 $+ .item $+ %object $+ .id
set %id [ [ %var ] ]
if ( %id != -1 ) {
; remember the object that has the tab focus
if ( %id == %tabfocus ) { set %io.tf %object }
; this is a real object... are the x,y coordinates within this object?
set %var % $+ table. $+ $3 $+ .item $+ %object $+ .size
set %size [ [ %var ] ]
getposandsize %size
if ( $inrect($1,$2,%x,%y,%w,%h) ) {
; is object in a tab ... and if so is it in the focus tab?
set %var % $+ table. $+ $3 $+ .item $+ %object $+ .tab
set %tab [ [ %var ] ]
if ( %tab != 0 ) {
; object is on a tab ... is object a tab?
set %var % $+ table. $+ $3 $+ .item $+ %object $+ .type
set %type [ [ %var ] ]
if ( %type != tab ) {
; object is on a tab ... does that tab have the focus?
if ( %tab != %tabfocus ) { goto next }
}
}
; is the object smaller than any we've seen so far?
if ( $calc(%w * %h) < %io.a ) {
; yes, save this objects info
%io.a = $calc(%w * %h)
%io.o = %object
}
}
}
:next
dec %object 1
if ( %object > 0 ) { goto loop }
; all done... if we don't have an object, see if we are on a tab
if ( %io.o == 0 ) {
set %var % $+ table. $+ $3 $+ .tabsize
set %size [ [ %var ] ]
getposandsize %size
if ( $inrect($1,$2,%x,%y,%w,%h) ) { return %io.tf }
}
; all done... get objects size if we found one
if ( %io.o != 0 ) {
set %var % $+ table. $+ $3 $+ .item $+ %io.o $+ .size
set %size [ [ %var ] ]
getposandsize %size
}
return %io.o
}
; copygroup - copy items with group attribute from one table to another
; $1 is source table, $2 is destination table
alias copygroup {
var %i = 1, %id, %var, %group
:loop
if ( %i <= %items ) {
; skip deleted objects
set %var % $+ table. $+ $1 $+ .item $+ %i $+ .id
set %id [ [ %var ] ]
if ( %id != -1 ) {
set %var % $+ table. $+ $1 $+ .item $+ %i $+ .group
set %group [ [ %var ] ]
if ( %group ) { copyitem $1 %i $2 }
}
inc %i 1
goto loop
}
}
; copyitem - copy specified item from one table to another
; $1 is table to be copied from, $2 is object number, $3 is table to be copied to
; $4 is optional.. its the destination item number, if not specified $2 is used.
alias copyitem {
; local vars
var %srcvar, %destvar, %item
if ( $4 == $null ) { set %item $2 }
else { set %item $4 }
set %srcvar % $+ table. $+ $1 $+ .item $+ $2 $+ .type
set %destvar % $+ table. $+ $3 $+ .item $+ %item $+ .type
set [ [ %destvar ] ] [ [ %srcvar ] ]
set %srcvar % $+ table. $+ $1 $+ .item $+ $2 $+ .text
set %destvar % $+ table. $+ $3 $+ .item $+ %item $+ .text
set [ [ %destvar ] ] [ [ %srcvar ] ]
set %srcvar % $+ table. $+ $1 $+ .item $+ $2 $+ .id
set %destvar % $+ table. $+ $3 $+ .item $+ %item $+ .id
set [ [ %destvar ] ] [ [ %srcvar ] ]
set %srcvar % $+ table. $+ $1 $+ .item $+ $2 $+ .size
set %destvar % $+ table. $+ $3 $+ .item $+ %item $+ .size
set [ [ %destvar ] ] [ [ %srcvar ] ]
set %srcvar % $+ table. $+ $1 $+ .item $+ $2 $+ .style
set %destvar % $+ table. $+ $3 $+ .item $+ %item $+ .style
set [ [ %destvar ] ] [ [ %srcvar ] ]
set %srcvar % $+ table. $+ $1 $+ .item $+ $2 $+ .filename
set %destvar % $+ table. $+ $3 $+ .item $+ %item $+ .filename
set [ [ %destvar ] ] [ [ %srcvar ] ]
set %srcvar % $+ table. $+ $1 $+ .item $+ $2 $+ .index
set %destvar % $+ table. $+ $3 $+ .item $+ %item $+ .index
set [ [ %destvar ] ] [ [ %srcvar ] ]
set %srcvar % $+ table. $+ $1 $+ .item $+ $2 $+ .group
set %destvar % $+ table. $+ $3 $+ .item $+ %item $+ .group
set [ [ %destvar ] ] [ [ %srcvar ] ]
set %srcvar % $+ table. $+ $1 $+ .item $+ $2 $+ .table
set %destvar % $+ table. $+ $3 $+ .item $+ %item $+ .table
set [ [ %destvar ] ] [ [ %srcvar ] ]
set %srcvar % $+ table. $+ $1 $+ .item $+ $2 $+ .window
set %destvar % $+ table. $+ $3 $+ .item $+ %item $+ .window
set [ [ %destvar ] ] [ [ %srcvar ] ]
set %srcvar % $+ table. $+ $1 $+ .item $+ $2 $+ .tab
set %destvar % $+ table. $+ $3 $+ .item $+ %item $+ .tab
set [ [ %destvar ] ] [ [ %srcvar ] ]
set %srcvar % $+ table. $+ $1 $+ .tabsize
set %destvar % $+ table. $+ $3 $+ .tabsize
set [ [ %destvar ] ] [ [ %srcvar ] ]
}
; additem - add specified item from one table to another
; $1 is table to be copied from, $2 is object number, $3 is table to be copied to
alias additem {
; local vars
var %i, %srcvar, %destvar
; get number of items in destination table, inc it, and use it as the dest item number
set %destvar % $+ table. $+ $3 $+ .items
set %i [ [ %destvar ] ]
inc %i 1
set [ [ %destvar ] ] %i
; now copy
copyitem $1 $2 $3 %i
}
; dbu.size - convert a size in pixels to dbus
; $1 = x y w h
alias dbu.size {
var %size
getposandsize $1
set %x $dbu.x(%x)
set %y $dbu.y(%y)
set %w $dbu.x(%w)
set %h $dbu.y(%h)
set %size %x %y %w %h
return %size
}
; dbu.x - convert pixel x to dbu
; $1 = x
alias dbu.x {
return $round($calc($1 / %dbe.unit),0)
}
; dbu.y - convert pixel y to dbu
; $1 = y
alias dbu.y {
return $round($calc($1 / %dbe.unit),0)
}
; pixels.size - convert a size in dbus to pixels
; $1 = x y w h
alias pixels.size {
var %size
getposandsize $1
set %x $pixels.x(%x)
set %y $pixels.y(%y)
set %w $pixels.x(%w)
set %h $pixels.y(%h)
set %size %x %y %w %h
return %size
}
; pixels.x - convert dbu x to pixels
; $1 = x
alias pixels.x {
return $round($calc($1 * %dbe.unit),0)
}
; pixels.y - convert dbu y to pixels
; $1 = y
alias pixels.y {
return $round($calc($1 * %dbe.unit),0)
}
; F10 - short-cut to uninstall
alias F10 {
dbe.uninstall
}
; install this script - executed once when the script is loaded
alias -l install {
if ( $version < 5.61 ) {
echo 4 -s $nopath($script) requires mIRC version 5.61 or later!
dbe.uninstall
}
if ( %dbe.ver != $null ) {
echo 7 -s $nopath($script) is already loaded!
halt
}
; set script version number
%dbe.ver = 2.3
; load the dialog tables
.load -rs dbe\dbeconfig.mdt
.load -rs dbe\propbox.mdt
.load -rs dbe\propbutt.mdt
.load -rs dbe\propchk.mdt
.load -rs dbe\propcombo.mdt
.load -rs dbe\propdetails.mdt
.load -rs dbe\propdialog.mdt
.load -rs dbe\propedit.mdt
.load -rs dbe\propicon.mdt
.load -rs dbe\proplist.mdt
.load -rs dbe\proprad.mdt
.load -rs dbe\proptext.mdt
.load -rs dbe\proptab.mdt
; check for presence of required scripts here and uninstall if not found
; ...
; show user we are loaded
echo 12 -s $nopath($script) version %dbe.ver is installed and running.
}
; initialize this script - executed each time you run mIRC.
alias -l initialize {
.load -rs $scriptdirdbeprops.mrc
set %dbe.gx 0 | set %dbe.gy 0 | set %dbe.gw 0 | set %dbe.gh 0
set %dbe.normal.color 1
set %dbe.group.color 10
;set %dbe.font MS Sans Serif
set %dbe.font "MS Sans Serif"
set %dbe.fontsize 16
set %dbe.fw $width(X,%dbe.font,%dbe.fontsize,0,0)
set %dbe.fh $height(X,%dbe.font,%dbe.fontsize)
set %dbe.wx 1
set %dbe.wy 1
set %dbe.ww 1000
set %dbe.wh 600
if ( %dbe.grid.width == $null ) set %dbe.grid.width 10
if ( %dbe.grid.height == $null ) set %dbe.grid.height 10
if ( %dbe.grid.snap == $null ) set %dbe.grid.snap 1
%tables = 0
reinitialize
; create grid window
dbemakegrid
}
alias -l dbemakegrid {
; delete old grid window if any
if ( $window(@dialogg).state != $null ) { window -c @dialogg }
; create grid window
window -hp @dialogg 1 1 $window(-1).w $window(-1).h
; create a small window that contains the grid for one row
window -hp @dialogc 1 1 $window(-1).w 38
var %c = %dbe.grid.width
:loopc
if ( %c < $window(-1).w ) {
drawdot @dialogc 14 1 %c 1
inc %c %dbe.grid.width
goto loopc
}
; now fill the grid window
var %r = %dbe.grid.height
:loopr
if ( %r < $window(-1).h ) {
drawcopy @dialogc 1 1 $window(-1).w 1 @dialogg 1 %r
inc %r %dbe.grid.height
goto loopr
}
window -c @dialogc
}
alias -l reinitialize {
set %dbe.dragtool $false
; set the dbu constant for the current screen size...1152 x 864
set %dbe.dbu 2.5
set %dbe.unit 1
unset %table*
}
; uninstall this script
; $1 = $null if we should unload. The Update script pass $true so we don't unload.
; It does so so this alias will return rather than halt.
alias dbe.uninstall {
; stop timers
;.timerdbe* off
; disable groups
;.disable #dbe
window -c @dialog
window -c @dialogg
window -c @dialogs
window -c @dialogt
window -c @group
; unset variables
unset %dbe*
unset %table*
unset %x
unset %y
unset %w
unset %h
unset %style
unset %fname
unset %items
unset %window
unset %mx
unset %my
unset %object
unset %c1*
; unload the dialog tables
.unload -rs dbeconfig.mdt
.unload -rs propbox.mdt
.unload -rs propbutt.mdt
.unload -rs propchk.mdt
.unload -rs propcombo.mdt
.unload -rs propdetails.mdt
.unload -rs propdialog.mdt
.unload -rs propedit.mdt
.unload -rs propicon.mdt
.unload -rs proplist.mdt
.unload -rs proprad.mdt
.unload -rs proptext.mdt
.unload -rs proptab.mdt
; set var so user can quick install us via F11 key if user is running our install script
%isd = $script
.unload -rs dbeprops.mrc
; unload the script
echo 12 -s $nopath($script) was uninstalled.
if ( $1 == $null ) {
.unload -rs $script | halt
}
}