Utils.pm.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:2k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. package Interface::Wx::Utils;
  2. use strict;
  3. use FindBin qw($RealBin);
  4. use File::Spec;
  5. use Exporter;
  6. use base qw(Exporter);
  7. use Wx ':everything';
  8. use Wx::Event qw(EVT_BUTTON);
  9. our @EXPORT = qw(loadDialog loadPNG setupDialog dataFile);
  10. our %files;
  11. our @searchPath;
  12. our $pngAdded;
  13. sub loadDialog {
  14. my ($file, $parent, $name) = @_;
  15. my $realfile = dataFile($file);
  16. my $xml;
  17. if (!$files{$realfile}) {
  18. require Wx::XRC;
  19. $xml = new Wx::XmlResource;
  20. $xml->InitAllHandlers;
  21. $xml->Load($realfile);
  22. $files{$realfile} = $xml;
  23. } else {
  24. $xml = $files{$realfile};
  25. }
  26. return $xml->LoadDialog($parent, $name);
  27. }
  28. sub loadPNG {
  29. my $file = shift;
  30. if (!$pngAdded) {
  31. Wx::Image::AddHandler(new Wx::PNGHandler);
  32. $pngAdded = 1;
  33. }
  34. my $image = Wx::Image->newNameType(dataFile($file), wxBITMAP_TYPE_PNG);
  35. return new Wx::Bitmap($image);
  36. }
  37. sub setupDialog {
  38. my $dialog = shift;
  39. my $ok_name = (shift || 'ok');
  40. my $cancel_name = (shift || 'cancel');
  41. EVT_BUTTON($dialog, $dialog->FindWindow($ok_name)->GetId, sub {
  42. $_[0]->EndModal(wxID_OK);
  43. });
  44. EVT_BUTTON($dialog, $dialog->FindWindow($cancel_name)->GetId, sub {
  45. $_[0]->EndModal(wxID_CANCEL);
  46. });
  47. }
  48. sub dataFile {
  49. my $default = File::Spec->catfile($RealBin, 'src', 'Interface', 'Wx');
  50. foreach my $dir (@searchPath, $default) {
  51. my $file = File::Spec->catfile($dir, $_[0]);
  52. return $file if (-f $file);
  53. }
  54. }
  55. package Wx::Window;
  56. sub W {
  57. return $_[0]->FindWindow($_[1]);
  58. }
  59. sub WS {
  60. my $self = shift;
  61. my @ret;
  62. foreach (@_) {
  63. push @ret, $self->FindWindow($_);
  64. }
  65. return @ret;
  66. }
  67. 1;