コード例 #1
0
ファイル: View.py プロジェクト: roettig/GenomeViewer
    def __init__ (self):

        # parent constructor
        wx.Frame.__init__(self, None, -1, "Genome Viewer", size=(self.hsize, self.vsize))

        # min size of the frame
        self.SetMinSize((self.hsize, self.vsize))

        # statusbar
        self.statusbar=self.CreateStatusBar()
        self.statusbar.SetFieldsCount(3)
        self.statusbar.SetStatusWidths([-3, -1, -1])
        self.statusbar.SetStatusText("GenomeViewer Version 1.0", 1)

        # timer in statusbar
        self.timer = wx.PyTimer(self.NotifyTimer)
        self.timer.Start(1000)
        self.NotifyTimer()

        # creates the menubar
        self.MakeMenuBar()

        self.container = Imports.con
        self.genome = Imports.genome
        self.genomemodel = GenomeModel()#(self.genome, self.features)
        self.genomemodel.setGenome(self.genome)
        self.genomemodel.setFeatureListContainer(self.container)

        ### splitter ###
        self.splitLeft = ProportionalSplitter(self, -1, 0.33)
        self.splitRight = ProportionalSplitter(self.splitLeft, -1, 0.9)

        ### treeview ###
        self.treeview = TreeView(self.container, self.genomemodel, self.splitLeft)
        self.container.addObserver(self.treeview)

        ### genomeview ###
        self.genomeview = GenomeView(self.genomemodel, self.splitRight)
        self.genome.addObserver(self.genomeview)

        ### genomebar ###
        self.genomebar = GenomeBar(self.genomemodel, self.splitRight)
        self.genomemodel.addObserver(self.genomebar)

        self.splitLeft.SplitVertically(self.treeview,self.splitRight)
        self.splitRight.SplitHorizontally(self.genomeview, self.genomebar)

        self.Centre()
        self.Show(True)
コード例 #2
0
ファイル: View.py プロジェクト: roettig/GenomeViewer
class MainFrame(wx.Frame):
    """initialize mainframe"""

    hsize = 800
    vsize = 600

    def __init__ (self):

        # parent constructor
        wx.Frame.__init__(self, None, -1, "Genome Viewer", size=(self.hsize, self.vsize))

        # min size of the frame
        self.SetMinSize((self.hsize, self.vsize))

        # statusbar
        self.statusbar=self.CreateStatusBar()
        self.statusbar.SetFieldsCount(3)
        self.statusbar.SetStatusWidths([-3, -1, -1])
        self.statusbar.SetStatusText("GenomeViewer Version 1.0", 1)

        # timer in statusbar
        self.timer = wx.PyTimer(self.NotifyTimer)
        self.timer.Start(1000)
        self.NotifyTimer()

        # creates the menubar
        self.MakeMenuBar()

        self.container = Imports.con
        self.genome = Imports.genome
        self.genomemodel = GenomeModel()#(self.genome, self.features)
        self.genomemodel.setGenome(self.genome)
        self.genomemodel.setFeatureListContainer(self.container)

        ### splitter ###
        self.splitLeft = ProportionalSplitter(self, -1, 0.33)
        self.splitRight = ProportionalSplitter(self.splitLeft, -1, 0.9)

        ### treeview ###
        self.treeview = TreeView(self.container, self.genomemodel, self.splitLeft)
        self.container.addObserver(self.treeview)

        ### genomeview ###
        self.genomeview = GenomeView(self.genomemodel, self.splitRight)
        self.genome.addObserver(self.genomeview)

        ### genomebar ###
        self.genomebar = GenomeBar(self.genomemodel, self.splitRight)
        self.genomemodel.addObserver(self.genomebar)

        self.splitLeft.SplitVertically(self.treeview,self.splitRight)
        self.splitRight.SplitHorizontally(self.genomeview, self.genomebar)

        self.Centre()
        self.Show(True)


    def MakeMenuBar(self):
        ''' creating the menu '''
        #menu "File
        fileMenu = wx.Menu()
        # menu item "Open Genome"
        openGenome = fileMenu.Append(-1, "Open genome", "Open new genome-file")
        self.Bind(wx.EVT_MENU, self.OnOpenGenomeFile, openGenome)
        # menu item "Open PTT annotation"
        openPttAnnotation = fileMenu.Append(-1, "Open PTT annotation", "Open new ptt annotation-file")
        self.Bind(wx.EVT_MENU, self.OnOpenPttAnnotation, openPttAnnotation)
        # menu item "Open GFF annotation"
        openGffAnnotation = fileMenu.Append(-1, "Open GFF annotation", "Open new gff annotation-file")
        self.Bind(wx.EVT_MENU, self.OnOpenGffAnnotation, openGffAnnotation)

        fileMenu.AppendSeparator()

        saveTxt = fileMenu.Append(-1, "Save Text", "Saves Sequence As Shown In The Text Field")
        self.Bind(wx.EVT_MENU, self.OnSaveTxt, saveTxt)
        saveTxtAs = fileMenu.Append(-1, "Save Text As...", "Saves Sequence As Shown In The Text Field")
        self.Bind(wx.EVT_MENU, self.OnSaveTxtAs, saveTxtAs)

        fileMenu.AppendSeparator()
        # menu item "Exit"
        exit = fileMenu.Append(-1, "Exit", "Exit Program")
        self.Bind(wx.EVT_MENU, self.OnExit, exit)

        #menu "Edit
        editMenu = wx.Menu()
        edit = editMenu.Append(-1, "Feature Selection", "Edit Feature Selection")
        self.Bind(wx.EVT_MENU, self.OnOpenCheckFrame, edit)
        changeTypeCol = editMenu.Append(-1, "Change Feature Colors", "Change Colors of Features")
        self.Bind(wx.EVT_MENU, self.OnOpenTypeColors, changeTypeCol)



        #menu SearchMenu
        searchMenu = wx.Menu()
        # menu item
        openRegExSearch = searchMenu.Append(-1, "Regular Expression", "Search with regular expressions")
        self.Bind(wx.EVT_MENU, self.OnOpenRegExSearch, openRegExSearch)
        # menu item
        openGeneSearch = searchMenu.Append(-1, "Gene Finding", "Search with sequence string")
        self.Bind(wx.EVT_MENU, self.OnOpenGeneSearch, openGeneSearch)

        #self.Bind(wx.EVT_MENU, self.onOpenFeatureSelection, openFeatureSelection)

        #menu Format
        formatMenu = wx.Menu()
        reset= formatMenu.Append(-1, "Reset", "Reset Format")
        self.Bind(wx.EVT_MENU, self.OnReset, reset)
        formatMenu.AppendSeparator()
        upperCase = formatMenu.AppendCheckItem(-1, "Capitals", "Upper Case")
        self.Bind(wx.EVT_MENU, self.OnUpperCase, upperCase)
        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUpperCase, upperCase)
        bold = formatMenu.AppendCheckItem(-1, "Bold", "Bold")
        self.Bind(wx.EVT_MENU, self.OnBold, bold)
        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateBold, bold)
        italic = formatMenu.AppendCheckItem(-1, "Italic", "Italic")
        self.Bind(wx.EVT_MENU, self.OnItalic, italic)
        self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateItalic, italic)
        formatMenu.AppendSeparator()
        increaseSize = formatMenu.Append(-1, "Increase Size", "Increases Font Size")
        self.Bind(wx.EVT_MENU, self.OnIncreaseSize, increaseSize)
        decreaseSize = formatMenu.Append(-1, "Decrease Size", "Decreases Font Size")
        self.Bind(wx.EVT_MENU, self.OnDecreaseSize, decreaseSize)
        formatMenu.AppendSeparator()
        increaseLineSp = formatMenu.Append(-1, "Increase Line Spacing", "Increases Line Spacing")
        self.Bind(wx.EVT_MENU, self.OnIncreaseLineSp, increaseLineSp)
        decreaseLineSp = formatMenu.Append(-1, "Decrease Line Spacing", "Decreases Line Spacing")
        self.Bind(wx.EVT_MENU, self.OnDecreaseLineSp, decreaseLineSp)
        formatMenu.AppendSeparator()
        indentMore = formatMenu.Append(-1, "Indent More", "Indents More")
        self.Bind(wx.EVT_MENU, self.OnIndentMore, indentMore)
        indentLess = formatMenu.Append(-1, "Indent Less", "Indents Less")
        self.Bind(wx.EVT_MENU, self.OnIndentLess, indentLess)
        formatMenu.AppendSeparator()
        seqColor= formatMenu.Append(-1, "Sequence Color", "Change Color Of Sequence")
        self.Bind(wx.EVT_MENU, self.OnSeqColor, seqColor)
        numColor= formatMenu.Append(-1, "Numeration Color", "Change Color Of Numeration")
        self.Bind(wx.EVT_MENU, self.OnNumColor, numColor)
        formatMenu.AppendSeparator()
        charsPerLine = formatMenu.Append(-1, "Chars Per Line", "Set Number Of Characters Per Line")
        self.Bind(wx.EVT_MENU, self.OnCharsPerLine, charsPerLine)

        #menu Help
        helpMenu = wx.Menu()
        about = helpMenu.Append(-1, "About", "About GenomeViewer")
        self.Bind(wx.EVT_MENU, self.OnAbout, about)
        #NCBI
        stuff = helpMenu.Append(-1, "download files from NCBI", "download files")
        self.Bind(wx.EVT_MENU, self.OnStuff, stuff)

        #uni-tue
        uni = helpMenu.Append(-1, "Uni Tuebingen", "official website")
        self.Bind(wx.EVT_MENU, self.OnUni, uni)



        #append items to menu bar
        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, "File")
        menuBar.Append(editMenu, "Edit")
        menuBar.Append(searchMenu, "Search")
        #menuBar.Append(featureselectMenu, "Feature Selection")
        menuBar.Append(formatMenu, "Format")
        menuBar.Append(helpMenu, "Help")
        self.SetMenuBar(menuBar)

    def OnUni(self, evt):
        open('www.uni-tuebingen.de')

    def NotifyTimer(self):
        t = time.localtime(time.time())
        st = time.strftime("%d-%b-%Y   %I:%M:%S", t)
        self.statusbar.SetStatusText(st, 2)
    def OnCharsPerLine(self, evt):
        cpl=self.genomemodel.getCharsPerLine()
        #self.genomemodel.getCharsPerLine()
        dlg = wx.NumberEntryDialog(self, "", "Enter Characters Per Line:",
                                   "CharsPerLine", cpl, 20, 150)
        if dlg.ShowModal() == wx.ID_OK:
            self.genomemodel.setCharsPerLine(dlg.GetValue())
            dlg.Destroy()
    def OnSaveTxt(self, evt):
        if not self.genomeview.getRtc().GetFilename():
            self.OnSaveTxtAs(evt)
            return
        self.genomeview.getRtc().SaveFile()
    def OnSaveTxtAs(self, evt):
        wildcard, types = rt.RichTextBuffer.GetExtWildcard(save=True)

        dlg = wx.FileDialog(self, "Choose a filename",
                            wildcard=wildcard,
                            style=wx.SAVE)
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()
            if path:
                fileType = types[dlg.GetFilterIndex()]
                ext = rt.RichTextBuffer.FindHandlerByType(fileType).GetExtension()
                if not path.endswith(ext):
                    path += '.' + ext
                self.genomeview.getRtc().SaveFile(path, fileType)
        dlg.Destroy()
    def OnUpperCase(self, evt):
        self.genomemodel.changeUpperCase()
    def OnUpdateUpperCase(self, evt):
        evt.Check(self.genomemodel.isUpperCase())
    def OnReset(self, evt):
        self.genomemodel.resetLayout()
    def OnSeqColor(self, evt):
        colourData = wx.ColourData()
        colourData.SetColour(self.genomemodel.getSeqColor())
        dlg = wx.ColourDialog(self, colourData)
        if dlg.ShowModal() == wx.ID_OK:
            colourData = dlg.GetColourData()
            colour = colourData.GetColour()
            self.genomemodel.setSeqColor(colour)
        dlg.Destroy()
    def OnNumColor(self, evt):
        colourData = wx.ColourData()
        colourData.SetColour(self.genomemodel.getNumColor())
        dlg = wx.ColourDialog(self, colourData)
        if dlg.ShowModal() == wx.ID_OK:
            colourData = dlg.GetColourData()
            colour = colourData.GetColour()
            self.genomemodel.setNumColor(colour)
        dlg.Destroy()
    def OnIncreaseLineSp(self, evt):
        self.genomemodel.increaseLineSp(10)
    def OnDecreaseLineSp(self, evt):
        self.genomemodel.decreaseLineSp(10)
    def OnIndentMore(self, evt):
        self.genomemodel.indentMore(20)
    def OnIndentLess(self, evt):
        self.genomemodel.indentLess(20)
    def OnUpdateBold(self, evt):
        evt.Check(self.genomemodel.isBold())
    def OnUpdateItalic(self, evt):
        evt.Check(self.genomemodel.isItalic())
    def OnBold(self, evt):
        self.genomemodel.changeSeqWeight()
    def OnItalic(self, evt):
        self.genomemodel.changeSeqStyle()
    def OnIncreaseSize(self, evt):
        self.genomemodel.incSeqSize(2)
        self.genomemodel.incNumSize(2)
    def OnDecreaseSize(self, evt):
        self.genomemodel.decSeqSize(2)
        self.genomemodel.decNumSize(2)

    def OnOpenCheckFrame(self, evt):
        check = CheckBoxFrame()

    def OnOpenTypeColors(self, evt):
        TypeColors(self, self.genomemodel.getTypeDict())

    def OnAbout(self, event):
        info = wx.AboutDialogInfo()
        info.Name = "GenomeViewer"
        info.Version = "1.0"
        info.Copyright = "(C) 2009"
        info.Description = wordwrap(
            "A \"GenomeViewer\" is a software program that views genome sequences ",
            350, wx.ClientDC(self))
        info.WebSite = ("http://www.uni-tuebingen.de", "Our home page")
        info.Developers = [ "Mirco",
                            "Phil",
                            "Julian",
                            "Matze" ]
        licenseText = "Everybody is free, so everything is free...."
        info.Licence = wordwrap(licenseText, 500, wx.ClientDC(self))
        wx.AboutBox(info)

    def OnExit(self, event):
        children=self.Children
        for child in children:
            child.Close(True)
        self.Close(True)

    def OnOpenGenomeFile(self, event):
        if platform == "win32":
            wildcard = ""
        else:
            wildcard="*"
        dialog = wx.FileDialog(None, "Choose a genome-file", os.getcwd(),
                               "", wildcard, wx.OPEN)
        if dialog.ShowModal() == wx.ID_OK:
            fasta = Imports.Fasta()
            fasta.importfasta(dialog.GetPath())
            dialog.Destroy()


    def OnOpenGffAnnotation(self, event):
        if platform == "win32":
            wildcard = ""
        else:
            wildcard="*"
        dialog = wx.FileDialog(None, "Choose an GFF-annotation-file", os.getcwd(),
                               "", wildcard, wx.OPEN)
        if dialog.ShowModal() == wx.ID_OK:
            gff = Imports.Gff()
            gff.importgff(dialog.GetPath())
            dialog.Destroy()


    def OnOpenPttAnnotation(self, event):
        if platform == "win32":
            wildcard = ""
        else:
            wildcard="*"
        dialog = wx.FileDialog(None, "Choose an PTT-annotation-file", os.getcwd(),
                               "", wildcard, wx.OPEN)
        if dialog.ShowModal() == wx.ID_OK:
            ptt = Imports.Ptt()
            ptt.importptt(dialog.GetPath())
            dialog.Destroy()


    def OnOpenRegExSearch(self,event):
        dialog = wx.TextEntryDialog(None, "Please enter regular expression here:",
                                    "Regular Expression Search","",
                                    style=wx.OK|wx.CANCEL)
        if dialog.ShowModal() == wx.ID_OK:
            print "You have entered: %s" % dialog.GetValue()
            search=Search(self.genomemodel, self.treeview)
            search.regexsearch(dialog.GetValue())

    def OnOpenGeneSearch(self,event):
        dialog = wx.TextEntryDialog(None, "Please enter sequence string here:",
                                    "Gene finding","",
                                    style=wx.OK|wx.CANCEL)
        if dialog.ShowModal() == wx.ID_OK:
            print "You have entered: %s" % dialog.GetValue()
            search=Search(self.genomemodel, self.treeview)
            search.genesearch(dialog.GetValue())

    def OnStuff(self,event):
        open('http://www.ncbi.nlm.nih.gov/Ftp/')