class View(WFrame):

    ## 조회할 기사
    # @var Article
    article = None

    ## 생성자
    def __init__(self, master=None, article=None, **kw):
        self.article = article
        super().__init__(master, **kw)

    def initializeWidget(self):
        self.scrollFrame = VScrollWidget(self)
        self.scrollFrame.pack(fill=BOTH, expand=TRUE)

        self.lblArticle = Label(self.scrollFrame.frame)
        self.lblArticle['justify'] = LEFT
        self.lblArticle['text'] = '\n'.join(self.article.texts)
        self.lblArticle['font'] = 'Consolas'
        self.lblArticle['padx'] = 0
        self.lblArticle['pady'] = 0
        self.lblArticle.pack(padx=(40, 0), pady=(20, 0), anchor=NW)

        self.text = '기사 보기'
        self.width = 640
        self.height = 480
        self.startPosition = StartPosition.centerParent
class Fixer(WFrame):

    typos = None

    def __init__(self, master=None, **kw):
        self.typos = Fixer.load()
        super().__init__(master, **kw)

    def initializeWidget(self):
        self.scrollFrame = VScrollWidget(self)
        self.scrollFrame.pack(fill=BOTH, expand=TRUE)

        for typo in self.typos:
            label = Label(self.scrollFrame.frame)
            label['justify'] = LEFT
            label['font'] = 'Consolas'
            label['padx'] = 0
            label['pady'] = 0
            label['text'] = typo.toString(Fixer.suggest(typo))
            label.pack(padx=(40, 0), pady=(20, 0), anchor=NW)

        self.text = '오타 알리미'
        self.width = 640
        self.height = 480
        self.startPosition = StartPosition.centerParent

    ## 오타에 대한 조언을하는 메서드
    #
    # 매우 중요!
    # @return string
    @staticmethod
    def suggest(typo):
        if ' ' in typo.context[typo.expected - 2:][:4]:
            return '차분한 마음으로 타자해보세요.'
        elif typo.ch in typo.context[typo.expected - 2:][:4]:
            return '타속은 너무 신경쓰지 말고,\n연습하는 느낌으로 타자해보세요.'
        return '좀 더 연습하세요.'

    @staticmethod
    def load():
        typos = None
        try:
            with open('data/typos.pkl', 'rb') as data:
                typos = pickle.load(data)
        except:
            pass
        return TypoList() if typos == None else typos

    @staticmethod
    def save(typoList):
        typoBak = Fixer.load()
        with open('data/typos.pkl', 'wb') as typos:
            pickle.dump(typoBak + typoList, typos)