prioritywindow.py :  » IDE » PIDA » pida-0.6beta3 » pida » ui » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » IDE » PIDA 
PIDA » pida 0.6beta3 » pida » ui » prioritywindow.py
# -*- coding: utf-8 -*-
"""
    :copyright: 2005-2009 by The PIDA Project
    :license: GPL 2 or later (see README/COPYING/LICENSE)
"""

import gtk
from pida.ui.views import PidaGladeView
from kiwi.ui.objectlist import Column

# locale
from pida.core.locale import Locale
locale = Locale('core')
_ = locale.gettext


class Category(object):
    """Abstract class to implement a category list"""

    customized = False
    
    temporary_list = None
    display_info = None

    @property
    def has_subcategories(self):
        return any(self.get_subcategories())

    def get_subcategories(self):
        """
        Returns a list of Category objects
        """
        return []

    @property
    def has_entries(self):
        return any(self.get_entries())

    def get_entries(self, default=False):
        """
        Returns a list of Entry objects to be displayed 
        in the Priority list

        @default: return the list in the uncustomized order
        """
        return []

    def commit_list(self, lst):
        """
        Update the entries list
        """
        pass

class Entry(object):
    """
    Entries are listed in the priority list
    """

    uid = None
    display = ""
    plugin = ""
    description = ""

    def __init__(self, **kwargs):
        for key,value in kwargs.iteritems():
            setattr(self, key, value)

def display_or_repr(obj):
    if hasattr(obj, 'display'):
        return obj.display
    return unicode(obj)


from kiwi.environ import environ
pic_unedited = gtk.gdk.pixbuf_new_from_file(
            environ.find_resource('pixmaps', 'unedited.png'))
pic_edited = gtk.gdk.pixbuf_new_from_file(
            environ.find_resource('pixmaps', 'edited.png'))
#print pic_edited
def customized_icon(obj):
    if obj is None:
        return None
    if obj:
        return pic_edited
    return pic_unedited

class PriorityEditorView(PidaGladeView):
    gladefile = 'priority_editor'
    locale = locale

    def __init__(self, *args, **kwargs):
        self._current_selection = None
        self._root_category = None
        self.simple = kwargs.pop('simple', False)
        super(PriorityEditorView, self).__init__(*args, **kwargs)
        self.selection_tree.set_columns([
            Column('customized', title=' ',
                   data_type=gtk.gdk.Pixbuf,
                   format_func=customized_icon, expand=False,
                   justify=gtk.JUSTIFY_RIGHT,
                   ),
            Column('display', title=_('Category'), 
                   expand=True,
                   searchable=True,
                   sorted=True,
                   )])
        self.priority_list.set_columns([
            Column('display', title=_('Name'), width=125),
            Column('plugin', title=_('Plugin')),
            Column('description', title=_('Description'), 
                   expand=True)])
        #self.priority_list.set_headers_visible(False)
        #self.selection_tree.set_headers_visible(False)
        #try:
        #self.priority_list.enable_dnd()
        #except: pass

    def create_ui(self):
        if self.simple:
            self.category_splitter.set_position(0)
            self.selection_tree.hide()
        else:
            self.selection_tree.show()

    def set_category_root(self, root):
        """
        Sets the value list for a entry. If display is not None,
        the string representation of entry is displayed in the category.

        In simple mode, entry and display is ignored.

        @tree: list of entries to display
        @category: category to set. can be Category object or string
        """
        self._root_category = root
        self.selection_tree.clear()
        self.priority_list.clear()

        def add_sub(root, sub):
            self.selection_tree.append(root, sub)
            for ssub in sub.get_subcategories():
                add_sub(sub, ssub)

        for sub in root.get_subcategories():
            add_sub(None, sub)

        #assert(tree, 

    def on_selection_tree__selection_changed(self, *args):
        self.save_list()
        cur = self.selection_tree.get_selected()
        # we have to update the priority list only if the customize checkbox
        # does not change
        if not cur:
            return
        #update_prio = self.customize_button.get_active() == cur.customized
        if cur.display_info:
            self.info.set_markup(cur.display_info)
            self.info.props.visible = True
        else:
            self.info.props.visible = False

        self.customize_button.set_active(cur.customized)
        #if update_prio:
        self.update_priority_list()
        self.customize_button.set_sensitive(len(self.priority_list))
        # open the submenu
        self.selection_tree.expand(cur, open_all=True)

    def save_list(self):
        if self._current_selection:
            if self.customize_button.get_active():
                self._current_selection.temporary_list = list(self.priority_list)
            else:
                self._current_selection.temporary_list = None

    def update_priority_list(self, default=False):
        self.priority_list.clear()
        cur = self.selection_tree.get_selected()
        self._current_selection = cur
        if cur:
            if cur.temporary_list is not None and not default:
                self.priority_list.add_list(
                    cur.temporary_list,
                    clear=False)
            else:
                if default or not cur.customized:
                    default = True
                self.priority_list.add_list(
                    cur.get_entries(default=default),
                    clear=False)


    def on_customize_button__toggled(self, action):
        cur = self.selection_tree.get_selected()
        customized = False
        if cur:
            cur.customized = customized = self.customize_button.get_active()
        for wid in [self.button_move_up, self.button_move_down, 
                    self.priority_list]:
            wid.set_sensitive(customized)
        self.selection_tree.refresh()
        #self.priority_list.set_sensitive(True)
        self.update_priority_list()
        #self.priority_list.set_sensitive(cur.customized)

    def on_all_languages__toggled(self, action):
        self.set_category_root(self._root_category)

    def on_button_move_up__clicked(self, action):
        self._move_row(-1)

    def on_button_move_down__clicked(self, action):
        self._move_row(1)

    def on_button_reset__clicked(self, action):
        #self.reset_caches()
        self.update_priority_list(default=True)

    def on_button_close__clicked(self, action):
        self.reset_caches()

    def on_button_apply__clicked(self, action):
        self.save_list()
        def save(root):
            for cat in self.selection_tree.get_descendants(root):
                #if cat.temporary_list != None:
                cat.commit_list(cat.temporary_list or [])
        for cat in self.selection_tree:
            save(cat)

    def reset_caches(self):
        for item in self.selection_tree:
            # we set a [] here, because it's not None and will
            item.temporary_list = None


    def _move_row(self, direction):
        row_n = self.priority_list.get_selected_row_number()
        if row_n is None:
            return
        model = self.priority_list.get_model()
        tmr = model[row_n]
        if direction < 0:
            model.move_before(tmr.iter,
                              model[max(row_n+direction,0)].iter)
        elif direction > 0:
            if row_n+direction > len(model)-1:
                return
            model.move_after(tmr.iter,
                             model[max(row_n+direction,0)].iter)


if __name__ == "__main__":
    from pida.core import environment
    from tests.ui.test_priorityeditor import TestRootCategory
    import sys
    import gtk
    environment.parse_args(sys.argv)
    twin = gtk.Window()
    twin.connect('delete-event', gtk.main_quit)
    twin.resize(550, 350)
    pe = PriorityEditorView(None)
    tr = TestRootCategory()
    pe.set_category_root(tr)
    twin.add(pe.get_toplevel())
    twin.show()

    gtk.mainloop()
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.