diff options
author | pnfisher <pnfisher> | 1999-07-28 16:23:57 +0000 |
---|---|---|
committer | pnfisher <pnfisher> | 1999-07-28 16:23:57 +0000 |
commit | 6597944cbd98c82f954f9f0f6dcf9e37e8f17ffc (patch) | |
tree | faf713e4d3ea4c474dd2597a7269c4e9d722048e /iw | |
parent | 0bd9ae6eef267f14d1c2a51c95ecac67f7d60d5c (diff) | |
download | anaconda-6597944cbd98c82f954f9f0f6dcf9e37e8f17ffc.tar.gz anaconda-6597944cbd98c82f954f9f0f6dcf9e37e8f17ffc.tar.xz anaconda-6597944cbd98c82f954f9f0f6dcf9e37e8f17ffc.zip |
initial checkin
Diffstat (limited to 'iw')
-rw-r--r-- | iw/__init__.py | 0 | ||||
-rw-r--r-- | iw/iw.py | 15 | ||||
-rw-r--r-- | iw/language.py | 37 | ||||
-rw-r--r-- | iw/package.py | 410 | ||||
-rw-r--r-- | iw/progress.py | 148 | ||||
-rw-r--r-- | iw/welcome.py | 38 | ||||
-rw-r--r-- | iw/xpms.py | 195 |
7 files changed, 843 insertions, 0 deletions
diff --git a/iw/__init__.py b/iw/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/iw/__init__.py diff --git a/iw/iw.py b/iw/iw.py new file mode 100644 index 000000000..fc6dc7438 --- /dev/null +++ b/iw/iw.py @@ -0,0 +1,15 @@ +class InstallWindow: + def __init__ (self,ics): + self.ics = ics + + def getNext (self): + return None + + def getPrev (self): + return None + + def getScreen (self): + pass + + def getICS (self): + return self.ics diff --git a/iw/language.py b/iw/language.py new file mode 100644 index 000000000..9b5b315b9 --- /dev/null +++ b/iw/language.py @@ -0,0 +1,37 @@ +from gtk import * +from iw import * + +class LanguageWindow (InstallWindow): + + def __init__ (self, ics): + InstallWindow.__init__ (self, ics) + + ics.setTitle ("Language Selection") + ics.setNextEnabled (1) + ics.setHTML ("<HTML><BODY>Select which language you would like" + "to use for the system default.</BODY></HTML>") + + self.languages = ["English", "German", "French", "Spanish", + "Hungarian", "Japanese", "Chinese", "Korean"] + self.question = ("What language should be used during the " + "installation process?") + + def getScreen (self): + mainBox = GtkVBox (FALSE, 10) + label = GtkLabel (self.question) + label.set_alignment (0.5, 0.5) + + box = GtkVBox (FALSE, 10) + language1 = GtkRadioButton (None, self.languages[0]) + box.pack_start (language1, FALSE) + for locale in self.languages[1:]: + language = GtkRadioButton (language1, locale) + box.pack_start (language, FALSE) + + align = GtkAlignment (0.5, 0.5) + align.add (box) + + mainBox.pack_start (label, FALSE, FALSE, 10) + mainBox.pack_start (align) + + return mainBox diff --git a/iw/package.py b/iw/package.py new file mode 100644 index 000000000..80115beba --- /dev/null +++ b/iw/package.py @@ -0,0 +1,410 @@ +from gtk import * +from gnome.ui import * +from iw import * +from string import * +from xpms import * +from thread import * +import rpm + + +class IndividualPackageSelectionWindow (InstallWindow): + + def __init__ (self, ics): + InstallWindow.__init__ (self, ics) + + self.todo = ics.getToDo () + ics.setTitle ("Individual Package Selection") + ics.setNextEnabled (1) + ics.setHTML ("<HTML><BODY>Next you must select which packages to install." + "</BODY></HTML>") + ics.setHelpEnabled (FALSE) + self.DIR = 0 + self.DIR_UP = 1 + self.RPM = 2 + + self.updatingIcons = FALSE + + def getPrev (self): + return PackageSelectionWindow + + def build_tree (self, x): + if (x == ()): return () + if (len (x) == 1): return (x[0],) + else: return (x[0], self.build_tree (x[1:])) + + def merge (self, a, b): + if a == (): return self.build_tree (b) + if b == (): return a + if b[0] == a[0]: + if len (a) > 1 and isinstance (a[1], type (())): + return (a[0],) + (self.merge (a[1], b[1:]),) + a[2:] + elif b[1:] == (): return a + else: return (a[0],) + (self.build_tree (b[1:]),) + a[1:] + else: + return (a[0],) + self.merge (a[1:], b) + + def build_ctree (self, list, cur_parent = None, prev_node = None, path = ""): + if (list == ()): return + + if (len (list) > 1 and isinstance (list[1], type (()))): leaf = FALSE + else: leaf = TRUE + + if isinstance (list[0], type (())): + self.build_ctree (list[0], prev_node, None, self.ctree.node_get_row_data (prev_node)) + self.build_ctree (list[1:], cur_parent, None, path) + else: + node = self.ctree.insert_node (cur_parent, None, (list[0],), 2, + self.closed_p, self.closed_b, self.open_p, self.open_b, leaf) + cur_path = path + "/" + list[0] + self.ctree.node_set_row_data (node, cur_path) + self.build_ctree (list[1:], cur_parent, node, path) + + def draw_root_icons (self): + self.iconList.freeze () + self.iconList.clear () + for x in self.ctree.base_nodes (): + dirName = self.ctree.get_node_info (x)[0] + pos = self.iconList.append ("/usr/src/mc/gnome/i-directory.png", dirName) + self.iconList.set_icon_data (pos, (self.DIR, x)) + self.iconList.thaw () + + + def get_rpm_desc (self, header): + desc = replace (header[rpm.RPMTAG_DESCRIPTION], "\n\n", "\x00") + desc = replace (desc, "\n", " ") + desc = replace (desc, "\x00", "\n\n") + return desc + + def clear_package_desc (self): + self.currentPackage = None + self.packageName.set_text ("") + self.packageSize.set_text ("") + self.packageDesc.freeze () + self.packageDesc.delete_text (0, -1) + self.packageDesc.thaw () + self.cbutton.set_active (FALSE) + self.cbutton.set_sensitive (FALSE) + + + def select_icon (self, iconList, arg1, event, *args): + if event and event.type != GDK._2BUTTON_PRESS and event.type != GDK.BUTTON_PRESS: + return + icon_data = iconList.get_icon_data (arg1) + if not icon_data: return + + if event and iconList.icon_is_visible (arg1) != VISIBILITY_FULL: + allocation = iconList.get_allocation () + if (event.y - self.iconListAdj.value) < (allocation[3]/2): + self.iconList.moveto (arg1, 0.0) + else: + self.iconList.moveto (arg1, 1.0) + + if event == None or event.type == GDK.BUTTON_PRESS: + if icon_data[0] == self.RPM: + header = icon_data[1] + # if we're already displaying the current package, don't redraw + if self.packageName.get () == "%s-%s-%s" % (header[rpm.RPMTAG_NAME], + header[rpm.RPMTAG_VERSION], + header[rpm.RPMTAG_RELEASE]): + return + + self.currentPackage = header + self.currentPackagePos = arg1 + self.cbutton.set_sensitive (TRUE) + if header.selected: + self.cbutton.set_active (TRUE) + else: + self.cbutton.set_active (FALSE) + + self.packageName.set_text ("%s-%s-%s" % (header[rpm.RPMTAG_NAME], + header[rpm.RPMTAG_VERSION], + header[rpm.RPMTAG_RELEASE])) + self.packageSize.set_text ("%.1f KBytes" % (header[rpm.RPMTAG_SIZE] / 1024.0)) + self.packageDesc.freeze () + self.packageDesc.delete_text (0, -1) + self.packageDesc.insert_defaults (self.get_rpm_desc (header)) + self.packageDesc.thaw () + else: + self.clear_package_desc () + return + + if icon_data[0] == self.RPM: + active = self.cbutton.get_active () + if active == TRUE: + self.cbutton.set_active (FALSE) + else: + self.cbutton.set_active (TRUE) + + if icon_data[0] == self.DIR_UP: + current_node = icon_data[1].parent + if current_node: + self.ctree.select (current_node) + else: + # handle the imaginary root node + current_node = self.ctree.base_nodes ()[0] + self.ctree.unselect (icon_data[1]) + self.draw_root_icons () + + elif icon_data[0] == self.DIR: + current_node = icon_data[1] + self.ctree.select (current_node) + if (current_node.parent): + self.ctree.expand_to_depth (current_node.parent, 1) + else: return + + if self.ctree.node_is_visible (current_node) != VISIBILITY_FULL: + self.ctree.node_moveto (current_node, 0, 0.5, 0.0) + + def select (self, ctree, node, *args): + self.clear_package_desc () + self.iconList.freeze () + self.iconList.clear () + self.iconList.append ("/home/devel/msw/i-directory-up.png", "Up") + self.iconList.set_icon_data (0, (self.DIR_UP, node)) + for x in node.children: + dirName = ctree.get_node_info (x)[0] + pos = self.iconList.append ("/usr/src/mc/gnome/i-directory.png", dirName) + self.iconList.set_icon_data (pos, (self.DIR, x)) + + try: + # this code is wrapped in a generic exception handler since we don't + # care if we access a namespace that lacks rpms + + # drop the leading slash off the package namespace + for header in self.flat_groups[ctree.node_get_row_data (node)[1:]]: + if header.selected: + packageIcon = "/home/devel/pnfisher/gnome-package-checked.png" + self.cbutton.set_active (TRUE) + else: + packageIcon = "/usr/src/gnorpm/gnome-package.xpm" + self.cbutton.set_active (FALSE) + + pos = self.iconList.append (packageIcon, header[rpm.RPMTAG_NAME]) + self.iconList.set_icon_data (pos, (self.RPM, header)) + except: + pass + + # make sure that the iconList is reset to show the initial files in a dir, + # unless we're rebuilding the icons because one has been selected for install + if not self.updatingIcons: + self.iconListSW.get_vadjustment ().set_value (0.0) + self.iconList.thaw () + self.iconList.show_all () + + + def installButtonToggled (self, cbutton, *args): + if not self.currentPackage: return + oldSelectedStatus = self.currentPackage.selected + + if cbutton.get_active (): + self.currentPackage.selected = 1 + else: + self.currentPackage.selected = 0 + + + if oldSelectedStatus != self.currentPackage.selected: + self.updatingIcons = TRUE + self.ctree.select (self.ctree.selection[0]) + self.iconList.select_icon (self.currentPackagePos) + self.updatingIcons = FALSE + +# self.iconList.freeze () +# if self.currentPackage.selected: +# packageIcon = "/home/devel/pnfisher/gnome-package-checked.png" +# else: +# packageIcon = "/usr/src/gnorpm/gnome-package.xpm" + +# print self.currentPackagePos +# self.iconList.remove (self.currentPackagePos) +# print "got here" +# self.iconList.insert (self.currentPackagePos, packageIcon, +# self.currentPackage[rpm.RPMTAG_NAME]) +# self.iconList.set_icon_data (self.currentPackagePos, (self.RPM, self.currentPackage)) + +# self.iconList.thaw () + + + def getScreen (self): + threads_leave () + self.todo.headerList() + threads_enter () + + self.path_mapping = {} + self.ctree = GtkCTree () + self.ctree.set_selection_mode (SELECTION_BROWSE) + # Kludge to get around CTree's extremely broken focus behavior + self.ctree.unset_flags (CAN_FOCUS) + + if (not self.__dict__.has_key ("open_p")): + self.open_p, self.open_b = create_pixmap_from_xpm_d (self.ctree, + None, DIRECTORY_OPEN_XPM) + self.closed_p, self.closed_b = create_pixmap_from_xpm_d (self.ctree, + None, DIRECTORY_CLOSE_XPM) + + groups = {} + + # go through all the headers and grok out the group names, placing + # packages in lists in the groups dictionary. + + for key in self.todo.hdList.packages.keys(): + header = self.todo.hdList.packages[key] + if not groups.has_key (header[rpm.RPMTAG_GROUP]): + groups[header[rpm.RPMTAG_GROUP]] = [] + groups[header[rpm.RPMTAG_GROUP]].append (header) + + keys = groups.keys () + keys.sort () + self.flat_groups = groups + index = 0 + + # now insert the groups into the list, then each group's packages + # after sorting the list + def cmpHdrName(first, second): + if first[rpm.RPMTAG_NAME] < second[rpm.RPMTAG_NAME]: + return -1 + elif first[rpm.RPMTAG_NAME] == second[rpm.RPMTAG_NAME]: + return 0 + return 1 + + groups = () + for key in keys: + self.flat_groups[key].sort (cmpHdrName) + groups = self.merge (groups, split (key, "/")) + self.ctree.freeze () + self.build_ctree (groups) + + for base_node in self.ctree.base_nodes (): + self.ctree.expand_recursive (base_node) + self.ctree.columns_autosize () + for base_node in self.ctree.base_nodes (): + self.ctree.collapse_recursive (base_node) + self.ctree.thaw () + + self.ctree.connect ("tree_select_row", self.select) + sw = GtkScrolledWindow () + sw.set_border_width (5) + sw.set_policy (POLICY_NEVER, POLICY_AUTOMATIC) + sw.add (self.ctree) + iconHBox = GtkHBox () + iconHBox.pack_start (sw, FALSE) + + self.iconList = GnomeIconList (90) + self.iconList.set_selection_mode (SELECTION_MULTIPLE) + self.iconList.connect ("select_icon", self.select_icon) + self.draw_root_icons () + + self.iconListSW = GtkScrolledWindow () + self.iconListSW.set_border_width (5) + self.iconListSW.set_policy (POLICY_NEVER, POLICY_AUTOMATIC) + self.iconListSW.add (self.iconList) + self.iconListAdj = self.iconListSW.get_vadjustment () + iconHBox.pack_start (self.iconListSW) + + descVBox = GtkVBox () + descVBox.pack_start (GtkHSeparator (), FALSE, padding=3) + + + hbox = GtkHBox () + label = GtkLabel ("Name: ") + self.packageName = GtkLabel () + self.packageName.set_alignment (0.0, 0.0) + hbox.pack_start (label, FALSE, padding=5) + hbox.pack_start (self.packageName, FALSE) + label = GtkLabel ("Package Details") + label.set_alignment (1.0, 1.0) + hbox.pack_start (label, padding=5) + descVBox.pack_start (hbox, FALSE) + + hbox = GtkHBox () + label = GtkLabel ("Size: ") + self.packageSize = GtkLabel () + self.packageSize.set_alignment (0.0, 0.5) + hbox.pack_start (label, FALSE, padding=5) + hbox.pack_start (self.packageSize, FALSE) + align = GtkAlignment (1.0, 0.0) + self.cbutton = GtkCheckButton ("Select Package For Installation") + self.cbutton.set_sensitive (FALSE) + self.cbutton.connect ("toggled", self.installButtonToggled) + self.cbutton.children()[0].set_alignment (1.0, 0.5) + align.add (self.cbutton) + hbox.pack_start (align, padding=5) + descVBox.pack_start (hbox, FALSE) + + descSW = GtkScrolledWindow () + descSW.set_border_width (5) + descSW.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC) + + self.packageDesc = GtkText () + self.packageDesc.set_word_wrap (TRUE) + self.packageDesc.set_line_wrap (TRUE) + self.packageDesc.set_editable (FALSE) + descSW.add (self.packageDesc) + descSW.set_usize (-1, 100) + + descVBox.pack_start (descSW) + +# descFrame = GtkFrame ("Package Details") +# descFrame.set_border_width (5) +# descFrame.add (descVBox) + + vbox = GtkVBox () + vbox.pack_start (iconHBox) + vbox.pack_start (descVBox, FALSE) + + return vbox + +class PackageSelectionWindow (InstallWindow): + def __init__ (self, ics): + InstallWindow.__init__ (self, ics) + + self.todo = ics.getToDo () + ics.setTitle ("Package Group Selection") + ics.setNextEnabled (1) + ics.setHTML ("<HTML><BODY>Next you must select which package groups to install." + "</BODY></HTML>") + + def getNext (self): + if self.individualPackages.get_active (): + return IndividualPackageSelectionWindow + else: + return None + + def getScreen (self): + threads_leave () + self.todo.headerList () + self.todo.compsList() + threads_enter () + + sw = GtkScrolledWindow () + sw.set_border_width (5) + sw.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC) + + box = GtkVBox (FALSE, 10) + for comp in self.todo.comps: + if not comp.hidden: + checkButton = GtkCheckButton (comp.name) + checkButton.set_active (comp.selected) + + def toggled (widget, comp): + if widget.get_active (): + comp.select (0) + else: + comp.unselect (0) + + checkButton.connect ("toggled", toggled, comp) + + box.pack_start (checkButton) + + sw.add_with_viewport (box) + + vbox = GtkVBox (FALSE, 5) + self.individualPackages = GtkCheckButton ("Select individual packages") + self.individualPackages.set_active (FALSE) + align = GtkAlignment (0.5, 0.5) + align.add (self.individualPackages) + + vbox.pack_start (sw, TRUE) + vbox.pack_start (align, FALSE) + + return vbox + diff --git a/iw/progress.py b/iw/progress.py new file mode 100644 index 000000000..5a13f32df --- /dev/null +++ b/iw/progress.py @@ -0,0 +1,148 @@ +from gtk import * +from iw import * +import string +import rpm +import time + +class InstallProgressWindow (InstallWindow): + + def __init__ (self, ics): + InstallWindow.__init__ (self, ics) + + ics.setTitle ("Installing Packages") + ics.setPrevEnabled (0) + + self.numComplete = 0 + self.sizeComplete = 0 + + def setPackageScale (self, amount, total): + threads_enter () + self.progress.update (float (amount) / total) + threads_leave () + + def completePackage(self, header): + def formatTime(amt): + hours = amt / 60 / 60 + amt = amt % (60 * 60) + min = amt / 60 + amt = amt % 60 + secs = amt + + return "%01d:%02d.%02d" % (int(hours) ,int(min), int(secs)) + + self.numComplete = self.numComplete + 1 + apply (self.clist.set_text, self.status["completed"]["packages"] + ("%d" % self.numComplete,)) + + self.sizeComplete = self.sizeComplete + header[rpm.RPMTAG_SIZE] + apply (self.clist.set_text, self.status["completed"]["size"] + + ("%d M" % (self.sizeComplete / (1024 * 1024)),)) + + apply (self.clist.set_text, self.status["remaining"]["packages"] + + ("%d" % (self.numTotal - self.numComplete),)) + + apply (self.clist.set_text, self.status["remaining"]["size"] + + ("%d M" % ((self.totalSize - self.sizeComplete) / (1024 * 1024)),)) + + elapsedTime = time.time() - self.timeStarted + apply (self.clist.set_text, self.status["completed"]["time"] + ("%s" % formatTime(elapsedTime),)) + + finishTime = (float (self.totalSize) / self.sizeComplete) * elapsedTime + apply (self.clist.set_text, self.status["total"]["time"] + ("%s" % formatTime(finishTime),)) + + remainingTime = finishTime - elapsedTime + apply (self.clist.set_text, self.status["remaining"]["time"] + ("%s" % formatTime(remainingTime),)) + + return + +# self.clist.set_text ("%d" % self.numComplete, +# status["completed"]["packages"]["row"], +# status["completed"]["packages"][" + + + self.timeCompleteW.setText("%12s" % formatTime(elapsedTime)) + + self.timeTotalW.setText("%12s" % formatTime(finishTime)) + + def setPackage(self, header): + print header[rpm.RPMTAG_SUMMARY] + threads_enter () + self.name.set_text (header[rpm.RPMTAG_NAME]) + self.size.set_text ("%.1f KBytes" % (header[rpm.RPMTAG_SIZE] / 1024.0)) + self.summary.set_text (header[rpm.RPMTAG_SUMMARY]) + threads_leave () + + def setSizes (self, total, totalSize): + self.numTotal = total + self.totalSize = totalSize + self.timeStarted = time.time () + + apply (self.clist.set_text, self.status["total"]["packages"] + ("%d" % total,)) + + apply (self.clist.set_text, self.status["total"]["size"] + + ("%d M" % (totalSize / (1024 * 1024)),)) + + def getScreen (self): + table = GtkTable (3, 3) + label = GtkLabel ("Package") + label.set_alignment (0.0, 0.0) + table.attach (label, 0, 1, 0, 1, FILL, 0) + label = GtkLabel (":") + table.attach (label, 1, 2, 0, 1, 0, 0, 5) + label = GtkLabel (":") + table.attach (label, 1, 2, 1, 2, 0, 0, 5) + label = GtkLabel (":") + label.set_alignment (0.0, 0.0) + table.attach (label, 1, 2, 2, 3, 0, FILL | EXPAND, 5) + label = GtkLabel ("Size") + label.set_alignment (0.0, 0.0) + table.attach (label, 0, 1, 1, 2, FILL, 0) + label = GtkLabel ("Summary") + label.set_alignment (0.0, 0.0) + table.attach (label, 0, 1, 2, 3, FILL, FILL | EXPAND) + + self.name = GtkLabel(); + self.name.set_alignment (0.0, 0.0) + self.size = GtkLabel(); + self.size.set_alignment (0.0, 0.0) + self.summary = GtkLabel(); + self.summary.set_alignment (0.0, 0.0) + self.summary.set_line_wrap (TRUE) + self.summary.set_text ("\n\n") + table.attach(self.name, 2, 3, 0, 1, FILL | EXPAND, 0) + table.attach(self.size, 2, 3, 1, 2, FILL | EXPAND, 0) + table.attach(self.summary, 2, 3, 2, 3, FILL | EXPAND, FILL | EXPAND) + + vbox = GtkVBox (FALSE, 10) + vbox.pack_start (table, FALSE) + + self.progress = GtkProgressBar() + vbox.pack_start (self.progress, FALSE) + + self.status = { + "total" : { "packages" : (0, 1), + "size" : (0, 2), + "time" : (0, 3) }, + "completed" : { "packages" : (1, 1), + "size" : (1, 2), + "time" : (1, 3) }, + "remaining" : { "packages" : (2, 1), + "size" : (2, 2), + "time" : (2, 3) } + } + + clist = GtkCList (4, ("Status", "Packages", "Size", "Time")) + clist.set_column_justification (0, JUSTIFY_LEFT) + clist.set_column_justification (1, JUSTIFY_RIGHT) + clist.set_column_justification (2, JUSTIFY_RIGHT) + clist.set_column_justification (3, JUSTIFY_RIGHT) + clist.append (("Total", "0", "0", "0:00.00")) + clist.append (("Completed", "0", "0", "0:00.00")) + clist.append (("Remaining", "0", "0", "0:00.00")) +# clist.set_column_auto_resize (0, TRUE) + clist.columns_autosize () + self.clist = clist + vbox.pack_start (clist, TRUE) + + self.ics.getInstallInterface ().setPackageProgressWindow (self) + return vbox + diff --git a/iw/welcome.py b/iw/welcome.py new file mode 100644 index 000000000..f8a1120e0 --- /dev/null +++ b/iw/welcome.py @@ -0,0 +1,38 @@ +from gtk import * +from iw import * + +class WelcomeWindow (InstallWindow): + + def __init__ (self, ics): + InstallWindow.__init__ (self, ics) + + ics.setTitle ("Welcome to Red Hat Linux!") + ics.setPrevEnabled (0) + ics.setNextEnabled (1) + ics.setHTML("<HTML><BODY><CENTER><H2>Welcome to<br>Red Hat Linux!</H2></CENTER>" + "" + "<P>This installation process is outlined in detail in the " + "Official Red Hat Linux Installation Guide available from " + "Red Hat Software. If you have access to this manual, you " + "should read the installation section before continuing.</P><P>" + "If you have purchased Official Red Hat Linux, be sure to " + "register your purchase through our web site, " + "http://www.redhat.com/.</P></BODY></HTML>") + + def getScreen (self): + label = GtkLabel("(insert neat logo graphic here)") + label.set_line_wrap (TRUE) + + box = GtkVBox (FALSE, 10) + box.pack_start (label, TRUE, TRUE, 0) + + try: + im = GdkImlib.Image ("shadowman-200.png") + im.render () + pix = im.make_pixmap () + box.pack_start (pix, TRUE, TRUE, 0) + + except: + print "Unable to load shadowman-200.png" + + return box diff --git a/iw/xpms.py b/iw/xpms.py new file mode 100644 index 000000000..b0bd31ea0 --- /dev/null +++ b/iw/xpms.py @@ -0,0 +1,195 @@ +DIRECTORY_OPEN_XPM = [ "16 16 34 1", +" c None", +". c #000000", +"+ c #B6BB9A", +"@ c #9A9D82", +"# c #9DA285", +"$ c #858871", +"% c #A9AC97", +"& c #90937A", +"* c #A1A588", +"= c #8D9178", +"- c #81846F", +"; c #696B5A", +"> c #595B4C", +", c #313229", +"' c #868972", +") c #DBDEC5", +"! c #DFE2CD", +"~ c #CED3B2", +"{ c #505144", +"] c #606152", +"^ c #E3E5D4", +"/ c #C7CDA4", +"( c #A5AA85", +"_ c #C3C99E", +": c #55574A", +"< c #D6D8C9", +"[ c #787C61", +"} c #353535", +"| c #A0A487", +"1 c #4D4F44", +"2 c #D7DBC0", +"3 c #686B54", +"4 c #B7BAA3", +"5 c #8A8F70", +" ", +" ", +" .... ", +" .+@+@. ", +" .#$#$#$...... ", +" .%&*&*&*=-&-;.", +" ...........>,'.", +".)!~!~!~!~!~.{].", +".^/(_(_(_(_(.{:.", +" .<_(_(_(_(_[.:.", +" }!|_(_(_(_(_.1.", +" }2(_(_(_(_(3..", +" .4(5(5(5(5(5..", +" ............ ", +" ", +" " ] + +DIRECTORY_CLOSE_XPM = [ "16 16 28 1", +" c None", +". c #000000", +"+ c #B6BB9A", +"@ c #9A9D82", +"# c #9DA285", +"$ c #858871", +"% c #E8EADF", +"& c #DDDFC8", +"* c #ECEDE2", +"= c #C4C6B3", +"- c #D2D3CA", +"; c #D6DABF", +"> c #C0C4A7", +", c #CDD2AD", +"' c #B8BC9D", +") c #B2B798", +"! c #A3A78C", +"~ c #868972", +"{ c #E3E5D4", +"] c #7A7B68", +"^ c #6E6F60", +"/ c #A6AB8E", +"( c #94987F", +"_ c #B1B596", +": c #94967D", +"< c #626556", +"[ c #D2D7B6", +"} c #53554A", +" ", +" ", +" .... ", +" .+@+@. ", +" .#$#$#$...... ", +" .%&*&*&%*=-;>.", +" .;+,+,+,')!+~.", +" .{,+,+,))!+!].", +" .;+,+,)+!+!!^.", +" .{,+,)+!+!/(^.", +" .;+,_+!+!!(:<.", +" .{,_+!+!!::~<.", +" .[]~]:]~]^<<}.", +" ............ ", +" ", +" " ] + +OLD_DIRECTORY_CLOSE_XPM = [ "16 16 28 1", +" c None", +". c #000000", +"+ c #C4B893", +"@ c #A59A7C", +"# c #AAA07F", +"$ c #8F866B", +"% c #EEEADC", +"& c #E6DCC3", +"* c #F1ECE0", +"= c #CCC4AF", +"- c #D7D3C8", +"; c #E2D8B9", +"> c #CBC0A1", +", c #DBCDA5", +"' c #C5B996", +") c #C0B591", +"! c #AFA586", +"~ c #8F866D", +"{ c #EAE4D0", +"] c #807764", +"^ c #746D5C", +"/ c #B3A988", +"( c #9F9679", +"_ c #BDB18F", +": c #9E9377", +"< c #696454", +"[ c #DFD4B0", +"} c #585448", +" ", +" ", +" .... ", +" .+@+@. ", +" .#$#$#$...... ", +" .%&*&*&%*=-;>.", +" .;+,+,+,')!+~.", +" .{,+,+,))!+!].", +" .;+,+,)+!+!!^.", +" .{,+,)+!+!/(^.", +" .;+,_+!+!!(:<.", +" .{,_+!+!!::~<.", +" .[]~]:]~]^<<}.", +" ............ ", +" ", +" " ] + +OLD_DIRECTORY_OPEN_XPM = [ "16 16 34 1", +" c None", +". c #000000", +"+ c #C4B893", +"@ c #A59A7C", +"# c #AAA07F", +"$ c #8F866B", +"% c #B3AB92", +"& c #9B9174", +"* c #ADA282", +"= c #988F72", +"- c #8A826A", +"; c #716A56", +"> c #605A48", +", c #353128", +"' c #8F866D", +") c #E5DBC0", +"! c #E8E0C9", +"~ c #DCD0AA", +"{ c #565041", +"] c #655E4F", +"^ c #EAE4D0", +"/ c #D7C89C", +"( c #B3A57D", +"_ c #D4C494", +": c #5B5648", +"< c #DCD7C6", +"[ c #83795B", +"} c #353535", +"| c #ACA181", +"1 c #534F42", +"2 c #E2D9BB", +"3 c #72694F", +"4 c #C0B79E", +"5 c #978C69", +" ", +" ", +" .... ", +" .+@+@. ", +" .#$#$#$...... ", +" .%&*&*&*=-&-;.", +" ...........>,'.", +".)!~!~!~!~!~.{].", +".^/(_(_(_(_(.{:.", +" .<_(_(_(_(_[.:.", +" }!|_(_(_(_(_.1.", +" }2(_(_(_(_(3..", +" .4(5(5(5(5(5..", +" ............ ", +" ", +" " ] |