Ejemplo n.º 1
0
    def contextMenuEvent(self, event):
        # - Init
        self.tab_groupKern.menu = QtGui.QMenu(self)
        self.tab_groupKern.menu.setTitle('Class Actions:')

        # - Build menus
        self.tab_groupKern.menu.addMenu(self.menu_class)
        self.tab_groupKern.menu.addSeparator()
        self.tab_groupKern.menu.addMenu(self.menu_type)
        self.tab_groupKern.menu.addSeparator()
        self.tab_groupKern.menu.addMenu(self.menu_memb)

        self.tab_groupKern.menu.popup(QtGui.QCursor.pos())
Ejemplo n.º 2
0
	def contextMenuEvent(self, event):
		# - Init
		self.tab_fontKerning.menu = QtGui.QMenu(self)
		self.tab_fontKerning.menu.setTitle('Actions:')
		
		# - Build menus
		self.tab_fontKerning.menu.addMenu(self.menu_pair)
		self.tab_fontKerning.menu.addSeparator()	
		self.tab_fontKerning.menu.addMenu(self.menu_tools)
		self.tab_fontKerning.menu.addSeparator()	
		self.tab_fontKerning.menu.addMenu(self.menu_view)

		self.tab_fontKerning.menu.popup(QtGui.QCursor.pos())				
Ejemplo n.º 3
0
    def contextMenuEvent(self, event):
        # - Init
        self.layerSelector.lst_layers.menu = QtGui.QMenu(self)
        self.layerSelector.lst_layers.menu.setTitle('Actions:')

        # - Build menus
        self.layerSelector.lst_layers.menu.addAction(self.act_layer_add)
        self.layerSelector.lst_layers.menu.addAction(self.act_layer_duplicate)
        self.layerSelector.lst_layers.menu.addAction(
            self.act_layer_duplicate_mask)
        self.layerSelector.lst_layers.menu.addAction(self.act_layer_visible)
        self.layerSelector.lst_layers.menu.addAction(self.act_layer_delete)
        self.layerSelector.lst_layers.menu.addSeparator()
        self.layerSelector.lst_layers.menu.addMenu(self.menu_layer_type)
        self.layerSelector.lst_layers.menu.addSeparator()
        self.layerSelector.lst_layers.menu.addMenu(self.menu_layer_content)
        self.layerSelector.lst_layers.menu.addMenu(self.menu_layer_outline)
        self.layerSelector.lst_layers.menu.addMenu(self.menu_layer_elements)
        self.layerSelector.lst_layers.menu.addSeparator()
        self.layerSelector.lst_layers.menu.addMenu(self.menu_layer_view)

        self.layerSelector.lst_layers.menu.popup(QtGui.QCursor.pos())
Ejemplo n.º 4
0
    def __init__(self):
        super(tool_tab, self).__init__()

        # -- Layout and widgets -----------------------------------
        layoutV = QtGui.QVBoxLayout()

        self.layerSelector = TRWLayerSelect()

        self.blendTools = TRNewLayerBlend(self.layerSelector)
        self.unfoldLayers = TRLayerMultiEdit(self.layerSelector)

        layoutV.addLayout(self.layerSelector)

        self.tools_multiedit = TRCollapsibleBox('Transform (Layers selected)')
        self.tools_multiedit.setContentLayout(self.unfoldLayers)
        layoutV.addWidget(self.tools_multiedit)

        self.tools_blend = TRCollapsibleBox(
            'Blend (Selection to Active Layer)')
        self.tools_blend.setContentLayout(self.blendTools)
        layoutV.addWidget(self.tools_blend)

        # -- Menus and Actions -----------------------------------
        self.act_layer_add = QtGui.QAction('New', self)
        self.act_layer_duplicate = QtGui.QAction('Duplicate', self)
        self.act_layer_duplicate_mask = QtGui.QAction('Duplicate to Mask',
                                                      self)
        self.act_layer_delete = QtGui.QAction('Remove', self)
        self.act_layer_visible = QtGui.QAction('Toggle Visible', self)

        self.menu_layer_type = QtGui.QMenu('Type', self)
        act_layer_set_type_mask = QtGui.QAction('Set as Mask', self)
        act_layer_set_type_wireframe = QtGui.QAction('Set as Wireframe', self)
        act_layer_set_type_service = QtGui.QAction('Set as Service', self)

        self.menu_layer_type.addAction(act_layer_set_type_mask)
        self.menu_layer_type.addAction(act_layer_set_type_wireframe)
        self.menu_layer_type.addAction(act_layer_set_type_service)
        self.menu_layer_type.addAction(act_layer_set_type_service)

        self.menu_layer_content = QtGui.QMenu('Content', self)
        '''
		act_layer_push_shapes = QtGui.QAction('Push Shapes', self)
		act_layer_push_metrics = QtGui.QAction('Push Metrics', self)
		act_layer_push_guides = QtGui.QAction('Push Guidelines', self)
		act_layer_push_anchors = QtGui.QAction('Push Anchors', self)
		act_layer_pull_shapes = QtGui.QAction('Pull Shapes', self)
		act_layer_pull_metrics = QtGui.QAction('Pull Metrics', self)
		act_layer_pull_guides = QtGui.QAction('Pull Guidelines', self)
		act_layer_pull_anchors = QtGui.QAction('Pull Anchors', self)
		'''
        act_layer_swap = QtGui.QAction('Swap', self)
        act_layer_pull = QtGui.QAction('Pull', self)
        act_layer_push = QtGui.QAction('Push', self)
        act_layer_clean = QtGui.QAction('Clean', self)

        self.menu_layer_content.addAction(act_layer_swap)
        self.menu_layer_content.addAction(act_layer_pull)
        self.menu_layer_content.addAction(act_layer_push)
        self.menu_layer_content.addAction(act_layer_clean)
        '''
		self.menu_layer_content.addSeparator()
		self.menu_layer_content.addAction(act_layer_push_shapes)
		self.menu_layer_content.addAction(act_layer_push_metrics)
		self.menu_layer_content.addAction(act_layer_push_guides)
		self.menu_layer_content.addAction(act_layer_push_anchors)
		self.menu_layer_content.addSeparator()
		self.menu_layer_content.addAction(act_layer_pull_shapes)
		self.menu_layer_content.addAction(act_layer_pull_metrics)
		self.menu_layer_content.addAction(act_layer_pull_guides)
		self.menu_layer_content.addAction(act_layer_pull_anchors)
		'''

        self.menu_layer_elements = QtGui.QMenu('Elements', self)
        act_layer_unlock = QtGui.QAction('Unlock elements', self)
        act_layer_lock = QtGui.QAction('Lock elements', self)

        self.menu_layer_elements.addAction(act_layer_unlock)
        self.menu_layer_elements.addAction(act_layer_lock)

        self.menu_layer_outline = QtGui.QMenu('Outline', self)
        act_layer_copy_outline = QtGui.QAction('Copy Outline', self)
        act_layer_paste_outline = QtGui.QAction('Paste Outline', self)
        act_layer_paste_outline_byName = QtGui.QAction(
            'Paste Outline (by Layer Name)', self)

        self.menu_layer_outline.addAction(act_layer_copy_outline)
        self.menu_layer_outline.addAction(act_layer_paste_outline)
        self.menu_layer_outline.addAction(act_layer_paste_outline_byName)

        self.menu_layer_view = QtGui.QMenu('View', self)
        act_layer_unfold = QtGui.QAction('Unfold', self)
        act_layer_restore = QtGui.QAction('Fold', self)

        self.menu_layer_view.addAction(act_layer_unfold)
        self.menu_layer_view.addAction(act_layer_restore)

        # -- Set Triggers ------------------------------------
        self.act_layer_add.triggered.connect(
            lambda: TRLayerActionCollector.layer_add(self.layerSelector))
        self.act_layer_duplicate.triggered.connect(
            lambda: TRLayerActionCollector.layer_duplicate(
                self.layerSelector, True))
        self.act_layer_duplicate_mask.triggered.connect(
            lambda: TRLayerActionCollector.layer_duplicate_mask(self.
                                                                layerSelector))
        self.act_layer_delete.triggered.connect(
            lambda: TRLayerActionCollector.layer_delete(self.layerSelector))
        self.act_layer_visible.triggered.connect(
            lambda: TRLayerActionCollector.layer_toggle_visible(self.
                                                                layerSelector))

        #act_layer_set_type_mask.triggered.connect(lambda: TRLayerActionCollector.layer_set_type_mask(self.layerSelector))
        act_layer_set_type_wireframe.triggered.connect(
            lambda: TRLayerActionCollector.layer_set_type(
                self.layerSelector, 'Wireframe'))
        act_layer_set_type_service.triggered.connect(
            lambda: TRLayerActionCollector.layer_set_type(
                self.layerSelector, 'Service'))
        '''
		act_layer_push_shapes.triggered.connect(lambda: TRLayerActionCollector.layer_push_shapes(self.layerSelector))
		act_layer_push_metrics.triggered.connect(lambda: TRLayerActionCollector.layer_push_metrics(self.layerSelector))
		act_layer_push_guides.triggered.connect(lambda: TRLayerActionCollector.layer_push_guides(self.layerSelector))
		act_layer_push_anchors.triggered.connect(lambda: TRLayerActionCollector.layer_push_anchors(self.layerSelector))
		act_layer_pull_shapes.triggered.connect(lambda: TRLayerActionCollector.layer_pull_shapes(self.layerSelector))
		act_layer_pull_metrics.triggered.connect(lambda: TRLayerActionCollector.layer_pull_metrics(self.layerSelector))
		act_layer_pull_guides.triggered.connect(lambda: TRLayerActionCollector.layer_pull_guides(self.layerSelector))
		act_layer_pull_anchors.triggered.connect(lambda: TRLayerActionCollector.layer_pull_anchors(self.layerSelector))
		'''

        act_layer_swap.triggered.connect(
            lambda: TRLayerActionCollector.layer_swap(self.layerSelector))
        act_layer_pull.triggered.connect(
            lambda: TRLayerActionCollector.layer_pull(self.layerSelector))
        act_layer_push.triggered.connect(
            lambda: TRLayerActionCollector.layer_push(self.layerSelector))
        act_layer_clean.triggered.connect(
            lambda: TRLayerActionCollector.layer_clean(self.layerSelector))

        act_layer_unlock.triggered.connect(
            lambda: TRLayerActionCollector.layer_unlock(
                self.layerSelector, False))
        act_layer_lock.triggered.connect(
            lambda: TRLayerActionCollector.layer_unlock(
                self.layerSelector, True))
        act_layer_copy_outline.triggered.connect(
            lambda: TRLayerActionCollector.layer_copy_outline(self.
                                                              layerSelector))
        act_layer_paste_outline_byName.triggered.connect(
            lambda: TRLayerActionCollector.layer_paste_outline(self.
                                                               layerSelector))
        act_layer_paste_outline.triggered.connect(
            lambda: TRLayerActionCollector.layer_paste_outline_selection(
                self.layerSelector))

        act_layer_unfold.triggered.connect(
            lambda: TRLayerActionCollector.layer_unfold(self.layerSelector))
        act_layer_restore.triggered.connect(
            lambda: TRLayerActionCollector.layer_restore(self.layerSelector))

        # - Build ----------------------------------------
        scriptDir = os.path.dirname(os.path.dirname(
            os.path.realpath(__file__)))
        self.setWindowIcon(
            QtGui.QIcon(scriptDir + os.path.sep + 'Resource' + os.path.sep +
                        'typerig-icon.svg'))
        self.setLayout(layoutV)

        # !!! Hotfix FL7 7355
        self.setMinimumSize(300, self.sizeHint.height())
Ejemplo n.º 5
0
	def __init__(self):
		super(tool_tab, self).__init__()

		# - Init

		# - Widgets
		# - Glyph list
		self.lst_glyphName = QtGui.QListWidget()
		self.lst_glyphName.setMinimumHeight(50)
		self.lst_glyphName.setAlternatingRowColors(True)
		
		# -- Buttons
		self.btn_refresh = QtGui.QPushButton('&Refresh')
		self.btn_setAxis = QtGui.QPushButton('Set &Axis')
		self.btn_setAxis_c = QtGui.QPushButton('Set &Axis')
		self.btn_resetAxis = QtGui.QPushButton('Reset Axis')
		self.btn_getVstem = QtGui.QPushButton('Get &Vertical Stems')
		self.btn_getHstem = QtGui.QPushButton('Get &Horizontal Stems')
		self.btn_setLayer = QtGui.QPushButton('Layer changed')
		self.btn_execute = QtGui.QPushButton('Execute')
		self.btn_file_load_patchboard = QtGui.QPushButton('Load')
		self.btn_file_save_patchboard = QtGui.QPushButton('Save')
		
		# -- Options
		self.btn_opt_extrapolate = QtGui.QPushButton('Extrapolate')
		self.btn_opt_italic = QtGui.QPushButton('Italic')
		self.btn_opt_update_preview = QtGui.QPushButton('Live preview')
		self.btn_opt_keep_center = QtGui.QPushButton('Keep Center')
		self.btn_opt_metrics = QtGui.QPushButton('Metrics')
		self.btn_opt_anchors = QtGui.QPushButton('Anchors')
		self.btn_opt_target = QtGui.QPushButton('Use Target')		

		self.btn_opt_extrapolate.setCheckable(True)
		self.btn_opt_italic.setCheckable(True) 
		self.btn_opt_update_preview.setCheckable(True)
		self.btn_opt_keep_center.setCheckable(True)
		self.btn_opt_metrics.setCheckable(True)
		self.btn_opt_anchors.setCheckable(True)
		self.btn_opt_target.setCheckable(True)

		#self.btn_opt_extrapolate.setChecked(True)
		#self.btn_opt_keep_center.setChecked(True)
		#self.btn_opt_target.setChecked(True)

		self.btn_refresh.clicked.connect(self.refresh)
		self.btn_setAxis.clicked.connect(self.set_axis)
		self.btn_setAxis_c.clicked.connect(self.set_axis)
		self.btn_resetAxis.clicked.connect(self.reset_axis)
		self.btn_getVstem.clicked.connect(lambda: self.get_stem(False))
		self.btn_getHstem.clicked.connect(lambda: self.get_stem(True))
		self.btn_setLayer.clicked.connect(self.set_current_layer)
		self.btn_execute.clicked.connect(lambda: self.execute_scale(True))

		self.btn_file_save_patchboard.clicked.connect(self.file_save_patchboard)
		self.btn_file_load_patchboard.clicked.connect(self.file_load_patchboard)

		# -- Layer selector
		self.tree_layer = TRWLayerTree()

		# -- Actions (Context Menu)
		self.tree_layer.menu = QtGui.QMenu(self)
		self.tree_layer.menu.setTitle('Actions:')

		act_addItem = QtGui.QAction('Add', self)
		act_delItem = QtGui.QAction('Remove', self)
		act_dupItem = QtGui.QAction('Duplicate', self)
		act_uneItem = QtGui.QAction('Unnest', self)

		act_setItem_mask = QtGui.QAction('Set mask', self)
		act_setItem_unmask = QtGui.QAction('Remove mask', self)
		act_setItem_value = QtGui.QAction('Set value', self)

		act_setAxis = QtGui.QAction('Set Axis', self)
		act_resetAxis = QtGui.QAction('Reset Axis', self)
		act_getVstem = QtGui.QAction('Get Vertical Stems', self)
		act_getHstem = QtGui.QAction('Get Horizontal Stems', self)

		self.tree_layer.menu.addAction(act_addItem)
		self.tree_layer.menu.addAction(act_dupItem)
		self.tree_layer.menu.addAction(act_uneItem)
		self.tree_layer.menu.addAction(act_delItem)
		self.tree_layer.menu.addSeparator()	
		self.tree_layer.menu.addAction(act_setItem_mask )
		self.tree_layer.menu.addAction(act_setItem_unmask )
		self.tree_layer.menu.addAction(act_setItem_value )
		self.tree_layer.menu.addSeparator()	
		self.tree_layer.menu.addAction(act_getVstem)
		self.tree_layer.menu.addAction(act_getHstem)
		self.tree_layer.menu.addSeparator()	
		self.tree_layer.menu.addAction(act_setAxis)
		self.tree_layer.menu.addAction(act_resetAxis)

		act_addItem.triggered.connect(lambda: self.tree_layer._addItem())
		act_dupItem.triggered.connect(lambda: self.tree_layer._duplicateItems())
		act_uneItem.triggered.connect(lambda: self.tree_layer._unnestItem())
		act_delItem.triggered.connect(lambda: self.tree_layer._removeItems())
		
		act_setItem_mask.triggered.connect(lambda: self.tree_layer._setItemData('mask.', 0, 0, False))
		act_setItem_unmask.triggered.connect(lambda: self.tree_layer._setItemData('mask.', 0, 1, True))
		act_setItem_value.triggered.connect(lambda: self.tree_layer._setItemData(*TR2ComboDLG('Delta Setup', 'Please enter new value for selected columns', 'Value:', 'Column:', tree_column_names).values))
		
		act_setAxis.triggered.connect(lambda: self.set_axis())
		act_resetAxis.triggered.connect(lambda: self.reset_axis())
		
		act_getVstem.triggered.connect(lambda: self.get_stem(False))
		act_getHstem.triggered.connect(lambda: self.get_stem(True))
		
		# - Build Layout
		layoutV = QtGui.QVBoxLayout()

		# -- Layer selector
		layoutV.addWidget(self.tree_layer)

		# -- Set Glyph list
		self.fld_glyphs = TRCollapsibleBox('Process Glyphs')
		lay_glyphs = QtGui.QVBoxLayout()
		lay_glyphs_b = QtGui.QHBoxLayout()
		lay_glyphs.addWidget(self.lst_glyphName)
		lay_glyphs_b.addWidget(self.btn_refresh)
		lay_glyphs_b.addWidget(self.btn_setAxis_c)
		lay_glyphs.addLayout(lay_glyphs_b)
		self.fld_glyphs.setContentLayout(lay_glyphs)
		layoutV.addWidget(self.fld_glyphs)
		
		# -- Delta Setup controls
		self.fld_setup = TRCollapsibleBox('Delta Setup') 
		layoutG = QtGui.QGridLayout()
		layoutG.addWidget(QtGui.QLabel('Axis Setup:'),		0, 0, 1, 10)
		layoutG.addWidget(self.btn_getVstem, 				1, 0, 1, 5)
		layoutG.addWidget(self.btn_getHstem, 				1, 5, 1, 5)
		layoutG.addWidget(self.btn_resetAxis, 				2, 0, 1, 5)
		layoutG.addWidget(self.btn_setAxis, 				2, 5, 1, 5)
		layoutG.addWidget(self.btn_file_save_patchboard,	3, 0, 1, 5)
		layoutG.addWidget(self.btn_file_load_patchboard,	3, 5, 1, 5)

		layoutG.addWidget(QtGui.QLabel('Options:'),			4, 0, 1, 10)
		layoutG.addWidget(self.btn_opt_extrapolate, 		5, 0, 1, 5)
		layoutG.addWidget(self.btn_opt_italic, 				5, 5, 1, 5)
		layoutG.addWidget(self.btn_opt_anchors, 			6, 0, 1, 5)
		layoutG.addWidget(self.btn_opt_metrics, 			6, 5, 1, 5)
		layoutG.addWidget(self.btn_opt_target, 				8, 0, 1, 5)
		layoutG.addWidget(self.btn_opt_keep_center, 		8, 5, 1, 5)
		layoutG.addWidget(self.btn_opt_update_preview, 		9, 0, 1, 10)
		
		self.fld_setup.setContentLayout(layoutG)
		layoutV.addWidget(self.fld_setup)

		# -- Set Sliders
		self.fld_weight = TRCollapsibleBox('Stem Weight Control')
		self.fld_scale = TRCollapsibleBox('Compensative scaler')

		lay_weight = QtGui.QVBoxLayout()
		lay_scale = QtGui.QVBoxLayout()
		
		# --- Mixer
		lay_weight.addWidget(QtGui.QLabel('Vertical Stem Weight (X):'))
		self.mixer_dx = TRSliderCtrl('1', '1000', '0', 1)
		self.mixer_dx.sld_axis.valueChanged.connect(self.execute_scale)		
		lay_weight.addLayout(self.mixer_dx)
		lay_weight.addSpacing(10)
		
		lay_weight.addWidget(QtGui.QLabel('Horizontal Stem Weight (Y):'))
		self.mixer_dy = TRSliderCtrl('1', '1000', '0', 1)
		self.mixer_dy.sld_axis.valueChanged.connect(self.execute_scale)		
		lay_weight.addLayout(self.mixer_dy)
		
		self.fld_weight.setContentLayout(lay_weight)
		layoutV.addWidget(self.fld_weight)

		# --- Scaler
		lay_scale.addWidget(QtGui.QLabel('Width'))
		self.scalerX = TRSliderCtrl('1', '200', '100', 1)
		self.scalerX.sld_axis.valueChanged.connect(self.execute_scale)		
		lay_scale.addLayout(self.scalerX)
		lay_scale.addSpacing(10)

		lay_scale.addWidget(QtGui.QLabel('Height'))
		self.scalerY = TRSliderCtrl('1', '200', '100', 1)
		self.scalerY.sld_axis.valueChanged.connect(self.execute_scale)		
		lay_scale.addLayout(self.scalerY)

		self.fld_scale.setContentLayout(lay_scale)
		layoutV.addWidget(self.fld_scale)

		# -- Tail 
		layoutE = QtGui.QHBoxLayout()
		layoutE.addWidget(self.btn_setLayer)
		layoutE.addWidget(self.btn_execute)
		layoutV.addLayout(layoutE)

		self.__lbl_warn = QtGui.QLabel('')
		layoutV.addWidget(self.__lbl_warn)
		self.__lbl_warn.hide()

		# -- Finish
		self.refresh()
		self.tree_layer.setTree(self.__init_tree(), tree_column_names)
		self.setLayout(layoutV)
		self.setMinimumSize(300, self.sizeHint.height())
Ejemplo n.º 6
0
    def __init__(self, parentWidget):
        super(WKernGroups, self).__init__()

        # - Init
        self.upper_widget = parentWidget
        self.active_font = pFont()
        self.kern_group_data = {}  #self.active_font.kerning_groups_to_dict()

        # - Interface
        lbl_name = QtGui.QLabel('Kerning classes')
        lbl_act = QtGui.QLabel('Actions (selected items):')
        lbl_name.setMaximumHeight(20)
        lbl_act.setMaximumHeight(20)

        self.cmb_layer = QtGui.QComboBox()
        self.cmb_layer.addItems(self.active_font.masters())
        self.cmb_layer.currentIndexChanged.connect(
            lambda: self.update_data(self.kern_group_data))

        self.btn_apply = QtGui.QPushButton('Apply changes')
        self.btn_write = QtGui.QPushButton('Write changes')
        self.btn_reset = QtGui.QPushButton('Clear Font classes')

        self.btn_apply.clicked.connect(lambda: self.apply_changes(False))
        self.btn_write.clicked.connect(lambda: self.apply_changes(True))
        self.btn_reset.clicked.connect(lambda: self.reset_classes())

        self.tab_groupKern = GroupTableView()

        # - Menus & Actions
        # -- Main Database actions
        self.menu_data = QtGui.QMenu('Class Data', self)
        act_data_open = QtGui.QAction('Open TypeRig Classes (JSON)', self)
        act_data_save = QtGui.QAction('Save TypeRig Classes (JSON)', self)
        act_data_import = QtGui.QAction('Import FontLab Classes (JSON)', self)
        act_data_export = QtGui.QAction('Export FontLab Classes (JSON)', self)
        act_data_import_font = QtGui.QAction('Load Classes from Font', self)
        act_data_build_composite = QtGui.QAction('Auto Build Classes', self)
        act_data_reset = QtGui.QAction('Reset Font Class Data', self)
        act_data_write = QtGui.QAction('Write class data to Font', self)

        self.menu_data.addAction(act_data_import_font)
        self.menu_data.addAction(act_data_build_composite)
        self.menu_data.addSeparator()
        self.menu_data.addAction(act_data_open)
        self.menu_data.addAction(act_data_save)
        self.menu_data.addSeparator()
        self.menu_data.addAction(act_data_import)
        self.menu_data.addAction(act_data_export)
        self.menu_data.addSeparator()
        self.menu_data.addAction(act_data_reset)
        self.menu_data.addAction(act_data_write)

        act_data_open.triggered.connect(lambda: self.file_load_groups(True))
        act_data_save.triggered.connect(lambda: self.file_save_groups(True))
        act_data_import.triggered.connect(lambda: self.file_load_groups(False))
        #act_data_export.triggered.connect()
        act_data_import_font.triggered.connect(lambda: self.from_font())
        act_data_build_composite.triggered.connect(
            lambda: self.from_composites())
        act_data_reset.triggered.connect(lambda: self.reset_classes())
        act_data_write.triggered.connect(lambda: self.apply_changes(True))

        # -- Main Class actions
        self.menu_class = QtGui.QMenu('Class Management', self)
        act_class_add = QtGui.QAction('Add new class', self)
        act_class_find = QtGui.QAction('Find and replace class names', self)
        act_class_copy = QtGui.QAction('Duplicate classes', self)
        act_class_merge = QtGui.QAction('Merge classes to new', self)
        act_class_mdel = QtGui.QAction('Merge and remove classes', self)
        act_class_del = QtGui.QAction('Remove classes', self)
        act_class_prefix = QtGui.QAction('Add prefix to class name', self)

        self.menu_class.addAction(act_class_add)
        self.menu_class.addAction(act_class_find)
        self.menu_class.addAction(act_class_copy)
        self.menu_class.addAction(act_class_merge)
        self.menu_class.addAction(act_class_prefix)
        self.menu_class.addAction(act_class_mdel)
        self.menu_class.addAction(act_class_del)

        act_class_add.triggered.connect(lambda: self.class_add_new())
        act_class_find.triggered.connect(lambda: self.class_find_replace())
        act_class_copy.triggered.connect(lambda: self.class_copy())
        act_class_merge.triggered.connect(lambda: self.class_merge(False))
        act_class_mdel.triggered.connect(lambda: self.class_merge(True))
        act_class_del.triggered.connect(lambda: self.class_del())
        act_class_prefix.triggered.connect(lambda: self.class_prefix())

        # -- Change class type
        self.menu_type = QtGui.QMenu('Class Type', self)
        act_type_Left = QtGui.QAction('Set KernLeft (1st)', self)
        act_type_Right = QtGui.QAction('Set KernRight (2nd)', self)
        act_type_Both = QtGui.QAction('Set KernBothSide (1st and 2nd)', self)
        act_type_toggle = QtGui.QAction('Toggle class type', self)

        act_type_Left.triggered.connect(lambda: self.set_type('KernLeft'))
        act_type_Right.triggered.connect(lambda: self.set_type('KernRight'))
        act_type_Both.triggered.connect(lambda: self.set_type('KernBothSide'))
        act_type_toggle.triggered.connect(lambda: self.toggle_type())

        self.menu_type.addAction(act_type_Left)
        self.menu_type.addAction(act_type_Right)
        self.menu_type.addAction(act_type_Both)
        self.menu_type.addAction(act_type_toggle)

        # -- Modify Members
        self.menu_memb = QtGui.QMenu('Class Members', self)
        act_memb_sel = QtGui.QAction('Select Glyphs', self)
        act_memb_clean = QtGui.QAction('Cleanup', self)
        act_memb_upper = QtGui.QAction('Members to uppercase', self)
        act_memb_lower = QtGui.QAction('Members to lowercase', self)
        act_memb_strip = QtGui.QAction('Strip member suffixes', self)
        act_memb_suff = QtGui.QAction('Add suffix to members', self)
        act_memb_addglyphs = QtGui.QAction('Selected glyphs to members', self)

        act_memb_sel.triggered.connect(lambda: self.memb_select())
        act_memb_clean.triggered.connect(lambda: self.memb_cleanup())
        act_memb_upper.triggered.connect(lambda: self.memb_change_case(True))
        act_memb_lower.triggered.connect(lambda: self.memb_change_case(False))
        act_memb_strip.triggered.connect(lambda: self.memb_stripSuffix())
        act_memb_suff.triggered.connect(lambda: self.memb_addSuffix())
        act_memb_addglyphs.triggered.connect(lambda: self.memb_addGlyphs())

        self.menu_memb.addAction(act_memb_sel)
        self.menu_memb.addAction(act_memb_clean)
        self.menu_memb.addAction(act_memb_upper)
        self.menu_memb.addAction(act_memb_lower)
        self.menu_memb.addAction(act_memb_strip)
        self.menu_memb.addAction(act_memb_suff)
        self.menu_memb.addAction(act_memb_addglyphs)

        # -- MACOS buttons menu
        self.btn_mac_data_open = QtGui.QPushButton('Open')
        self.btn_mac_data_save = QtGui.QPushButton('Save')
        self.btn_mac_data_import = QtGui.QPushButton('Import')
        self.btn_mac_data_export = QtGui.QPushButton('Export')
        self.btn_mac_data_import_font = QtGui.QPushButton('From Font')
        self.btn_mac_data_build_composite = QtGui.QPushButton(
            'Auto Build Classes')

        self.btn_mac_data_open.clicked.connect(
            lambda: self.file_load_groups(True))
        self.btn_mac_data_save.clicked.connect(
            lambda: self.file_save_groups(True))
        self.btn_mac_data_import.clicked.connect(
            lambda: self.file_load_groups(False))
        #self.btn_mac_data_export.clicked.connect()
        self.btn_mac_data_import_font.clicked.connect(lambda: self.from_font())
        self.btn_mac_data_build_composite.clicked.connect(
            lambda: self.from_composites())

        # - Table auto preview selection
        self.chk_preview = QtGui.QCheckBox('Auto select/preview class.')
        self.tab_groupKern.selectionModel().selectionChanged.connect(
            lambda: self.auto_preview())

        # - Build
        self.lay_grid = QtGui.QGridLayout()
        self.lay_grid.addWidget(lbl_name, 0, 0, 1, 42)
        self.lay_grid.addWidget(QtGui.QLabel('Master:'), 0, 40, 1, 2)
        self.lay_grid.addWidget(self.cmb_layer, 0, 42, 1, 6)
        self.lay_grid.addWidget(self.tab_groupKern, 1, 0, 11, 42)
        self.lay_grid.addWidget(self.btn_apply, 1, 42, 1, 6)
        self.lay_grid.addWidget(self.chk_preview, 2, 42, 1, 6)

        # -- MAC buttons
        if system() == 'Darwin':
            self.lay_grid.addWidget(self.btn_mac_data_open, 4, 42, 1, 3)
            self.lay_grid.addWidget(self.btn_mac_data_save, 4, 45, 1, 3)
            self.lay_grid.addWidget(self.btn_mac_data_import, 5, 42, 1, 3)
            self.lay_grid.addWidget(self.btn_mac_data_export, 5, 45, 1, 3)
            self.lay_grid.addWidget(self.btn_mac_data_import_font, 6, 42, 1, 6)
            self.lay_grid.addWidget(self.btn_mac_data_build_composite, 8, 42,
                                    1, 6)

        self.lay_grid.addWidget(self.btn_reset, 10, 42, 1, 6)
        self.lay_grid.addWidget(self.btn_write, 11, 42, 1, 6)

        self.setLayout(self.lay_grid)
Ejemplo n.º 7
0
	def __init__(self, parentWidget):
		super(WKernGroups, self).__init__()

		# - Init
		self.upper_widget = parentWidget
		self.active_font = pFont()
		self.application = pWorkspace()
		self.data_fontKerning = None
		self.data_clipboard = []

		# - Interface -------------------------
		# -- Conditional formatting -----------
		self.edt_formatting = QtGui.QLineEdit()
		self.edt_formatting.setPlaceholderText('Conditional formatting example: red==None; green > 0; blue < 0; yellow => 100;!hide<-50; !show==30;')
		
		self.btn_formatting_apply = QtGui.QPushButton('Format')
		self.btn_formatting_clear = QtGui.QPushButton('Clear')
		self.btn_formatting_color = QtGui.QPushButton('>')
		self.btn_formatting_color.setMaximumWidth(20)
		
		self.btn_formatting_color.clicked.connect(lambda: self.edt_formatting.setText(self.edt_formatting.text + self.cmb_select_color.currentText))
		self.btn_formatting_apply.clicked.connect(lambda: self.update_table_format(False))
		self.btn_formatting_clear.clicked.connect(lambda: self.update_table_format(True))

		self.cmb_select_color = QtGui.QComboBox()

		colorNames = QtGui.QColor.colorNames()
		for i in range(len(colorNames)):
			self.cmb_select_color.addItem(colorNames[i])
			self.cmb_select_color.setItemData(i, QtGui.QColor(colorNames[i]), QtCore.Qt.DecorationRole)

		self.cmb_select_color.setCurrentIndex(colorNames.index('red'))

		# -- Cell highlighter and search ------
		self.edt_search_pair = QtGui.QLineEdit()
		self.edt_search_regex = QtGui.QLineEdit()
		
		self.edt_search_pair.setPlaceholderText('Pair search example: A|V; @O|@A; Where A|V plain pair and @O|@A classes containing O and A.')
		self.edt_search_regex.setPlaceholderText('RegEx search example: .*.O.*.A.*; Note: Pair source is [space] separated!')

		self.btn_search_pair_under = QtGui.QPushButton('Current Pair')
		self.btn_search_pair = QtGui.QPushButton('Find Pairs')
		self.btn_search_regex = QtGui.QPushButton('Find RegEx')
		self.btn_search_hide = QtGui.QPushButton('Hide others')

		self.btn_search_hide.setCheckable(True)
		
		self.btn_search_hide.clicked.connect(lambda: self.update_table_show_all())
		self.btn_search_pair_under.clicked.connect(lambda: self.update_table_hightlights(False))
		self.btn_search_pair.clicked.connect(lambda: self.update_table_hightlights(True))
		self.btn_search_regex.clicked.connect(lambda: self.update_table_regex())

		# -- Table ----------------------------
		self.btn_fontKerning_autoupdate = QtGui.QPushButton('Auto Update')
		self.btn_fontKerning_preview = QtGui.QPushButton('Preview pairs')
		self.btn_layer_preview = QtGui.QPushButton('Preview layers')
		self.btn_fontKerning_update = QtGui.QPushButton('Update Font')
		self.tab_fontKerning = KernTableWidget(self)
		
		self.btn_fontKerning_autoupdate.setCheckable(True)
		self.btn_fontKerning_preview.setCheckable(True)
		self.btn_layer_preview.setCheckable(True)
		self.btn_fontKerning_autoupdate.setChecked(True)
		self.btn_fontKerning_update.clicked.connect(lambda: self.update_font())

		# - Menus & Actions --------------------
		# -- Main Database actions
		self.menu_data = QtGui.QMenu('Kerning Data', self)
		act_data_import = QtGui.QAction('Import Kerning', self)
		act_data_export = QtGui.QAction('Export Kerning', self)
		act_data_font = QtGui.QAction('Load from Font', self)
		act_data_reset = QtGui.QAction('Reset Font Kerning Data', self)

		act_data_import.setEnabled(False)
		act_data_export.setEnabled(False)

		self.menu_data.addAction(act_data_font)
		self.menu_data.addSeparator()
		self.menu_data.addAction(act_data_import)
		self.menu_data.addAction(act_data_export)
		self.menu_data.addSeparator()
		self.menu_data.addSeparator()
		self.menu_data.addAction(act_data_reset)

		#act_data_import.triggered.connect(lambda: self.file_load_groups(True))
		#act_data_export.triggered.connect(lambda: self.file_export_groups(True))
		act_data_font.triggered.connect(lambda: self.kerning_from_font())
		act_data_reset.triggered.connect(lambda: self.kerning_reset())

		# -- Pairs
		self.menu_pair = QtGui.QMenu('Pairs', self)
		act_pair_add = QtGui.QAction('Add new pair', self)
		act_pair_del = QtGui.QAction('Remove pair', self)
		act_pair_update = QtGui.QAction('Update from Font', self)
		act_pair_copy = QtGui.QAction('Copy value(s)', self)
		act_pair_paste = QtGui.QAction('Paste value(s)', self)
		act_pair_copy_string = QtGui.QAction('Copy pairs string', self)
		act_pair_copy_leader = QtGui.QAction('Copy pairs string as Glyph Names', self)
		act_pair_save_krn_clas = QtGui.QAction('Save CLASS pairs as KRN...', self)
		act_pair_save_krn_plain = QtGui.QAction('Save PLAIN pairs as KRN...', self)

		self.menu_pair.addAction(act_pair_add)
		self.menu_pair.addAction(act_pair_del)
		self.menu_pair.addAction(act_pair_update)
		self.menu_pair.addSeparator()
		self.menu_pair.addAction(act_pair_copy)
		self.menu_pair.addAction(act_pair_paste)
		self.menu_pair.addSeparator()
		self.menu_pair.addAction(act_pair_copy_string)
		self.menu_pair.addAction(act_pair_copy_leader)
		self.menu_pair.addSeparator()
		self.menu_pair.addAction(act_pair_save_krn_clas)
		self.menu_pair.addAction(act_pair_save_krn_plain)

		act_pair_add.setEnabled(False)
		
		#act_pair_add.triggered.connect(lambda: self.pair_add())
		act_pair_del.triggered.connect(lambda: self.pair_del())
		act_pair_update.triggered.connect(lambda: self.pair_update_from_source())
		act_pair_copy.triggered.connect(lambda: self.pair_copy_paste(False))
		act_pair_paste.triggered.connect(lambda: self.pair_copy_paste(True))
		act_pair_copy_string.triggered.connect(lambda: self.pair_copy_string(False))
		act_pair_copy_leader.triggered.connect(lambda: self.pair_copy_string(True))
		act_pair_save_krn_clas.triggered.connect(lambda: self.pair_save_krn(False))
		act_pair_save_krn_plain.triggered.connect(lambda: self.pair_save_krn(True))

		# -- Tools
		self.menu_tools = QtGui.QMenu('Tools', self)
		act_tools_fl_extend = QtGui.QAction('Extend Kerning', self)
		act_tools_fl_match = QtGui.QAction('Match Kerning', self)
		act_tools_tr_replace = QtGui.QAction('Find && Replace', self)
		act_tools_tr_round = QtGui.QAction('Quantize', self)
		act_tools_tr_scale = QtGui.QAction('Scale', self)
		act_tools_tr_filter = QtGui.QAction('Filter', self) # High-pass, low-pass, band-pass
		act_tools_tr_clean = QtGui.QAction('Cleanup', self)
		act_tools_tr_patchboard = QtGui.QAction('Patchboard', self)

		self.menu_tools.addAction(act_tools_fl_extend)
		self.menu_tools.addAction(act_tools_fl_match)
		self.menu_tools.addSeparator()
		self.menu_tools.addAction(act_tools_tr_replace)
		self.menu_tools.addSeparator()
		self.menu_tools.addAction(act_tools_tr_round)
		self.menu_tools.addAction(act_tools_tr_scale)
		self.menu_tools.addAction(act_tools_tr_filter)
		self.menu_tools.addAction(act_tools_tr_clean)
		self.menu_tools.addSeparator()
		self.menu_tools.addAction(act_tools_tr_patchboard)

		act_tools_fl_extend.setEnabled(False)
		act_tools_fl_match.setEnabled(False)
		act_tools_tr_round.setEnabled(False)
		act_tools_tr_scale.setEnabled(False)
		act_tools_tr_filter.setEnabled(False)
		act_tools_tr_clean.setEnabled(False)
		act_tools_tr_patchboard.setEnabled(False)

		act_tools_tr_replace.triggered.connect(lambda: self.tools_replace())

		# -- View
		self.menu_view = QtGui.QMenu('View', self)
		act_view_show_all = QtGui.QAction('Show hidden rows', self)
		act_view_hide_selected = QtGui.QAction('Hide selected rows', self)
		act_view_hide_matching = QtGui.QAction('Hide matching pairs', self)
		act_view_hide_nonmatching = QtGui.QAction('Hide non-matching pairs', self)
		act_view_pair_preview = QtGui.QAction('Preview selected pairs', self)

		self.menu_view.addAction(act_view_show_all)
		self.menu_view.addAction(act_view_pair_preview)
		self.menu_view.addSeparator()
		self.menu_view.addAction(act_view_hide_selected)
		self.menu_view.addAction(act_view_hide_matching)
		self.menu_view.addAction(act_view_hide_nonmatching)

		act_view_pair_preview.triggered.connect(lambda: self.pair_preview_string(self.btn_layer_preview.isChecked()))
		act_view_show_all.triggered.connect(lambda: self.update_table_show_all())
		act_view_hide_selected.triggered.connect(lambda: self.update_table_hide_selected())
		act_view_hide_matching.triggered.connect(lambda: self.update_table_hide_matching(True))
		act_view_hide_nonmatching.triggered.connect(lambda: self.update_table_hide_matching(False))

		# -- Status bar
		self.lbl_status_selection_len = QtGui.QLabel('0')
		self.lbl_status_selection_med = QtGui.QLabel('0')
		self.lbl_status_pairs_len = QtGui.QLabel('0')
		self.lbl_status_pairs_hidden = QtGui.QLabel('0')
		self.lbl_status_masters_len = QtGui.QLabel('0')

		# -- MACOS buttons menu
		self.btn_mac_data_import = QtGui.QPushButton('Import')
		self.btn_mac_data_export = QtGui.QPushButton('Export')
		self.btn_mac_data_font = QtGui.QPushButton('From Font')
		self.btn_mac_data_reset = QtGui.QPushButton('Reset Kerning')

		self.btn_mac_data_import.setEnabled(False)
		self.btn_mac_data_export.setEnabled(False)

		self.btn_mac_data_font.clicked.connect(lambda: self.kerning_from_font())

		# - Build ------------------------------------------
		self.lay_grid = QtGui.QGridLayout()
		# -- MAC buttons
		if system() == 'Darwin':
			self.lay_grid.addWidget(self.btn_mac_data_font,					0, 0, 1, 10)
			self.lay_grid.addWidget(self.btn_mac_data_import,				0, 10, 1, 5)	
			self.lay_grid.addWidget(self.btn_mac_data_export,				0, 15, 1, 5)	
			self.lay_grid.addWidget(self.btn_mac_data_reset,				0, 20, 1, 5)			

		# -- Regular interface
		
		self.lay_grid.addWidget(self.edt_search_pair,						1, 0, 1, 20)	
		self.lay_grid.addWidget(self.btn_search_pair,						1, 20, 1, 5)	
		self.lay_grid.addWidget(self.btn_search_pair_under,					1, 25, 1, 5)
		self.lay_grid.addWidget(self.btn_fontKerning_preview,				1, 30, 1, 5)
		self.lay_grid.addWidget(self.btn_search_hide,						2, 25, 1, 5)
		self.lay_grid.addWidget(self.btn_layer_preview,						2, 30, 1, 5)

		self.lay_grid.addWidget(self.edt_search_regex,						2, 0, 1, 20)	
		self.lay_grid.addWidget(self.btn_search_regex,						2, 20, 1, 5)
		
		self.lay_grid.addWidget(self.btn_fontKerning_autoupdate,			1, 35, 1, 5)
		self.lay_grid.addWidget(self.btn_fontKerning_update,				2, 35, 1, 5)
		
		self.lay_grid.addWidget(self.tab_fontKerning,						4, 0, 32, 40)

		self.lay_grid.addWidget(self.cmb_select_color,						36, 0, 1, 5)
		self.lay_grid.addWidget(self.btn_formatting_color,					36, 5, 1, 1)
		self.lay_grid.addWidget(self.edt_formatting,						36, 6, 1, 24)
		self.lay_grid.addWidget(self.btn_formatting_apply,					36, 30, 1, 5)
		self.lay_grid.addWidget(self.btn_formatting_clear,					36, 35, 1, 5)
		self.lay_grid.addWidget(self.btn_formatting_clear,					36, 35, 1, 5)
		
		self.lay_grid.addWidget(QtGui.QLabel('SELECTION:'),					37, 0, 1, 4)
		self.lay_grid.addWidget(self.lbl_status_selection_len,				37, 4, 1, 4)
		self.lay_grid.addWidget(QtGui.QLabel('MEAN:'),					37, 8, 1, 4)	
		self.lay_grid.addWidget(self.lbl_status_selection_med,				37, 12, 1, 4)
		self.lay_grid.addWidget(QtGui.QLabel('PAIRS:'),						37, 16, 1, 4)	
		self.lay_grid.addWidget(self.lbl_status_pairs_len,					37, 20, 1, 4)
		self.lay_grid.addWidget(QtGui.QLabel('HIDDEN:'),					37, 24, 1, 4)	
		self.lay_grid.addWidget(self.lbl_status_pairs_hidden,				37, 28, 1, 4)
		self.lay_grid.addWidget(QtGui.QLabel('MASTERS:'),					37, 32, 1, 4)	
		self.lay_grid.addWidget(self.lbl_status_masters_len,				37, 36, 1, 4)

		
		self.lay_grid.setSpacing(3)
		self.setLayout(self.lay_grid)