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())
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)
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())
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)