2 // Copyright (c) 2004, Rodrigo B. de Oliveira (rbo@acm.org)
3 // All rights reserved.
5 // Redistribution and use in source and binary forms, with or without modification,
6 // are permitted provided that the following conditions are met:
8 // * Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 // this list of conditions and the following disclaimer in the documentation
12 // and/or other materials provided with the distribution.
13 // * Neither the name of Rodrigo B. de Oliveira nor the names of its
14 // contributors may be used to endorse or promote products derived from this
15 // software without specific prior written permission.
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
21 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 import System
.Drawing
from System
.Drawing
32 import System
.Windows
.Forms
from System
.Windows
.Forms
37 _filesTab
as TabControl
41 def constructor(glob
as string
, pattern
as string
):
43 Dock
: DockStyle
.Bottom
,
45 Size
: System
.Drawing
.Size(576, 144),
48 SelectedIndexChanged
: _fileList_SelectedIndexChanged
)
50 _fileList
.Columns
.Add("File", 400, HorizontalAlignment
.Left
)
51 _fileList
.Columns
.Add("Line", 50, HorizontalAlignment
.Left
)
54 _splitter
= Splitter(Dock
: DockStyle
.Bottom
, TabStop
: false)
56 _editor
= TextBox(Dock
: DockStyle
.Fill
,
59 ScrollBars
: ScrollBars
.Vertical | ScrollBars
.Horizontal
,
60 Font
: System
.Drawing
.Font("Lucida Console", 12))
62 editorTab
= TabPage(TabIndex
: 0, Text
: "FileName goes here")
63 editorTab
.Controls
.Add(_editor
)
65 _filesTab
= TabControl(Dock
: DockStyle
.Fill
)
66 _filesTab
.Controls
.Add(editorTab
)
68 Controls
.Add(_filesTab
)
69 Controls
.Add(_splitter
)
70 Controls
.Add(_fileList
)
72 ScanDirectory(".", glob
, pattern
)
74 def ScanFile(fname
as string
, pattern
as string
):
76 newLineLen
= len(Environment
.NewLine
)
77 using stream
=File
.OpenText(fname
):
78 for index
, line
as string
in enumerate(stream
):
80 lvItem
= _fileList
.Items
.Add(fname
)
81 lvItem
.SubItems
.Add(index
.ToString())
82 lvItem
.Tag
= (fname
, position
)
83 position
= position
+ len(line
) + newLineLen
85 def ScanDirectory(path
as string
, glob
as string
, pattern
as string
):
86 for fname
in Directory
.GetFiles(path
, glob
):
87 ScanFile(fname
, pattern
)
88 for path
in Directory
.GetDirectories(path
):
89 ScanDirectory(path
, glob
, pattern
)
91 def _fileList_SelectedIndexChanged(sender
, args
as EventArgs
):
93 for lvItem
as ListViewItem
in _fileList
.SelectedItems
:
94 fname
as string
, position
as int
= lvItem
.Tag
96 _editor
.Text
= File
.ReadAllText(fname
)
98 _editor
.SelectionLength
= 0
99 _editor
.SelectionStart
= position
100 _editor
.SelectionLength
= 10
101 _editor
.ScrollToCaret()
104 Application
.Run(MainForm(
107 Text
: "Visual Grep Utility",
108 Font
: Font("Tahoma", 8),
109 Size
: Size(800, 600)))