Class: TerminalWin

Inherits:
Qt::DockWidget
  • Object
show all
Defined in:
lib/gemviews.rb

Overview


Instance Method Summary collapse

Constructor Details

#initialize(parent) ⇒ TerminalWin

Returns a new instance of TerminalWin.



464
465
466
467
468
469
470
471
# File 'lib/gemviews.rb', line 464

def initialize(parent)
    super('Output', parent)
    self.objectName = 'Terminal'
    createWidget
    processSetup

    connect(self, SIGNAL('destroyed(QObject*)'), self, SLOT('cleanup(QObject*)'))
end

Instance Method Details

#checkErrorInMsg(msg) ⇒ Object



530
531
532
533
534
535
# File 'lib/gemviews.rb', line 530

def checkErrorInMsg(msg)
    @canceled = 0
    if msg =~ /Exiting [\w\s]+ exit_code (\d)/i
        @error = $1.to_i
    end
end

#cleanup(obj) ⇒ Object



547
548
549
550
# File 'lib/gemviews.rb', line 547

def cleanup(obj)
    puts "killing all process."
    @process.kill
end

#createWidgetObject



473
474
475
476
477
478
479
480
481
482
483
484
# File 'lib/gemviews.rb', line 473

def createWidget
    @textEdit = Qt::TextEdit.new
    @textEdit.readOnly = true
    @clearBtn = KDE::PushButton.new(KDE::Icon.new('edit-clear'), i18n('Clear'))
    connect(@clearBtn, SIGNAL(:clicked), @textEdit, SLOT(:clear))

    lw = VBoxLayoutWidget.new do |l|
        l.addWidget(@textEdit)
        l.addWidgets(nil, @clearBtn)
    end
    setWidget(lw)
end

#processfinished(exitCode, exitStatus) ⇒ Object



519
520
521
522
523
524
525
526
527
528
# File 'lib/gemviews.rb', line 519

def processfinished(exitCode, exitStatus)
    write( @process.readAll.data )
#         puts "exitCode:#{exitCode}, @error:#{@error}, @canceled:#{@canceled}"
    ret = exitCode  | @error | @canceled
    msg = ret == 0 ? @successMsg : @failMsg
    passiveMessage(msg)
    if @finishProc
        @finishProc.call(ret)
    end
end

#processReadyReadObject



537
538
539
540
541
542
543
544
545
# File 'lib/gemviews.rb', line 537

def processReadyRead
    lines = @process.readAll.data
    lines.gsub!(/~?ScimInputContextPlugin.*?\n/, '')
    unless lines.empty?
        print lines
        write( lines )
        checkErrorInMsg(lines)
    end
end

#processSetupObject



486
487
488
489
490
491
492
493
494
495
# File 'lib/gemviews.rb', line 486

def processSetup
    @process = Qt::Process.new(self)
    @process.setProcessChannelMode(Qt::Process::MergedChannels)
    connect(@process, SIGNAL('finished(int,QProcess::ExitStatus)'),
            self, SLOT('processfinished(int,QProcess::ExitStatus)'))
    connect(@process, SIGNAL(:readyReadStandardOutput),
            self, SLOT(:processReadyRead))
    connect(@process, SIGNAL(:readyReadStandardError),
            self, SLOT(:processReadyRead))
end

#processStart(cmd, args, successMsg = 'Successed', failMsg = 'Failed', &block) ⇒ Object



501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
# File 'lib/gemviews.rb', line 501

def processStart(cmd, args, successMsg='Successed', failMsg='Failed', &block)
    unless @process.state == Qt::Process::NotRunning
        msg = "process is already running."
        write(msg)
        KDE::MessageBox::information(self, msg)
        return
    end
    msg = "execute : " + cmd.inspect + " " + args.join(' ').inspect + "\n"
    print msg
    write(msg)
    @successMsg = successMsg
    @failMsg = failMsg
    @error = 0
    @canceled = 1
    @process.start(cmd, args)
    @finishProc = block
end

#write(text) ⇒ Object



497
498
499
# File 'lib/gemviews.rb', line 497

def write(text)
    @textEdit.append(text)
end