Dialog Box Editor (DBE) — File Browser
DialogBoxEditorDBEv2.3 / DialogBoxEditorDBEv2.3 / dbeprops.mrc
dbeprops.mrc — 38.11 KB — Download this file
; DBEProps.mrc - part of the mIRC DBE 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 history information
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; text properties events
on 1:dialog:proptext:sclick:5:{
; local vars
var %var, %size, %id, %text
; erase object
set %var % $+ table.2.item $+ %object $+ .size
set %size [ [ %var ] ]
getposandsize %size
drawcopy @dialogg %x %y %w %h @dialog %x %y
; set the new properties...
set %id $did($dname,10).text
if ( %id != $null ) { set % $+ table.2.item $+ %object $+ .id %id }
set %text $did($dname,2).text
set % $+ table.2.item $+ %object $+ .text %text
unset %style
if ( $did(4).state ) set %style %style $+ ,center
if ( $did(8).state ) set %style %style $+ ,right
if ( $did(12).state ) set %style %style ,disable
if ( $did(13).state ) set %style %style ,hide
if ( $did(14).state ) set %style %style ,group
if ( $did(15).state ) set %style %style ,result
set % $+ table.2.item $+ %object $+ .style %style
; repaint
paintitem 2 %object @dialog %dbe.normal.color
}
; edit box properties events
on 1:dialog:propedit:sclick:21:{
; local vars
var %var, %size, %id, %text
; erase object
set %var % $+ table.2.item $+ %object $+ .size
set %size [ [ %var ] ]
getposandsize %size
drawcopy @dialogg %x %y %w %h @dialog %x %y
; set the new properties
set %id $did($dname,24).text
if ( %id != $null ) { set % $+ table.2.item $+ %object $+ .id %id }
set %text $did($dname,2).text
set % $+ table.2.item $+ %object $+ .text %text
unset %style
if ( $did(4).state ) set %style %style ,center
if ( $did(5).state ) set %style %style ,right
if ( $did(6).state ) set %style %style ,multi
if ( $did(7).state ) set %style %style ,pass
if ( $did(8).state ) set %style %style ,read
if ( $did(9).state ) set %style %style ,return
if ( $did(10).state ) set %style %style ,disable
if ( $did(11).state ) set %style %style ,hide
if ( $did(12).state ) set %style %style ,group
if ( $did(13).state ) set %style %style ,result
if ( $did(14).state ) set %style %style ,hsbar
if ( $did(15).state ) set %style %style ,autohs
if ( $did(16).state ) set %style %style ,vsbar
if ( $did(17).state ) set %style %style ,autovs
set % $+ table.2.item $+ %object $+ .style %style
; repaint
paintitem 2 %object @dialog %dbe.normal.color
}
; button properties events
on 1:dialog:propbutt:sclick:11:{
; local vars
var %var, %size, %id, %tab, %text
; erase object
set %var % $+ table.2.item $+ %object $+ .size
set %size [ [ %var ] ]
getposandsize %size
drawcopy @dialogg %x %y %w %h @dialog %x %y
; set the new properties
set %id $did($dname,16).text
if ( %id != $null ) { set % $+ table.2.item $+ %object $+ .id %id }
set %tab $did($dname,18).text
set % $+ table.2.item $+ %object $+ .tab %tab
set %text $did($dname,2).text
set % $+ table.2.item $+ %object $+ .text %text
unset %style
if ( $did(3).state ) set %style %style ,default
if ( $did(5).state ) set %style %style ,ok
if ( $did(6).state ) set %style %style ,cancel
if ( $did(7).state ) set %style %style ,disable
if ( $did(8).state ) set %style %style ,hide
if ( $did(9).state ) set %style %style ,group
if ( $did(10).state ) set %style %style ,result
set % $+ table.2.item $+ %object $+ .style %style
; repaint
paintitem 2 %object @dialog %dbe.normal.color
}
; check box properties events
on 1:dialog:propchk:sclick:11:{
; local vars
var %var, %size, %id, %text
; erase object
set %var % $+ table.2.item $+ %object $+ .size
set %size [ [ %var ] ]
getposandsize %size
drawcopy @dialogg %x %y %w %h @dialog %x %y
; set the new properties
set %id $did($dname,16).text
if ( %id != $null ) { set % $+ table.2.item $+ %object $+ .id %id }
set %text $did($dname,2).text
set % $+ table.2.item $+ %object $+ .text %text
unset %style
if ( $did(3).state ) set %style %style ,3state
if ( $did(5).state ) set %style %style ,left
if ( $did(6).state ) set %style %style ,push
if ( $did(7).state ) set %style %style ,disable
if ( $did(8).state ) set %style %style ,hide
if ( $did(9).state ) set %style %style ,group
if ( $did(10).state ) set %style %style ,result
set % $+ table.2.item $+ %object $+ .style %style
; repaint
paintitem 2 %object @dialog %dbe.normal.color
}
; button properties events
on 1:dialog:proprad:sclick:10:{
; local vars
var %var, %size, %id, %text
; erase object
set %var % $+ table.2.item $+ %object $+ .size
set %size [ [ %var ] ]
getposandsize %size
drawcopy @dialogg %x %y %w %h @dialog %x %y
; set the new properties
set %id $did($dname,15).text
if ( %id != $null ) { set % $+ table.2.item $+ %object $+ .id %id }
set %text $did($dname,2).text
set % $+ table.2.item $+ %object $+ .text %text
unset %style
if ( $did(4).state ) set %style %style ,left
if ( $did(5).state ) set %style %style ,push
if ( $did(6).state ) set %style %style ,disable
if ( $did(7).state ) set %style %style ,hide
if ( $did(8).state ) set %style %style ,group
if ( $did(9).state ) set %style %style ,result
set % $+ table.2.item $+ %object $+ .style %style
; repaint
paintitem 2 %object @dialog %dbe.normal.color
}
; box properties events
on 1:dialog:propbox:sclick:7:{
; local vars
var %var, %size, %id, %text
; erase object
;;set %var % $+ table.2.item $+ %object $+ .size
;set %size [ [ %var ] ]
;getposandsize %size
;drawcopy @dialogg %x %y %w %h @dialog %x %y
; set the new properties
set %id $did($dname,11).text
if ( %id != $null ) { set % $+ table.2.item $+ %object $+ .id %id }
set %text $did($dname,2).text
set % $+ table.2.item $+ %object $+ .text %text
unset %style
if ( $did(3).state ) set %style %style ,disable
if ( $did(4).state ) set %style %style ,hide
if ( $did(5).state ) set %style %style ,group
if ( $did(6).state ) set %style %style ,result
set % $+ table.2.item $+ %object $+ .style %style
; redraw entire dialog box
drawdialog 2 @dialog
}
; list box properties events
on 1:dialog:proplist:sclick:6:{
; local vars
var %var, %size, %id, %text
; erase object
set %var % $+ table.2.item $+ %object $+ .size
set %size [ [ %var ] ]
getposandsize %size
drawcopy @dialogg %x %y %w %h @dialog %x %y
; set the new properties
set %id $did($dname,12).text
if ( %id != $null ) { set % $+ table.2.item $+ %object $+ .id %id }
unset %style
if ( $did(1).state ) set %style %style ,sort
if ( $did(2).state ) set %style %style ,disable
if ( $did(3).state ) set %style %style ,hide
if ( $did(4).state ) set %style %style ,group
if ( $did(5).state ) set %style %style ,result
if ( $did(10).state ) set %style %style ,extsel
if ( $did(13).state ) set %style %style ,size
if ( $did(14).state ) set %style %style ,vsbar
if ( $did(15).state ) set %style %style ,hsbar
set % $+ table.2.item $+ %object $+ .style %style
; repaint
paintitem 2 %object @dialog %dbe.normal.color
}
; combo box properties events
on 1:dialog:propcombo:sclick:6:{
; local vars
var %var, %size, %id, %text
; erase object
;set %var % $+ table.2.item $+ %object $+ .size
;set %size [ [ %var ] ]
;getposandsize %size
;drawcopy @dialogg %x %y %w %h @dialog %x %y
; set the new properties
set %id $did($dname,13).text
if ( %id != $null ) { set % $+ table.2.item $+ %object $+ .id %id }
unset %style
if ( $did(1).state ) set %style %style ,sort
if ( $did(2).state ) set %style %style ,disable
if ( $did(3).state ) set %style %style ,hide
if ( $did(4).state ) set %style %style ,group
if ( $did(5).state ) set %style %style ,result
if ( $did(10).state ) set %style %style ,edit
if ( $did(11).state ) set %style %style ,drop
if ( $did(14).state ) set %style %style ,size
if ( $did(15).state ) set %style %style ,vsbar
if ( $did(16).state ) set %style %style ,hsbar
set % $+ table.2.item $+ %object $+ .style %style
; repaint
;paintitem 2 %object @dialog %dbe.normal.color
; we redraw the entire dialog because if we just erase the object and repaint it
; it may cover up objects underneath it
drawdialog 2 @dialog
}
; icon properties events - Ok button
on 1:dialog:propicon:sclick:7:{
; local vars
var %id, %text, %filename, %index
; set the new properties
set %id $did($dname,2).text
if ( %id != $null ) { set % $+ table.2.item $+ %object $+ .id %id }
; ensure filename has a relative path
set %filename $did($dname,4).text
set %filename $remove(%filename, $mircdir )
if ( $exists(%filename) == $false ) {
; file doesn't exist!
did -f propicon 4
.timerdbeerror -m 1 10 /dbeerror propicon "File doesn't exist!"
halt
}
set % $+ table.2.item $+ %object $+ .filename %filename
set %index $did($dname,6).text
set % $+ table.2.item $+ %object $+ .index %index
unset %style
if ( $did(18).state ) set %style %style ,disable
if ( $did(19).state ) set %style %style ,hide
if ( $did(20).state ) set %style %style ,group
if ( $did(21).state ) set %style %style ,result
set % $+ table.2.item $+ %object $+ .style %style
;drawcopy @dialogg 1 1 $window(@dialog).w $window(@dialog).h @dialog 1 1
drawdialog 2 @dialog
}
; icon properties events - ... (Browse) button
on 1:dialog:propicon:sclick:9:{
; we can't use $dir= in a dialog event, so use a timer to run an alias
.timerdbetimer -m 1 10 /dbegeticonfn 4
}
; dbegeticonfn - get icon filename - called by propicon dialog event when browse button is pressed.
; $1 is filename object number in icon dialog box
alias -l dbegeticonfn {
var %filename
set %filename $dir="Select Icon File" *.bmp
if ( %filename != $null && $exists(%filename) ) {
; convert path to a relative path
set %filename $remove(%filename, $mircdir )
did -o propicon $1 1 %filename
}
}
; tab properties events
on 1:dialog:proptab:sclick:5:{
; local vars
var %var, %size, %id, %text
; erase object
set %var % $+ table.2.item $+ %object $+ .size
set %size [ [ %var ] ]
getposandsize %size
drawcopy @dialogg %x %y %w %h @dialog %x %y
; set the new properties...
set %id $did($dname,2).text
if ( %id != $null ) { set % $+ table.2.item $+ %object $+ .id %id }
set %text $did($dname,4).text
set % $+ table.2.item $+ %object $+ .text %text
; repaint
paintitem 2 %object @dialog %dbe.normal.color
}
; dialog properties events
on 1:dialog:propdialog:sclick:3:{
var %text, %var, %size
set %text $did($dname,2).text
set % $+ table.2.dialog %text
set %text $did($dname,6).text
set % $+ table.2.title %text
titlebar @dialog %text
set %var % $+ table.2.size
set %size [ [ %var ] ]
getposandsize %size
if ( $did(8).state ) {
set % $+ table.2.option dbu
}
if ( $did(9).state ) {
set % $+ table.2.option pixels
}
}
; misc aliases
;
; getposandsize - set %x %y %w %h from $1-$4
alias getposandsize {
%x = $1
%y = $2
%w = $3
%h = $4
}
; deletegroup - delete all group items from specified table
; $1 = table
alias deletegroup {
var %i = 1, %id, %var, %group, %size
: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 ) {
; mark the item as deleted
set % $+ table. $+ $1 $+ .item $+ %i $+ .id -1
set %var % $+ table. $+ $1 $+ .item $+ %i $+ .size
set %size [ [ %var ] ]
getposandsize %size
drawcopy @dialogg %x %y %w %h @dialog %x %y
}
}
inc %i 1
goto loop
}
}
; paintgroup - display a group of items from specified table
; $1 = table
alias paintgroup {
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 ) { paintitem $1 %i %window %dbe.group.color }
}
inc %i 1
goto loop
}
}
; paintitem - display a table item
; $1 is the table number, $2 is the item number, $3 is the window, $4 is the color
alias paintitem {
%dbe.win = %window
%window = $3
; get fields common to all types
var %var, %size, %type, %text, %table, %gwindow, %tabfocus, %tab, %id
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .size
set %size [ [ %var ] ]
; get type
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .type
set %type [ [ %var ] ]
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .style
set %style [ [ %var ] ]
; don't paint items on tabs unless they are on the focus tab
set %var % $+ table. $+ $1 $+ .tabfocus
; tabfocus is the id of tab that has the focus
set %tabfocus [ [ %var ] ]
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .tab
; tab is the id of the tab this item is on. 0 means this item isn't on a tab.
set %tab [ [ %var ] ]
; don't paint items that are on hidden tabs
if ( %type != tab && %tab != 0 && %tab != %tabfocus ) { return }
; process by type
if ( %type == text ) {
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .text
set %text [ [ %var ] ]
diadrawtext $4 %size %type %text
}
if ( %type == edit ) {
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .text
set %text [ [ %var ] ]
drawrect %window $4 1 %size
diadrawtext $4 %size %type %text
}
if ( %type == button ) {
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .text
set %text [ [ %var ] ]
set %style center
drawrect %window $4 2 %size
diadrawtext $4 %size %type %text
}
if ( %type isin checkradio ) {
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .text
set %text [ [ %var ] ]
; push button type?
if ( push isin %style ) {
drawrect %window $4 2 %size
set %style center
diadrawtext $4 %size %type %text
}
else {
getposandsize %size
; calc space between the check box or radio button and the text.
var %dbe.space
set %dbe.space $calc(%dbe.fw + (%dbe.fw / 2))
; text on left or right of radio button
if ( left isin %style ) {
diadrawtext $4 %x %y $calc(%w - (%dbe.fw + 2)) %h %type %text
if ( %type == check ) {
drawrect %window $4 1 $calc(%x + $width(%text,%dbe.font,%dbe.fontsize,0,0) + %dbe.space) $calc(%y + ((%h - %dbe.fw) / 2))) %dbe.fw %dbe.fw
}
else {
drawrect -e %window $4 1 $calc(%x + $width(%text,%dbe.font,%dbe.fontsize,0,0) + %dbe.space) $calc(%y + ((%h - %dbe.fw) / 2))) %dbe.fw %dbe.fw
}
}
else {
if ( %type == check ) {
drawrect %window $4 1 %x $calc(%y + ((%h - %dbe.fw) / 2))) %dbe.fw %dbe.fw
}
else {
drawrect -e %window $4 1 %x $calc(%y + ((%h - %dbe.fw) / 2))) %dbe.fw %dbe.fw
}
diadrawtext $4 $calc(%x + %dbe.space) %y $calc(%w - %dbe.space) %h %type %text
}
}
}
if ( %type == box ) {
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .text
set %text [ [ %var ] ]
getposandsize %size
;drawrect %window 15 1 %x $calc(%y + (%dbe.fh / 2)) %w $calc(%h - (%dbe.fh / 2))
drawrect %window $4 1 %x $calc(%y + (%dbe.fh / 2)) %w $calc(%h - (%dbe.fh / 2))
diadrawtext $4 $calc(%x + %dbe.fw) %y %w %h %type %text
}
if ( %type == list ) {
diadrawlistbox %size $4
}
if ( %type == combo ) {
getposandsize %size
drawrect %window $4 1 %x %y %w 21
var %drop = no
if ( drop isin %style ) { set %drop drop }
diadrawlistbox %x $calc(%y + 24) %w $calc(%h - 24) $4 %drop
}
if ( %type == icon ) {
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .filename
set %fname [ [ [ %var ] ] ]
getposandsize %size
; draw the icon within the allotted size...center it if it's smaller
var %pic.fn, %pic.w, %pic.h, %pic.fit, %pic.x, %pic.y, %pic.size
;set %pic.fn $scriptdir $+ $nopath(%fname)
set %pic.fn %fname
set %pic.w $pic(%fname).width
set %pic.h $pic(%fname).height
set %pic.x %x
set %pic.y %y
; assume pic is larger than allotted size
set %pic.fit 0
if ( %pic.w <= %w ) {
; icon is narrower... center it
set %pic.x $calc(%x + ((%w - %pic.w)/2))
set %pic.fit 1
}
if ( %pic.h <= %h ) {
; ; icon is shorter... center it
set %pic.y $calc(%y + ((%h - %pic.h)/2))
inc %pic.fit 2
}
set %pic.size $iif( %w < %h , %w , %h )
; if icon fits inside the area... draw it centered
if ( %pic.fit == 3 ) { drawpic %window %pic.x %pic.y %fname }
; if it fits width wise but not height wise
elseif ( %pic.fit == 1 ) {
drawpic -s %window $calc(%x + ((%w - %pic.size)/2)) %y %pic.size %pic.size %fname
}
; if it fits height wise but not width wise
elseif ( %pic.fit == 2 ) {
drawpic -s %window %x $calc(%y + ((%h - %pic.size)/2)) %pic.size %pic.size %fname
}
; if it doesn't fit at all...shrink it
else { drawpic -s %window %x %y %w %h %fname }
drawrect %window $4 1 %size
}
if ( %type == group ) {
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .table
set %table [ [ %var ] ]
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .window
set %gwindow [ [ %var ] ]
getposandsize %size
drawcopy %gwindow 1 1 %w %h %window %x %y
drawrect %window %dbe.group.color 1 %size
}
if ( %type == tab ) {
; draw the tab control
drawtab $1 $2 $3 $4
}
%window = %dbe.win
}
; drawtab - draw a tab control
; $1 is the table number, $2 is the item number, $3 is the window, $4 is the color
alias drawtab {
var %var, %tabfocus, %id, %size, %focustab, %tabs, %tab, %items, %nexttab, %type, %text, %width, %newx
set %var % $+ table. $+ $1 $+ .tabfocus
; tabfocus is the id of the tab that has the focus
set %tabfocus [ [ %var ] ]
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .id
; id is the id of this item
set %id [ [ %var ] ]
set %var % $+ table. $+ $1 $+ .tabsize
set %size [ [ %var ] ]
getposandsize %size
set %h $calc(%dbe.fh * 2)
drawrect $3 $4 1 %size
; search all tab items in order and draw their names
set %var % $+ table. $+ $1 $+ .tabs
set %tabs [ [ %var ] ]
if ( %tabs == $null ) { return }
set %nexttab 1
set %width 0
set %style center
:loop
if ( %nexttab <= %tabs ) {
set %var % $+ table. $+ $1 $+ .items
set %items [ [ %var ] ]
:loop2
if ( %items != 0 ) {
; skip deleted items
set %var % $+ table. $+ $1 $+ .item $+ %items $+ .id
set %id [ [ %var ] ]
if ( %id != -1 ) {
set %var % $+ table. $+ $1 $+ .item $+ %items $+ .type
set %type [ [ %var ] ]
if ( %type == tab ) {
set %var % $+ table. $+ $1 $+ .item $+ %items $+ .tab
set %tab [ [ %var ] ]
if ( %tab == %nexttab ) {
set %var % $+ table. $+ $1 $+ .item $+ %items $+ .text
set %text [ [ %var ] ]
set %w $calc($width(%text,%dbe.font,%dbe.fontsize,0,0) + (5 * %dbe.fw)))
set %newx $calc(%x + %width)
if ( %id == %tabfocus ) {
diadrawtext %dbe.group.color %newx %y %w %h button %text
}
else {
diadrawtext %dbe.normal.color %newx %y %w %h button %text
}
; save the tab's pos and size so we can tell when user clicks on it
set %var % $+ table. $+ $1 $+ .item $+ %items $+ .size
set [ [ %var ] ] %newx %y %w %h
set %width $calc(%width + %w)
goto nextloop
}
}
}
dec %items 1
goto loop2
}
:nextloop
inc %nexttab 1
goto loop
}
}
; diadrawlistbox
; $1 = x, $2 = y, $3 = w $4 = h, $5 = color, $6 = drop
alias diadrawlistbox {
; seems the height of these things grows by font height...kinda
var %lh
set %lh $int( $calc(($4 - 6) / 20)))
if ( %lh < 0 ) { set %lh 0 }
if ( %lh > 3 ) { inc %lh 1 }
if ( %lh > 8 ) { inc %lh 1 }
if ( %lh > 12 ) { inc %lh 1 }
set %lh $calc((%dbe.fh * %lh) + 6)
if ( $6 == drop ) {
drawrect -c %window $5 1 $1 $2 $3 %lh
}
else {
drawrect %window $5 1 $1 $2 $3 %lh
}
; show overhang
if ( %lh < $4 ) {
drawrect -c %window $5 1 $1 $calc($2 + %lh) $3 $calc($4 - %lh)
}
}
; drawdialog - draw a dialog box from a dialog table
; $1 is the table number, $2 is the window
alias drawdialog {
; local vars
var %var, %objects, %id
; erase the window
drawcopy @dialogg 1 1 $window($2).w $window($2).h $2 1 1
; process table
set %var % $+ table. $+ $1 $+ .items
set %objects [ [ %var ] ]
:loop
if ( %objects > 0 ) {
; skip deleted objects (ones with id==-1)
set %var % $+ table. $+ $1 $+ .item $+ %objects $+ .id
set %id [ [ %var ] ]
if ( %id != -1 ) {
; paint this object
paintitem $1 %objects $2 %dbe.normal.color
}
dec %objects 1
goto loop
}
}
; convert - read a dialog table file into memory
; $1 is optional filename
alias convert {
if ( $1 == $null ) {
; get the dialog table filename
set %dbe.tfn $dir="Select a dialog table file" $scriptdir*.mdt
}
else {
%dbe.tfn = $1
}
if ( %dbe.tfn == $null ) { return }
if ( $exists(%dbe.tfn) == $false ) {
; create a new table
inc %tables 1
var %fn = $gettok($nopath(%dbe.tfn),1,46)
set % $+ table. $+ %tables $+ .dialog %fn
set % $+ table. $+ %tables $+ .title $+ $chr(34) $+ %fn $+ $chr(34)
set % $+ table. $+ %tables $+ .size -1 -1 -1 -1
set % $+ table. $+ %tables $+ .option dbu
set % $+ table. $+ %tables $+ .items 0
set % $+ table. $+ %tables $+ .tabs 0
set % $+ table. $+ %tables $+ .tabfocus 0
set % $+ table. $+ %tables $+ .tabsize 0 0 0 0
set % $+ table. $+ %tables $+ .nextid 1
set %items 0
return
}
; open table file and find the first dialog
var %l = $lines(%dbe.tfn), %option, %units, %var
var %i = 1, %rec, %type, %size
:loop
if ( %i <= %l ) {
%rec = $read -nl $+ %i %dbe.tfn
; check for comment
if ( $left(%rec,1) == $asc(59) ) goto loopnext
; not comment... get record type
%type = $gettok(%rec,1,32)
; handle the record type
if ( %type == dialog ) {
; we have another dialog table
inc %tables 1
%items = 0
; create the var that will handle this dialog table
set % $+ table. $+ %tables $+ .dialog $gettok(%rec,2,32)
; option was introduced in mIRC 5.61 ... older tables will not have it so we
; initialize the option to "none" which ensures we will NOT save an option
; unless the user sets one.
set % $+ table. $+ %tables $+ .option none
set % $+ table. $+ %tables $+ .tabs 0
set % $+ table. $+ %tables $+ .tabfocus 0
set % $+ table. $+ %tables $+ .tabsize 0 0 0 0
; assume units are in pixels incase we don't see an option statement
set %option pixels
set %units pixels
goto loopnext
}
if ( %type == title ) {
; strip quotes if any
set % $+ table. $+ %tables $+ .title $remove($gettok(%rec,2-,32),$chr(34))
goto loopnext
}
if ( %type == size ) {
set % $+ table. $+ %tables $+ .size $gettok(%rec,2-,32)
goto loopnext
}
if ( %type == option ) {
; get the option
set %option $gettok(%rec,2,32)
set % $+ table. $+ %tables $+ .option %option
if ( pixels isin %option ) {
set %units pixels
set %dbe.unit 1
}
if ( dbu isin %option ) {
set %units dbu
set %dbe.unit %dbe.dbu
}
goto loopnext
}
if ( %type isin texteditbuttoncheckradioboxtab ) {
addtype1item %rec
goto loopnext
}
if ( %type isin listcombo ) {
addtype2item %rec
goto loopnext
}
if ( %type == icon ) {
addtype3item %rec
goto loopnext
}
:loopnext
inc %i 1
goto loop
}
set %var % $+ table. $+ %tables $+ .size
set %size [ [ %var ] ]
getposandsize %size
; convert the size from dbu's to pixels here
if ( %units == dbu ) {
if ( %x != -1 ) {
; mIRC v5.61 bug? it doesn't adjust x and y in size statement
;%dbe.wx = $pixels.x(%x)
;%dbe.wy = $pixels.y(%y)
%dbe.wx = %x
%dbe.wy = %y
; add border width
set %dbe.ww $round($calc($pixels.x(%w) + (6 * %dbe.unit)),0)
; add height of titlebar
set %dbe.wh $round($calc($pixels.y(%h) + (25 * %dbe.unit)),0)
}
}
else {
set %dbe.wx %x
set %dbe.wy %y
set %dbe.ww $round($calc(%w + 6),0)
set %dbe.wh $round($calc(%h + 25),0)
}
; set the nextid
incnextid %tables
; everything is in pixels now
set %units pixels
set %dbe.unit 1
}
; addtype1item - add a type one item to the current table
; $1- are the parameters: type text,id,x y w h,styles
alias addtype1item {
; local vars
var %rec, %type, %params, %text, %id, %var, %tabs, %style
;//echo -s addtype1item: 1 = $1 2 = $2 3 = $3 4 = $4 5 = $5 6 = $6 7 = $7 8 = $8 9 = $9
set %rec $1-
set %type $gettok(%rec,1,32)
inc %items 1
set % $+ table. $+ %tables $+ .item $+ %items $+ .type %type
set %params $gettok(%rec,2-,32)
set %text $gettok(%params,1,44)
set %text $mid(%text,2,$calc($len(%text) - 2))
set % $+ table. $+ %tables $+ .item $+ %items $+ .text %text
set %id $gettok(%params,2,44)
set %id $remove(%id,$chr(32))
if ( %id == 0 ) {
set %var % $+ table. $+ %tables $+ .nextid
set %id [ [ %var ] ]
}
set % $+ table. $+ %tables $+ .item $+ %items $+ .id %id
set % $+ table. $+ %tables $+ .item $+ %items $+ .size $pixels.size($gettok(%params,3,44))
dbe.detab %tables %items $gettok(%params,4-,44)
; extra tab processing
if ( %type == tab ) {
; update number of tabs in this dialog table
set %var % $+ table. $+ %tables $+ .tabs
set %tabs [ [ %var ] ]
inc %tabs 1
set [ [ %var ] ] %tabs
if ( %tabs == 1 ) {
; first tab
set %var % $+ table. $+ %tables $+ .tabsize
set [ [ %var ] ] $pixels.size($gettok(%params,3,44))
set %var % $+ table. $+ %tables $+ .tabfocus
set [ [ %var ] ] %id
}
set % $+ table. $+ %tables $+ .item $+ %items $+ .tab %tabs
}
set % $+ table. $+ %tables $+ .items %items
setnextid %tables %id
}
; addtype2item - add a type two item to the current table
; $1- are the parameters: type id,x y w h,styles
alias addtype2item {
; local vars
var %rec, %type, %params, %text, %id, %var
;//echo -s addtype2item: 1 = $1 2 = $2 3 = $3 4 = $4 5 = $5 6 = $6 7 = $7 8 = $8 9 = $9
set %rec $1-
set %type $gettok(%rec,1,32)
inc %items 1
set % $+ table. $+ %tables $+ .item $+ %items $+ .type %type
set %params $gettok(%rec,2-,32)
set %id $gettok(%params,1,44)
set %id $remove(%id,$chr(32))
if ( %id == 0 ) {
set %var % $+ table. $+ %tables $+ .nextid
set %id [ [ %var ] ]
}
set % $+ table. $+ %tables $+ .item $+ %items $+ .id %id
set % $+ table. $+ %tables $+ .item $+ %items $+ .size $pixels.size($gettok(%params,2,44))
dbe.detab %tables %items $gettok(%params,3-,44)
set % $+ table. $+ %tables $+ .items %items
setnextid %tables %id
}
; addtype3item - add a type three item to the current table
; $1- are the parameters: type id,x y w h,filename,index,style
alias addtype3item {
; local vars
var %rec, %type, %params, %text, %id, %var
;//echo -s addtype3item: 1 = $1 2 = $2 3 = $3 4 = $4 5 = $5 6 = $6 7 = $7 8 = $8 9 = $9
set %rec $1-
set %type $gettok(%rec,1,32)
inc %items 1
set % $+ table. $+ %tables $+ .item $+ %items $+ .type %type
set %params $gettok(%rec,2-,32)
set %id $gettok(%params,1,44)
set %id $remove(%id,$chr(32))
if ( %id == 0 ) {
set %var % $+ table. $+ %tables $+ .nextid
set %id [ [ %var ] ]
}
set % $+ table. $+ %tables $+ .item $+ %items $+ .id %id
;set % $+ table. $+ %tables $+ .item $+ %items $+ .size $gettok(%params,2,44)
set % $+ table. $+ %tables $+ .item $+ %items $+ .size $pixels.size($gettok(%params,2,44))
set % $+ table. $+ %tables $+ .item $+ %items $+ .filename $strip($gettok(%params,3,44))
set % $+ table. $+ %tables $+ .item $+ %items $+ .index $gettok(%params,4,44)
dbe.detab %tables %items $gettok(%params,5-,44)
set % $+ table. $+ %tables $+ .items %items
setnextid %tables %id
}
; addtype4item - add a type four item to the current table
; NOTE: type 4 is a group. It is defined by DBE not by mIRC.
; $1 = table, $2- are the parameters: type id,x y w h,table,window,x,y
alias addtype4item {
; local vars
var %rec, %type, %params, %text, %id, %var
set %rec $2-
set %type $gettok(%rec,1,32)
inc %items 1
set % $+ table. $+ $1 $+ .item $+ %items $+ .type %type
set %params $gettok(%rec,2-,32)
set %id $gettok(%params,1,44)
set %id $remove(%id,$chr(32))
if ( %id == 0 ) {
set %var % $+ table. $+ $1 $+ .nextid
set %id [ [ %var ] ]
}
set % $+ table. $+ $1 $+ .item $+ %items $+ .id %id
set % $+ table. $+ $1 $+ .item $+ %items $+ .tab 0
set % $+ table. $+ $1 $+ .item $+ %items $+ .size $pixels.size($gettok(%params,2,44))
set % $+ table. $+ $1 $+ .item $+ %items $+ .table $gettok(%params,3,44)
set % $+ table. $+ $1 $+ .item $+ %items $+ .window $gettok(%params,4,44)
set % $+ table. $+ $1 $+ .item $+ %items $+ .orgx $gettok(%params,5,44)
set % $+ table. $+ $1 $+ .item $+ %items $+ .orgy $gettok(%params,6,44)
set % $+ table. $+ $1 $+ .items %items
setnextid $1 %id
}
; dbe.entab - add tab style if object is on a tab
; $1=x, $2=y, $3=style
alias dbe.entab {
var %var, %size, %focustab, %style
set %var % $+ table. $+ %tables $+ .tabsize
set %size [ [ %var ] ]
getposandsize %size
if ( $inrect($1,$2,%x,%y,%w,%h) ) {
set %var % $+ table. $+ %tables $+ .tabfocus
set %focustab [ [ %var ] ]
set %style $3
if ( %style != $null ) { set %style %style $+ $chr(44) }
set %style %style $+ tab $+ $chr(32) $+ %focustab
}
return %style
}
; dbe.detab - parse a style specification, remove a tab specifier if any and
; set the items' style and tab variables.
; $1 = table, $2 = item, $3- = style
alias dbe.detab {
var %match, %style, %tab = 0
set %style $3-
set %match $matchtok(%style,tab,1,44)
if ( %match != $null ) {
set %tab $gettok(%match,2,32)
if ( %tab == $null ) { set %tab 0 }
set %style $remtok(%style,%match,1,44)
}
set % $+ table. $+ $1 $+ .item $+ $2 $+ .tab %tab
set % $+ table. $+ $1 $+ .item $+ $2 $+ .style %style
}
; setnextid - each table holds a nextid value. This is the id we will
; assign to the next item added to the dialog box. When we read dialog box
; tables in we keep track of the highest id we've seen and add one to it when
; the reading is done.
; $1 is the table, $2 is the id
alias setnextid {
; if id is > nextid then set nextid to it
var %id
set %id % $+ table. $+ $1 $+ .nextid
if ( [ [ %id ] ] < $2 ) { set [ [ %id ] ] $2 }
}
; incnextid - inc the specified tables nextid value by 1
; $1 is the table
alias incnextid {
var %id
set %id % $+ table. $+ $1 $+ .nextid
inc [ [ %id ] ] 1
}
; diacopy - save a copy of the specified item in the specified table
; so user can paste it later. The third parameter specifies whether
; to save the items id or save an id of zero. The savedialog alias uses the
; first form, while the Copy menu item uses the second. The forth parameter
; specifies how to change the objects size: valid values are none, dbu, and pixels.
; Savedialog uses dbu or none while the Copy menu uses none, and convert uses pixels
; or dbu.
; $1 = table, $2 = item, $3 = save id?, $4 = convert size?
alias diacopyitem {
var %var, %type, %text, %size, %style, %filename, %index, %id, %tab
if ( $3 == true ) {
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .id
set %id [ [ %var ] ]
}
else { set %id 0 }
; save item as a %rec string
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .type
set %type [ [ %var ] ]
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .tab
set %tab [ [ %var ] ]
if ( %type == tab && %tab == 1 ) {
set %var % $+ table. $+ $1 $+ .tabsize
}
else {
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .size
}
if ( %tab != 0 ) {
set %tab ,tab $+ $chr(32) $+ %tab
}
else {
; mirc bug? the following unset seems to set %tab to 1
;unset %tab
set %tab $null
}
set %size [ [ %var ] ]
;if ( %type != icon ) {
if ( $4 == dbu ) {
set %size $dbu.size(%size)
}
elseif ( $4 == pixels ) {
set %size $pixels.size(%size)
}
;}
if ( %type isin texteditbuttoncheckradio ) {
; %type "text",id,size,style
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .text
set %text [ [ %var ] ]
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .style
set %style [ [ %var ] ]
if ( %style != $null && $left(%style,1) != $chr(44)) { set %style $chr(44) $+ %style }
set %dbe.copy.item %type " $+ %text $+ " $+ , %id $+ , %size $+ %style %tab
}
if ( %type isin tab ) {
; %type "text",id[,size]
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .text
set %text [ [ %var ] ]
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .tab
set %tab [ [ %var ] ]
if ( %tab == 1 ) {
set %dbe.copy.item %type " $+ %text $+ " $+ , %id $+ , %size
}
else {
set %dbe.copy.item %type " $+ %text $+ " $+ , %id
}
}
if ( %type == box ) {
; box "text",id,size
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .text
set %text [ [ %var ] ]
set %dbe.copy.item %type " $+ %text $+ " $+ , %id $+ , %size %tab
}
if ( %type isin listcombo ) {
; %type id,size,style
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .style
set %style [ [ %var ] ]
if ( %style != $null && $left(%style,1) != $chr(44)) { set %style $chr(44) $+ %style }
set %dbe.copy.item %type %id $+ , %size $+ %style %tab
}
if ( %type == icon ) {
; icon id,size,filename,index,style
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .filename
set %filename [ [ %var ] ]
; if the icon file is in the script directory, then save just the filename
if ( $nofile(%filename) == $scriptdir ) { set %filename $nopath(%filename) }
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .index
set %index [ [ %var ] ]
set %var % $+ table. $+ $1 $+ .item $+ $2 $+ .style
set %style [ [ %var ] ]
if ( %style != $null && $left(%style,1) != $chr(44)) { set %style $chr(44) $+ %style }
set %dbe.copy.item %type %id $+ , %size $+ , %filename $+ , %index %style %tab
}
}
; savedialog
; $1 = table number, $2 = filename
alias savedialog {
var %fn, %var, %id, %option, %info, %type, %text, %size, %style, %filename, %index, %i, %w, %h, %units
%fn = $2
; get the dialog table name
set %var % $+ table. $+ $1 $+ .dialog
set %info [ [ %var ] ]
; write a comment line
write -c %fn $chr(59) %info table created by DBE v $+ %dbe.ver
write %fn $chr(59) http://www.borg.com/~chuck
; dialog name {
write %fn dialog %info $chr(123)
; title "title"
set %var % $+ table. $+ $1 $+ .title
set %info [ [ %var ] ]
write %fn title $chr(34) $+ %info $+ $chr(34)
; option
set %var % $+ table. $+ $1 $+ .option
set %option [ [ %var ] ]
if ( none isin %option ) { set %units pixels }
if ( pixels isin %option ) { set %units pixels }
if ( dbu isin %option ) { set %units dbu }
write %fn option %option
; size = x y (w - border width) (h - height of picture window titlebar)
if ( %units == pixels ) {
set %dbe.unit 1
}
else {
set %dbe.unit %dbe.dbu
}
set %w $calc($window(%window).w - (6 * %dbe.unit))
set %h $calc($window(%window).h - (25 * %dbe.unit))
if ( %units == pixels ) {
write %fn size $window(%window).x $window(%window).y %w %h
; all internal units are in pixels already so tell diacopyitem not to change them
set %units none
}
else {
; mIRC v5.61 seems to have a bug? it doesn't adjust the x and y values in the size
; statement but it does adjust them in the objects.
;write %fn size $dbu.x($window(%window).x) $dbu.y($window(%window).y) $dbu.x(%w) $dbu.y(%h)
;write %fn size $dbu.x($window(%window).dx) $dbu.y($window(%window).dy) $dbu.x(%w) $dbu.y(%h)
write %fn size $window(%window).x $window(%window).y $dbu.x(%w) $dbu.y(%h)
}
; now the controls... first the tab controls
%i = 1
: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 $+ .type
set %type [ [ %var ] ]
if ( %type == tab ) {
diacopyitem $1 %i true %units
write %fn %dbe.copy.item
}
}
inc %i 1
goto loop
}
; now the non-tab controls
%i = 1
:loop2
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 $+ .type
set %type [ [ %var ] ]
if ( %type != tab ) {
diacopyitem $1 %i true %units
write %fn %dbe.copy.item
}
}
inc %i 1
goto loop2
}
; write closing brace
write %fn $chr(125)
; unset %dbe.copy.item because it's not a valid copy item now...it has an id in it
unset %dbe.copy.item
; reset to pixels
set %dbe.unit 1
}
; dbeerror
; $1 is the dialog that has the error, $2- is the error message
alias dbeerror {
;set %dbe.var $2-
set %dbe.error $?!= [ $+ [ $2- ] ]
dialog -v $1
}