def createWidget(self, parent): """ Create a new empty widget """ column_obj = self.entity().columns[self.column] self.column_widget = ColumnWidgetRegistry.create( column_obj, parent ) return self.column_widget
def _get_widget_factory(self, entity): """ Get widget factory for specific column type :param entity: Current column entity object :type entity: Entity :return c: Column object corresponding to the widget factory :rtype c: BaseColumn :return col_factory: Widget factory corresponding to the column type :rtype col_factory: ColumnWidgetRegistry """ for c in entity.columns.values(): col_factory = ColumnWidgetRegistry.factory(c.TYPE_INFO) if col_factory is not None: yield c, col_factory(c)
def format_columns(self, entity=None): if entity is None: entity = self._entity if entity is None: return for col in entity.columns.values(): col_name = col.name # Get widget factory so that we can use the value formatter widget_factory = ColumnWidgetRegistry.factory( col.TYPE_INFO ) if not widget_factory is None: formatter = widget_factory(col) self.column_formatter[col_name] = formatter
def register_column_widgets(self): """ Registers the column widgets. """ # Append column labels and widgets table_name = self._entity.name columns = table_column_names(table_name) self.scroll_widget_contents = QWidget() self.scroll_widget_contents.setObjectName('scrollAreaWidgetContents') for c in self._entity.columns.values(): if c.name in self.exclude_columns: continue if not c.name in columns and not isinstance(c, VirtualColumn): continue # Get widget factory column_widget = ColumnWidgetRegistry.create( c, self.scroll_widget_contents, host=self) self.column_widgets[c] = column_widget
def register_column_widgets(self): """ Registers the column widgets. """ # Append column labels and widgets table_name = self._entity.name columns = table_column_names(table_name) self.scroll_widget_contents = QWidget() self.scroll_widget_contents.setObjectName( 'scrollAreaWidgetContents' ) for c in self._entity.columns.values(): if c.name in self.exclude_columns: continue if not c.name in columns and not isinstance(c, VirtualColumn): continue # Get widget factory column_widget = ColumnWidgetRegistry.create( c, self.scroll_widget_contents, host=self ) self.column_widgets[c] = column_widget
def _init_entity_columns(self): """ Asserts if the entity columns actually do exist in the database. The method also initializes the table headers, entity column and cell formatters. """ self._headers[:] = [] table_name = self._entity.name columns = table_column_names(table_name) missing_columns = [] header_idx = 0 #Iterate entity column and assert if they exist for c in self._entity.columns.values(): # Exclude geometry columns if isinstance(c, GeometryColumn): continue #Do not include virtual columns in list of missing columns if not c.name in columns and not isinstance(c, VirtualColumn): missing_columns.append(c.name) else: header = c.ui_display() self._headers.append(header) col_name = c.name ''' If it is a virtual column then use column name as the header but fully qualified column name (created by SQLAlchemy relationship) as the entity attribute name. ''' if isinstance(c, MultipleSelectColumn): col_name = c.model_attribute_name self._entity_attrs.append(col_name) # Get widget factory so that we can use the value formatter w_factory = ColumnWidgetRegistry.factory(c.TYPE_INFO) if not w_factory is None: formatter = w_factory(c) self._cell_formatters[col_name] = formatter #Set searchable columns if c.searchable: self._searchable_columns[c.ui_display()] = { 'name': c.name, 'header_index': header_idx } header_idx += 1 if len(missing_columns) > 0: msg = QApplication.translate( 'EntityBrowser', u'The following columns have been defined in the ' u'configuration but are missing in corresponding ' u'database table, please re-run the configuration wizard ' u'to create them.\n{0}'.format('\n'.join(missing_columns))) QMessageBox.warning( self, QApplication.translate('EntityBrowser', 'Entity Browser'), msg)
def _init_fk_columns(self): """ Asserts if the entity columns actually do exist in the database. The method also initializes the table headers, entity column and cell formatters. """ self._headers[:] = [] self._entity_attrs[:] = [] if self._dbmodel is None: msg = QApplication.translate( 'ForeignKeyMapper', 'The data model for ' 'the entity could ' 'not be loaded, ' 'please contact ' 'your database ' 'administrator.') QMessageBox.critical( self, QApplication.translate('EntityBrowser', 'Entity Browser'), msg) return table_name = self._entity.name columns = table_column_names(table_name) missing_columns = [] header_idx = 0 # Iterate entity column and assert if they exist for c in self._entity.columns.values(): # Do not include virtual columns in list of missing columns if not c.name in columns and not isinstance(c, VirtualColumn): missing_columns.append(c.name) else: header = c.header() self._headers.append(header) ''' If it is a virtual column then use column name as the header but fully qualified column name (created by SQLAlchemy relationship) as the entity attribute name. ''' col_name = c.name if isinstance(c, MultipleSelectColumn): col_name = c.model_attribute_name self._entity_attrs.append(col_name) # Get widget factory so that we can use the value formatter w_factory = ColumnWidgetRegistry.factory(c.TYPE_INFO) if not w_factory is None: try: formatter = w_factory(c) self._cell_formatters[col_name] = formatter except WidgetException as we: msg = QApplication.translate( 'ForeignKeyMapper', 'Error in creating column:') msg = '{0} {1}:{2}\n{3}'.format( msg, self._entity.name, c.name, str(we)) QMessageBox.critical( self, QApplication.translate('ForeignKeyMapper', 'Widget Creation Error'), msg) # Set searchable columns if c.searchable: self._searchable_columns[header] = { 'name': c.name, 'header_index': header_idx } header_idx += 1 if len(missing_columns) > 0: msg = QApplication.translate( 'ForeignKeyMapper', 'The following columns have been defined in the ' 'configuration but are missing in corresponding ' 'database table, please re-run the configuration wizard ' 'to create them.\n{0}'.format('\n'.join(missing_columns))) QMessageBox.warning( self, QApplication.translate('ForeignKeyMapper', 'Entity Browser'), msg) self._tableModel = BaseSTDMTableModel([], self._headers, self) self._tbFKEntity.setModel(self._tableModel) # First (id) column will always be hidden self._tbFKEntity.hideColumn(0) self._tbFKEntity.horizontalHeader().setSectionResizeMode( QHeaderView.Interactive) self._tbFKEntity.horizontalHeader().setStretchLastSection(True) self._tbFKEntity.verticalHeader().setVisible(True)
def _setup_columns_content_area(self): #Only use this if entity supports documents self.entity_tab_widget = None self.doc_widget = None self.entity_scroll_area = QScrollArea(self) self.entity_scroll_area.setFrameShape(QFrame.NoFrame) self.entity_scroll_area.setWidgetResizable(True) self.entity_scroll_area.setObjectName('scrollArea') self.scroll_widget_contents = QWidget() self.scroll_widget_contents.setObjectName( 'scrollAreaWidgetContents' ) #Grid layout for controls self.gl = QGridLayout(self.scroll_widget_contents) self.gl.setObjectName('gl_widget_contents') #Append column labels and widgets table_name = self._entity.name columns = table_column_names(table_name) #Iterate entity column and assert if they exist row_id = 0 for c in self._entity.columns.values(): if not c.name in columns and not isinstance(c, VirtualColumn): continue #Get widget factory column_widget = ColumnWidgetRegistry.create( c, self.scroll_widget_contents ) if not column_widget is None: header = c.header() self.c_label = QLabel(self.scroll_widget_contents) #Format label text if it is a mandatory field if c.mandatory: header = '{0} *'.format(c.header()) #Highlight asterisk header = self._highlight_asterisk(header) self.c_label.setText(header) self.gl.addWidget(self.c_label, row_id, 0, 1, 1) self.column_widget = column_widget self.gl.addWidget(self.column_widget, row_id, 1, 1, 1) #Add user tip if specified for the column configuration if c.user_tip: self.tip_lbl = UserTipLabel(user_tip=c.user_tip) self.gl.addWidget(self.tip_lbl, row_id, 2, 1, 1) if c.mandatory and not self.has_mandatory: self.has_mandatory = True col_name = c.name #Replace name accordingly based on column type if isinstance(c, MultipleSelectColumn): col_name = c.model_attribute_name #Add widget to MapperMixin collection self.addMapping( col_name, self.column_widget, c.mandatory, pseudoname=c.header() ) #Bump up row_id row_id += 1 self.entity_scroll_area.setWidget( self.scroll_widget_contents ) #Check if there are children and add foreign key browsers ch_entities = self.children_entities() if len(ch_entities) > 0: if self.entity_tab_widget is None: self.entity_tab_widget = QTabWidget(self) #Add primary tab if necessary self._add_primary_attr_widget() for ch in ch_entities: self._add_fk_browser(ch) #Add tab widget if entity supports documents if self._entity.supports_documents: self.doc_widget = SupportingDocumentsWidget( self._entity.supporting_doc, self._ent_document_model, self ) #Map the source document manager object self.addMapping( 'documents', self.doc_widget.source_document_manager ) if self.entity_tab_widget is None: self.entity_tab_widget = QTabWidget(self) #Add attribute tab self._add_primary_attr_widget() #Add supporting documents tab self.entity_tab_widget.addTab( self.doc_widget, self.tr('Supporting Documents') ) #Return the correct widget if not self.entity_tab_widget is None: return self.entity_tab_widget return self.entity_scroll_area
def _init_fk_columns(self): """ Asserts if the entity columns actually do exist in the database. The method also initializes the table headers, entity column and cell formatters. """ self._headers[:] = [] self._entity_attrs[:] = [] if self._dbmodel is None: msg = QApplication.translate( 'ForeignKeyMapper', 'The data model for ' 'the entity could ' 'not be loaded, ' 'please contact ' 'your database ' 'administrator.' ) QMessageBox.critical( self, QApplication.translate( 'EntityBrowser', 'Entity Browser' ), msg ) return table_name = self._entity.name columns = table_column_names(table_name) missing_columns = [] header_idx = 0 #Iterate entity column and assert if they exist for c in self._entity.columns.values(): #Do not include virtual columns in list of missing columns if not c.name in columns and not isinstance(c, VirtualColumn): missing_columns.append(c.name) else: header = c.header() self._headers.append(header) ''' If it is a virtual column then use column name as the header but fully qualified column name (created by SQLAlchemy relationship) as the entity attribute name. ''' col_name = c.name if isinstance(c, MultipleSelectColumn): col_name = c.model_attribute_name self._entity_attrs.append(col_name) #Get widget factory so that we can use the value formatter w_factory = ColumnWidgetRegistry.factory(c.TYPE_INFO) if not w_factory is None: try: formatter = w_factory(c) self._cell_formatters[col_name] = formatter except WidgetException as we: msg = QApplication.translate( 'ForeignKeyMapper', 'Error in creating column:' ) msg = '{0} {1}:{2}\n{3}'.format( msg, self._entity.name, c.name, unicode(we) ) QMessageBox.critical( self, QApplication.translate( 'ForeignKeyMapper', 'Widget Creation Error' ), msg ) #Set searchable columns if c.searchable: self._searchable_columns[header] = { 'name': c.name, 'header_index': header_idx } header_idx += 1 if len(missing_columns) > 0: msg = QApplication.translate( 'ForeignKeyMapper', u'The following columns have been defined in the ' u'configuration but are missing in corresponding ' u'database table, please re-run the configuration wizard ' u'to create them.\n{0}'.format( '\n'.join(missing_columns) ) ) QMessageBox.warning( self, QApplication.translate('ForeignKeyMapper','Entity Browser'), msg ) self._tableModel = BaseSTDMTableModel([], self._headers, self) self._tbFKEntity.setModel(self._tableModel) self._tbFKEntity.resizeColumnsToContents() #First (id) column will always be hidden self._tbFKEntity.hideColumn(0) self._tbFKEntity.horizontalHeader().setResizeMode( QHeaderView.Interactive ) self._tbFKEntity.verticalHeader().setVisible(True)
def _init_entity_columns(self): """ Asserts if the entity columns actually do exist in the database. The method also initializes the table headers, entity column and cell formatters. """ self._headers[:] = [] table_name = self._entity.name columns = table_column_names(table_name) missing_columns = [] header_idx = 0 #Iterate entity column and assert if they exist for c in self._entity.columns.values(): # Exclude geometry columns if isinstance(c, GeometryColumn): continue # Do not include virtual columns in list of missing columns if not c.name in columns and not isinstance(c, VirtualColumn): missing_columns.append(c.name) else: header = c.ui_display() self._headers.append(header) col_name = c.name ''' If it is a virtual column then use column name as the header but fully qualified column name (created by SQLAlchemy relationship) as the entity attribute name. ''' if isinstance(c, MultipleSelectColumn): col_name = c.model_attribute_name self._entity_attrs.append(col_name) # Get widget factory so that we can use the value formatter w_factory = ColumnWidgetRegistry.factory(c.TYPE_INFO) if not w_factory is None: formatter = w_factory(c) self._cell_formatters[col_name] = formatter # Set searchable columns if c.searchable: self._searchable_columns[c.ui_display()] = { 'name': c.name, 'header_index': header_idx } header_idx += 1 if len(missing_columns) > 0: msg = QApplication.translate( 'EntityBrowser', u'The following columns have been defined in the ' u'configuration but are missing in corresponding ' u'database table, please re-run the configuration wizard ' u'to create them.\n{0}'.format( '\n'.join(missing_columns) ) ) QMessageBox.warning( self, QApplication.translate('EntityBrowser','Entity Browser'), msg )