## -*- Ruby -*- ## $Id: renamefox.rb 93 2005-01-11 22:58:46Z Sascha $ begin require 'fox' rescue LoadError require 'fox12' FXTooltip = Fox::FXToolTip FXToolbar = Fox::FXToolBar FXScrollbar = Fox::FXScrollBar FXMenubar = Fox::FXMenuBar FXStatusbar = Fox::FXStatusBar FXStatusline = Fox::FXStatusLine FXToolbarShell = Fox::FXToolBarShell FXToolbarGrip = Fox::FXToolBarGrip end include Fox class RenameFox < Fox::FXMainWindow include Fox include Responder def initialize(app, team = {}) super(app, "RenameFox", nil, nil, DECOR_ALL, 0, 0, 100, 100, 0, 0) initVars initView statusbar = FXStatusbar.new(self, STATUSBAR_WITH_DRAGCORNER) statusbar.setLayoutHints(LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X) FXTooltip.new(getApp, TOOLTIP_NORMAL) end def initVars @pipes = Array.new @fillMode = LAYOUT_FILL_X @frameStyle = FRAME_NONE end def initFrame(aFrame) aFrame.setFrameStyle(@frameStyle) aFrame.setLayoutHints(@fillMode) return aFrame end def initView basicFrame = initFrame(FXVerticalFrame.new(self)) basicFrame.setLayoutHints(LAYOUT_FILL_X|LAYOUT_FILL_Y) directoryFrame = initFrame(FXHorizontalFrame.new(basicFrame)) FXLabel.new(directoryFrame, "Directory:") @dirTextField = FXTextField.new(directoryFrame, 32) @dirTextField.setLayoutHints(@fillMode) @dirTextField.setText(Dir.getwd) dirButton = FXButton.new(directoryFrame, "Choose") dirButton.connect(SEL_COMMAND, method(:onCmdChooseDir)) replaceFrame = initFrame(FXHorizontalFrame.new(basicFrame)) FXLabel.new(replaceFrame, "Replace in Filenames:") @patternTextField = FXTextField.new(replaceFrame, 32) @patternTextField.setLayoutHints(@fillMode) @patternTextField.setText('pattern') FXLabel.new(replaceFrame, "by:") @replacementTextField = FXTextField.new(replaceFrame, 32) @replacementTextField.setLayoutHints(@fillMode) @replacementTextField.setText('replacement') actionFrame = initFrame(FXHorizontalFrame.new(basicFrame)) renameButton = FXButton.new(actionFrame, "Replace") renameButton.connect(SEL_COMMAND, method(:onCmdRename)) previewButton = FXButton.new(actionFrame, "Preview") previewButton.setButtonStyle(BUTTON_DEFAULT) previewButton.setDefault previewButton.connect(SEL_COMMAND, method(:onCmdPreview)) @cmdOutput = FXText.new(basicFrame) @cmdOutput.setLayoutHints(LAYOUT_FILL_X|LAYOUT_FILL_Y) end # Create and show window def create resize(340, 300) super show(PLACEMENT_SCREEN) end def onCmdChooseDir(sender, sel, ptr) dialog = FXDirDialog.new(self, "Open Directory") dialog.setDirectory(directory) @dirTextField.setText(dialog.getDirectory) if dialog.execute end def pattern @patternTextField.getText end def replacement @replacementTextField.getText end def directory @dirTextField.getText end def onPairOfNamesDo &block Dir.chdir(directory) patternRegex = Regexp.compile(pattern) Dir.foreach('.'){ |f| fNew = f.gsub(patternRegex, replacement) block.call(f, fNew) unless fNew == f } end def preview @cmdOutput.setText('') onPairOfNamesDo { |f, fNew| @cmdOutput.appendText("Would replace #{f} by #{fNew}\n") } end def onCmdPreview(sender, sel, ptr) preview end def onCmdRename(sender, sel, ptr) @cmdOutput.setText('') onPairOfNamesDo { |f, fNew| File.rename(f, fNew) @cmdOutput.appendText("Replaced #{f} by #{fNew}\n") } end def onCmdQuit(sender, sel, ptr) getApp.exit(0) end end def runRenamefox() application = Fox::FXApp.new("RenameFox", "Sascha Dördelmann") window = RenameFox.new(application) application.addSignal("SIGINT", window.method(:onCmdQuit)) application.create application.run end if $0 == __FILE__ Dir.chdir($1.gsub(/\\/, File::SEPARATOR)) if $1 runRenamefox end