Ruby 入門指南 - encryptgui.rb




encryptgui.rb 的程式原始碼如下

require 'tk'
require './encrypt.rb'

class EncryptGUI
    def initialize
        # 每個 command 的設定
        p_new = proc {newMethod}
        p_load = proc {loadMethod}
        p_save = proc {saveMethod}
        p_encode = proc {encodeMethod}
        p_decode = proc {decodeMethod}
        p_clear = proc {clearMethod}
        p_copy = proc {copyMethod}
        p_input = proc {inputMethod}
        
        # 設定實體變數的初值
        @e = nil
        @userinput = ""
        @result = ""
        
        # 設定 GUI 各元件
        root = TkRoot.new { 
            title "EncryptGUI Demo" 
        }
        @inputText = TkLabel.new(root) {
            text "Input:" 
            width 8
            height 1 
            grid('row'=>0, 'column'=>0)
        }
        @inputField = TkEntry.new(root) {
            width 60
            grid('row'=>0, 'column'=>1, 'columnspan'=>6)
        }
        @outputText = TkLabel.new(root) {
            text 'Output:'
            width 8
            height 1
            grid('row'=>1, 'column'=>0)
        }
        @outputField = TkEntry.new(root) {
            width 60
            grid('row'=>1, 'column'=>1, 'columnspan'=>6)
        }
        @newButton = TkButton.new(root) {
            text "New"
            grid('row'=>2, 'column'=>0)
            command p_new
        }
        @loadButton = TkButton.new(root) {
            text "Load"
            grid('row'=>2, 'column'=>1)
            command p_load
        }
        @saveButton = TkButton.new(root) {
            text "Save"
            grid('row'=>2, 'column'=>2)
            command p_save
        }
        @encodeButton = TkButton.new(root) {
            text "Encode"
            grid('row'=>2, 'column'=>3)
            command p_encode
        }
        @decodeButton = TkButton.new(root) {
            text "Decode"
            grid('row'=>2, 'column'=>4)
            command p_decode
        }
        @clearButton = TkButton.new(root) {
            text "Clear"
            grid('row'=>2, 'column'=>5)
            command p_clear
        }
        @copyButton = TkButton.new(root) {
            text "Copy"
            grid('row'=>2, 'column'=>6)
            command p_copy
        }
        @displayText = TkLabel.new(root) {
            text 'something happened'
            width 65
            height 1;
            justify 'left'
            grid('row'=>4, 'column'=>0, 'columnspan'=>7)
        }
    end
    
    # 建立新 Encrypt 物件
    def newMethod
        @e = Encrypt.new
        @displayText.text = "code: #{@e.getCode}"
    end
    
    # 載入儲存的密碼表
    def loadMethod
        if File.exist?("./code.txt")
            _arr = IO.readlines("./code.txt")
            @e = Encrypt.new
            @e.setCode(_arr[0])
            @displayText.text = "load: #{@e.getCode}"
        else
            @displayText.text = "Load denied!!"
        end
    end
    
    # 儲存密碼表
    def saveMethod
        if @e == nil
            @displayText.text = "No Encrypt object can save!!"
        else
            _file = File.new("./code.txt", "w")
            _file.syswrite(@e.getCode)
            @displayText.text = "The code is saved."
        end
    end
    
    # 進行編碼
    def encodeMethod
        @userinput = @inputField.value

        if @userinput == ""
            @displayText.text = "No input string!!"
        else
            if @e == nil
                @displayText.text = "No encrypt object!!"
            else
                @result = @e.toEncode(@userinput)
                @outputField.value = @result
                @displayText.text = "Encoding success!!"
            end
        end
    end
    
    # 進行解碼
    def decodeMethod
        @userinput = @inputField.value

        if @userinput == ""
            @displayText.text = "No input string!!"
        else
            if @e == nil
                @displayText.text = "No encrypt object!!"
            else
                @result = @e.toDecode(@userinput)
                @outputField.value = @result
                @displayText.text = "Decoding success!!"
            end
        end
    end
    
    # 清除所有輸入、輸出
    def clearMethod
        @e = nil
        @userinput = ""
        @result = ""
        @inputField.value = ""
        @outputField.value = ""
    
        @displayText.text = "It's done."
    end
    
    # 拷貝編碼結果到剪貼簿
    def copyMethod
        if @result == ""
            @displayText.text = "Copy denied!!"
        else
            TkClipboard.set(@result)
            @displayText.text = "It is already copied to the clipboard."
        end
    end

end

=begin
《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:encryptgui.rb
功能:示範 Ruby 程式 
作者:張凱慶
時間:西元 2012 年 12 月
=end


您可以繼續參考
範例程式碼


相關目錄
回 Ruby 入門指南
回 Ruby 教材
回首頁


參考資料
http://www.ruby-lang.org/en/
http://www.ruby-lang.org/en/documentation/
http://rubylearning.com/
http://www.techotopia.com/index.php/Ruby_Essentials
http://pine.fm/LearnToProgram/
http://ruby-doc.org/docs/ProgrammingRuby/
http://www.tutorialspoint.com/ruby/index.htm
http://www.rubyist.net/~slagell/ruby/
http://en.wikibooks.org/wiki/Ruby_programming_language
http://www.ruby-doc.org/core-1.9.3/
http://www.ruby-doc.org/stdlib-1.9.3/

沒有留言: