From 1f36044d6627769a86502bb6d7279a1c130d9cdc Mon Sep 17 00:00:00 2001 From: Sergey Kalinin Date: Tue, 20 Feb 2018 14:13:47 +0300 Subject: [PATCH] Refactoring auto update file structure (tree). Now structure updated when file was saving Refactoring "Settings" dialog --- BUGS | 4 -- CHANGELOG | 7 ++- lib/about.tcl | 1 + lib/baloon.tcl | 9 --- lib/editor.tcl | 136 ++++++++++++++++++--------------------------- lib/filedialog.tcl | 20 ++++++- lib/main.tcl | 5 +- lib/menu.tcl | 1 + lib/pane.tcl | 1 + lib/projects.tcl | 1 + lib/settings.tcl | 32 +++++------ projman.tcl | 53 +++++++++--------- 12 files changed, 122 insertions(+), 148 deletions(-) diff --git a/BUGS b/BUGS index 5e7e7e3..9155775 100644 --- a/BUGS +++ b/BUGS @@ -28,7 +28,3 @@ balloon окне показать формат этой команды (такж - При установки переменной editor(wrap) значения none на длинных строках при появлениии нижнего скролбара наблюдается глюк пока не объяснимый :( Скрол бар начинает мерцать (то появиться то исчезнет) - - - - diff --git a/CHANGELOG b/CHANGELOG index 0de9552..fe09029 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,10 @@ ######################################################### 0.4.5 +20.02.2018 +- Refactoring auto update file structure (tree). Now structure updated when file was saving +- Refactoring "Settings" dialog + 19.02.2018 - Fix "New file" ctrl+n hotkey @@ -380,6 +384,3 @@ characters to the right of the insertion cursor. - - - diff --git a/lib/about.tcl b/lib/about.tcl index 2f46912..bfae61f 100644 --- a/lib/about.tcl +++ b/lib/about.tcl @@ -421,3 +421,4 @@ proc AboutDialog {} { $w.frmThanks.txtThanks configure -state disable } + diff --git a/lib/baloon.tcl b/lib/baloon.tcl index 6e54849..ff53f8d 100644 --- a/lib/baloon.tcl +++ b/lib/baloon.tcl @@ -61,7 +61,6 @@ proc balloon { widget action args } { } ;# switch action } ;# proc balloon - proc raise_balloon {widget text} { global BALLOON @@ -78,11 +77,3 @@ proc raise_balloon {widget text} { update } ;# proc raise_balloon - - - - - - - - diff --git a/lib/editor.tcl b/lib/editor.tcl index 1717a8c..c8e094d 100644 --- a/lib/editor.tcl +++ b/lib/editor.tcl @@ -614,7 +614,7 @@ proc EditFile {tree node fileName} { # set w [$noteBook insert end $node -text "$file" -image [Bitmap::get [file join $imgDir [GetImage $fileName].gif]] \ #-background $editor(bg) -foreground $editor(fg)] set w [$noteBook insert end $node -text "$file" -image [Bitmap::get [file join $imgDir [GetImage $fileName].gif]]] - + puts $w # create array with file names # if {[info exists fileList($node)] != 1} { set fileList($node) [list $fileName 0] @@ -643,60 +643,9 @@ proc EditFile {tree node fileName} { set lineNumber 1 # Progress start # LabelUpdate .frmStatus.frmProgress.lblProgress "[::msgcat::mc "Opened file in progress"]" - - while {[gets $file line]>=0} { - # Insert procedure names into tree # - regsub -all {\t} $line " " line - $w.text insert end "$line\n" - # set progress $lineNumber - set keyWord "" - set procName "" - - if {$fileExt == "php" || $fileExt == "phtml"} { - regexp -nocase -all -- {(function) (.*?)\(} $line match keyWord procName - #puts "$keyWord --- $procName" - - } else { - scan $line "%s%s" keyWord procName - } - - ################### - #regexp -nocase -all -line -- {proc (::|)(\w+)(::|)(\w+) \{(.*)\} \{} string match v1 v2 v3 v4 v5 - #regexp -nocase -all -line -- {proc (.*) \{(.*)\}} $line match procName params - if {[regexp -nocase -all -line -- {proc (::|)(\w+)(::|)(\w+) \{(.*)\} \{} $line match v1 v2 v3 v4 params]} { - set procName "$v1$v2$v3$v4" - lappend procList($activeProject) [list $procName [string trim $params]] - puts "proc $procName $params" - } - if {[regexp -nocase -all -line -- {set (\w+)} $line match varName]} { - #set varList($activeProject) [list [string trim $varName]] - #puts "variable $varName" - } - - ################### - - # && $procName != "" - if {$keyWord == "proc" || $keyWord == "let" || $keyWord == "class" || $keyWord == "sub" || $keyWord == "function" || $keyWord == "fun" } { - set dot "_" - set openBrace [string first "\{" $line] - set closeBrace [expr [string first "\}" $line]-1] - set var [string range $line $openBrace end] - regsub -all ":" $procName "_" prcNode - if {$keyWord == "proc" || $keyWord == "sub" || $keyWord == "function" || $keyWord == "let"} { - set img "proc.gif" - } elseif {$keyWord == "class"} { - set img "class.gif" - } - if {$keyWord =="proc"} { - - #$w.text tag add procName $lineNumber.[expr $startPos + $length] $lineNumber.[string wordend $line [expr $startPos + $length +2]] - } - if {[$tree exists $prcNode$dot$lineNumber] !=1} { - $tree insert end $node $prcNode$dot$lineNumber -text $procName \ - -data "prc_$procName"\ - -image [Bitmap::get [file join $imgDir $img]] -font $fontNormal - } - } + #puts [$tree nodes $node] + while {[gets $file line] >=0} { + ReadFileStructure "openFile" $line $lineNumber $tree $node incr lineNumber } close $file @@ -971,34 +920,55 @@ proc TextOperation {oper} { } unset nb } +proc ReadFileStructure {mod line lineNumber tree node} { + global projDir workDir imgDir noteBook fontNormal fontBold fileList replace nodeEdit procList + global backUpFileCreate fileExt progress editor braceHighLightBG braceHighLightFG activeProject + global varList + + # Insert procedure names into tree # + regsub -all {\t} $line " " line + set w $noteBook.f$node + if {$mod eq "openFile"} { + $w.text insert end "$line\n" + } + # set progress $lineNumber + set keyWord "" + set procName "" + + if {$fileExt == "php" || $fileExt == "phtml"} { + regexp -nocase -all -- {(function) (.*?)\(} $line match keyWord procName + #puts "$keyWord --- $procName" + } else { + scan $line "%s%s" keyWord procName + } + + ################### + #regexp -nocase -all -line -- {proc (::|)(\w+)(::|)(\w+) \{(.*)\} \{} string match v1 v2 v3 v4 v5 + #regexp -nocase -all -line -- {proc (.*) \{(.*)\}} $line match procName params + if {[regexp -nocase -all -line -- {proc (::|)(\w+)(::|)(\w+) \{(.*)\} \{} $line match v1 v2 v3 v4 params]} { + set procName "$v1$v2$v3$v4" + lappend procList($activeProject) [list $procName [string trim $params]] + puts "proc $procName $params" + } + if {$keyWord == "proc" || $keyWord == "let" || $keyWord == "class" || $keyWord == "sub" || $keyWord == "function" || $keyWord == "fun" } { + set dot "_" + set openBrace [string first "\{" $line] + set closeBrace [expr [string first "\}" $line]-1] + set var [string range $line $openBrace end] + regsub -all ":" $procName "_" prcNode + if {$keyWord == "proc" || $keyWord == "sub" || $keyWord == "function" || $keyWord == "let"} { + set img "proc.gif" + } elseif {$keyWord == "class"} { + set img "class.gif" + } + if {[$tree exists $prcNode$dot$lineNumber] !=1} { + $tree insert end $node $prcNode$dot$lineNumber -text $procName \ + -data "prc_$procName"\ + -image [Bitmap::get [file join $imgDir $img]] -font $fontNormal + } + } +} + #################################### GetOp - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/filedialog.tcl b/lib/filedialog.tcl index c425538..df1309b 100644 --- a/lib/filedialog.tcl +++ b/lib/filedialog.tcl @@ -29,6 +29,7 @@ proc FileDialog {nbNode operation} { {"Text files" {} TEXT} {"All files" *} } + variable tree if {$nbNode eq "files"} { set tree .frmBody.frmCat.noteBook.ffiles.frmTreeFiles.treeFiles } elseif {$nbNode eq "projects"} { @@ -131,9 +132,22 @@ proc FileDialog {nbNode operation} { $noteBook itemconfigure $nbNode -text $file set fileList($nbNode) [list $file 0] } else { - set contents [$text get 0.0 end] set fhandle [open [file join $dir $file] "w"] - puts $fhandle $contents nonewline + set lineNumber 1 + # Progress start + # LabelUpdate .frmStatus.frmProgress.lblProgress "[::msgcat::mc "Opened file in progress"]" + set linesCount [$text count -lines $lineNumber.0 end] + foreach item [$tree nodes $node] { + puts $item + $tree delete $item + } + for {set lineNumber 1} {$lineNumber <= $linesCount} {incr lineNumber} { + set line [$text get $lineNumber.0 $lineNumber.end] + #puts $line + puts $fhandle $line + ReadFileStructure "updateFile" $line $lineNumber $tree $node + #exit + } close $fhandle EditFlag $node [file join $dir $file] 0 } @@ -599,3 +613,5 @@ proc FileOperation::FileDialog {tree operation} { + + diff --git a/lib/main.tcl b/lib/main.tcl index f5e9210..134cc8f 100644 --- a/lib/main.tcl +++ b/lib/main.tcl @@ -156,7 +156,7 @@ $m add separator $m add command -label [::msgcat::mc "Print"] -command PrintDialog\ -font $fontNormal -accelerator "Ctrl+P" $m add separator -$m add command -label [::msgcat::mc "Settings"] -command Settings -font $fontNormal +$m add command -label [::msgcat::mc "Settings"] -command {Settings $noteBook} -font $fontNormal $m add separator $m add command -label [::msgcat::mc "Exit"] -command Quit -font $fontNormal -accelerator "Ctrl+Q" @@ -376,7 +376,6 @@ $noteBook bindtabs {catch [PopupMenuTab .popupTabs %X %Y]} #bind . PageTab #bind . PageTab - bind . {PageTab 1} bind . {PageTab -1} @@ -398,3 +397,5 @@ if {[info exists workingProject]} { + + diff --git a/lib/menu.tcl b/lib/menu.tcl index 1a955be..3dc4b16 100644 --- a/lib/menu.tcl +++ b/lib/menu.tcl @@ -93,3 +93,4 @@ proc GetMenu {m} { + diff --git a/lib/pane.tcl b/lib/pane.tcl index b0a099e..e600fae 100644 --- a/lib/pane.tcl +++ b/lib/pane.tcl @@ -100,3 +100,4 @@ namespace eval pane { + diff --git a/lib/projects.tcl b/lib/projects.tcl index c74f3aa..ff72f9b 100644 --- a/lib/projects.tcl +++ b/lib/projects.tcl @@ -1007,5 +1007,6 @@ proc InsertTitle {newFile type} { + diff --git a/lib/settings.tcl b/lib/settings.tcl index c85a217..8965c64 100644 --- a/lib/settings.tcl +++ b/lib/settings.tcl @@ -6,31 +6,25 @@ ###################################################### ## SETTING DIALOG ## -proc Settings {} { +proc Settings {nBook} { global fontNormal fontBold imgDir workDir global editor color nb topLevelGeometry global main editFrm network global toolBar autoFormat backUpDel backUpCreate backUpShow localeSet localeList wrapSet wrapList set topLevelGeometry [winfo geometry .] - set w .pref - # destroy the find window if it already exists - if {[winfo exists $w]} { - destroy $w + if {[$nBook index settings] != -1} { + $nBook delete settings } + set w [$nBook insert end settings -text [::msgcat::mc "Settings"]] + $nBook raise settings - toplevel $w - wm title $w [::msgcat::mc "Settings"] - # wm resizable $w 0 0 - wm geometry $w 464x450+0+0 - wm transient $w . - #frame $w.frmMain -borderwidth 1 -bg $editor(bg) + # destroy the find window if it already exists frame $w.frmMain -borderwidth 1 pack $w.frmMain -side top -fill both -expand 1 - #frame $w.frmBtn -borderwidth 1 -bg $editor(bg) frame $w.frmBtn -borderwidth 1 pack $w.frmBtn -side top -fill x - set nb [NoteBook $w.frmMain.noteBook -font $fontBold -side top -bg $editor(bg) -fg $editor(fg)] + set nb [NoteBook $w.frmMain.noteBook -font $fontBold -side bottom -bg $editor(bg) -fg $editor(fg)] pack $nb -fill both -expand true -padx 2 -pady 2 button $w.frmBtn.btnFind -text [::msgcat::mc "Save"] -font $fontNormal -width 12 -relief groove \ @@ -134,11 +128,12 @@ proc Settings {} { puts $file "\nset workingProject \"\"" close $file - destroy .pref + #destroy $w + .frmBody.frmWork.noteBook delete settings } button $w.frmBtn.btnCancel -text [::msgcat::mc "Close"] -relief groove -width 12\ - -font $fontNormal -command "destroy $w" -bg $editor(bg) -fg $editor(fg) - pack $w.frmBtn.btnFind $w.frmBtn.btnCancel -fill x -padx 2 -pady 2 -side left + -font $fontNormal -command "destroy $w; $nBook delete settings " -bg $editor(bg) -fg $editor(fg) + pack $w.frmBtn.btnFind $w.frmBtn.btnCancel -fill x -padx 5 -pady 5 -side right ################## MAIN PREF ########################## set main [$nb insert end main -text "[::msgcat::mc "Main"]"] @@ -229,7 +224,7 @@ proc Settings {} { pack $frm_7.lblTgzDir -side left pack $frm_7.txtTgzDir -side left -fill x -expand true pack $frm_7.btnTgzDir -side left - + set frm_8 [frame $main.frmRpmNamed -bg $editor(bg)] label $frm_8.lblRpmNamed -text [::msgcat::mc "RPM file mask"] -width 30 -anchor w\ -font $fontNormal -fg $editor(fg) @@ -340,7 +335,7 @@ proc Settings {} { set frm_15 [frame $editFrm.frmAutoFormat -bg $editor(bg)] label $frm_15.lblAutoFormat -text [::msgcat::mc "Text autoformat"]\ - -width 30 -anchor w -font $fontNormal + -width 30 -anchor w -font $fontNormal checkbutton $frm_15.chkAutoFormat -text "" -variable autoFormat \ -font $fontNormal -onvalue true -offvalue false pack $frm_15.lblAutoFormat -side left @@ -878,4 +873,3 @@ proc SaveSettings {} { $noteBook raise [$noteBook page end] } - diff --git a/projman.tcl b/projman.tcl index 212fd7f..6bf0593 100755 --- a/projman.tcl +++ b/projman.tcl @@ -112,36 +112,36 @@ source [file join $dataDir main.tcl] #option add *tree.foreground red widgetDefault # Set colors for widgets -option add *Frame.Background $editor(bg) startupFile -option add *ScrollableFrame.Background $editor(bg) startupFile -option add *ScrolledWindow.Background $editor(bg) startupFile -option add *Button.Foreground $editor(fg) startupFile -option add *Button.Background $editor(bg) startupFile +option add *Frame.Background $editor(bg) interactive +option add *ScrollableFrame.Background $editor(bg) interactive +option add *ScrolledWindow.Background $editor(bg) interactive +option add *Button.Foreground $editor(fg) interactive +option add *Button.Background $editor(bg) interactive option add *Button.activeBackground $editor(bg) userDefault option add *Button.activeForeground $editor(fg) userDefault -option add *Entry.Foreground $editor(fg) startupFile -option add *Entry.Background $editor(bg) startupFile -option add *Label.Foreground $editor(fg) startupFile +option add *Entry.Foreground $editor(fg) interactive +option add *Entry.Background $editor(bg) interactive +option add *Label.Foreground $editor(fg) interactive option add *Label.Background $editor(bg) interactive -option add *Checkbox.Foreground $editor(fg) startupFile -option add *Checkbox.Background $editor(bg) startupFile -option add *Checkbutton.Foreground $editor(fg) startupFile -option add *Checkbutton.Background $editor(bg) startupFile -option add *Combobox.Foreground $editor(fg) startupFile -option add *Combobox.Background $editor(bg) startupFile -option add *Text.Foreground $editor(fg) startupFile -option add *Text.Background $editor(bg) startupFile -option add *Tree.Background $editor(bg) startupFile -option add *Tree.Foreground $editor(fg) startupFile -option add *Scrollbar.Background $editor(bg) startupFile -option add *Canvas.Background $editor(bg) startupFile -option add *Canvas.Foreground $editor(fg) startupFile -option add *Node.Foreground $editor(fg) startupFile -option add *NoteBook.bg $editor(bg) startupFile -option add *NoteBook.fg $editor(fg) startupFile -option add *Listbox.Foreground $editor(fg) startupFile -option add *Listbox.Background $editor(bg) startupFile +option add *Checkbox.Foreground $editor(fg) interactive +option add *Checkbox.Background $editor(bg) interactive +option add *Checkbutton.Foreground $editor(fg) interactive +option add *Checkbutton.Background $editor(bg) interactive +option add *Combobox.Foreground $editor(fg) interactive +option add *Combobox.Background $editor(bg) interactive +option add *Text.Foreground $editor(fg) interactive +option add *Text.Background $editor(bg) interactive +option add *Tree.Background $editor(bg) interactive +option add *Tree.Foreground $editor(fg) interactive +option add *Scrollbar.Background $editor(bg) interactive +option add *Canvas.Background $editor(bg) interactive +option add *Canvas.Foreground $editor(fg) interactive +option add *Node.Foreground $editor(fg) interactive +option add *NoteBook.bg $editor(bg) interactive +option add *NoteBook.fg $editor(fg) interactive +option add *Listbox.Foreground $editor(fg) interactive +option add *Listbox.Background $editor(bg) interactive #option add *Button.font $guifont userDefault #option add *Label.font $guifont userDefault @@ -176,3 +176,4 @@ option add *Dialog.msg.background $editor(bg) # # +