def start_import(self, file, default_schema, default_charset): self.panel = RunPanel(self.editor, self.report) self.set_title("Run SQL Script") box = mforms.newBox(False) box.set_padding(12) box.set_spacing(12) box.add(self.panel, False, True) box.add(mforms.newLabel("Output:"), False, True) box.add(self.logbox, True, True) self.ok = mforms.newButton() self.ok.set_text("Close") self.ok.add_clicked_callback(self.close) #self.abort = mforms.newButton() #self.abort.set_text("Abort") hbox = mforms.Box(True) hbox.set_spacing(8) #hbox.add(self.abort, False, True) hbox.add_end(self.ok, False, True) box.add_end(hbox, False, True) self.set_content(box) self.set_size(800, 600) self.center() self.show() self.ok.set_enabled(False) self.panel.start(file, default_schema, default_charset)
def __init__(self, editor, schema): mforms.Box.__init__(self, False) self.set_managed() self.set_release_on_add() self.editor = editor self._schema = schema self.table = mforms.newTable() self.table.set_row_count(7) self.table.set_column_count(2) self.table.set_row_spacing(8) self.table.set_column_spacing(8) def make_title(t): l = mforms.newLabel(t) l.set_style(mforms.BoldStyle) return l self.panel_header_box = mforms.newBox(True) self.panel_header_box.set_padding(10) self.panel_header_box.add(make_panel_header("db.Schema.32x32.png", self.editor.connection.name, "%s" % (schema)), False, False) self.add(self.panel_header_box,False, False) self.table.add(make_title("Schema Details"), 0, 2, 0, 1, mforms.HFillFlag) self.table.add(mforms.newLabel("Default collation:"), 0, 1, 3, 4, mforms.HFillFlag) self.col_default_collation_name = mforms.newLabel("") self.col_default_collation_name.set_style(mforms.BoldStyle) self.table.add(self.col_default_collation_name, 1, 2, 3, 4, mforms.HFillFlag|mforms.HExpandFlag) self.table.add(mforms.newLabel("Default characterset:"), 0, 1, 4, 5, mforms.HFillFlag) self.col_default_character_set_name = mforms.newLabel("") self.col_default_character_set_name.set_style(mforms.BoldStyle) self.table.add(self.col_default_character_set_name, 1, 2, 4, 5, mforms.HFillFlag|mforms.HExpandFlag) self.table.add(mforms.newLabel("Table count:"), 0, 1, 5, 6, mforms.HFillFlag) self.table_count = mforms.newLabel("") self.table_count.set_style(mforms.BoldStyle) self.table.add(self.table_count, 1, 2, 5, 6, mforms.HFillFlag|mforms.HExpandFlag) self.table.add(mforms.newLabel("Database size (rough estimate):"), 0, 1, 6, 7, mforms.HFillFlag) self.database_size = mforms.newLabel("") self.database_size.set_style(mforms.BoldStyle) self.table.add(self.database_size, 1, 2, 6, 7, mforms.HFillFlag|mforms.HExpandFlag) tbox = mforms.Box(False) tbox.set_spacing(15) tbox.set_padding(15) tbox.add(self.table, True, True) self.add(tbox, False, False)
def __init__(self, types_to_display, database_objects, ui_settings={}): super(DatabaseObjectSelector, self).__init__(False) self.database_objects = database_objects self.supported_object_types = types_to_display self.ui_settings = { 'tables': { 'icon': 'db.Table.many.32x32.png', 'small_icon': 'db.Table.16x16.png', 'group_label': 'Migrate Table objects', 'group_selected': True, 'status_text': '%(total)d total, %(selected)d selected', 'show_details': False, }, 'views': { 'icon': 'db.View.many.32x32.png', 'small_icon': 'db.View.16x16.png', 'group_label': 'Migrate View objects', 'group_selected': True, 'status_text': '%(total)d total, %(selected)d selected', 'show_details': False, }, 'routines': { 'icon': 'db.Routine.many.32x32.png', 'small_icon': 'db.Routine.16x16.png', 'group_label': 'Migrate Routine objects', 'group_selected': True, 'status_text': '%(total)d total, %(selected)d selected', 'show_details': False, }, 'routineGroups': { 'icon': 'db.RoutineGroup.48x48.png', 'small_icon': 'db.RoutineGroup.16x16.png', 'group_label': 'Migrate Routine Group/Package objects', 'group_selected': True, 'status_text': '%(total)d total, %(selected)d selected', 'show_details': False, }, 'synonyms': { 'icon': 'grt_object.png', 'small_icon': 'grt_object.png', 'group_label': 'Migrate Synonym objects', 'group_selected': True, 'status_text': '%(total)d total, %(selected)d selected', 'show_details': False, }, 'structuredTypes': { 'icon': 'grt_object.png', 'small_icon': 'grt_object.png', 'group_label': 'Migrate Structured Type objects', 'group_selected': True, 'status_text': '%(total)d total, %(selected)d selected', 'show_details': False, }, 'sequences': { 'icon': 'grt_object.png', 'small_icon': 'grt_object.png', 'group_label': 'Migrate Sequence objects', 'group_selected': True, 'status_text': '%(total)d total, %(selected)d selected', 'show_details': False, }, } # Update the ui settings dict with the custom settings supplied by the user (if any): if isinstance(ui_settings, dict): for key, value in list(ui_settings.items()): if key not in self.ui_settings or not isinstance(value, dict): continue self.ui_settings[key].update(value) # Create UI: self.set_padding(8) self.set_spacing(8) self.ui = {} for group in self.supported_object_types: if group not in self.database_objects or group not in self.ui_settings: continue self.ui[group] = {} group_objects = self.database_objects[group] group_panel = mforms.newPanel(mforms.BorderedPanel) group_box = mforms.newBox(False) group_box.set_padding(8) group_box.set_spacing(8) header_box = mforms.Box(True) header_box.set_spacing(8) icon = mforms.newImageBox() icon.set_image(self.ui_settings[group]['icon']) header_box.add(icon, False, True) text_box = mforms.Box(False) group_selector = mforms.newCheckBox() group_selector.set_text(self.ui_settings[group]['group_label']) group_selector.set_active( bool(self.ui_settings[group]['group_selected'])) group_selector.add_clicked_callback( functools.partial(self.group_checkbox_clicked, group=group)) text_box.add(group_selector, False, True) info_label = mforms.newLabel( self.ui_settings[group]['status_text'] % { 'total': len(group_objects), 'selected': len(group_objects) if self.ui_settings[group]['group_selected'] else 0 }) info_label.set_style(mforms.SmallHelpTextStyle) text_box.add(info_label, False, True) header_box.add(text_box, False, True) show_details = self.ui_settings[group]['show_details'] self.ui_settings[group]['_showing_details'] = show_details filter_button = mforms.newButton() filter_button.set_text( 'Hide Selection' if show_details else 'Show Selection') filter_button.set_enabled( bool(self.ui_settings[group]['group_selected'])) filter_button.add_clicked_callback( functools.partial(self.filter_button_clicked, group=group)) header_box.add_end(filter_button, False, True) group_box.add(header_box, False, True) # The invisible stuff: if len(group_objects) > 0: box = mforms.newBox(True) search_entry = mforms.newTextEntry(mforms.SearchEntry) search_entry.set_name("Search Entry") search_entry.set_placeholder_text( "Filter objects (wildcards chars * and ? are allowed)") search_entry.add_changed_callback( functools.partial(self.search_entry_changed, group=group)) box.add(search_entry, False, True) group_box.add(box, True, True) search_entry.set_size(350, -1) filter_container = mforms.newBox(True) filter_container.set_spacing(8) available_list = mforms.newTreeView(mforms.TreeFlatList) available_list.set_name("Available List") available_list.add_column(mforms.IconColumnType, 'Available Objects', 300, False) available_list.end_columns() available_list.set_selection_mode(mforms.TreeSelectMultiple) available_list.set_allow_sorting(False) filter_container.add(available_list, True, True) control_box = mforms.newBox(False) control_box.set_padding(0, 30, 0, 30) control_box.set_spacing(4) add_button = mforms.newButton() add_button.set_text('>') add_button.enable_internal_padding(False) add_button.add_clicked_callback( functools.partial(self.move_button_clicked, group=group, operation='add')) add_button.set_size(90, 30) control_box.add(add_button, False) remove_button = mforms.newButton() remove_button.set_text('<') remove_button.enable_internal_padding(False) remove_button.add_clicked_callback( functools.partial(self.move_button_clicked, group=group, operation='remove')) remove_button.set_size(90, 30) control_box.add(remove_button, False, True) add_all_button = mforms.newButton() add_all_button.set_text('>>') add_all_button.enable_internal_padding(False) add_all_button.add_clicked_callback( functools.partial(self.move_button_clicked, group=group, operation='add_all')) add_all_button.set_size(90, 30) control_box.add(add_all_button, False, True) remove_all_button = mforms.newButton() remove_all_button.set_text('<<') remove_all_button.enable_internal_padding(False) remove_all_button.add_clicked_callback( functools.partial(self.move_button_clicked, group=group, operation='remove_all')) remove_all_button.set_size(90, 30) control_box.add(remove_all_button, False) filter_container.add(control_box, False, True) selected_list = mforms.newTreeView(mforms.TreeFlatList) selected_list.set_name("Selected List") selected_list.add_column(mforms.IconColumnType, 'Objects to Migrate', 300, False) selected_list.end_columns() selected_list.set_selection_mode(mforms.TreeSelectMultiple) selected_list.set_allow_sorting(False) for item in sorted(group_objects): node = selected_list.add_node() node.set_icon_path(0, self.ui_settings[group]['small_icon']) node.set_string(0, item) filter_container.add(selected_list, True, True) group_box.add(filter_container, True, True) filter_container.show(bool(show_details)) self.ui[group].update({ 'filter_container': filter_container, 'available_list': available_list, 'selected_list': selected_list, 'search_entry': search_entry, }) else: # Empty object list filter_button.set_enabled(False) self.ui[group].update({ 'icon': icon, 'group_selector': group_selector, 'group_panel': group_panel, 'info_label': info_label, 'filter_button': filter_button, 'all_objects': set(group_objects), 'has_elements': bool(len(group_objects)), 'available': set(), 'selected': set(group_objects), 'objects_passing_filter': set(group_objects), }) group_panel.add(group_box) self.add(group_panel, False, True)
def __init__(self, editor): mforms.Form.__init__(self, mforms.Form.main_form(), mforms.FormDialogFrame) self.editor = editor box = mforms.Box(False) box.set_padding(12) box.set_spacing(8) box.add( mforms.newLabel( "Preview the first lines of the script below and click [Run] to start executing.\nNote: the preview below may display non-ASCII characters incorrectly, even if the MySQL server can treat them correctly." ), False, True) self.file_info = mforms.newLabel("") box.add(self.file_info, False, True) self.text = mforms.newCodeEditor(None) self.text.set_language(mforms.LanguageMySQL) box.add(self.text, True, True) table = mforms.newTable() table.set_padding(20) table.set_row_count(2) table.set_column_count(3) table.set_row_spacing(8) table.set_column_spacing(4) table.add(mforms.newLabel("Default Schema Name:"), 0, 1, 0, 1, 0) self.schema = mforms.newSelector(mforms.SelectorCombobox) table.add(self.schema, 1, 2, 0, 1, mforms.HFillFlag | mforms.HExpandFlag) help = mforms.newLabel( "Schema to be used unless explicitly specified in the script.\nLeave blank if the script already specified it,\npick a schema from the drop down or type a name to\ncreate a new one." ) help.set_style(mforms.SmallHelpTextStyle) table.add(help, 2, 3, 0, 1, mforms.HFillFlag) table.add(mforms.newLabel("Default Character Set:"), 0, 1, 1, 2, 0) self.charset = mforms.newSelector() self.charset.add_changed_callback(self.update_preview) l = [""] for ch in grt.root.wb.rdbmsMgmt.rdbms[0].characterSets: l.append(ch.name) self.charset.add_items(sorted(l)) table.add(self.charset, 1, 2, 1, 2, mforms.HFillFlag | mforms.HExpandFlag) help = mforms.newLabel( "Default character set to use when executing the script,\nunless specified in the script." ) help.set_style(mforms.SmallHelpTextStyle) table.add(help, 2, 3, 1, 2, mforms.HFillFlag) box.add(table, False, True) self.ok = mforms.newButton() self.ok.set_text("Run") self.cancel = mforms.newButton() self.cancel.set_text("Cancel") hbox = mforms.Box(True) hbox.set_spacing(8) mforms.Utilities.add_end_ok_cancel_buttons(hbox, self.ok, self.cancel) box.add_end(hbox, False, True) self.set_content(box)