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

📄 tableview.py

📁 Network Administration Visualized 网络管理可视化源码
💻 PY
字号:
# -*- coding: ISO8859-1 -*-# $Id: tableview.py 3041 2004-11-05 12:49:36Z mortenv $## Copyright 2003, 2004 Norwegian University of Science and Technology## This file is part of Network Administration Visualized (NAV)## NAV 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.## NAV 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 NAV; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA### Authors: Stian S鴌land <stain@itea.ntnu.no>#import forgetHTML as htmlfrom nav.web import sci_expclass Value(html.Text):    """A special html-text containing a number.       The item is sorted according to the numeric value, but        printed with the given decimal counts and the optional unit.        """    def __init__(self, value, unit="", decimals=2,                  sciunit=False, **kwargs):        try:            _ = value + 0            assert _ == value        except:            raise "Value %r not a number" % value        self.value = value        self.decimals = decimals        self.unit = unit        self.sciunit = sciunit        html.Text.__init__(self, self._display(), **kwargs)    def _display(self):        format = "%0." + str(self.decimals) + "f"        if self.sciunit:            (value, unit) = sci_exp.sci(self.value)            unit = unit + self.unit        else:            unit = self.unit            value = self.value        formatted = format % value        return formatted + unit    def __cmp__(self, other):        if isinstance(other, html.TableCell):            return cmp(self.value, other.value)        else:            return cmp(self.value, other)class TableView(html.SimpleTable):    def __init__(self, *headers, **kwargs):        html.SimpleTable.__init__(self, header=None)        self['class'] = "tableView"        self.headers = headers        self._width = len(headers)        self.__kwargs = kwargs        try:            self.sortBy = int(kwargs.get('sortBy', 0)) # default: nosort        except:            self.sortBy = 0        self.baseurl = kwargs.get('baseurl', '')        self.sortName = kwargs.get('sortName', 'sort')            def sort(self):        def _getColumns(column, a, b):            try:                aValue = a[column]            except IndexError:                aValue = None            try:                bValue = b[column]            except IndexError:                bValue = None            return (aValue, bValue)            def _sorter(a, b):            # the column to check            column = abs(sortBy) # remember, the first                                 # one is kwargs..            # find the reverse-effect            comp = lambda x,y: sortBy/abs(sortBy) * cmp(x,y)            # If the column is empty, it is None            (aValue, bValue) = _getColumns(column, a, b)            # the compared value                res = comp(aValue, bValue)            if res:                return res            for col in range(1,len(self._items)+1):                if col == column:                    continue                res = comp(*_getColumns(col, a,b))                if res:                    return res            return 0                                            self._content = [] # reset html version        if self.sortBy:            sortBy = self.sortBy            self._items.sort(_sorter)    def _generateContent(self):        row = html.TableRow(**self.__kwargs)        self.append(row)        count = 0        for header in self.headers:            count += 1            link = html.Anchor(header)            headerCell = html.TableHeader(link)            headerCell['class'] = "sort col%s" % count            row.append(headerCell)            url = '%s%s%s=' % (self.baseurl,                               '?' in self.baseurl and '&' or '?',                               self.sortName)            if abs(self.sortBy) == count:                # reverse the current                link['href'] = '%s%s' % (url, -self.sortBy)                headerCell['id'] = "activeSort"                if self.sortBy < 0:                    headerCell['class'] = "reverseSort"            else:                link['href'] = '%s%s' % (url, count)        # make sure width is correct.                for extra in range(self._width - len(self.headers)):            row.append(html.TableHeader(''))        html.SimpleTable._generateContent(self)            def output(self, *args, **kwargs):        return html.SimpleTable.output(self, *args, **kwargs)

⌨️ 快捷键说明

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