projman/lib/tree.tcl

162 lines
5.7 KiB
Tcl
Raw Normal View History

2022-07-21 10:56:46 +03:00
#!/usr/bin/wish
######################################################
# ProjMan 2
2018-02-08 16:37:50 +03:00
# Distributed under GNU Public License
2022-07-21 10:56:46 +03:00
# Author: Sergey Kalinin svk@nuk-svk.ru
# Copyright (c) "", 2022, https://nuk-svk.ru
######################################################
2018-02-08 16:37:50 +03:00
#
2022-07-21 10:56:46 +03:00
# Tree widget working module
2018-02-08 16:37:50 +03:00
#
2022-07-21 10:56:46 +03:00
######################################################
2018-02-08 16:37:50 +03:00
2022-07-21 10:56:46 +03:00
namespace eval Tree {
proc InsertItem {tree parent item type text} {
# set img [GetImage $fileName]
set dot "_"
# puts "$tree $parent $item $type $text"
2022-07-21 10:56:46 +03:00
switch $type {
file {
regsub -all {\.|/|\\|\s} $item "_" subNode
# puts "Inserted tree node: $subNode"
set fileExt [string trimleft [file extension $text] "."]
#set fileName [string trimleft [file extension $text] "."]
set findImg [::FindImage $fileExt]
# puts "Extention $fileExt, find image: $findImg"
# puts ">>>>>>>>>>> [string tolower $text]; [string match {*docker*} [string tolower $text]]"
if {[string match {*docker*} [string tolower $text]]} {
set findImg [::FindImage docker]
} elseif {[string match {*gitlab*} [string tolower $text]]} {
set findImg [::FindImage gitlab]
} elseif {[string match {*bitbucket*} [string tolower $text]]} {
set findImg [::FindImage bitbucket]
} elseif {[string match {\.git*} [string tolower $text]]} {
set findImg [::FindImage git]
}
if {$fileExt ne "" || $findImg ne ""} {
set image $findImg
} else {
set image imgFile
}
2018-02-08 16:37:50 +03:00
}
2022-07-21 10:56:46 +03:00
directory {
regsub -all {\.|/|\\|\s} $item "_" subNode
# puts $subNode
if {[string match {*debian*} [string tolower [file tail $item]]]} {
set image [::FindImage debian]
} elseif {[string match {*redhat*} [string tolower [file tail $item]]]} {
set image [::FindImage redhat]
} elseif {[string match {*gitlab*} [string tolower [file tail $item]]]} {
set image [::FindImage gitlab]
} elseif {[string match {.git} [string tolower [file tail $item]]]} {
set image [::FindImage git]
} else {
set image pixel
}
2018-02-08 16:37:50 +03:00
}
func {
regsub -all {:} $item "_" subNode
# puts $subNode
set image proc_10x10
}
procedure {
regsub -all {\.|/|\\|\s|"|\{|\}|\(|\)} $item "_" subNode
# puts $subNode
set image proc_10x10
}
2018-02-08 16:37:50 +03:00
}
2022-07-21 10:56:46 +03:00
append id $type "::" $subNode
# puts "Tree ID: $id, tree item: $item"
2022-07-21 10:56:46 +03:00
if ![$tree exists $id] {
$tree insert $parent end -id "$id" -text " $text" -values "$item" -image $image
2022-07-21 10:56:46 +03:00
}
return "$id"
2018-02-08 16:37:50 +03:00
}
2022-07-21 10:56:46 +03:00
proc DoublePressItem {tree} {
set id [$tree selection]
$tree tag remove selected
$tree item $id -tags selected
2022-11-11 16:22:50 +03:00
2022-07-21 10:56:46 +03:00
set values [$tree item $id -values]
set key [lindex [split $id "::"] 0]
if {$values eq "" || $key eq ""} {return}
puts "$key $tree $values"
switch $key {
directory {
FileOper::ReadFolder $values
2018-02-08 16:37:50 +03:00
}
2022-07-21 10:56:46 +03:00
file {
FileOper::Edit $values
# $tree item $id -open false
2018-02-08 16:37:50 +03:00
}
}
}
2022-07-21 10:56:46 +03:00
proc PressItem {tree} {
global nbEditor lexers editors activeProject
2022-07-21 10:56:46 +03:00
set id [$tree selection]
$tree tag remove selected
$tree item $id -tags selected
SetActiveProject [GetItemID $tree [GetUpperItem $tree $id]]
2022-07-21 10:56:46 +03:00
set values [$tree item $id -values]
set key [lindex [split $id "::"] 0]
if {$values eq "" || $key eq ""} {return}
puts "$key $tree $values"
switch -regexp $key {
2022-07-21 10:56:46 +03:00
directory {
FileOper::ReadFolder $values
# $tree item $id -open false
}
file {
set v [FileOper::Edit $values $nbEditor]
if {$v eq false} {
$tree delete $id
}
unset v
2018-02-08 16:37:50 +03:00
}
I[0-9]*? {
destroy .findVariables
FileOper::Edit [lindex $values 2] $nbEditor
}
default {
set parentItem [$tree parent $id]
# puts $values
set nbItem "$nbEditor.[string range $parentItem [expr [string last "::" $parentItem] + 2] end]"
$nbEditor select $nbItem
set txt $nbItem.frmText.t
set findString [dict get $lexers [dict get $editors $txt fileType] procFindString]
regsub -all {PROCNAME} $findString $values str
Editor::FindFunction $txt "$str"
}
2018-02-08 16:37:50 +03:00
}
}
2018-02-08 16:37:50 +03:00
2022-07-21 10:56:46 +03:00
proc GetItemID {tree item} {
if [$tree exists $item] {
return [$tree item $item -values]
2018-03-15 16:22:57 +03:00
}
}
proc SelectItem {treeItemName} {
global tree
if [$tree exists $treeItemName] {
$tree see $treeItemName
$tree selection set $treeItemName
}
}
proc GetUpperItem {tree item} {
set parent [$tree parent $item]
if {$parent eq ""} {
return $item
} else {
GetUpperItem $tree $parent
}
}
2018-03-15 16:22:57 +03:00
}