示例#1
0
文件: fillctrls.py 项目: Scrik/sk1-wx
class SolidFill(FillTab):

	name = _('Solid Fill')
	active_panel = None
	panels = {}
	new_color = None
	callback = None
	use_rule = True

	def activate(self, fill_style, use_rule=True, onmodechange=None):
		if onmodechange: self.callback = onmodechange
		self.use_rule = use_rule
		FillTab.activate(self, fill_style)
		if not fill_style:
			mode = EMPTY_MODE
			self.rule_keeper.set_mode(sk2_const.FILL_EVENODD)
		else:
			self.rule_keeper.set_mode(fill_style[0])
			if fill_style[1] in [sk2_const.FILL_GRADIENT,
								sk2_const.FILL_PATTERN]:
				mode = CMYK_MODE
			else:
				mode = SOLID_MODE_MAP[fill_style[2][0]]
		self.solid_keeper.set_mode(mode)
		self.on_mode_change(mode)

	def build(self):
		self.panels = {}
		panel = wal.HPanel(self)
		self.solid_keeper = wal.HToggleKeeper(panel, SOLID_MODES,
									SOLID_MODE_ICONS,
									SOLID_MODE_NAMES, self.on_mode_change)
		panel.pack(self.solid_keeper)
		panel.pack(wal.HPanel(panel), fill=True, expand=True)
		self.rule_keeper = FillRuleKeeper(panel)
		panel.pack(self.rule_keeper)
		if not self.use_rule: self.rule_keeper.set_visible(False)
		self.pack(panel, fill=True, padding_all=5)
		self.pack(wal.HLine(self), fill=True)

		for item in SOLID_MODES:
			self.panels[item] = SOLID_MODE_CLASSES[item](self, self.app)
			self.panels[item].hide()

	def on_mode_change(self, mode):
		if self.active_panel:
			self.new_color = self.active_panel.get_color()
			self.remove(self.active_panel)
			self.active_panel.hide()
		self.active_panel = self.panels[mode]
		self.pack(self.active_panel, fill=True, expand=True, padding_all=5)
		self.active_panel.activate(self.cms, self.orig_fill, self.new_color)
		self.rule_keeper.set_enable(not mode == EMPTY_MODE)
		if self.callback: self.callback()

	def get_result(self):
		clr = self.active_panel.get_color()
		if clr: return [self.rule_keeper.get_mode(), sk2_const.FILL_SOLID, clr]
		else: return []
示例#2
0
class SolidFill(FillTab):
    name = _('Solid Fill')
    active_panel = None
    panels = {}
    new_color = None
    callback = None
    use_rule = True
    solid_keeper = None
    rule_keeper = None

    def activate(self, fill_style, use_rule=True, onmodechange=None):
        if onmodechange:
            self.callback = onmodechange
        self.use_rule = use_rule
        FillTab.activate(self, fill_style)
        if not fill_style:
            mode = EMPTY_MODE
            self.rule_keeper.set_mode(sk2const.FILL_EVENODD)
        else:
            self.rule_keeper.set_mode(fill_style[0])
            if fill_style[1] in [
                    sk2const.FILL_GRADIENT, sk2const.FILL_PATTERN
            ]:
                mode = CMYK_MODE
            else:
                mode = SOLID_MODE_MAP[fill_style[2][0]]
        self.solid_keeper.set_mode(mode)
        self.on_mode_change(mode)

    def build(self):
        self.panels = {}
        panel = wal.HPanel(self)
        self.solid_keeper = wal.HToggleKeeper(panel, SOLID_MODES,
                                              SOLID_MODE_ICONS,
                                              SOLID_MODE_NAMES,
                                              self.on_mode_change)
        panel.pack(self.solid_keeper)
        panel.pack(wal.HPanel(panel), fill=True, expand=True)
        self.rule_keeper = FillRuleKeeper(panel)
        panel.pack(self.rule_keeper)
        if not self.use_rule:
            self.rule_keeper.set_visible(False)
        self.pack(panel, fill=True, padding_all=5)
        self.pack(wal.HLine(self), fill=True)

        for item in SOLID_MODES:
            self.panels[item] = SOLID_MODE_CLASSES[item](self, self.app)
            if wal.IS_MSW:
                self.pack(self.panels[item],
                          fill=True,
                          expand=True,
                          padding_all=5)
                self.layout()
                self.panels[item].hide()
                self.remove(self.panels[item])
            else:
                self.panels[item].hide()

    def on_mode_change(self, mode):
        if self.active_panel:
            self.new_color = self.active_panel.get_color()
            self.active_panel.hide()
            self.remove(self.active_panel)
        self.active_panel = self.panels[mode]
        self.pack(self.active_panel, fill=True, expand=True, padding_all=5)
        self.active_panel.show()
        self.active_panel.activate(self.cms, self.orig_fill, self.new_color)
        self.rule_keeper.set_enable(not mode == EMPTY_MODE)
        if self.callback:
            self.callback()

    def get_result(self):
        clr = self.active_panel.get_color()
        if clr:
            return [self.rule_keeper.get_mode(), sk2const.FILL_SOLID, clr]
        else:
            return []