use strict; use warnings; use Wx; use Wx::Event qw( EVT_BUTTON ); use Wx qw[:everything]; use base qw/Wx::Frame/; # Inherit from Wx::Frame our %panel; my $selectedChapter; Main( @ARGV ); exit( 0 ); sub Main { my $app = Wx::SimpleApp->new; my $frame = Wx::Frame->new( undef, -1, "Test window", [ 100, 100 ], [ 800, 600 ], Wx::wxDEFAULT_FRAME_STYLE()|Wx::wxTAB_TRAVERSAL() ); MakeChaptersPanel( $frame ); $frame->SetSizer( Wx::BoxSizer->new( Wx::wxVERTICAL() ) ); $frame->GetSizer->Add( $panel{first}, 1, Wx::wxEXPAND() ); $frame->Show(1); $app->SetTopWindow($frame); $app->MainLoop; } ## end sub Main sub MakeChaptersPanel { my( $frame ) = @_; $panel{'first'} = Wx::Panel->new( $frame, -1, [ -1, -1 ], [ -1, -1], ); Wx::StaticText->new( $panel{'first'}, 1, "Answer Verification App", [50, 50] ); my $SHOWQUESTION_BTNID = 1; my $showQuestions = Wx::Button->new( $panel{'first'}, $SHOWQUESTION_BTNID, "Show Questions", [150,300] ); my %chapters; my $data_pos = tell DATA; # save the position while () { if ( m@.*?(\d\d)(\d{4})@) { $chapters{$1}++; } } seek DATA, $data_pos, 0; my @chapters; foreach my $chapter (keys %chapters) { push(@chapters,$chapter); } my $CHAPTER_RADIOBOX = 2; my $selectChapter = Wx::RadioBox->new($panel{'first'}, $ CHAPTER_RADIOBOX, "Select the Chapter", Wx::Point->new(100,100), wxDefaultSize, \@chapters, 1, wxRA_SPECIFY_COLS); $selectChapter->SetSelection(1); Wx::Event::EVT_BUTTON( $frame, $showQuestions, sub{\&ShowQuestions(@_, $selectChapter->GetStringSelection())}); return; } ## end sub MakePanels sub MakeQuestionsPanel { my( $frame ) = @_; $panel{'second'} = Wx::Panel->new( $frame, -1, [ -1, -1 ], [ -1, -1 ], ); $panel{'second'}->Hide(); my $NEXTQUESTION_BTNID = 2; my $nextQuestionbtn = Wx::Button->new( $panel{'second'}, $NEXTQUESTION_BTNID, "Next Questions", [150,300] ); my $insideQuestion = 0; my @answerChoices; my $correctAnswer; my $weightage; my $QUESTIONS_RADIOBOX = 3; while () { if ( m@@ ) { $insideQuestion = 1; print $_; next; } if ( m@@ ) { $insideQuestion = 0; my $questionChoices = Wx::RadioBox->new($panel{'second'}, $QUESTIONS_RADIOBOX, "Answer Choices", Wx::Point->new(100,100), wxDefaultSize, \@answerChoices, 1, wxRA_SPECIFY_COLS); $questionChoices->SetStringSelection($correctAnswer); last; } if ( $insideQuestion ) { if ( m@.*?(\d\d)(\d{4})@) { if ( $1 != $selectedChapter) { $insideQuestion = 0; next; } } if ( m@(.*?)@ ) { print "$1\n"; my $questionText = Wx::StaticText->new( $panel{'second'}, 1, "$1", [50, 70] ); } elsif ( m@(.*?)@ ) { push(@answerChoices,$1); } elsif ( m@(.*?)@ ) { $correctAnswer = $1; } elsif ( m@(.*?)@ ) { $weightage = $1; } print "$_"; } } return; } sub ShowQuestions { my ( $frame, $event, $mySelectedChapter ) = @_; my $button = $event->GetEventObject; my $label = $button->GetLabel(); $selectedChapter = $mySelectedChapter; $frame->SetTitle("Chapter " . $selectedChapter); MakeQuestionsPanel( $frame ); $panel{first}->Hide(); $panel{second}->Show(); $frame->GetSizer->Add( $panel{second}, 1, Wx::wxEXPAND() ); $frame->GetSizer->Layout(); } __DATA__ TNHSCS010001 Jenkins is primiary used of ........ Nightly Builds CI Builds Report Generation All the above CI Builds TNHSCS010002 CI builds are setup to ............ catch potentail build errors find bugs reduce build time None of the above catch potentail build errors TNHSCS020001 Jenkins is primiary used of ........ Nightly Builds CI Builds Report Generation All the above CI Builds TNHSCS020002 CI builds are setup to ............ catch potentail build errors find bugs reduce build time None of the above catch potentail build errors