Exemple #1
0
 def __init__(self, wname='window1'):
     """"""
     self.app = KirmahApp(conf.DEBUG, conf.PCOLOR)
     super().__init__(wname)
Exemple #2
0
 def __init__(self, wname='window1'):
     """"""
     self.app = KirmahApp(conf.DEBUG, conf.PCOLOR)
     super().__init__(wname)
Exemple #3
0
class AppGui(Gui):

    DEFAULT_KEY = 0
    EXISTING_KEY = 1
    NEW_KEY = 2

    IS_SOURCE_DEF = False
    IS_DEST_DEF = True

    MODE_CRYPT = True
    COMPRESSION = True
    NPROC = 2
    PROCEED = False

    curKey = 0
    start = False
    poslog = 0

    @Log(Const.LOG_BUILD)
    def __init__(self, wname='window1'):
        """"""
        self.app = KirmahApp(conf.DEBUG, conf.PCOLOR)
        super().__init__(wname)

    @Log(Const.LOG_UI)
    def on_start(self):
        """"""
        self.app.createDefaultKeyIfNone()
        key, size, mark = self.app.getKeyInfos()

        self.curKey = self.DEFAULT_KEY
        self.get('filechooserbutton1').set_filename(
            self.app.getDefaultKeyPath())
        self.get('filechooserbutton3').set_current_folder(
            conf.DEFVAL_USER_PATH)
        devPath = '/home/dev/git_repos/kirmah2.15/'
        #~ self.get('filechooserbutton3').set_current_folder(devPath)
        self.get('checkbutton1').set_active(conf.DEFVAL_NPROC >= 2)
        self.get('checkbutton3').set_active(True)
        self.get('checkbutton4').set_active(True)
        self.get('spinbutton2').set_value(conf.DEFVAL_NPROC)
        if conf.DEFVAL_NPROC >= 2:
            self.disable('spinbutton2', False)
        self.get('checkbutton2').set_active(conf.DEFVAL_MIXMODE)
        self.get('checkbutton4').set_active(conf.DEFVAL_RANDOMMODE)
        self.get('entry1').set_text(mark)

        Sys.g.UI_AUTO_SCROLL = True
        self.textview = self.get('textview1')
        self.textview.override_background_color(Gtk.StateFlags.NORMAL,
                                                Gdk.RGBA(0, 0, 0, 1.0))
        self.textview.modify_font(
            Pango.font_description_from_string('DejaVu Sans Mono Book 11'))
        self.textbuffer = self.textview.get_buffer()
        self.tags = self.buildTxtTags(self.textbuffer)
        self.progressbar = self.get('progressbar1')
        cbt = self.get('comboboxtext1')
        cbt.connect("changed", self.on_compression_changed)
        tree_iter = cbt.get_model().get_iter_first()
        print(cbt.get_model().get_string_from_iter(tree_iter))
        tree_iter = cbt.get_model().get_iter_from_string('3')
        cbt.set_active_iter(tree_iter)
        cbt = self.get('comboboxtext2')
        cbt.connect("changed", self.on_logging_changed)
        tree_iter = cbt.get_model().get_iter_first()
        tree_iter = cbt.get_model().get_iter_from_string('4')
        cbt.set_active_iter(tree_iter)
        Sys.clear()
        Sys.dprint('INIT UI')
        self.start = True
        self.thkmh = None

    @Log(Const.LOG_UI)
    def launch_thread(self, *args):
        self.progressbar.show()

        def getKmhThread(on_completed, on_interrupted, on_progress, userData,
                         *args):
            thread = CliThread(*args)
            thread.connect("completed", on_completed, userData)
            thread.connect("interrupted", on_interrupted, userData)
            thread.connect("progress", on_progress, userData)
            return thread

        cliargs = [
            'kirmah-cli.py', 'split', '-df',
            '/media/Hermes/webbakup/The Raven.avi', '-z', '-r', '-m', '-o',
            '/home/dev/git_repos/kirmah2.15/The Raven.avi.kmh'
        ]
        cliargs = self.app.getCall()
        self.thkmh = getKmhThread(self.thread_finished,
                                  self.thread_interrupted,
                                  self.thread_progress, None, cliargs,
                                  Sys.g.MPEVENT)
        self.thkmh.start()

    @Log(Const.LOG_UI)
    def on_mixdata_changed(self, checkbox):
        """"""
        self.app.setMixMode(not checkbox.get_active())
        if self.start: self.refreshProceed()

    @Log(Const.LOG_UI)
    def on_randomdata_changed(self, checkbox):
        """"""
        self.app.setRandomMode(not checkbox.get_active())
        if self.start: self.refreshProceed()

    @Log(Const.LOG_UI)
    def on_multiproc_changed(self, checkbox, data=None):
        """"""
        disabled = checkbox.get_active()
        self.disable('spinbutton2', disabled)
        self.app.setMultiprocessing(
            int(self.get('spinbutton2').get_value()) if not disabled else 0)
        if self.start: self.refreshProceed()

    @Log(Const.LOG_UI)
    def on_logging_changed(self, combo):
        """"""
        tree_iter = combo.get_active_iter()
        if tree_iter != None:
            v = combo.get_model()[tree_iter][:2][0]
            if v == 'DISABLED':
                Sys.g.DEBUG = False
            elif hasattr(Const, v):
                Sys.g.DEBUG = True
                exec('Sys.g.LOG_LEVEL = Const.' + v)
            else:
                Sys.g.LOG_LEVEL = Const.LOG_DEFAULT
        if self.start: self.refreshProceed()

    @Log(Const.LOG_DEFAULT)
    def on_compression_changed(self, combo):
        tree_iter = combo.get_active_iter()
        if tree_iter != None:
            model = combo.get_model()
            comp = KirmahHeader.COMP_END if model[tree_iter][:2][
                0] == 'yes' else (KirmahHeader.COMP_NONE if model[tree_iter]
                                  [:2][0] == 'no' else KirmahHeader.COMP_ALL)
            print(comp)
            self.app.setCompression(comp)
        if self.start: self.refreshProceed()

    @Log(Const.LOG_UI)
    def on_nproc_changed(self, spin):
        """"""
        self.app.setMultiprocessing(int(spin.get_value()))
        if self.start: self.refreshProceed()

    @Log(Const.LOG_UI)
    def on_keylen_changed(self, spin):
        """"""
        filename = self.get('filechooserbutton1').get_filename()
        if Io.file_exists(filename):
            self.app.createNewKey(filename,
                                  int(self.get('spinbutton1').get_value()))
            if self.start: self.refreshProceed()

    @Log(Const.LOG_UI)
    def on_new_file_key(self, fc):
        """"""
        filename = fc.get_filename()
        if self.curKey == self.NEW_KEY:
            self.app.createNewKey(filename,
                                  int(self.get('spinbutton1').get_value()))
        self.app.selectKey(filename)
        k, s, m = self.app.getKeyInfos(filename)
        self.get('spinbutton1').set_value(s)
        self.get('entry1').set_text(m)
        self.get('filechooserbutton1').set_filename(filename)
        if self.curKey == self.NEW_KEY:
            self.get('radiobutton2').set_active(True)
            self.disable('spinbutton1', True)
        if self.start: self.refreshProceed()

    @Log(Const.LOG_UI)
    def on_switch_mode(self, s, data):
        """"""
        self.app.switchEncMode(not s.get_active())
        if not self.app.splitmode:
            for n in [
                    'checkbutton2', 'checkbutton4', 'comboboxtext1', 'label12'
            ]:
                self.disable(n, not self.app.encmode)
        #~ self.on_new_file_dest(self.get('filechooserbutton3'))
        if self.start: self.refreshProceed()

    @Log(Const.LOG_UI)
    def on_switch_format(self, s, data):
        """"""
        self.app.switchFormatMode(not s.get_active())
        if self.app.encmode:
            for n in [
                    'checkbutton1', 'spinbutton2', 'checkbutton2',
                    'checkbutton4', 'comboboxtext1', 'label12'
            ]:
                self.disable(n, self.app.splitmode)
        if not s.get_active():
            self.get('label8').set_text('encrypt')
            self.get('label9').set_text('decrypt')
            self.get('checkbutton1').set_sensitive(True)
            self.get('spinbutton2').set_sensitive(True)
        else:
            self.get('label8').set_text('split')
            self.get('label9').set_text('merge')
            self.get('checkbutton1').set_sensitive(False)
            self.get('spinbutton2').set_sensitive(False)
        if self.start: self.refreshProceed()

    @Log(Const.LOG_UI)
    def on_new_file_source(self, fc, data=None):
        """"""
        try:
            self.app.setSourceFile(fc.get_filename())
            self.IS_SOURCE_DEF = True
        except FileNotFoundException as e:
            Sys.eprint('FileNotFoundException :' + str(fc.get_filename()),
                       Const.ERROR)
            self.IS_SOURCE_DEF = False
        self.refreshProceed()

    @Log(Const.LOG_UI)
    def on_new_file_dest(self, fc, data=None):
        """"""
        try:
            self.app.setDestFile(fc.get_filename())
            print(self.app.dst)
        except Exception as e:
            print(e)
            pass
        if self.start:
            self.IS_DEST_DEF = True
            self.refreshProceed()

    @Log(Const.LOG_UI)
    def on_existing_key(self, button):
        """"""
        self.curKey = self.EXISTING_KEY
        self.disable('spinbutton1', True)
        self.disable('filechooserbutton1', False)
        self.get('filechooserbutton1').set_filename(self.app.kpath)
        fc = self.get('filechooserbutton1')
        self.on_new_file_key(fc)

    @Log(Const.LOG_UI)
    def on_new_key(self, button):
        """"""
        self.curKey = self.NEW_KEY
        self.disable('spinbutton1', False)
        self.disable('filechooserbutton1', False)
        self.get('filechooserbutton1').set_current_folder(
            conf.DEFVAL_UKEY_PATH)
        self.get('filechooserbutton1').set_filename(conf.DEFVAL_UKEY_PATH +
                                                    '.rename.key')

    @Log(Const.LOG_UI)
    def on_default_key(self, button):
        """"""
        self.curKey = self.DEFAULT_KEY
        self.disable('spinbutton1', True)
        self.disable('filechooserbutton1', True)
        fc = self.get('filechooserbutton1')
        fc.set_filename(self.app.getDefaultKeyPath())
        self.on_new_file_key(fc)

    @Log(Const.LOG_UI)
    def on_autoscroll_changed(self, btn):
        """"""
        Sys.g.UI_AUTO_SCROLL = not btn.get_active()

    @Log(Const.LOG_NEVER)
    def clear_log(self, btn):
        """"""
        self.textbuffer.set_text('')

    @Log(Const.LOG_UI)
    def show_log(self):
        """"""
        btn = self.get('button1')
        if not self.PROCEED:
            self.get('frame3').hide()
            self.get('frame1').show()
            self.get('frame2').show()
            self.get('checkbutton3').hide()
            self.repack('frame4', True)
            btn.set_sensitive(self.IS_DEST_DEF and self.IS_SOURCE_DEF)

        else:
            self.repack('frame4', False)
            self.get('frame1').hide()
            self.get('frame2').hide()
            self.get('frame3').show()
            self.get('checkbutton3').show()
            if btn.get_label() == conf.GUI_LABEL_PROCEED:
                btn.set_sensitive(False)

    @Log(Const.LOG_UI)
    def refreshProceed(self):
        """"""
        #~ if self.start :
        self.get('button1').set_sensitive(self.IS_DEST_DEF
                                          and self.IS_SOURCE_DEF)

    @Log(Const.LOG_UI)
    def on_proceed(self, btn):
        """"""
        if btn.get_label() == conf.GUI_LABEL_OK:
            btn.set_label(conf.GUI_LABEL_PROCEED)
            self.PROCEED = False
            self.pb.hide()
            self.show_log()

        else:
            if not self.PROCEED:
                self.PROCEED = True
                self.STOPPED = False
                btn.set_sensitive(False)
                self.app.setDestFile(
                    self.get('filechooserbutton3').get_filename())
                if not Io.file_exists(self.app.dst) or self.warnDialog(
                        'file ' + self.app.dst + ' already exists',
                        'Overwrite file ?'):
                    self.pb = self.get('progressbar1')
                    self.pb.set_fraction(0)
                    self.pb.show()
                    self.pb.pulse()
                    btn.set_sensitive(True)
                    btn.set_label(conf.GUI_LABEL_CANCEL)
                    self.clear_log(self.get('checkbutton3'))
                    self.show_log()
                    self.launch_thread()
                else:
                    self.on_proceed_end(True)
            else:
                self.halt_thread()

    @Log(Const.LOG_UI)
    def halt_thread(self, *args):
        Sys.wlog(Sys.dprint())
        Sys.pwarn(('thread interrupt', ), False)
        self.get('button1').set_sensitive(False)
        if self.thkmh is not None and self.thkmh.isAlive():
            self.thkmh.cancel()
        else:
            self.textbuffer.insert_at_cursor('Kmh Thread is not Alive\n')
            self.on_proceed_end(True)
            self.pb.hide()
            self.show_log()

    @Log(Const.LOG_UI)
    def on_proceed_end(self, abort=False):
        """"""
        try:
            btn = self.get('button1')
            btn.set_label('Proceed')
            btn.set_sensitive(True)
            self.PROCEED = False
            if not abort: btn.set_label(conf.GUI_LABEL_OK)
            self.get('checkbutton3').hide()

        except Exception as e:
            Sys.pwarn(
                (('on_proceed_end : ', (str(e), Sys.CLZ_WARN_PARAM), ' !'), ),
                False)
            pass
        return False
Exemple #4
0
class AppGui(Gui):

    DEFAULT_KEY     = 0
    EXISTING_KEY    = 1
    NEW_KEY         = 2

    IS_SOURCE_DEF   = False
    IS_DEST_DEF     = True

    MODE_CRYPT      = True
    COMPRESSION     = True
    NPROC           = 2
    PROCEED         = False

    curKey          = 0
    start           = False
    poslog          = 0


    @Log(Const.LOG_BUILD)
    def __init__(self, wname='window1'):
        """"""
        self.app = KirmahApp(conf.DEBUG, conf.PCOLOR)
        super().__init__(wname)


    @Log(Const.LOG_UI)
    def on_start(self):
        """"""
        self.app.createDefaultKeyIfNone()
        key, size, mark = self.app.getKeyInfos()

        self.curKey = self.DEFAULT_KEY
        print('-'*15)
        v = self.app.getDefaultKeyPath()
        print(v)
        self.get('filechooserbutton1').set_filename(self.app.getDefaultKeyPath())
        print(conf.DEFVAL_USER_PATH)
        self.get('filechooserbutton3').set_current_folder(conf.DEFVAL_USER_PATH)
        devPath = '/home/dev/git_repos/kirmah2.15/'
        #~ self.get('filechooserbutton3').set_current_folder(devPath)
        self.get('checkbutton1').set_active(conf.DEFVAL_NPROC>=2)
        self.get('checkbutton3').set_active(True)
        self.get('checkbutton4').set_active(True)
        self.get('spinbutton2').set_value(conf.DEFVAL_NPROC)
        if conf.DEFVAL_NPROC >= 2:
            self.disable('spinbutton2', False)
        self.get('checkbutton2').set_active(conf.DEFVAL_MIXMODE)
        self.get('checkbutton4').set_active(conf.DEFVAL_RANDOMMODE)
        self.get('entry1').set_text(mark)

        Sys.g.UI_AUTO_SCROLL = True
        self.textview    = self.get('textview1')
        self.textview.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 1.0))
        self.textview.modify_font(Pango.font_description_from_string ('DejaVu Sans Mono Book 11'))
        self.textbuffer  = self.textview.get_buffer()
        self.tags        = self.buildTxtTags(self.textbuffer)
        self.progressbar = self.get('progressbar1')
        cbt = self.get('comboboxtext1')
        cbt.connect("changed", self.on_compression_changed)
        tree_iter = cbt.get_model().get_iter_first()
        print(cbt.get_model().get_string_from_iter(tree_iter))
        tree_iter = cbt.get_model().get_iter_from_string('3')
        cbt.set_active_iter(tree_iter)
        cbt = self.get('comboboxtext2')
        cbt.connect("changed", self.on_logging_changed)
        tree_iter = cbt.get_model().get_iter_first()
        tree_iter = cbt.get_model().get_iter_from_string('4')
        cbt.set_active_iter(tree_iter)
        Sys.clear()
        Sys.dprint('INIT UI')
        self.start = True
        self.thkmh = None


    @Log(Const.LOG_UI)
    def launch_thread(self, *args):
        self.progressbar.show()
        def getKmhThread(on_completed, on_interrupted, on_progress, userData, *args):
            thread = CliThread(*args)
            thread.connect("completed"  , on_completed   , userData)
            thread.connect("interrupted", on_interrupted , userData)
            thread.connect("progress"   , on_progress    , userData)
            return thread
        cliargs = ['kirmah-cli.py', 'split', '-df', '/media/Hermes/webbakup/The Raven.avi', '-z', '-r', '-m', '-o', '/home/dev/git_repos/kirmah2.15/The Raven.avi.kmh']
        cliargs = self.app.getCall()
        self.thkmh = getKmhThread(self.thread_finished, self.thread_interrupted, self.thread_progress, None, cliargs, Sys.g.MPEVENT)
        self.thkmh.start()


    @Log(Const.LOG_UI)
    def on_mixdata_changed(self, checkbox):
        """"""
        self.app.setMixMode(not checkbox.get_active())
        if self.start: self.refreshProceed()


    @Log(Const.LOG_UI)
    def on_randomdata_changed(self, checkbox):
        """"""
        self.app.setRandomMode(not checkbox.get_active())
        if self.start: self.refreshProceed()


    @Log(Const.LOG_UI)
    def on_multiproc_changed(self, checkbox, data = None):
        """"""
        disabled = checkbox.get_active()
        self.disable('spinbutton2',disabled)
        self.app.setMultiprocessing(int(self.get('spinbutton2').get_value()) if not disabled else 0)
        if self.start: self.refreshProceed()


    @Log(Const.LOG_UI)
    def on_logging_changed(self, combo):
        """"""
        tree_iter = combo.get_active_iter()
        if tree_iter != None:
            v = combo.get_model()[tree_iter][:2][0]
            if v =='DISABLED' :
                Sys.g.DEBUG = False
            elif hasattr(Const, v):
                Sys.g.DEBUG = True
                exec('Sys.g.LOG_LEVEL = Const.'+v)
            else :
                Sys.g.LOG_LEVEL = Const.LOG_DEFAULT
        if self.start: self.refreshProceed()


    @Log(Const.LOG_DEFAULT)
    def on_compression_changed(self, combo):
        tree_iter = combo.get_active_iter()
        if tree_iter != None:
            model = combo.get_model()
            comp = KirmahHeader.COMP_END if  model[tree_iter][:2][0]=='yes' else (KirmahHeader.COMP_NONE if model[tree_iter][:2][0]=='no' else KirmahHeader.COMP_ALL)
            print(comp)
            self.app.setCompression(comp)
        if self.start: self.refreshProceed()


    @Log(Const.LOG_UI)
    def on_nproc_changed(self, spin):
        """"""
        self.app.setMultiprocessing(int(spin.get_value()))
        if self.start: self.refreshProceed()


    @Log(Const.LOG_UI)
    def on_keylen_changed(self, spin):
        """"""
        filename = self.get('filechooserbutton1').get_filename()
        if Io.file_exists(filename):
            self.app.createNewKey(filename, int(self.get('spinbutton1').get_value()))
            if self.start: self.refreshProceed()


    @Log(Const.LOG_UI)
    def on_new_file_key(self, fc):
        """"""
        filename = fc.get_filename()
        if self.curKey == self.NEW_KEY:
            self.app.createNewKey(filename, int(self.get('spinbutton1').get_value()))
        self.app.selectKey(filename)
        k, s, m = self.app.getKeyInfos(filename)
        self.get('spinbutton1').set_value(s)
        self.get('entry1').set_text(m)
        self.get('filechooserbutton1').set_filename(filename)
        if self.curKey == self.NEW_KEY:
            self.get('radiobutton2').set_active(True)
            self.disable('spinbutton1', True)
        if self.start: self.refreshProceed()


    @Log(Const.LOG_NEVER)
    def on_switch_mode(self, s, data):
        """"""
        self.app.switchEncMode(not s.get_active())
        if not self.app.splitmode :
            for n in ['checkbutton2','checkbutton4','comboboxtext1','label12']:
                self.disable(n, not self.app.encmode)
        #~ self.on_new_file_dest(self.get('filechooserbutton3'))
        if self.start: self.refreshProceed()


    @Log(Const.LOG_NEVER)
    def on_switch_format(self, s, data):
        """"""
        self.app.switchFormatMode(not s.get_active())
        if self.app.encmode :
            for n in ['checkbutton1', 'spinbutton2', 'checkbutton2','checkbutton4','comboboxtext1','label12']:
                self.disable(n, self.app.splitmode)
        if not s.get_active() :
            self.get('label8').set_text('encrypt')
            self.get('label9').set_text('decrypt')
            self.get('checkbutton1').set_sensitive(True)
            self.get('spinbutton2').set_sensitive(True)
        else :
            self.get('label8').set_text('split')
            self.get('label9').set_text('merge')
            self.get('checkbutton1').set_sensitive(False)
            self.get('spinbutton2').set_sensitive(False)
        if self.start: self.refreshProceed()


    @Log(Const.LOG_UI)
    def on_new_file_source(self, fc, data=None):
        """"""
        try:
            self.app.setSourceFile(fc.get_filename())
            self.IS_SOURCE_DEF = True
        except FileNotFoundException as e:
            Sys.eprint('FileNotFoundException :' + str(fc.get_filename()), Const.ERROR)
            self.IS_SOURCE_DEF = False
        self.refreshProceed()


    @Log(Const.LOG_UI)
    def on_new_file_dest(self, fc, data=None):
        """"""
        try :
            self.app.setDestFile(fc.get_filename())
            print(self.app.dst)
        except Exception as e :
            print(e)
            pass
        if self.start:
            self.IS_DEST_DEF = True
            self.refreshProceed()


    @Log(Const.LOG_UI)
    def on_existing_key(self, button):
        """"""
        self.curKey = self.EXISTING_KEY
        self.disable('spinbutton1',True)
        self.disable('filechooserbutton1',False)
        self.get('filechooserbutton1').set_filename(self.app.kpath)
        fc = self.get('filechooserbutton1')
        self.on_new_file_key(fc)


    @Log(Const.LOG_UI)
    def on_new_key(self, button):
        """"""
        self.curKey = self.NEW_KEY
        self.disable('spinbutton1',False)
        self.disable('filechooserbutton1',False)
        self.get('filechooserbutton1').set_current_folder(conf.DEFVAL_UKEY_PATH)
        self.get('filechooserbutton1').set_filename(conf.DEFVAL_UKEY_PATH+'.rename.key')


    @Log(Const.LOG_UI)
    def on_default_key(self, button):
        """"""
        self.curKey = self.DEFAULT_KEY
        self.disable('spinbutton1',True)
        self.disable('filechooserbutton1',True)
        fc = self.get('filechooserbutton1')
        fc.set_filename(self.app.getDefaultKeyPath())
        self.on_new_file_key(fc)


    @Log(Const.LOG_UI)
    def on_autoscroll_changed(self, btn):
        """"""
        Sys.g.UI_AUTO_SCROLL = not btn.get_active()


    @Log(Const.LOG_NEVER)
    def clear_log(self, btn):
        """"""
        self.textbuffer.set_text('')


    @Log(Const.LOG_UI)
    def show_log(self):
        """"""
        btn = self.get('button1')
        if not self.PROCEED :
            self.get('frame3').hide()
            self.get('frame1').show()
            self.get('frame2').show()
            self.get('checkbutton3').hide()
            self.repack('frame4', True)
            btn.set_sensitive(self.IS_DEST_DEF and self.IS_SOURCE_DEF)

        else :
            self.repack('frame4', False)
            self.get('frame1').hide()
            self.get('frame2').hide()
            self.get('frame3').show()
            self.get('checkbutton3').show()
            if btn.get_label() == conf.GUI_LABEL_PROCEED :
                btn.set_sensitive(False)


    @Log(Const.LOG_UI)
    def refreshProceed(self):
        """"""
        #~ if self.start :
        self.get('button1').set_sensitive(self.IS_DEST_DEF and self.IS_SOURCE_DEF)


    @Log(Const.LOG_UI)
    def on_proceed(self, btn):
        """"""
        if btn.get_label() == conf.GUI_LABEL_OK :
            btn.set_label(conf.GUI_LABEL_PROCEED)
            self.PROCEED = False
            self.pb.hide()
            self.show_log()

        else :
            if not self.PROCEED :
                self.PROCEED = True
                self.STOPPED = False
                btn.set_sensitive(False)
                self.app.setDestFile(self.get('filechooserbutton3').get_filename())
                if not Io.file_exists(self.app.dst) or self.warnDialog('file '+self.app.dst+' already exists', 'Overwrite file ?'):
                    self.pb = self.get('progressbar1')
                    self.pb.set_fraction(0)
                    self.pb.show()
                    self.pb.pulse()
                    btn.set_sensitive(True)
                    btn.set_label(conf.GUI_LABEL_CANCEL)
                    self.clear_log(self.get('checkbutton3'))
                    self.show_log()
                    self.launch_thread()
                else :
                    self.on_proceed_end(True)
            else :
                self.halt_thread()


    @Log(Const.LOG_UI)
    def halt_thread(self, *args):
        Sys.wlog(Sys.dprint())
        Sys.pwarn(('thread interrupt',), False)
        self.get('button1').set_sensitive(False)
        if self.thkmh is not None and self.thkmh.isAlive():
            self.thkmh.cancel()
        else :
            self.textbuffer.insert_at_cursor('Kmh Thread is not Alive\n')
            self.on_proceed_end(True)
            self.pb.hide()
            self.show_log()


    @Log(Const.LOG_UI)
    def on_proceed_end(self, abort=False):
        """"""
        try :
            btn = self.get('button1')
            btn.set_label('Proceed')
            btn.set_sensitive(True)
            self.PROCEED = False
            if not abort : btn.set_label(conf.GUI_LABEL_OK)
            self.get('checkbutton3').hide()

        except Exception as e:
            Sys.pwarn((('on_proceed_end : ',(str(e),Sys.CLZ_WARN_PARAM), ' !'),), False)
            pass
        return False