예제 #1
0
class FtpPanel(wx.Panel):
    def __init__(self, parent):
        super().__init__(parent)
        self.frame = parent

        self.ftp = None
        self.paths = []

        self.main_sizer = wx.BoxSizer(wx.VERTICAL)
        self.create_ui()
        self.SetSizer(self.main_sizer)
        pub.subscribe(self.update, 'update')
        pub.subscribe(self.update_status, 'update_status')

    def create_ui(self):
        size = (150, -1)
        connect_sizer = wx.BoxSizer()
        # host, username, password, port, connect button
        host_lbl = wx.StaticText(self, label='Host:')
        connect_sizer.Add(host_lbl, 0, wx.ALL | wx.CENTER, 5)
        self.host = wx.TextCtrl(self, size=size)
        connect_sizer.Add(self.host, 0, wx.ALL, 5)

        user_lbl = wx.StaticText(self, label='Username:'******'Password:'******'Port:')
        connect_sizer.Add(port_lbl, 0, wx.ALL | wx.CENTER, 5)
        self.port = wx.TextCtrl(self, value='21', size=(50, -1))
        connect_sizer.Add(self.port, 0, wx.ALL, 5)

        connect_btn = wx.Button(self, label='Connect')
        connect_btn.Bind(wx.EVT_BUTTON, self.on_connect)
        connect_sizer.Add(connect_btn, 0, wx.ALL, 5)
        self.main_sizer.Add(connect_sizer)

        self.status = wx.TextCtrl(self, style=wx.TE_MULTILINE)
        self.main_sizer.Add(self.status, 1, wx.ALL | wx.EXPAND, 5)

        folder_ico = wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_TOOLBAR,
                                              (16, 16))
        file_ico = wx.ArtProvider.GetBitmap(wx.ART_HELP_PAGE, wx.ART_TOOLBAR,
                                            (16, 16))

        self.remote_server = ObjectListView(self,
                                            style=wx.LC_REPORT
                                            | wx.SUNKEN_BORDER)
        self.remote_server.Bind(wx.EVT_LIST_ITEM_ACTIVATED,
                                self.on_change_directory)
        self.remote_server.AddNamedImages('folder', smallImage=folder_ico)
        self.remote_server.AddNamedImages('file', smallImage=file_ico)
        self.remote_server.SetEmptyListMsg("Not Connected")
        self.main_sizer.Add(self.remote_server, 2, wx.ALL | wx.EXPAND, 5)
        self.update_ui()

    def on_connect(self, event):
        host = self.host.GetValue()
        username = self.user.GetValue()
        password = self.password.GetValue()
        port = int(self.port.GetValue())
        self.frame.SetStatusText('Connecting...', 1)

        if host and username and password and port:
            self.ftp = FTP()
            try:
                self.ftp.disconnect()
            except:
                pass
            args = [self.ftp, host, port, username, password]
            self.thread = threading.Thread(target=self.connect_thread,
                                           args=args)
            self.thread.daemon = True
            self.thread.start()

    def change_dir_thread(self, ftp, folder):
        """
        This method should only be run using a thread
        """
        ftp.change_directory(folder)

    def connect_thread(self, ftp, host, port, username, password):
        """
        This method should only be run using a thread
        """
        ftp.connect(host, port, username, password)

    def image_getter(self, path):
        """
        Helper method to determine which image to use in
        the ObjectListView widget
        """
        if path.folder:
            return "folder"
        else:
            return "file"

    def on_change_directory(self, event):
        current_selection = self.remote_server.GetSelectedObject()
        if current_selection.folder:
            self.thread = threading.Thread(
                target=self.change_dir_thread,
                args=[self.ftp, current_selection.filename])
            self.thread.daemon = True
            self.thread.start()

    def update(self, paths):
        """
        Called by pubsub / thread
        """
        self.paths = paths
        self.update_ui()

    def update_status(self, message):
        """
        Called by pubsub / thread
        """
        ts = time.strftime(time.strftime('%H:%M:%S', time.gmtime(time.time())))
        if '\n' in message:
            for line in message.split('\n'):
                line = f'{ts} {line}'
                self.status.WriteText(f'{line}\n')
        else:
            message = f'{ts} {message}'
            self.status.WriteText(f'{message}\n')

    def update_ui(self):
        self.remote_server.SetColumns([
            ColumnDefn("File/Folder",
                       "left",
                       800,
                       "filename",
                       imageGetter=self.image_getter),
            ColumnDefn("Filesize", "right", 80, "size"),
            ColumnDefn("Last Modified", "left", 150, "last_modified")
        ])
        self.remote_server.SetObjects(self.paths)
예제 #2
0
class DataCoefPanel(wx.Frame):
    def __init__(self, parent):
        pos = wx.DefaultPosition
        size = (377, 282)
        if _platform == 'darwin':
            style = wx.DEFAULT_FRAME_STYLE
        else:
            style = (wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX
                     | wx.CLIP_CHILDREN | wx.FRAME_FLOAT_ON_PARENT)
        wx.Frame.__init__(self,
                          wx.GetApp().TopWindow, wx.ID_ANY,
                          p4R.Application_name + " - Strain and DW Values",
                          pos, size, style)
        self.Bind(wx.EVT_CLOSE, self.on_close)
        self.SetIcon(prog_icon.GetIcon())

        pnl = wx.Panel(self)

        def handleCellEditStarting(evt):
            currentCol = self.GetOLVColClicked(evt)
            if currentCol == 0:
                evt.Veto()

        def handleCellEditFinishing(evt):
            currentline = evt.rowIndex
            currentCol = self.GetOLVColClicked(evt)
            val = evt.cellValue
            self.update_param_dict(currentline, currentCol, val)

        self.list = ObjectListView(pnl,
                                   sortable=False,
                                   style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                   size=(450, 500))
        self.list.cellEditMode = ObjectListView.CELLEDIT_SINGLECLICK
        self.list.handleStandardKeys = False
        self.list.SetEmptyListMsg("This database has no rows")
        self.list.SetEmptyListMsgFont(
            wx.FFont(24, wx.DEFAULT, faceName="Tekton"))

        if _platform == "linux" or _platform == "linux2":
            self.width_name = 120
        else:
            self.width_name = 80
        self.width = 70
        self.widthCheck = 25
        self.col2checkstatus = {1: 0, 2: 0}

        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list)
        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnItemSelected, self.list)
        self.list.Bind(EVT_CELL_EDIT_STARTING, handleCellEditStarting)
        self.list.Bind(EVT_CELL_EDIT_FINISHING, handleCellEditFinishing)

        mastersizer = wx.BoxSizer(wx.HORIZONTAL)
        mastersizer.Add(self.list, 0, wx.ALL | wx.EXPAND, 5)

        pub.subscribe(self.on_fill_list, pubsub_Fill_List_coef)
        pub.subscribe(self.on_open_window, pubsub_Open_data_coef_Window)

        #        self.Bind(wx.EVT_SIZE, self.OnSize)
        pnl.SetSizer(mastersizer)
        pnl.Layout()
        pnl.Fit()
        self.InitializeList()

    def on_open_window(self):
        self.CenterOnParent()

    def on_close(self, event):
        pub.sendMessage(pubsub_Hide_Show_data_coef, test=1)

    def InitializeList(self):
        temp = []
        ic_ = prog_icon_curve.GetBitmap()
        ImageIndex = self.list.AddImages(ic_)
        self.list.AddNamedImages("name", ic_)

        temp.append(
            ColumnDefn(headercolumnname[0],
                       "center",
                       self.width_name,
                       valueGetter=headercolumnname[0],
                       imageGetter=ImageIndex,
                       maximumWidth=self.width_name))
        temp.append(
            ColumnDefn(headercolumnname[1],
                       "center",
                       self.width,
                       valueGetter="sp",
                       maximumWidth=self.width,
                       checkStateGetter="state1"))
        temp.append(
            ColumnDefn(headercolumnname[3],
                       "center",
                       self.width,
                       valueGetter="dwp",
                       maximumWidth=self.width,
                       checkStateGetter="state2"))
        self.list.SetColumns(temp)

    def on_fill_list(self):
        a = P4Rm()
        self.Freeze()
        list_temp = []
        roundval = 3
        if a.AllDataDict['model'] == 2:
            for i in range(7):
                name = asym_pv[i]
                val_sp = str(round(a.ParamDict['sp'][i], roundval))
                val_dwp = str(round(a.ParamDict['dwp'][i], roundval))
                check_sp = a.ParamDict['state_sp'][i]
                check_dwp = a.ParamDict['state_dwp'][i]
                list_temp.append(
                    CoefListData(name, val_sp, check_sp, val_dwp, check_dwp))
        else:
            len_sp = len(a.ParamDict['sp'])
            len_dwp = len(a.ParamDict['dwp'])
            if len_sp > len_dwp:
                num = len_sp
            else:
                num = len_dwp
            for i in range(num):
                if i < len_sp:
                    val_sp = str(round(a.ParamDict['sp'][i], roundval))
                    check_sp = a.ParamDict['state_sp'][i]
                else:
                    val_sp = ""
                    check_sp = True
                if i < len_dwp:
                    val_dwp = str(round(a.ParamDict['dwp'][i], roundval))
                    check_dwp = a.ParamDict['state_dwp'][i]
                else:
                    val_dwp = ""
                    check_dwp = True
                list_temp.append(
                    CoefListData(i + 1, val_sp, check_sp, val_dwp, check_dwp))
        self.list.SetObjects(list_temp)
        self.Thaw()

    def update_param_dict(self, currentline, currentCol, val):
        if currentCol == 1:
            P4Rm.ParamDict['sp'][currentline] = float(val)
        if currentCol == 2:
            P4Rm.ParamDict['dwp'][currentline] = float(val)
        self.read_and_update()

    def read_and_update(self):
        pub.sendMessage(pubsub_update_sp_dwp_eta)
        b = Calcul4Radmax()
        b.on_update()

    def OnItemSelected(self, event):
        if 'phoenix' in wx.PlatformInfo:
            currentline = event.Index
        else:
            currentline = event.m_itemIndex
        currentCol = self.GetOLVColClicked(event)
        if currentline == -1:
            self.Freeze()
            if currentCol == 1 or currentCol == 2:
                if self.col2checkstatus[currentCol] == 0:
                    val = False
                    self.col2checkstatus[currentCol] = 1
                else:
                    val = True
                    self.col2checkstatus[currentCol] = 0
                objects = self.list.GetObjects()
                if currentCol == 1:
                    for obj in objects:
                        obj.state1 = val
                elif currentCol == 2:
                    for obj in objects:
                        obj.state2 = val
                self.list.SetObjects(objects)
                self.list.RefreshObject(objects)
            self.Thaw()
        if currentCol == 1 or currentCol == 2:
            a = P4Rm()
            objects = self.list.GetObjects()
            len_sp = len(a.ParamDict['sp'])
            len_dwp = len(a.ParamDict['dwp'])
            check_sp = []
            check_dwp = []
            i = 0
            for obj in objects:
                if i < len_sp:
                    check_sp.append(obj.state1)
                if i < len_dwp:
                    check_dwp.append(obj.state2)
                i += 1
            P4Rm.ParamDict['state_sp'] = check_sp
            P4Rm.ParamDict['state_dwp'] = check_dwp

    def GetOLVColClicked(self, event):
        """
        [email protected]  2011-01 Jan-13
        For use with a 3rd party module named ObjectListView
        used with wxPython.
        """

        spt = wx.GetMousePosition()
        fpt = self.list.ScreenToClient(spt)
        x, y = fpt
        last_col = 0
        for col in range(self.list.GetColumnCount()):
            col_width = self.list.GetColumnWidth(col)
            left_pxl_col = last_col
            right_pxl_col = last_col + col_width - 1

            if left_pxl_col <= x <= right_pxl_col:
                col_selected = col
                break
            col_selected = None
            last_col = last_col + col_width
        return col_selected

    def OnSize(self, event):
        sizet = event.GetSize()
        print("%s, %s" % (sizet.width, sizet.height))
        event.Skip()