Stringscan

Check-in [28f8803fe4]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Code formatting and cleanup
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 28f8803fe4042faa31b4c906b14f12958b9989c11cba829d039f8e1803e836d5
User & Date: kevin 2017-09-19 11:43:46
Context
2017-09-20
02:47
UI tweaks check-in: 8af3877f02 user: kevin tags: trunk
2017-09-19
11:43
Code formatting and cleanup check-in: 28f8803fe4 user: kevin tags: trunk
03:13
Update file for 1.1 check-in: d9d50ad502 user: kevin tags: trunk
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Changes to stringscan.rb.

130
131
132
133
134
135
136
137

138
139
140

141
142
143
144
145
146


147
148

149
150

151
152
153
154
155
156
157
158
130
131
132
133
134
135
136

137
138
139

140
141
142
143
144


145
146
147

148


149

150
151
152
153
154
155
156







-
+


-
+




-
-
+
+

-
+
-
-
+
-







    $glassdata = 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AcSAg8sJGRWZAAAAXhJREFUOMutlL9LQlEUxz+WGRHllGNEPyAUWnLWsVYhXNpd+ldC6B/QPyDnoMXNtbnFIRAarLAn+bDU13IuHC/vPm/agQuXy/d93veec+4Bv9gGKkAbGAORrAHQBPLAOn+MAtBVMNdqARlfaEk+minAJ/AOvAEjC973gWeAnvpoCNSAfWAX2AKKQN36eWtRWhoK+grkErRXlvO8S7hjuah6pK2uwE2X6BKYiujFsx5FlfPBmkO0B6Rkf+8JfgZC2Wdd4EjtNzzBcwVzgccKfuIJzgJp2X+7RIfAjyrGkQe4pvTtpIcxUcLOgt7MSZ8bfcUFDWOebMfhvCp9btqzK7NlLspW/36ptjPrAbgDbqUVbQOFOKh++wFwLfCk4WNM9OS2scPGrA/gQODmbCIFnQpspm7TsIdPWqCPIkgJ9AZ4Uk97DFyIq3NgU7R9yf0wrliB5fZMxqI+K7FEnIpLe+5GkvMyK8SxoyArQTXcOA+XvX5SWoL/gP4Cdj2n/+OJ36AAAAAASUVORK5CYII='

    $folderimage = TkPhotoImage.new(:data => $folderdata)
    $glassimage = TkPhotoImage.new(:data => $glassdata)

    $icondata = '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'
    $icon = TkPhotoImage.new(:data => $icondata)
        #initialize variables for entry
    #initialize variables for entry
    $dirname = TkVariable.new
    $searchterm = TkVariable.new
        #top window and frame
    #top window and frame
    Tk::TkDND::DND
    $root = TkRoot.new {
        title "Stringscan"
    }
        $root.iconphoto_default($icon)
        if $platform == 'aqua'
    $root.iconphoto_default($icon)
    if $platform == 'aqua'
        Tk.tk_call('fullscreen::fullscreen', $root)
        end
    end
        
     $root.withdraw
        $root.withdraw
        
        #menu
    $menubar = TkMenu.new($root)
    TkOption.add '*tearOff', 0
    if $platform == 'aqua'
        $appmenu = TkSysMenu_Apple.new($menubar)
        $menubar.add :cascade, :menu => $appmenu
        $appmenu.add :command, :label => 'About Stringscan', :command=> proc{aboutWindow}
187
188
189
190
191
192
193
194

195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213

214
215
216
217
218
219
220
221

222
223
224
225
226
227
228
185
186
187
188
189
190
191

192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210

211
212
213
214
215
216
217
218

219
220
221
222
223
224
225
226







-
+


















-
+







-
+







    if $platform != 'aqua'
        $helpmenu.add :command, :label => 'About Stringscan', :command=> proc{aboutWindow}
        $helpmenu.add :command, :label => 'License', :command=>proc{getReg}
        $helpmenu.add :command, :label=>'Check for Updates', :command=>proc{checkUpdate}
    end
    $root['menu'] = $menubar
    $mainframe = Tk::Tile::Frame.new($root).pack('side' => 'top','fill' => 'both','expand' => 'yes')
        #button frame and buttons
    #button frame and buttons
    $buttonframe = Tk::Tile::Frame.new($mainframe){padding 2}.pack('side' => 'top','fill' => 'both','expand' => 'no')
    choosedirproc = proc{choosedir}
    $choosebutton = Tk::Tile::Button.new($buttonframe) {
        image $folderimage
        takefocus 0
        padding 5
        command  choosedirproc
    }.pack('side' => 'left','fill' => 'both','expand' => 'no')
    Tk::RbWidget::BalloonHelp.new($choosebutton, 'text'=>'Select Directory', 'background'=>'lightyellow', 'relief'=>'solid', 'borderwidth'=>1)
    stringgrepProc = proc {stringgrep}
    $runbutton = Tk::Tile::Button.new($buttonframe) {
        image $glassimage
        takefocus 0
        padding 5
        command stringgrepProc
    }.pack('side' => 'left','fill' => 'both','expand' => 'no')
    Tk::RbWidget::BalloonHelp.new($runbutton, 'text'=>'Run Search', 'background'=>'lightyellow', 'relief'=>'solid', 'borderwidth'=>1)
    $sep = Tk::Tile::Separator.new($mainframe) { orient 'horizontal' }.pack('side'=> 'top', 'fill'=>'both')
        #labels and entries
    #labels and entries
    $topframe = Tk::Tile::Frame.new($mainframe){padding 5}.pack('side' => 'top','fill' => 'both','expand' => 'no')
    $chooselabel = Tk::Tile::Label.new($topframe) {text "Directory:"}.pack('side' => 'left','fill' => 'both','expand' => 'no')
    $direntry = Tk::Tile::Entry.new($topframe) {textvariable $dirname }.pack('side' => 'left','fill' => 'both','expand' => 'no')
    $termlabel = Tk::Tile::Label.new($topframe) {text "Search Term:"}.pack('side' => 'left','fill' => 'both','expand' => 'no')
    $termentry = Tk::Tile::Entry.new($topframe) {textvariable $searchterm}.pack('side' => 'left','fill' => 'both','expand' => 'no')
    $termentry.bind('Return', proc {stringgrep})
    $nextsep = Tk::Tile::Separator.new($mainframe) {orient 'horizontal'}.pack('side'=>'top', 'fill'=>'both')
        #listbox, textbox, scrollbars
    #listbox, textbox, scrollbars
    $bottomframe = Tk::Frame.new($mainframe).pack('side'=>'bottom','fill' => 'both', 'expand' => 'yes')
    $bottomleftframe = Tk::Tile::Frame.new($bottomframe).pack('side'=>'left','fill' => 'both', 'expand' => 'yes')
    $listlabel = Tk::Tile::Label.new($bottomleftframe) {
        text 'File Name'
        style 'TablelistHeader.TLabel'
        padding 1
    }.pack('side'=>'top', 'fill'=>'both', 'expand' => 'no')
273
274
275
276
277
278
279
280

281
282
283
284

285
286
287
288
289
290
291
271
272
273
274
275
276
277

278
279
280
281

282
283
284
285
286
287
288
289







-
+



-
+







        highlightcolor 'SlateGray3'
        bg 'white'
        state 'disabled'
    }.pack('side'=>'left','fill' => 'both', 'expand' => 'yes')
    $tscrollframe = Tk::Frame.new($bottomrightframe).pack('side'=>'right','fill' => 'y', 'expand' => 'no')
    $tscroll = Tk::Tile::Scrollbar.new($tscrollframe).pack('side'=>'right','fill' => 'y', 'expand' => 'no')
    $tbox.yscrollbar($tscroll)
            $labelframe = Tk::Tile::Frame.new($root).pack('side'=>'bottom', 'fill'=>'both', 'expand' => 'no')
    $labelframe = Tk::Tile::Frame.new($root).pack('side'=>'bottom', 'fill'=>'both', 'expand' => 'no')
    $bottomlabel = Tk::Tile::Label.new($labelframe) {text "No data displayed"}.pack('side' => 'left','fill' => 'both','expand' => 'no')
    $p = Tk::Tile::Progressbar.new($labelframe) {orient 'horizontal'; length 200; mode 'indeterminate'}.pack('side' => 'left','fill' => 'both','expand' => 'no')
    $bottomsep = Tk::Tile::Separator.new($root) { orient 'horizontal' }.pack('side'=> 'bottom', 'fill'=>'both')
        $root.bind("#{$accelkey}-Q", proc{exit})
    $root.bind("#{$accelkey}-Q", proc{exit})
    $root.bind("#{$accelkey}-q", proc{exit})
    $root.bind("#{$accelkey}-O", proc{choosedir})
    $root.bind("#{$accelkey}-o", proc{choosedir})
    $root.bind("#{$accelkey}-R", proc{stringgrep})
    $root.bind("#{$accelkey}-r", proc{stringgrep})

    $root.update