Parse-Win32Registry
view release on metacpan or search on metacpan
bin/wxregcompare.pl view on Meta::CPAN
$column2 =~ s/\0/[NUL]/g;
$column2 =~ s/\n/[LF]/g;
$column2 =~ s/\r/[CR]/g;
$index = $self->InsertStringItem($index+1, "[$i]");
$self->SetItem($index, 1, $change);
$self->SetItem($index, 2, $column1);
$self->SetItem($index, 3, $column2);
# Color item
if ($change eq 'NEWER' || $change eq 'ADDED') {
$self->SetItemBackgroundColour($index, COLOR_ADDED);
}
elsif ($change eq 'CHANGED') {
$self->SetItemBackgroundColour($index, COLOR_CHANGED);
}
elsif ($change eq 'OLDER' || $change eq 'DELETED') {
$self->SetItemBackgroundColour($index, COLOR_DELETED);
}
}
$self->{_changes} = $changes;
$self->{_keys} = $keys;
$self->{_values} = $values;
}
sub GetEntry {
my ($self, $index) = @_;
my $change = $self->{_changes}[$index];
my $key = $self->{_keys}[$index];
if (defined $self->{_values}) {
my $value = $self->{_values}[$index];
if (defined $value) {
return ($change, $key, $value);
}
else {
# No $key is returned when there is no $value to make
# the recipient realise that this is a list of $value changes.
# This does require that the recipient anticipates receiving
# neither a $key nor a $value.
return ($change);
}
}
else {
return ($change, $key);
}
}
package CompareFrame;
use File::Basename;
use FindBin;
use Parse::Win32Registry qw(make_multiple_subtree_iterator
compare_multiple_keys
compare_multiple_values
hexdump);
use Wx qw(:everything);
use Wx::DND; # required for copying to clipboard
use Wx::Event qw(:everything);
use base qw(Wx::Frame);
use constant ID_DUMP_ENTRIES => Wx::NewId;
use constant ID_FIND_NEXT => Wx::NewId;
use constant ID_FIND_CHANGE => Wx::NewId;
use constant ID_FIND_NEXT_CHANGE => Wx::NewId;
use constant ID_SELECT_FONT => Wx::NewId;
sub new {
my ($class, $parent) = @_;
my $self = $class->SUPER::new($parent, -1, "Registry Compare", wxDefaultPosition, [600, 400]);
bless $self, $class;
$self->SetMinSize([600, 400]);
my $menu1 = Wx::Menu->new;
$menu1->Append(wxID_OPEN, "&Select Files...\tCtrl+O");
$menu1->Append(wxID_CLOSE, "&Close Files\tCtrl+W");
$menu1->AppendSeparator;
$menu1->Append(wxID_EXIT, "E&xit\tAlt+F4");
my $menu2 = Wx::Menu->new;
$menu2->Append(wxID_COPY, "&Copy Path\tCtrl+C");
my $menu3 = Wx::Menu->new;
$menu3->Append(wxID_FIND, "&Find...\tCtrl+F");
$menu3->Append(ID_FIND_NEXT, "Find &Next...\tF3");
$menu3->AppendSeparator;
$menu3->Append(wxID_REPLACE, "Find &Change...\tCtrl+N");
$menu3->Append(ID_FIND_NEXT_CHANGE, "Find N&ext Change...\tF4");
my $menu4 = Wx::Menu->new;
$menu4->Append(ID_SELECT_FONT, "Select &Font...");
my $menu5 = Wx::Menu->new;
$menu5->Append(wxID_ABOUT, "&About...");
my $menubar = Wx::MenuBar->new;
$menubar->Append($menu1, "&File");
$menubar->Append($menu2, "&Edit");
$menubar->Append($menu3, "&Search");
$menubar->Append($menu4, "&View");
$menubar->Append($menu5, "&Help");
$self->SetMenuBar($menubar);
my $statusbar = Wx::StatusBar->new($self, -1);
$self->SetStatusBar($statusbar);
EVT_MENU($self, wxID_OPEN, \&OnOpenFiles);
EVT_MENU($self, wxID_CLOSE, \&OnCloseFiles);
EVT_MENU($self, wxID_EXIT, \&OnQuit);
EVT_MENU($self, wxID_COPY, \&OnCopy);
EVT_MENU($self, wxID_FIND, \&OnFind);
EVT_MENU($self, ID_FIND_NEXT, \&FindNext);
EVT_MENU($self, wxID_REPLACE, \&OnFindChange);
EVT_MENU($self, ID_FIND_NEXT_CHANGE, \&FindNextChange);
( run in 0.697 second using v1.01-cache-2.11-cpan-81fc1098f69 )