Hash tablo ile çalışırken bir çok zaman hangi tablom aktif, hangisinde hangi parçalar ya da veriler var diye bakmam gerektiğinde yazdığım bir diyalogdu. Biraz daha düzenleyip bir kaç yeni özellik de ekleyerek paylaşmak istedim. Hash tablolar ile haşır neşir olanlar için epey kullanışlı olacağına inanıyorum.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
menu status,channel,query {
-
Hash Tabloları: dialog $iif(!$dialog(hash_table),-m hash_table,-v) hash_table
}
dialog hash_table {
title "Hash Tablo Görüntüleyici/Düzenleyici"
size -1 -1 245 165
option dbu
box "Tablolar:", 1, 5 5 75 110
list 4, 10 15 65 85, size extsel hsbar
button "Seçilenleri Sil", 16, 25 102 35 10
box "Parçalar:", 2, 85 5 75 110
list 5, 90 15 65 85, size extsel hsbar
button "Seçilenleri Sil", 17, 105 102 35 10
box "Veriler:", 3, 165 5 75 110
list 6, 170 15 65 85, size extsel hsbar
button "Seçilenleri Sil", 18, 185 102 35 10
box "", 7, 5 115 235 45
text - Düzenlemeyi istediğiniz değere listeden çift tıklayın. $crlf $+ - Bağımsız eklemek için 'Temizle' butonuna basın., 8, 10 142 180 14, disable
text "Tablo:", 9, 11 122 25 8
edit "", 12, 10 130 60 10, autohs
text "Parça:", 10, 71 122 25 8
edit "", 13, 70 130 60 10, autohs
text "Veri:", 11, 131 122 25 8
edit "", 14, 130 130 60 10, autohs
button "Ekle/Düzenle", 15, 195 125 40 12
button "Temizle", 20, 195 141 40 12
}
alias -l hash_tablo { did -r hash_table 4,5,6 | var %x = 1 | while $hget(%x) { did -az hash_table 4 $hget(%x) | inc %x } | hash_parça $$1 }
alias -l hash_parça {
did -r hash_table 5,6
var %x = 1,%sel = $iif($1,$1,$did(hash_table,4,$did(hash_table,4).sel)) | while $hget(%sel,%x).item {
did -az hash_table 5 $hget(%sel,%x).item
did -az hash_table 6 $hget(%sel,%x).data
inc %x
}
did -c hash_table 4 $didwm(hash_table,4,$$1)
}
on *:dialog:hash_table:init:*:hash_tablo
on *:dialog:hash_table:sclick:4:hash_parça
on *:dialog:hash_table:sclick:5:{
did -u $dname 6
if $did(6,0).lines != 0 { var %x = 1 | while $did(5,%x).sel { did -ck $dname 6 $did(5,%x).sel | inc %x } }
}
on *:dialog:hash_table:sclick:6:{ did -c $dname 5 $did(6).sel }
on *:dialog:hash_table:dclick:4:{
did -re $dname 12,13,14
did -u $dname 5,6
did -a $dname 12 $did(4,$did(4).sel)
did -b $dname 13,14
}
on *:dialog:hash_table:dclick:5:{
did -re $dname 12,13,14
did -u $dname 6
did -a $dname 12 $did(4,$did(4).sel)
did -a $dname 13 $did(5,$did(5).sel)
did -b $dname 12,14
}
on *:dialog:hash_table:dclick:6:{
did -re $dname 12,13,14
did -ab $dname 12 $did(4,$did(4).sel)
did -ab $dname 13 $did(5,$did(5).sel)
did -a $dname 14 $did(6,$did(6).sel)
}
on *:dialog:hash_table:sclick:16-18:{
if $did == 16 { var %x = 1 | while $hget($did(4,$did(4,%x).sel)) { .hfree $did(4,$did(4,%x).sel) | inc %x } | hash_tablo }
if $did == 17 { var %x = 1 | while $did(5,%x).sel { .hdel $did(4,$did(4).sel).text $hget($did(4,$did(4).sel),%x).item | inc %x } | hash_parça }
if $did == 18 { var %x = 1 | while $did(6,%x).sel { .hadd $did(4,$did(4).sel).text $did(5,$did(6,%x).sel)) | inc %x } | hash_parça }
}
on *:dialog:hash_table:sclick:15:{
if $did(12).enabled && $did(13).enabled && $did(14).enabled {
$iif($hget($did(12)),.hadd $did(12) $did(13) $iif($did(14),$did(14)),$iif(!$did(13),.hmake $did(12),.hadd -m $did(12) $did(13) $iif($did(14),$did(14))))
hash_tablo $did(12) | did -re $dname 12,13,14
}
if (!$did(13).enabled && !$did(14).enabled) {
var %x = 1 | while $hget($did(4,$did(4).sel),%x).item {
.hadd -m $did(12) $hget($did(4,$did(4).sel),%x).item $hget($did(4,$did(4).sel),%x).data
inc %x
}
.hfree $did(4,$did(4).sel) | did -o $dname 4 $did(4).sel $did(12) | did -re $dname 12,13,14
}
if (!$did(12).enabled && !$did(14).enabled) { .hadd -m $did(12) $did(13) | hash_parça | did -re $dname 12,13,14 }
if (!$did(12).enabled && !$did(13).enabled) { .hadd -m $did(12) $did(13) $did(14) | hash_parça | did -re $dname 12,13,14 }
}
on *:dialog:hash_table:sclick:20:{ did -u $dname 4,5,6 | did -re $dname 12,13,14 | hash_tablo }
Sağ klik menüsüne ekledim açılışını. Statüs, kanal ya da özel konuşma penceresindeyken sağ klik yaparsanız 'Hash Tabloları' olarak göreceksinizdir.
Mevcut hash tabloları ve seçiminize göre parça ve verileri listeler.
Karışıklık olmaması için her bir sütun için ayrı silme seçeneği ekledim. Her bir sütunun altındaki silme seçeneği, üstünde bulunan sütundaki seçtiğiniz (bir veya birden çok) değeri siler.
Çift tıkladığınız değeri alt taraftaki 'Düzenleme/Ekleme' kısmına taşır ve düzenlemenize olanak sağlar.
diye bir değeriniz var.
sütunundan çift tıklamanız gerekiyor. Aynı anda birden fazla değerde değişiklik yapamazsınız. O nedenle eğer ki;
değerinin değiştirmek istiyorsanız önce birini, sonra diğerini değiştirmelisiniz. Zira diyalog da diğer kısımları değiştirmenize izin vermeyecektir.
Yine alt kısımdaki 'Düzenleme/Ekleme' kısmından yapabilirsiniz. Ama unutmayın ki tablo ismi yazmadan bir parça ya da veri girişi yapamazsınız. Eğer ki yazdığınız tablo isminde bir hash tablonuz zaten varsa, var olan tabloya ekleme yapacaktır. Eğer yazdığınız tablo isminde tablonuz ve yazdığınız parça isminde parçanız varsa, var olan veriyi yazdığınız yeni veri ile yenileyecektir.
Karşılaşabileceğiniz tek problem ise (çözümünü bulamadığım) tablo adı sadece sayılardan oluşan tabloları düzenleme, silme ya da yeni veri ekleme olanağı bulunmamaktadır. Onun haricinde diyalog aslında epey kolay kullanımlı. Anlamadığınız bir kısım ya da karşılaştığınız bir hata olursa bildirmeniz yeterlidir.
Kolay gelsin.