class QuadCavDictSelection_Panel (JPanel): def __init__(self,transverse_twiss_analysis_Controller): self.transverse_twiss_analysis_Controller = transverse_twiss_analysis_Controller self.setLayout(BorderLayout()) #-----------dict table panel etched_border = BorderFactory.createEtchedBorder() border = BorderFactory.createTitledBorder(etched_border,"Quad and Cavities Amp.&Phases Sets") self.setBorder(border) self.quad_cav_dict_table_model = QuadCavDict_Table_Model(self.transverse_twiss_analysis_Controller.accStatesKeeper) self.dict_table = JTable(self.quad_cav_dict_table_model) self.dict_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.dict_table.setFillsViewportHeight(true) self.dict_table.setPreferredScrollableViewportSize(Dimension(120,100)) self.dict_table.getSelectionModel().addListSelectionListener(QuadCavDict_Table_Selection_Listener(self.transverse_twiss_analysis_Controller)) #--------buttons panel button_panel = JPanel(BorderLayout()) self.gaussButton = JRadioButton("Use Ext. Gauss Fit") self.custom_gaussButton = JRadioButton("Use Gauss Fit") self.custom_rmsButton = JRadioButton("Use RMS") button_group = ButtonGroup() button_group.add(self.gaussButton) button_group.add(self.custom_gaussButton) button_group.add(self.custom_rmsButton) button_group.clearSelection() self.gaussButton.setSelected(true) button_panel0 = JPanel(FlowLayout(FlowLayout.LEFT,2,2)) button_panel0.add(self.gaussButton) button_panel1 = JPanel(FlowLayout(FlowLayout.LEFT,2,2)) button_panel1.add(self.custom_gaussButton) button_panel2 = JPanel(FlowLayout(FlowLayout.LEFT,2,2)) button_panel2.add(self.custom_rmsButton) button_panel012 = JPanel(GridLayout(3,1)) button_panel012.add(button_panel0) button_panel012.add(button_panel1) button_panel012.add(button_panel2) #-------new buttons----- button_bottom_panel = JPanel(FlowLayout(FlowLayout.LEFT,2,2)) button_bottom_panel0 = JPanel(GridLayout(3,1,2,2)) dump_quad_fields_button = JButton("Dump Quad Fields to ASCII") dump_quad_fields_button.addActionListener(Dump_Quad_Fields_Button_Listener(self.transverse_twiss_analysis_Controller)) button_bottom_panel0.add(dump_quad_fields_button) dump_cav_amps_phases_button = JButton("Dump. Cav Amps. Phases to ASCII") dump_cav_amps_phases_button.addActionListener(Dump_Cav_Amps_Phases_Button_Listener(self.transverse_twiss_analysis_Controller)) button_bottom_panel0.add(dump_cav_amps_phases_button) read_cav_amps_phases_button = JButton("Read Cav Amps. Phases from ASCII") read_cav_amps_phases_button.addActionListener(Read_Cav_Amps_Phases_Button_Listener(self.transverse_twiss_analysis_Controller)) button_bottom_panel0.add(read_cav_amps_phases_button) button_bottom_panel.add(button_bottom_panel0) #----- final knobs panel button_panel.add(button_panel012,BorderLayout.NORTH) button_panel.add(button_bottom_panel,BorderLayout.SOUTH) self.gaussButton.addActionListener(FitParam_Buttons_Listener(self.transverse_twiss_analysis_Controller,0)) self.custom_gaussButton.addActionListener(FitParam_Buttons_Listener(self.transverse_twiss_analysis_Controller,1)) self.custom_rmsButton.addActionListener(FitParam_Buttons_Listener(self.transverse_twiss_analysis_Controller,2)) #---------------------------------------------------------- self.add(JScrollPane(self.dict_table), BorderLayout.WEST) self.add(button_panel, BorderLayout.CENTER) def getMainPanel(self): return self
class SCL_Long_TuneUp_PhaseScan_Controller: def __init__(self,scl_long_tuneup_controller): #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers self.scl_long_tuneup_controller = scl_long_tuneup_controller self.main_panel = JPanel(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() #------top params panel----------------------- top_params_panel = JPanel(BorderLayout()) self.set_phase_shift_panel = SetPhaseShiftAndTimeStep_Panel(self.scl_long_tuneup_controller) self.start_stop_scan_panel = StartStopPhaseScan_Panel(self.scl_long_tuneup_controller) top_params_panel.add(self.set_phase_shift_panel,BorderLayout.NORTH) top_params_panel.add(self.start_stop_scan_panel,BorderLayout.SOUTH) #------cavities scan table panel -------- cavs_scan_panel = JPanel(BorderLayout()) self.cavs_table = JTable(Cavs_PhaseScan_Table_Model(self.scl_long_tuneup_controller)) self.cavs_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) self.cavs_table.setFillsViewportHeight(true) self.cavs_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller)) self.bpms_table_model = PhaseScan_BPMs_Table_Model(self.scl_long_tuneup_controller) self.bpms_table = JTable(self.bpms_table_model) self.bpms_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) self.bpms_table.setFillsViewportHeight(true) self.bpms_table.getSelectionModel().addListSelectionListener(BPMs_Table_Selection_Listener(self.scl_long_tuneup_controller)) self.bpms_table.setPreferredScrollableViewportSize(Dimension(200,300)) scrl_panel0 = JScrollPane(self.cavs_table) scrl_panel0.setBorder(etched_border) scrl_panel1 = JScrollPane(self.bpms_table) self.bpm_table_border = BorderFactory.createTitledBorder(etched_border,"Cavity") scrl_panel1.setBorder(self.bpm_table_border) cavs_scan_panel.add(scrl_panel0,BorderLayout.CENTER) cavs_scan_panel.add(scrl_panel1,BorderLayout.EAST) self.bpm_table_panel = scrl_panel1 #---------- graph panels -------------------------- self.bpm_phaseDiff_graph_panel = BPM_PhaseDiff_Graph_Panel(self.scl_long_tuneup_controller) self.bpm_phase_and_amp_graph_panel = BPMs_Amp_Phase_Graphs_Panel(self.scl_long_tuneup_controller) grap_panel = JPanel(GridLayout(1,2)) grap_panel.add(self.bpm_phaseDiff_graph_panel) grap_panel.add(self.bpm_phase_and_amp_graph_panel) #--------center panel = graphs + tables------------- center_panel = JPanel(GridLayout(2,1)) center_panel.add(cavs_scan_panel) center_panel.add(grap_panel) #-------- post-scan filtering panel bottom_panel = JPanel(BorderLayout()) self.post_scan_panel = PostPhaseScanActions_Panel(self.scl_long_tuneup_controller) bottom_panel.add(self.post_scan_panel,BorderLayout.WEST) #-------------------------------------------------- self.main_panel.add(top_params_panel,BorderLayout.NORTH) self.main_panel.add(bottom_panel,BorderLayout.SOUTH) self.main_panel.add(center_panel,BorderLayout.CENTER) #------scan state self.scan_state_controller = ScanStateController() def getMainPanel(self): return self.main_panel
def done(self): table = JTable(methodTableModel( self.data, ['Method', 'Description / Abstract'], ), font=monoFont, autoResizeMode=JTable.AUTO_RESIZE_LAST_COLUMN, selectionMode=ListSelectionModel.SINGLE_SELECTION) table.getSelectionModel().addListSelectionListener( cellSelector(table, self.WASobj)) table.setDefaultRenderer(String, methRenderer()) table.getTableHeader().setReorderingAllowed(0) self.tPanes.extend(self.getTableInfo(table)) self.splitPane.setBottomComponent(JScrollPane(table))
class SCL_Long_TuneUp_Rescale_Controller: def __init__(self,scl_long_tuneup_controller): #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers self.scl_long_tuneup_controller = scl_long_tuneup_controller self.main_panel = JTabbedPane() self.scl_long_tuneup_operations_rescale_controller = SCL_Long_TuneUp_Operations_Rescale_Controller(scl_long_tuneup_controller) self.operations_panel = self.scl_long_tuneup_operations_rescale_controller.getMainPanel() self.expert_panel = JPanel(BorderLayout()) self.main_panel.add("Operations Re-scale Panel",self.operations_panel) self.main_panel.add("Expert Re-scale Panel",self.expert_panel) #----etched border etched_border = BorderFactory.createEtchedBorder() #------top params panel----------------------- top_panel = JPanel(BorderLayout()) self.bpms_phase_shift_panel = BPMs_Phase_Shift_Panel(self.scl_long_tuneup_controller) self.init_amp_phases_panel = Init_New_Amps_Phases_Panel(self.scl_long_tuneup_controller) self.new_amp_phases_to_epics_panel = NEW_Amp_and_Phases_to_EPICS_Panel(self.scl_long_tuneup_controller) top_panel.add(self.bpms_phase_shift_panel,BorderLayout.NORTH) top_panel.add(self.init_amp_phases_panel,BorderLayout.CENTER) top_panel.add(self.new_amp_phases_to_epics_panel,BorderLayout.SOUTH) #------cavities table panel -------- cavs_rescale_panel = JPanel(BorderLayout()) txt = "Cavities' Prameters. New Amp and Avg. Gap Phases can be changed manually." rescale_table_border = BorderFactory.createTitledBorder(etched_border,txt) cavs_rescale_panel.setBorder(rescale_table_border) self.cavs_rescale_table = JTable(Cavs_Rescale_Table_Model(self.scl_long_tuneup_controller)) self.cavs_rescale_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) self.cavs_rescale_table.setFillsViewportHeight(true) self.cavs_rescale_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller)) scrl_panel0 = JScrollPane(self.cavs_rescale_table) cavs_rescale_panel.add(scrl_panel0,BorderLayout.CENTER) center_panel = JPanel(BorderLayout()) center_panel.add(cavs_rescale_panel,BorderLayout.CENTER) #-------- post-rescale actions panel bottom_panel = JPanel(BorderLayout()) #bottom_panel.add(self.post_rescale_panel,BorderLayout.WEST) #-------------------------------------------------- self.expert_panel.add(top_panel,BorderLayout.NORTH) self.expert_panel.add(center_panel,BorderLayout.CENTER) self.expert_panel.add(bottom_panel,BorderLayout.SOUTH) #----- model for tracking self.scl_tracker_model = SCL_RfGaps_Fitter_Tracker_Model(self.scl_long_tuneup_controller) def getMainPanel(self): return self.main_panel def updateTables(self): self.cavs_rescale_table.getModel().fireTableDataChanged()
def create_scanner_table(self, scanner_pane, issue_name, issue_param): scanner_table_model = self.get_scanner_table_model( issue_name, issue_param) scanner_table = JTable(scanner_table_model) scanner_table.getColumnModel().getColumn(0).setMaxWidth(10) scanner_table.putClientProperty("terminateEditOnFocusLost", True) scanner_table_listener = ScannerTableListener(self, scanner_table, issue_name, issue_param) scanner_table_model.addTableModelListener(scanner_table_listener) scanner_table_list_listener = IssueListener(self, scanner_table, scanner_pane, issue_name, issue_param) scanner_table.getSelectionModel().addListSelectionListener( scanner_table_list_listener) return scanner_table
class SCL_Long_TuneUp_Rescale_Controller: def __init__(self,scl_long_tuneup_controller): #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers self.scl_long_tuneup_controller = scl_long_tuneup_controller self.main_panel = JPanel(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() #------top params panel----------------------- top_panel = JPanel(BorderLayout()) self.bpms_phase_shift_panel = BPMs_Phase_Shift_Panel(self.scl_long_tuneup_controller) self.init_amp_phases_panel = Init_New_Amps_Phases_Panel(self.scl_long_tuneup_controller) self.new_amp_phases_to_epics_panel = NEW_Amp_and_Phases_to_EPICS_Panel(self.scl_long_tuneup_controller) top_panel.add(self.bpms_phase_shift_panel,BorderLayout.NORTH) top_panel.add(self.init_amp_phases_panel,BorderLayout.CENTER) top_panel.add(self.new_amp_phases_to_epics_panel,BorderLayout.SOUTH) #------cavities table panel -------- cavs_rescale_panel = JPanel(BorderLayout()) txt = "Cavities' Prameters. New Amp and Avg. Gap Phases can be changed manually." rescale_table_border = BorderFactory.createTitledBorder(etched_border,txt) cavs_rescale_panel.setBorder(rescale_table_border) self.cavs_rescale_table = JTable(Cavs_Rescale_Table_Model(self.scl_long_tuneup_controller)) self.cavs_rescale_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) self.cavs_rescale_table.setFillsViewportHeight(true) self.cavs_rescale_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller)) scrl_panel0 = JScrollPane(self.cavs_rescale_table) cavs_rescale_panel.add(scrl_panel0,BorderLayout.CENTER) center_panel = JPanel(BorderLayout()) center_panel.add(cavs_rescale_panel,BorderLayout.CENTER) #-------- post-rescale actions panel bottom_panel = JPanel(BorderLayout()) #bottom_panel.add(self.post_rescale_panel,BorderLayout.WEST) #-------------------------------------------------- self.main_panel.add(top_panel,BorderLayout.NORTH) self.main_panel.add(center_panel,BorderLayout.CENTER) self.main_panel.add(bottom_panel,BorderLayout.SOUTH) #----- model for tracking self.scl_tracker_model = SCL_RfGaps_Fitter_Tracker_Model(self.scl_long_tuneup_controller) def getMainPanel(self): return self.main_panel def updateTables(self): self.cavs_rescale_table.getModel().fireTableDataChanged()
class SCL_Long_TuneUp_PhaseAnalysis_Controller: def __init__(self,scl_long_tuneup_controller): #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers self.scl_long_tuneup_controller = scl_long_tuneup_controller self.main_panel = JPanel(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() #------top params panel----------------------- top_params_panel = JPanel(BorderLayout()) self.start_stop_analysis_panel = StartStopPhaseAnalysis_Panel(self.scl_long_tuneup_controller) top_params_panel.add(self.start_stop_analysis_panel,BorderLayout.NORTH) #------cavities scan table panel -------- cavs_scan_panel = JPanel(BorderLayout()) self.cavs_table = JTable(Cavs_PhaseAnalysis_Table_Model(self.scl_long_tuneup_controller)) self.cavs_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) self.cavs_table.setFillsViewportHeight(true) self.cavs_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller)) scrl_panel0 = JScrollPane(self.cavs_table) scrl_panel0.setBorder(etched_border) cavs_scan_panel.add(scrl_panel0,BorderLayout.CENTER) #---------- graph panels -------------------------- self.cav_energy_out_graph_panel = Cav_Energy_Out_Graph_Panel(self.scl_long_tuneup_controller) graph_panel = JPanel(GridLayout(1,1)) graph_panel.add(self.cav_energy_out_graph_panel) #--------center panel = graphs + tables------------- center_panel = JPanel(GridLayout(2,1)) center_panel.add(cavs_scan_panel) center_panel.add(graph_panel) #-------- post-scan filtering panel bottom_panel = JPanel(BorderLayout()) self.post_analysis_panel = PostPhaseAnalysisActions_Panel(self.scl_long_tuneup_controller) bottom_panel.add(self.post_analysis_panel,BorderLayout.WEST) #-------------------------------------------------- self.main_panel.add(top_params_panel,BorderLayout.NORTH) self.main_panel.add(bottom_panel,BorderLayout.SOUTH) self.main_panel.add(center_panel,BorderLayout.CENTER) #------scan state self.analysis_state_controller = AnalysisStateController() self.scl_one_cavity_tracker_model = SCL_One_Cavity_Tracker_Model(scl_long_tuneup_controller) def getMainPanel(self): return self.main_panel
def create_scanner_pane(self, scanner_pane, issue_name, issue_param): scanner_issues = self.get_scanner_issues() request_table_pane = scanner_pane.getTopComponent() scanner_table_model = ScannerTableModel() scanner_table_model.addColumn("Checked") scanner_table_model.addColumn("Host") scanner_table_model.addColumn("Path") # Search all issues for the correct issue. Once found, add it into # the scanner table model to be showed in the UI. for scanner_issue in scanner_issues: is_same_name = scanner_issue.getIssueName() == issue_name is_same_param = scanner_issue.getParameter() == issue_param is_same_issue = is_same_name and is_same_param if is_same_issue: scanner_table_model.addRow([ False, scanner_issue.getHttpService().getHost(), scanner_issue.getUrl() ]) scanner_table = JTable(scanner_table_model) scanner_table.getColumnModel().getColumn(0).setCellEditor( DefaultCellEditor(JCheckBox())) scanner_table.putClientProperty("terminateEditOnFocusLost", True) scanner_table_listener = ScannerTableListener(self, scanner_table, issue_name, issue_param) scanner_table_model.addTableModelListener(scanner_table_listener) scanner_table_list_listener = IssueListener(self, scanner_table, scanner_pane, issue_name, issue_param) scanner_table.getSelectionModel().addListSelectionListener( scanner_table_list_listener) self.set_scanner_table(scanner_pane, scanner_table) request_table_pane.getViewport().setView(scanner_table) request_table_pane.revalidate() request_table_pane.repaint()
class Magnet_and_BPM_Panel(JPanel): def __init__(self,mebt_main_orbit_diff_cntrl): self.mebt_main_orbit_diff_cntrl = mebt_main_orbit_diff_cntrl self.setLayout(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() quad_titled_border = BorderFactory.createTitledBorder(etched_border,"Quads") dc_titled_border = BorderFactory.createTitledBorder(etched_border,"Dipole Correctors") bpm_titled_border = BorderFactory.createTitledBorder(etched_border,"BPMs") #------------------------------------------- quad_panel = JPanel(BorderLayout()) dc_panel = JPanel(BorderLayout()) bpm_panel = JPanel(BorderLayout()) quad_panel.setBorder(quad_titled_border) dc_panel.setBorder(dc_titled_border) bpm_panel.setBorder(bpm_titled_border) self.quad_table = JTable(Magnet_Table_Model(self.mebt_main_orbit_diff_cntrl,self.mebt_main_orbit_diff_cntrl.quad_wrappers)) self.dc_table = JTable(Magnet_Table_Model(self.mebt_main_orbit_diff_cntrl,self.mebt_main_orbit_diff_cntrl.dc_wrappers)) self.quad_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.dc_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.bpm_table = JTable(BPM_Table_Model(self.mebt_main_orbit_diff_cntrl)) self.bpm_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) quad_panel.add(JScrollPane(self.quad_table),BorderLayout.CENTER) dc_panel.add(JScrollPane(self.dc_table),BorderLayout.CENTER) bpm_panel.add(JScrollPane(self.bpm_table),BorderLayout.CENTER) #------------------------------------------- self.dc_table.getSelectionModel().addListSelectionListener(DCs_Table_Selection_Listener(self.mebt_main_orbit_diff_cntrl)) #------------------------------------------- read_magnets_button = JButton("Update Magnet Fields from EPICS") read_magnets_button.addActionListener(Read_Magnets_Button_Listener(self.mebt_main_orbit_diff_cntrl)) button_panel = JPanel(FlowLayout(FlowLayout.LEFT,3,3)) button_panel.add(read_magnets_button) #------------------------------------------- tables_panel = JPanel(GridLayout(3,1,3,3)) tables_panel.add(quad_panel) tables_panel.add(dc_panel) tables_panel.add(bpm_panel) self.add(tables_panel,BorderLayout.CENTER) self.add(button_panel,BorderLayout.SOUTH)
frame.setVisible(True) # React to a row being selected by showing the corresponding Motivation entry # in the textarea to the right, so that it's more readable class TableSelectionListener(ListSelectionListener): def valueChanged(self, event): if event.getValueIsAdjusting(): return # Must run later, when the event dispatch thread # has updated the selection def after(): rowIndex = table.getSelectionModel().getLeadSelectionIndex() textarea.setText(applicants[rowIndex][2]) SwingUtilities.invokeLater(after) table.getSelectionModel().addListSelectionListener(TableSelectionListener()) # Enable changing text size in the textarea class FontSizeAdjuster(KeyAdapter): def keyPressed(self, event): key = event.getKeyCode() if event.isControlDown() and event.isShiftDown(): # like in e.g. a web browser font = event.getSource().getFont() size = font.getSize2D() # floating-point: important for later use of deriveFont # Otherwise deriveFont with an integer alters the style instead. sign = 0 if KeyEvent.VK_MINUS == key: sign = -1 elif KeyEvent.VK_PLUS or KeyEvent.VK_EQUALS == key: sign = 1 if 0 != sign:
class WS_Data_Analysis_Controller: """ This controller manages the WS data analysis. Its panel is in the WS_LW_Acquisition_Controller panel. """ def __init__(self,ws_lw_acquisition_controller): self.ws_lw_acquisition_controller = ws_lw_acquisition_controller self.local_gauss_fitter = Local_Gauss_Fitter() self.main_panel = JPanel(BorderLayout()) self.ws_records_table_model = WS_Records_Table_Model() #----etched border etched_border = BorderFactory.createEtchedBorder() #---make the WS_Records_JTable + Graph Panel self.records_table = JTable(self.ws_records_table_model) self.records_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.records_table.setFillsViewportHeight(true) #----set up records_table columns width columnModel = self.records_table.getColumnModel() columnModel.getColumn(0).setPreferredWidth(30) columnModel.getColumn(1).setPreferredWidth(160) columnModel.getColumn(2).setPreferredWidth(40) columnModel.getColumn(3).setPreferredWidth(40) columnModel.getColumn(4).setPreferredWidth(80) columnModel.getColumn(5).setPreferredWidth(70) columnModel.getColumn(6).setPreferredWidth(70) #--------------------------------------------------- records_panel = JPanel(BorderLayout()) records_panel.add(JScrollPane(self.records_table), BorderLayout.CENTER) knobs_gauss_panel = JPanel(BorderLayout()) records_panel.add(knobs_gauss_panel, BorderLayout.SOUTH) records_panel.setBorder(etched_border) #---records knobs --------------------------------------------- records_knobs_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) guess_and_fit_button = JButton("Guess and Fit") analysis_all_button = JButton("G&F All") fit_button = JButton("Fit") fit_all_button = JButton("Fit All") send_to_twiss_button = JButton("Send to Twiss Analysis") records_knobs_panel.add(guess_and_fit_button) records_knobs_panel.add(analysis_all_button) records_knobs_panel.add(fit_button) records_knobs_panel.add(fit_all_button) records_knobs_panel.add(send_to_twiss_button) guess_and_fit_button.addActionListener(Guess_And_Fit_Listener(self.ws_lw_acquisition_controller)) fit_button.addActionListener(Fit_Listener(self.ws_lw_acquisition_controller)) fit_all_button.addActionListener(Fit_All_Listener(self.ws_lw_acquisition_controller)) analysis_all_button.addActionListener(Guess_And_Fit_All_Listener(self.ws_lw_acquisition_controller)) send_to_twiss_button.addActionListener(SendToAnalysis_Listener(self.ws_lw_acquisition_controller)) self.gauss_fit_param_panel = GaussFitDataPanel() knobs_gauss_panel.add(records_knobs_panel, BorderLayout.NORTH) knobs_gauss_panel.add(self.gauss_fit_param_panel, BorderLayout.SOUTH) #--------------------------------------------------------- self.record_analysis_panel = JPanel(BorderLayout()) border = BorderFactory.createTitledBorder(etched_border,"WS/LW Wave Form Analysis") self.record_analysis_panel.setBorder(border) self.record_analysis_panel.add(records_panel, BorderLayout.WEST) self.gpanel_WF = FunctionGraphsJPanel() self.gpanel_WF.setLegendButtonVisible(true) self.gpanel_WF.setChooseModeButtonVisible(true) self.gpanel_WF.setName("Profile") self.gpanel_WF.setAxisNames("pos, [mm]","Amp, [arb. units]") self.gpanel_WF.setBorder(etched_border) self.gpanel_WF.addVerticalLine(-1.0e+30,Color.red) self.gpanel_WF.addVerticalLine(+1.0e+30,Color.red) self.gpanel_WF.setVerLinesButtonVisible(true) self.gpanel_WF.addDraggedVerLinesListener(Position_Limits_Listener(self.ws_lw_acquisition_controller)) write_waveforms_to_ascii_button = JButton("Write Waveforms to ASCII File") write_waveforms_to_ascii_button.addActionListener(Write_Waveforms_to_ASCII_Listener(self.ws_lw_acquisition_controller)) below_graph_panel = JPanel(FlowLayout(FlowLayout.LEFT,5,5)) below_graph_panel.add(write_waveforms_to_ascii_button) graph_panel_left = JPanel(BorderLayout()) graph_panel_left.add(self.gpanel_WF, BorderLayout.CENTER) graph_panel_left.add(below_graph_panel, BorderLayout.SOUTH) self.record_analysis_panel.add(graph_panel_left, BorderLayout.CENTER) self.main_panel.add(self.record_analysis_panel, BorderLayout.CENTER) #---set up Listeners self.records_table.getSelectionModel().addListSelectionListener(WS_Record_Table_Selection_Listener(self.ws_lw_acquisition_controller)) def setDataToGraphPanel(self,ws_record): self.gpanel_WF.removeAllGraphData() self.gpanel_WF.addGraphData(ws_record.gd_wf) self.gpanel_WF.addGraphData(ws_record.gd_fit_wf)
class WS_LW_Acquisition_Controller: def __init__(self,linac_wizard_document): #--- linac_wizard_document the parent document for all controllers self.linac_wizard_document = linac_wizard_document self.main_panel = JPanel(GridLayout(2,1)) self.quadFieldDict = {} self.cavAmpPhaseDict = {} self.quads = [] self.cavs = [] self.ws_table_model = WS_Table_Model() #----make LW or WS nodes self.ws_nodes = [] #----etched border etched_border = BorderFactory.createEtchedBorder() #---make the WS_JTable + H&V Graphs Panels self.ws_table = JTable(self.ws_table_model) self.ws_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.ws_table.setFillsViewportHeight(true) ws_panel = JPanel(BorderLayout()) ws_panel.add(JScrollPane(self.ws_table), BorderLayout.CENTER) ws_knobs_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) ws_panel.add(ws_knobs_panel, BorderLayout.SOUTH) ws_panel.setBorder(etched_border) #---ws knobs --------------------------------------------- get_ws_data_button = JButton("Get WS/LW Data") switch_hv_button = JButton(" Switch H/V ") add_data_to_pool_button = JButton(" Add Data to Pool ") ws_knobs_panel.add(get_ws_data_button) ws_knobs_panel.add(switch_hv_button) ws_knobs_panel.add(add_data_to_pool_button) get_ws_data_button.addActionListener(WS_GET_Data_Listener(self)) switch_hv_button.addActionListener(Switch_HV_Listener(self)) add_data_to_pool_button.addActionListener(WS_Data_to_Pool_Listener(self)) #--------------------------------------------------------- ws_and_graphs_panel = JPanel(BorderLayout()) border = BorderFactory.createTitledBorder(etched_border,"WS/LW Raw Data Acquisition") ws_and_graphs_panel.setBorder(border) ws_and_graphs_panel.add(ws_panel, BorderLayout.WEST) graphs_panel = JPanel(GridLayout(1,2)) self.gpanel_horWF = FunctionGraphsJPanel() self.gpanel_verWF = FunctionGraphsJPanel() self.gpanel_horWF.setLegendButtonVisible(true) self.gpanel_horWF.setChooseModeButtonVisible(true) self.gpanel_verWF.setLegendButtonVisible(true) self.gpanel_verWF.setChooseModeButtonVisible(true) self.gpanel_horWF.setName("Horizontal Profiles") self.gpanel_horWF.setAxisNames("pos, [mm]","Amp, [arb. units]") self.gpanel_verWF.setName("Vertical Profiles") self.gpanel_verWF.setAxisNames("pos, [mm]","Amp, [arb. units]") self.gpanel_horWF.setBorder(etched_border) self.gpanel_verWF.setBorder(etched_border) graphs_panel.add(self.gpanel_horWF) graphs_panel.add(self.gpanel_verWF) ws_and_graphs_panel.add(graphs_panel, BorderLayout.CENTER) self.setDataToGraphPanels(-1) #------analysis sub-panel self.ws_data_analysis_controller = WS_Data_Analysis_Controller(self) #---put everything into the main_panel self.main_panel.add(ws_and_graphs_panel) self.main_panel.add(self.ws_data_analysis_controller.main_panel) #---set up Listeners self.ws_table.getSelectionModel().addListSelectionListener(WS_Table_Selection_Listener(self)) def setAccSeq(self,accSeq): self.ws_table_model.ws_table_element_arr = [] self.ws_nodes = [] if(accSeq == null): self.ws_table_model.fireTableDataChanged() return nodes = accSeq.filterNodesByStatus(accSeq.getAllNodesOfType(ProfileMonitor.s_strType),true) for node in nodes: self.ws_nodes.append(node) nodes = accSeq.filterNodesByStatus(accSeq.getAllNodesOfType(Marker.s_strType),true) for node in nodes: if(node.getId().find("LW") >= 0 and node.getId().find("SCL") >= 0): self.ws_nodes.append(node) for node in self.ws_nodes: self.ws_table_model.addWS_TableElement(WS_Table_Element(node)) self.makePVforWS() #ws_table_elements_arr = self.ws_table_model.getWS_TableElements() #for ws_table_element in ws_table_elements_arr: # ws_table_element.readPVData() #----update data and graphs self.ws_table_model.fireTableDataChanged() self.setDataToGraphPanels(-1) #------------set up the quad and cavities dictionaries self.quadFieldDict = {} self.quads = accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(Quadrupole.s_strType))) for quad in self.quads: self.quadFieldDict[quad] = quad.getDfltField() """ if(quad.isPermanent()): self.quadFieldDict[quad] = quad.getDfltField() else: self.quadFieldDict[quad] = quad.getFieldReadback() """ self.cavAmpPhaseDict = {} rf_gaps = accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType))) self.cavs = [] for rf_gap in rf_gaps: cav = rf_gap.getParent() if(cav not in self.cavs): self.cavs.append(cav) amp = cav.getDfltCavAmp() phase = cav.getDfltCavPhase() self.cavAmpPhaseDict[cav] = [amp,phase] def cleanOldWSdata(self): #----clean all data for analysis -- may be we want to keep them? ws_data_analysis_controller = self.ws_data_analysis_controller ws_data_analysis_controller.ws_records_table_model.ws_rec_table_element_arr = [] ws_data_analysis_controller.ws_records_table_model.fireTableDataChanged() tr_twiss_analysis_controller = self.linac_wizard_document.tr_twiss_analysis_controller accStatesKeeper = tr_twiss_analysis_controller.accStatesKeeper accStatesKeeper.clean() tr_twiss_analysis_controller.dict_panel.dict_table.getModel().fireTableDataChanged() def getFreshCopyQuadCavDict(self): """ Returns a copy of the fresh dictionaries [quadFieldDict,cavAmpPhaseDict] """ quadFieldDict = {} for quad in self.quads: if(quad.isPermanent()): self.quadFieldDict[quad] = quad.getDfltField() else: self.quadFieldDict[quad] = quad.getFieldReadback() quadFieldDict[quad] = self.quadFieldDict[quad] #print "debug quad=",quad.getId()," G=",self.quadFieldDict[quad] cavAmpPhaseDict = {} for cav in self.cavs: amp = cav.getDfltCavAmp() phase = cav.getDfltCavPhase() self.cavAmpPhaseDict[cav] = [amp,phase] cavAmpPhaseDict[cav] = [amp,phase] return [quadFieldDict,cavAmpPhaseDict] def getMainPanel(self): return self.main_panel def setDataToGraphPanels(self,index): self.gpanel_horWF.removeAllGraphData() self.gpanel_verWF.removeAllGraphData() ws_table_elements_arr = self.ws_table_model.getWS_TableElements() if(index < 0 or index >= len(ws_table_elements_arr)): return ws_table_element = ws_table_elements_arr[index] hor_record = ws_table_element.getRecords(WS_DIRECTION_HOR) ver_record = ws_table_element.getRecords(WS_DIRECTION_VER) self.gpanel_horWF.addGraphData(hor_record.gd_wf) self.gpanel_verWF.addGraphData(ver_record.gd_wf) def makePVforWS(self): ws_table_elements_arr = self.ws_table_model.getWS_TableElements() for ws_table_element in ws_table_elements_arr: ws_node = ws_table_element.ws if(ws_node.getId().find("WS") >= 0): pv_pos_wf_name = ws_node.getId()+":Hor_prof_pos" pv_wf_name = ws_node.getId()+":Hor_prof_sig" sigma_name = ws_node.getId()+":Hor_Sigma_gs" ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_HOR) pv_pos_wf_name = ws_node.getId()+":Ver_prof_pos" pv_wf_name = ws_node.getId()+":Ver_prof_sig" sigma_name = ws_node.getId()+":Ver_Sigma_gs" ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_VER) else: name = ws_node.getId().replace(":LW",":LW_")+":LASER_WIRE_axis" pv_pos_wf_name = name+"01_ScanPosArray" pv_wf_name = name+"01_Peak_Profile_WFM" sigma_name = name+"01_Peak_Info_Sigma" ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_HOR) pv_pos_wf_name = name+"02_ScanPosArray" pv_wf_name = name+"02_Peak_Profile_WFM" sigma_name = name+"02_Peak_Info_Sigma" ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_VER)
class SCL_Scan_Data_CleanUp_Controller: def __init__(self, scl_long_tuneup_controller): #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers self.scl_long_tuneup_controller = scl_long_tuneup_controller #----etched border etched_border = BorderFactory.createEtchedBorder() #----main panel self.main_panel = JPanel(BorderLayout()) #------top params panel----------------------- right_info_panel = JPanel(BorderLayout()) right_top_control_panel = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1)) analysis_button = JButton("Find BAD Points") analysis_button.addActionListener(Analyze_Data_Button_Listener(self)) right_top_control_panel.add(analysis_button) #------ maximal bpm phase error after the scan max_phase_err_lbl = JLabel("Max BPM Phase Err = ", JLabel.RIGHT) self.max_phase_err_text = DoubleInputTextField(10.0, DecimalFormat("##.#"), 5) right_top_control_panel.add(max_phase_err_lbl) right_top_control_panel.add(self.max_phase_err_text) #----------------------------------------------- right_bottom_control_panel = JPanel(BorderLayout()) right_bottom_control_panel0 = JPanel(BorderLayout()) right_bottom_control_panel1 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1)) right_bottom_control_panel.add(right_bottom_control_panel0, BorderLayout.NORTH) right_bottom_control_panel.add(right_bottom_control_panel1, BorderLayout.SOUTH) statistics_of_errors_lbl = JLabel("Statistics:", JLabel.RIGHT) self.statistics_of_errors_txt = JTextField() right_bottom_control_panel0.add(statistics_of_errors_lbl, BorderLayout.WEST) right_bottom_control_panel0.add(self.statistics_of_errors_txt, BorderLayout.CENTER) remove_worst_points_button = JButton("Remove Worst Points") remove_worst_points_button.addActionListener( CleanUp_Worst_Phase_Points_Data_Button_Listener(self)) remove_all_bad_bpms_button = JButton("Remove All Bad BPMs") remove_all_bad_bpms_button.addActionListener( CleanUp_All_Bad_BPMs_Button_Listener(self)) right_bottom_control_panel1.add(remove_worst_points_button) right_bottom_control_panel1.add(remove_all_bad_bpms_button) #----------------------------------------------- right_tables_panel = JPanel(GridLayout(1, 3)) right_info_panel.add(right_top_control_panel, BorderLayout.NORTH) right_info_panel.add(right_tables_panel, BorderLayout.CENTER) right_info_panel.add(right_bottom_control_panel, BorderLayout.SOUTH) self.main_panel.add(right_info_panel, BorderLayout.EAST) #------cavities scan table panel -------- self.bad_bpms_amp_phase_graphs_panel = Bad_BPMs_Amp_Phase_Graphs_Panel( self) self.main_panel.add(self.bad_bpms_amp_phase_graphs_panel, BorderLayout.CENTER) #------ let's make tables for a list of cavities, bpms, and bad points indexes self.cavs_with_bad_data_table_model = Cavs_with_Bad_PhaseScan_Table_Model( self) self.cavs_table = JTable(self.cavs_with_bad_data_table_model) self.cavs_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.cavs_table.setFillsViewportHeight(true) self.cavs_table.setPreferredScrollableViewportSize(Dimension(180, 300)) self.cavs_table.getSelectionModel().addListSelectionListener( Cavs_Table_Selection_Listener(self)) self.bpms_table_model = Bad_PhaseScan_BPMs_Table_Model(self) self.bpms_table = JTable(self.bpms_table_model) self.bpms_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.bpms_table.setFillsViewportHeight(true) self.bpms_table.getSelectionModel().addListSelectionListener( BPMs_Table_Selection_Listener(self)) self.bpms_table.setPreferredScrollableViewportSize(Dimension(180, 300)) self.points_table_model = Bad_Points_Table_Model(self) self.points_table = JTable(self.points_table_model) self.points_table.setFillsViewportHeight(true) self.points_table.setPreferredScrollableViewportSize( Dimension(180, 300)) #----- set scroll panes scrl_panel0 = JScrollPane(self.cavs_table) scrl_panel1 = JScrollPane(self.bpms_table) scrl_panel2 = JScrollPane(self.points_table) scrl_panel0.setBorder( BorderFactory.createTitledBorder(etched_border, "Cavs")) scrl_panel1.setBorder( BorderFactory.createTitledBorder(etched_border, "BPMs")) scrl_panel2.setBorder( BorderFactory.createTitledBorder(etched_border, "Bad Points")) right_tables_panel.setBorder(etched_border) right_tables_panel.add(scrl_panel0) right_tables_panel.add(scrl_panel1) right_tables_panel.add(scrl_panel2) #----- dictionary with the bad data self.cavs_to_bpm_dict[cav_wrapper] = [bpm_wrappers,bpms_to_points_dict] self.cavs_to_bpm_dict = {} #----- arrays with bad data for the tables self.cavs_with_bad_data_arr = [] self.bpms_arr = [] self.points_arr = [] def cleanUp_All_Bad_BPMs_Method(self): scl_long_tuneup_controller = self.scl_long_tuneup_controller cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:] #----- dictionary with the bad data cavs_to_bpm_dict = self.cavs_to_bpm_dict #----- let's go through all cavities to find the bad bpms for cav_wrapper in cav_wrappers: if (cav_wrapper.isGood and cav_wrapper.isMeasured): if (cavs_to_bpm_dict.has_key(cav_wrapper)): [bpm_wrappers, bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper] for bpm_wrapper_bad in bpm_wrappers: for bpm_ind in range(len(cav_wrapper.bpm_wrappers)): bpm_wrapper = cav_wrapper.bpm_wrappers[bpm_ind] if (bpm_wrapper_bad == bpm_wrapper): cav_wrapper.bpm_wrappers_useInAmpBPMs[ bpm_ind] = false cav_wrapper.bpm_wrappers_useInPhaseAnalysis[ bpm_ind] = false def cleanUp_Worst_Phase_Points_Data_Method(self): scl_long_tuneup_controller = self.scl_long_tuneup_controller cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:] #----- dictionary with the bad data cavs_to_bpm_dict = self.cavs_to_bpm_dict #----- let's go through all cavities to find the worst phase scan points #----- worst points means maximal number of bad bpms with it n_total_removed_points = 0 for cav_wrapper in cav_wrappers: if (cav_wrapper.isGood and cav_wrapper.isMeasured): if (cavs_to_bpm_dict.has_key(cav_wrapper)): [bpm_wrappers, bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper] #----- numb_of_points_dict[point_scan_ind] = [bpm1,...] numb_of_points_dict = {} for bpm_wrapper in bpm_wrappers: bad_points_arr = bpms_to_points_dict[bpm_wrapper] for [ind, x, y] in bad_points_arr: if (numb_of_points_dict.has_key(ind)): numb_of_points_dict[ind].append(bpm_wrapper) else: numb_of_points_dict[ind] = [ bpm_wrapper, ] max_bpms_ind = -1 max_numb_of_bpms = 0 for ind in numb_of_points_dict.keys(): n_bpms = len(numb_of_points_dict[ind]) if (n_bpms > max_numb_of_bpms): max_bpms_ind = ind if (max_bpms_ind >= 0): #---- the phase scan data with this index should be removed n_bpms = len(numb_of_points_dict[max_bpms_ind]) if (n_bpms > 1): n_total_removed_points += n_bpms gd = cav_wrapper.phaseDiffPlot gd.removePoint(max_bpms_ind) for bpm_wrapper in cav_wrapper.bpm_wrappers: (graphDataAmp, graphDataPhase ) = cav_wrapper.getAmpPhaseGraphs(bpm_wrapper) if (graphDataAmp != null): graphDataAmp.removePoint(max_bpms_ind) if (graphDataPhase != null): graphDataPhase.removePoint(max_bpms_ind) #print "debug cav=",cav_wrapper.alias," n bpms=",n_bpms #print "debug n_total_removed_points=",n_total_removed_points def analyze_Data_Method(self): scl_long_tuneup_controller = self.scl_long_tuneup_controller max_phase_diff0 = self.max_phase_err_text.getValue() cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:] #----- dictionary with the bad data self.cavs_to_bpm_dict = {} cavs_to_bpm_dict = self.cavs_to_bpm_dict #----- arrays with bad data for the tables self.cavs_with_bad_data_arr = [] self.bpms_arr = [] self.points_arr = [] #---- data analysis for bad points total_nPoints = 0 for cav_wrapper in cav_wrappers: if (cav_wrapper.isGood and cav_wrapper.isMeasured): bpm_wrapper0 = cav_wrapper.bpm_wrapper0 bpm_wrapper1 = cav_wrapper.bpm_wrapper1 pos0 = bpm_wrapper0.pos pos1 = bpm_wrapper1.pos phaseDiffPlot = cav_wrapper.phaseDiffPlot (graphDataAmp0, graphDataPhase0 ) = cav_wrapper.bpm_amp_phase_dict[bpm_wrapper0] if (phaseDiffPlot.getNumbOfPoints() == 0): continue for bpm_wrapper_ind in range(len(cav_wrapper.bpm_wrappers)): bpm_wrapper = cav_wrapper.bpm_wrappers[bpm_wrapper_ind] pos = bpm_wrapper.pos if (pos < pos0): continue pos_coeff = (pos - pos0) / (pos1 - pos0) max_phase_diff = max_phase_diff0 if (pos_coeff >= 1.0): max_phase_diff = pos_coeff * max_phase_diff0 if (cav_wrapper. bpm_wrappers_useInPhaseAnalysis[bpm_wrapper_ind]): (graphDataAmp, graphDataPhase ) = cav_wrapper.bpm_amp_phase_dict[bpm_wrapper] nPoints = phaseDiffPlot.getNumbOfPoints() bpm_phase_delta = graphDataPhase.getY( nPoints - 1) - graphDataPhase0.getY( nPoints - 1 ) - pos_coeff * phaseDiffPlot.getY(nPoints - 1) bad_points_arr = [] for ind in range(phaseDiffPlot.getNumbOfPoints()): total_nPoints += 1 y = graphDataPhase.getY( ind) - graphDataPhase0.getY( ind) - pos_coeff * phaseDiffPlot.getY( ind) - bpm_phase_delta y = makePhaseNear(y, 0.) if (abs(y) > max_phase_diff): bad_points_arr.append( [ind, graphDataPhase.getX(ind), y]) if (len(bad_points_arr) > 0): if (not cavs_to_bpm_dict.has_key(cav_wrapper)): cavs_to_bpm_dict[cav_wrapper] = [[], {}] [bpm_wrappers, bpms_to_points_dict ] = cavs_to_bpm_dict[cav_wrapper] bpm_wrappers.append(bpm_wrapper) bpms_to_points_dict[bpm_wrapper] = bad_points_arr for cav_wrapper in cav_wrappers: if (cavs_to_bpm_dict.has_key(cav_wrapper)): self.cavs_with_bad_data_arr.append(cav_wrapper) #-------------------------------------------------------------------- nCavs = 0 nBPMs = 0 nPoints = 0 for cav_wrapper in self.cavs_with_bad_data_arr: [bpm_wrappers, bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper] nCavs += 1 nBPMs += len(bpm_wrappers) for bpm_wrapper in bpm_wrappers: points_arr = bpms_to_points_dict[bpm_wrapper] nPoints += len(points_arr) st = "N Bad: Cavs= " + str(nCavs) + " BPMs= " + str( nBPMs) + " Phase Points=" + str(nPoints) + "/" + str( total_nPoints) self.statistics_of_errors_txt.setText(st) self.cavs_table.getModel().fireTableDataChanged() self.bpms_table.getModel().fireTableDataChanged() self.points_table.getModel().fireTableDataChanged() nCavs = len(self.cavs_with_bad_data_arr)
class Main_Loop_Controller: def __init__(self,top_document,accl): #--- top_document is a parent document for all controllers self.top_document = top_document self.main_panel = JPanel(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() #----main loop timer self.main_loop_timer = Main_Loop_Timer(self) #---- set up accSeq self.accSeq = null seq_names = ["MEBT","DTL1","DTL2","DTL3","DTL4","DTL5","DTL6","CCL1","CCL2","CCL3","CCL4"] lst = ArrayList() for seqName in seq_names: lst.add(accl.getSequence(seqName)) self.accSeq = AcceleratorSeqCombo("SEQUENCE", lst) rf_gaps = self.accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType))) self.cav_wrappers = [] cavs = [] count = 0 for rf_gap in rf_gaps: cav = rf_gap.getParent() pos = self.accSeq.getPosition(cav) if(cav not in cavs): #print "debug cav=",cav.getId()," count=",count cavs.append(cav) alias = "null" if(count > 3): alias = seq_names[count+1-4] else: alias = seq_names[0]+str(count+1) cav_llrf_name = "null" cav_pwr_pv_name = "nullPwr" if(count <= 3): cav_llrf_name = "MEBT_LLRF:FCM"+str(count+1) cav_pwr_pv_name = "MEBT_LLRF:Cav"+str(count+1)+":NetPwr" if(count > 3 and count < 10): cav_llrf_name = "DTL_LLRF:FCM"+str(count-3) cav_pwr_pv_name = "DTL_LLRF:Cav"+str(count-3)+":NetPwr" if(count > 9): cav_llrf_name = "CCL_LLRF:FCM"+str(count-9) cav_pwr_pv_name = "CCL_LLRF:Cav"+str(count-9)+":NetPwr" amp_pv_name = cav_llrf_name+":CtlAmpSet" phase_pv_name = cav_llrf_name+":CtlPhaseSet" self.cav_wrappers.append(Cavity_Wrapper(cav,pos,alias,amp_pv_name,phase_pv_name,cav_pwr_pv_name)) #print "debug ==================================" #print "debug cav=",cav.getId()," alias=",alias," amp_pv_name=",amp_pv_name," phase_pv_name=",phase_pv_name #print "debug cav_pwr_pv_name=",cav_pwr_pv_name #print "debug cav=",cav.getId()," pos =",pos," L=",cav.getLength() count += 1 #---- BPMs self.bpm_wrappers = [] bpms = self.accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(BPM.s_strType))) for bpm in bpms: pos = self.accSeq.getPosition(bpm) pos += 0.5*bpm.getBPMBucket().getLength()*bpm.getBPMBucket().getOrientation() bpm_wrapper = BPM_Wrapper(bpm,pos) #print "debug bpm=",bpm_wrapper.alias," pos =",pos self.bpm_wrappers.append(bpm_wrapper) #---- SCL first BPMs and Cavs lst = ArrayList() for seqName in ["SCLMed",]: lst.add(accl.getSequence(seqName)) self.scl_accSeq = AcceleratorSeqCombo("SCL_SEQUENCE", lst) bpms = self.scl_accSeq.getAllNodesWithQualifier((AndTypeQualifier().and((OrTypeQualifier()).or(BPM.s_strType))).andStatus(true)) bpms = bpms[:5] self.scl_bpm_wrappers = [] for bpm in bpms: pos = self.scl_accSeq.getPosition(bpm) + self.accSeq.getLength() pos += 0.5*bpm.getBPMBucket().getLength()*bpm.getBPMBucket().getOrientation() bpm_wrapper = BPM_Wrapper(bpm,pos) #print "debug bpm=",bpm_wrapper.alias," pos =",pos self.scl_bpm_wrappers.append(bpm_wrapper) rf_gaps = self.scl_accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType))) cavs = [] for rf_gap in rf_gaps: cav = rf_gap.getParent() if((cav not in cavs) and cav.getStatus()): cavs.append(cav) cavs = cavs[:9] self.scl_cav_wrappers = [] for cav in cavs: pos = self.scl_accSeq.getPosition(cav) + self.accSeq.getLength() alias = cav.getId().split(":")[1] amp_pv_name = "SCL_LLRF:"+alias.replace("Cav","FCM")+":CtlAmpSet" phase_pv_name = "SCL_LLRF:"+alias.replace("Cav","FCM")+":CtlPhaseSet" cav_pwr_pv_name = "SCL_LLRF:"+alias+":NetPwr" self.scl_cav_wrappers.append(Cavity_Wrapper(cav,pos,alias,amp_pv_name,phase_pv_name,cav_pwr_pv_name)) #print "debug ==================================" #print "debug cav=",cav.getId()," alias=",alias," amp_pv_name=",amp_pv_name," phase_pv_name=",phase_pv_name #print "debug cav_pwr_pv_name=",cav_pwr_pv_name #---- Panels setup #---- Auxiliaries setup self.loop_run_state = Loop_Run_State() self.loop_run_state.isRunning = false self.loop_run_state.shouldStop = false #--------------------------------------------- #----etched border etched_border = BorderFactory.createEtchedBorder() #---- Cavities' Controllers self.cav_controllers = [] self.cav_controllers.append(MEBT_Cavity_Controller(self,self.cav_wrappers[0])) self.cav_controllers.append(MEBT_Cavity_Controller(self,self.cav_wrappers[1])) self.cav_controllers.append(MEBT_Cavity_Controller(self,self.cav_wrappers[2])) self.cav_controllers.append(MEBT_Cavity_Controller(self,self.cav_wrappers[3])) #--------------------------------- self.cav_controllers.append(DTL1_Cavity_Controller(self,self.cav_wrappers[4])) self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[5])) self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[6])) self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[7])) self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[8])) self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[9])) #---------------------------------- self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[10])) self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[11])) self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[12])) self.cav_controllers.append(DTL_CCL_Cavity_Controller(self,self.cav_wrappers[13])) #------ cavity controllers customization -------------------- #------ MEBT Reb. 4 ------- self.cav_controllers[3].cav_amp_backward_steps_mult_text.setValue(8.0) #----- amplitudes limits self.cav_controllers[0].safe_relative_amp_down_text.setValue(50.) self.cav_controllers[1].safe_relative_amp_down_text.setValue(50.) self.cav_controllers[2].safe_relative_amp_down_text.setValue(50.) self.cav_controllers[3].safe_relative_amp_down_text.setValue(50.) #----- No PASTA Use for DTL2-6 and CCL4 self.cav_controllers[5].scan_main_panel.use_PASTA_RadioButton.setSelected(false) self.cav_controllers[6].scan_main_panel.use_PASTA_RadioButton.setSelected(false) self.cav_controllers[7].scan_main_panel.use_PASTA_RadioButton.setSelected(false) self.cav_controllers[8].scan_main_panel.use_PASTA_RadioButton.setSelected(false) self.cav_controllers[9].scan_main_panel.use_PASTA_RadioButton.setSelected(false) self.cav_controllers[13].scan_main_panel.use_PASTA_RadioButton.setSelected(false) #------ Phase corrections after Full scan for MEBT self.cav_controllers[0].guess_phase_shift_text.setValue(-10.0) self.cav_controllers[1].guess_phase_shift_text.setValue(-6.0) #------ Phase and amplitude corrections after Full scan for inner BPM self.cav_controllers[5].guess_phase_shift_text.setValue(-4.0) self.cav_controllers[5].guess_cav_amp_shift_text.setValue(-2.0) self.cav_controllers[6].guess_phase_shift_text.setValue(1.) self.cav_controllers[6].guess_cav_amp_shift_text.setValue(0.7) self.cav_controllers[8].guess_phase_shift_text.setValue(0.) self.cav_controllers[8].guess_cav_amp_shift_text.setValue(-0.7) self.cav_controllers[10].guess_phase_shift_text.setValue(0.) self.cav_controllers[10].guess_cav_amp_shift_text.setValue(-3.6) self.cav_controllers[11].guess_phase_shift_text.setValue(0.) self.cav_controllers[11].guess_cav_amp_shift_text.setValue(-3.7) #------ The BPMs for Full Scan and PASTA self.cav_controllers[0].cav_bpms_controller.work_bpm_index = 1 self.cav_controllers[1].cav_bpms_controller.work_bpm_index = 1 self.cav_controllers[5].cav_bpms_controller.pasta_bpm_0_index = 2 self.cav_controllers[5].cav_bpms_controller.pasta_bpm_1_index = 5 self.cav_controllers[6].cav_bpms_controller.pasta_bpm_0_index = 2 self.cav_controllers[6].cav_bpms_controller.pasta_bpm_1_index = 4 self.cav_controllers[7].cav_bpms_controller.pasta_bpm_0_index = 2 self.cav_controllers[7].cav_bpms_controller.pasta_bpm_1_index = 5 self.cav_controllers[8].cav_bpms_controller.pasta_bpm_0_index = 5 self.cav_controllers[8].cav_bpms_controller.pasta_bpm_1_index = 6 self.cav_controllers[9].cav_bpms_controller.pasta_bpm_0_index = 3 self.cav_controllers[9].cav_bpms_controller.pasta_bpm_1_index = 5 self.cav_controllers[10].cav_bpms_controller.pasta_bpm_0_index = 5 self.cav_controllers[10].cav_bpms_controller.pasta_bpm_1_index = 6 self.cav_controllers[11].cav_bpms_controller.pasta_bpm_0_index = 2 self.cav_controllers[11].cav_bpms_controller.pasta_bpm_1_index = 3 self.cav_controllers[12].cav_bpms_controller.pasta_bpm_0_index = 2 self.cav_controllers[12].cav_bpms_controller.pasta_bpm_1_index = 4 self.cav_controllers[13].cav_bpms_controller.pasta_bpm_0_index = 3 self.cav_controllers[13].cav_bpms_controller.pasta_bpm_1_index = 4 self.cav_controllers[11].cav_bpms_controller.sin_wave_bpm_index = 0 self.cav_controllers[12].cav_bpms_controller.sin_wave_bpm_index = 0 self.cav_controllers[13].cav_bpms_controller.sin_wave_bpm_index = 1 #-----Target power levels self.cav_controllers[4].cav_wrapper.net_pwr_goal = 378.0 self.cav_controllers[5].cav_wrapper.net_pwr_goal = 1208.0 self.cav_controllers[6].cav_wrapper.net_pwr_goal = 1294.0 self.cav_controllers[7].cav_wrapper.net_pwr_goal = 1416.0 self.cav_controllers[8].cav_wrapper.net_pwr_goal = 1454.0 self.cav_controllers[9].cav_wrapper.net_pwr_goal = 1414.0 self.cav_controllers[10].cav_wrapper.net_pwr_goal = 2531.0 self.cav_controllers[11].cav_wrapper.net_pwr_goal = 2984.0 self.cav_controllers[12].cav_wrapper.net_pwr_goal = 3018.0 self.cav_controllers[13].cav_wrapper.net_pwr_goal = 2856.0 #---------------------------------------------- left_panel = JPanel(BorderLayout()) self.tabbedPane = JTabbedPane() self.tabbedPane.add("Cavity",JPanel(BorderLayout())) self.tabbedPane.add("Parameters",JPanel(BorderLayout())) #-------------------------------------------------------- self.cav_table = JTable(Cavities_Table_Model(self)) self.cav_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) self.cav_table.setFillsViewportHeight(true) self.cav_table.setPreferredScrollableViewportSize(Dimension(500,240)) self.cav_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self)) scrl_cav_panel = JScrollPane(self.cav_table) scrl_cav_panel.setBorder(BorderFactory.createTitledBorder(etched_border,"Cavities' Parameters")) init_buttons_panel = Init_Cav_Controllers_Panel(self) start_stop_panel = Start_Stop_Panel(self) #---- fake scan button self.keepAllCavParams_RadioButton = start_stop_panel.keepAllCavParams_RadioButton self.keepAmps_RadioButton = start_stop_panel.keepAmps_RadioButton #---- status text field self.status_text = start_stop_panel.status_text tmp0_panel = JPanel(BorderLayout()) tmp0_panel.add(init_buttons_panel,BorderLayout.NORTH) tmp0_panel.add(scrl_cav_panel,BorderLayout.CENTER) tmp0_panel.add(start_stop_panel,BorderLayout.SOUTH) tmp1_panel = JPanel(BorderLayout()) tmp1_panel.add(tmp0_panel,BorderLayout.NORTH) left_panel.add(tmp1_panel,BorderLayout.WEST) #-------------------------------------------------------- self.main_panel.add(left_panel,BorderLayout.WEST) self.main_panel.add(self.tabbedPane,BorderLayout.CENTER) #---- non GUI controllers self.particle_tracker_model = Particle_Tracker_Model(self) self.env_tracker_model = Envelop_Tracker_Model(self) def getMainPanel(self): return self.main_panel def getMessageTextField(self): return self.top_document.getMessageTextField() def writeDataToXML(self,root_da): main_loop_cntrl_da = root_da.createChild("MAIN_CONTROLLER") main_loop_cntrl_da.setValue("keep_cav_params",self.keepAllCavParams_RadioButton.isSelected()) main_loop_cntrl_da.setValue("keep_cav_amp",self.keepAmps_RadioButton.isSelected()) #--------------------------------------------------------------------------------- bpm_wrappers_da = main_loop_cntrl_da.createChild("BPM_WRAPPERS") for bpm_wrapper in self.bpm_wrappers: bpm_wrapper.writeDataToXML(bpm_wrappers_da) for bpm_wrapper in self.scl_bpm_wrappers: bpm_wrapper.writeDataToXML(bpm_wrappers_da) #--------------------------------------------------------------------------------- for cav_controller in self.cav_controllers: cav_controller.writeDataToXML(main_loop_cntrl_da) def readDataFromXML(self,root_da): main_loop_cntrl_da = root_da.childAdaptor("MAIN_CONTROLLER") if(main_loop_cntrl_da.intValue("keep_cav_params") == 1): self.keepAllCavParams_RadioButton.setSelected(true) else: self.keepAllCavParams_RadioButton.setSelected(false) if(main_loop_cntrl_da.intValue("keep_cav_amp") == 1): self.keepAmps_RadioButton.setSelected(true) else: self.keepAmps_RadioButton.setSelected(false) #----------------------------------------------------- bpm_wrappers_da = main_loop_cntrl_da.childAdaptor("BPM_WRAPPERS") if(bpm_wrappers_da != null): for bpm_wrapper in self.bpm_wrappers: bpm_wrapper.readDataFromXML(bpm_wrappers_da) for bpm_wrapper in self.scl_bpm_wrappers: bpm_wrapper.readDataFromXML(bpm_wrappers_da) #----------------------------------------------------- for cav_controller in self.cav_controllers: cav_cntrl_data_da = main_loop_cntrl_da.childAdaptor("CAVITY_CONTROLLER_"+cav_controller.cav_wrapper.alias) cav_controller.readDataFromXML(cav_cntrl_data_da) def connectAllPVs(self): for cav_wrapper in self.cav_wrappers: try: cav_wrapper.connectPVs() except: self.getMessageTextField().setText("Cannot connect PVs for cavity="+cav_wrapper.alias) return false return true def initAllCavControllers(self, ind_start = -1, ind_stop = -1): res = self.connectAllPVs() if(not res): return false if(ind_start < 0): ind_start = 0 ind_stop = len(self.cav_controllers) - 1 for cav_controller in self.cav_controllers[ind_start:ind_stop+1]: try: cav_controller.init() except: self.getMessageTextField().setText("Cannot read cavities' PVs! Cavity="+cav_controller.cav_wrapper.alias) return false return true def setBPM_Off(self,bpm_wrapper): """ Set BPM as bad and unused in measurements. Returns true if it is successful, false otherwise. """ self.getMessageTextField().setText("") txt = "" for cav_controller in self.cav_controllers: if(cav_controller.checkBPM_Usage(bpm_wrapper)): txt += " "+cav_controller.cav_wrapper.alias if(txt != ""): self.getMessageTextField().setText("Cannot remove "+bpm_wrapper.alias+" It is used in cavs: "+txt) return false return true
class WS_Data_Analysis_Controller: """ This controller manages the WS data analysis. Its panel is in the WS_LW_Acquisition_Controller panel. """ def __init__(self,ws_lw_acquisition_controller): self.ws_lw_acquisition_controller = ws_lw_acquisition_controller self.local_gauss_fitter = Local_Gauss_Fitter() self.main_panel = JPanel(BorderLayout()) self.ws_records_table_model = WS_Records_Table_Model() #----etched border etched_border = BorderFactory.createEtchedBorder() #---make the WS_Records_JTable + Graph Panel self.records_table = JTable(self.ws_records_table_model) self.records_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.records_table.setFillsViewportHeight(true) #----set up records_table columns width columnModel = self.records_table.getColumnModel() columnModel.getColumn(0).setPreferredWidth(30) columnModel.getColumn(1).setPreferredWidth(160) columnModel.getColumn(2).setPreferredWidth(40) columnModel.getColumn(3).setPreferredWidth(40) columnModel.getColumn(4).setPreferredWidth(80) columnModel.getColumn(5).setPreferredWidth(70) columnModel.getColumn(6).setPreferredWidth(70) #--------------------------------------------------- records_panel = JPanel(BorderLayout()) records_panel.add(JScrollPane(self.records_table), BorderLayout.CENTER) knobs_gauss_panel = JPanel(BorderLayout()) records_panel.add(knobs_gauss_panel, BorderLayout.SOUTH) records_panel.setBorder(etched_border) #---records knobs --------------------------------------------- records_knobs_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) guess_and_fit_button = JButton("Guess and Fit") analysis_all_button = JButton("G&F All") fit_button = JButton("Fit") fit_all_button = JButton("Fit All") send_to_twiss_button = JButton("Send to Twiss Analysis") records_knobs_panel.add(guess_and_fit_button) records_knobs_panel.add(analysis_all_button) records_knobs_panel.add(fit_button) records_knobs_panel.add(fit_all_button) records_knobs_panel.add(send_to_twiss_button) guess_and_fit_button.addActionListener(Guess_And_Fit_Listener(self.ws_lw_acquisition_controller)) fit_button.addActionListener(Fit_Listener(self.ws_lw_acquisition_controller)) fit_all_button.addActionListener(Fit_All_Listener(self.ws_lw_acquisition_controller)) analysis_all_button.addActionListener(Guess_And_Fit_All_Listener(self.ws_lw_acquisition_controller)) send_to_twiss_button.addActionListener(SendToAnalysis_Listener(self.ws_lw_acquisition_controller)) self.gauss_fit_param_panel = GaussFitDataPanel() knobs_gauss_panel.add(records_knobs_panel, BorderLayout.NORTH) knobs_gauss_panel.add(self.gauss_fit_param_panel, BorderLayout.SOUTH) #--------------------------------------------------------- self.record_analysis_panel = JPanel(BorderLayout()) border = BorderFactory.createTitledBorder(etched_border,"WS/LW Wave Form Analysis") self.record_analysis_panel.setBorder(border) self.record_analysis_panel.add(records_panel, BorderLayout.WEST) self.gpanel_WF = FunctionGraphsJPanel() self.gpanel_WF.setLegendButtonVisible(true) self.gpanel_WF.setChooseModeButtonVisible(true) self.gpanel_WF.setName("Profile") self.gpanel_WF.setAxisNames("pos, [mm]","Amp, [arb. units]") self.gpanel_WF.setBorder(etched_border) self.gpanel_WF.addVerticalLine(-1.0e+30,Color.red) self.gpanel_WF.addVerticalLine(+1.0e+30,Color.red) self.gpanel_WF.setVerLinesButtonVisible(true) self.gpanel_WF.addDraggedVerLinesListener(Position_Limits_Listener(self.ws_lw_acquisition_controller)) self.record_analysis_panel.add(self.gpanel_WF, BorderLayout.CENTER) self.main_panel.add(self.record_analysis_panel, BorderLayout.CENTER) #---set up Listeners self.records_table.getSelectionModel().addListSelectionListener(WS_Record_Table_Selection_Listener(self.ws_lw_acquisition_controller)) def setDataToGraphPanel(self,ws_record): self.gpanel_WF.removeAllGraphData() self.gpanel_WF.addGraphData(ws_record.gd_wf) self.gpanel_WF.addGraphData(ws_record.gd_fit_wf)
class WS_LW_Acquisition_Controller: def __init__(self,linac_wizard_document): #--- linac_wizard_document the parent document for all controllers self.linac_wizard_document = linac_wizard_document self.main_panel = JPanel(GridLayout(2,1)) self.quadFieldDict = {} self.cavAmpPhaseDict = {} self.quads = [] self.cavs = [] self.ws_table_model = WS_Table_Model() #----make LW or WS nodes self.ws_nodes = [] #----etched border etched_border = BorderFactory.createEtchedBorder() #---make the WS_JTable + H&V Graphs Panels self.ws_table = JTable(self.ws_table_model) self.ws_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.ws_table.setFillsViewportHeight(true) ws_panel = JPanel(BorderLayout()) ws_panel.add(JScrollPane(self.ws_table), BorderLayout.CENTER) ws_knobs_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) ws_panel.add(ws_knobs_panel, BorderLayout.SOUTH) ws_panel.setBorder(etched_border) #---ws knobs --------------------------------------------- get_ws_data_button = JButton("Get WS/LW Data") switch_hv_button = JButton(" Switch H/V ") add_data_to_pool_button = JButton(" Add Data to Pool ") ws_knobs_panel.add(get_ws_data_button) ws_knobs_panel.add(switch_hv_button) ws_knobs_panel.add(add_data_to_pool_button) get_ws_data_button.addActionListener(WS_GET_Data_Listener(self)) switch_hv_button.addActionListener(Switch_HV_Listener(self)) add_data_to_pool_button.addActionListener(WS_Data_to_Pool_Listener(self)) #--------------------------------------------------------- ws_and_graphs_panel = JPanel(BorderLayout()) border = BorderFactory.createTitledBorder(etched_border,"WS/LW Raw Data Acquisition") ws_and_graphs_panel.setBorder(border) ws_and_graphs_panel.add(ws_panel, BorderLayout.WEST) graphs_panel = JPanel(GridLayout(1,2)) self.gpanel_horWF = FunctionGraphsJPanel() self.gpanel_verWF = FunctionGraphsJPanel() self.gpanel_horWF.setLegendButtonVisible(true) self.gpanel_horWF.setChooseModeButtonVisible(true) self.gpanel_verWF.setLegendButtonVisible(true) self.gpanel_verWF.setChooseModeButtonVisible(true) self.gpanel_horWF.setName("Horizontal Profiles") self.gpanel_horWF.setAxisNames("pos, [mm]","Amp, [arb. units]") self.gpanel_verWF.setName("Vertical Profiles") self.gpanel_verWF.setAxisNames("pos, [mm]","Amp, [arb. units]") self.gpanel_horWF.setBorder(etched_border) self.gpanel_verWF.setBorder(etched_border) graphs_panel.add(self.gpanel_horWF) graphs_panel.add(self.gpanel_verWF) ws_and_graphs_panel.add(graphs_panel, BorderLayout.CENTER) self.setDataToGraphPanels(-1) #------analysis sub-panel self.ws_data_analysis_controller = WS_Data_Analysis_Controller(self) #---put everything into the main_panel self.main_panel.add(ws_and_graphs_panel) self.main_panel.add(self.ws_data_analysis_controller.main_panel) #---set up Listeners self.ws_table.getSelectionModel().addListSelectionListener(WS_Table_Selection_Listener(self)) def setAccSeq(self,accSeq): self.ws_table_model.ws_table_element_arr = [] self.ws_nodes = [] if(accSeq == null): self.ws_table_model.fireTableDataChanged() return nodes = accSeq.filterNodesByStatus(accSeq.getAllNodesOfType(ProfileMonitor.s_strType),true) for node in nodes: self.ws_nodes.append(node) nodes = accSeq.filterNodesByStatus(accSeq.getAllNodesOfType(Marker.s_strType),true) for node in nodes: if(node.getId().find("LW") >= 0 and node.getId().find("SCL") >= 0): self.ws_nodes.append(node) for node in self.ws_nodes: self.ws_table_model.addWS_TableElement(WS_Table_Element(node)) self.makePVforWS() #ws_table_elements_arr = self.ws_table_model.getWS_TableElements() #for ws_table_element in ws_table_elements_arr: # ws_table_element.readPVData() #----update data and graphs self.ws_table_model.fireTableDataChanged() self.setDataToGraphPanels(-1) #------------set up the quad and cavities dictionaries self.quadFieldDict = {} self.quads = accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(Quadrupole.s_strType))) for quad in self.quads: self.quadFieldDict[quad] = quad.getDfltField() """ if(quad.isPermanent()): self.quadFieldDict[quad] = quad.getDfltField() else: self.quadFieldDict[quad] = quad.getFieldReadback() """ self.cavAmpPhaseDict = {} rf_gaps = accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType))) self.cavs = [] for rf_gap in rf_gaps: cav = rf_gap.getParent() if(cav not in self.cavs): self.cavs.append(cav) amp = cav.getDfltCavAmp() phase = cav.getDfltCavPhase() self.cavAmpPhaseDict[cav] = [amp,phase] def cleanOldWSdata(self): #----clean all data for analysis -- may be we want to keep them? ws_data_analysis_controller = self.ws_data_analysis_controller ws_data_analysis_controller.ws_records_table_model.ws_rec_table_element_arr = [] ws_data_analysis_controller.ws_records_table_model.fireTableDataChanged() tr_twiss_analysis_controller = self.linac_wizard_document.tr_twiss_analysis_controller accStatesKeeper = tr_twiss_analysis_controller.accStatesKeeper accStatesKeeper.clean() tr_twiss_analysis_controller.dict_panel.dict_table.getModel().fireTableDataChanged() def getFreshCopyQuadCavDict(self): """ Returns a copy of the fresh dictionaries [quadFieldDict,cavAmpPhaseDict] """ quadFieldDict = {} for quad in self.quads: if(quad.isPermanent()): self.quadFieldDict[quad] = quad.getDfltField() else: self.quadFieldDict[quad] = quad.getFieldReadback() quadFieldDict[quad] = self.quadFieldDict[quad] #print "debug quad=",quad.getId()," G=",self.quadFieldDict[quad] cavAmpPhaseDict = {} for cav in self.cavs: amp = cav.getDfltCavAmp() phase = cav.getDfltCavPhase() self.cavAmpPhaseDict[cav] = [amp,phase] cavAmpPhaseDict[cav] = [amp,phase] return [quadFieldDict,cavAmpPhaseDict] def getMainPanel(self): return self.main_panel def setDataToGraphPanels(self,index): self.gpanel_horWF.removeAllGraphData() self.gpanel_verWF.removeAllGraphData() ws_table_elements_arr = self.ws_table_model.getWS_TableElements() if(index < 0 or index >= len(ws_table_elements_arr)): return ws_table_element = ws_table_elements_arr[index] hor_record = ws_table_element.getRecords(WS_DIRECTION_HOR) ver_record = ws_table_element.getRecords(WS_DIRECTION_VER) self.gpanel_horWF.addGraphData(hor_record.gd_wf) self.gpanel_verWF.addGraphData(ver_record.gd_wf) def makePVforWS(self): ws_table_elements_arr = self.ws_table_model.getWS_TableElements() for ws_table_element in ws_table_elements_arr: ws_node = ws_table_element.ws if(ws_node.getId().find("WS") >= 0): pv_pos_wf_name = ws_node.getId()+":Hor_prof_pos" pv_wf_name = ws_node.getId()+":Hor_prof_sig" sigma_name = ws_node.getId()+":Hor_Sigma_gs" ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_HOR) pv_pos_wf_name = ws_node.getId()+":Ver_prof_pos" pv_wf_name = ws_node.getId()+":Ver_prof_sig" sigma_name = ws_node.getId()+":Ver_Sigma_gs" ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_VER) else: name = ws_node.getId().replace(":LW",":LW_")+":LASER_WIRE_axis" pv_pos_wf_name = name+"01_ScanPosArray" pv_wf_name = name+"01_Peak_Profile_WFM" sigma_name = name+"01_Peak_Info_Sigma" ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_HOR) pv_pos_wf_name = name+"02_ScanPosArray" pv_wf_name = name+"02_Peak_Profile_WFM" sigma_name = name+"02_Peak_Info_Sigma" ws_table_element.setPV_Names(pv_pos_wf_name,pv_wf_name,sigma_name,WS_DIRECTION_VER)
class PreferencesFrame(JFrame, ActionListener, WindowListener, ItemListener, HyperlinkListener): """Dialog with preferences """ def __init__(self, parent, title, app): from javax.swing import JCheckBox, JRadioButton, ButtonGroup self.app = app border = BorderFactory.createEmptyBorder(5, 7, 5, 7) self.getContentPane().setBorder(border) self.getContentPane().setLayout(BorderLayout(0, 5)) self.tabbedPane = JTabbedPane() #1 Tab: general panel1 = JPanel() panel1.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) panel1.setLayout(BoxLayout(panel1, BoxLayout.PAGE_AXIS)) #Checkbutton to enable/disable update check when script starts self.updateCBtn = JCheckBox(self.app.strings.getString("updateCBtn")) self.updateCBtn.setToolTipText(self.app.strings.getString("updateCBtn_tooltip")) #Download tools downloadBtn = JButton(self.app.strings.getString("updatesBtn"), ImageProvider.get("dialogs", "refresh"), actionPerformed=self.on_downloadBtn_clicked) downloadBtn.setToolTipText(self.app.strings.getString("updatesBtn_tooltip")) #Checkbuttons for enabling/disabling tools toolsPanel = JPanel(BorderLayout(0, 5)) title = self.app.strings.getString("enable_disable_tools") toolsPanel.setBorder(BorderFactory.createTitledBorder(title)) infoLbl = JLabel(self.app.strings.getString("JOSM_restart_warning")) infoLbl.setFont(infoLbl.getFont().deriveFont(Font.ITALIC)) toolsPanel.add(infoLbl, BorderLayout.PAGE_START) toolsStatusPane = JPanel(GridLayout(len(self.app.realTools), 0)) self.toolsCBtns = [] for tool in self.app.realTools: toolCBtn = JCheckBox() toolCBtn.addItemListener(self) toolLbl = JLabel(tool.title, tool.bigIcon, JLabel.LEFT) self.toolsCBtns.append(toolCBtn) toolPane = JPanel() toolPane.setLayout(BoxLayout(toolPane, BoxLayout.X_AXIS)) toolPane.add(toolCBtn) toolPane.add(toolLbl) toolsStatusPane.add(toolPane) toolsPanel.add(toolsStatusPane, BorderLayout.CENTER) #Radiobuttons for enabling/disabling layers when a new one #is added layersPanel = JPanel(GridLayout(0, 1)) title = self.app.strings.getString("errors_layers_manager") layersPanel.setBorder(BorderFactory.createTitledBorder(title)) errorLayersLbl = JLabel(self.app.strings.getString("errors_layers_info")) errorLayersLbl.setFont(errorLayersLbl.getFont().deriveFont(Font.ITALIC)) layersPanel.add(errorLayersLbl) self.layersRBtns = {} group = ButtonGroup() for mode in self.app.layersModes: layerRBtn = JRadioButton(self.app.strings.getString("%s" % mode)) group.add(layerRBtn) layersPanel.add(layerRBtn) self.layersRBtns[mode] = layerRBtn #Max number of errors text field self.maxErrorsNumberTextField = JTextField() self.maxErrorsNumberTextField.setToolTipText(self.app.strings.getString("maxErrorsNumberTextField_tooltip")) self.maxErrorsNumberTFieldDefaultBorder = self.maxErrorsNumberTextField.getBorder() self.maxErrorsNumberTextField.getDocument().addDocumentListener(ErrNumTextListener(self)) #layout self.updateCBtn.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(self.updateCBtn) panel1.add(Box.createRigidArea(Dimension(0, 15))) downloadBtn.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(downloadBtn) panel1.add(Box.createRigidArea(Dimension(0, 15))) toolsPanel.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(toolsPanel) panel1.add(Box.createRigidArea(Dimension(0, 15))) layersPanel.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(layersPanel) panel1.add(Box.createRigidArea(Dimension(0, 15))) maxErrP = JPanel(BorderLayout(5, 0)) maxErrP.add(JLabel(self.app.strings.getString("max_errors_number")), BorderLayout.LINE_START) maxErrP.add(self.maxErrorsNumberTextField, BorderLayout.CENTER) p = JPanel(BorderLayout()) p.add(maxErrP, BorderLayout.PAGE_START) p.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(p) self.tabbedPane.addTab(self.app.strings.getString("tab_1_title"), None, panel1, None) #2 Tab: favourite zones panel2 = JPanel(BorderLayout(5, 15)) panel2.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) #status topPanel = JPanel() topPanel.setLayout(BoxLayout(topPanel, BoxLayout.Y_AXIS)) infoPanel = HtmlPanel(self.app.strings.getString("fav_zones_info")) infoPanel.getEditorPane().addHyperlinkListener(self) infoPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.favZoneStatusCBtn = JCheckBox(self.app.strings.getString("activate_fav_area"), actionListener=self) self.favZoneStatusCBtn.setToolTipText(self.app.strings.getString("activate_fav_area_tooltip")) self.favZoneStatusCBtn.setAlignmentX(Component.LEFT_ALIGNMENT) topPanel.add(infoPanel) topPanel.add(Box.createRigidArea(Dimension(0, 10))) topPanel.add(self.favZoneStatusCBtn) #table self.zonesTable = JTable() tableSelectionModel = self.zonesTable.getSelectionModel() tableSelectionModel.addListSelectionListener(ZonesTableListener(self)) columns = ["", self.app.strings.getString("Type"), self.app.strings.getString("Name")] tableModel = ZonesTableModel([], columns) self.zonesTable.setModel(tableModel) self.scrollPane = JScrollPane(self.zonesTable) #map self.zonesMap = JMapViewer() self.zonesMap.setZoomContolsVisible(False) self.zonesMap.setMinimumSize(Dimension(100, 200)) #buttons self.removeBtn = JButton(self.app.strings.getString("Remove"), ImageProvider.get("dialogs", "delete"), actionPerformed=self.on_removeBtn_clicked) self.removeBtn.setToolTipText(self.app.strings.getString("remove_tooltip")) newBtn = JButton(self.app.strings.getString("New"), ImageProvider.get("dialogs", "add"), actionPerformed=self.on_newBtn_clicked) newBtn.setToolTipText(self.app.strings.getString("new_tooltip")) #layout panel2.add(topPanel, BorderLayout.PAGE_START) panel2.add(self.scrollPane, BorderLayout.LINE_START) panel2.add(self.zonesMap, BorderLayout.CENTER) self.buttonsPanel = JPanel() self.buttonsPanel.add(self.removeBtn) self.buttonsPanel.add(newBtn) panel2.add(self.buttonsPanel, BorderLayout.PAGE_END) self.tabbedPane.addTab(self.app.strings.getString("tab_2_title"), None, panel2, None) #3 Tab Tools options panel3 = JPanel() panel3.setLayout(BoxLayout(panel3, BoxLayout.Y_AXIS)) panel3.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) for tool in self.app.realTools: if hasattr(tool, 'prefs'): p = JPanel(FlowLayout(FlowLayout.LEFT)) p.setBorder(BorderFactory.createTitledBorder(tool.title)) p.add(tool.prefsGui) panel3.add(p) self.tabbedPane.addTab(self.app.strings.getString("tab_3_title"), None, panel3, None) self.add(self.tabbedPane, BorderLayout.CENTER) exitPanel = JPanel() saveBtn = JButton(self.app.strings.getString("OK"), ImageProvider.get("ok"), actionPerformed=self.on_saveBtn_clicked) cancelBtn = JButton(self.app.strings.getString("cancel"), ImageProvider.get("cancel"), actionPerformed=self.on_cancelBtn_clicked) saveBtn.setToolTipText(self.app.strings.getString("save_preferences")) saveBtn.setAlignmentX(0.5) exitPanel.add(saveBtn) exitPanel.add(cancelBtn) self.add(exitPanel, BorderLayout.PAGE_END) self.addWindowListener(self) self.pack() def windowClosing(self, windowEvent): self.on_cancelBtn_clicked() def hyperlinkUpdate(self, e): if e.getEventType() == HyperlinkEvent.EventType.ACTIVATED: OpenBrowser.displayUrl(e.getURL().toString()) def itemStateChanged(self, e): """A ttol has been activated/deactivated. Check if at least one tool is on. """ if all(not button.isSelected() for button in self.toolsCBtns): JOptionPane.showMessageDialog( Main.parent, self.app.strings.getString("tools_disabled_warning"), self.app.strings.getString("tools_disabled_warning_title"), JOptionPane.WARNING_MESSAGE) source = e.getItemSelectable() source.setSelected(True) def actionPerformed(self, e=None): """Enable/disable favourite zones panel """ for container in (self.scrollPane, self.buttonsPanel): self.enableComponents(container, self.favZoneStatusCBtn.isSelected()) if self.favZoneStatusCBtn.isSelected(): self.check_removeBtn_status() def enableComponents(self, container, enable): components = container.getComponents() for component in components: component.setEnabled(enable) if isinstance(component, Container): self.enableComponents(component, enable) def on_downloadBtn_clicked(self, e): update_checker.Updater(self.app, "manual") def clean_map(self): """Remove all rectangles and polygons from the map """ self.zonesMap.removeAllMapRectangles() self.zonesMap.removeAllMapPolygons() def update_gui_from_preferences(self): """Update gui status of preferences frame from config file """ #print "\n- updating Preferences gui" onOff = {"on": True, "off": False} #1 Tab #check for update self.updateCBtn.setSelected(onOff[self.app.checkUpdate]) #tools status, enabled or not for toolIndex, tool in enumerate(self.app.realTools): if "tool.%s" % tool.name in self.app.properties.keys(): configstatus = self.app.properties.getProperty("tool.%s" % tool.name) else: configstatus = "on" # new tool self.toolsCBtns[toolIndex].setSelected(onOff[configstatus]) #layers preferences for mode, button in self.layersRBtns.iteritems(): button.setSelected(mode == self.app.layersMode) #max errors number self.maxErrorsNumberTextField.setText(str(self.app.maxErrorsNumber)) #stats panel self.app.dlg.update_favourite_zone_indicator() #2 Tab #favourite area self.update_favourite_area_gui_from_preferences() self.app.dlg.update_statsPanel_status() #3 Tab #tools preferences for tool in self.app.allTools: if hasattr(tool, 'prefs') and tool.prefsGui is not None: tool.prefsGui.update_gui(tool.prefs) def update_favourite_area_gui_from_preferences(self): #status self.favZoneStatusCBtn.setSelected(self.app.favouriteZoneStatus) #table #store zones to a temporary list, used to store changes #and save them when preferences dialog is closed self.app.tempZones = list(self.app.zones) self.zonesTable.getModel().setNumRows(0) for zone in self.app.tempZones: self.zonesTable.getModel().addRow([zone.country, zone.icon, zone.name]) if self.app.favZone is not None: selectedRow = self.app.tempZones.index(self.app.favZone) self.zonesTable.setRowSelectionInterval(selectedRow, selectedRow) self.zonesTable.getColumnModel().getColumn(0).setMaxWidth(30) self.zonesTable.getColumnModel().getColumn(1).setMaxWidth(50) #enable or disable favourite zone buttons self.actionPerformed() ### fav area editing buttons ########################################### def on_removeBtn_clicked(self, e): rowsNum = self.zonesTable.getSelectedRows() rowsNum.reverse() for rowNum in rowsNum: del self.app.tempZones[rowNum] self.zonesTable.getModel().removeRow(rowNum) if len(self.app.tempZones) != 0: if rowNum == 0: self.zonesTable.setRowSelectionInterval(0, 0) else: self.zonesTable.setRowSelectionInterval(rowNum - 1, rowNum - 1) self.check_removeBtn_status() def check_removeBtn_status(self): if self.app.tempZones != [] and len(self.zonesTable.getSelectedRows()) != 0: self.removeBtn.setEnabled(True) else: self.removeBtn.setEnabled(False) self.clean_map() def on_newBtn_clicked(self, e): try: self.newZoneDialog except AttributeError: self.newZoneDialog = NewZoneDialog(self.app) bbox = self.app.get_frame_bounds() self.app.newZone = Zone(self.app, self.app.strings.getString("New_zone"), "rectangle", ",".join(["%0.4f" % x for x in bbox]), "") self.newZoneDialog.update_gui_from_preferences() self.newZoneDialog.show() ### Exit from preferences ############################################## def on_cancelBtn_clicked(self, event=None): if hasattr(self, "newZoneDialog") and self.newZoneDialog.isVisible(): self.newZoneDialog.close_dialog() self.dispose() def on_saveBtn_clicked(self, event): """Read preferences from gui and save them to config.properties file """ #print "\n- saving preferences to config file" onOff = {True: "on", False: "off"} #1 Tab #check for update self.app.properties.setProperty("check_for_update", onOff[self.updateCBtn.isSelected()]) #tools status for toolIndex, tool in enumerate(self.app.realTools): prop = "tool.%s" % tool.name toolCBtn = self.toolsCBtns[toolIndex] self.app.properties.setProperty(prop, onOff[toolCBtn.isSelected()]) #layers preferences for mode, button in self.layersRBtns.iteritems(): if button.isSelected(): self.app.properties.setProperty("layers_mode", mode) break #max errors number try: num = Integer.parseInt(self.maxErrorsNumberTextField.getText()) except NumberFormatException: num = "" self.app.properties.setProperty("max_errors_number", str(num)) #2 Tab #Favourite zones changes = {"new": [z for z in self.app.tempZones if not z in self.app.zones], "deleted": [z for z in self.app.zones if not z in self.app.tempZones]} #delete files of removed favourite zones for zone in changes["deleted"]: f = File(File.separator.join([self.app.SCRIPTDIR, "configuration", "favourite_zones", "%s.txt" % zone.name])) f.delete() #create files for new favourite zones for zone in changes["new"]: print "\nsave new zone", zone.name fileName = File.separator.join([self.app.SCRIPTDIR, "configuration", "favourite_zones", "%s.txt" % zone.name]) f = open(fileName, "w") zoneData = zone.geomString if zone.country != "": zoneData += "|" + zone.country f.write(zoneData.encode("utf-8")) f.close() self.app.zones = self.app.tempZones if len(self.app.zones) == 0: self.app.favZone = None self.app.properties.setProperty("favourite_area.name", "") self.favZoneStatusCBtn.setSelected(False) else: if len(self.zonesTable.getSelectedRows()) == 0: self.app.favZone = self.app.zones[0] else: self.app.favZone = self.app.zones[self.zonesTable.getSelectedRows()[0]] self.app.properties.setProperty("favourite_area.name", self.app.favZone.name) favZoneStatus = self.favZoneStatusCBtn.isSelected() self.app.properties.setProperty("favourite_area.status", onOff[favZoneStatus]) self.app.favouriteZoneStatus = favZoneStatus #stats panel self.app.dlg.update_favourite_zone_indicator() self.app.dlg.update_statsPanel_status() #3 Tab #tools preferences for tool in self.app.allTools: if hasattr(tool, 'prefs') and tool.prefsGui is not None: for pref, value in tool.prefsGui.read_gui().iteritems(): prefKey = "tool.%s.%s" % (tool.name, pref) self.app.properties.setProperty(prefKey, value) self.app.save_config() self.dispose()
class PreferencesFrame(JFrame, ActionListener, WindowListener, ItemListener, HyperlinkListener): """Dialog with preferences """ def __init__(self, parent, title, app): from javax.swing import JCheckBox, JRadioButton, ButtonGroup self.app = app border = BorderFactory.createEmptyBorder(5, 7, 5, 7) self.getContentPane().setBorder(border) self.getContentPane().setLayout(BorderLayout(0, 5)) self.tabbedPane = JTabbedPane() #1 Tab: general panel1 = JPanel() panel1.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) panel1.setLayout(BoxLayout(panel1, BoxLayout.PAGE_AXIS)) #Checkbutton to enable/disable update check when script starts self.updateCBtn = JCheckBox(self.app.strings.getString("updateCBtn")) self.updateCBtn.setToolTipText( self.app.strings.getString("updateCBtn_tooltip")) #Download tools downloadBtn = JButton(self.app.strings.getString("updatesBtn"), ImageProvider.get("dialogs", "refresh"), actionPerformed=self.on_downloadBtn_clicked) downloadBtn.setToolTipText( self.app.strings.getString("updatesBtn_tooltip")) #Checkbuttons for enabling/disabling tools toolsPanel = JPanel(BorderLayout(0, 5)) title = self.app.strings.getString("enable_disable_tools") toolsPanel.setBorder(BorderFactory.createTitledBorder(title)) infoLbl = JLabel(self.app.strings.getString("JOSM_restart_warning")) infoLbl.setFont(infoLbl.getFont().deriveFont(Font.ITALIC)) toolsPanel.add(infoLbl, BorderLayout.PAGE_START) toolsStatusPane = JPanel(GridLayout(len(self.app.realTools), 0)) self.toolsCBtns = [] for tool in self.app.realTools: toolCBtn = JCheckBox() toolCBtn.addItemListener(self) toolLbl = JLabel(tool.title, tool.bigIcon, JLabel.LEFT) self.toolsCBtns.append(toolCBtn) toolPane = JPanel() toolPane.setLayout(BoxLayout(toolPane, BoxLayout.X_AXIS)) toolPane.add(toolCBtn) toolPane.add(toolLbl) toolsStatusPane.add(toolPane) toolsPanel.add(toolsStatusPane, BorderLayout.CENTER) #Radiobuttons for enabling/disabling layers when a new one #is added layersPanel = JPanel(GridLayout(0, 1)) title = self.app.strings.getString("errors_layers_manager") layersPanel.setBorder(BorderFactory.createTitledBorder(title)) errorLayersLbl = JLabel( self.app.strings.getString("errors_layers_info")) errorLayersLbl.setFont(errorLayersLbl.getFont().deriveFont( Font.ITALIC)) layersPanel.add(errorLayersLbl) self.layersRBtns = {} group = ButtonGroup() for mode in self.app.layersModes: layerRBtn = JRadioButton(self.app.strings.getString("%s" % mode)) group.add(layerRBtn) layersPanel.add(layerRBtn) self.layersRBtns[mode] = layerRBtn #Max number of errors text field self.maxErrorsNumberTextField = JTextField() self.maxErrorsNumberTextField.setToolTipText( self.app.strings.getString("maxErrorsNumberTextField_tooltip")) self.maxErrorsNumberTFieldDefaultBorder = self.maxErrorsNumberTextField.getBorder( ) self.maxErrorsNumberTextField.getDocument().addDocumentListener( ErrNumTextListener(self)) #layout self.updateCBtn.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(self.updateCBtn) panel1.add(Box.createRigidArea(Dimension(0, 15))) downloadBtn.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(downloadBtn) panel1.add(Box.createRigidArea(Dimension(0, 15))) toolsPanel.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(toolsPanel) panel1.add(Box.createRigidArea(Dimension(0, 15))) layersPanel.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(layersPanel) panel1.add(Box.createRigidArea(Dimension(0, 15))) maxErrP = JPanel(BorderLayout(5, 0)) maxErrP.add(JLabel(self.app.strings.getString("max_errors_number")), BorderLayout.LINE_START) maxErrP.add(self.maxErrorsNumberTextField, BorderLayout.CENTER) p = JPanel(BorderLayout()) p.add(maxErrP, BorderLayout.PAGE_START) p.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(p) self.tabbedPane.addTab(self.app.strings.getString("tab_1_title"), None, panel1, None) #2 Tab: favourite zones panel2 = JPanel(BorderLayout(5, 15)) panel2.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) #status topPanel = JPanel() topPanel.setLayout(BoxLayout(topPanel, BoxLayout.Y_AXIS)) infoPanel = HtmlPanel(self.app.strings.getString("fav_zones_info")) infoPanel.getEditorPane().addHyperlinkListener(self) infoPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.favZoneStatusCBtn = JCheckBox( self.app.strings.getString("activate_fav_area"), actionListener=self) self.favZoneStatusCBtn.setToolTipText( self.app.strings.getString("activate_fav_area_tooltip")) self.favZoneStatusCBtn.setAlignmentX(Component.LEFT_ALIGNMENT) topPanel.add(infoPanel) topPanel.add(Box.createRigidArea(Dimension(0, 10))) topPanel.add(self.favZoneStatusCBtn) #table self.zonesTable = JTable() tableSelectionModel = self.zonesTable.getSelectionModel() tableSelectionModel.addListSelectionListener(ZonesTableListener(self)) columns = [ "", self.app.strings.getString("Type"), self.app.strings.getString("Name") ] tableModel = ZonesTableModel([], columns) self.zonesTable.setModel(tableModel) self.scrollPane = JScrollPane(self.zonesTable) #map self.zonesMap = JMapViewer() self.zonesMap.setZoomContolsVisible(False) self.zonesMap.setMinimumSize(Dimension(100, 200)) #buttons self.removeBtn = JButton(self.app.strings.getString("Remove"), ImageProvider.get("dialogs", "delete"), actionPerformed=self.on_removeBtn_clicked) self.removeBtn.setToolTipText( self.app.strings.getString("remove_tooltip")) newBtn = JButton(self.app.strings.getString("New"), ImageProvider.get("dialogs", "add"), actionPerformed=self.on_newBtn_clicked) newBtn.setToolTipText(self.app.strings.getString("new_tooltip")) #layout panel2.add(topPanel, BorderLayout.PAGE_START) panel2.add(self.scrollPane, BorderLayout.LINE_START) panel2.add(self.zonesMap, BorderLayout.CENTER) self.buttonsPanel = JPanel() self.buttonsPanel.add(self.removeBtn) self.buttonsPanel.add(newBtn) panel2.add(self.buttonsPanel, BorderLayout.PAGE_END) self.tabbedPane.addTab(self.app.strings.getString("tab_2_title"), None, panel2, None) #3 Tab Tools options panel3 = JPanel() panel3.setLayout(BoxLayout(panel3, BoxLayout.Y_AXIS)) panel3.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) for tool in self.app.realTools: if hasattr(tool, 'prefs'): p = JPanel(FlowLayout(FlowLayout.LEFT)) p.setBorder(BorderFactory.createTitledBorder(tool.title)) p.add(tool.prefsGui) panel3.add(p) self.tabbedPane.addTab(self.app.strings.getString("tab_3_title"), None, panel3, None) self.add(self.tabbedPane, BorderLayout.CENTER) exitPanel = JPanel() saveBtn = JButton(self.app.strings.getString("OK"), ImageProvider.get("ok"), actionPerformed=self.on_saveBtn_clicked) cancelBtn = JButton(self.app.strings.getString("cancel"), ImageProvider.get("cancel"), actionPerformed=self.on_cancelBtn_clicked) saveBtn.setToolTipText(self.app.strings.getString("save_preferences")) saveBtn.setAlignmentX(0.5) exitPanel.add(saveBtn) exitPanel.add(cancelBtn) self.add(exitPanel, BorderLayout.PAGE_END) self.addWindowListener(self) self.pack() def windowClosing(self, windowEvent): self.on_cancelBtn_clicked() def hyperlinkUpdate(self, e): if e.getEventType() == HyperlinkEvent.EventType.ACTIVATED: OpenBrowser.displayUrl(e.getURL().toString()) def itemStateChanged(self, e): """A ttol has been activated/deactivated. Check if at least one tool is on. """ if all(not button.isSelected() for button in self.toolsCBtns): JOptionPane.showMessageDialog( Main.parent, self.app.strings.getString("tools_disabled_warning"), self.app.strings.getString("tools_disabled_warning_title"), JOptionPane.WARNING_MESSAGE) source = e.getItemSelectable() source.setSelected(True) def actionPerformed(self, e=None): """Enable/disable favourite zones panel """ for container in (self.scrollPane, self.buttonsPanel): self.enableComponents(container, self.favZoneStatusCBtn.isSelected()) if self.favZoneStatusCBtn.isSelected(): self.check_removeBtn_status() def enableComponents(self, container, enable): components = container.getComponents() for component in components: component.setEnabled(enable) if isinstance(component, Container): self.enableComponents(component, enable) def on_downloadBtn_clicked(self, e): update_checker.Updater(self.app, "manual") def clean_map(self): """Remove all rectangles and polygons from the map """ self.zonesMap.removeAllMapRectangles() self.zonesMap.removeAllMapPolygons() def update_gui_from_preferences(self): """Update gui status of preferences frame from config file """ #print "\n- updating Preferences gui" onOff = {"on": True, "off": False} #1 Tab #check for update self.updateCBtn.setSelected(onOff[self.app.checkUpdate]) #tools status, enabled or not for toolIndex, tool in enumerate(self.app.realTools): if "tool.%s" % tool.name in self.app.properties.keys(): configstatus = self.app.properties.getProperty("tool.%s" % tool.name) else: configstatus = "on" # new tool self.toolsCBtns[toolIndex].setSelected(onOff[configstatus]) #layers preferences for mode, button in self.layersRBtns.iteritems(): button.setSelected(mode == self.app.layersMode) #max errors number self.maxErrorsNumberTextField.setText(str(self.app.maxErrorsNumber)) #stats panel self.app.dlg.update_favourite_zone_indicator() #2 Tab #favourite area self.update_favourite_area_gui_from_preferences() self.app.dlg.update_statsPanel_status() #3 Tab #tools preferences for tool in self.app.allTools: if hasattr(tool, 'prefs') and tool.prefsGui is not None: tool.prefsGui.update_gui(tool.prefs) def update_favourite_area_gui_from_preferences(self): #status self.favZoneStatusCBtn.setSelected(self.app.favouriteZoneStatus) #table #store zones to a temporary list, used to store changes #and save them when preferences dialog is closed self.app.tempZones = list(self.app.zones) self.zonesTable.getModel().setNumRows(0) for zone in self.app.tempZones: self.zonesTable.getModel().addRow( [zone.country, zone.icon, zone.name]) if self.app.favZone is not None: selectedRow = self.app.tempZones.index(self.app.favZone) self.zonesTable.setRowSelectionInterval(selectedRow, selectedRow) self.zonesTable.getColumnModel().getColumn(0).setMaxWidth(30) self.zonesTable.getColumnModel().getColumn(1).setMaxWidth(50) #enable or disable favourite zone buttons self.actionPerformed() ### fav area editing buttons ########################################### def on_removeBtn_clicked(self, e): rowsNum = self.zonesTable.getSelectedRows() rowsNum.reverse() for rowNum in rowsNum: del self.app.tempZones[rowNum] self.zonesTable.getModel().removeRow(rowNum) if len(self.app.tempZones) != 0: if rowNum == 0: self.zonesTable.setRowSelectionInterval(0, 0) else: self.zonesTable.setRowSelectionInterval(rowNum - 1, rowNum - 1) self.check_removeBtn_status() def check_removeBtn_status(self): if self.app.tempZones != [] and len( self.zonesTable.getSelectedRows()) != 0: self.removeBtn.setEnabled(True) else: self.removeBtn.setEnabled(False) self.clean_map() def on_newBtn_clicked(self, e): try: self.newZoneDialog except AttributeError: self.newZoneDialog = NewZoneDialog(self.app) bbox = self.app.get_frame_bounds() self.app.newZone = Zone(self.app, self.app.strings.getString("New_zone"), "rectangle", ",".join(["%0.4f" % x for x in bbox]), "") self.newZoneDialog.update_gui_from_preferences() self.newZoneDialog.show() ### Exit from preferences ############################################## def on_cancelBtn_clicked(self, event=None): if hasattr(self, "newZoneDialog") and self.newZoneDialog.isVisible(): self.newZoneDialog.close_dialog() self.dispose() def on_saveBtn_clicked(self, event): """Read preferences from gui and save them to config.properties file """ #print "\n- saving preferences to config file" onOff = {True: "on", False: "off"} #1 Tab #check for update self.app.properties.setProperty("check_for_update", onOff[self.updateCBtn.isSelected()]) #tools status for toolIndex, tool in enumerate(self.app.realTools): prop = "tool.%s" % tool.name toolCBtn = self.toolsCBtns[toolIndex] self.app.properties.setProperty(prop, onOff[toolCBtn.isSelected()]) #layers preferences for mode, button in self.layersRBtns.iteritems(): if button.isSelected(): self.app.properties.setProperty("layers_mode", mode) break #max errors number try: num = Integer.parseInt(self.maxErrorsNumberTextField.getText()) except NumberFormatException: num = "" self.app.properties.setProperty("max_errors_number", str(num)) #2 Tab #Favourite zones changes = { "new": [z for z in self.app.tempZones if not z in self.app.zones], "deleted": [z for z in self.app.zones if not z in self.app.tempZones] } #delete files of removed favourite zones for zone in changes["deleted"]: f = File( File.separator.join([ self.app.SCRIPTDIR, "configuration", "favourite_zones", "%s.txt" % zone.name ])) f.delete() #create files for new favourite zones for zone in changes["new"]: print "\nsave new zone", zone.name fileName = File.separator.join([ self.app.SCRIPTDIR, "configuration", "favourite_zones", "%s.txt" % zone.name ]) f = open(fileName, "w") zoneData = zone.geomString if zone.country != "": zoneData += "|" + zone.country f.write(zoneData.encode("utf-8")) f.close() self.app.zones = self.app.tempZones if len(self.app.zones) == 0: self.app.favZone = None self.app.properties.setProperty("favourite_area.name", "") self.favZoneStatusCBtn.setSelected(False) else: if len(self.zonesTable.getSelectedRows()) == 0: self.app.favZone = self.app.zones[0] else: self.app.favZone = self.app.zones[ self.zonesTable.getSelectedRows()[0]] self.app.properties.setProperty("favourite_area.name", self.app.favZone.name) favZoneStatus = self.favZoneStatusCBtn.isSelected() self.app.properties.setProperty("favourite_area.status", onOff[favZoneStatus]) self.app.favouriteZoneStatus = favZoneStatus #stats panel self.app.dlg.update_favourite_zone_indicator() self.app.dlg.update_statsPanel_status() #3 Tab #tools preferences for tool in self.app.allTools: if hasattr(tool, 'prefs') and tool.prefsGui is not None: for pref, value in tool.prefsGui.read_gui().iteritems(): prefKey = "tool.%s.%s" % (tool.name, pref) self.app.properties.setProperty(prefKey, value) self.app.save_config() self.dispose()
class Plugin(IHttpListener): MUTATE_ID_COLUMN_INDEX = 4 ORIG_ID_COLUMN_INDEX = 5 def __init__(self, callbacks): self.callbacks = callbacks self.helpers = self.callbacks.getHelpers() self.origMessageEditorController = MessageEditorController() self.mutatedMessageEditorController = MessageEditorController() self.origSearchString = replacements.origSearchString self.replacements = replacements.replacements self.requestResponseCache = {} def start(self): self.frame = JDialog() #self.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.frame.setLocation(0, 1500) self.frame.setSize(1000, 200) self.tableDataModel = DefaultTableModel([], [ "URL", "Code", "Content-Length", "Location", "Mutated Id", "Orig Id" ]) self.jtable = JTable(self.tableDataModel) scrollPane = JScrollPane(self.jtable) self.jtable.setFillsViewportHeight(True) messageEditorOrig = self.callbacks.createMessageEditor(None, False) messageEditorModified = self.callbacks.createMessageEditor( None, False) self.editorSplitPane = JSplitPane(JSplitPane.HORIZONTAL_SPLIT, messageEditorOrig.getComponent(), messageEditorModified.getComponent()) self.editorSplitPane.setResizeWeight(0.5) splitPane = JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollPane, self.editorSplitPane) splitPane.setResizeWeight(0.5) class TableSelector(ListSelectionListener): def __init__(self, plugin): self.plugin = plugin def valueChanged(self, event): if not event.getValueIsAdjusting(): selectedRowIndex = self.plugin.jtable.getSelectedRows()[0] self.plugin._rowSelected(selectedRowIndex) self.jtable.getSelectionModel().addListSelectionListener( TableSelector(self)) self.frame.add(splitPane) self.frame.setVisible(True) self.callbacks.registerHttpListener(self) self.callbacks.setExtensionName("Custom Plugin") return def stop(self): print("Closing!") self.callbacks.removeHttpListener(self) self.frame.dispose() self.jrame = None return def _rowSelected(self, index): #self.splitPane.setLeftComponent( #self.callbacks.createMessageEditor( origId = self.tableDataModel.getValueAt( index, self.ORIG_ID_COLUMN_INDEX).encode('ascii', 'ignore') mutateId = self.tableDataModel.getValueAt( index, self.MUTATE_ID_COLUMN_INDEX).encode('ascii', 'ignore') self.origMessageEditorController.setRequestResponse( self.requestResponseCache[origId]) messageEditorOrig = self.callbacks.createMessageEditor( self.origMessageEditorController, False) messageEditorOrig.setMessage( self.requestResponseCache[origId].getResponse(), False) self.editorSplitPane.setLeftComponent(messageEditorOrig.getComponent()) self.mutatedMessageEditorController.setRequestResponse( self.requestResponseCache[mutateId]) messageEditorMutated = self.callbacks.createMessageEditor( self.mutatedMessageEditorController, False) messageEditorMutated.setMessage( self.requestResponseCache[mutateId].getResponse(), False) self.editorSplitPane.setRightComponent( messageEditorMutated.getComponent()) print(mutateId) print("Row selected") print(str(index)) def _buildResponseHeadersDictionary(self, headers): """Creates key/value lookup from list of headers. Header names are converted to lowercase. If header is returned multiple time, last header has precedence.""" d = {} #Skip first "header", it's the response code line. for i in range(1, len(headers)): (name, value) = headers[i].split(":", 1) d[name.lower()] = value return d def _getDictValueOrEmptyStr(self, d, key): if key in d: return d[key] else: return "" def handleReceivedResponseForModifiedRequest(self, requestResponse): #Get original HTTP Request requestData = StringUtil.fromBytes(requestResponse.getRequest()) requestId = re.search(b"^X-REQUEST-ID: ([^\r]*)", requestData, flags=re.MULTILINE).group(1).encode('ascii') origRequestId = re.search(b"^X-REQUEST-ORIG-ID: ([^\r]*)", requestData, flags=re.MULTILINE).group(1).encode('ascii') print("Keys") print(requestId) print(origRequestId) print(self.requestResponseCache.keys()) self.requestResponseCache[requestId] = requestResponse origRequestResponse = self.requestResponseCache[origRequestId] analyzedOrigResponse = self.helpers.analyzeResponse( origRequestResponse.getResponse()) analayzeMutatedResponse = self.helpers.analyzeResponse( requestResponse.getResponse()) origResponseHeaders = self._buildResponseHeadersDictionary( analyzedOrigResponse.getHeaders()) mutatedResponseHeaders = self._buildResponseHeadersDictionary( analayzeMutatedResponse.getHeaders()) mutatedRequestInfo = self.helpers.analyzeRequest( requestResponse.getHttpService(), requestResponse.getRequest()) model = self.jtable.getModel() model.addRow([ str(mutatedRequestInfo.getUrl()), str(analayzeMutatedResponse.getStatusCode()), self._getDictValueOrEmptyStr(mutatedResponseHeaders, "content-length"), self._getDictValueOrEmptyStr(mutatedResponseHeaders, "location"), requestId, origRequestId ]) print("Modified Request Found: %s %s" % (requestId, origRequestId)) #Get original request and response object from lookup #Get request from lookup def processHttpMessage(self, toolFlag, messageIsRequest, requestResponse): if not messageIsRequest: requestData = StringUtil.fromBytes(requestResponse.getRequest()) #We generated the request, process it if requestData.find(b"X-REQUEST-ID") != -1: self.handleReceivedResponseForModifiedRequest(requestResponse) #Response received for non-mutated request. #Mutate request and send it. else: origRequestResponseUUID = str(uuid.uuid4()) reload(replacements) print("Looking for replacements") for replacement in self.replacements: newRequestData = re.sub(self.origSearchString, replacement, requestData) #If no replacemnets made, don't send any requests if newRequestData != requestData: newRequestUUID = str(uuid.uuid4()) newRequestData = re.sub( b"Host", b"X-REQUEST-ID: " + newRequestUUID + "\r\nHost", requestData) newRequestData = re.sub( b"Host", b"X-REQUEST-ORIG-ID: " + origRequestResponseUUID + "\r\nHost", newRequestData) print("Sending Mutated Request") print(newRequestData) self.requestResponseCache[ origRequestResponseUUID] = requestResponse httpService = requestResponse.getHttpService() self.callbacks.makeHttpRequest(httpService, newRequestData) print("Got here")
class DTL_Acceptance_Scans_Controller: def __init__(self,top_document,accl): #--- top_document is a parent document for all controllers self.top_document = top_document self.main_loop_controller = self.top_document.main_loop_controller self.main_panel = JPanel(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() #--------------------------------------------- #---- Cavities' Controllers - only DTLs self.cav_acc_scan_controllers = [] self.cav_wrappers = self.main_loop_controller.cav_wrappers[4:10] self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[0],"FC160")) self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[1],"FC248")) self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[2],"FC334")) self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[3],"FC428")) self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[4],"FC524")) self.cav_acc_scan_controllers.append(DTL_Acc_Scan_Cavity_Controller(self,self.cav_wrappers[5],"FC104")) #----acceptance scans loop timer self.acc_scan_loop_timer = Acc_Scan_Loop_Timer(self) #---------------------------------------------- self.tabbedPane = JTabbedPane() self.tabbedPane.add("Cavity",JPanel(BorderLayout())) self.tabbedPane.add("Pattern",JPanel(BorderLayout())) #-------------------------------------------------------- self.cav_table = JTable(Cavities_Table_Model(self)) self.cav_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) self.cav_table.setFillsViewportHeight(true) self.cav_table.setPreferredScrollableViewportSize(Dimension(500,120)) self.cav_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self)) scrl_cav_panel = JScrollPane(self.cav_table) #------------------------------------------------------- scrl_cav_panel.setBorder(BorderFactory.createTitledBorder(etched_border,"Cavities' Parameters")) init_buttons_panel = JPanel(FlowLayout(FlowLayout.LEFT,5,2)) #---- initialization buttons init_selected_cavs_button = JButton("Init Selected Cavs") init_selected_cavs_button.addActionListener(Init_Selected_Cavs_Button_Listener(self)) fc_in_selected_cavs_button = JButton("FC In for Selected Cavs") fc_in_selected_cavs_button.addActionListener(FC_In_Selected_Cavs_Button_Listener(self)) fc_out_selected_cavs_button = JButton("FC Out for Selected Cavs") fc_out_selected_cavs_button.addActionListener(FC_Out_Selected_Cavs_Button_Listener(self)) init_buttons_panel.add(init_selected_cavs_button) init_buttons_panel.add(fc_in_selected_cavs_button) init_buttons_panel.add(fc_out_selected_cavs_button) #---- start stop buttons panel self.start_stop_panel = Start_Stop_Panel(self) #------------------------------------------------- tmp0_panel = JPanel(BorderLayout()) tmp0_panel.add(init_buttons_panel,BorderLayout.NORTH) tmp0_panel.add(scrl_cav_panel,BorderLayout.CENTER) tmp0_panel.add(self.start_stop_panel,BorderLayout.SOUTH) tmp1_panel = JPanel(BorderLayout()) tmp1_panel.add(tmp0_panel,BorderLayout.NORTH) #------------------------------------------------- left_panel = JPanel(BorderLayout()) left_panel.add(tmp1_panel,BorderLayout.WEST) #-------------------------------------------------- self.main_panel.add(left_panel,BorderLayout.WEST) self.main_panel.add(self.tabbedPane,BorderLayout.CENTER) #----------- loop state self.loop_run_state = Acc_Scans_Loop_Run_State() #---- non GUI controllers def connectAllPVs(self): for cav_acc_scan_controller in self.cav_acc_scan_controllers: try: cav_acc_scan_controller.connectPVs() except: self.getMessageTextField().setText("Cannot connect PVs for cavity="+cav_acc_scan_controller.cav_wrapper.alias) return false return true def initAllCavControllers(self, ind_start = -1, ind_stop = -1): res = self.connectAllPVs() if(not res): return false if(ind_start < 0): ind_start = 0 ind_stop = len(self.cav_acc_scan_controllers) - 1 for cav_acc_scan_controller in self.cav_acc_scan_controllers[ind_start:ind_stop+1]: try: cav_acc_scan_controller.init() except: self.getMessageTextField().setText("Cannot read cavity's PVs! Cavity="+cav_acc_scan_controller.cav_wrapper.alias) return false return true def getMainPanel(self): return self.main_panel def getMessageTextField(self): return self.top_document.getMessageTextField() def writeDataToXML(self,root_da): dtl_scans_loop_cntrl_da = root_da.createChild("DTL_ACCPT_SCANS_CONTROLLER") def readDataFromXML(self,root_da): dtl_scans_loop_cntrl_da = root_da.childAdaptor("DTL_ACCPT_SCANS_CONTROLLER") if(dtl_scans_loop_cntrl_da == null): return
class Monitor_Controller: def __init__(self, event_monitor_document): self.event_monitor_document = event_monitor_document self.main_panel = JPanel(BorderLayout()) etched_border = BorderFactory.createEtchedBorder() #etched_border = BorderFactory.createRaisedSoftBevelBorder() etched_border = BorderFactory.createLineBorder(Color.black, 2, false) #-------------------------------------------------------------- self.left_panel = JPanel(VerticalLayout()) main_label = JLabel( "============ Event Monitor Parameters =============", JLabel.CENTER) self.left_panel.add(main_label) self.left_panel.setBorder(etched_border) #----------Event Monotor Params------------- monitor_params0_panel = JPanel(GridLayout(4, 2)) self.buffer_size_text = buffer_size_text buffer_size_label = JLabel("Buff. Time [sec]:", JLabel.RIGHT) monitor_params0_panel.add(buffer_size_label) monitor_params0_panel.add(self.buffer_size_text) self.event_buffer_size_text = DoubleInputTextField( 3.0, ScientificNumberFormat(1), 10) event_buffer_size_label = JLabel("Event Buff. Size:", JLabel.RIGHT) monitor_params0_panel.add(event_buffer_size_label) monitor_params0_panel.add(self.event_buffer_size_text) self.min_limit_text = DoubleInputTextField(1.0e-8, ScientificNumberFormat(4), 10) self.max_limit_text = DoubleInputTextField(1.0e-3, ScientificNumberFormat(4), 10) min_lim_label = JLabel("Trigger Min Value:", JLabel.RIGHT) max_lim_label = JLabel("Trigger Max Value:", JLabel.RIGHT) monitor_params0_panel.add(min_lim_label) monitor_params0_panel.add(self.min_limit_text) monitor_params0_panel.add(max_lim_label) monitor_params0_panel.add(self.max_limit_text) monitor_params1_panel = JPanel(BorderLayout()) monitor_params1_panel.add(monitor_params0_panel, BorderLayout.WEST) monitor_params_panel = JPanel(BorderLayout()) monitor_params_panel.add(monitor_params1_panel, BorderLayout.NORTH) self.left_panel.add(monitor_params_panel) self.pvTriggerJText = JTextField(ChannelNameDocument(), "", 30) pvTriggerButton = JButton("Set Trigger PV") pvTriggerButton.addActionListener(Set_Trigger_PV_Listener(self)) triggerPanel = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1)) triggerPanel.add(pvTriggerButton) triggerPanel.add(self.pvTriggerJText) self.left_panel.add(triggerPanel) self.pvMonitorNameJText = JTextField(ChannelNameDocument(), "", 30) #------------Two Tables Panel -------------------- twoTables_panel = JPanel(GridLayout(2, 1)) #------------Monitored PV table------------------- pvMonitored_panel = JPanel(BorderLayout()) border = BorderFactory.createTitledBorder(etched_border, "Monitored PVs") pvMonitored_panel.setBorder(border) self.pvMonitorJText = JTextField(ChannelNameDocument(), "", 25) pvMonitorButton = JButton("Add PV to Monitored") pvMonitorRemoveButton = JButton("Remove Selected PVs") pvMonitorButton.addActionListener(Add_PV_To_Monitored_Listener(self)) pvMonitorRemoveButton.addActionListener( Remove_Monitored_PVs_Listener(self)) pvMonitoredPanel0 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1)) pvMonitoredPanel0.add(pvMonitorButton) pvMonitoredPanel0.add(self.pvMonitorJText) pvMonitoredPanel1 = JPanel(FlowLayout(FlowLayout.RIGHT, 1, 1)) pvMonitoredPanel1.add(pvMonitorRemoveButton) pvMonitoredPanel2 = JPanel(BorderLayout()) pvMonitoredPanel2.add(pvMonitoredPanel0, BorderLayout.NORTH) pvMonitoredPanel2.add(pvMonitoredPanel1, BorderLayout.SOUTH) pvMonitored_panel.add(pvMonitoredPanel2, BorderLayout.NORTH) self.pv_monitored_table = JTable(Monitored_PV_Table_Model(self)) self.pv_monitored_table.setPreferredScrollableViewportSize( Dimension(200, 160)) #self.pv_monitored_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.pv_monitored_table.setFillsViewportHeight(true) pvMonitored_panel.add(JScrollPane(self.pv_monitored_table), BorderLayout.CENTER) twoTables_panel.add(pvMonitored_panel) #------------Event Buffer Table------------------- buffEvents_panel = JPanel(BorderLayout()) border = BorderFactory.createTitledBorder(etched_border, "Buffered Events") buffEvents_panel.setBorder(border) self.events_table = JTable(Buffer_Events_Table_Model(self)) self.events_table.setPreferredScrollableViewportSize( Dimension(200, 160)) self.events_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.events_table.setFillsViewportHeight(true) buffEvents_panel.add(JScrollPane(self.events_table), BorderLayout.CENTER) twoTables_panel.add(buffEvents_panel) #------Stop - Start Monitoring Buttons startStopPanel = JPanel(BorderLayout()) startStopPanel.setBorder(etched_border) self.startMonitoringButton = JButton("Start Monitoring") self.stopMonitoringButton = JButton("Stop Monitoring") self.startMonitoringButton.addActionListener( Start_Monitoring_Listener(self)) self.stopMonitoringButton.addActionListener( Stop_Monitoring_Listener(self)) startStopButtonsPanel = JPanel(FlowLayout(FlowLayout.LEFT, 5, 5)) startStopButtonsPanel.add(self.startMonitoringButton) startStopButtonsPanel.add(self.stopMonitoringButton) startStopPanel.add(startStopButtonsPanel, BorderLayout.NORTH) self.sinceTimeJText = JTextField(30) self.sinceTimeJText.setForeground(Color.red) self.sinceTimeJText.setText("Not Running.") startStopPanel.add(self.sinceTimeJText, BorderLayout.SOUTH) #-------Event Handlers-------------------------------- self.event_holder = Event_Object_Holder(self.event_buffer_size_text, self) self.event_handler = Event_Handler(self.event_holder, self.min_limit_text, self.max_limit_text) #-----graph panels-------------------- self.graphs_panel = TwoGraphsPanel(self) #-----setup dump directory ----------- self.dump_directory_panel = JPanel(BorderLayout()) self.dump_button = JRadioButton("Dump Events to Files") self.dump_button.addActionListener(Dump_Events_To_Files_Listener(self)) dump_dir_choose_button = JButton(" Choose Dump Dir. ") dump_dir_choose_button.addActionListener(Find_Dump_Dir_Listener(self)) dump_dir_label = JLabel(" Dump Dir:", JLabel.RIGHT) self.dumpDirJText = JTextField(50) self.dumpDirJText.setText("/ade/xal/docs/EventMonitor/EventDirs/") dump_dir_panel0 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1)) dump_dir_panel0.add(self.dump_button) dump_dir_panel1 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1)) dump_dir_panel1.add(dump_dir_choose_button) dump_dir_panel1.add(dump_dir_label) dump_dir_panel2 = JPanel(BorderLayout()) dump_dir_panel2.add(dump_dir_panel1, BorderLayout.WEST) dump_dir_panel2.add(self.dumpDirJText, BorderLayout.CENTER) self.dump_directory_panel.add(dump_dir_panel0, BorderLayout.NORTH) self.dump_directory_panel.add(dump_dir_panel2, BorderLayout.SOUTH) #-----set up listeners ------------------------------------ tables_selection_listener = Table_Selection_Listener(self) self.pv_monitored_table.getSelectionModel().addListSelectionListener( tables_selection_listener) self.events_table.getSelectionModel().addListSelectionListener( tables_selection_listener) #--------- set up main panel params_and_tables_panel = JPanel(BorderLayout()) params_and_tables_panel.add(self.left_panel, BorderLayout.NORTH) params_and_tables_panel.add(twoTables_panel, BorderLayout.CENTER) params_and_tables_panel.add(startStopPanel, BorderLayout.SOUTH) self.main_panel.add(params_and_tables_panel, BorderLayout.WEST) self.main_panel.add(self.graphs_panel.getMainPanel(), BorderLayout.CENTER) self.main_panel.add(self.dump_directory_panel, BorderLayout.SOUTH) def setTriggerMonitor(self, pv_name): self.event_handler.setTriggerMonitor(pv_name) def getMainPanel(self): return self.main_panel
class QatDialog(ToggleDialog): """ToggleDialog for error type selection and buttons for reviewing errors in sequence """ def __init__(self, name, iconName, tooltip, shortcut, height, app): ToggleDialog.__init__(self, name, iconName, tooltip, shortcut, height) self.app = app tools = app.tools #Main panel of the dialog mainPnl = JPanel(BorderLayout()) mainPnl.setBorder(BorderFactory.createEmptyBorder(0, 1, 1, 1)) ### First tab: errors selection and download ########################### #ComboBox with tools names self.toolsComboModel = DefaultComboBoxModel() for tool in tools: self.add_data_to_models(tool) self.toolsCombo = JComboBox(self.toolsComboModel, actionListener=ToolsComboListener(app)) renderer = ToolsComboRenderer(self.app) renderer.setPreferredSize(Dimension(20, 20)) self.toolsCombo.setRenderer(renderer) self.toolsCombo.setToolTipText(app.strings.getString("Select_a_quality_assurance_tool")) #ComboBox with categories names ("views"), of the selected tool self.viewsCombo = JComboBox(actionListener=ViewsComboListener(app)) self.viewsCombo.setToolTipText(app.strings.getString("Select_a_category_of_error")) #Popup for checks table self.checkPopup = JPopupMenu() #add favourite check self.menuItemAdd = JMenuItem(self.app.strings.getString("Add_to_favourites")) self.menuItemAdd.setIcon(ImageIcon(File.separator.join([self.app.SCRIPTDIR, "tools", "data", "Favourites", "icons", "tool_16.png"]))) self.menuItemAdd.addActionListener(PopupActionListener(self.app)) self.checkPopup.add(self.menuItemAdd) #remove favourite check self.menuItemRemove = JMenuItem(self.app.strings.getString("Remove_from_favourites")) self.menuItemRemove.setIcon(ImageIcon(File.separator.join([self.app.SCRIPTDIR, "tools", "data", "Favourites", "icons", "black_tool_16.png"]))) self.menuItemRemove.addActionListener(PopupActionListener(self.app)) self.checkPopup.add(self.menuItemRemove) #Help link for selected check self.menuItemHelp = JMenuItem(self.app.strings.getString("check_help")) self.menuItemHelp.setIcon(ImageIcon(File.separator.join([self.app.SCRIPTDIR, "images", "icons", "info_16.png"]))) self.checkPopup.add(self.menuItemHelp) self.menuItemHelp.addActionListener(PopupActionListener(self.app)) #Table with checks of selected tool and view self.checksTable = JTable() self.iconrenderer = IconRenderer() self.iconrenderer.setHorizontalAlignment(JLabel.CENTER) scrollPane = JScrollPane(self.checksTable) self.checksTable.setFillsViewportHeight(True) tableSelectionModel = self.checksTable.getSelectionModel() tableSelectionModel.addListSelectionListener(ChecksTableListener(app)) self.checksTable.addMouseListener(ChecksTableClickListener(app, self.checkPopup, self.checksTable)) #Favourite area status indicator self.favAreaIndicator = JLabel() self.update_favourite_zone_indicator() self.favAreaIndicator.addMouseListener(FavAreaIndicatorListener(app)) #label with OSM id of the object currently edited and number of #errors still to review self.checksTextFld = JTextField("", editable=0, border=None, background=None) #checks buttons btnsIconsDir = File.separator.join([app.SCRIPTDIR, "images", "icons"]) downloadIcon = ImageIcon(File.separator.join([btnsIconsDir, "download.png"])) self.downloadBtn = JButton(downloadIcon, actionPerformed=app.on_downloadBtn_clicked, enabled=0) startIcon = ImageIcon(File.separator.join([btnsIconsDir, "start_fixing.png"])) self.startBtn = JButton(startIcon, actionPerformed=app.on_startBtn_clicked, enabled=0) self.downloadBtn.setToolTipText(app.strings.getString("Download_errors_in_this_area")) self.startBtn.setToolTipText(app.strings.getString("Start_fixing_the_selected_errors")) #tab layout panel1 = JPanel(BorderLayout(0, 1)) comboboxesPnl = JPanel(GridLayout(0, 2, 5, 0)) comboboxesPnl.add(self.toolsCombo) comboboxesPnl.add(self.viewsCombo) checksPnl = JPanel(BorderLayout(0, 1)) checksPnl.add(scrollPane, BorderLayout.CENTER) self.statsPanel = JPanel(BorderLayout(4, 0)) self.statsPanel_def_color = self.statsPanel.getBackground() self.statsPanel.add(self.checksTextFld, BorderLayout.CENTER) self.statsPanel.add(self.favAreaIndicator, BorderLayout.LINE_START) checksPnl.add(self.statsPanel, BorderLayout.PAGE_END) checksButtonsPnl = JPanel(GridLayout(0, 2, 0, 0)) checksButtonsPnl.add(self.downloadBtn) checksButtonsPnl.add(self.startBtn) panel1.add(comboboxesPnl, BorderLayout.PAGE_START) panel1.add(checksPnl, BorderLayout.CENTER) panel1.add(checksButtonsPnl, BorderLayout.PAGE_END) ### Second tab: errors fixing ########################################## #label with error stats self.errorTextFld = JTextField("", editable=0, border=None, background=None) #label with current error description self.errorDesc = JLabel("") self.errorDesc.setAlignmentX(0.5) #error buttons errorInfoBtnIcon = ImageProvider.get("info") self.errorInfoBtn = JButton(errorInfoBtnIcon, actionPerformed=app.on_errorInfoBtn_clicked, enabled=0) notErrorIcon = ImageIcon(File.separator.join([btnsIconsDir, "not_error.png"])) self.notErrorBtn = JButton(notErrorIcon, actionPerformed=app.on_falsePositiveBtn_clicked, enabled=0) ignoreIcon = ImageIcon(File.separator.join([btnsIconsDir, "skip.png"])) self.ignoreBtn = JButton(ignoreIcon, actionPerformed=app.on_ignoreBtn_clicked, enabled=0) correctedIcon = ImageIcon(File.separator.join([btnsIconsDir, "corrected.png"])) self.correctedBtn = JButton(correctedIcon, actionPerformed=app.on_correctedBtn_clicked, enabled=0) nextIcon = ImageIcon(File.separator.join([btnsIconsDir, "next.png"])) self.nextBtn = JButton(nextIcon, actionPerformed=app.on_nextBtn_clicked, enabled=0) #self.nextBtn.setMnemonic(KeyEvent.VK_RIGHT) self.errorInfoBtn.setToolTipText(app.strings.getString("open_error_info_dialog")) self.notErrorBtn.setToolTipText(app.strings.getString("flag_false_positive")) self.ignoreBtn.setToolTipText(app.strings.getString("Skip_and_don't_show_me_this_error_again")) self.correctedBtn.setToolTipText(app.strings.getString("flag_corrected_error")) self.nextBtn.setToolTipText(app.strings.getString("Go_to_next_error")) #tab layout self.panel2 = JPanel(BorderLayout()) self.panel2.add(self.errorTextFld, BorderLayout.PAGE_START) self.panel2.add(self.errorDesc, BorderLayout.CENTER) errorButtonsPanel = JPanel(GridLayout(0, 5, 0, 0)) errorButtonsPanel.add(self.errorInfoBtn) errorButtonsPanel.add(self.notErrorBtn) errorButtonsPanel.add(self.ignoreBtn) errorButtonsPanel.add(self.correctedBtn) errorButtonsPanel.add(self.nextBtn) self.panel2.add(errorButtonsPanel, BorderLayout.PAGE_END) #Layout self.tabbedPane = JTabbedPane() self.tabbedPane.addTab(self.app.strings.getString("Download"), None, panel1, self.app.strings.getString("download_tab")) mainPnl.add(self.tabbedPane, BorderLayout.CENTER) self.createLayout(mainPnl, False, None) def add_data_to_models(self, tool): """Add data of a tool to the models of the dialog components """ #tools combobox model if tool == self.app.favouritesTool: self.toolsComboModel.addElement(JSeparator()) self.toolsComboModel.addElement(tool) #views combobox model tool.viewsComboModel = DefaultComboBoxModel() for view in tool.views: tool.viewsComboModel.addElement(view.title) #checks table, one TableModel for each view, of each tool columns = ["", self.app.strings.getString("Check"), self.app.strings.getString("Errors")] for view in tool.views: tableRows = [] for check in view.checks: if check.icon is not None: icon = check.icon else: icon = "" errorsNumber = "" tableRows.append([icon, check.title, errorsNumber]) view.tableModel = MyTableModel(tableRows, columns) def update_favourite_zone_indicator(self): #icon if self.app.favZone is not None: self.favAreaIndicator.setIcon(self.app.favZone.icon) #tooltip messageArguments = array([self.app.favZone.name], String) formatter = MessageFormat("") formatter.applyPattern(self.app.strings.getString("favAreaIndicator_tooltip")) msg = formatter.format(messageArguments) self.favAreaIndicator.setToolTipText(msg) #status self.favAreaIndicator.setVisible(self.app.favouriteZoneStatus) def set_checksTextFld_color(self, color): """Change color of textField under checksTable """ colors = {"white": (255, 255, 255), "black": (0, 0, 0), "green": (100, 200, 0), "red": (200, 0, 0)} if color == "default": self.statsPanel.background = self.statsPanel_def_color self.checksTextFld.foreground = colors["black"] else: self.statsPanel.background = colors[color] self.checksTextFld.foreground = colors["white"] def change_selection(self, source): """Change comboboxes and checks table selections after a selection has been made by the user """ if source in ("menu", "layer", "add favourite"): self.app.selectionChangedFromMenuOrLayer = True self.toolsCombo.setSelectedItem(self.app.selectedTool) self.viewsCombo.setModel(self.app.selectedTool.viewsComboModel) self.viewsCombo.setSelectedItem(self.app.selectedView.title) self.checksTable.setModel(self.app.selectedTableModel) self.refresh_checksTable_columns_geometries() for i, c in enumerate(self.app.selectedView.checks): if c == self.app.selectedChecks[0]: break self.checksTable.setRowSelectionInterval(i, i) self.app.selectionChangedFromMenuOrLayer = False else: self.app.selectionChangedFromMenuOrLayer = False if source == "toolsCombo": self.viewsCombo.setModel(self.app.selectedTool.viewsComboModel) self.viewsCombo.setSelectedIndex(0) elif source == "viewsCombo": self.checksTable.setModel(self.app.selectedTableModel) self.refresh_checksTable_columns_geometries() if self.app.selectedView.checks != []: # favourite checks may be none self.checksTable.setRowSelectionInterval(0, 0) def refresh_checksTable_columns_geometries(self): self.checksTable.getColumnModel().getColumn(0).setCellRenderer(self.iconrenderer) self.checksTable.getColumnModel().getColumn(0).setMaxWidth(25) self.checksTable.getColumnModel().getColumn(2).setMaxWidth(60) def activate_error_tab(self, status): if status: if self.tabbedPane.getTabCount() == 1: self.tabbedPane.addTab(self.app.strings.getString("Fix"), None, self.panel2, self.app.strings.getString("fix_tab")) else: if self.tabbedPane.getTabCount() == 2: self.tabbedPane.remove(1) def update_checks_buttons(self): """This method sets the status of downloadBtn and startBtn """ #none check selected if len(self.app.selectedChecks) == 0: self.downloadBtn.setEnabled(False) self.startBtn.setEnabled(False) else: #some check selected self.downloadBtn.setEnabled(True) if len(self.app.selectedChecks) > 1: self.startBtn.setEnabled(False) else: #only one check is selected self.app.errors = self.app.selectedChecks[0].errors if self.app.errors is None or len(self.app.errors) == 0: #errors file has not been downloaded and parsed yet self.startBtn.setEnabled(False) else: #errors file has been downloaded and parsed if self.app.selectedChecks[0].toDo == 0: #all errors have been corrected self.startBtn.setEnabled(False) else: self.startBtn.setEnabled(True) #self.nextBtn.setEnabled(True) def update_error_buttons(self, mode): """This method sets the status of: ignoreBtn, falsePositiveBtn, correctedBtn, nextBtn """ if mode == "new error": status = True else: status = False if self.app.selectedChecks[0].tool.fixedFeedbackMode is None: self.correctedBtn.setEnabled(False) else: self.correctedBtn.setEnabled(status) if self.app.selectedChecks[0].tool.falseFeedbackMode is None: self.notErrorBtn.setEnabled(False) else: self.notErrorBtn.setEnabled(status) self.errorInfoBtn.setEnabled(status) self.ignoreBtn.setEnabled(status) if mode in ("reset", "review end"): self.nextBtn.setEnabled(False) elif mode in ("errors downloaded", "show stats", "new error"): self.nextBtn.setEnabled(True) def update_text_fields(self, mode, errorInfo=""): """This method updates the text in: checksTextFld, errorDesc, errorTextFld """ self.errorDesc.text = "" if mode == "review end": cheksTextColor = "green" checksText = self.app.strings.getString("All_errors_reviewed.") errorText = self.app.strings.getString("All_errors_reviewed.") elif mode == "reset": cheksTextColor = "default" checksText = "" errorText = "" elif mode == "show stats": cheksTextColor = "default" checksText = "%s %d / %s" % ( self.app.strings.getString("to_do"), self.app.selectedChecks[0].toDo, len(self.app.selectedChecks[0].errors)) #print "checks text", checksText errorText = "%s%s %d / %s" % ( errorInfo, self.app.strings.getString("to_do"), self.app.selectedChecks[0].toDo, len(self.app.selectedChecks[0].errors)) #print "error text", errorText if self.app.selectedError is not None and self.app.selectedError.desc != "": self.errorDesc.text = "<html>%s</html>" % self.app.selectedError.desc self.set_checksTextFld_color(cheksTextColor) self.checksTextFld.text = checksText self.errorTextFld.text = errorText self.update_statsPanel_status() def update_statsPanel_status(self): if self.checksTextFld.text == "" and not self.app.favouriteZoneStatus: self.statsPanel.setVisible(False) else: self.statsPanel.setVisible(True)
class QatDialog(ToggleDialog): """ToggleDialog for error type selection and buttons for reviewing errors in sequence """ def __init__(self, name, iconName, tooltip, shortcut, height, app): ToggleDialog.__init__(self, name, iconName, tooltip, shortcut, height) self.app = app tools = app.tools #Main panel of the dialog mainPnl = JPanel(BorderLayout()) mainPnl.setBorder(BorderFactory.createEmptyBorder(0, 1, 1, 1)) ### First tab: errors selection and download ########################### #ComboBox with tools names self.toolsComboModel = DefaultComboBoxModel() for tool in tools: self.add_data_to_models(tool) self.toolsCombo = JComboBox(self.toolsComboModel, actionListener=ToolsComboListener(app)) renderer = ToolsComboRenderer(self.app) renderer.setPreferredSize(Dimension(20, 20)) self.toolsCombo.setRenderer(renderer) self.toolsCombo.setToolTipText( app.strings.getString("Select_a_quality_assurance_tool")) #ComboBox with categories names ("views"), of the selected tool self.viewsCombo = JComboBox(actionListener=ViewsComboListener(app)) self.viewsCombo.setToolTipText( app.strings.getString("Select_a_category_of_error")) #Popup for checks table self.checkPopup = JPopupMenu() #add favourite check self.menuItemAdd = JMenuItem( self.app.strings.getString("Add_to_favourites")) self.menuItemAdd.setIcon( ImageIcon( File.separator.join([ self.app.SCRIPTDIR, "tools", "data", "Favourites", "icons", "tool_16.png" ]))) self.menuItemAdd.addActionListener(PopupActionListener(self.app)) self.checkPopup.add(self.menuItemAdd) #remove favourite check self.menuItemRemove = JMenuItem( self.app.strings.getString("Remove_from_favourites")) self.menuItemRemove.setIcon( ImageIcon( File.separator.join([ self.app.SCRIPTDIR, "tools", "data", "Favourites", "icons", "black_tool_16.png" ]))) self.menuItemRemove.addActionListener(PopupActionListener(self.app)) self.checkPopup.add(self.menuItemRemove) #Help link for selected check self.menuItemHelp = JMenuItem(self.app.strings.getString("check_help")) self.menuItemHelp.setIcon( ImageIcon( File.separator.join( [self.app.SCRIPTDIR, "images", "icons", "info_16.png"]))) self.checkPopup.add(self.menuItemHelp) self.menuItemHelp.addActionListener(PopupActionListener(self.app)) #Table with checks of selected tool and view self.checksTable = JTable() self.iconrenderer = IconRenderer() self.iconrenderer.setHorizontalAlignment(JLabel.CENTER) scrollPane = JScrollPane(self.checksTable) self.checksTable.setFillsViewportHeight(True) tableSelectionModel = self.checksTable.getSelectionModel() tableSelectionModel.addListSelectionListener(ChecksTableListener(app)) self.checksTable.addMouseListener( ChecksTableClickListener(app, self.checkPopup, self.checksTable)) #Favourite area status indicator self.favAreaIndicator = JLabel() self.update_favourite_zone_indicator() self.favAreaIndicator.addMouseListener(FavAreaIndicatorListener(app)) #label with OSM id of the object currently edited and number of #errors still to review self.checksTextFld = JTextField("", editable=0, border=None, background=None) #checks buttons btnsIconsDir = File.separator.join([app.SCRIPTDIR, "images", "icons"]) downloadIcon = ImageIcon( File.separator.join([btnsIconsDir, "download.png"])) self.downloadBtn = JButton(downloadIcon, actionPerformed=app.on_downloadBtn_clicked, enabled=0) startIcon = ImageIcon( File.separator.join([btnsIconsDir, "start_fixing.png"])) self.startBtn = JButton(startIcon, actionPerformed=app.on_startBtn_clicked, enabled=0) self.downloadBtn.setToolTipText( app.strings.getString("Download_errors_in_this_area")) self.startBtn.setToolTipText( app.strings.getString("Start_fixing_the_selected_errors")) #tab layout panel1 = JPanel(BorderLayout(0, 1)) comboboxesPnl = JPanel(GridLayout(0, 2, 5, 0)) comboboxesPnl.add(self.toolsCombo) comboboxesPnl.add(self.viewsCombo) checksPnl = JPanel(BorderLayout(0, 1)) checksPnl.add(scrollPane, BorderLayout.CENTER) self.statsPanel = JPanel(BorderLayout(4, 0)) self.statsPanel_def_color = self.statsPanel.getBackground() self.statsPanel.add(self.checksTextFld, BorderLayout.CENTER) self.statsPanel.add(self.favAreaIndicator, BorderLayout.LINE_START) checksPnl.add(self.statsPanel, BorderLayout.PAGE_END) checksButtonsPnl = JPanel(GridLayout(0, 2, 0, 0)) checksButtonsPnl.add(self.downloadBtn) checksButtonsPnl.add(self.startBtn) panel1.add(comboboxesPnl, BorderLayout.PAGE_START) panel1.add(checksPnl, BorderLayout.CENTER) panel1.add(checksButtonsPnl, BorderLayout.PAGE_END) ### Second tab: errors fixing ########################################## #label with error stats self.errorTextFld = JTextField("", editable=0, border=None, background=None) #label with current error description self.errorDesc = JLabel("") self.errorDesc.setAlignmentX(0.5) #error buttons errorInfoBtnIcon = ImageProvider.get("info") self.errorInfoBtn = JButton( errorInfoBtnIcon, actionPerformed=app.on_errorInfoBtn_clicked, enabled=0) notErrorIcon = ImageIcon( File.separator.join([btnsIconsDir, "not_error.png"])) self.notErrorBtn = JButton( notErrorIcon, actionPerformed=app.on_falsePositiveBtn_clicked, enabled=0) ignoreIcon = ImageIcon(File.separator.join([btnsIconsDir, "skip.png"])) self.ignoreBtn = JButton(ignoreIcon, actionPerformed=app.on_ignoreBtn_clicked, enabled=0) correctedIcon = ImageIcon( File.separator.join([btnsIconsDir, "corrected.png"])) self.correctedBtn = JButton( correctedIcon, actionPerformed=app.on_correctedBtn_clicked, enabled=0) nextIcon = ImageIcon(File.separator.join([btnsIconsDir, "next.png"])) self.nextBtn = JButton(nextIcon, actionPerformed=app.on_nextBtn_clicked, enabled=0) #self.nextBtn.setMnemonic(KeyEvent.VK_RIGHT) self.errorInfoBtn.setToolTipText( app.strings.getString("open_error_info_dialog")) self.notErrorBtn.setToolTipText( app.strings.getString("flag_false_positive")) self.ignoreBtn.setToolTipText( app.strings.getString("Skip_and_don't_show_me_this_error_again")) self.correctedBtn.setToolTipText( app.strings.getString("flag_corrected_error")) self.nextBtn.setToolTipText(app.strings.getString("Go_to_next_error")) #tab layout self.panel2 = JPanel(BorderLayout()) self.panel2.add(self.errorTextFld, BorderLayout.PAGE_START) self.panel2.add(self.errorDesc, BorderLayout.CENTER) errorButtonsPanel = JPanel(GridLayout(0, 5, 0, 0)) errorButtonsPanel.add(self.errorInfoBtn) errorButtonsPanel.add(self.notErrorBtn) errorButtonsPanel.add(self.ignoreBtn) errorButtonsPanel.add(self.correctedBtn) errorButtonsPanel.add(self.nextBtn) self.panel2.add(errorButtonsPanel, BorderLayout.PAGE_END) #Layout self.tabbedPane = JTabbedPane() self.tabbedPane.addTab(self.app.strings.getString("Download"), None, panel1, self.app.strings.getString("download_tab")) mainPnl.add(self.tabbedPane, BorderLayout.CENTER) self.createLayout(mainPnl, False, None) def add_data_to_models(self, tool): """Add data of a tool to the models of the dialog components """ #tools combobox model if tool == self.app.favouritesTool: self.toolsComboModel.addElement(JSeparator()) self.toolsComboModel.addElement(tool) #views combobox model tool.viewsComboModel = DefaultComboBoxModel() for view in tool.views: tool.viewsComboModel.addElement(view.title) #checks table, one TableModel for each view, of each tool columns = [ "", self.app.strings.getString("Check"), self.app.strings.getString("Errors") ] for view in tool.views: tableRows = [] for check in view.checks: if check.icon is not None: icon = check.icon else: icon = "" errorsNumber = "" tableRows.append([icon, check.title, errorsNumber]) view.tableModel = MyTableModel(tableRows, columns) def update_favourite_zone_indicator(self): #icon if self.app.favZone is not None: self.favAreaIndicator.setIcon(self.app.favZone.icon) #tooltip messageArguments = array([self.app.favZone.name], String) formatter = MessageFormat("") formatter.applyPattern( self.app.strings.getString("favAreaIndicator_tooltip")) msg = formatter.format(messageArguments) self.favAreaIndicator.setToolTipText(msg) #status self.favAreaIndicator.setVisible(self.app.favouriteZoneStatus) def set_checksTextFld_color(self, color): """Change color of textField under checksTable """ colors = { "white": (255, 255, 255), "black": (0, 0, 0), "green": (100, 200, 0), "red": (200, 0, 0) } if color == "default": self.statsPanel.background = self.statsPanel_def_color self.checksTextFld.foreground = colors["black"] else: self.statsPanel.background = colors[color] self.checksTextFld.foreground = colors["white"] def change_selection(self, source): """Change comboboxes and checks table selections after a selection has been made by the user """ if source in ("menu", "layer", "add favourite"): self.app.selectionChangedFromMenuOrLayer = True self.toolsCombo.setSelectedItem(self.app.selectedTool) self.viewsCombo.setModel(self.app.selectedTool.viewsComboModel) self.viewsCombo.setSelectedItem(self.app.selectedView.title) self.checksTable.setModel(self.app.selectedTableModel) self.refresh_checksTable_columns_geometries() for i, c in enumerate(self.app.selectedView.checks): if c == self.app.selectedChecks[0]: break self.checksTable.setRowSelectionInterval(i, i) self.app.selectionChangedFromMenuOrLayer = False else: self.app.selectionChangedFromMenuOrLayer = False if source == "toolsCombo": self.viewsCombo.setModel(self.app.selectedTool.viewsComboModel) self.viewsCombo.setSelectedIndex(0) elif source == "viewsCombo": self.checksTable.setModel(self.app.selectedTableModel) self.refresh_checksTable_columns_geometries() if self.app.selectedView.checks != []: # favourite checks may be none self.checksTable.setRowSelectionInterval(0, 0) def refresh_checksTable_columns_geometries(self): self.checksTable.getColumnModel().getColumn(0).setCellRenderer( self.iconrenderer) self.checksTable.getColumnModel().getColumn(0).setMaxWidth(25) self.checksTable.getColumnModel().getColumn(2).setMaxWidth(60) def activate_error_tab(self, status): if status: if self.tabbedPane.getTabCount() == 1: self.tabbedPane.addTab(self.app.strings.getString("Fix"), None, self.panel2, self.app.strings.getString("fix_tab")) else: if self.tabbedPane.getTabCount() == 2: self.tabbedPane.remove(1) def update_checks_buttons(self): """This method sets the status of downloadBtn and startBtn """ #none check selected if len(self.app.selectedChecks) == 0: self.downloadBtn.setEnabled(False) self.startBtn.setEnabled(False) else: #some check selected self.downloadBtn.setEnabled(True) if len(self.app.selectedChecks) > 1: self.startBtn.setEnabled(False) else: #only one check is selected self.app.errors = self.app.selectedChecks[0].errors if self.app.errors is None or len(self.app.errors) == 0: #errors file has not been downloaded and parsed yet self.startBtn.setEnabled(False) else: #errors file has been downloaded and parsed if self.app.selectedChecks[0].toDo == 0: #all errors have been corrected self.startBtn.setEnabled(False) else: self.startBtn.setEnabled(True) #self.nextBtn.setEnabled(True) def update_error_buttons(self, mode): """This method sets the status of: ignoreBtn, falsePositiveBtn, correctedBtn, nextBtn """ if mode == "new error": status = True else: status = False if self.app.selectedChecks[0].tool.fixedFeedbackMode is None: self.correctedBtn.setEnabled(False) else: self.correctedBtn.setEnabled(status) if self.app.selectedChecks[0].tool.falseFeedbackMode is None: self.notErrorBtn.setEnabled(False) else: self.notErrorBtn.setEnabled(status) self.errorInfoBtn.setEnabled(status) self.ignoreBtn.setEnabled(status) if mode in ("reset", "review end"): self.nextBtn.setEnabled(False) elif mode in ("errors downloaded", "show stats", "new error"): self.nextBtn.setEnabled(True) def update_text_fields(self, mode, errorInfo=""): """This method updates the text in: checksTextFld, errorDesc, errorTextFld """ self.errorDesc.text = "" if mode == "review end": cheksTextColor = "green" checksText = self.app.strings.getString("All_errors_reviewed.") errorText = self.app.strings.getString("All_errors_reviewed.") elif mode == "reset": cheksTextColor = "default" checksText = "" errorText = "" elif mode == "show stats": cheksTextColor = "default" checksText = "%s %d / %s" % ( self.app.strings.getString("to_do"), self.app.selectedChecks[0].toDo, len(self.app.selectedChecks[0].errors)) #print "checks text", checksText errorText = "%s%s %d / %s" % ( errorInfo, self.app.strings.getString("to_do"), self.app.selectedChecks[0].toDo, len(self.app.selectedChecks[0].errors)) #print "error text", errorText if self.app.selectedError is not None and self.app.selectedError.desc != "": self.errorDesc.text = "<html>%s</html>" % self.app.selectedError.desc self.set_checksTextFld_color(cheksTextColor) self.checksTextFld.text = checksText self.errorTextFld.text = errorText self.update_statsPanel_status() def update_statsPanel_status(self): if self.checksTextFld.text == "" and not self.app.favouriteZoneStatus: self.statsPanel.setVisible(False) else: self.statsPanel.setVisible(True)