Пример #1
0
    def test_parameters(self):
        dpl_1 = DPlugin()
        dpl_1.id = 1

        dp_1 = DParameter(1, 'parameter1')
        dp_1.id = 2
        dp_2 = DParameter(2, 'parameter2')
        dp_2.id = 3

        #check: add Parameter
        self.assertTrue(dpl_1.add_parameter(dp_1))
        self.assertTrue(dpl_1.add_parameter(dp_2))

        self.assertFalse(dpl_1.add_parameter(dp_1))
        self.assertFalse(dpl_1.add_parameter(dp_2))

        #Check: count of parameters

        self.assertEqual(len(dpl_1.get_parameters().keys()), 2)

        #Check: rm parameter

        self.assertTrue(dpl_1.rm_parameter(dp_1))
        self.assertEqual(len(dpl_1.get_parameters().keys()), 1)
        self.assertTrue(dpl_1.rm_parameter(dp_2))
        self.assertEqual(len(dpl_1.get_parameters().keys()), 0)
Пример #2
0
    def cb_initialize_plugin(self):

        self.config = self.pl_get_current_config_ref()

        self.pl_set_event_trigger_mode(True)

        self.name_mat_file = self.config['file']['value']

        # Open/Create mat file

        self.data_to_save = {}

        self.parameters['start_saving'] = DParameter('start_saving',
                                                     default='0',
                                                     Regex=pc.REGEX_BOOL_BIN)
        self.parameters['save_data_for_x_ms'] = DParameter(
            'save_data_for_x_ms', default='0', Regex=pc.REGEX_SINGLE_INT)
        self.parameters['file'] = DParameter('file', default='')

        self.pl_send_new_parameter_list(list(self.parameters.values()))

        self.time_slot = 0
        self.time_start = 0

        self.saving = False

        print('toMAT started working')

        return True
Пример #3
0
    def cb_initialize_plugin(self):
        # ---------------------------
        # Read configuration
        # ---------------------------
        # Note: this cfg items have to exist!
        self.time_treshold  = int  (self.pl_get_config_element('update_interval'))
        self.value_scale    = float(self.pl_get_config_element('value_scale')    )
        self.value_offset   = float(self.pl_get_config_element('value_offset')   )
        self.digit_count    = int  (self.pl_get_config_element('digit_count')    )

        # if self.config['value_init']['value'] is not None:
        self.init_value     = self.pl_get_config_element('value_init', castHandler=float)

        if self.init_value is None:
            self.init_value = 0

        # --------------------------------
        # Create Widget
        # --------------------------------
        # Create Widget needed for this plugin
        self.LcdWidget = QtWidgets.QLCDNumber()
        self.LcdWidget.setSmallDecimalPoint(True)
        self.LcdWidget.display(self.init_value)

        self.LcdWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.LcdWidget.customContextMenuRequested.connect(self.show_context_menu)
        # This call is important, because the background structure needs to know the used widget!
        # In the background the qmidiwindow will becreated and the widget will be added
        self.pl_set_widget_for_internal_usage( self.LcdWidget )


        # ---------------------------
        # Create Parameters
        # ---------------------------
        para_list = []
        # create a parameter object
        self.para_treshold      = DParameter('update_interval',default=self.time_treshold, Regex='[0-9]+')
        self.para_value_scale   = DParameter('value_scale',default= self.value_scale, Regex='-?[1-9]+[0-9]*(\.?[0-9]+)?')
        self.para_value_offset  = DParameter('value_offset',default= self.value_offset, Regex='-?\d+(\.?\d+)?')
        self.para_digit_count   = DParameter('digit_count',default= self.digit_count, Regex='[3-9]')

        para_list.append(self.para_treshold)
        para_list.append(self.para_value_scale)
        para_list.append(self.para_value_offset)
        para_list.append(self.para_digit_count)


        # build parameter list to send to Core
        self.pl_send_new_parameter_list(para_list)

        # ---------------------------
        # Create Legend
        # ---------------------------

        self.last_time = int(round(time.time() * 1000))
        return True
Пример #4
0
    def test_pl_send_new_parameter_list(self):
        self.assertRaises(pe.WrongType,
                          self.basePlugin.pl_send_new_parameter_list, None)
        self.assertRaises(pe.WrongLength,
                          self.basePlugin.pl_send_new_parameter_list, [])

        parameters = [DParameter('1'), DParameter('2'), 3]
        self.assertRaises(pe.WrongType,
                          self.basePlugin.pl_send_new_parameter_list,
                          parameters)

        parameters = [DParameter('1'), DParameter('2'), DParameter('3')]
        self.assertRaises(AttributeError,
                          self.basePlugin.pl_send_new_parameter_list,
                          parameters)
Пример #5
0
    def update_parameter_list(self, ORTDParameter):

        newList = {}

        for para_id in ORTDParameter:
            para_name = ORTDParameter[para_id]['ParameterName']
            if para_name in self.parameters:
                para_object = self.parameters.pop(para_name)
            else:
                val_count = int(ORTDParameter[para_id]['NValues'])
                opt_object = OptionalObject(para_id, val_count)

                if "initial_value" in ORTDParameter[para_id]:
                    val = ORTDParameter[para_id]['initial_value']
                    if val_count > 1:
                        val = val[1:-1]
                        init_value = list(map(float, val.split(',')))
                    else:
                        init_value = float(val)
                else:
                    init_value = 0

                para_object = DParameter(para_name,
                                         default=str(init_value),
                                         OptionalObject=opt_object)
                self.pl_send_new_parameter_list([para_object])

            newList[para_name] = para_object

        toDeleteDict = self.parameters
        self.parameters = newList

        for par in toDeleteDict:
            self.pl_send_delete_parameter(par)
Пример #6
0
    def cb_initialize_plugin(self):

        self.block1 = DBlock('Progress')
        signal = DSignal('percent')
        self.block1.add_signal(signal)

        self.block2 = DBlock('Trigger')
        signal = DSignal('trigger')
        self.block2.add_signal(signal)

        self.block3 = DBlock('ResetTrigger')
        signal = DSignal('reset')
        self.block3.add_signal(signal)

        self.block4 = DBlock('ParaToSig')
        signal = DSignal('parameter')
        self.block4.add_signal(signal)

        blockList = [self.block1, self.block2, self.block3, self.block4]
        self.pl_send_new_block_list(blockList)

        self.para3 = DParameter('Choose', default=0, Regex='\d+')
        para_l = [self.para3]

        self.pl_send_new_parameter_list(para_l)

        self.pl_set_event_trigger_mode(True)

        self.initialized = True

        return True
Пример #7
0
 def pl_send_delete_parameter(self):
     self.assertRaises(pe.WrongType,
                       self.basePlugin.pl_send_delete_parameter, None)
     self.assertRaises(AttributeError,
                       self.basePlugin.pl_send_delete_parameter,
                       'DParameter')
     self.assertRaises(AttributeError,
                       self.basePlugin.pl_send_delete_parameter,
                       DParameter('DParameter'))
Пример #8
0
    def cb_initialize_plugin(self):
        # --------------------------------
        # Step 1: Create Widget
        # --------------------------------
        #   e.g. an empty QWidget will be used (remember that QtWidgets.QWidget() needs to be imported!)
        #   Call pl_set_widget_for_internal_usage() function to tell PaPI about your widget!
        widget = QtWidgets.QWidget()
        self.pl_set_widget_for_internal_usage(widget) # important and obligatory!

        # --------------------------------
        # Step 2: Read configuration items (startup cfg)
        # OPTIONAL
        # --------------------------------
        #  Please read the Documentation of pl_get_config_element() to understand what is happening here.
        #  e.g. a configuration item named 'offset' is read.
        offset = self.pl_get_config_element('offset')
        offset = float(offset) if offset is not None else 0

        # --------------------------------
        # Step 3: Define parameter that are offered to PaPI
        # OPTIONAL
        # Sub-Step 1: Create Parameter Object
        # Sub-Step 2: Send list of Parameter Objects created to PaPI
        # --------------------------------
        #   use self. to remember the parameter object in this class/context for own usage!
        #   e.g. parameter named parameterName1 is created!
        #   Refer to the Doc of DParameter to read about advanced usages!
        self. parameter1 = DParameter('parameterName1')
        self. parameter2 = DParameter('parameterName2')
        self.pl_send_new_parameter_list([self.parameter1, self.parameter1])

        # --------------------------------
        # Step 5: Developer and Plugin specific configuration
        # OPTIONAL
        # --------------------------------


        # --------------------------------
        # Step 6: Return Value
        # OBLIGATORY
        # Return True if the everything is alright!
        # False will lead to PaPI not starting this Plugin!
        # --------------------------------
        return True
Пример #9
0
    def cb_initialize_plugin(self):

        self.event_choice = DEvent('Choice')

        self.pl_send_new_event_list([self.event_choice])

        self.config = self.pl_get_current_config_ref()
        para_list = []

        self.para_texts = DParameter(
            'texts', default=self.config['option_texts']['value'])
        self.para_values = DParameter(
            'values', default=self.config['option_values']['value'])

        para_list.append(self.para_texts)
        para_list.append(self.para_values)

        self.pl_send_new_parameter_list(para_list)

        self.central_widget = QWidget()

        self.option_texts = []
        self.option_values = []
        self.pre_selected_index = None

        if isinstance(self.config['selected_index']['value'], str):
            if self.config['selected_index']['value'] != '':
                self.pre_selected_index = int(
                    self.config['selected_index']['value'])

        self.pl_set_widget_for_internal_usage(self.central_widget)
        self.layout = QVBoxLayout(self.central_widget)

        self.buttons = []

        self.set_option_texts(self.config['option_texts']['value'])
        self.set_option_values(self.config['option_values']['value'])

        self.update_widget()

        return True
Пример #10
0
    def test_parameters(self):
        dpl_1 = DPlugin()
        dpl_1.id = 1

        dp_1 = DParameter(1, 'parameter1')
        dp_1.id = 2
        dp_2 = DParameter(2, 'parameter2')
        dp_2.id = 3

        #check: add Parameter
        self.assertTrue(dpl_1.add_parameter(dp_1))
        self.assertTrue(dpl_1.add_parameter(dp_2))

        self.assertFalse(dpl_1.add_parameter(dp_1))
        self.assertFalse(dpl_1.add_parameter(dp_2))

        #Check: count of parameters

        self.assertEqual(len(dpl_1.get_parameters().keys()), 2)

        #Check: rm parameter

        self.assertTrue(dpl_1.rm_parameter(dp_1))
        self.assertEqual(len(dpl_1.get_parameters().keys()), 1)
        self.assertTrue(dpl_1.rm_parameter(dp_2))
        self.assertEqual(len(dpl_1.get_parameters().keys()), 0)
Пример #11
0
    def cb_initialize_plugin(self):
        # Creates Slider Change Event to connect to Parameters and send it
        self.event_change = DEvent('Change')
        self.pl_send_new_event_list([self.event_change])

        # get items of cfg for fist start of the Slider and cast to float
        self.value_max = self.pl_get_config_element('upper_bound',
                                                    castHandler=float)
        self.value_min = self.pl_get_config_element('lower_bound',
                                                    castHandler=float)
        self.tick_count = self.pl_get_config_element('step_count',
                                                     castHandler=float)
        self.init_value = self.pl_get_config_element('value_init',
                                                     castHandler=float)
        self.vertical = self.pl_get_config_element('vertical', castHandler=int)

        if self.vertical is not None:
            self.vertical = self.vertical == 1
        else:
            self.vertical = False

        # Create Parameter list for change slider parameter live and send it
        self.para_value_max = DParameter('MaxValue',
                                         default=self.value_max,
                                         Regex=pc.REGEX_SIGNED_FLOAT_OR_INT)
        self.para_value_min = DParameter('MinValue',
                                         default=self.value_min,
                                         Regex=pc.REGEX_SIGNED_FLOAT_OR_INT)
        self.para_tick_count = DParameter('StepCount',
                                          default=self.tick_count,
                                          Regex=pc.REGEX_SINGLE_INT)
        self.pl_send_new_parameter_list(
            [self.para_tick_count, self.para_value_max, self.para_value_min])
        # Set Slider widget for use in PaPI
        self.pl_set_widget_for_internal_usage(self.create_widget())
        # return successful initialization
        return True
Пример #12
0
    def pl_create_DParameter(self,
                             parameter_name,
                             default_value=0,
                             regex=None,
                             optional_object_to_store=None):
        """
        Creates a DParameter for use in a PaPI Plugin

        :param parameter_name: Name of parameter
        :type parameter_name: str
        :param default_value: Default value for GUI to display
        :param regex: Regex string for GUI to filter user inputs
        :param optional_object_to_store: optional object to store within parameter object
        :return: DParameter object or None in case of error
        """
        if isinstance(parameter_name, str):
            parameter = DParameter(parameter_name,
                                   default=default_value,
                                   Regex=regex,
                                   OptionalObject=optional_object_to_store)
            return parameter
        return None
Пример #13
0
    def cb_initialize_plugin(self):
        config = self.pl_get_current_config_ref()

        self.t = 0
        self.amax = int(config['amax']['value'])
        self.f = float(config['f']['value'])


        self.block1 = DBlock('SinMit_f1')
        signal = DSignal('f1_1')
        signal.dname = 'f1_f1DNAME'
        self.block1.add_signal(signal)

        self.block2 = DBlock('SinMit_f2')
        signal = DSignal('f2_1')
        self.block2.add_signal(signal)

        self.block3 = DBlock('SinMit_f3')
        signal = DSignal('f3_1')
        self.block3.add_signal(signal)
        signal = DSignal('f3_2')
        self.block3.add_signal(signal)
        signal = DSignal('f3_scalar')
        self.block3.add_signal(signal)


        #self.block4 = self.create_new_block('Sin4', [CORE_TIME_SIGNAL,'f3_1','f3_2', 'Scalar'], [ 'numpy_vec', 'numpy_vec', 'numpy_vec', 'int'], 100 )

        blockList = [self.block1, self.block2, self.block3]
        self.pl_send_new_block_list(blockList)

        self.para3 = DParameter('Frequenz Block SinMit_f3', default= 0.3, Regex='[0-9]+.[0-9]+')
        para_l = [self.para3]

        self.pl_send_new_parameter_list(para_l)

        print('Sinus started working')

        return True
Пример #14
0
    def cb_initialize_plugin(self):
        # --------------------------------
        # Step 0: Read documentation: http://tub-control.github.io/PaPI/
        # --------------------------------

        # --------------------------------
        # Step 1: Read configuration items (startup cfg)
        # OPTIONAL
        # --------------------------------
        #  Please read the Documentation of pl_get_config_element() to understand what is happening here.
        #  e.g. a configuration item named 'offset' is read.
        offset = self.pl_get_config_element('offset')
        offset = float(offset) if offset is not None else 0

        # --------------------------------
        # Step 2:Define blocks for output signals and define signals of blocks!
        # OPTIONAL
        # --------------------------------
        # Here: block called CPU_LOAD with 2 signals for Core1 and Core2
        blockLoad = DBlock('CPU_LOAD')
        sig_core1 = DSignal('Load_C1')
        sig_core2 = DSignal('Load_C2')

        blockLoad.add_signal(sig_core1)
        blockLoad.add_signal(sig_core2)

        self.pl_send_new_block_list([blockLoad])

        # --------------------------------
        # Step 3: Define parameter that are offered to PaPI
        # OPTIONAL
        # Sub-Step 1: Create Parameter Object
        # Sub-Step 2: Send list of Parameter Objects created to PaPI
        # --------------------------------
        #   use self. to remember the parameter object in this class/context for own usage!
        #   e.g. parameter named parameterName1 is created!
        #   Refer to the Doc of DParameter to read about advanced usages!
        self.parameter1 = DParameter('parameterName1')
        self.parameter2 = DParameter('parameterName2')
        self.pl_send_new_parameter_list([self.parameter1, self.parameter1])

        # --------------------------------
        # Step 4: Set the plugin trigger mode
        # OPTIONAL
        # In most cases for IOP you will leave it default, for DPP you will set it to true
        # Default will mean, that PaPI will decide on it.
        # --------------------------------
        self.pl_set_event_trigger_mode('default')

        # --------------------------------
        # Step 5: Developer and Plugin specific configuration
        # OPTIONAL
        # --------------------------------

        # --------------------------------
        # Step 6: Return Value
        # OBLIGATORY
        # Return True if the everything is alright!
        # False will lead to PaPI not starting this Plugin!
        # --------------------------------
        return True
Пример #15
0
    def cb_initialize_plugin(self):
        print('ORTD', self.__id__, ':process id', os.getpid())
        self.config = self.pl_get_current_config_ref()
        # open UDP
        self.HOST = self.config['address']['value']
        self.SOURCE_PORT = int(self.config['source_port']['value'])
        self.OUT_PORT = int(self.config['out_port']['value'])

        self.LOCALBIND_HOST = ''  # config['source_address']['value']     #CK

        self.sendOnReceivePort = True if self.config['SendOnReceivePort'][
            'value'] == '1' else False
        self.UseSocketIO = True if self.config['UseSocketIO'][
            'value'] == '1' else False

        if self.UseSocketIO:
            self.SocketIOPort = int(self.config['socketio_port']['value'])

        #self.sendOnReceivePort = True  # NOTE: remove this
        #self.UseSocketIO = True  # NOTE: remove this

        print("SendOnReceivePort = ", self.sendOnReceivePort)
        print("UseSocketIO = ", self.UseSocketIO)

        self.PAPI_SIMULINK_BLOCK = False

        self.separate = int(self.config['SeparateSignals']['value'])

        self.onlyInitialConfig = self.config['OnlyInitialConfig'][
            'value'] == '1'
        self.hasInitialConfig = False

        if (not self.sendOnReceivePort):
            # SOCK_DGRAM is the socket type to use for UDP sockets
            self.sock_parameter = socket.socket(socket.AF_INET,
                                                socket.SOCK_DGRAM)
            self.sock_parameter.setblocking(1)

        self.ControlBlock = DBlock('ControllerSignals')
        self.ControlBlock.add_signal(DSignal('ControlSignalReset'))
        self.ControlBlock.add_signal(DSignal('ControlSignalCreate'))
        self.ControlBlock.add_signal(DSignal('ControlSignalSub'))
        self.ControlBlock.add_signal(DSignal('ControllerSignalParameter'))
        self.ControlBlock.add_signal(DSignal('ControllerSignalClose'))
        self.ControlBlock.add_signal(DSignal('ActiveTab'))
        self.pl_send_new_block_list([self.ControlBlock])

        self.t = 0

        self.pl_set_event_trigger_mode(True)

        self.sock_recv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

        if (not self.sendOnReceivePort):
            self.sock_recv.bind((self.LOCALBIND_HOST, self.SOURCE_PORT))  # CK
            print("UDP_Plugin-plugin listening on: ", self.LOCALBIND_HOST, ":",
                  self.SOURCE_PORT)  #CK
        else:
            print("---- Using client UDP mode (not binding to a port) ----")

        self.sock_recv.settimeout(1)

        self.thread_goOn = True
        self.lock = threading.Lock()
        self.thread = threading.Thread(target=self.thread_execute)
        self.thread.start()

        if self.UseSocketIO:
            print("Using socket.io connection on port", self.SocketIOPort)

            self.thread_socket_goOn = True
            self.thread_socketio = threading.Thread(
                target=self.thread_socketio_execute)

        self.blocks = {}
        self.Sources = {}

        self.parameters = {}

        self.signal_values = {}

        self.block_id = 0

        self.config_complete = False
        self.config_buffer = {}

        self.timer = Timer(3, self.callback_timeout_timer)
        self.timer_active = False

        self.ConsoleBlock = DBlock('ConsoleSignals')
        self.ConsoleBlock.add_signal(DSignal('MainSignal'))
        self.pl_send_new_block_list([self.ConsoleBlock])

        self.consoleIn = DParameter('consoleIn', default='')
        self.pl_send_new_parameter_list([self.consoleIn])

        if self.UseSocketIO:
            self.thread_socketio.start()

        return True
Пример #16
0
    def cb_initialize_plugin(self):
        # ---------------------------
        # Read configuration
        # ---------------------------
        # Note: this cfg items have to exist!
        self.config = self.pl_get_current_config_ref()
        self.progress_value = self.config['progress_value']['value']
        self.trigger_value = self.config['trigger_value']['value']
        self.reset_trigger_value = self.config['reset_trigger_value']['value']
        self.show_percent = self.config['show_percent']['value'] == '1'
        self.show_current_max = self.config['show_current_max']['value'] == '1'
        self.round_digit = int(self.config['round_digit']['value'])

        self.min_range = float(self.config['min_rage']['value'])
        self.max_range = float(self.config['max_range']['value'])
        # --------------------------------
        # Create Widget
        # --------------------------------
        # Create Widget needed for this plugin

        self.progressbar = QProgressBar()
        self.progressbar.setRange(0, 100)
        self.progressbar.setTextVisible(True)
        self.progressbar.setValue(0)

        self.progressbar.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.progressbar.customContextMenuRequested.connect(
            self.show_context_menu)
        # This call is important, because the background structure needs to know the used widget!
        # In the background the qmidiwindow will becreated and the widget will be added

        self.set_value(self.min_range)

        self.pl_set_widget_for_internal_usage(self.progressbar)

        # ---------------------------
        # Create Parameters
        # ---------------------------
        para_list = []
        # create a parameter object

        self.para_trigger = DParameter('trigger', default=0)

        self.para_change_progress_value = DParameter(
            'ProgressValue', default=self.progress_value)
        self.para_change_reset_value = DParameter(
            'ResetValue', default=self.reset_trigger_value)
        self.para_change_trigger_value = DParameter('TriggerValue',
                                                    default=self.trigger_value)

        self.para_change_min_range = DParameter(
            'MinRange',
            default=self.min_range,
            Regex=pc.REGEX_SIGNED_FLOAT_OR_INT)
        self.para_change_max_range = DParameter(
            'MaxRange',
            default=self.max_range,
            Regex=pc.REGEX_SIGNED_FLOAT_OR_INT)

        self.para_show_percent = DParameter(
            'ShowPercent',
            default=self.config['show_percent']['value'],
            Regex=pc.REGEX_BOOL_BIN)
        self.para_show_current_max = DParameter(
            'ShowCurrentMax',
            default=self.config['show_current_max']['value'],
            Regex=pc.REGEX_BOOL_BIN)

        para_list.append(self.para_trigger)
        para_list.append(self.para_change_progress_value)
        para_list.append(self.para_change_reset_value)
        para_list.append(self.para_change_trigger_value)
        para_list.append(self.para_change_min_range)
        para_list.append(self.para_change_max_range)
        para_list.append(self.para_show_percent)
        para_list.append(self.para_show_current_max)

        # build parameter list to send to Core
        self.pl_send_new_parameter_list(para_list)

        return True
Пример #17
0
    def cb_initialize_plugin(self):
        """
        Function initiate layer 0

        :param config:
        :return:
        """
        self.config = self.pl_get_current_config_ref()


        self.startup_config = self.pl_get_current_config()

        # ---------------------------
        # Read configuration
        # ---------------------------
        int_re = re.compile(r'(\d+)')
        self.__show_legend__ = self.config['show_legend']['value'] == '1'
        self.__show_grid_x__ = self.config['x-grid']['value'] == '1'
        self.__show_grid_y__ = self.config['y-grid']['value'] == '1'
        self.__rolling_plot__ = self.config['rolling_plot']['value'] == '1'

        self.__plot_over__ = self.pl_get_config_element('plot_over')

        self.__colors_selected__ = int_re.findall(self.config['color']['value'])
        self.__styles_selected__ = int_re.findall(self.config['style']['value'])
        self.__width_selected__  = int_re.findall(self.config['width']['value'])

        self.__buffer_size__ = int(int_re.findall(self.config['buffersize']['value'])[0])

        self.__downsampling_rate__ = int(int_re.findall(self.config['downsampling_rate']['value'])[0])
        self.__downsampling_rate_start__ = 0

        self.__bgcolor = self.pl_get_config_element('bgcol')


        pos_re = re.compile(r'([0-9]+)')
        self.__legend_position__= pos_re.findall( self.pl_get_config_element('legend_position') )

        # ----------------------------
        # Set internal variables
        # ----------------------------

        self.__tbuffer__ = collections.deque([0.0] * 0, self.__buffer_size__)

        # ----------------------------
        # Set internal variables used for single timestamp plotting (stp)
        # ----------------------------

        self.__stp_min_x = 0
        self.__stp_max_x = 0

        self.__stp_min_y = 0
        self.__stp_max_y = 1

        self.__stp_active__ = False


        # --------------------------------
        # Create Layout and labels
        # --------------------------------

        self.central_widget = QWidget()
        self.central_widget.setContentsMargins(0,0,0,0)

        self.label_widget = QWidget()
        self.label_widget.setContentsMargins(0,0,0,0)

        self.verticalLayout = QVBoxLayout()
        self.verticalLayout.setContentsMargins(0,0,0,0)
        self.verticalLayout.setSpacing(0)

        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setContentsMargins(0,0,0,0)
        self.horizontalLayout.setSpacing(0)

        self.space_label = QLabel()
        self.space_label.setMargin(0)
        self.space_label.setAlignment(QtCore.Qt.AlignJustify)
        self.space_label.setStyleSheet("QLabel { background-color : black; color : grey;"
                                      "border : 0px solid black ; border-bottom-width : 5px }")

        self.time_label = QLabel()
        self.time_label.setMargin(0)
        self.time_label.setAlignment(QtCore.Qt.AlignJustify)
        self.time_label.setStyleSheet("QLabel { background-color : black; color : grey;"
                                      "border : 0px solid black ; border-bottom-width : 5px }")
        self.time_label.setMaximumWidth(55)


        self.unit_label = QLabel()
        self.unit_label.setMargin(0)
        self.unit_label.setAlignment(QtCore.Qt.AlignLeft)
        self.unit_label.setStyleSheet("QLabel { background-color : black; color : grey;"
                                      "border : 0px solid black ; border-bottom-width : 5px }")

        self.unit_label.setText('[s]')

        self.central_widget.setLayout(self.verticalLayout)
        self.label_widget.setLayout(self.horizontalLayout)

        # --------------------------------
        # Create PlotWidget
        # --------------------------------

        self.__plotWidget__ = PlotWidget()
        self.__plotWidget__.yRangeChanged.connect(self.plot_yrange_changed)
        self.__plotWidget__.setWindowTitle('PlotPerformanceTitle')

        self.__plotWidget__.showGrid(x=self.__show_grid_x__, y=self.__show_grid_y__)
        self.__plotWidget__.getPlotItem().getViewBox().disableAutoRange()
        self.__plotWidget__.getPlotItem().getViewBox().setYRange(0,6)

        self.__plotWidget__.getPlotItem().setDownsampling(auto=True)

        # ------------------------------
        # Add Widget to Layout
        # ------------------------------
        self.horizontalLayout.addWidget(self.space_label)
        self.horizontalLayout.addWidget(self.time_label)
        self.horizontalLayout.addWidget(self.unit_label)

        self.verticalLayout.addWidget(self.__plotWidget__)
        self.verticalLayout.addWidget(self.label_widget)


        if not self.__papi_debug__:
#            self.pl_set_widget_for_internal_usage(self.__plotWidget__)
            self.pl_set_widget_for_internal_usage(self.central_widget)

        self.__plotWidget__.getPlotItem().getViewBox().enableAutoRange(axis=pg.ViewBox.YAxis, enable=False)
        self.__plotWidget__.getPlotItem().getViewBox().enableAutoRange(axis=pg.ViewBox.XAxis, enable=False)

        self.__plotWidget__.getPlotItem().getViewBox().setMouseEnabled(x=False, y=True)

        # ---------------------------
        # Create Parameters
        # ---------------------------

        self.__parameters__['x-grid'] = \
            DParameter('x-grid', self.config['x-grid']['value'], Regex='^(1|0){1}$')
        self.__parameters__['y-grid'] = \
            DParameter('y-grid', self.config['y-grid']['value'], Regex='^(1|0){1}$')

        self.__parameters__['color'] = \
            DParameter('color', self.config['color']['value'], Regex='^\[(\s*\d\s*)+\]')
        self.__parameters__['style'] = \
            DParameter('style', self.config['style']['value'], Regex='^\[(\s*\d\s*)+\]')
        self.__parameters__['width'] = \
            DParameter('width', self.config['width']['value'], Regex='^\[(\s*\d\s*)+\]')

        self.__parameters__['rolling'] = \
            DParameter('rolling', self.config['rolling_plot']['value'], Regex='^(1|0){1}')

        self.__parameters__['downsampling_rate'] = \
            DParameter('downsampling_rate', self.__downsampling_rate__, Regex='^\d+$')
        self.__parameters__['buffersize'] = \
            DParameter('buffersize', self.__buffer_size__, Regex='^\d+$')

        self.__parameters__['yRange'] = \
            DParameter('yRange', self.config['yRange']['value'],  Regex='^\[(\d+\.\d+)\s+(\d+\.\d+)\]$')

        self.__parameters__['show_legend'] = \
            DParameter('show_legend', self.config['show_legend']['value'],  Regex=pc.REGEX_BOOL_BIN)

        self.__parameters__['legend_position'] = \
            DParameter('legend_position', self.pl_get_config_element('legend_position'), Regex='\(([0-9]+),([0-9]+)\)')
        self.__parameters__['legend_position'].connect(self.parameter_callback_legend_position)

        if not self.__papi_debug__:
            self.pl_send_new_parameter_list(list(self.__parameters__.values()))

        # ---------------------------
        # Create Legend
        # ---------------------------

        if self.__show_legend__:
            self.__legend__ = self.__plotWidget__.getPlotItem().addLegend()
        else:
            self.__legend__ = None


        self.__last_time__ = current_milli_time()

        self.__update_intervall__ = 20  # in milliseconds
        self.__last_plot_time__   = 0

        self.setup_context_menu()
        self.__plotWidget__.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.__plotWidget__.customContextMenuRequested.connect(self.showContextMenu)

        self.use_range_for_y(self.config['yRange']['value'])

        # ----------------------------
        # Initiate for default plotting
        # ----------------------------
        color_rgb = self.__bgcolor[1:-1]
        color_rgb = color_rgb.split(',')
        self.__plotWidget__.setBackground([int(color_rgb[0]),int(color_rgb[1]),int(color_rgb[2])])

        self.initiate_update_plot()
        return True
Пример #18
0
    def cb_initialize_plugin(self):
        """
        Function initiate layer 0

        :param config:
        :return:
        """
        self.config = self.pl_get_current_config_ref()
        # ---------------------------
        # Read configuration
        # ---------------------------
        int_re = re.compile(r'(\d+)')

        self.__show_grid_x__ = self.config['x-grid']['value'] == '1'
        self.__show_grid_y__ = self.config['y-grid']['value'] == '1'

        self.__colors_selected__ = int_re.findall(self.config['color']['value'])
        self.__styles_selected__ = int_re.findall(self.config['style']['value'])

        # ----------------------------
        # Set internal variables used for single timestamp plotting (stp)
        # ----------------------------

        self.__plotWidget__ = pg.PlotWidget()

        self.__plotWidget__.setWindowTitle('StaticPlot')

        self.__plotWidget__.showGrid(x=self.__show_grid_x__, y=self.__show_grid_y__)
        self.__plotWidget__.getPlotItem().getViewBox().disableAutoRange()
        self.__plotWidget__.getPlotItem().getViewBox().setYRange(0,6)

        self.pl_set_widget_for_internal_usage(self.__plotWidget__)

        # ---------------------------
        # Create Parameters
        # ---------------------------

        self.__parameters__['x-grid'] = \
            DParameter('x-grid', '[0 1]', Regex='^(1|0){1}$')
        self.__parameters__['y-grid'] = \
            DParameter('y-grid', '[0 1]', Regex='^(1|0){1}$')

        self.__parameters__['color'] = \
            DParameter('color', self.config['color']['value'], Regex='^\[(\s*\d\s*)+\]')
        self.__parameters__['style'] = \
            DParameter('style', self.config['style']['value'], Regex='^\[(\s*\d\s*)+\]')

        self.__parameters__['yRange'] = \
            DParameter('yRange', '[0,1]',  Regex='^\[(\d+\.\d+)\s+(\d+\.\d+)\]$')

        self.pl_send_new_parameter_list(list(self.__parameters__.values()))

        # ---------------------------
        # Create Legend
        # ---------------------------
        if self.config['show_legend']['value']=='1':
            self.__legend__ = pg.LegendItem((100, 40), offset=(40, 1))  # args are (size, offset)
            self.__legend__.setParentItem(self.__plotWidget__.graphicsItem())

        self.setup_context_menu()
        self.__plotWidget__.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.__plotWidget__.customContextMenuRequested.connect(self.showContextMenu)

        self.read_json_data()

        return True