⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree.py

📁 LINUX下的文件比较工具
💻 PY
字号:
### Copyright (C) 2002-2006 Stephen Kennedy <stevek@gnome.org>### This program is free software; you can redistribute it and/or modify### it under the terms of the GNU General Public License as published by### the Free Software Foundation; either version 2 of the License, or### (at your option) any later version.### This program is distributed in the hope that it will be useful,### but WITHOUT ANY WARRANTY; without even the implied warranty of### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the### GNU General Public License for more details.### You should have received a copy of the GNU General Public License### along with this program; if not, write to the Free Software### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USAfrom __future__ import generatorsimport osimport gtkimport miscimport gnomegladeimport pathsCOL_PATH, COL_STATE, COL_TEXT, COL_ICON, COL_END = range(5)from vc._vc import STATE_IGNORED, STATE_NONE, STATE_NORMAL, STATE_NOCHANGE, \    STATE_ERROR, STATE_EMPTY, STATE_NEW, \    STATE_MODIFIED, STATE_CONFLICT, STATE_REMOVED, \    STATE_MISSING, STATE_MAXload = lambda x,s=14: gnomeglade.load_pixbuf( paths.share_dir("glade2/pixmaps",x), s)pixbuf_folder = load("tree-folder-normal.png", 20)pixbuf_folder_new = load("tree-folder-new.png", 20)pixbuf_folder_changed = load("tree-folder-changed.png", 20)pixbuf_file = load("tree-file-normal.png")pixbuf_file_new = load("tree-file-new.png")pixbuf_file_changed = load("tree-file-changed.png")class DiffTreeStore(gtk.TreeStore):    def __init__(self, ntree = 3):        types = [type("")] * COL_END * ntree        types[COL_ICON*ntree:COL_ICON*ntree+ntree] = [type(pixbuf_file)] * ntree        gtk.TreeStore.__init__(self, *types)        self.ntree = ntree        self._setup_default_styles()    def _setup_default_styles(self):        self.textstyle = [            '<span foreground="#888888">%s</span>', # STATE_IGNORED            '<span foreground="#888888">%s</span>', # STATE_NONE            '<span foreground="black">%s</span>', # STATE_NORMAL            '<span foreground="black" style="italic">%s</span>', # STATE_NOCHANGE            '<span foreground="#ff0000" background="yellow" weight="bold">%s</span>', # STATE_ERROR            '<span foreground="#999999" style="italic">%s</span>', # STATE_EMPTY            '<span foreground="#008800" weight="bold">%s</span>', # STATE_NEW            '<span foreground="#880000" weight="bold">%s</span>', # STATE_MODIFIED            '<span foreground="#ff0000" background="#ffeeee" weight="bold">%s</span>', # STATE_CONFLICT            '<span foreground="#880000" strikethrough="true" weight="bold">%s</span>', # STATE_REMOVED            '<span foreground="#888888" strikethrough="true">%s</span>' # STATE_MISSING        ]        assert len(self.textstyle) == STATE_MAX        self.pixstyle = [            (pixbuf_file, pixbuf_folder), # IGNORED            (pixbuf_file, pixbuf_folder), # NONE            (pixbuf_file, pixbuf_folder), # NORMAL            (pixbuf_file, pixbuf_folder), # NOCHANGE            (None, None), # ERROR            (None, None), # EMPTY            (pixbuf_file_new, pixbuf_folder_new), # NEW            (pixbuf_file_changed, pixbuf_folder_changed), # MODIFIED            (pixbuf_file_changed, pixbuf_folder_changed), # CONFLICT            (pixbuf_file_changed, pixbuf_folder_changed), # REMOVED            (None, None) # MISSING        ]        assert len(self.pixstyle) == STATE_MAX    def add_entries(self, parent, names):        child = self.append(parent)        for i,f in enumerate(names):            self.set_value( child, self.column_index(COL_PATH,i), f)        return child    def add_empty(self, parent, text="empty folder"):        child = self.append(parent)        for i in range(self.ntree):            self.set_value(child, self.column_index(COL_STATE,i), STATE_EMPTY)            self.set_value(child, self.column_index(COL_PATH,i), self.pixstyle[STATE_EMPTY])            self.set_value(child, self.column_index(COL_TEXT,i), self.textstyle[STATE_EMPTY] % misc.escape(text) )        return child    def add_error(self, parent, msg, pane):        err = self.append(parent)        for i in range(self.ntree):            self.set_value(err, self.column_index(COL_STATE,i), STATE_ERROR)        self.set_value(err, self.column_index(COL_ICON, pane), self.pixstyle[STATE_ERROR][0] )        self.set_value(err, self.column_index(COL_TEXT, pane), self.textstyle[STATE_ERROR] % misc.escape(msg) )    def value_paths(self, iter):        return [ self.value_path(iter, i) for i in range(self.ntree) ]    def value_path(self, iter, pane):        return self.get_value(iter, self.column_index(COL_PATH, pane) )    def column_index(self, col, pane):        return self.ntree * col + pane    def set_state(self, iter, pane, state, isdir=0):        fullname = self.get_value(iter, self.column_index(COL_PATH,pane))        name = misc.escape( os.path.basename(fullname) )        STATE = self.column_index(COL_STATE, pane)        TEXT  = self.column_index(COL_TEXT,  pane)        ICON  = self.column_index(COL_ICON,  pane)        self.set_value(iter, STATE, state)        self.set_value(iter, TEXT,  self.textstyle[state] % name)        self.set_value(iter, ICON,  self.pixstyle[state][isdir])    def get_state(self, iter, pane):        STATE = self.column_index(COL_STATE, pane)        return self.get_value(iter, STATE)    def inorder_search_down(self, it):        while it:            child = self.iter_children(it)            if child:                it = child            else:                next = self.iter_next(it)                if next:                    it = next                else:                    while 1:                        it = self.iter_parent(it)                        if it:                            next = self.iter_next(it)                            if next:                                it = next                                break                        else:                            raise StopIteration()            yield it    def inorder_search_up(self, it):        while it:            path = self.get_path(it)            if path[-1]:                path = path[:-1] + (path[-1]-1,)                it = self.get_iter(path)                while 1:                    nc = self.iter_n_children(it)                    if nc:                        it = self.iter_nth_child(it, nc-1)                    else:                        break            else:                up = self.iter_parent(it)                if up:                    it = up                else:                    raise StopIteration()            yield it

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -