def _severity_input(self):
        issue_severities = data.severities(self.project)
        items = tuple(((urwid.AttrSpec("h{0}".format(utils.color_to_hex(s.get("color", "#ffffff"))), "default"),
                        s.get("name", "")), s.get("id", None)) for s in issue_severities.values())
        selected = self.issue.get("severity", None) or self.project.get("default_severity", None)

        self._severity_combo = generic.ComboBox(items, selected_value=selected, style="cyan")

        colum_items = [(17, urwid.Padding(generic.ListText("Severity", align="right"), right=4))]
        colum_items.append(self._severity_combo)
        return urwid.Columns(colum_items)
    def _severities_input(self):
        severities = data.severities(self.project)
        max_length = max([len(s["name"]) for s in severities.values()])
        selected_filters = self._filters.get("severity", set())

        self._severities_group = []
        for id, item in severities.items():
            state = id in selected_filters

            color = utils.color_to_hex(data.color(item))
            attr = urwid.AttrSpec("h{0}".format(color), "default")

            self._severities_group.append(urwid.CheckBox((attr, item["name"]), state, False,
                                                         self._handle_filter_change, ("severity", id)))

        colum_items = [(16, urwid.Padding(generic.ListText("Severities", align="right"), right=2))]
        colum_items.append(generic.Grid(self._severities_group, 4 + max_length, 3, 0, "left"))
        return urwid.Columns(colum_items)
    def _severity_input(self):
        issue_severities = data.severities(self.project)
        items = tuple(((urwid.AttrSpec(
            "h{0}".format(utils.color_to_hex(s.get("color", "#ffffff"))),
            "default"), s.get("name", "")), s.get("id", None))
                      for s in issue_severities.values())
        selected = self.issue.get("severity", None) or self.project.get(
            "default_severity", None)

        self._severity_combo = generic.ComboBox(items,
                                                selected_value=selected,
                                                style="cyan")

        colum_items = [(17,
                        urwid.Padding(generic.ListText("Severity",
                                                       align="right"),
                                      right=4))]
        colum_items.append(self._severity_combo)
        return urwid.Columns(colum_items)
    def __init__(self, issue, project, on_status_change=None, on_priority_change=None, on_severity_change=None,
                 on_assigned_to_change=None):
        self.issue = issue

        issue_ref_and_name = "#{0: <4} {1}".format(str(data.issue_ref(issue)), data.issue_subject(issue))

        colum_items = [("weight", 0.5, generic.ListText(issue_ref_and_name, align="left"))]

        issue_statuses = data.issue_statuses(project)
        items = tuple(((urwid.AttrSpec("h{0}".format(utils.color_to_hex(s.get("color", "#ffffff"))), "default"),
                        s.get("name", "")), s.get("id", None)) for s in issue_statuses.values())
        selected = issue.get("status", None) or project.get("default_issue_status", None)
        status_combo = generic.ComboBox(items, selected_value=selected, style="cyan", enable_markup=True,
                                        on_state_change=on_status_change, user_data=issue)
        colum_items.append(("weight", 0.1, status_combo))

        issue_priorities = data.priorities(project)
        items = tuple(((urwid.AttrSpec("h{0}".format(utils.color_to_hex(s.get("color", "#ffffff"))), "default"),
                        s.get("name", "")), s.get("id", None)) for s in issue_priorities.values())
        selected = issue.get("priority", None) or project.get("default_priority", None)
        priority_combo = generic.ComboBox(items, selected_value=selected, style="cyan", enable_markup=True,
                                        on_state_change=on_priority_change, user_data=issue)
        colum_items.append(("weight", 0.1, priority_combo))

        issue_severities = data.severities(project)
        items = tuple(((urwid.AttrSpec("h{0}".format(utils.color_to_hex(s.get("color", "#ffffff"))), "default"),
                        s.get("name", "")), s.get("id", None)) for s in issue_severities.values())
        selected = issue.get("severity", None) or project.get("default_severity", None)
        severity_combo = generic.ComboBox(items, selected_value=selected, style="cyan", enable_markup=True,
                                        on_state_change=on_severity_change, user_data=issue)
        colum_items.append(("weight", 0.1, severity_combo))

        memberships = [{"user": None, "full_name": "Unassigned"}] + list(data.active_memberships(project).values())
        items = tuple(((urwid.AttrSpec("h{0}".format(utils.color_to_hex(s.get("color", "#ffffff"))), "default"),
                        s.get("full_name", "")), s.get("user", None)) for s in memberships)
        selected = issue.get("assigned_to", None)
        assigned_to_combo = generic.ComboBox(items, selected_value=selected, style="cyan", enable_markup=True,
                                        on_state_change=on_assigned_to_change, user_data=issue)
        colum_items.append(("weight", 0.15, assigned_to_combo))

        self.widget = urwid.Columns(colum_items)
        super().__init__(urwid.AttrMap(self.widget, "default", "focus"))
    def _severities_input(self):
        severities = data.severities(self.project)
        max_length = max([len(s["name"]) for s in severities.values()])
        selected_filters = self._filters.get("severity", set())

        self._severities_group = []
        for id, item in severities.items():
            state = id in selected_filters

            color = utils.color_to_hex(data.color(item))
            attr = urwid.AttrSpec("h{0}".format(color), "default")

            self._severities_group.append(
                urwid.CheckBox((attr, item["name"]), state, False,
                               self._handle_filter_change, ("severity", id)))

        colum_items = [(16,
                        urwid.Padding(generic.ListText("Severities",
                                                       align="right"),
                                      right=2))]
        colum_items.append(
            generic.Grid(self._severities_group, 4 + max_length, 3, 0, "left"))
        return urwid.Columns(colum_items)
    def __init__(self,
                 issue,
                 project,
                 on_status_change=None,
                 on_priority_change=None,
                 on_severity_change=None,
                 on_assigned_to_change=None):
        self.issue = issue

        issue_ref_and_name = "#{0: <4} {1}".format(str(data.issue_ref(issue)),
                                                   data.issue_subject(issue))

        colum_items = [("weight", 0.5,
                        generic.ListText(issue_ref_and_name, align="left"))]

        issue_statuses = data.issue_statuses(project)
        items = tuple(((urwid.AttrSpec(
            "h{0}".format(utils.color_to_hex(s.get("color", "#ffffff"))),
            "default"), s.get("name", "")), s.get("id", None))
                      for s in issue_statuses.values())
        selected = issue.get("status", None) or project.get(
            "default_issue_status", None)
        status_combo = generic.ComboBox(items,
                                        selected_value=selected,
                                        style="cyan",
                                        enable_markup=True,
                                        on_state_change=on_status_change,
                                        user_data=issue)
        colum_items.append(("weight", 0.1, status_combo))

        issue_priorities = data.priorities(project)
        items = tuple(((urwid.AttrSpec(
            "h{0}".format(utils.color_to_hex(s.get("color", "#ffffff"))),
            "default"), s.get("name", "")), s.get("id", None))
                      for s in issue_priorities.values())
        selected = issue.get("priority", None) or project.get(
            "default_priority", None)
        priority_combo = generic.ComboBox(items,
                                          selected_value=selected,
                                          style="cyan",
                                          enable_markup=True,
                                          on_state_change=on_priority_change,
                                          user_data=issue)
        colum_items.append(("weight", 0.1, priority_combo))

        issue_severities = data.severities(project)
        items = tuple(((urwid.AttrSpec(
            "h{0}".format(utils.color_to_hex(s.get("color", "#ffffff"))),
            "default"), s.get("name", "")), s.get("id", None))
                      for s in issue_severities.values())
        selected = issue.get("severity", None) or project.get(
            "default_severity", None)
        severity_combo = generic.ComboBox(items,
                                          selected_value=selected,
                                          style="cyan",
                                          enable_markup=True,
                                          on_state_change=on_severity_change,
                                          user_data=issue)
        colum_items.append(("weight", 0.1, severity_combo))

        memberships = [{
            "user": None,
            "full_name": "Unassigned"
        }] + list(data.active_memberships(project).values())
        items = tuple(((urwid.AttrSpec(
            "h{0}".format(utils.color_to_hex(s.get("color", "#ffffff"))),
            "default"), s.get("full_name", "")), s.get("user", None))
                      for s in memberships)
        selected = issue.get("assigned_to", None)
        assigned_to_combo = generic.ComboBox(
            items,
            selected_value=selected,
            style="cyan",
            enable_markup=True,
            on_state_change=on_assigned_to_change,
            user_data=issue)
        colum_items.append(("weight", 0.15, assigned_to_combo))

        self.widget = urwid.Columns(colum_items)
        super().__init__(urwid.AttrMap(self.widget, "default", "focus"))