def __SetText(self, panel): self.SetTitle(structs.CurLang('NewResearch', 'Title')) text_source = structs.Language['NewResearch'] for element in panel.GetChildren(): name = element.GetName() if name in text_source: element.SetLabel(structs.CurLang('NewResearch', name, False))
def __Stage_1_SetText(self, panel, timer): timerText = panel.FindWindow('ConfidenceTimerSec') segsLabels = panel.FindWindow('SegsLabels') nextBtn = panel.FindWindow('NextButton') slider = panel.FindWindow('ConfidenceSlider') percent = panel.FindWindow('ConfidencePercent') if timer: timerText.SetLabel( str(self.confidenceTime) + structs.CurLang('Research', 'TimerSec', False)) percent.Hide() slider.Hide() segsLabels.Hide() nextBtn.Hide() timerText.Show() else: nextBtn.SetLabel(structs.CurLang('Research', 'NextButton')) percent.SetLabel( structs.CurLang('Research', 'ConfidencePercent') + ' ' + str(slider.GetValue()) + '%') segsLabels.SetLabel(structs.CurLang('Research', 'SegsLabels')) percent.Show() slider.Show() segsLabels.Show() nextBtn.Show() timerText.Hide() UpdateAll(panel)
def __Stage_2_ValidateAnswer(self, answer): if len(answer) == 0: WrnMsg(structs.CurLang('Research', 'EmptyAnswerWarningTitle'), structs.CurLang('Research', 'EmptyAnswerWarning'), self) return False self.questionsAnswered += 1 return True
def __OpenFile(filePath, dia=False, msg=False, errStr=structs.CurLang('Files', 'OpenFileDefaultErrStr'), extension=ext.ANY): if not CheckExisting(filePath): msgAns = True if msg: msgAns = ui.QueDia( structs.CurLang('Files', 'OpenFileTitle'), errStr + structs.CurLang('Files', 'OpenFileContent')) if dia and msgAns: filePath = ui.FileOpenDia(extension) else: return None if filePath == None: return None mode = {'mode': 'r'} if extension in [ext.JSON, ext.LOG, ext.TXT, ext.XML, ext.CONFIG]: mode['mode'] = 'r' mode['encoding'] = 'utf8' else: mode['mode'] = 'rb' with open(filePath, **mode) as content: data = content.read() return data
def __SetText(self, mainPanel): self.SetTitle(structs.CurLang('Research', 'Title')[self.stage - 1]) text_source = structs.Language['Research'] for element in mainPanel.GetChildren(): name = element.GetName() if name in text_source: element.SetLabel(structs.CurLang('Research', name, False)) self.__Stage_2_SetText(self.stagesPanels[1], self.groupPanels)
def __Stage_2_SetText(self, panel, gPanels): for gPanel in gPanels: gPanel.FindWindow('AnswerButton').SetLabel( structs.CurLang('Research', 'AnswerButton')) gPanel.FindWindow('ValidateButton').SetLabel( structs.CurLang('Research', 'ValidateButton')) gPanel.FindWindow('CancelButton').SetLabel( structs.CurLang('Research', 'CancelButton')) UpdateAll(panel)
def __StartBtnClick(self, event): if not structs.ImportQuestions( files.OpenJSON( structs.GetSetting('questions_pack'), True, True, structs.CurLang('Files', 'QuestionsPackFileName'))): ErrMsg( structs.CurLang('Files', 'LoadingErrorTitle'), structs.CurLang('Files', 'LoadingError') + ' ' + structs.CurLang('Files', 'QuestionsPackFileName', False), self) return if not (structs.GetQuestionsNumber() % structs.GetSetting('groups_number') == 0): ErrMsg(structs.CurLang('Settings', 'WrongGroupsNumberTitle'), structs.CurLang('Settings', 'WrongGroupsNumber'), self) return if structs.GetSetting('image'): images = [] for i in range(1, structs.GetSetting('groups_number') + 1): img = str(i) + '.png' if files.CheckExisting(img): images.append(wx.Bitmap(img)) else: ErrMsg( structs.CurLang('Files', 'LoadingErrorTitle'), structs.CurLang('Files', 'LoadingError') + ' ' + structs.CurLang('Files', 'ImageFileName', False), self) return structs.ImportImagePack(images) OpenFrame(newResearchFrame, self, True)
def __Stage_2_SetContents(self, panel): panel.FindWindow('RoundNumber').SetLabel( structs.CurLang('Research', 'RoundNumber') + ' ' + str(self.roundNumber) + '/' + str(self.roundsNubmer)) self.__Stage_2_SetGroupsContents(self.groupPanels) btn = panel.FindWindow('NextRoundButton') if self.roundNumber == self.roundsNubmer: btn.SetLabel(structs.CurLang('Research', 'NextRoundButton')[1]) else: btn.SetLabel(structs.CurLang('Research', 'NextRoundButton')[0]) btn.Disable() UpdateAll(panel)
def __Validate(self, panel): name = len(panel.FindWindow('NameText').GetValue()) > 0 sex = panel.FindWindow('SexChoice').GetCurrentSelection() != -1 result = name and sex wrnStr = structs.CurLang('NewResearch', 'ValidatorWrn') + ' :' if not name: wrnStr += '\n' + structs.CurLang('NewResearch', 'NameLabel') if not sex: wrnStr += '\n' + structs.CurLang('NewResearch', 'SexLabel') if not result: WrnMsg(structs.CurLang('NewResearch', 'ValidatorWrnTitle'), wrnStr, self) return result
def OnInit(self): structs.ImportSettings( files.OpenJSON('settings.json', True, True, structs.CurLang('Files', 'ConfigurationFileName'))) appIconPath = 'icon.png' if files.CheckExisting(appIconPath): structs.SetIcon(wx.Icon(appIconPath)) else: ui.ErrMsg(structs.CurLang('Files', 'IconLoadingErrorTitle'), structs.CurLang('Files', 'IconLoadingError')) return False ui.FramesStart() self.SetTopWindow(ui.mainFrame) return True
def __Stage_1_SetContents(self, panel): panel.FindWindow('ConfidenceSlider').SetValue(0) panel.FindWindow('QuestionNumber').SetLabel( structs.CurLang('Research', 'QuestionNumber') + ' ' + str(self.questionNumber) + '/60 :') panel.FindWindow('QuestionText').SetLabel( textwrap.fill(structs.GetQuestion(self.questionNumber), 40))
def __Stage_1_SliderEvt(self, event): panel = self.stagesPanels[0] slider = panel.FindWindow('ConfidenceSlider') percent = panel.FindWindow('ConfidencePercent') percent.SetLabel( structs.CurLang('Research', 'ConfidencePercent') + ' ' + str(slider.GetValue() * 5) + '%')
def __Stage_2_ValidateBtnClick(self, event): self.stopwatch.Stop() panel = event.GetEventObject().GetParent() panelNumber = self.panelsNumbers[panel] answer = panel.FindWindow('AnswerField').GetValue() if self.__Stage_2_ValidateAnswer(answer): panel.FindWindow('AnswerField').Hide() panel.FindWindow('ValidateButton').Hide() panel.FindWindow('CancelButton').Hide() answerText = panel.FindWindow('AnswerText') answerText.SetLabel( textwrap.fill( structs.CurLang('Research', 'AnswerText') + ' : ' + answer, 40)) answerText.Show() qn = self.__Stage_2_CalculateQuestionNumber(panelNumber) if structs.GetSetting('score'): self.__Stage_2_ScoreRecalc(panelNumber, qn, answer) if self.questionsAnswered == structs.GetSetting('groups_number'): panel.GetParent().FindWindow('NextRoundButton').Enable() UpdateAll(panel.GetParent()) self.answers.append( structs.NewAnswer(self.questions[qn], answer, self.stopwatch.GetTime())) else: self.stopwatch.Start()
def __Stage_1_Restart(self, panel): self.questionNumber += 1 if self.questionNumber <= structs.GetQuestionsNumber(): self.confidenceTime = structs.GetSetting('confidence_time') self.__Stage_1_SetContents(panel) self.__Stage_1_SetText(panel, True) self.confidenceTimer.Start(1000) else: self.stage += 1 self.Hide() InfMsg( structs.CurLang('Research', 'Title')[self.stage - 1], structs.CurLang('Research', 'InformationText')[self.stage - 1], self) self.questions = [0] + structs.GetQuestionsConfident( log.GetConfidences()) self.__SetText(self.mainPanel) self.stagesPanels[0].Hide() self.stagesPanels[1].Show() self.Show() self.__Stage_2_Round(self.stagesPanels[1], self.groupPanels)
def __Stage_2_Round(self, panel, gPanels): self.roundNumber += 1 self.questionsAnswered = 0 self.answers = [] if self.roundNumber <= self.roundsNubmer: for gPanel in gPanels: self.__Stage_2_AnswerElementsHide(gPanel) self.__Stage_2_SetContents(panel) self.stopwatch.Reset() self.stopwatch.Start() else: self.stage += 1 self.Hide() InfMsg( structs.CurLang('Research', 'Title')[self.stage - 1], structs.CurLang('Research', 'InformationText')[self.stage - 1], self) logs = log.ExportLog() if not files.SaveJSON(logs): files.SaveJSON(logs, log.GenLogName() + '.json') self.Close()
def __FileDia(extension, source, mode): if source == None: source = wx.Window() mt = mode & (wx.FD_OPEN | wx.FD_SAVE) modeTitles = { wx.FD_OPEN: 'OpenFileDialogTitle', wx.FD_SAVE: 'SaveFileDialogTitle' } title = structs.CurLang('Files', modeTitles[mt]) return wx.FileDialog(source, message=title, wildcard=files.Wildcard(extension), style=mode)
def Wildcard(extension): exts = { ext.TXT: ['Ext_TXT', '(*.txt)|*.txt'], ext.JSON: ['Ext_JSON', '(*.json)|*.json'], ext.CONFIG: ['Ext_CONFIG', '(*.config)|*.config'], ext.XML: ['Ext_XML', '(*.xml)|*.xml'], ext.LOG: ['Ext_LOG', '(*.log)|*.log'], ext.BMP: ['Ext_BMP', '(*.bmp)|*.bmp'], ext.JPEG: ['Ext_JPEG', '(*.jpg;*.jpeg)|*.jpg;*.jpeg'], ext.PNG: ['Ext_PNG', '(*.png)|*.png'], ext.ANY: ['Ext_ANY', '(*.*)|*.*'] } return structs.CurLang('Files', exts[extension][0]) + ' ' + exts[extension][1]
def __init__(self, parent): wx.Frame.__init__(self, parent=parent, style=wx.CLOSE_BOX | wx.CAPTION) self.SetIcon(structs.GetIcon()) self.stage = 1 self.questionNumber = 0 self.confidenceTime = structs.GetSetting('confidence_time') self.confidenceTimer = wx.Timer(self) self.roundNumber = 0 self.roundsNubmer = structs.GetQuestionsNumber() // structs.GetSetting( 'groups_number') self.questionsAnswered = 0 self.questions = [] self.answers = [] self.scores = [0] * structs.GetSetting('groups_number') self.stopwatch = log.Stopwatch() self.mainPanel = wx.Panel(self) self.stagesPanels = [ wx.Panel(self.mainPanel), wx.Panel(self.mainPanel) ] self.groupPanels = [] self.panelsNumbers = {} self.sortRounds = [4, 7, 10] self.__SetLayout(self.mainPanel, self.stagesPanels) self.__SetBinding(self.mainPanel, self.stagesPanels) InfMsg( structs.CurLang('Research', 'Title')[self.stage - 1], structs.CurLang('Research', 'InformationText')[self.stage - 1], self) self.stagesPanels[1].Hide() self.__Stage_1_Restart(self.stagesPanels[0])
def OpenJSON(filePath, dia=False, msg=False, errStr=structs.CurLang('Files', 'Ext_JSON')): return Open(filePath, dia, msg, errStr, extension=ext.JSON)
def Open(filePath, dia=False, msg=False, errStr=structs.CurLang('Files', 'Ext_ANY'), extension=ext.ANY): return __OpenFile(filePath, dia, msg, errStr, extension)
def __AboutBtnClick(self, event): InfMsg(structs.CurLang('About', 'Title'), structs.CurLang('About', 'Text'), self)
def OpenPNG(filePath, dia=False, msg=False, errStr=structs.CurLang('Files', 'Ext_PNG')): return Open(filePath, dia, msg, errStr, extension=ext.PNG)
def __SetLayout(self, panel): wx.StaticText(panel, name='NameLabel', style=wx.ALIGN_RIGHT) wx.TextCtrl(panel, name='NameText') wx.StaticText(panel, name='DateLabel', style=wx.ALIGN_RIGHT) wx.adv.DatePickerCtrl(panel, name='DatePicker', style=wx.adv.DP_DEFAULT) wx.StaticText(panel, name='SexLabel', style=wx.ALIGN_RIGHT) wx.Choice(panel, name='SexChoice', choices=structs.CurLang('NewResearch', 'SexChoices')) wx.Button(panel, name='StartButton') wx.Button(panel, name='CancelButton') nameSizer = wx.BoxSizer(wx.HORIZONTAL) dateSizer = wx.BoxSizer(wx.HORIZONTAL) sexSizer = wx.BoxSizer(wx.HORIZONTAL) buttonsSizer = wx.BoxSizer(wx.HORIZONTAL) topSizer = wx.BoxSizer(wx.VERTICAL) baseSizer = wx.BoxSizer(wx.VERTICAL) style = { 'lowSizer1': { 'proportion': 1, 'flag': wx.ALL | wx.ALIGN_CENTER_VERTICAL, 'border': 3 }, 'lowSizer2': { 'proportion': 2, 'flag': wx.ALL | wx.ALIGN_CENTER_VERTICAL, 'border': 3 }, 'lowSizer3': { 'proportion': 1, 'flag': wx.ALL | wx.EXPAND, 'border': 3 }, 'topSizer': { 'flag': wx.ALL | wx.EXPAND, 'border': 3 }, 'baseSizer': { 'flag': wx.ALL, 'border': 3 } } nameSizer.Add(panel.FindWindow('NameLabel'), **style['lowSizer1']) nameSizer.Add(panel.FindWindow('NameText'), **style['lowSizer2']) dateSizer.Add(panel.FindWindow('DateLabel'), **style['lowSizer1']) dateSizer.Add(panel.FindWindow('DatePicker'), **style['lowSizer2']) sexSizer.Add(panel.FindWindow('SexLabel'), **style['lowSizer1']) sexSizer.Add(panel.FindWindow('SexChoice'), **style['lowSizer2']) buttonsSizer.Add(panel.FindWindow('StartButton'), **style['lowSizer3']) buttonsSizer.Add(panel.FindWindow('CancelButton'), **style['lowSizer3']) topSizer.Add(nameSizer, **style['topSizer']) topSizer.Add(dateSizer, **style['topSizer']) topSizer.Add(sexSizer, **style['topSizer']) topSizer.Add(wx.StaticLine(panel), **style['topSizer']) topSizer.Add(buttonsSizer, **style['topSizer']) baseSizer.Add(topSizer, **style['baseSizer']) panel.SetSizer(baseSizer)
def __Stage_2_SetScore(self, ScoreText, group): if self.roundNumber > 1: ScoreText.SetLabel( structs.CurLang('Research', 'ScoreText') + ' : ' + str(self.scores[group]))
def __OnRepaint(self, event): self.SetLabel(structs.CurLang('Files', 'BrowseButtonLabel'))