⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 workdir.tcl

📁 TKCVS Source Code For CVS。
💻 TCL
📖 第 1 页 / 共 4 页
字号:
#
# Tcl Library for TkCVS
#

#
# Current working directory display.  Handles all of the functions
# concerned with navigating about the current directory on the main
# window.
#

proc workdir_setup {} {
  global cwd
  global module_dir
  global cvscfg
  global cvsglb
  global current_tagname
  global logclass
  global tcl_platform

  gen_log:log T "ENTER"
  set cwd [pwd]
  set pid [pid]

  if {[winfo exists .workdir]} {
    wm deiconify .workdir
    raise .workdir
    return
  }

  # Make a new toplevel and unmap . so that the working directory browser
  # the module browser are equal
  toplevel .workdir
  wm title .workdir "TkCVS Working Directory"
  wm iconname .workdir "TkCVS"
  if {$tcl_platform(platform) != "windows"} {
    wm iconbitmap .workdir @$cvscfg(bitmapdir)/tkcvs48.xbm
  }
  wm minsize .workdir 430 300
  wm protocol .workdir WM_DELETE_WINDOW { .workdir.close invoke }
  wm withdraw .

  if {[catch "image type Conflict"]} {
    workdir_images
  }
  # Ignore the dimensions, because they depend on the content.  Use
  # the remembered position though.
  if {[info exists cvscfg(workgeom)]} {
    wm geometry .workdir $cvscfg(workgeom)
  }

  workdir_menus

  #
  # Top section - where we are, where the module is
  #
  frame .workdir.top -relief groove -border 2
  pack .workdir.top -side top -fill x

  ::picklist::entry .workdir.top.tcwd cwd directory
  ::picklist::bind .workdir.top.tcwd <Return> \
     {if {[pwd] != $cwd} {change_dir "$cwd"}}

  button .workdir.top.updir_btn -image updir \
    -command {change_dir ..}

  label .workdir.top.lmodule -text "Path"
  label .workdir.top.tmodule -textvariable module_dir -anchor w -relief groove

  label .workdir.top.ltagname -text "Tag"
  label .workdir.top.ttagname -textvariable current_tagname \
     -anchor w -relief groove

  # Make the Repository Browser button prominent
  button .workdir.top.bmodbrowse -image Modules \
     -command modbrowse_run

  label .workdir.top.lcvsroot -text "CVSROOT"
  entry .workdir.top.tcvsroot -textvariable cvscfg(cvsroot) \
     -relief groove -state readonly \
     -font $cvscfg(guifont) -readonlybackground $cvsglb(readonlybg)

  grid columnconf .workdir.top 1 -weight 1
  grid rowconf .workdir.top 3 -weight 1
  grid .workdir.top.updir_btn -column 0 -row 0 -sticky s
  grid .workdir.top.tcwd -column 1 -row 0 -columnspan 2 \
    -sticky sew -padx 4 -pady 1
  grid .workdir.top.lmodule -column 0 -row 1 -sticky nw
  grid .workdir.top.tmodule -column 1 -row 1 -columnspan 2\
     -padx 4 -pady 1 -sticky new
  grid .workdir.top.bmodbrowse -column 2 -row 2 -rowspan 2 -sticky w
  grid .workdir.top.ltagname -column 0 -row 2 -sticky nw
  grid .workdir.top.ttagname -column 1 -row 2 -padx 4 -pady 1 -sticky new
  grid .workdir.top.lcvsroot -column 0 -row 3 -sticky nw
  grid .workdir.top.tcvsroot -column 1 -row 3 -padx 3 -sticky new


  # Pack the bottom before the middle so it doesnt disappear if
  # the window is resized smaller
  #frame .workdir.bottom -relief groove -border 2 -height 128
  frame .workdir.bottom
  frame .workdir.bottom.filters -relief raised
  pack .workdir.bottom -side bottom -fill x
  pack .workdir.bottom.filters -side top -fill x

  label .workdir.bottom.filters.showlbl -text "Show:" -anchor w
  entry .workdir.bottom.filters.showentry -textvariable cvscfg(file_filter) -width 12
  label .workdir.bottom.filters.hidelbl -text "   Hide:" -anchor w
  entry .workdir.bottom.filters.hideentry -width 12 \
     -textvariable cvsglb(default_ignore_filter)
  label .workdir.bottom.filters.space -text "    "
  button .workdir.bottom.filters.cleanbutton -text "Clean:" \
     -pady 0 -highlightthickness 0 \
     -command workdir_cleanup
  entry .workdir.bottom.filters.cleanentry -width 12 \
     -textvariable cvscfg(clean_these)
  bind .workdir.bottom.filters.showentry <Return> {setup_dir}
  bind .workdir.bottom.filters.hideentry <Return> {
     set cvsglb(default_ignore_filter) [.workdir.bottom.filters.hideentry get]
     setup_dir}
  bind .workdir.bottom.filters.cleanentry <Return> {workdir_cleanup}
  pack .workdir.bottom.filters.showlbl -side left
  pack .workdir.bottom.filters.showentry -side left
  pack .workdir.bottom.filters.hidelbl -side left
  pack .workdir.bottom.filters.hideentry -side left
  pack .workdir.bottom.filters.space -side left
  pack .workdir.bottom.filters.cleanbutton -side left -ipadx 2 -ipady 0
  pack .workdir.bottom.filters.cleanentry -side left

  frame .workdir.bottom.buttons -relief groove -bd 2
  frame .workdir.bottom.buttons.funcs -relief groove -bd 2
  frame .workdir.bottom.buttons.dirfuncs -relief groove -bd 2
  frame .workdir.bottom.buttons.cvsfuncs -relief groove -bd 2
  frame .workdir.bottom.buttons.oddfuncs -relief groove -bd 2
  frame .workdir.bottom.buttons.close -relief groove -bd 2
  pack .workdir.bottom.buttons -side top -fill x -expand yes
  pack .workdir.bottom.buttons.close -side right -padx 10
  pack .workdir.bottom.buttons.funcs -side left -expand yes -anchor w
  pack .workdir.bottom.buttons.dirfuncs -side left -expand yes -anchor w
  pack .workdir.bottom.buttons.cvsfuncs -side left -expand yes -anchor w
  pack .workdir.bottom.buttons.oddfuncs -side left -expand yes -anchor w

  #
  # Action buttons along the bottom of the screen.
  #
  button .workdir.bottom.buttons.funcs.bedit_files -image Fileedit \
     -command { workdir_edit_file [workdir_list_files] }
  button .workdir.bottom.buttons.funcs.bview_files -image Fileview \
     -command { workdir_view_file [workdir_list_files] }
  button .workdir.bottom.buttons.funcs.bdelete_file -image Delete \
     -command { workdir_delete_file [workdir_list_files] }

  button .workdir.bottom.buttons.dirfuncs.brefresh -image Refresh \
     -command { change_dir [pwd] }
  button .workdir.bottom.buttons.dirfuncs.bcheckdir -image Check

  button .workdir.bottom.buttons.cvsfuncs.blogfile -image Branches \
     -command { cvs_branches [workdir_list_files] }
  button .workdir.bottom.buttons.cvsfuncs.bannotate -image Annotate \
     -command { cvs_annotate $current_tagname [workdir_list_files] }
  button .workdir.bottom.buttons.cvsfuncs.bfilelog -image Log \
    -command { cvs_log [workdir_list_files] }
  button .workdir.bottom.buttons.cvsfuncs.bdiff -image Diff \
     -command { comparediff [workdir_list_files] }
  button .workdir.bottom.buttons.cvsfuncs.bconflict -image Conflict \
     -command { cvs_merge_conflict [workdir_list_files] }

  button .workdir.bottom.buttons.cvsfuncs.btag -image Tag \
     -command { file_tag_dialog "no" }
  button .workdir.bottom.buttons.cvsfuncs.bbranchtag -image Branchtag \
     -command { file_tag_dialog "yes" }
  button .workdir.bottom.buttons.cvsfuncs.badd_files -image Add \
     -command { add_dialog [workdir_list_files] }
  button .workdir.bottom.buttons.cvsfuncs.bremove -image Remove \
     -command { subtract_dialog [workdir_list_files] }
  button .workdir.bottom.buttons.cvsfuncs.bcheckin -image Checkin \
      -command cvs_commit_dialog
  button .workdir.bottom.buttons.cvsfuncs.bupdate -image Checkout
  button .workdir.bottom.buttons.cvsfuncs.bupdateopts -image CheckoutOpts \
     -command { update_run }
  button .workdir.bottom.buttons.cvsfuncs.brevert -image Revert \
     -command { cvs_revert [workdir_list_files] }
  button .workdir.bottom.buttons.cvsfuncs.bjoin -image DirBranches \
     -command cvs_joincanvas

  button .workdir.bottom.buttons.oddfuncs.bcvsedit_files -image Edit \
     -command { cvs_edit [workdir_list_files] }
  button .workdir.bottom.buttons.oddfuncs.bunedit_files -image Unedit \
     -command { cvs_unedit [workdir_list_files] }
  button .workdir.bottom.buttons.oddfuncs.block -image Lock
  button .workdir.bottom.buttons.oddfuncs.bunlock -image UnLock
  button .workdir.close -text "Close" \
      -command {
        global cvscfg
        set cvscfg(workgeom) [wm geometry .workdir]
        destroy .workdir
        exit_cleanup 0
      }

  # These buttons work in any directory
  grid .workdir.bottom.buttons.funcs.bdelete_file -column 0 -row 0 \
    -ipadx 2 -rowspan 4 -sticky ns
  grid .workdir.bottom.buttons.funcs.bedit_files -column 1 -row 0 \
     -ipadx 4
  grid .workdir.bottom.buttons.funcs.bview_files -column 1 -row 1 \
     -ipadx 4

  # Directory functions
  grid rowconf .workdir.bottom.buttons.dirfuncs 0 -weight 1
  grid .workdir.bottom.buttons.dirfuncs.brefresh       -column 0 -row 0 \
     -ipadx 4 -ipady 4
  grid .workdir.bottom.buttons.dirfuncs.bcheckdir      -column 1 -row 0 \
     -ipadx 4 -ipady 4

  # Revcontrol functions
  grid .workdir.bottom.buttons.cvsfuncs.blogfile      -column 0 -row 0 \
    -ipadx 4
  grid .workdir.bottom.buttons.cvsfuncs.bjoin         -column 0 -row 1 \
    -ipadx 4
  grid .workdir.bottom.buttons.cvsfuncs.bdiff         -column 1 -row 0 \
    -ipadx 2
  grid .workdir.bottom.buttons.cvsfuncs.bconflict     -column 1 -row 1 \
    -ipadx 2
  grid .workdir.bottom.buttons.cvsfuncs.bfilelog      -column 2 -row 0
  grid .workdir.bottom.buttons.cvsfuncs.bannotate     -column 2 -row 1
  grid .workdir.bottom.buttons.cvsfuncs.bupdate       -column 3 -row 0 \
    -ipadx 4
  grid .workdir.bottom.buttons.cvsfuncs.bcheckin      -column 3 -row 1 \
    -ipadx 4
  grid .workdir.bottom.buttons.cvsfuncs.bupdateopts   -column 4 -row 0 \
    -ipadx 4
  grid .workdir.bottom.buttons.cvsfuncs.brevert       -column 4 -row 1 \
    -ipadx 4
  grid .workdir.bottom.buttons.cvsfuncs.badd_files    -column 5 -row 0
  grid .workdir.bottom.buttons.cvsfuncs.bremove       -column 5 -row 1
  grid .workdir.bottom.buttons.cvsfuncs.btag          -column 6 -row 0 \
    -ipadx 4
  grid .workdir.bottom.buttons.cvsfuncs.bbranchtag    -column 6 -row 1 \
    -ipadx 4

  # These are specialized an not always available
  grid .workdir.bottom.buttons.oddfuncs.block          -column 0 -row 0
  grid .workdir.bottom.buttons.oddfuncs.bunlock        -column 0 -row 1
  grid .workdir.bottom.buttons.oddfuncs.bcvsedit_files -column 1 -row 0
  grid .workdir.bottom.buttons.oddfuncs.bunedit_files  -column 1 -row 1

  pack .workdir.close -in .workdir.bottom.buttons.close \
    -side right -fill both -expand yes

  set_tooltips .workdir.top.updir_btn \
     {"Go up (..)"}
  set_tooltips .workdir.bottom.buttons.funcs.bedit_files \
     {"Edit the selected files"}
  set_tooltips .workdir.bottom.buttons.funcs.bview_files \
     {"View the selected files"}
  set_tooltips .workdir.bottom.buttons.funcs.bdelete_file \
     {"Delete the selected files from the current directory"}

  set_tooltips .workdir.bottom.buttons.dirfuncs.brefresh \
     {"Re-read the current directory"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.bjoin \
     {"Directory Branch Diagram and Merge Tool"}
  set_tooltips .workdir.bottom.buttons.dirfuncs.bcheckdir \
     {"Check the status of the directory"}

  set_tooltips .workdir.bottom.buttons.cvsfuncs.blogfile \
     {"Graphical Branch Diagram of the selected files"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.bfilelog \
     {"Revision Log of the selected files"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.bannotate \
     {"Revision where each line was modified (annotate/blame)"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.bdiff \
     {"Compare the selected files with the repository version"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.bconflict \
     {"Merge Conflicts using TkDiff"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.badd_files \
     {"Add the selected files to the repository"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.btag \
     {"Tag the selected files"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.bbranchtag \
     {"Branch the selected files"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.bremove \
     {"Remove the selected files from the repository"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.bcheckin \
     {"Check in (commit) the selected files to the repository"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.bupdate \
     {"Update (checkout, patch) the selected files from the repository"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.brevert \
     {"Revert the selected files, discarding local edits"}
  set_tooltips .workdir.bottom.buttons.cvsfuncs.bupdateopts \
     {"Update with options (-A, -r, -f, -d, -kb)"}

  set_tooltips .workdir.bottom.buttons.oddfuncs.block \
     {"Lock the selected files"}
  set_tooltips .workdir.bottom.buttons.oddfuncs.bunlock \
     {"Unlock the selected files"}
  set_tooltips .workdir.bottom.buttons.oddfuncs.bcvsedit_files \
     {"Set the Edit flag on the selected files"}
  set_tooltips .workdir.bottom.buttons.oddfuncs.bunedit_files \
     {"Reset the Edit flag on the selected files"}

  set_tooltips .workdir.top.bmodbrowse \
     {"Open the Repository Browser"}
  set_tooltips .workdir.close \
     {"Close the Working Directory Browser"}


  frame .workdir.main
  pack .workdir.main -side bottom -fill both -expand 1 -fill both

  if {! [winfo ismapped .workdir]} {
    wm deiconify .workdir
  }

  change_dir "[pwd]"
  gen_log:log T "LEAVE"
}

proc workdir_images {} {
  global cvscfg

  image create photo arr_up \
    -format gif -file [file join $cvscfg(bitmapdir) arrow_up.gif]
  image create photo arr_dn \
    -format gif -file [file join $cvscfg(bitmapdir) arrow_dn.gif]
  image create photo arh_up \
    -format gif -file [file join $cvscfg(bitmapdir) arrow_hl_up.gif]
  image create photo arh_dn \
    -format gif -file [file join $cvscfg(bitmapdir) arrow_hl_dn.gif]
  image create photo updir \
    -format gif -file [file join $cvscfg(bitmapdir) updir.gif]
  image create photo Folder \
    -format gif -file [file join $cvscfg(bitmapdir) dir.gif]
  image create photo Check \
    -format gif -file [file join $cvscfg(bitmapdir) check.gif]
  image create photo Fileview \
    -format gif -file [file join $cvscfg(bitmapdir) fileview.gif]
  image create photo Fileedit \
    -format gif -file [file join $cvscfg(bitmapdir) fileedit.gif]
  image create photo Annotate \
    -format gif -file [file join $cvscfg(bitmapdir) annotate.gif]
  image create photo Delete \
    -format gif -file [file join $cvscfg(bitmapdir) delete.gif]
  image create photo Refresh \
    -format gif -file [file join $cvscfg(bitmapdir) loop-glasses.gif]
  image create photo Branches \
    -format gif -file [file join $cvscfg(bitmapdir) branch.gif]
  image create photo DirBranches \
    -format gif -file [file join $cvscfg(bitmapdir) dirbranch.gif]
  image create photo Add \
    -format gif -file [file join $cvscfg(bitmapdir) add.gif]
  image create photo Remove \
    -format gif -file [file join $cvscfg(bitmapdir) remove.gif]
  image create photo Diff \
    -format gif -file [file join $cvscfg(bitmapdir) diff.gif]
  image create photo Checkin \
    -format gif -file [file join $cvscfg(bitmapdir) checkin.gif]
  image create photo Revert \
    -format gif -file [file join $cvscfg(bitmapdir) loop-ball.gif]
  image create photo Edit \
    -format gif -file [file join $cvscfg(bitmapdir) edit.gif]
  image create photo Unedit \
    -format gif -file [file join $cvscfg(bitmapdir) unedit.gif]
  image create photo Modules \
    -format gif -file [file join $cvscfg(bitmapdir) modbrowse.gif]
  image create photo Modules_cvs \
    -format gif -file [file join $cvscfg(bitmapdir) modbrowse_cvs.gif]
  image create photo Modules_svn \
    -format gif -file [file join $cvscfg(bitmapdir) modbrowse_svn.gif]
  image create photo Lock \
    -format gif -file [file join $cvscfg(bitmapdir) locked.gif]
  image create photo UnLock \
    -format gif -file [file join $cvscfg(bitmapdir) unlocked.gif]
  image create photo Tags \
    -format gif -file [file join $cvscfg(bitmapdir) tags.gif]
  image create photo Mergebranch \
    -format gif -file [file join $cvscfg(bitmapdir) newmerge_simple.gif]
  image create photo Mergediff \
    -format gif -file [file join $cvscfg(bitmapdir) newmerge.gif]
  image create photo Conflict \
    -format gif -file [file join $cvscfg(bitmapdir) conflict.gif]

  image create photo Man \
    -format gif -file [file join $cvscfg(bitmapdir) man.gif]
}

proc workdir_menus {} {
  global cvscfg
  global cvsmenu
  global usermenu
  global execmenu
  global bookmarks

  gen_log:log T "ENTER"
  set startdir "[pwd]"

  .workdir configure -menu .workdir.menubar
  menu .workdir.menubar

  #
  # Create the Menu bar
  #
  .workdir.menubar add cascade -label "File" -menu .workdir.menubar.file -underline 0
  menu .workdir.menubar.file -tearoff 0
  .workdir.menubar add cascade -label "CVS" -menu .workdir.menubar.cvs -underline 0
  menu .workdir.menubar.cvs -tearoff 0
  .workdir.menubar add cascade -label "SVN" -menu .workdir.menubar.svn -underline 0
  menu .workdir.menubar.svn -tearoff 0
  .workdir.menubar add cascade -label "RCS" -menu .workdir.menubar.rcs -underline 0
  menu .workdir.menubar.rcs -tearoff 0
  .workdir.menubar add cascade -label "Reports" -menu .workdir.menubar.reports -underline 2
  menu .workdir.menubar.reports -tearoff 0
  .workdir.menubar add cascade -label "Options" -menu .workdir.menubar.options -underline 0
  menu .workdir.menubar.options -tearoff 0

  if { [info exists cvsmenu] || \
       [info exists usermenu] || \
       [info exists execmenu]} {
    .workdir.menubar add cascade -label "User Defined" -menu .workdir.menubar.user -underline 0
    menu .workdir.menubar.user -tearoff 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -