All pastes #219587 Raw Edit

Miles

public text v1 · immutable
#219587 ·published 2006-10-24 19:35 UTC
rendered paste body
alias init {

  window -ak0hdBpfo +d @test -1 -1 300 300 

  $listbox(@test, 100 100 150 100).coords
  $listbox(@test, Just testing.).header
  $listbox(@test, 49 49).columns
  $listbox(@test, tahoma/9).font
  $listbox(@test, test).hash
  listbox @test

}

alias whilefix {
  dll $+(", $scriptdir, Binary\WhileFix.dll") WhileFix
  return 1
}

alias listbox {
  var %t = listbox. $+ $1
  if ($isid) {
    hadd -m %t $prop $2-
  }
  else {
    var %win = $1
    tokenize 32 $hget(listbox. $+ %win, coords)
    drawrect -rfn %win $rgb(223,220,214) 1 $1-
    draw.detail %win $false $1-
    draw.header %win $calc($1 + 3) $calc($2 + 3) $calc($3 - 6)
    draw.scroll.buttons %win
    draw.buffer %win
    drawdot %win
  }
}

alias draw.detail {
  var %a, %b
  if ($2) {
    %a = $rgb(255,255,255) | %b = $rgb(144,144,144)
  }
  else {
    %b = $rgb(255,255,255) | %a = $rgb(144,144,144)
  }
  drawdot -rn $1 %a 2 $calc($3 + 2) $calc($4 + 2)
  drawline -rn $1 %a 2 $3 $calc($4 + $6) $3 $4 $calc($3 + $5) $4
  drawline -rn $1 %b 2 $3 $calc($4 + $6) $calc($3 + $5) $calc($4 + $6) $calc($3 + $5) $4
}

alias draw.header {
  var %win = $1, %font = $hget(listbox. $+ %win, font), %text = $hget(listbox. $+ %win, header), %h = $calc($font.height(%font) + 1)
  draw.detail %win $true $2- %h
  set.list.dims %win $2- %h
  tokenize 32 $calc($2 + 3) $3 $calc($4 - 6) %h
  %font = $replace(%font, /, $chr(32))
  drawtext -rnc %win $rgb(255,255,255) %font $1 $2 $calc($3 - 1) $calc($4 - 1) %text
  drawtext -rnc %win $rgb(160,160,160) %font $calc($1 - 1) $calc($2 - 1) $3 $4 %text
}

alias draw.scroll.buttons {
  draw.scroll.button $1 0 $true
  draw.scroll.button $1 1 $true
}

alias draw.scroll.button {
  var %win = $1, %button = $2, %pressed = $3
  tokenize 32 $hget(listbox. $+ %win, scrollbar) 
  var %h = $iif(%button == 0, $2, $calc(($2 + $4) - 10))
  draw.detail %win %pressed $calc($1 + 1) %h $calc($3 - 3) 10
  drawtext -rn %win $rgb(255,255,255) WebDings 12 $calc($1 + 3) $calc(%h - 3) $iif(%button == 0, 5, 6)
  drawtext -rn %win $rgb(160,160,160) WebDings 12 $calc($1 + 2) $calc(%h - 4) $iif(%button == 0, 5, 6)
}

alias set.list.dims {
  var %win = $1
  tokenize 32 $2 $calc($3 + $5) $calc($4 - 15) $calc(($gettok($hget(listbox. $+ $1, coords), 4, 32) - $5) - 3)
  $listbox(%win, $calc($1 + 2) $calc($2 + 1) $calc($3 - 2) $calc($4 - 2)).listdims
  $listbox(%win, $calc($1 + $3) $calc($2 + 2) 16 $calc($4 - 4)).scrollbar
  $listbox(%win, $calc($1 + $3) $calc($2 + 13) 16 $calc($4 - 26)).scrolldims
}

alias draw.buffer {
  if ($2) {
    $listbox($1, $iif($3, $int($calc(($2 / 100) * $list.lines($1))), $2)).position
  }
  var %win = $1, %p = $iif($hget(listbox. $+ %win, position), $ifmatch, 1), %step = $font.height($hget(listbox. $+ %win, font)), %hash = $hget(listbox. $+ %win, hash), %i = 0, %z = 1
  tokenize 32 $hget(listbox. $+ %win, listdims)
  %font = $replace(%font, /, $chr(32))
  drawrect -rfn %win $rgb(223,220,214) 1 $1-
  while (%i < $calc($4 - %step)) {
    draw.row %win $1 $calc($2 + %i + 2) $3 $4 ITEM $+ $calc(%p + %z)
    inc %i %step
    inc %z
    else {
      break
    }
  }
  $listbox(%win, $calc(%z - 1)).listlines
  var %a = 1, %b = $1, %c
  while ($gettok($hget(listbox. $+ %win, columns), %a, 32)) {
    %c = $ifmatch
    draw.line %win $calc(%b + %c) $2 $calc(%b + %c) $calc($2 + $4)
    inc %b %c
    inc %a
  }
  draw.scroll %win $int($calc((%p / $list.lines(%win)) * 100)) 
  draw.select %win
}

alias draw.row {
  var %win = $1, %font = $sep.font(%win), %columns = $hget(listbox. $+ %win, columns), %i = 1, %x, %z, %t
  tokenize 32 $2-5 $hget($hget(listbox. $+ %win, hash), $6)
  %x = $1
  while (%i <= $numtok(%columns, 32)) {
    if ($gettok(%columns, %i, 32)) {
      %z = $ifmatch 
      if ($gettok($5-, %i, 9)) {
        drawtext -rnc %win $rgb(255,255,255) %font %x $2 %z $4 $ifmatch
        drawtext -rnc %win $rgb(160,160,160) %font $calc(%x - 1) $calc($2 - 1) $calc(%z + 1) $calc($4 + 1) $ifmatch
      }
    }
    inc %x %z
    inc %i
  }
}

alias draw.line {
  var %win = $1
  tokenize 32 $2-
  drawline -rn %win $rgb(255,255,255) 1 $1-
  drawline -rn %win $rgb(144,144,144) 1 $calc($1 + 1) $2 $calc($3 + 1) $4
}

alias draw.scroll {
  var %win = $1, %p = $2
  tokenize 32 $hget(listbox. $+ %win, scrolldims) $list.lines(%win) $iif($hget(listbox. $+ %win, listlines), $ifmatch, 0)
  var %s = $iif($5 <= $6, 1, $iif($calc($6 / $5) < 0.07, 0.07, $v1))), %x = $1, %y = $int($calc(((%p / 100 * $4) * (1 - %s)) + $2)), %w = $calc($3 - 1), %h = $ceil($calc($4 * %s - 2))
  drawrect -rnf %win $calc($rgb(223,220,214) - $rgb(20,20,20)) 1 $1 $2 $calc($3 - 1) $calc($4 + 1)
  drawrect -nfr %win $rgb(223,220,214) 1 %x %y %w %h
  draw.detail %win $true $calc(%x + 1) $calc(%y + 1) $calc(%w - 2) %h
}

alias list.lines {
  return $iif($iif($hget($hget(listbox. $+ $1, hash), ITEM0), $calc($ifmatch - $list.rows($1)), 0) > 0, $v1, 0)
}

alias list.rows {
  return $hget(listbox. $+ $1, listlines)
}

alias sep.font {
  return $replace($hget(listbox. $+ $1, font), /, $chr(32))
}

alias draw.select {
  var %win = $1, %a = $hget(listbox. $+ %win, position), %x = $font.height($hget(listbox. $+ %win, font)), %y, %z = $2
  tokenize 32 $hget(listbox. $+ %win, listdims)
  if (%z isnum) {
    var %s = $v1
    if ($hget(listbox. $+ %win, selected_line) isnum $+(%a, -, $calc(%a + $list.rows(%win)))) {
      %y = $calc($2 + (%x * ($v1 - %a)))
      drawreplace -nr %win $rgb(200,206,213) $rgb(223,220,214) $1 %y $calc($3 - 2) $calc(%x + 1)
    }
    $listbox(%win, $calc(%a + %s)).selected_line
  }
  var %s = $hget(listbox. $+ %win, selected_line)
  if (%s isnum $+(%a, -, $calc(%a + $list.rows(%win)))) {  
    %y = $calc($2 + (%x * (%s - %a)))
    drawreplace -nr %win $rgb(223,220,214) $rgb(200,206,213) $1 %y $calc($3 - 2) $calc(%x + 1)
  }
}


alias font.height {
  tokenize 47 $1-
  return $calc($height(T, $1, $2) + 1)
}

alias set.scroll {
  draw.buffer $1 $2 $true
}

alias move.buffer {
  var %i = $hget(listbox. $+ $1, position)
  if ($2 == up) {
    if (%i > 0) { 
      hdec listbox. $+ $1 position 
    }
  }
  else {
    if (%i < $list.lines($1)) { 
      hinc listbox. $+ $1 position 
    }
  }
}

alias get.column {
  var %c = $hget(listbox. $+ $1, columns)
  return $iif($2 == 0, $numtok(%c, 32), $iif($gettok(%c, $2, 32), $ifmatch, $false))
}

;Use @window1,@window2 ect here.

menu * {
  sclick: {
    var %a = $active, %i
    if ($hget(listbox. $+ %a)) {
      var %t = $ifmatch
      tokenize 32 $hget(%t, listdims) 
      if ($inrect($mouse.x, $mouse.y, $1, $2, $3, $4)) {
        var %x = 1, %y = $1, %z, %columns = $hget(listbox. $+ %a, columns), %g, %h
        while ($get.column(%a, %x)) {
          %z = $ifmatch
          inc %y %z
          if ($mouse.x isnum $+($calc(%y - 2), -, $calc(%y + 2))) {
            echo -s %columns
            while ($mouse.key & 1) && ($active == %a) && ($whilefix) {
              %g = $calc($gettok(%columns, %x, 32) + ($mouse.x - %y))
              if (%g >= 1) {
                %h = $reptok(%columns, %z, %g, %x, 32)
                if ($calc($replace(%h, $chr(32), +) + 2) <= $3) { 
                  $listbox(%a, %h).columns
                  draw.buffer %a
                  drawdot %a
                }
              }
            }
            return
          }
          inc %x
        }
        draw.select %a $int($calc((($mouse.y - $2) / $4) * $list.rows(%a)))
        drawdot %a
        return
      }
      tokenize 32 $hget(%t, scrollbar) 
      if ($inrect($mouse.x, $mouse.y, $1, $2, $3, $4)) {
        tokenize 32 $hget(%t, scrolldims) 
        if ($inrect($mouse.x, $mouse.y, $1, $2, $3, $4)) {
          while ($mouse.key & 1) && ($active == %a) && ($whilefix) {
            %i = $int($calc((($mouse.y - $2) / $4) * 100))
            if (%i isnum 0-100) {
              set.scroll %a %i
            }
            drawdot %a
          }
        }
        else {
          %i = $int($calc(($mouse.y - $2) / $4))
          while ($mouse.key & 1) && ($active == %a) && ($whilefix) {
            draw.scroll.button %a %i $false
            move.buffer %a $iif(%i == 0, up, down)
            draw.buffer %a
            drawdot %a
          }
          draw.scroll.button %a %i $true
          drawdot %a
        }
      }
    }
  }
}