Пример #1
0
    def __init__(self, sequence):

        self.__sequence = sequence
        self.__index = 0

        img = sequence[0][0]
        ImageButton.__init__(self, img, img)
        self.connect_clicked(self.__on_click)
Пример #2
0
 def __init__(self, label = "", icon = None):
 
     self.__label = label
     self.__icon = icon
     
     ImageButton.__init__(self, theme.mb_button_1, theme.mb_button_2)
     w, h = text_extents(label, theme.font_mb_plain)
     self.set_size(w + 24, h + 24)
     
     self.add_overlay(self.__icon_overlay)
     self.add_overlay(self.__text_overlay)
Пример #3
0
    def createUI(self):
        self.summarization_label = QtGui.QLabel("Summarize by:")

        self.available_methods_list_widget = QtGui.QListWidget()
        self.selected_methods_list_widget = QtGui.QListWidget()

        path_to_images_folder = os.path.join(os.getcwd(),"Images") if "OINKModules" not in os.getcwd() else os.path.join(os.getcwd(),"..","Images")

        self.select_method_button = ImageButton(os.path.join(path_to_images_folder,"rightarrow.png"),25,25)
        self.deselect_method_button = ImageButton(os.path.join(path_to_images_folder,"leftarrow.png"),25,25)

        #self.move_up_button = ImageButton(os.path.join(path_to_images_folder,"uparrow.png"),25,25)
        #self.move_down_button = ImageButton(os.path.join(path_to_images_folder,"downarrow.png"),25,25)

        self.summarize_button = ImageButton(os.path.join(path_to_images_folder,"checkmark_green.png"),25,25)
        self.summarize_button.setToolTip("Click to summarize")

        self.reset_button = ImageButton(os.path.join(path_to_images_folder,"cross.png"),25,25)
        self.reset_button.setToolTip("Click to reset the summarization options")
        
        self.summary_table = CopiableQTableWidget(0,0)


        select_buttons_layout = QtGui.QVBoxLayout()
        select_buttons_layout.addStretch(2)
        select_buttons_layout.addWidget(self.select_method_button,0)
        select_buttons_layout.addWidget(self.deselect_method_button,0)
        select_buttons_layout.addStretch(2)

        finish_buttons_layout = QtGui.QVBoxLayout()
        finish_buttons_layout.addStretch(2)
        finish_buttons_layout.addStretch(2)
        #finish_buttons_layout.addWidget(self.move_up_button,0)
        #finish_buttons_layout.addWidget(self.move_down_button,0)
        finish_buttons_layout.addStretch(2)
        finish_buttons_layout.addWidget(self.summarize_button,0)
        finish_buttons_layout.addWidget(self.reset_button,0)
        finish_buttons_layout.addStretch(2)

        selector_layout = QtGui.QHBoxLayout()
        selector_layout.addWidget(self.available_methods_list_widget,1)
        selector_layout.addLayout(select_buttons_layout, 1)
        selector_layout.addWidget(self.selected_methods_list_widget,1)
        selector_layout.addLayout(finish_buttons_layout, 1)

        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.summarization_label)
        layout.addLayout(selector_layout)
        layout.addWidget(self.summary_table)

        self.setLayout(layout)
Пример #4
0
    def initializeGL(self):
        #self.autoBufferSwap(False)

        # Initialize the context
        gl.glClearColor(0.94, 0.94, 0.0, 1)
        gl.glEnable(gl.GL_LINE_STIPPLE)
        gl.glEnable(gl.GL_TEXTURE_2D)

        # self.badgeScreen.init("")
        self.initMTex = gl.glGenTextures(1)
        gl.glBindTexture(gl.GL_TEXTURE_2D, self.initMTex)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER,
                           gl.GL_LINEAR)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER,
                           gl.GL_LINEAR)
        gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA,
                        self.initMImg.get_width(), self.initMImg.get_height(),
                        0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE,
                        pygame.image.tostring(self.initMImg, "RGBA", 1))
        # Avatar Female
        self.initFTex = gl.glGenTextures(1)
        gl.glBindTexture(gl.GL_TEXTURE_2D, self.initFTex)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER,
                           gl.GL_LINEAR)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER,
                           gl.GL_LINEAR)
        gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA,
                        self.initFImg.get_width(), self.initFImg.get_height(),
                        0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE,
                        pygame.image.tostring(self.initFImg, "RGBA", 1))

        self.welcomeTex = gl.glGenTextures(1)
        gl.glBindTexture(gl.GL_TEXTURE_2D, self.welcomeTex)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER,
                           gl.GL_LINEAR)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER,
                           gl.GL_LINEAR)
        gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA,
                        self.welcomeImg.get_width(),
                        self.welcomeImg.get_height(), 0, gl.GL_RGBA,
                        gl.GL_UNSIGNED_BYTE,
                        pygame.image.tostring(self.welcomeImg, "RGBA", 1))

        self.buttonM = ImageButton(self.initMImg, self.initMTex, 1090, 535)
        self.buttonF = ImageButton(self.initFImg, self.initFTex, 444, 535)
        self.buttonM.enable()
        self.buttonF.enable()
Пример #5
0
    def __init__(self):
    
        self.__title = ""
        self.__mode = self.MODE_NORMAL
    
        Widget.__init__(self)
        self.connect_clicked(lambda *a:self.emit_event(self.EVENT_MENU))
        
        self.__btn_switch = ImageButton(theme.btn_window_switch_1,
                                        theme.btn_window_switch_2)
        self.__btn_switch.connect_clicked(
                                  lambda *a:self.emit_event(self.EVENT_SWITCH))
        self.add(self.__btn_switch)

        self.__btn_close = ImageButton(theme.btn_window_close_1,
                                       theme.btn_window_close_2)
        self.__btn_close.connect_clicked(
                                   lambda *a:self.emit_event(self.EVENT_CLOSE))
        self.add(self.__btn_close)

        self.__btn_back = ImageButton(theme.btn_window_back_1,
                                      theme.btn_window_back_2)
        self.__btn_back.connect_clicked(
                                   lambda *a:self.emit_event(self.EVENT_CLOSE))
        self.add(self.__btn_back)
        self.__btn_back.set_visible(False)
Пример #6
0
    def createUI(self):
        self.fsns_label = QtGui.QLabel("FSNs\Item IDs:")
        self.fsns_text_edit = QtGui.QTextEdit()
        self.fsns_text_edit.setToolTip("Paste a list of FSNs or Item IDs here,\nseparated either by a new line or a comma.")
        self.type_selector = QtGui.QComboBox()
        self.type_selector.addItems(["FSN(s)", "Item ID(s)"])
        self.type_selector.setToolTip("Select the list type. Are you searching by FSNs or Item IDs?")
        self.type_selector.setCurrentIndex(0)
        self.output_table = CopiableQTableWidget(0, 0)
        self.progress_bar = ProgressBar()
        self.fetch_data_button = ImageButton(os.path.join("Images","find.png"),64,64,os.path.join("Images","find_mouseover.png"))
        self.fetch_data_button.setFlat(True)
        form_searcher_layout = QtGui.QVBoxLayout()
        form_searcher_layout.addWidget(self.fsns_label, 0)
        form_searcher_layout.addWidget(self.fsns_text_edit, 2)

        self.seeker_button = ImageButton(os.path.join("Images","seeker.png"),100,100,os.path.join("Images","seeker_mouseover.png"))
        self.seeker_button.setFlat(True)
        self.seeker_button.setToolTip("You're a Wizard, Harry.")
        
        form_options_layout = QtGui.QVBoxLayout()
        form_options_layout.addStretch(1)
        form_options_layout.addWidget(self.seeker_button,1, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom)
        form_options_layout.addStretch(2)
        form_options_layout.addWidget(self.type_selector, 0)
        form_options_layout.addWidget(self.fetch_data_button, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom)

        form_layout = QtGui.QHBoxLayout()
        form_layout.addLayout(form_searcher_layout, 3)
        form_layout.addLayout(form_options_layout, 0)

        layout = QtGui.QVBoxLayout()
        layout.addLayout(form_layout, 0)
        layout.addWidget(self.output_table, 3)
        layout.addWidget(self.progress_bar, 0)

        self.setLayout(layout)
        self.setWindowTitle("Seeker: The FSN Finding Tool")
        self.setWindowIcon(QtGui.QIcon(os.path.join('Images','PORK_Icon.png')))
        self.show()
Пример #7
0
    def createUI(self):
        """"""
        path_to_images = MOSES.getPathToImages()
        self.raw_data_uploader_button = ImageButton(
                                                os.path.join(path_to_images,"upload_raw_data.png"),
                                                48,
                                                48, os.path.join(path_to_images,"upload_raw_data_mouseover.png"))
        self.tna_viewer_button = ImageButton(
                                                os.path.join(path_to_images,"tna.png"),
                                                48,
                                                48,
                                                os.path.join(path_to_images,"tna_mouseover.png")
                                                )
        self.piggybank_button = ImageButton(
                                                os.path.join(path_to_images,"piggybank.png"),
                                                48,
                                                48,
                                                os.path.join(path_to_images,"piggybank_mouseover.png")
                                                )
        self.seeker_button = ImageButton(
                                                os.path.join(path_to_images,"find.png"),
                                                48,
                                                48,
                                                os.path.join(path_to_images,"find_mouseover.png")
                                                )

        self.taunter = Taunter()
        self.bacon_icon = ImageButton(
                                                os.path.join(path_to_images,"quality.png"),
                                                150,
                                                150,
                                                os.path.join(path_to_images,"quality_mouseover.png")
                                                )
        self.bacon_icon.setToolTip("Get to work, Poozers.")
        
        row_1 = QtGui.QHBoxLayout()
        row_1.addWidget(self.raw_data_uploader_button)
        row_1.addWidget(self.tna_viewer_button)
        row_1.addWidget(self.piggybank_button)
        row_1.addWidget(self.seeker_button)
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.bacon_icon,0,QtCore.Qt.AlignHCenter)
        layout.addLayout(row_1,1)
        layout.addWidget(self.taunter,0)

        self.main_widget = QtGui.QWidget()
        self.main_widget.setLayout(layout)
        self.setCentralWidget(self.main_widget)
        self.setWindowTitle("BACON - Version %s. Server: %s. User: %s (%s)."%(version(), MOSES.getHostID(), self.user_id,MOSES.getEmpName(self.user_id) if self.user_id != "bigbrother" else "Administrator"))
        icon_file_name_path = os.path.join(path_to_images,'PORK_Icon.png')
        self.setWindowIcon(QtGui.QIcon(icon_file_name_path))
        self.show()
Пример #8
0
    def createUI(self):
        self.fsn_text_edit = FSNTextEdit()
        self.override_date = FormattedDateEdit()
        self.override_logo = ImageButton(
            os.path.join(MOSES.getPathToImages(), "override.png"), 64, 64,
            os.path.join(MOSES.getPathToImages(), "override_mouseover.png"))
        self.override_logo.setFlat(True)
        self.override_logo.setToolTip(
            "If you can't do something once, do it again, and again.")
        self.override_button = QtGui.QPushButton("Override")
        self.override_comment_label = QtGui.QLabel("Reason:")
        self.override_comment_field = QtGui.QLineEdit()
        self.override_comment_field.setToolTip(
            "Enter a reason for the override here.")
        self.data_tabulator = CopiableQTableWidget()

        column2 = QtGui.QVBoxLayout()
        column2.addWidget(self.override_logo, 1,
                          QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop)
        column2.addWidget(self.override_date, 1)
        column2.addWidget(self.override_button, 1)
        column2.addWidget(self.override_comment_label, 1)
        column2.addWidget(self.override_comment_field, 1)
        column2.addStretch(2)

        options_layout = QtGui.QHBoxLayout()
        options_layout.addWidget(self.fsn_text_edit, 2, QtCore.Qt.AlignTop)
        options_layout.addLayout(column2, 1)

        layout = QtGui.QVBoxLayout()
        layout.addLayout(options_layout, 1)
        layout.addWidget(self.data_tabulator, 3)

        self.setLayout(layout)
        self.setWindowIcon(
            QtGui.QIcon(os.path.join(MOSES.getPathToImages(),
                                     "PORK_Icon.png")))
        self.setWindowTitle("Override Tool")
        self.show()
Пример #9
0
def main():
    # initialize pygame, set screen and title
    pygame.init()
    pygame.display.set_caption(s.caption)
    screen = pygame.display.set_mode(s.screen_size, 0, 0)

    # build map list
    global maps
    maps = build_map(s)
    num = 0
    for m in maps:
        num += 1

    # build image list
    for i in range(0, s.map_size):
        x = int(
            i % s.game_col) * s.grid_size + (s.grid_size - s.scale_size[0]) / 2
        y = int(
            i / s.game_col) * s.grid_size + (s.grid_size - s.scale_size[0]) / 2
        img = './images/img_' + str(maps[i]) + '.png'
        images.append(ImageButton(screen, img, x, y, i, maps[i], s))

    # start playing
    play = True

    while True:
        screen.fill(s.background_color)
        if play:
            # check if all the images are cleared, if so, end the game
            if all_cleared(maps):
                play = False
            # display images
            for i in images:
                i.display()

            pygame.display.update()

        else:
            win = pygame.image.load(s.win)
            screen.blit(win, ((s.screen_width - win.get_width()) / 2,
                              (s.screen_height - win.get_height()) / 2))
            pygame.display.update()

        # check click event
        click_event(images, s, maps)

        time.sleep(0.03)
Пример #10
0
    def createUI(self):
        """"""
        path_to_images = MOSES.getPathToImages()
        self.raw_data_uploader_button = ImageButton(
            os.path.join(path_to_images, "upload_raw_data.png"), 48, 48,
            os.path.join(path_to_images, "upload_raw_data_mouseover.png"))
        self.tna_viewer_button = ImageButton(
            os.path.join(path_to_images, "tna.png"), 48, 48,
            os.path.join(path_to_images, "tna_mouseover.png"))
        self.piggybank_button = ImageButton(
            os.path.join(path_to_images, "piggybank.png"), 48, 48,
            os.path.join(path_to_images, "piggybank_mouseover.png"))
        self.seeker_button = ImageButton(
            os.path.join(path_to_images, "find.png"), 48, 48,
            os.path.join(path_to_images, "find_mouseover.png"))

        self.taunter = Taunter()
        self.bacon_icon = ImageButton(
            os.path.join(path_to_images, "quality.png"), 150, 150,
            os.path.join(path_to_images, "quality_mouseover.png"))
        self.bacon_icon.setToolTip("Get to work, Poozers.")

        row_1 = QtGui.QHBoxLayout()
        row_1.addWidget(self.raw_data_uploader_button)
        row_1.addWidget(self.tna_viewer_button)
        row_1.addWidget(self.piggybank_button)
        row_1.addWidget(self.seeker_button)
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.bacon_icon, 0, QtCore.Qt.AlignHCenter)
        layout.addLayout(row_1, 1)
        layout.addWidget(self.taunter, 0)

        self.main_widget = QtGui.QWidget()
        self.main_widget.setLayout(layout)
        self.setCentralWidget(self.main_widget)
        self.setWindowTitle(
            "BACON - Version %s. Server: %s. User: %s (%s)." %
            (version(), MOSES.getHostID(), self.user_id,
             MOSES.getEmpName(self.user_id)
             if self.user_id != "bigbrother" else "Administrator"))
        icon_file_name_path = os.path.join(path_to_images, 'PORK_Icon.png')
        self.setWindowIcon(QtGui.QIcon(icon_file_name_path))
        self.show()
Пример #11
0
    def __init__(self, director, position=(0, 0), style = None, visible = True):

        ImageButton.__init__(self, director, position, style, visible)
Пример #12
0
 def draw(self, surface):
     if self.visible:
         ImageButton.draw(self, surface)
         surface.blit(self.style['obj'], self.getPosition())
Пример #13
0
class Bacon(QtGui.QMainWindow):
    """"""
    def __init__(self, user_id, password, category_tree, employees_list,
                 brand_list):
        super(Bacon, self).__init__()
        self.user_id = user_id
        self.password = password
        self.category_tree = category_tree
        self.employees_list = employees_list
        self.brand_list = brand_list
        self.current_processing_date = MOSES.getLastWorkingDate(
            self.user_id, self.password, datetime.date.today(), "All")
        self.createUI()
        self.mapEvents()

    def center(self):
        frameGm = self.frameGeometry()
        screen = QtGui.QApplication.desktop().screenNumber(
            QtGui.QApplication.desktop().cursor().pos())
        centerPoint = QtGui.QApplication.desktop().screenGeometry(
            screen).center()
        frameGm.moveCenter(centerPoint)
        self.move(frameGm.topLeft())

    def createUI(self):
        """"""
        path_to_images = MOSES.getPathToImages()
        self.raw_data_uploader_button = ImageButton(
            os.path.join(path_to_images, "upload_raw_data.png"), 48, 48,
            os.path.join(path_to_images, "upload_raw_data_mouseover.png"))
        self.tna_viewer_button = ImageButton(
            os.path.join(path_to_images, "tna.png"), 48, 48,
            os.path.join(path_to_images, "tna_mouseover.png"))
        self.piggybank_button = ImageButton(
            os.path.join(path_to_images, "piggybank.png"), 48, 48,
            os.path.join(path_to_images, "piggybank_mouseover.png"))
        self.seeker_button = ImageButton(
            os.path.join(path_to_images, "find.png"), 48, 48,
            os.path.join(path_to_images, "find_mouseover.png"))

        self.taunter = Taunter()
        self.bacon_icon = ImageButton(
            os.path.join(path_to_images, "quality.png"), 150, 150,
            os.path.join(path_to_images, "quality_mouseover.png"))
        self.bacon_icon.setToolTip("Get to work, Poozers.")

        row_1 = QtGui.QHBoxLayout()
        row_1.addWidget(self.raw_data_uploader_button)
        row_1.addWidget(self.tna_viewer_button)
        row_1.addWidget(self.piggybank_button)
        row_1.addWidget(self.seeker_button)
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.bacon_icon, 0, QtCore.Qt.AlignHCenter)
        layout.addLayout(row_1, 1)
        layout.addWidget(self.taunter, 0)

        self.main_widget = QtGui.QWidget()
        self.main_widget.setLayout(layout)
        self.setCentralWidget(self.main_widget)
        self.setWindowTitle(
            "BACON - Version %s. Server: %s. User: %s (%s)." %
            (version(), MOSES.getHostID(), self.user_id,
             MOSES.getEmpName(self.user_id)
             if self.user_id != "bigbrother" else "Administrator"))
        icon_file_name_path = os.path.join(path_to_images, 'PORK_Icon.png')
        self.setWindowIcon(QtGui.QIcon(icon_file_name_path))
        self.show()

    def mapEvents(self):
        """"""
        self.raw_data_uploader_button.clicked.connect(self.openRawDataManager)
        self.piggybank_button.clicked.connect(self.openPiggyBank)
        self.tna_viewer_button.clicked.connect(self.openTNAViewer)
        self.seeker_button.clicked.connect(self.openSeeker)

    def openRawDataManager(self):
        self.raw_data_manager = RawDataManager(self.user_id, self.password)

    def openPiggyBank(self):
        self.piggy_bank = PiggyBankWithFilter(self.user_id, self.password,
                                              self.category_tree,
                                              self.brand_list)

    def openTNAViewer(self):
        self.tna_viewer = TNAViewer(self.user_id, self.password,
                                    self.category_tree)

    def openSeeker(self):
        self.seeker = Seeker(self.user_id, self.password)
Пример #14
0
class TitleBar(Widget):
    """
    Title bar widget for Maemo4.
    """


    EVENT_SWITCH = "event-switch"
    EVENT_CLOSE = "event-close"
    EVENT_MENU = "event-menu"
    
    MODE_NORMAL = 0
    MODE_SUBWINDOW = 1
    

    def __init__(self):
    
        self.__title = ""
        self.__mode = self.MODE_NORMAL
    
        Widget.__init__(self)
        self.connect_clicked(lambda *a:self.emit_event(self.EVENT_MENU))
        
        self.__btn_switch = ImageButton(theme.btn_window_switch_1,
                                        theme.btn_window_switch_2)
        self.__btn_switch.connect_clicked(
                                  lambda *a:self.emit_event(self.EVENT_SWITCH))
        self.add(self.__btn_switch)

        self.__btn_close = ImageButton(theme.btn_window_close_1,
                                       theme.btn_window_close_2)
        self.__btn_close.connect_clicked(
                                   lambda *a:self.emit_event(self.EVENT_CLOSE))
        self.add(self.__btn_close)

        self.__btn_back = ImageButton(theme.btn_window_back_1,
                                      theme.btn_window_back_2)
        self.__btn_back.connect_clicked(
                                   lambda *a:self.emit_event(self.EVENT_CLOSE))
        self.add(self.__btn_back)
        self.__btn_back.set_visible(False)


    def connect_switch(self, cb, *args):
    
        self._connect(self.EVENT_SWITCH, cb, *args)
        
        
    def connect_close(self, cb, *args):
    
        self._connect(self.EVENT_CLOSE, cb, *args)
        
        
    def connect_menu(self, cb, *args):
    
        self._connect(self.EVENT_MENU, cb, *args)
        
        
    def _reload(self):
    
        self.render()


    def set_mode(self, mode):
    
        self.__mode = mode
        self.render()

        
    def set_title(self, title):
    
        self.__title = title
        if (self.may_render()):
            self.render_buffered(TEMPORARY_PIXMAP)
        
        
    def render_this(self):
    
        x, y = 0, 0
        w, h = self.get_size()
        screen = self.get_screen()
        
        screen.draw_frame(theme.titlebar_bg, x, y, w, h, True)

        if (self.__mode == self.MODE_NORMAL):
            if (platforms.MEEGO_NETBOOK or platforms.MEEGO_WETAB):
                screen.draw_pixbuf(theme.window_menu, x, 7)
                self.__btn_close.set_geometry(w - 80, 0, 80, 57)
                self.__btn_switch.set_visible(False)
                self.__btn_back.set_visible(False)
                self.__btn_close.set_visible(True)

                screen.set_clip_rect(x + 50, y + 14, w - 80 - 50, 57)
                screen.draw_text(self.__title,
                                 theme.font_ui_titlebar,
                                 x + 50, y + 14,
                                 theme.color_ui_titlebar)
                screen.set_clip_rect()
                
            else:
                screen.draw_pixbuf(theme.window_menu, x + 80, 7)
                self.__btn_switch.set_geometry(0, 0, 80, 57)
                self.__btn_close.set_geometry(w - 80, 0, 80, 57)
                self.__btn_switch.set_visible(True)
                self.__btn_back.set_visible(False)
                self.__btn_close.set_visible(True)

                screen.set_clip_rect(x + 80 + 50, y + 14, w - 80 - 80 - 50, 57)
                screen.draw_text(self.__title,
                                 theme.font_ui_titlebar,
                                 x + 80 + 50, y + 14,
                                 theme.color_ui_titlebar)
                screen.set_clip_rect()
                
        elif (self.__mode == self.MODE_SUBWINDOW):
            if (platforms.MEEGO_NETBOOK or platforms.MEEGO_WETAB):
                screen.draw_pixbuf(theme.window_menu, x, 7)
                self.__btn_back.set_geometry(w - 80, 0, 80, 57)
                self.__btn_switch.set_visible(False)
                self.__btn_back.set_visible(True)
                self.__btn_close.set_visible(False)

                screen.set_clip_rect(x + 50, y + 14, w - 80 - 50, 57)
                screen.draw_text(self.__title,
                                 theme.font_ui_titlebar,
                                 x + 50, y + 14,
                                 theme.color_ui_titlebar)
                screen.set_clip_rect()
            
            else:
                screen.draw_pixbuf(theme.window_menu, x + 80, 7)
                self.__btn_switch.set_geometry(0, 0, 80, 57)
                self.__btn_back.set_geometry(w - 80, 0, 80, 57)
                self.__btn_switch.set_visible(True)
                self.__btn_back.set_visible(True)
                self.__btn_close.set_visible(False)

                screen.set_clip_rect(x + 80 + 50, y + 14, w - 80 - 80 - 50, 57)
                screen.draw_text(self.__title,
                                 theme.font_ui_titlebar,
                                 x + 80 + 50, y + 14,
                                 theme.color_ui_titlebar)
                screen.set_clip_rect()
Пример #15
0
    def __init__(self, director, position=(0, 0), style=None, visible=True):

        ImageButton.__init__(self, director, position, style, visible)
Пример #16
0
class DataSelector(QtGui.QWidget):
    def __init__(self, repo_path):
        super(DataSelector,self).__init__()
        self.repo_path = repo_path
        self.data_from_fk = None
        self.createUI()
        self.fk_retriever = FKRetriever(self.repo_path)
        self.mapEvents()
        self.data_is_ready = False
        self.data = None
        self.validate_button.setEnabled(False)

    def createUI(self):
        self.group_box = QtGui.QGroupBox("Data Selector")
        self.page_selector = IconListBox()
        page_control_list = [
                    {
                    "Name": "From Flipkart Using FSNs",
                    "Icon": os.path.join("essentials","download.png")
                    },
                    {
                    "Name": "From CSV Data File",
                    "Icon": os.path.join("essentials","csv_file.png")
                    }
                ]
        self.page_selector.addElements(page_control_list)
        self.page_selector.setFixedSize(302,110)
        #FSN Mode Widget
        self.fsn_mode_widget = QtGui.QGroupBox("Data By FSN")
        self.fsn_text_edit = FSNTextEdit()
        self.fsn_text_edit.setFixedSize(450,400)
        self.category_label = QtGui.QLabel("Category:")
        self.category_combo_box = QtGui.QComboBox()
        self.category_combo_box.addItems(getCategoryFolderNames()) #Later, add this data from OINK's server.        
        self.category_combo_box.setToolTip("Select the default category for the given FSNs.\nNote that mixing various types of FSNs isn't recommended.\nThe icons won't load.")
        self.attributes_list_box = QtGui.QListWidget()
        self.attributes_list_box.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.attributes_list_box.setToolTip("Displays all product attributes, obtained from the FK server.")
        self.primary_attributes_list_box = QtGui.QListWidget()
        self.primary_attributes_list_box.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.primary_attributes_list_box.setToolTip("Displays primary product attributes that you have selected.")
        self.secondary_attributes_list_box = QtGui.QListWidget()
        self.secondary_attributes_list_box.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.secondary_attributes_list_box.setToolTip("Displays secondary product attributes that you have selected.")
        self.push_to_primary_button = QtGui.QPushButton("Add to\nPrimary List")
        self.push_to_primary_button.setToolTip("Click to move the chosen attribute into the list of primary attributes.")
        self.remove_from_primary_button = QtGui.QPushButton("Remove from\nPrimary List")
        self.remove_from_primary_button.setToolTip("Click to move the chosen attribute out of the list of primary attributes.")
        self.push_to_secondary_button = QtGui.QPushButton("Add to\nSecondary List")
        self.push_to_secondary_button.setToolTip("Click to move the chosen attribute into the list of secondary attributes.")
        self.remove_from_secondary_button = QtGui.QPushButton("Remove from\nSecondary List")
        self.remove_from_secondary_button.setToolTip("Click to move the chosen attribute out of the list of secondary attributes.")
        #downloader
        self.fetch_images_attributes_button = QtGui.QPushButton("Download")
        self.fetch_images_attributes_button.setToolTip("This will check if parent images are available for all the FSNs and download them if necessary from the FK site. It will also load the spec table.")
        self.export_scraped_data_button = QtGui.QPushButton("Export Data")
        self.fetching_progress = ProgressBar()
        self.fetching_progress.setRange(0,100)
        self.fetching_progress.setValue(0)
        self.fetching_activity = QtGui.QLabel("All that is gold does not glitter!")
        self.fetching_activity.setStyleSheet("QLabel{font: 10px black; border: 1px solid black;}")
        self.fetching_activity.setToolTip("This indicates the current downloader's activity, or some random quote that Vinay thinks is funny.")
        self.completed_fsns_count_label = QtGui.QLabel("Completed:")
        self.completed_fsns_count_spinbox = QtGui.QSpinBox()
        self.completed_fsns_count_spinbox.setEnabled(False)
        self.eta_label = QtGui.QLabel("ETA:")
        self.eta_datetimeedit = QtGui.QDateTimeEdit()
        self.eta_datetimeedit.setEnabled(False)
        self.eta_datetimeedit.setMinimumDateTime(QtCore.QDateTime(datetime.datetime.now()))
        self.activity_log_textedit = QtGui.QTextEdit()
        self.activity_log_textedit.setReadOnly(True)
        self.pending_fsns_count_label = QtGui.QLabel("Pending:")
        self.pending_fsns_count_spinbox = QtGui.QSpinBox()
        self.pending_fsns_count_spinbox.setEnabled(False)
        self.failed_fsns_label = QtGui.QLabel("Failed:")
        self.failed_fsns_count_spinbox = QtGui.QSpinBox()
        self.failed_fsns_count_spinbox.setEnabled(False)

        self.completed_fsns_count_spinbox.setRange(0,99999999)
        self.pending_fsns_count_spinbox.setRange(0,99999999)
        self.failed_fsns_count_spinbox.setRange(0,99999999)

        self.pending_fsns_list_text_edit = QtGui.QTextEdit()
        self.pending_fsns_list_text_edit.setReadOnly(True)
        self.completed_fsns_list_text_edit = QtGui.QTextEdit()
        self.completed_fsns_list_text_edit.setReadOnly(True)
        self.failed_fsns_list_text_edit = QtGui.QTextEdit()
        self.failed_fsns_list_text_edit.setReadOnly(True)

        buttons_and_progress_bar = QtGui.QHBoxLayout()
        buttons_and_progress_bar.addWidget(self.fetch_images_attributes_button, 2)
        buttons_and_progress_bar.addWidget(self.export_scraped_data_button, 1)
        buttons_and_progress_bar.addWidget(self.fetching_progress, 4)

        completed_tracking = QtGui.QVBoxLayout()
        completed_tracking.addWidget(self.completed_fsns_count_label)
        completed_tracking.addWidget(self.completed_fsns_count_spinbox)
        completed_tracking.addWidget(self.completed_fsns_list_text_edit)
        
        eta_layout = QtGui.QHBoxLayout()
        eta_layout.addWidget(self.eta_label)
        eta_layout.addWidget(self.eta_datetimeedit)
        
        pending_tracking = QtGui.QVBoxLayout()
        pending_tracking.addWidget(self.pending_fsns_count_label)
        pending_tracking.addWidget(self.pending_fsns_count_spinbox)
        pending_tracking.addWidget(self.pending_fsns_list_text_edit)
        pending_tracking.addLayout(eta_layout)

        failed_tracking = QtGui.QVBoxLayout()
        failed_tracking.addWidget(self.failed_fsns_label)
        failed_tracking.addWidget(self.failed_fsns_count_spinbox)
        failed_tracking.addWidget(self.failed_fsns_list_text_edit)

        fsns_tracking = QtGui.QHBoxLayout()
        fsns_tracking.addLayout(completed_tracking)
        fsns_tracking.addLayout(pending_tracking)
        fsns_tracking.addLayout(failed_tracking)

        downloader_layout = QtGui.QVBoxLayout()
        downloader_layout.addLayout(buttons_and_progress_bar)
        downloader_layout.addLayout(fsns_tracking)
        downloader_layout.addWidget(self.fetching_activity)

        downloader = QtGui.QWidget()
        downloader.setLayout(downloader_layout)

        downloader_tabs = QtGui.QTabWidget()
        downloader_tabs.addTab(downloader, "Downloader")
        downloader_tabs.addTab(self.activity_log_textedit, "Log")

        self.fsn_mode_data_options = QtGui.QGroupBox("Data Options")
        fsn_mode_data_options_layout = QtGui.QGridLayout()
        fsn_mode_data_options_layout.addWidget(self.category_label,0,0,1,2, QtCore.Qt.AlignVCenter)
        fsn_mode_data_options_layout.addWidget(self.category_combo_box,0,2,1,2,QtCore.Qt.AlignVCenter)
        fsn_mode_data_options_layout.addWidget(self.attributes_list_box,1,0,4,4, QtCore.Qt.AlignHCenter)
        fsn_mode_data_options_layout.addWidget(self.primary_attributes_list_box,1,5,2,2, QtCore.Qt.AlignHCenter)
        fsn_mode_data_options_layout.addWidget(self.push_to_primary_button,1,4,1,1, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
        fsn_mode_data_options_layout.addWidget(self.remove_from_primary_button,2,4,1,1, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
        fsn_mode_data_options_layout.addWidget(self.secondary_attributes_list_box,3,5,2,2, QtCore.Qt.AlignHCenter)
        fsn_mode_data_options_layout.addWidget(self.push_to_secondary_button,3,4,1,1, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
        fsn_mode_data_options_layout.addWidget(self.remove_from_secondary_button,4,4,1,1, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
        self.fsn_mode_data_options.setLayout(fsn_mode_data_options_layout)
        self.fsn_mode_data_options.setEnabled(False)
        fsn_mode_layout = QtGui.QGridLayout()
        fsn_mode_layout.addWidget(self.fsn_text_edit,0,0,7,1)
        downloader_tabs

        fsn_mode_layout.addWidget(downloader_tabs,0,1,2,5,  QtCore.Qt.AlignBottom)
        #fsn_mode_layout.addWidget(self.fetch_images_attributes_button,0,1,1,2,  QtCore.Qt.AlignBottom)
        #fsn_mode_layout.addWidget(self.fetching_progress,0,3,1,5, QtCore.Qt.AlignBottom)
        #fsn_mode_layout.addWidget(self.fetching_activity,1,3,1,5, QtCore.Qt.AlignTop)
        #fsn_mode_layout.addWidget(self.export_scraped_data_button,1,1,1,2,  QtCore.Qt.AlignTop)
        fsn_mode_layout.addWidget(self.fsn_mode_data_options,2,1,5,7, QtCore.Qt.AlignTop)
        self.fsn_mode_widget.setLayout(fsn_mode_layout)

        self.fsn_mode_scroll_view = QtGui.QScrollArea()
        self.fsn_mode_scroll_view.setWidget(self.fsn_mode_widget)
        self.fsn_mode_scroll_view.setWidgetResizable(True)
        self.fsn_mode_scroll_view.setFixedHeight(400)

        #CSV Mode Widget
        self.csv_mode_widget = QtGui.QWidget()
        self.input_data_set_button = ImageButton(os.path.join("essentials","csv_file.png"), 50, 50)
        self.input_data_set_button.setToolTip("Click to select a data file if you want manual control.")
        self.check_icons_button = QtGui.QPushButton("Check Icon Availability\nand Export Report")
        csv_mode_layout = QtGui.QHBoxLayout()
        csv_mode_layout.addStretch(1)
        csv_mode_layout.addWidget(self.input_data_set_button,0)
        csv_mode_layout.addWidget(self.check_icons_button,0)
        csv_mode_layout.addStretch(1)

        self.csv_mode_widget.setLayout(csv_mode_layout)

        self.fsn_or_csv_stacked_widget = QtGui.QStackedWidget()
        self.fsn_or_csv_stacked_widget.addWidget(self.fsn_mode_scroll_view)
        self.fsn_or_csv_stacked_widget.addWidget(self.csv_mode_widget)

        self.validate_button  = ImageButton(os.path.join("essentials","validate.png"),50,50)
        layout = QtGui.QGridLayout()
        layout.addWidget(self.page_selector,0,0,1,2, QtCore.Qt.AlignHCenter)
        layout.addWidget(self.fsn_or_csv_stacked_widget,1,0,1,2)
        layout.addWidget(self.validate_button,3,1)
        self.group_box.setLayout(layout)
        final_layout = QtGui.QHBoxLayout()
        final_layout.addWidget(self.group_box)
        self.setLayout(final_layout)

    def mapEvents(self):
        self.page_selector.currentItemChanged.connect(self.changePage)
        self.input_data_set_button.clicked.connect(self.loadDataFromFile)
        self.fetch_images_attributes_button.clicked.connect(self.downloadFromFK)
        self.fk_retriever.sendData.connect(self.prepareDataRetrievedFromFK)
        self.fk_retriever.sendException.connect(self.postException)
        self.push_to_primary_button.clicked.connect(self.pushAttrToPrimary)
        self.remove_from_primary_button.clicked.connect(self.removeFromPrimary)
        self.push_to_secondary_button.clicked.connect(self.pushAttrToSecondary)
        self.remove_from_secondary_button.clicked.connect(self.removeFromSecondary)
        self.category_combo_box.currentIndexChanged.connect(self.changeCategory)
        self.export_scraped_data_button.clicked.connect(self.exportData)
        self.check_icons_button.clicked.connect(self.checkIconsAvailability)

    def checkIconsAvailability(self):
        import pandas as pd
        import xlsxwriter
        import Katana
        data = self.getData()
        icons = {}
        repo_path = str(QtGui.QFileDialog.getExistingDirectory(self, "Select the repository folder.", os.getcwd(), 
                                                    QtGui.QFileDialog.ShowDirsOnly | QtGui.QFileDialog.DontResolveSymlinks))
        if not repo_path:
            repo_path = os.path.join(os.getcwd(), "Images","Repository")
        for fsn_row in self.getData():
            category = fsn_row["Category"]
            for key in fsn_row.keys():
                if "Attribute" in key:
                    attribute = fsn_row[key].strip()
                    if attribute.strip() != "":
                        icon_status, folders = Katana.checkIcon(attribute, category, repository_path=repo_path)
                        if attribute not in icons.keys():
                            icons[attribute] = {
                                        "Category": category,
                                        "Icon in Folder(s)": folders
                            }
                        else:
                            if category not in icons[attribute]["Category"]:
                                icons[attribute]["Category"] = icons[attribute]["Category"] + ", "  +category
                            icons[attribute]["Icon in Folder(s)"] = [folder for folder in list(set(icons[attribute]["Icon in Folder(s)"] + folders)) if len(folder)>0]
        icons_data_frame = pd.DataFrame.from_dict(icons)
        icons_data_frame = icons_data_frame.apply(self.getMeaningfulPathText,axis=0)
        file_path = os.path.join(os.getcwd(),"cache","Icon_Search_Results_%s.csv"%datetime.datetime.now().strftime("%y%m%d_%H%M%S"))
        #file_handler = pd.ExcelWriter(file_path,engine="xlsxwriter")
        icons_data_frame.T.to_csv(file_path)
        os.startfile(file_path,"open")
        #icons_data_frame.to_excel(file_handler, "Sheet1")
        #file_handler.save()
#        print "Saved file to %s!"%file_path
    
    def getMeaningfulPathText(self, text):
        if type(text["Icon in Folder(s)"]) == str:
            return text
        elif type(text["Icon in Folder(s)"]) == list:
            if len(text["Icon in Folder(s)"]) == 0:
                text["Icon in Folder(s)"] = "No Icons Available."
            else:                
                text["Icon in Folder(s)"] = ", ".join(text["Icon in Folder(s)"])
        else:
            print "What happened?"
            print text
        return text

    def exportData(self):
        import pandas as pd
        import xlsxwriter
        #Get the output location.
        output_path = str(QtGui.QFileDialog.getExistingDirectory(self, "Select the output folder.", os.getcwd(), 
                                                    QtGui.QFileDialog.ShowDirsOnly | QtGui.QFileDialog.DontResolveSymlinks))
        #Calculate the different types of FSNs based on prefix.
        if output_path:
            file_path = os.path.join(output_path,"flipkart_data_%s.xlsx"%datetime.datetime.now().strftime("%Y%m%d_%H%M%S"))
            file_handler = pd.ExcelWriter(file_path,engine="xlsxwriter")
            fsns_list = self.data_from_fk.keys()
            prefixes = list(set([fsn[:3] for fsn in fsns_list]))
            prefixes.sort()
            seggregated_data_set = {}
            #Split data based on FSN prefix.
            for prefix in prefixes:
                valid_fsns = [fsn for fsn in fsns_list if prefix==fsn[:3]]
                seggregated_data_set[prefix] = {}
                for fsn in valid_fsns:
                    seggregated_data_set[prefix][fsn] = self.data_from_fk[fsn]
                #Create dataframes for each data set.
                prefix_data_set = pd.DataFrame.from_dict(seggregated_data_set[prefix])
                #Save the dataframe in an excel file with the entire dataset in one sheet, 
                #and individual sheets containing prefix-wise data, stored in the output folder.
                prefix_data_set.T.to_excel(file_handler, prefix)
            file_handler.save()
        pd.DataFrame.from_dict(self.data_from_fk).T.to_csv(os.path.join(output_path,"flipkart_data_%s.csv"%datetime.datetime.now().strftime("%Y%m%d_%H%M%S")))
        os.startfile(file_path,"open")
        self.sendAlert("Success","Success exported data for %d possible verticals into %s."%(len(prefixes),os.path.basename(file_path)))

        #    data_frame = pd.DataFrame.from_dict(self.data_from_fk).transpose()
        #    data_frame.to_csv("something.csv")
            #get save file name
            #dump data into said file.

    def postException(self, error_msg):
        message = "%s @%s"%(error_msg,datetime.datetime.now().strftime("%H:%M:%S"))
        self.fetching_activity.setText(message)
        self.activity_log_textedit.append(message)


    def pushAttrToPrimary(self):
        self.pushFromTo(self.attributes_list_box,self.primary_attributes_list_box)

    def removeFromPrimary(self):
        self.pushFromTo(self.primary_attributes_list_box,self.attributes_list_box)

    def pushAttrToSecondary(self):
        self.pushFromTo(self.attributes_list_box,self.secondary_attributes_list_box)

    def removeFromSecondary(self):
        self.pushFromTo(self.secondary_attributes_list_box,self.attributes_list_box)
    
    def pushFromTo(self,source_list_widget, destination_list_widget):
        #identify the selected attributes
        selected_attribute_items = source_list_widget.selectedItems()
        #Store them in a list.
        selected_attributes = [str(selected_attribute_item.text()) for selected_attribute_item in selected_attribute_items]
        #Send them to the destination list.
        destination_list_widget.setSortingEnabled(False)
        destination_list_widget.addItems(selected_attributes)
        destination_list_widget.setSortingEnabled(True)
        destination_list_widget.sortItems()
        #Remove them from the source list
        for selected_item in selected_attribute_items:
            source_list_widget.takeItem(source_list_widget.row(selected_item))
        self.makeDataFile()

    def makeDataFile(self):
        """Creates a list of dictionaries for the FSNs, using the retrieved data."""
        #Extract the primary and secondary attributes.
        primary_attributes = [str(self.primary_attributes_list_box.item(list_index).text()) for list_index in range(self.primary_attributes_list_box.count())]
        secondary_attributes = [str(self.secondary_attributes_list_box.item(list_index).text()) for list_index in range(self.secondary_attributes_list_box.count())]
        #algorithm
        #Build a list of dictionaries with the following structure:
        output_data_format = [
                    {
                        "FSN": None,
                        "Category": None,
                        "Primary USP-1 Attribute": None,
                        "Primary USP-1 Description Text":None,
                        "Primary USP-2 Attribute": None,
                        "Primary USP-2 Description Text":None,
                        "Secondary USP-1 Attribute": None,
                        "Secondary USP-1 Description Text":None,
                        "Secondary USP-2 Attribute": None,
                        "Secondary USP-2 Description Text":None,
                    }
                ]
        #In doing this, check if FSNs have far too many attributes selected, or if they have none at all.
        #To check, see if the attribute is in the fsn_data_set that FKRetriever passes.
        #End algorithm
        output_data = []
        category = str(self.category_combo_box.currentText())
        if self.data_from_fk is None:
            self.sendAlert("Cowabunga!","Something seems to be wrong. This situation shouldn't ever happen. If there are attributes populated in the list widgets, then this shouldn't ever happen. This indicates that Leonardo failed to retrieve information from the Flipkart website or API. But if the attributes list widgets are populated, then this is ridiculously impossible.")
        else:
            never = False
            if (len(primary_attributes)>0) and (len(secondary_attributes)>0):
                #loop through each fsn key.
                invalid_fsns = []
                total_fsns = len(self.data_from_fk.keys())

                for fsn in self.data_from_fk:
                    fsn_data = self.data_from_fk[fsn]
                    fsn_attributes_mapping = {
                        "FSN": fsn,
                        "Category": category
                    }
                    primary_attribute_counter = 0
                    for primary_attribute in primary_attributes:
                        if primary_attribute in fsn_data.keys():
                            primary_attribute_counter += 1
                            attr_key = "Primary USP-%d Attribute"%primary_attribute_counter
                            descr_key = "Primary USP-%d Description Text"%primary_attribute_counter
                            #Check if the icon exists. If it doesn't compile a list of icons required.
                            #icon_available = checkIcon(attr_key,descr_key)
                            fsn_attributes_mapping.update({attr_key:primary_attribute,descr_key: fsn_data[primary_attribute]})
                    secondary_attribute_counter = 0
                    for secondary_attribute in secondary_attributes:
                        if secondary_attribute in fsn_data.keys():
                            secondary_attribute_counter += 1
                            attr_key = "Secondary USP-%d Attribute"%secondary_attribute_counter
                            descr_key = "Secondary USP-%d Description Text"%secondary_attribute_counter
                            #Check if the icon exists. If it doesn't compile a list of icons required.
                            #icon_available = checkIcon(attr_key,descr_key)
                            fsn_attributes_mapping.update({attr_key:secondary_attribute,descr_key: fsn_data[secondary_attribute]})
                    if (primary_attribute_counter == 0) or (secondary_attribute_counter == 0):
                        invalid_fsns.append(fsn)
                    output_data.append(fsn_attributes_mapping)
                if len(invalid_fsns)>0:
                    message = "There are %d fsns without enough primary or secondary attributes. Trying this process for FSNs of mixed category\sub-category isn't recommended." %len(invalid_fsns)
                    self.sendAlert("Uh-oh!",message)
                    self.validate_button.setStyleSheet("background-color: #B22222")
                    self.validate_button.setEnabled(False)
                else:
                    self.data = output_data
                    self.validate_button.setEnabled(True)
                    self.validate_button.setStyleSheet("QPushButton{background-color: #458B00} QPushButton:hover{background-color: #78AB46};")
            elif never:
                #(len(primary_attributes) == 0) or (len(secondary_attributes) == 0):
                #This could be a problem in runtime. Disabling for now.
                self.sendAlert("Cowabunga!","Please promote some attributes to primary and secondary positions. If you don't want to use secondary attributes, just add one anyway, and select equal relative icon sizes later.")

    def changeCategory(self):
        self.makeDataFile()

    def sendAlert(self, title, message):
        QtGui.QMessageBox.about(self, title, message)

    def downloadFromFK(self):
        """Triggers FKRetriever."""
        fsns = self.fsn_text_edit.getFSNs()
        self.fetch_images_attributes_button.setEnabled(False)
        if len(fsns) >=1:
            self.fetching_activity.setText("Preparing to download images and specifications off the Flipkart website!")
            self.fk_retriever.fsn_list = fsns
            self.fk_retriever.allow_run = True
        else:
            print "No FSNS to process."

    def prepareDataRetrievedFromFK(self, status, data_set, progress_value, fsn_lists, completion_status, eta):
        """Gets data from FK from the thread's signal and prepares it."""
        self.fetching_progress.setValue(progress_value)
        eta_string = eta.strftime("%a (%d-%b), %H:%M:%S")
        self.putAttributes(data_set)
        self.data_from_fk = data_set
        now_string = datetime.datetime.now().strftime("(%d-%b), %H:%M:%S")
        completed_fsns = fsn_lists[0]
        pending_fsns = fsn_lists[1]
        failed_fsns = fsn_lists[2]
        self.completed_fsns_count_spinbox.setValue(len(completed_fsns))
        self.pending_fsns_count_spinbox.setValue(len(pending_fsns))
        self.failed_fsns_count_spinbox.setValue(len(failed_fsns))
        
        self.completed_fsns_list_text_edit.setText("\n".join(completed_fsns))
        self.pending_fsns_list_text_edit.setText("\n".join(pending_fsns))
        self.failed_fsns_list_text_edit.setText("\n".join(failed_fsns))
        self.eta_datetimeedit.setDateTime(QtCore.QDateTime(eta))

        if completion_status:
            self.fetching_progress.setFormat("%d%% (Completed at %s)"%(progress_value, now_string))
            message = "Completed at %s."%now_string
            self.fsn_mode_data_options.setEnabled(True)
            self.fetch_images_attributes_button.setEnabled(True)
            self.sendAlert("Cowabunga!","Completed fetching data and images for the given list.")
        else:
            self.fetching_progress.setFormat("%d%% @(%s)"%(progress_value, now_string))
            message = "%s ETA: %s"%(status, eta_string)
            self.fsn_mode_data_options.setEnabled(False)
        self.fetching_activity.setText(message)
        self.activity_log_textedit.append(message)
            
    def putAttributes(self, data_set):
        attributes = []
        for fsn in data_set:
            attributes+=data_set[fsn].keys()
        attributes = list(set(attributes))
        self.attributes_list_box.setSortingEnabled(False)
        self.attributes_list_box.clear()
        self.primary_attributes_list_box.clear()
        self.secondary_attributes_list_box.clear()
        self.attributes_list_box.addItems(attributes)
        self.attributes_list_box.setSortingEnabled(True)
        self.attributes_list_box.sortItems()
    
    def getData(self):
        return self.data

    def changePage(self, current, previous):
        if not current:
            current = previous
        self.fsn_or_csv_stacked_widget.setCurrentIndex(self.page_selector.row(current))

    def loadDataFromFile(self):
        """This method asks for a csv data file. Upon loading, it'll read the file, 
            check it and declare whether it's valid or not.
            It does it based on:
            1. File headers: 
                FSN, Brand, Category, Primary USP[1-5] Attribute; Primary USP[1-5] Description; Secondary USP[1-5] Attribute; Secondary USP[1-5] Description;
            2. At least 1 row of data.
        """
        #Get the file name.
        data_file_name = str(QtGui.QFileDialog.getOpenFileName(self,"Open Data File",os.getcwd(),("Comma Separated Values Files (*.csv)")))
        if data_file_name:
            #Load the file.
            data_file_handler = open(data_file_name,"r")
            data_file_as_csv = csv.DictReader(data_file_handler)
            file_headers = []
            for row in data_file_as_csv:
                file_headers = row.keys()
            file_headers.sort()
            required_file_headers = [
                        "FSN","Brand","Category",
                        "Primary USP-1 Attribute","Primary USP-1 Description Text",
                        "Primary USP-2 Attribute","Primary USP-2 Description Text",
                        "Primary USP-3 Attribute","Primary USP-3 Description Text",
                        "Primary USP-4 Attribute","Primary USP-4 Description Text",
                        "Primary USP-5 Attribute","Primary USP-5 Description Text",
                        "Secondary USP-1 Attribute","Secondary USP-1 Description Text",
                        "Secondary USP-2 Attribute","Secondary USP-2 Description Text",
                        "Secondary USP-3 Attribute","Secondary USP-3 Description Text",
                        "Secondary USP-4 Attribute","Secondary USP-4 Description Text",
                        "Secondary USP-5 Attribute","Secondary USP-5 Description Text"
                        ]
            required_file_headers.sort()
            data_is_valid = True
            for header in required_file_headers:
                if header not in file_headers:
                    data_is_valid = False
                    self.sendAlert("Wrong Data set.", "%s column is required!"%header)
                    break
            if data_is_valid:
                data_file_handler.seek(0)
                next(data_file_handler) #0 has the header, so go to row 1.
                self.data = []
                for row in data_file_as_csv:
                    if len(row["FSN"].strip()) > 0:
                        self.data.append(row)
                if len(self.data)>0:
                    self.data_is_ready = True
                    self.sendAlert("Success", "%d FSNs have been uploaded from the provided dataset"%len(self.data))
                    self.validate_button.setEnabled(True)
                    self.validate_button.setStyleSheet("QPushButton{background-color: #458B00} QPushButton:hover{background-color: #78AB46};")
                else:
                    self.data_is_ready = False
                    self.sendAlert("No FSNs in the data set", "The Data set has the right columns but it appears to not have any rows with data.")
                    self.validate_button.setStyleSheet("background-color: #B22222")
                    self.validate_button.setStyleSheet("background-color: #B22222")
            else:
                self.validate_button.setStyleSheet("background-color: #B22222")
                self.validate_button.setEnabled(False)
            data_file_handler.close()
Пример #17
0
class Seeker(QtGui.QWidget):
    """Seeker class to find FSNs or Item_IDs 
    and filter out those which have not been written before.
    """
    def __init__(self, user_id, password):
        super(Seeker, self).__init__()
        self.user_id = user_id
        self.password = password
        self.mode = 0
        self.clip = QtGui.QApplication.clipboard()
        self.peeves = Peeves(user_id, password)
        self.createUI()
        self.createEvents()

    def createUI(self):
        self.fsns_label = QtGui.QLabel("FSNs\Item IDs:")
        self.fsns_text_edit = QtGui.QTextEdit()
        self.fsns_text_edit.setToolTip("Paste a list of FSNs or Item IDs here,\nseparated either by a new line or a comma.")
        self.type_selector = QtGui.QComboBox()
        self.type_selector.addItems(["FSN(s)", "Item ID(s)"])
        self.type_selector.setToolTip("Select the list type. Are you searching by FSNs or Item IDs?")
        self.type_selector.setCurrentIndex(0)
        self.output_table = CopiableQTableWidget(0, 0)
        self.progress_bar = ProgressBar()
        self.fetch_data_button = ImageButton(os.path.join("Images","find.png"),64,64,os.path.join("Images","find_mouseover.png"))
        self.fetch_data_button.setFlat(True)
        form_searcher_layout = QtGui.QVBoxLayout()
        form_searcher_layout.addWidget(self.fsns_label, 0)
        form_searcher_layout.addWidget(self.fsns_text_edit, 2)

        self.seeker_button = ImageButton(os.path.join("Images","seeker.png"),100,100,os.path.join("Images","seeker_mouseover.png"))
        self.seeker_button.setFlat(True)
        self.seeker_button.setToolTip("You're a Wizard, Harry.")
        
        form_options_layout = QtGui.QVBoxLayout()
        form_options_layout.addStretch(1)
        form_options_layout.addWidget(self.seeker_button,1, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom)
        form_options_layout.addStretch(2)
        form_options_layout.addWidget(self.type_selector, 0)
        form_options_layout.addWidget(self.fetch_data_button, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom)

        form_layout = QtGui.QHBoxLayout()
        form_layout.addLayout(form_searcher_layout, 3)
        form_layout.addLayout(form_options_layout, 0)

        layout = QtGui.QVBoxLayout()
        layout.addLayout(form_layout, 0)
        layout.addWidget(self.output_table, 3)
        layout.addWidget(self.progress_bar, 0)

        self.setLayout(layout)
        self.setWindowTitle("Seeker: The FSN Finding Tool")
        self.setWindowIcon(QtGui.QIcon(os.path.join('Images','PORK_Icon.png')))
        self.show()

    def createEvents(self):
        """"""
        self.fetch_data_button.clicked.connect(self.fetchData)
        self.peeves.sendProgress.connect(self.displayProgress)
        #self.peeves.sendRow.connect(self.displayFSNs)
        self.peeves.sendData.connect(self.populateTable)
    
    def fetchData(self):
        text_edit_contents = str(self.fsns_text_edit.toPlainText()).strip()
        if '"' in text_edit_contents:
            text_edit_contents.replace('"',"")
        if " " in text_edit_contents:
            text_edit_contents.replace(' ', "")
        search_items = list(set(text_edit_contents.split("\n")))
        self.search_type = self.type_selector.currentIndex()
        self.peeves.fetchData(search_items, self.search_type)

    def populateTable(self, fsn_data):
        #print "Populating the table!"
        self.output_table.setSortingEnabled(False)

        table_headers = [
            "FSN",
            "Status",
            "Item ID",
            "Description Type",
            "Writer ID",
            "Writer Name",
            "Article Date",
            "Database table",
            "BU",
            "Super-Category",
            "Category",
            "Sub-Category",
            "Vertical",
            "Brand"
            ]
        #print table_headers
        rows = len(fsn_data)
        columns = len(table_headers)
        self.output_table.setRowCount(rows)
        self.output_table.setColumnCount(columns)
        row_counter = 0
        for each_fsn in fsn_data:
            column_counter = 0
#            self.output_table.addRow(row_counter)
            for key in table_headers:
                item = QtGui.QTableWidgetItem(str(each_fsn[key]))
                self.output_table.setItem(row_counter, column_counter, item)
                column_counter += 1
            row_counter += 1
        self.output_table.setHorizontalHeaderLabels(table_headers)
        self.output_table.setSortingEnabled(True)
        self.output_table.sortItems(1)
        self.output_table.resizeColumnsToContents()
        self.output_table.resizeRowsToContents()
        #print fsn_data
    
    def displayProgress(self, done, total, eta):
        progress = float(done)/float(total)
        if done < total:
            time_string = datetime.datetime.strftime(eta, "%d %B, %H:%M:%S")
            self.progress_bar.setFormat("Getting FSN Data. Finished %d of %d. ETA: %s" %(done, total, time_string))
        else:
            self.progress_bar.setFormat("Completed fetching FSN Data")
        self.progress_bar.setValue(int(progress*100))
Пример #18
0
 def __init__(self, img1, img2):
     
     self.__active = False
     
     ImageButton.__init__(self, img1, img2, True)
     self.connect_clicked(self.__on_click)
Пример #19
0
    def do_init(self, db):
        self.player_started_game = 'X'

        self.btn_exit = self.text_button(0, 0, 150, 40, "Exit")
        # self.btn_exit.set_color("lightblue", "black")

        self.btn_new_game = self.text_button(self.WIN_WIDTH - 150, 0,
                                             150, 40, "Neues Spiel")

        self.btn_opponent = self.text_button(self.WIN_WIDTH-40,
                                             self.WIN_HEIGHT-40, 40, 40, "M")


        x = 10
        w = 200

        self.players = {}
        for i, name in enumerate(["X", "O"]):
            profile_image = get_next_icon_filename(None)

            y = 100
            name_lbl = self.text_button(x, y, w, 40, name)
            name_lbl.set_font(self.STATUS_FONT)

            y += 60
            profile = ImageButton(self.canvas, x, y, w, 150)
            profile.set_color("black", "black")

            y += 150
            cnt_lbl = self.text_button(x, y, w, 60, "0")
            cnt_lbl.set_font(self.STATUS_FONT)
            cnt_lbl.set_color("green", "black")

            self.players[name] = {
                "name": name_lbl,
                "cnt": 0,
                "cnt_lbl": cnt_lbl,
                "profile": profile,
                "profile_image": profile_image,
                "human_image": profile_image,
                "computer_image": "player_Computer.png",
            }

            x = self.WIN_WIDTH - w - 10

        # explicitly set player profile images
        self.players["X"]["profile_image"] = self.get_setting(self.SETTING_PLAYER_X, self.players["X"]["profile_image"])
        self.players["O"]["profile_image"] = self.get_setting(self.SETTING_PLAYER_O, self.players["O"]["profile_image"])
        for _, player in self.players.items():
            if player["profile_image"] is not None:
                self.__set_player_profile(player, player["profile_image"], True)

        # remis
        remis_cnt_lbl = self.text_button(self.WIN_WIDTH/2-w/2,
                                         self.WIN_HEIGHT - 50,
                                         w, 40, "0")
        remis_cnt_lbl.set_color("green", "black")
        remis_name_lbl = self.text_button(self.WIN_WIDTH/2-w/2,
                                          self.WIN_HEIGHT - 90,
                                          w, 40, "Unentschieden")
        self.players["U"] = {
            "cnt": 0,
            "cnt_lbl": remis_cnt_lbl,
            "name": remis_name_lbl,
        }


        left = (self.WIN_WIDTH - 3 * self.BTN_SIZE) / 2

        self.lbl_status = self.text_button(self.WIN_WIDTH/2-150, 0, 300, 60, "")
        self.lbl_status.set_color("red", "black")
        self.lbl_status.set_font(self.STATUS_FONT)

        self.buttons = []

        x = left
        y = (self.WIN_HEIGHT - 3 * self.BTN_SIZE) / 2
        for i in range(1, 10):
            btn = self.text_button(x, y, self.BTN_SIZE, self.BTN_SIZE, "")
            btn.set_font(self.BIG_BUTTON_FONT)

            self.buttons.append(btn)
            x += self.BTN_SIZE
            if (i % 3) == 0:
                x = left
                y += self.BTN_SIZE
Пример #20
0
class DailyPorker(QtGui.QWidget):
    def __init__(self, user_id, password, category_tree=None):
        super(DailyPorker, self).__init__()
        self.user_id, self.password = user_id, password
        self.report_list = []
        if category_tree is None:
            self.category_tree = MOSES.getCategoryTree(self.user_id, self.password)
        else:
            self.category_tree = category_tree
        #self.pork_kent = PorkKent(self.user_id, self.password)
        style_string = """
        .QTableWidget {
            gridline-color: rgb(0, 0, 0);
        }
        """
        self.setStyleSheet(style_string)
        self.clip = QtGui.QApplication.clipboard()
        self.createUI()
        self.mapEvents()
        self.initiate()
        self.show()

    def initiate(self):
        self.center()
        self.populateWritersComboBox()
        self.writers_combobox.selectAll()
        self.refreshSortFilter()

    def center(self):
        #frameGm = self.frameGeometry()
        #screen = QtGui.QApplication.desktop().screenNumber(QtGui.QApplication.desktop().cursor().pos())
        #centerPoint = QtGui.QApplication.desktop().screenGeometry(screen).center()
        #frameGm.moveCenter(centerPoint)
        #self.move(frameGm.topLeft())
        self.move(70,50)

    def createUI(self):
        self.start_date_label = QtGui.QLabel("<b>Date:</b>")
        self.start_date_edit = QtGui.QDateTimeEdit()
        self.start_date_edit.setToolTip("Set the date for which you want to generate the report.")
        lwd = MOSES.getLastWorkingDate(self.user_id, self.password, queryUser="******")
        self.start_date_edit.setDate(lwd)
        self.start_date_edit.setDisplayFormat("MMMM dd, yyyy")
        self.start_date_edit.setMinimumDate(QtCore.QDate(2015,1,1))
        self.start_date_edit.setCalendarPopup(True)

        self.end_date_edit = QtGui.QDateTimeEdit()
        self.end_date_edit.setToolTip("Select an end date. Only working days will be considered for the calculation.\nThis field will be disabled if the checkbox isn't marked to calculate the average statistics between dates.")
        self.end_date_edit.setDate(self.start_date_edit.date())
        self.end_date_edit.setDisplayFormat("MMMM dd, yyyy")
        self.end_date_edit.setMinimumDate(self.start_date_edit.date())
        self.end_date_edit.setCalendarPopup(True)

        self.writers_combobox = CheckableComboBox("Writers")
        self.writers_combobox.setToolTip("Select a group of writers if you want to check their performance for some time frame.")

        report_names = ["Article Count","Efficiency","Audit Count","CFM","GSEO","Stack Rank Index","Efficiency KRA","CFM KRA","GSEO KRA"]#,"Audit Percentage"]
        self.parameters_combobox = CheckableComboBox("Report Values")
        self.parameters_combobox.addItems(report_names)
        self.parameters_combobox.select(["Efficiency","CFM","GSEO", "Article Count", "Audit Count"])

        self.report_time_frames_combobox = CheckableComboBox("Timeframe")
        self.report_time_frames_combobox.addItems(["Daily","Weekly","Monthly","Quarterly","Half-Yearly"])
        self.report_time_frames_combobox.select(["Daily","Weekly"])

        self.sorting_filter_label = QtGui.QLabel("<b>Sort By:</b>")
        self.sorting_filter_combobox = QtGui.QComboBox()
        self.sorting_filter_combobox.setToolTip("Select the parameter you want to sort the generated reports by.")

        self.build_button = QtGui.QPushButton("Build Daily Team Performance Report")
        self.build_button.setToolTip("Click this button to start building the report")

        self.plot_button = QtGui.QPushButton("Plot")
        self.plot_button.setToolTip("Check this if you want to automatically plot the graphs.")
        
        self.build_dbr_button = QtGui.QPushButton("Build DBR Report")
        self.build_dbr_button.setToolTip("Check this if you want to automatically plot the graphs.")
        
        self.build_wbr_button = QtGui.QPushButton("Build WBR Report")
        self.build_wbr_button.setToolTip("Check this if you want to automatically plot the graphs.")
        
        self.progress_bar = ProgressBar()

        self.export_graphs_button = QtGui.QPushButton("Save")
        self.export_graphs_button.setToolTip("Click this button to save the generated reports and graphs in a desired folder location.")

        self.report = CopiableQTableWidget(0, 0)
        self.t_report = CopiableQTableWidget(0, 0)
        self.dbr_report = CopiableQTableWidget(0, 0)
        self.wbr_report = CopiableQTableWidget(0, 0)

        self.graphs = DailyGraphView()
        self.t_graphs = DailyGraphView()

        self.reports_tab = QtGui.QTabWidget()
        self.reports_tab.addTab(self.report,"Writers' Report")
        #self.reports_tab.addTab(self.graphs, "Writers' Graphs")
        #self.reports_tab.addTab(self.t_report,"Team Report")
        #self.reports_tab.addTab(self.t_graphs, "Team Graphs")
        self.reports_tab.addTab(self.dbr_report, "DBR Report")
        self.reports_tab.addTab(self.wbr_report, "WBR Report")

        self.status = QtGui.QLabel("I'm a Porkitzer Prize Winning Reporter.")

        options_layout_row_1 = QtGui.QHBoxLayout()
        options_layout_row_1.addWidget(self.start_date_label,0)
        options_layout_row_1.addWidget(self.start_date_edit,1)
        options_layout_row_1.addWidget(self.end_date_edit,1)
        options_layout_row_1.addWidget(self.writers_combobox,1)
        options_layout_row_1.addWidget(self.parameters_combobox,1)
        options_layout_row_1.addWidget(self.report_time_frames_combobox,1)
        options_layout_row_1.addStretch(2)
        
        options_layout_row_2 = QtGui.QHBoxLayout()
        options_layout_row_2.addWidget(self.sorting_filter_label,0)
        options_layout_row_2.addWidget(self.sorting_filter_combobox,1)
        options_layout_row_2.addWidget(self.build_button,0)
        #options_layout_row_2.addWidget(self.plot_button,0)
        options_layout_row_2.addWidget(self.build_dbr_button,0)
        options_layout_row_2.addWidget(self.build_wbr_button,0)
        options_layout_row_2.addStretch(2)

        options_layout = QtGui.QVBoxLayout()
        options_layout.addLayout(options_layout_row_1,0)
        options_layout.addLayout(options_layout_row_2,0)
        self.daily_porker_logo = ImageButton(
                                        os.path.join(MOSES.getPathToImages(),"newspaper.png"),
                                        100,
                                        100,
                                        os.path.join(MOSES.getPathToImages(),"newspaper_mouseover.png")
                                    )
        self.daily_porker_logo.setFlat(True)
        options = QtGui.QGroupBox("Report Options")
        options.setLayout(options_layout)
        options_with_logo = QtGui.QHBoxLayout()
        options_with_logo.addWidget(self.daily_porker_logo, 0, QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
        options_with_logo.addWidget(options, 3)

        layout = QtGui.QVBoxLayout()
        layout.addLayout(options_with_logo,1)
        layout.addWidget(self.reports_tab,3)
        layout.addWidget(self.progress_bar,0)
        layout.addWidget(self.status,0)

        self.setLayout(layout)
        self.setWindowTitle("The Daily Porker: Straight from the Pigs")

        icon_file_name_path = os.path.join(MOSES.getPathToImages(),'PORK_Icon.png')
        self.setWindowIcon(QtGui.QIcon(icon_file_name_path))

    def mapEvents(self):
        self.build_button.clicked.connect(self.buildReport)
        self.start_date_edit.dateChanged.connect(self.changedStartDate)
        self.pork_lane = PorkLane(self.user_id, self.password, self.category_tree)
        self.pork_lane.sendReport.connect(self.populateReport)
        self.pork_lane.sendProgress.connect(self.displayProgress)
        self.pork_lane.sendGraphs.connect(self.displayGraphs)
        self.report_time_frames_combobox.changedSelection.connect(self.refreshSortFilter)
        self.parameters_combobox.changedSelection.connect(self.refreshSortFilter)
        self.build_dbr_button.clicked.connect(self.buildDBR)
        self.build_wbr_button.clicked.connect(self.buildWBR)

    def buildDBR(self):
        self.build_dbr_button.setEnabled(False)
        self.alertMessage("Please Wait","This could take a while.")
        dbr = MOSES.getDBR(self.user_id, self.password, self.start_date_edit.date().toPyDate(), self.category_tree)
        self.dbr_report.showDataFrame(dbr)
        self.dbr_report.adjustToColumns()
        self.build_dbr_button.setEnabled(True)
        self.alertMessage("Success","Successfully Pulled the DBR")

    def buildWBR(self):
        self.build_wbr_button.setEnabled(False)
        self.alertMessage("Please Wait","This could take a while.")
        wbr = MOSES.getWBR(self.user_id, self.password, self.start_date_edit.date().toPyDate(), self.category_tree)
        self.wbr_report.showDataFrame(wbr)
        self.wbr_report.adjustToColumns()
        self.build_wbr_button.setEnabled(True)
        self.alertMessage("Success","Successfully Pulled the WBR")


    def getWritersList(self):
        self.writers_data_frame = MOSES.getWritersList(self.user_id, self.password, self.start_date_edit.date().toPyDate())
        writer_names_list = list(set(self.writers_data_frame["Name"]))
        writer_names_list.sort()
        return writer_names_list

    def displayGraphs(self,handle):
        if handle:
            self.graphs.graph_date = self.pork_lane.start_date
            self.graphs.enable_plotting = True
            self.graphs.plotGraph()
            self.progress_bar.setRange(0,100)
            self.progress_bar.setFormat("Completed at %s." %(datetime.datetime.strftime(datetime.datetime.now(),"%H:%M:%S")))
            self.status.setText("Beware the alien, the mutant, the heretic.")  
            self.progress_bar.setValue(100)
            #self.export_graphs_button.setEnabled(True)
        else:
            self.export_graphs_button.setEnabled(False)
            self.status.setText("Creating Graphs...")        
            self.progress_bar.setValue(0)
            self.progress_bar.setRange(0,0)


    def refreshSortFilter(self):
        report_types = self.getRequiredReportTypes()
        self.sorting_filter_combobox.clear()
        if len(report_types) > 0:
            self.sorting_filter_combobox.setEnabled(True)
            self.sorting_filter_combobox.addItems(report_types)
        else:
            self.sorting_filter_combobox.setEnabled(False)
        self.sorting_filter_combobox.setCurrentIndex(-1)

    def buildReport(self):
        self.build_button.setEnabled(False)
        report_types = self.getRequiredReportTypes()
        if len(report_types) > 0:
            self.build = True
            self.pork_lane.writers_data_frame = self.writers_data_frame
            self.pork_lane.parameter_list = self.parameters_combobox.getCheckedItems() #set pork lane report types.]
            self.pork_lane.time_frame_list = self.report_time_frames_combobox.getCheckedItems()
            selected_writers_list = self.writers_combobox.getCheckedItems()
            if len(selected_writers_list)>0:
                self.pork_lane.writers_list = selected_writers_list
            else:
                self.writers_combobox.selectAll()
                selected_writers_list = self.writers_combobox.getCheckedItems()
                self.pork_lane.writers_list = selected_writers_list
            self.pork_lane.start_date = self.start_date_edit.date().toPyDate()
            self.pork_lane.end_date = self.end_date_edit.date().toPyDate()
            self.pork_lane.allowRun = True #allow building.
        else:
            self.build = False
            self.alertMessage("Error","Please select at least one parameter in the checklist before attempting to build the report.")
        self.build_button.setEnabled(True)
            
    def changedStartDate(self):
        self.end_date_edit.setMinimumDate(self.start_date_edit.date())
        self.end_date_edit.setDate(self.start_date_edit.date())
        self.populateWritersComboBox()

    def populateWritersComboBox(self):
        self.writers_combobox.clear()
        self.writers_combobox.addItems(self.getWritersList())
        self.writers_combobox.selectAll()

    def getRequiredReportTypes(self):
        parameter_list = self.parameters_combobox.getCheckedItems()
        time_frame_list = self.report_time_frames_combobox.getCheckedItems()
        reports_list = ["%s %s"%(time_frame, parameter_type) for time_frame in time_frame_list for parameter_type in parameter_list]
        return reports_list

    def populateReport(self, report):
        mode = self.pork_lane.mode
        columns = ["Report Date", "Writer ID", "Writer Email ID", "Writer Name", "Reporting Manager"]
        columns += mode
        self.report.setRowCount(0)
        row_counter = 0

        self.report.setColumnCount(len(columns))
        self.report.setHorizontalHeaderLabels(columns)
        self.report.setSortingEnabled(False)
        red = QtGui.QColor(231, 90, 83)
        green = QtGui.QColor(60, 179, 113)
        blue = QtGui.QColor(23, 136, 216)

        for writer_row in report:
            self.report.insertRow(row_counter)
            column_counter = 0
            for column_name in columns:
                if ("Efficiency" in column_name) and ("KRA" not in column_name):
                    steps = [1.00, 1.05, 1.10]
                elif (("CFM" in column_name) or ("GSEO" in column_name)) and ("KRA" not in column_name):
                    steps = [0.95, 0.97]
                elif ("KRA" in column_name) or ("Index" in column_name):
                    steps = [3.0,4.0,5.0]
                else:
                    steps = []
                parameter = writer_row[column_name]

                if (type(parameter) == str):
                    parameter_is_valid = False
                elif (parameter is None):
                    parameter_is_valid = False
                elif type(parameter) == float:
                    if math.isnan(parameter):
                        parameter_is_valid = False
                    else:
                        parameter_is_valid = True
                elif type(parameter) == datetime.date:
                    parameter_is_valid = False    
                else:
                    parameter_is_valid = True
                
                if parameter_is_valid:
                    if "Count" in column_name:
                        parameter_as_string = "%03d" % parameter
                    elif ("Stack Rank Index" in column_name) or ("KRA" in column_name):
                        parameter_as_string = "%01.2f" % parameter
                    else:
                        if math.isnan(parameter):
                            parameter_as_string = "-"
                        else:
                            parameter_as_string = "%06.2f%%" %(round(parameter*100,4))
                elif column_name in ["Report Date", "Writer ID", "Writer Name", "Writer Email ID", "Reporting Manager"]:
                    parameter_as_string = str(parameter)
                else:
                    parameter_as_string = "-"

                writer_cell_item = QtGui.QTableWidgetItem(parameter_as_string)
                writer_cell_item.setTextAlignment(QtCore.Qt.AlignCenter)
                if parameter_is_valid:
                    if steps != []:
                        if round(parameter,4) < steps[0]:
                            writer_cell_item.setBackgroundColor(red)
                        elif steps[0] <= (round(parameter,4)) <= steps[1]:
                            writer_cell_item.setBackgroundColor(green)
                        elif (round(parameter,4)) > steps[1]:
                            writer_cell_item.setBackgroundColor(blue)
                self.report.setItem(row_counter, column_counter, writer_cell_item)
                column_counter += 1
            row_counter += 1 
        self.report.setSortingEnabled(True)
        self.report.resizeColumnsToContents()
        self.report.resizeRowsToContents()
        sorting_factor = self.getSortColumn()
        if sorting_factor is not "NA":
            sort_index = mode.index(sorting_factor) + 5
            self.report.sortItems(sort_index,QtCore.Qt.DescendingOrder)

    def getSortColumn(self):
        if self.sorting_filter_combobox.currentIndex() != -1:
            return str(self.sorting_filter_combobox.currentText())
        else:
            return "NA"
            
    def displayProgress(self, progress_text, eta, progress, state):
        if state:
            self.pork_lane.allowRun = False
            self.build_button.setEnabled(True)
            self.progress_bar.setFormat("Completed at %s." %(datetime.datetime.strftime(eta,"%H:%M:%S")))        
            self.progress_bar.setValue(progress)
        else:
            self.build_button.setEnabled(False)
            self.progress_bar.setFormat("%s ETA: %s" %(progress_text, datetime.datetime.strftime(eta,"%H:%M:%S")))
            self.progress_bar.setValue(progress)

    def alertMessage(self, title, message):
        QtGui.QMessageBox.about(self, title, message)
Пример #21
0
    def createUI(self):
        self.users_list_label = QtGui.QLabel("Users: ")
        self.users_list_view = QtGui.QListWidget()

        self.add_employee_button = ImageButton(
                                        os.path.join("Images","add.png"),
                                            48,
                                            48,
                                            os.path.join("Images","add_mouseover.png")
                                        )
        self.edit_employee_button = ImageButton(
                                            os.path.join("Images","modify.png"),
                                            48,
                                            48,
                                            os.path.join("Images","modify_mouseover.png")
                                        )

        self.edit_employee_button.setCheckable(True)
        self.add_employee_button.setCheckable(True)
        self.button_group = QtGui.QButtonGroup()
        self.button_group.addButton(self.edit_employee_button)
        self.button_group.addButton(self.add_employee_button)
        self.button_group.setExclusive(True)


        user_list_buttons_layout = QtGui.QHBoxLayout()
        user_list_buttons_layout.addWidget(self.add_employee_button,0)
        user_list_buttons_layout.addWidget(self.edit_employee_button,0)

        users_list_layout = QtGui.QVBoxLayout()
        users_list_layout.addWidget(self.users_list_label,0)
        users_list_layout.addWidget(self.users_list_view,3)
        users_list_layout.addLayout(user_list_buttons_layout,1)
        users_list_layout.addStretch(1)

        self.employee_id_label = QtGui.QLabel("Employee ID")
        self.employee_id_lineedit = QtGui.QLineEdit()
        self.employee_name_label = QtGui.QLabel("Name")
        self.employee_name_lineedit = QtGui.QLineEdit()
        name_id_row = QtGui.QHBoxLayout()
        name_id_row.addWidget(self.employee_id_label,0)
        name_id_row.addWidget(self.employee_id_lineedit,2)
        name_id_row.addWidget(self.employee_name_label,0)
        name_id_row.addWidget(self.employee_name_lineedit,2)

        self.email_label = QtGui.QLabel("Email ID:")
        self.email_lineedit = QtGui.QLineEdit()
        email_row = QtGui.QHBoxLayout()
        email_row.addWidget(self.email_label,0)
        email_row.addWidget(self.email_lineedit,2)

        self.current_role_label = QtGui.QLabel("Role:")
        self.current_role_combobox = QtGui.QComboBox()
        current_role_row = QtGui.QHBoxLayout()
        current_role_row.addWidget(self.current_role_label,0)
        current_role_row.addWidget(self.current_role_combobox,1)

        self.doj_label = QtGui.QLabel("Date of Joining:")
        self.doj_dateedit = FormattedDateEdit()
        self.dol_checkbox = QtGui.QCheckBox("Last Working Date:")
        self.dol_checkbox.setToolTip("Check to mark the LWD of this employee.\nLeave unchecked if the employee is still in the team.")
        self.dol_dateedit = FormattedDateEdit()
        self.doj_dateedit.setCalendarPopup(True)
        self.dol_dateedit.setCalendarPopup(True)

        doj_dol_row = QtGui.QHBoxLayout()
        doj_dol_row.addWidget(self.doj_label, 0)
        doj_dol_row.addWidget(self.doj_dateedit, 0)
        doj_dol_row.addWidget(self.dol_checkbox, 0)
        doj_dol_row.addWidget(self.dol_dateedit, 0)

        self.former_role_label = QtGui.QLabel("Former Role:")
        self.former_role_combobox = QtGui.QComboBox()
        self.dop_checkbox = QtGui.QCheckBox("Promoted")
        self.dop_checkbox.setToolTip("Check this to record a promotion and keep details of the former role.")
        self.dop_label = QtGui.QLabel("Date of Promotion:")
        self.dop_dateedit = FormattedDateEdit()
        self.dop_dateedit.setCalendarPopup(True)

        promotion_row = QtGui.QHBoxLayout()
        promotion_row.addWidget(self.dop_checkbox, 0)
        promotion_row.addWidget(self.dop_label, 0)
        promotion_row.addWidget(self.dop_dateedit, 1)
        promotion_row.addWidget(self.former_role_label, 0)
        promotion_row.addWidget(self.former_role_combobox, 1)

        self.access_label = QtGui.QLabel("OINK Application Access")
        self.access_combobox = CheckableComboBox("Applications")
        self.access_combobox.addItems(["PORK","BACON","VINDALOO"])
        access_row = QtGui.QHBoxLayout()
        access_row.addWidget(self.access_label,0)
        access_row.addWidget(self.access_combobox,2)
        access_row.addStretch(1)

        self.reset_password_button = QtGui.QPushButton("Reset Password")
        self.save_button = QtGui.QPushButton("Save")
        self.reset_button = QtGui.QPushButton("Revert")

        form_buttons_layout = QtGui.QHBoxLayout()
        form_buttons_layout.addStretch(2)
        form_buttons_layout.addWidget(self.reset_password_button,0)
        form_buttons_layout.addWidget(self.save_button,0)
        form_buttons_layout.addWidget(self.reset_button,0)

        self.progress_bar = ProgressBar()
        self.status_label = QtGui.QLabel()

        self.manager_mapping = CopiableQTableWidget(0,0)

        self.manager_name_label = QtGui.QLabel("Reporting Manager:")
        self.manager_name_combobox = QtGui.QComboBox()
        self.manager_effective_date_label = QtGui.QLabel("Revision Date:")
        self.manager_effective_dateedit = FormattedDateEdit()
        self.manager_effective_dateedit.setDate(datetime.date.today())
        self.manager_effective_dateedit.setCalendarPopup(True)
        self.add_new_manager_mapping_row = QtGui.QPushButton("Add or Update")
        self.remove_manager_mapping_row = QtGui.QPushButton("Remove")

        manager_mapping_form = QtGui.QHBoxLayout()
        manager_mapping_form.addWidget(self.manager_name_label,0)
        manager_mapping_form.addWidget(self.manager_name_combobox,2)
        manager_mapping_form.addWidget(self.manager_effective_date_label,0)
        manager_mapping_form.addWidget(self.manager_effective_dateedit,1)
        manager_mapping_form.addWidget(self.add_new_manager_mapping_row,0)
        manager_mapping_form.addWidget(self.remove_manager_mapping_row,0)

        user_data_form_layout = QtGui.QVBoxLayout()
        user_data_form_layout.addLayout(name_id_row,0)
        user_data_form_layout.addLayout(email_row,0)
        user_data_form_layout.addLayout(current_role_row,0)
        user_data_form_layout.addLayout(doj_dol_row,0)
        user_data_form_layout.addLayout(promotion_row,0)
        user_data_form_layout.addLayout(access_row,0)
        user_data_form_layout.addLayout(form_buttons_layout,0)
        user_data_form_layout.addWidget(self.manager_mapping,1)
        user_data_form_layout.addLayout(manager_mapping_form,0)
        user_data_form_layout.addStretch(1)
        user_data_form_layout.addWidget(self.progress_bar,0)
        user_data_form_layout.addWidget(self.status_label,0)

        user_data_form = QtGui.QGroupBox("User Information:")
        user_data_form.setLayout(user_data_form_layout)

        layout = QtGui.QHBoxLayout()
        layout.addLayout(users_list_layout,1)
        layout.addWidget(user_data_form,2)
        self.central_widget = QtGui.QWidget()
        self.central_widget.setLayout(layout)

        self.setCentralWidget(self.central_widget)
        self.setWindowTitle("OINK User Manager")
        self.setWindowIcon(QtGui.QIcon(os.path.join('Images','PORK_Icon.png')))
        self.show()
Пример #22
0
class UserManager(QtGui.QMainWindow):
    def __init__(self, user_id, password,*args, **kwargs):
        super(UserManager, self).__init__(*args, **kwargs)
        self.user_id, self.password = user_id, password
        #get the list of users from MOSES.
        self.refreshData()
        self.createUI()
        self.mapEvents()
        self.initialize()

    def refreshData(self):
        self.employees_data = MOSES.getEmployeesList(self.user_id, self.password)
        self.manager_mapping_data = MOSES.getManagerMappingTable(self.user_id, self.password)

    def createUI(self):
        self.users_list_label = QtGui.QLabel("Users: ")
        self.users_list_view = QtGui.QListWidget()

        self.add_employee_button = ImageButton(
                                        os.path.join("Images","add.png"),
                                            48,
                                            48,
                                            os.path.join("Images","add_mouseover.png")
                                        )
        self.edit_employee_button = ImageButton(
                                            os.path.join("Images","modify.png"),
                                            48,
                                            48,
                                            os.path.join("Images","modify_mouseover.png")
                                        )

        self.edit_employee_button.setCheckable(True)
        self.add_employee_button.setCheckable(True)
        self.button_group = QtGui.QButtonGroup()
        self.button_group.addButton(self.edit_employee_button)
        self.button_group.addButton(self.add_employee_button)
        self.button_group.setExclusive(True)


        user_list_buttons_layout = QtGui.QHBoxLayout()
        user_list_buttons_layout.addWidget(self.add_employee_button,0)
        user_list_buttons_layout.addWidget(self.edit_employee_button,0)

        users_list_layout = QtGui.QVBoxLayout()
        users_list_layout.addWidget(self.users_list_label,0)
        users_list_layout.addWidget(self.users_list_view,3)
        users_list_layout.addLayout(user_list_buttons_layout,1)
        users_list_layout.addStretch(1)

        self.employee_id_label = QtGui.QLabel("Employee ID")
        self.employee_id_lineedit = QtGui.QLineEdit()
        self.employee_name_label = QtGui.QLabel("Name")
        self.employee_name_lineedit = QtGui.QLineEdit()
        name_id_row = QtGui.QHBoxLayout()
        name_id_row.addWidget(self.employee_id_label,0)
        name_id_row.addWidget(self.employee_id_lineedit,2)
        name_id_row.addWidget(self.employee_name_label,0)
        name_id_row.addWidget(self.employee_name_lineedit,2)

        self.email_label = QtGui.QLabel("Email ID:")
        self.email_lineedit = QtGui.QLineEdit()
        email_row = QtGui.QHBoxLayout()
        email_row.addWidget(self.email_label,0)
        email_row.addWidget(self.email_lineedit,2)

        self.current_role_label = QtGui.QLabel("Role:")
        self.current_role_combobox = QtGui.QComboBox()
        current_role_row = QtGui.QHBoxLayout()
        current_role_row.addWidget(self.current_role_label,0)
        current_role_row.addWidget(self.current_role_combobox,1)

        self.doj_label = QtGui.QLabel("Date of Joining:")
        self.doj_dateedit = FormattedDateEdit()
        self.dol_checkbox = QtGui.QCheckBox("Last Working Date:")
        self.dol_checkbox.setToolTip("Check to mark the LWD of this employee.\nLeave unchecked if the employee is still in the team.")
        self.dol_dateedit = FormattedDateEdit()
        self.doj_dateedit.setCalendarPopup(True)
        self.dol_dateedit.setCalendarPopup(True)

        doj_dol_row = QtGui.QHBoxLayout()
        doj_dol_row.addWidget(self.doj_label, 0)
        doj_dol_row.addWidget(self.doj_dateedit, 0)
        doj_dol_row.addWidget(self.dol_checkbox, 0)
        doj_dol_row.addWidget(self.dol_dateedit, 0)

        self.former_role_label = QtGui.QLabel("Former Role:")
        self.former_role_combobox = QtGui.QComboBox()
        self.dop_checkbox = QtGui.QCheckBox("Promoted")
        self.dop_checkbox.setToolTip("Check this to record a promotion and keep details of the former role.")
        self.dop_label = QtGui.QLabel("Date of Promotion:")
        self.dop_dateedit = FormattedDateEdit()
        self.dop_dateedit.setCalendarPopup(True)

        promotion_row = QtGui.QHBoxLayout()
        promotion_row.addWidget(self.dop_checkbox, 0)
        promotion_row.addWidget(self.dop_label, 0)
        promotion_row.addWidget(self.dop_dateedit, 1)
        promotion_row.addWidget(self.former_role_label, 0)
        promotion_row.addWidget(self.former_role_combobox, 1)

        self.access_label = QtGui.QLabel("OINK Application Access")
        self.access_combobox = CheckableComboBox("Applications")
        self.access_combobox.addItems(["PORK","BACON","VINDALOO"])
        access_row = QtGui.QHBoxLayout()
        access_row.addWidget(self.access_label,0)
        access_row.addWidget(self.access_combobox,2)
        access_row.addStretch(1)

        self.reset_password_button = QtGui.QPushButton("Reset Password")
        self.save_button = QtGui.QPushButton("Save")
        self.reset_button = QtGui.QPushButton("Revert")

        form_buttons_layout = QtGui.QHBoxLayout()
        form_buttons_layout.addStretch(2)
        form_buttons_layout.addWidget(self.reset_password_button,0)
        form_buttons_layout.addWidget(self.save_button,0)
        form_buttons_layout.addWidget(self.reset_button,0)

        self.progress_bar = ProgressBar()
        self.status_label = QtGui.QLabel()

        self.manager_mapping = CopiableQTableWidget(0,0)

        self.manager_name_label = QtGui.QLabel("Reporting Manager:")
        self.manager_name_combobox = QtGui.QComboBox()
        self.manager_effective_date_label = QtGui.QLabel("Revision Date:")
        self.manager_effective_dateedit = FormattedDateEdit()
        self.manager_effective_dateedit.setDate(datetime.date.today())
        self.manager_effective_dateedit.setCalendarPopup(True)
        self.add_new_manager_mapping_row = QtGui.QPushButton("Add or Update")
        self.remove_manager_mapping_row = QtGui.QPushButton("Remove")

        manager_mapping_form = QtGui.QHBoxLayout()
        manager_mapping_form.addWidget(self.manager_name_label,0)
        manager_mapping_form.addWidget(self.manager_name_combobox,2)
        manager_mapping_form.addWidget(self.manager_effective_date_label,0)
        manager_mapping_form.addWidget(self.manager_effective_dateedit,1)
        manager_mapping_form.addWidget(self.add_new_manager_mapping_row,0)
        manager_mapping_form.addWidget(self.remove_manager_mapping_row,0)

        user_data_form_layout = QtGui.QVBoxLayout()
        user_data_form_layout.addLayout(name_id_row,0)
        user_data_form_layout.addLayout(email_row,0)
        user_data_form_layout.addLayout(current_role_row,0)
        user_data_form_layout.addLayout(doj_dol_row,0)
        user_data_form_layout.addLayout(promotion_row,0)
        user_data_form_layout.addLayout(access_row,0)
        user_data_form_layout.addLayout(form_buttons_layout,0)
        user_data_form_layout.addWidget(self.manager_mapping,1)
        user_data_form_layout.addLayout(manager_mapping_form,0)
        user_data_form_layout.addStretch(1)
        user_data_form_layout.addWidget(self.progress_bar,0)
        user_data_form_layout.addWidget(self.status_label,0)

        user_data_form = QtGui.QGroupBox("User Information:")
        user_data_form.setLayout(user_data_form_layout)

        layout = QtGui.QHBoxLayout()
        layout.addLayout(users_list_layout,1)
        layout.addWidget(user_data_form,2)
        self.central_widget = QtGui.QWidget()
        self.central_widget.setLayout(layout)

        self.setCentralWidget(self.central_widget)
        self.setWindowTitle("OINK User Manager")
        self.setWindowIcon(QtGui.QIcon(os.path.join('Images','PORK_Icon.png')))
        self.show()

    def mapEvents(self):
        self.users_list_view.itemSelectionChanged.connect(self.changedCurrentEmployee)
        self.dop_checkbox.toggled.connect(self.toggleDOP)
        self.dol_checkbox.toggled.connect(self.toggleDOL)
        self.reset_password_button.clicked.connect(self.resetPassword)
        self.manager_mapping.currentCellChanged.connect(self.populateManagerMappingForm)
        self.add_new_manager_mapping_row.clicked.connect(self.addUpdateManagerMapping)
        self.remove_manager_mapping_row.clicked.connect(self.removeManagerMapping)
        self.save_button.clicked.connect(self.saveSelectedEmployee)
        self.reset_button.clicked.connect(self.changedCurrentEmployee)
        self.add_employee_button.clicked.connect(self.changeMode)
        self.edit_employee_button.clicked.connect(self.changeMode)


    def saveSelectedEmployee(self):
        #First, build a dictionary with the former values.
        #Then, build a dictionary with the new values.
        #pass these dictionaries to a MOSES function.
        employee_id = str(self.employee_id_lineedit.text()).strip()
        employee_name = str(self.employee_name_lineedit.text()).strip()
        employee_email_id = str(self.email_lineedit.text()).strip()
        employee_role = str(self.current_role_combobox.currentText()).strip()
        employee_doj = self.doj_dateedit.date().toPyDate()
        employee_dol = self.dol_dateedit.date().toPyDate() if self.dol_checkbox.isChecked() else "NULL"
        employee_dop = self.dop_dateedit.date().toPyDate() if self.dop_checkbox.isChecked() else "NULL"
        employee_former_role = str(self.former_role_combobox.currentText()).strip() if self.dop_checkbox.isChecked() else "NULL"
        employee_oink_access = str(",".join(self.access_combobox.getCheckedItems())) if len(self.access_combobox.getCheckedItems())>0 else "Pork"

        if self.add_employee_button.isChecked():
            mode = 1
        else:
            mode = 0

        if (employee_id in list(self.employees_data["Employee ID"])) and (mode == 1):
            self.alertMessage("Conflicting User ID","The User ID %s already exists in the system. You can't add another user with that Employee ID."%employee_id)
        else:
            employee_dict = {
                            "Employee ID": employee_id,
                            "Name": employee_name,
                            "Email ID": employee_email_id,
                            "Role": employee_role,
                            "DOJ": employee_doj,
                            "DOL": employee_dol,
                            "Date of Promotion": employee_dop,
                            "Former Role": employee_former_role,
                            "OINK Access Level": ",".join(employee_oink_access) if type(employee_oink_access) == list else employee_oink_access
                        }
            success = MOSES.createOrModifyEmployeeDetails(self.user_id, self.password, employee_dict, mode)
            if success:
                self.refreshData()
                self.initialize()
                self.populateEmployeesList()
                self.alertMessage("Success","Successfully completed the operation")
            else:
                self.alertMessage("Failure","Revenge is just the beginning.")


    def changeMode(self):
        if self.add_employee_button.isChecked():
            self.employee_id_lineedit.setEnabled(True)
        elif self.edit_employee_button.isChecked():
            self.employee_id_lineedit.setEnabled(False)


    def removeManagerMapping(self):
        failure = True
        employee_data = self.getEmployeeData(self.getSelectedEmployee())
        if employee_data is not None:
            employee_id = employee_data["Employee ID"]
            reporting_manager_name = str(self.manager_name_combobox.currentText())
            reporting_manager_data = self.getEmployeeData(reporting_manager_name)
            if reporting_manager_data is not None:
                reporting_manager_id = reporting_manager_data["Employee ID"]
                revision_date = self.manager_effective_dateedit.date().toPyDate()
                MOSES.removeFromManagerMapping(self.user_id, self.password, employee_id, reporting_manager_id, revision_date)
                self.changedCurrentEmployee()
                failure = False
            else:
                failure = True
        else:
            failure = True

        if failure:
            self.alertMessage("Failure","Please select a row that you'd like to delete. If you're having problems, select a cell in another row, then select a cell in the row you'd like to delete.")
        else:
            self.alertMessage("Success","Successfully removed a row from the Manager Mapping Table with the selected parameters.")

    def addUpdateManagerMapping(self):
        employee_id = self.getEmployeeData(self.getSelectedEmployee())["Employee ID"]
        reporting_manager_name = str(self.manager_name_combobox.currentText())
        reporting_manager_id = self.getEmployeeData(reporting_manager_name)["Employee ID"]
        revision_date = self.manager_effective_dateedit.date().toPyDate()
        MOSES.addUpdateManagerMapping(self.user_id, self.password, employee_id, reporting_manager_id, revision_date)
        self.changedCurrentEmployee()
        self.alertMessage("Success","Successfully added a row into the Manager Mapping Table with the selected parameters.")


    def populateManagerMappingForm(self, row=None, column=None):
        rows = sorted(set(index.row() for index in self.manager_mapping.selectedIndexes()))
        manager = self.manager_mapping_data.loc[row]
        name = manager["Reporting Manager Name"]
        date_ = manager["Revision Date"]
        if name is not None:
            self.manager_name_combobox.setCurrentIndex(self.manager_name_combobox.findText(name))
        else:
            self.manager_name_combobox.setCurrentIndex(-1)

        if date_ is not None:
            self.manager_effective_dateedit.setDate(date_)
        else:
            self.manager_effective_dateedit.setDate(datetime.date.today())

    def resetPassword(self):
        current_employee_name = str(self.users_list_view.currentItem().text())
        employee_data = self.getEmployeeData(current_employee_name)
        employee_id = employee_data["Employee ID"]
        MOSES.resetPassword(self.user_id, self.password, employee_id)
        self.alertMessage("Reset Password","Successfully reset %s's password to 'password'!"%(current_employee_name))

    def alertMessage(self, title, message):
        QtGui.QMessageBox.about(self, title, message)

    def toggleDOP(self):
        if self.dop_checkbox.isChecked():
            self.dop_dateedit.setEnabled(True)
            self.former_role_combobox.setEnabled(True)
        else:
            self.former_role_combobox.setCurrentIndex(-1)
            self.former_role_combobox.setEnabled(False)
            self.dop_dateedit.setEnabled(False)

    def toggleDOL(self):
        if self.dol_checkbox.isChecked():
            self.dol_dateedit.setEnabled(True)
        else:
            self.dol_dateedit.setEnabled(False)

    def changedCurrentEmployee(self):
        self.showPage(self.getSelectedEmployee())

    def showPage(self, employee_name):
        employee_data = self.getEmployeeData(employee_name)
        if employee_data is not None:
            self.employee_name_lineedit.setText(employee_data["Name"])
            self.employee_id_lineedit.setText(employee_data["Employee ID"])
            self.email_lineedit.setText(employee_data["Email ID"])
            self.doj_dateedit.setDate(employee_data["DOJ"])
            
            if employee_data["DOL"] is None:
                self.dol_checkbox.setChecked(False)
            else:
                self.dol_checkbox.setChecked(True)
                self.dol_dateedit.setDate(employee_data["DOL"])
            self.current_role_combobox.setCurrentIndex(self.current_role_combobox.findText(employee_data["Role"]))
            
            if employee_data["Date of Promotion"] is None:
                self.dop_checkbox.setChecked(False)
                self.former_role_combobox.setCurrentIndex(-1)
            else:
                self.dop_checkbox.setChecked(True)
                self.dop_dateedit.setDate(employee_data["Date of Promotion"])
                self.former_role_combobox.setCurrentIndex(self.former_role_combobox.findText(employee_data["Former Role"]))
            self.access_combobox.clearSelection()
            access_level = employee_data["Access Level"] if "," not in employee_data["Access Level"] else employee_data["Access Level"].split(",")
            self.access_combobox.select(access_level)

            self.toggleDOP()
            self.toggleDOL()

            self.manager_mapping_data = MOSES.getManagerMappingTable(self.user_id, self.password, employee_data["Employee ID"])
            self.manager_mapping.showDataFrame(self.manager_mapping_data)
            self.manager_mapping.verticalHeader().setStretchLastSection(False)
            self.manager_mapping.verticalHeader().setResizeMode(QtGui.QHeaderView.ResizeToContents)
            self.manager_mapping.verticalHeader().setVisible(True)

            self.manager_mapping.horizontalHeader().setStretchLastSection(True)
            self.manager_mapping.horizontalHeader().setResizeMode(QtGui.QHeaderView.ResizeToContents)
            self.manager_mapping.horizontalHeader().setResizeMode(QtGui.QHeaderView.Interactive)
            self.manager_mapping.horizontalHeader().setVisible(True)
            self.manager_mapping.horizontalHeader().setStretchLastSection(False)
            self.manager_name_combobox.setCurrentIndex(-1)

    def getSelectedEmployee(self):
        return str(self.users_list_view.currentItem().text())

    def getEmployeeData(self, employee_name):
        location_match = self.employees_data["Name"] == employee_name
        if True in set(location_match):
            employee_id = list(self.employees_data[location_match]["Employee ID"])[0]
            employee_name = list(self.employees_data[location_match]["Name"])[0]
            employee_email_id = list(self.employees_data[location_match]["Email ID"])[0]
            employee_doj = list(self.employees_data[location_match]["DOJ"])[0]
            employee_dol = list(self.employees_data[location_match]["DOL"])[0]
            employee_role = list(self.employees_data[location_match]["Role"])[0]
            employee_dop = list(self.employees_data[location_match]["Date of Promotion"])[0]
            employee_former_role = list(self.employees_data[location_match]["Former Role"])[0]
            employee_oink_access = list(self.employees_data[location_match]["OINK Access Level"])[0]

            data = {
                    "Employee ID": employee_id,
                    "Name": employee_name,
                    "Email ID": employee_email_id,
                    "DOJ": employee_doj,
                    "DOL": employee_dol,
                    "Role": employee_role,
                    "Date of Promotion": employee_dop,
                    "Former Role": employee_former_role,
                    "Access Level": employee_oink_access
                }
        else:
            data = None
        return data


    def initialize(self):
        employees_list = list(set(self.employees_data["Name"]))
        employees_list.sort()
        self.users_list_view.clear()
        self.users_list_view.addItems(employees_list)
        self.manager_name_combobox.clear()
        self.manager_name_combobox.addItems(employees_list)
        roles = list(set(self.employees_data["Role"]))
        roles.sort()
        self.current_role_combobox.addItems(roles)
        self.former_role_combobox.addItems(roles)
        self.toggleDOL()
        self.toggleDOP()
        self.manager_name_combobox.setCurrentIndex(-1)
        self.manager_effective_dateedit.setDate(datetime.date.today())
        self.edit_employee_button.setChecked(True)
        self.employee_id_lineedit.setEnabled(False)
        self.users_list_view.setCurrentRow(0)


    def populateEmployeesList(self):
        pass
    
    def addEmployee(self):
        pass

    def modifyEmployee(self):
        pass

    def resetEmployeePassword(self):
        pass

    def promoteEmployee(self):
        pass

    def populateReportingManagerList(self):
        pass
Пример #23
0
    def createUI(self):
        self.start_date_label = QtGui.QLabel("<b>Date:</b>")
        self.start_date_edit = QtGui.QDateTimeEdit()
        self.start_date_edit.setToolTip("Set the date for which you want to generate the report.")
        lwd = MOSES.getLastWorkingDate(self.user_id, self.password, queryUser="******")
        self.start_date_edit.setDate(lwd)
        self.start_date_edit.setDisplayFormat("MMMM dd, yyyy")
        self.start_date_edit.setMinimumDate(QtCore.QDate(2015,1,1))
        self.start_date_edit.setCalendarPopup(True)

        self.end_date_edit = QtGui.QDateTimeEdit()
        self.end_date_edit.setToolTip("Select an end date. Only working days will be considered for the calculation.\nThis field will be disabled if the checkbox isn't marked to calculate the average statistics between dates.")
        self.end_date_edit.setDate(self.start_date_edit.date())
        self.end_date_edit.setDisplayFormat("MMMM dd, yyyy")
        self.end_date_edit.setMinimumDate(self.start_date_edit.date())
        self.end_date_edit.setCalendarPopup(True)

        self.writers_combobox = CheckableComboBox("Writers")
        self.writers_combobox.setToolTip("Select a group of writers if you want to check their performance for some time frame.")

        report_names = ["Article Count","Efficiency","Audit Count","CFM","GSEO","Stack Rank Index","Efficiency KRA","CFM KRA","GSEO KRA"]#,"Audit Percentage"]
        self.parameters_combobox = CheckableComboBox("Report Values")
        self.parameters_combobox.addItems(report_names)
        self.parameters_combobox.select(["Efficiency","CFM","GSEO", "Article Count", "Audit Count"])

        self.report_time_frames_combobox = CheckableComboBox("Timeframe")
        self.report_time_frames_combobox.addItems(["Daily","Weekly","Monthly","Quarterly","Half-Yearly"])
        self.report_time_frames_combobox.select(["Daily","Weekly"])

        self.sorting_filter_label = QtGui.QLabel("<b>Sort By:</b>")
        self.sorting_filter_combobox = QtGui.QComboBox()
        self.sorting_filter_combobox.setToolTip("Select the parameter you want to sort the generated reports by.")

        self.build_button = QtGui.QPushButton("Build Daily Team Performance Report")
        self.build_button.setToolTip("Click this button to start building the report")

        self.plot_button = QtGui.QPushButton("Plot")
        self.plot_button.setToolTip("Check this if you want to automatically plot the graphs.")
        
        self.build_dbr_button = QtGui.QPushButton("Build DBR Report")
        self.build_dbr_button.setToolTip("Check this if you want to automatically plot the graphs.")
        
        self.build_wbr_button = QtGui.QPushButton("Build WBR Report")
        self.build_wbr_button.setToolTip("Check this if you want to automatically plot the graphs.")
        
        self.progress_bar = ProgressBar()

        self.export_graphs_button = QtGui.QPushButton("Save")
        self.export_graphs_button.setToolTip("Click this button to save the generated reports and graphs in a desired folder location.")

        self.report = CopiableQTableWidget(0, 0)
        self.t_report = CopiableQTableWidget(0, 0)
        self.dbr_report = CopiableQTableWidget(0, 0)
        self.wbr_report = CopiableQTableWidget(0, 0)

        self.graphs = DailyGraphView()
        self.t_graphs = DailyGraphView()

        self.reports_tab = QtGui.QTabWidget()
        self.reports_tab.addTab(self.report,"Writers' Report")
        #self.reports_tab.addTab(self.graphs, "Writers' Graphs")
        #self.reports_tab.addTab(self.t_report,"Team Report")
        #self.reports_tab.addTab(self.t_graphs, "Team Graphs")
        self.reports_tab.addTab(self.dbr_report, "DBR Report")
        self.reports_tab.addTab(self.wbr_report, "WBR Report")

        self.status = QtGui.QLabel("I'm a Porkitzer Prize Winning Reporter.")

        options_layout_row_1 = QtGui.QHBoxLayout()
        options_layout_row_1.addWidget(self.start_date_label,0)
        options_layout_row_1.addWidget(self.start_date_edit,1)
        options_layout_row_1.addWidget(self.end_date_edit,1)
        options_layout_row_1.addWidget(self.writers_combobox,1)
        options_layout_row_1.addWidget(self.parameters_combobox,1)
        options_layout_row_1.addWidget(self.report_time_frames_combobox,1)
        options_layout_row_1.addStretch(2)
        
        options_layout_row_2 = QtGui.QHBoxLayout()
        options_layout_row_2.addWidget(self.sorting_filter_label,0)
        options_layout_row_2.addWidget(self.sorting_filter_combobox,1)
        options_layout_row_2.addWidget(self.build_button,0)
        #options_layout_row_2.addWidget(self.plot_button,0)
        options_layout_row_2.addWidget(self.build_dbr_button,0)
        options_layout_row_2.addWidget(self.build_wbr_button,0)
        options_layout_row_2.addStretch(2)

        options_layout = QtGui.QVBoxLayout()
        options_layout.addLayout(options_layout_row_1,0)
        options_layout.addLayout(options_layout_row_2,0)
        self.daily_porker_logo = ImageButton(
                                        os.path.join(MOSES.getPathToImages(),"newspaper.png"),
                                        100,
                                        100,
                                        os.path.join(MOSES.getPathToImages(),"newspaper_mouseover.png")
                                    )
        self.daily_porker_logo.setFlat(True)
        options = QtGui.QGroupBox("Report Options")
        options.setLayout(options_layout)
        options_with_logo = QtGui.QHBoxLayout()
        options_with_logo.addWidget(self.daily_porker_logo, 0, QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
        options_with_logo.addWidget(options, 3)

        layout = QtGui.QVBoxLayout()
        layout.addLayout(options_with_logo,1)
        layout.addWidget(self.reports_tab,3)
        layout.addWidget(self.progress_bar,0)
        layout.addWidget(self.status,0)

        self.setLayout(layout)
        self.setWindowTitle("The Daily Porker: Straight from the Pigs")

        icon_file_name_path = os.path.join(MOSES.getPathToImages(),'PORK_Icon.png')
        self.setWindowIcon(QtGui.QIcon(icon_file_name_path))
Пример #24
0
 def draw(self, surface):
     if self.visible:
         ImageButton.draw(self, surface)
         surface.blit(self.style['obj'], self.getPosition())
Пример #25
0
class OpenglScreen(QtOpenGL.QGLWidget):
    SELECT_SCREEN = 1
    INTRO_SCREEN_1 = 2
    INTRO_SCREEN_2 = 3
    INTRO_SCREEN_3 = 4
    BADGE_SCREEN = 5

    def __init__(self, width, height):
        # Base constructor
        QtOpenGL.QGLWidget.__init__(self)
        self.setMouseTracking(True)
        self.width = width
        self.height = height

        # Initialize the painter
        self.painter = QtGui.QPainter()
        self.printer = Printer()

        self.gender = -1
        self.avatarImg = None
        self.avatarTex = None

        # Adding the avatar buttons
        # Avatar Male
        self.initMImg = pygame.image.load("../../images/wireframe_m0.png")
        self.initMTex = 0
        # Avatar Female
        self.initFImg = pygame.image.load("../../images/wireframe_f0.png")
        self.initFTex = 0

        self.welcomeImg = pygame.image.load(
            "../../images/welcome_intro/welcome_noavatars.png")
        self.welcomeTex = 0

        # self.btnGraph1 = Button(u"\u25c4", 10, 15, 100, 50)
        # self.btnGraph2 = Button(u"\u25ba", self.width - 110, 15, 100, 50)

        self.Next1btn = Button(u"\u25ba", self.width - 110, 15, 100, 50)
        self.Next1btn.disable()
        self.Next2btn = Button(u"\u25ba", self.width - 110, 15, 100, 50)
        self.Next2btn.disable()
        self.Next3btn = Button(u"\u25ba", self.width - 110, 15, 100, 50)
        self.Next3btn.disable()
        self.btnOkay = Button("DONE", self.width - 130, 15, 120, 50)
        self.btnOkay.disable()

        self.Back1btn = Button(u"\u25c4", 10, 15, 100, 50)
        self.Back1btn.disable()
        self.Back2btn = Button(u"\u25c4", 10, 15, 100, 50)
        self.Back2btn.disable()
        self.Back3btn = Button(u"\u25c4", 10, 15, 100, 50)
        self.Back3btn.disable()

        self.showing = self.SELECT_SCREEN

    def initializeGL(self):
        #self.autoBufferSwap(False)

        # Initialize the context
        gl.glClearColor(0.94, 0.94, 0.0, 1)
        gl.glEnable(gl.GL_LINE_STIPPLE)
        gl.glEnable(gl.GL_TEXTURE_2D)

        # self.badgeScreen.init("")
        self.initMTex = gl.glGenTextures(1)
        gl.glBindTexture(gl.GL_TEXTURE_2D, self.initMTex)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER,
                           gl.GL_LINEAR)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER,
                           gl.GL_LINEAR)
        gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA,
                        self.initMImg.get_width(), self.initMImg.get_height(),
                        0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE,
                        pygame.image.tostring(self.initMImg, "RGBA", 1))
        # Avatar Female
        self.initFTex = gl.glGenTextures(1)
        gl.glBindTexture(gl.GL_TEXTURE_2D, self.initFTex)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER,
                           gl.GL_LINEAR)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER,
                           gl.GL_LINEAR)
        gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA,
                        self.initFImg.get_width(), self.initFImg.get_height(),
                        0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE,
                        pygame.image.tostring(self.initFImg, "RGBA", 1))

        self.welcomeTex = gl.glGenTextures(1)
        gl.glBindTexture(gl.GL_TEXTURE_2D, self.welcomeTex)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER,
                           gl.GL_LINEAR)
        gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER,
                           gl.GL_LINEAR)
        gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA,
                        self.welcomeImg.get_width(),
                        self.welcomeImg.get_height(), 0, gl.GL_RGBA,
                        gl.GL_UNSIGNED_BYTE,
                        pygame.image.tostring(self.welcomeImg, "RGBA", 1))

        self.buttonM = ImageButton(self.initMImg, self.initMTex, 1090, 535)
        self.buttonF = ImageButton(self.initFImg, self.initFTex, 444, 535)
        self.buttonM.enable()
        self.buttonF.enable()

    def resizeGL(self, width, height):
        # Update the attributes
        self.width = width
        self.height = height

        # Set up an orthographic view
        gl.glMatrixMode(gl.GL_PROJECTION)
        gl.glLoadIdentity()
        gl.glOrtho(0, self.width, self.height, 0, -1, 1)
        gl.glMatrixMode(gl.GL_MODELVIEW)
        gl.glLoadIdentity()

        # Set up the viewport
        gl.glViewport(0, 0, width, height)

    # Displaying the images for the new screens
    def displayImage(self, texture, image, x, y):
        gl.glPushMatrix()
        gl.glLoadIdentity()
        gl.glColor3f(0.94, 0.94, 0.94)
        #gl.glColor4f(1.0, 1.0, 1.0, 0.0)
        gl.glBindTexture(gl.GL_TEXTURE_2D, texture)
        gl.glBegin(gl.GL_QUADS)
        gl.glTexCoord2f(0.0, 1.0)
        gl.glVertex2f(x, y)

        gl.glTexCoord2f(1.0, 1.0)
        gl.glVertex2f(x + image.get_width(), y)

        gl.glTexCoord2f(1.0, 0.0)
        gl.glVertex2f(x + image.get_width(), y + image.get_height())

        gl.glTexCoord2f(0.0, 0.0)
        gl.glVertex2f(x, y + image.get_height())
        gl.glEnd()
        gl.glPopMatrix()
        gl.glBindTexture(gl.GL_TEXTURE_2D, 0)

    def mouseMoveEvent(self, event):
        self.buttonM.update(event.x(), event.y())
        self.buttonF.update(event.x(), event.y())
        self.btnOkay.update(event.x(), event.y())
        self.Next1btn.update(event.x(), event.y())
        self.Next2btn.update(event.x(), event.y())
        self.Next3btn.update(event.x(), event.y())
        self.btnOkay.update(event.x(), event.y())
        self.Back1btn.update(event.x(), event.y())
        self.Back2btn.update(event.x(), event.y())
        self.Back3btn.update(event.x(), event.y())
        self.repaint()

    def mousePressEvent(self, event):
        if (self.buttonM.isMouseOver() == True):
            self.showing = self.INTRO_SCREEN_1
            self.Next1btn.enable()
            self.buttonF.disable()
            self.buttonM.disable()
            self.gender = 0  # Checking if male
            self.repaint()

        elif (self.buttonF.isMouseOver() == True):
            self.showing = self.INTRO_SCREEN_1
            self.Next1btn.enable()
            self.buttonF.disable()
            self.buttonM.disable()
            self.gender = 1  # Checking if female
            self.repaint()

        if (self.Next1btn.isMouseOver() == True):
            self.showing = self.INTRO_SCREEN_2
            self.Next2btn.enable()
            self.Back1btn.enable()
            self.Next1btn.disable()
            self.repaint()

        if (self.Next2btn.isMouseOver() == True):
            self.showing = self.INTRO_SCREEN_3
            self.Next3btn.enable()
            self.Back2btn.enable()
            self.Next2btn.disable()
            self.repaint()

        if (self.Next3btn.isMouseOver() == True):
            self.showing = self.BADGE_SCREEN
            self.btnOkay.enable()
            self.Back3btn.enable()
            self.Next3btn.disable()
            self.repaint()

        if (self.btnOkay.isMouseOver() == True):
            import subprocess
            # os.chdir('../')
            theproc = subprocess.Popen([sys.executable, "index.py"])
            theproc.communicate()
            sys.exit(0)

        if (self.Back1btn.isMouseOver() == True):
            self.showing = self.INTRO_SCREEN_1
            self.Back1btn.disable()
            self.Next2btn.disable()
            self.Next1btn.enable()
            self.repaint()

        if (self.Back2btn.isMouseOver() == True):
            self.showing = self.INTRO_SCREEN_2
            self.Back2btn.disable()
            self.Next3btn.disable()
            self.Next2btn.enable()
            self.Back1btn.enable()
            self.repaint()

        if (self.Back3btn.isMouseOver() == True):
            self.showing = self.INTRO_SCREEN_3
            self.Back3btn.disable()
            self.btnOkay.disable()
            self.Next3btn.enable()
            self.Back2btn.enable()
            self.repaint()

    def paintEvent(self, event):
        self.painter.begin(self)
        self.resizeGL(self.width, self.height)

        gl.glClearColor(0.94, 0.94, 0.94, 1)

        gl.glClear(gl.GL_COLOR_BUFFER_BIT)
        gl.glLoadIdentity()

        if self.showing == self.SELECT_SCREEN:
            self.displayImage(self.welcomeTex, self.welcomeImg, 0, 0)
            self.buttonM.drawBackground()
            self.buttonF.drawBackground()

        elif self.showing == self.INTRO_SCREEN_1:
            # Loading the corresponding images based on the gender
            if self.gender == 0:
                self.intro1_Img = pygame.image.load(
                    "../../images/welcome_intro/intro_male_1.png")
                self.intro1_Tex = 0
                self.intro2_Img = pygame.image.load(
                    "../../images/welcome_intro/intro_male_2.png")
                self.intro2_Tex = 0
                self.intro3_Img = pygame.image.load(
                    "../../images/welcome_intro/intro_male_3.png")
                self.intro3_Tex = 0
                self.intro4_Img = pygame.image.load(
                    "../../images/welcome_intro/intro_male_4.png")
                self.intro4_Tex = 0
            else:
                self.intro1_Img = pygame.image.load(
                    "../../images/welcome_intro/intro_female_1.png")
                self.intro1_Tex = 0
                self.intro2_Img = pygame.image.load(
                    "../../images/welcome_intro/intro_female_2.png")
                self.intro2_Tex = 0
                self.intro3_Img = pygame.image.load(
                    "../../images/welcome_intro/intro_female_3.png")
                self.intro3_Tex = 0
                self.intro4_Img = pygame.image.load(
                    "../../images/welcome_intro/intro_female_4.png")
                self.intro4_Tex = 0

            # Getting the images ready to display
            self.intro1_Tex = gl.glGenTextures(1)
            gl.glBindTexture(gl.GL_TEXTURE_2D, self.intro1_Tex)
            gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER,
                               gl.GL_LINEAR)
            gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER,
                               gl.GL_LINEAR)
            gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA,
                            self.intro1_Img.get_width(),
                            self.intro1_Img.get_height(), 0, gl.GL_RGBA,
                            gl.GL_UNSIGNED_BYTE,
                            pygame.image.tostring(self.intro1_Img, "RGBA", 1))

            # Displaying everything for First intro screen
            self.displayImage(self.intro1_Tex, self.intro1_Img, 0, 0)
            self.Next1btn.drawBackground()
            self.Next1btn.drawText(self.painter, self.printer,
                                   self.printer.fontNormal)

        elif self.showing == self.INTRO_SCREEN_2:
            # Getting the images ready to display
            self.intro2_Tex = gl.glGenTextures(1)
            gl.glBindTexture(gl.GL_TEXTURE_2D, self.intro2_Tex)
            gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER,
                               gl.GL_LINEAR)
            gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER,
                               gl.GL_LINEAR)
            gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA,
                            self.intro2_Img.get_width(),
                            self.intro2_Img.get_height(), 0, gl.GL_RGBA,
                            gl.GL_UNSIGNED_BYTE,
                            pygame.image.tostring(self.intro2_Img, "RGBA", 1))

            # Displaying everything for First intro screen
            self.displayImage(self.intro2_Tex, self.intro2_Img, 0, 0)
            self.Next2btn.drawBackground()
            self.Back1btn.drawBackground()
            self.Next2btn.drawText(self.painter, self.printer,
                                   self.printer.fontNormal)
            self.Back1btn.drawText(self.painter, self.printer,
                                   self.printer.fontNormal)

        elif self.showing == self.INTRO_SCREEN_3:
            # Getting the images ready to display
            self.intro3_Tex = gl.glGenTextures(1)
            gl.glBindTexture(gl.GL_TEXTURE_2D, self.intro3_Tex)
            gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER,
                               gl.GL_LINEAR)
            gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER,
                               gl.GL_LINEAR)
            gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA,
                            self.intro3_Img.get_width(),
                            self.intro3_Img.get_height(), 0, gl.GL_RGBA,
                            gl.GL_UNSIGNED_BYTE,
                            pygame.image.tostring(self.intro3_Img, "RGBA", 1))

            # Displaying everything for First intro screen
            self.displayImage(self.intro3_Tex, self.intro3_Img, 0, 0)
            self.Next3btn.drawBackground()
            self.Back2btn.drawBackground()
            self.Next3btn.drawText(self.painter, self.printer,
                                   self.printer.fontNormal)
            self.Back2btn.drawText(self.painter, self.printer,
                                   self.printer.fontNormal)

        elif self.showing == self.BADGE_SCREEN:
            # self.badgeScreen.draw()
            self.intro4_Tex = gl.glGenTextures(1)
            gl.glBindTexture(gl.GL_TEXTURE_2D, self.intro4_Tex)
            gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER,
                               gl.GL_LINEAR)
            gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER,
                               gl.GL_LINEAR)
            gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA,
                            self.intro4_Img.get_width(),
                            self.intro4_Img.get_height(), 0, gl.GL_RGBA,
                            gl.GL_UNSIGNED_BYTE,
                            pygame.image.tostring(self.intro4_Img, "RGBA", 1))

            # Displaying everything for First intro screen
            self.displayImage(self.intro4_Tex, self.intro3_Img, 0, 0)
            self.btnOkay.drawBackground()
            self.Back3btn.drawBackground()
            self.btnOkay.drawText(self.painter, self.printer,
                                  self.printer.fontNormal)
            self.Back3btn.drawText(self.painter, self.printer,
                                   self.printer.fontNormal)

        self.painter.end()
        #self.swapBuffers()

    def paintGL(self):
        gl.glClear(gl.GL_COLOR_BUFFER_BIT)
        gl.glLoadIdentity()
Пример #26
0
class PiggyBankSummarizer(QtGui.QWidget):
    changedPiggyBank = QtCore.pyqtSignal()

    def __init__(self, piggy_bank=None, category_tree=None, *args, **kwargs):
        super(PiggyBankSummarizer, self).__init__(*args, **kwargs)
        self.createUI()
        self.mapEvents()
        if piggy_bank is not None:
            self.setPiggyBank(piggy_bank)

    def createUI(self):
        self.summarization_label = QtGui.QLabel("Summarize by:")

        self.available_methods_list_widget = QtGui.QListWidget()
        self.selected_methods_list_widget = QtGui.QListWidget()

        path_to_images_folder = os.path.join(os.getcwd(),"Images") if "OINKModules" not in os.getcwd() else os.path.join(os.getcwd(),"..","Images")

        self.select_method_button = ImageButton(os.path.join(path_to_images_folder,"rightarrow.png"),25,25)
        self.deselect_method_button = ImageButton(os.path.join(path_to_images_folder,"leftarrow.png"),25,25)

        #self.move_up_button = ImageButton(os.path.join(path_to_images_folder,"uparrow.png"),25,25)
        #self.move_down_button = ImageButton(os.path.join(path_to_images_folder,"downarrow.png"),25,25)

        self.summarize_button = ImageButton(os.path.join(path_to_images_folder,"checkmark_green.png"),25,25)
        self.summarize_button.setToolTip("Click to summarize")

        self.reset_button = ImageButton(os.path.join(path_to_images_folder,"cross.png"),25,25)
        self.reset_button.setToolTip("Click to reset the summarization options")
        
        self.summary_table = CopiableQTableWidget(0,0)


        select_buttons_layout = QtGui.QVBoxLayout()
        select_buttons_layout.addStretch(2)
        select_buttons_layout.addWidget(self.select_method_button,0)
        select_buttons_layout.addWidget(self.deselect_method_button,0)
        select_buttons_layout.addStretch(2)

        finish_buttons_layout = QtGui.QVBoxLayout()
        finish_buttons_layout.addStretch(2)
        finish_buttons_layout.addStretch(2)
        #finish_buttons_layout.addWidget(self.move_up_button,0)
        #finish_buttons_layout.addWidget(self.move_down_button,0)
        finish_buttons_layout.addStretch(2)
        finish_buttons_layout.addWidget(self.summarize_button,0)
        finish_buttons_layout.addWidget(self.reset_button,0)
        finish_buttons_layout.addStretch(2)

        selector_layout = QtGui.QHBoxLayout()
        selector_layout.addWidget(self.available_methods_list_widget,1)
        selector_layout.addLayout(select_buttons_layout, 1)
        selector_layout.addWidget(self.selected_methods_list_widget,1)
        selector_layout.addLayout(finish_buttons_layout, 1)

        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.summarization_label)
        layout.addLayout(selector_layout)
        layout.addWidget(self.summary_table)

        self.setLayout(layout)

    def mapEvents(self):
        self.summarize_button.clicked.connect(self.summarize)
        self.reset_button.clicked.connect(self.reset)
        self.select_method_button.clicked.connect(self.select)
        self.deselect_method_button.clicked.connect(self.deselect)

    def reset(self):
        self.setPiggyBank()
        self.summary_table.showDataFrame(None)
            
    def select(self):
        self.pushFromTo(self.available_methods_list_widget, self.selected_methods_list_widget)
    
    def deselect(self):
        self.pushFromTo(self.selected_methods_list_widget, self.available_methods_list_widget)

    def setPiggyBank(self, piggy_bank=None):
        if piggy_bank is not None:
            self.piggy_bank = piggy_bank
        self.available_methods_list_widget.clear()
        self.selected_methods_list_widget.clear()
        if type(self.piggy_bank) == pd.DataFrame:
            columns = self.piggy_bank.columns
            self.available_methods_list_widget.addItems(columns)
            #self.available_methods_list_widget.setSortingEnabled(True)
            #self.available_methods_list_widget.sortItems()
            self.enableSummarize()
        else:
            self.disableSummarize()

    def enableSummarize(self):
        pass
    
    def summarize(self):
        no_of_selected_methods = self.selected_methods_list_widget.count()
        all_selected_fields = [str(self.selected_methods_list_widget.item(x).text()) for x in range(no_of_selected_methods)]
        selected_methods = [x for x in all_selected_fields if x != "Word Count"] + ["Word Count"]
        if len(selected_methods)>0:
            #print "Selected: %s"%selected_methods
            column_names = selected_methods[:-1] + ["Count"] + ["Total Word Count"]
            summary_data = self.piggy_bank[selected_methods]
            #print summary_data
            summary_data_as_list = summary_data.values.tolist()
            #print summary_data_as_list
            final_summary_data = []
            for row in summary_data_as_list:
                required_list = row[:-1] 
                word_count = sum([x[-1] for x in summary_data_as_list if x[:-1] == required_list])
                #word_count = sum[each_row["Word Count"] for each_row in summary_data_as_list if each_row == row]
                final_summary_data.append(required_list + [[x[:-1] for x in summary_data_as_list].count(required_list)] + [word_count])

            summary_data_frame = pd.DataFrame(final_summary_data, columns=column_names).drop_duplicates()

            self.summary_table.showDataFrame(summary_data_frame)
            self.summary_table.adjustToColumns()
        else:
            print "Select something, Jack."


    def pushFromTo(self, source_list_widget, destination_list_widget):
        #identify the selected attributes
        selected_attribute_items = source_list_widget.selectedItems()
        #Store them in a list.
        selected_attributes = [str(selected_attribute_item.text()) for selected_attribute_item in selected_attribute_items]
        #Send them to the destination list.
        destination_list_widget.addItems(selected_attributes)
        #Remove them from the source list
        for selected_item in selected_attribute_items:
            source_list_widget.takeItem(source_list_widget.row(selected_item))
Пример #27
0
    def do_init(self, db):
        self.btn_exit = self.text_button(0, 0, 150, 40, "Exit")
        # self.btn_exit.set_color("lightblue", "black")

        self.btn_new_game = self.text_button(self.WIN_WIDTH - 150, 0,
                                             150, 40, "Neues Spiel")

        x = 0
        w = 200
        self.players = []
        for i, opt in enumerate([self.SETTING_PLAYER1, self.SETTING_PLAYER2]):
            profile_image = get_next_icon_filename(None)
            profile_image = self.get_setting(opt, profile_image)

            y = 100
            name = self.text_button(x, y, w, 40, "")
            name.set_font(self.STATUS_FONT)

            y += 60
            icon = get_icon(profile_image)
            btn = ImageButton(self.canvas, x, y, w, 150, icon)
            btn.set_color("black", "black")

            y += 150
            now_lbl = self.text_button(x, y, w, 60, "0")
            now_lbl.set_font(self.STATUS_FONT)
            now_lbl.set_color("green", "black")

            y += 60
            all_lbl = self.text_button(x, y, w, 60, "0")
            all_lbl.set_color("gray", "black")

            player = {
                "name": name,
                "profile": btn,
                "profile_image": profile_image,
                "now_lbl": now_lbl,
                "all_lbl": all_lbl,
                "all_cnt": 0,
                "now_cnt": 0,
            }
            self.players.append(player)

            x = self.WIN_WIDTH - w

        # explicitly set player profile images
        for player in self.players:
            self.__set_player_profile(player, player["profile_image"])

        left = (self.WIN_WIDTH - Memory.SIZE * self.BTN_SIZE) / 2

        self.buttons = []

        x = left
        y = (self.WIN_HEIGHT - Memory.SIZE * self.BTN_SIZE) / 2
        for i in range(Memory.SIZE ** 2):
            btn = ImageButton(self.canvas, x, y, self.BTN_SIZE, self.BTN_SIZE)
            btn.set_font(self.BIG_BUTTON_FONT)
            btn.set_color("gray", "#336699")

            self.buttons.append(btn)
            x += self.BTN_SIZE
            if ((i+1) % Memory.SIZE) == 0:
                x = left
                y += self.BTN_SIZE

        self.do_reset(None)
Пример #28
0
class Bacon(QtGui.QMainWindow):
    """"""
    def __init__(self, user_id, password, category_tree, employees_list, brand_list):
        super(Bacon, self).__init__()
        self.user_id = user_id
        self.password = password
        self.category_tree = category_tree
        self.employees_list = employees_list
        self.brand_list = brand_list
        self.current_processing_date = MOSES.getLastWorkingDate(self.user_id, self.password,datetime.date.today(),"All")
        self.createUI()
        self.mapEvents()
    def center(self):
        frameGm = self.frameGeometry()
        screen = QtGui.QApplication.desktop().screenNumber(QtGui.QApplication.desktop().cursor().pos())
        centerPoint = QtGui.QApplication.desktop().screenGeometry(screen).center()
        frameGm.moveCenter(centerPoint)
        self.move(frameGm.topLeft())

    def createUI(self):
        """"""
        path_to_images = MOSES.getPathToImages()
        self.raw_data_uploader_button = ImageButton(
                                                os.path.join(path_to_images,"upload_raw_data.png"),
                                                48,
                                                48, os.path.join(path_to_images,"upload_raw_data_mouseover.png"))
        self.tna_viewer_button = ImageButton(
                                                os.path.join(path_to_images,"tna.png"),
                                                48,
                                                48,
                                                os.path.join(path_to_images,"tna_mouseover.png")
                                                )
        self.piggybank_button = ImageButton(
                                                os.path.join(path_to_images,"piggybank.png"),
                                                48,
                                                48,
                                                os.path.join(path_to_images,"piggybank_mouseover.png")
                                                )
        self.seeker_button = ImageButton(
                                                os.path.join(path_to_images,"find.png"),
                                                48,
                                                48,
                                                os.path.join(path_to_images,"find_mouseover.png")
                                                )

        self.taunter = Taunter()
        self.bacon_icon = ImageButton(
                                                os.path.join(path_to_images,"quality.png"),
                                                150,
                                                150,
                                                os.path.join(path_to_images,"quality_mouseover.png")
                                                )
        self.bacon_icon.setToolTip("Get to work, Poozers.")
        
        row_1 = QtGui.QHBoxLayout()
        row_1.addWidget(self.raw_data_uploader_button)
        row_1.addWidget(self.tna_viewer_button)
        row_1.addWidget(self.piggybank_button)
        row_1.addWidget(self.seeker_button)
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.bacon_icon,0,QtCore.Qt.AlignHCenter)
        layout.addLayout(row_1,1)
        layout.addWidget(self.taunter,0)

        self.main_widget = QtGui.QWidget()
        self.main_widget.setLayout(layout)
        self.setCentralWidget(self.main_widget)
        self.setWindowTitle("BACON - Version %s. Server: %s. User: %s (%s)."%(version(), MOSES.getHostID(), self.user_id,MOSES.getEmpName(self.user_id) if self.user_id != "bigbrother" else "Administrator"))
        icon_file_name_path = os.path.join(path_to_images,'PORK_Icon.png')
        self.setWindowIcon(QtGui.QIcon(icon_file_name_path))
        self.show()

    def mapEvents(self):
        """"""
        self.raw_data_uploader_button.clicked.connect(self.openRawDataManager)
        self.piggybank_button.clicked.connect(self.openPiggyBank)
        self.tna_viewer_button.clicked.connect(self.openTNAViewer)
        self.seeker_button.clicked.connect(self.openSeeker)
    
    def openRawDataManager(self):
        self.raw_data_manager = RawDataManager(self.user_id, self.password)

    def openPiggyBank(self):
        self.piggy_bank = PiggyBankWithFilter(self.user_id, self.password, self.category_tree, self.brand_list)

    def openTNAViewer(self):
        self.tna_viewer = TNAViewer(self.user_id, self.password, self.category_tree)
    def openSeeker(self):
        self.seeker = Seeker(self.user_id, self.password)
Пример #29
0
    def createUI(self):
        self.group_box = QtGui.QGroupBox("Data Selector")
        self.page_selector = IconListBox()
        page_control_list = [
                    {
                    "Name": "From Flipkart Using FSNs",
                    "Icon": os.path.join("essentials","download.png")
                    },
                    {
                    "Name": "From CSV Data File",
                    "Icon": os.path.join("essentials","csv_file.png")
                    }
                ]
        self.page_selector.addElements(page_control_list)
        self.page_selector.setFixedSize(302,110)
        #FSN Mode Widget
        self.fsn_mode_widget = QtGui.QGroupBox("Data By FSN")
        self.fsn_text_edit = FSNTextEdit()
        self.fsn_text_edit.setFixedSize(450,400)
        self.category_label = QtGui.QLabel("Category:")
        self.category_combo_box = QtGui.QComboBox()
        self.category_combo_box.addItems(getCategoryFolderNames()) #Later, add this data from OINK's server.        
        self.category_combo_box.setToolTip("Select the default category for the given FSNs.\nNote that mixing various types of FSNs isn't recommended.\nThe icons won't load.")
        self.attributes_list_box = QtGui.QListWidget()
        self.attributes_list_box.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.attributes_list_box.setToolTip("Displays all product attributes, obtained from the FK server.")
        self.primary_attributes_list_box = QtGui.QListWidget()
        self.primary_attributes_list_box.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.primary_attributes_list_box.setToolTip("Displays primary product attributes that you have selected.")
        self.secondary_attributes_list_box = QtGui.QListWidget()
        self.secondary_attributes_list_box.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.secondary_attributes_list_box.setToolTip("Displays secondary product attributes that you have selected.")
        self.push_to_primary_button = QtGui.QPushButton("Add to\nPrimary List")
        self.push_to_primary_button.setToolTip("Click to move the chosen attribute into the list of primary attributes.")
        self.remove_from_primary_button = QtGui.QPushButton("Remove from\nPrimary List")
        self.remove_from_primary_button.setToolTip("Click to move the chosen attribute out of the list of primary attributes.")
        self.push_to_secondary_button = QtGui.QPushButton("Add to\nSecondary List")
        self.push_to_secondary_button.setToolTip("Click to move the chosen attribute into the list of secondary attributes.")
        self.remove_from_secondary_button = QtGui.QPushButton("Remove from\nSecondary List")
        self.remove_from_secondary_button.setToolTip("Click to move the chosen attribute out of the list of secondary attributes.")
        #downloader
        self.fetch_images_attributes_button = QtGui.QPushButton("Download")
        self.fetch_images_attributes_button.setToolTip("This will check if parent images are available for all the FSNs and download them if necessary from the FK site. It will also load the spec table.")
        self.export_scraped_data_button = QtGui.QPushButton("Export Data")
        self.fetching_progress = ProgressBar()
        self.fetching_progress.setRange(0,100)
        self.fetching_progress.setValue(0)
        self.fetching_activity = QtGui.QLabel("All that is gold does not glitter!")
        self.fetching_activity.setStyleSheet("QLabel{font: 10px black; border: 1px solid black;}")
        self.fetching_activity.setToolTip("This indicates the current downloader's activity, or some random quote that Vinay thinks is funny.")
        self.completed_fsns_count_label = QtGui.QLabel("Completed:")
        self.completed_fsns_count_spinbox = QtGui.QSpinBox()
        self.completed_fsns_count_spinbox.setEnabled(False)
        self.eta_label = QtGui.QLabel("ETA:")
        self.eta_datetimeedit = QtGui.QDateTimeEdit()
        self.eta_datetimeedit.setEnabled(False)
        self.eta_datetimeedit.setMinimumDateTime(QtCore.QDateTime(datetime.datetime.now()))
        self.activity_log_textedit = QtGui.QTextEdit()
        self.activity_log_textedit.setReadOnly(True)
        self.pending_fsns_count_label = QtGui.QLabel("Pending:")
        self.pending_fsns_count_spinbox = QtGui.QSpinBox()
        self.pending_fsns_count_spinbox.setEnabled(False)
        self.failed_fsns_label = QtGui.QLabel("Failed:")
        self.failed_fsns_count_spinbox = QtGui.QSpinBox()
        self.failed_fsns_count_spinbox.setEnabled(False)

        self.completed_fsns_count_spinbox.setRange(0,99999999)
        self.pending_fsns_count_spinbox.setRange(0,99999999)
        self.failed_fsns_count_spinbox.setRange(0,99999999)

        self.pending_fsns_list_text_edit = QtGui.QTextEdit()
        self.pending_fsns_list_text_edit.setReadOnly(True)
        self.completed_fsns_list_text_edit = QtGui.QTextEdit()
        self.completed_fsns_list_text_edit.setReadOnly(True)
        self.failed_fsns_list_text_edit = QtGui.QTextEdit()
        self.failed_fsns_list_text_edit.setReadOnly(True)

        buttons_and_progress_bar = QtGui.QHBoxLayout()
        buttons_and_progress_bar.addWidget(self.fetch_images_attributes_button, 2)
        buttons_and_progress_bar.addWidget(self.export_scraped_data_button, 1)
        buttons_and_progress_bar.addWidget(self.fetching_progress, 4)

        completed_tracking = QtGui.QVBoxLayout()
        completed_tracking.addWidget(self.completed_fsns_count_label)
        completed_tracking.addWidget(self.completed_fsns_count_spinbox)
        completed_tracking.addWidget(self.completed_fsns_list_text_edit)
        
        eta_layout = QtGui.QHBoxLayout()
        eta_layout.addWidget(self.eta_label)
        eta_layout.addWidget(self.eta_datetimeedit)
        
        pending_tracking = QtGui.QVBoxLayout()
        pending_tracking.addWidget(self.pending_fsns_count_label)
        pending_tracking.addWidget(self.pending_fsns_count_spinbox)
        pending_tracking.addWidget(self.pending_fsns_list_text_edit)
        pending_tracking.addLayout(eta_layout)

        failed_tracking = QtGui.QVBoxLayout()
        failed_tracking.addWidget(self.failed_fsns_label)
        failed_tracking.addWidget(self.failed_fsns_count_spinbox)
        failed_tracking.addWidget(self.failed_fsns_list_text_edit)

        fsns_tracking = QtGui.QHBoxLayout()
        fsns_tracking.addLayout(completed_tracking)
        fsns_tracking.addLayout(pending_tracking)
        fsns_tracking.addLayout(failed_tracking)

        downloader_layout = QtGui.QVBoxLayout()
        downloader_layout.addLayout(buttons_and_progress_bar)
        downloader_layout.addLayout(fsns_tracking)
        downloader_layout.addWidget(self.fetching_activity)

        downloader = QtGui.QWidget()
        downloader.setLayout(downloader_layout)

        downloader_tabs = QtGui.QTabWidget()
        downloader_tabs.addTab(downloader, "Downloader")
        downloader_tabs.addTab(self.activity_log_textedit, "Log")

        self.fsn_mode_data_options = QtGui.QGroupBox("Data Options")
        fsn_mode_data_options_layout = QtGui.QGridLayout()
        fsn_mode_data_options_layout.addWidget(self.category_label,0,0,1,2, QtCore.Qt.AlignVCenter)
        fsn_mode_data_options_layout.addWidget(self.category_combo_box,0,2,1,2,QtCore.Qt.AlignVCenter)
        fsn_mode_data_options_layout.addWidget(self.attributes_list_box,1,0,4,4, QtCore.Qt.AlignHCenter)
        fsn_mode_data_options_layout.addWidget(self.primary_attributes_list_box,1,5,2,2, QtCore.Qt.AlignHCenter)
        fsn_mode_data_options_layout.addWidget(self.push_to_primary_button,1,4,1,1, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
        fsn_mode_data_options_layout.addWidget(self.remove_from_primary_button,2,4,1,1, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
        fsn_mode_data_options_layout.addWidget(self.secondary_attributes_list_box,3,5,2,2, QtCore.Qt.AlignHCenter)
        fsn_mode_data_options_layout.addWidget(self.push_to_secondary_button,3,4,1,1, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
        fsn_mode_data_options_layout.addWidget(self.remove_from_secondary_button,4,4,1,1, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
        self.fsn_mode_data_options.setLayout(fsn_mode_data_options_layout)
        self.fsn_mode_data_options.setEnabled(False)
        fsn_mode_layout = QtGui.QGridLayout()
        fsn_mode_layout.addWidget(self.fsn_text_edit,0,0,7,1)
        downloader_tabs

        fsn_mode_layout.addWidget(downloader_tabs,0,1,2,5,  QtCore.Qt.AlignBottom)
        #fsn_mode_layout.addWidget(self.fetch_images_attributes_button,0,1,1,2,  QtCore.Qt.AlignBottom)
        #fsn_mode_layout.addWidget(self.fetching_progress,0,3,1,5, QtCore.Qt.AlignBottom)
        #fsn_mode_layout.addWidget(self.fetching_activity,1,3,1,5, QtCore.Qt.AlignTop)
        #fsn_mode_layout.addWidget(self.export_scraped_data_button,1,1,1,2,  QtCore.Qt.AlignTop)
        fsn_mode_layout.addWidget(self.fsn_mode_data_options,2,1,5,7, QtCore.Qt.AlignTop)
        self.fsn_mode_widget.setLayout(fsn_mode_layout)

        self.fsn_mode_scroll_view = QtGui.QScrollArea()
        self.fsn_mode_scroll_view.setWidget(self.fsn_mode_widget)
        self.fsn_mode_scroll_view.setWidgetResizable(True)
        self.fsn_mode_scroll_view.setFixedHeight(400)

        #CSV Mode Widget
        self.csv_mode_widget = QtGui.QWidget()
        self.input_data_set_button = ImageButton(os.path.join("essentials","csv_file.png"), 50, 50)
        self.input_data_set_button.setToolTip("Click to select a data file if you want manual control.")
        self.check_icons_button = QtGui.QPushButton("Check Icon Availability\nand Export Report")
        csv_mode_layout = QtGui.QHBoxLayout()
        csv_mode_layout.addStretch(1)
        csv_mode_layout.addWidget(self.input_data_set_button,0)
        csv_mode_layout.addWidget(self.check_icons_button,0)
        csv_mode_layout.addStretch(1)

        self.csv_mode_widget.setLayout(csv_mode_layout)

        self.fsn_or_csv_stacked_widget = QtGui.QStackedWidget()
        self.fsn_or_csv_stacked_widget.addWidget(self.fsn_mode_scroll_view)
        self.fsn_or_csv_stacked_widget.addWidget(self.csv_mode_widget)

        self.validate_button  = ImageButton(os.path.join("essentials","validate.png"),50,50)
        layout = QtGui.QGridLayout()
        layout.addWidget(self.page_selector,0,0,1,2, QtCore.Qt.AlignHCenter)
        layout.addWidget(self.fsn_or_csv_stacked_widget,1,0,1,2)
        layout.addWidget(self.validate_button,3,1)
        self.group_box.setLayout(layout)
        final_layout = QtGui.QHBoxLayout()
        final_layout.addWidget(self.group_box)
        self.setLayout(final_layout)
Пример #30
0
class OverrideTool(QtGui.QWidget):
    """Opens an override dialog."""
    def __init__(self, user_id, password):
        """"""
        super(OverrideTool, self).__init__()
        self.user_id = user_id
        self.password = password
        self.getOverrideTable()
        self.createUI()
        self.mapEvents()
        self.override_date.setDate(datetime.date.today())
        #self.getFSNs()

    def getOverrideTable(self):
        self.override_table = MOSES.getOverrideTable(self.user_id,
                                                     self.password)

    def createUI(self):
        self.fsn_text_edit = FSNTextEdit()
        self.override_date = FormattedDateEdit()
        self.override_logo = ImageButton(
            os.path.join(MOSES.getPathToImages(), "override.png"), 64, 64,
            os.path.join(MOSES.getPathToImages(), "override_mouseover.png"))
        self.override_logo.setFlat(True)
        self.override_logo.setToolTip(
            "If you can't do something once, do it again, and again.")
        self.override_button = QtGui.QPushButton("Override")
        self.override_comment_label = QtGui.QLabel("Reason:")
        self.override_comment_field = QtGui.QLineEdit()
        self.override_comment_field.setToolTip(
            "Enter a reason for the override here.")
        self.data_tabulator = CopiableQTableWidget()

        column2 = QtGui.QVBoxLayout()
        column2.addWidget(self.override_logo, 1,
                          QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop)
        column2.addWidget(self.override_date, 1)
        column2.addWidget(self.override_button, 1)
        column2.addWidget(self.override_comment_label, 1)
        column2.addWidget(self.override_comment_field, 1)
        column2.addStretch(2)

        options_layout = QtGui.QHBoxLayout()
        options_layout.addWidget(self.fsn_text_edit, 2, QtCore.Qt.AlignTop)
        options_layout.addLayout(column2, 1)

        layout = QtGui.QVBoxLayout()
        layout.addLayout(options_layout, 1)
        layout.addWidget(self.data_tabulator, 3)

        self.setLayout(layout)
        self.setWindowIcon(
            QtGui.QIcon(os.path.join(MOSES.getPathToImages(),
                                     "PORK_Icon.png")))
        self.setWindowTitle("Override Tool")
        self.show()

    def mapEvents(self):
        """"""
        self.override_button.clicked.connect(self.createOverride)
        self.override_date.dateChanged.connect(self.changedDate)

    def changedDate(self):
        query_date = self.override_date.date().toPyDate()
        resultant_data_frame = self.override_table[
            self.override_table["Override Date"] == query_date]
        self.showDataFrame(resultant_data_frame)

    def showDataFrame(self, data_frame):
        self.data_tabulator.showDataFrame(data_frame)
        self.data_tabulator.verticalHeader().setResizeMode(
            QtGui.QHeaderView.ResizeToContents)
        self.data_tabulator.verticalHeader().setStretchLastSection(False)
        self.data_tabulator.verticalHeader().setVisible(True)

        self.data_tabulator.horizontalHeader().setResizeMode(
            QtGui.QHeaderView.ResizeToContents)
        self.data_tabulator.horizontalHeader().setStretchLastSection(False)
        self.data_tabulator.horizontalHeader().setVisible(True)

    def createOverride(self):
        """"""
        fsn_list = self.fsn_text_edit.getFSNs()

        if len(fsn_list) > 0:
            comment = str(self.override_comment_field.text()).strip()
            if len(comment) == 0:
                self.ask_comment = QtGui.QMessageBox.question(
                    self, 'No reason for override?',
                    "Hi there! You seem to be trying to override an FSN without giving a reason for doing so. Are you sure you want to do that? If you don't want to type a reason, go on ahead. I suggest typing one, because you'll have a neat record of that here.",
                    QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
                    QtGui.QMessageBox.No)
                if self.ask_comment == QtGui.QMessageBox.Yes:
                    allow = True
                else:
                    allow = False
            else:
                allow = True
            if allow:
                self.override_button.setEnabled(False)
                if len(fsn_list) > 1:
                    self.alertMessage(
                        "Please Wait",
                        "Looks like you're trying to override more than one FSN so this step could take a second or a minute, though definitely not more than that. Please wait, and remember, <i>Roma die uno non aedificata est</i>."
                    )
                failures = []
                for FSN in fsn_list:
                    trial_status = MOSES.addOverride(
                        FSN,
                        self.override_date.date().toPyDate(), self.user_id,
                        self.password, comment)
                    if not trial_status:
                        failures.append(FSN)
                if len(failures) == 0:
                    self.alertMessage(
                        "Success!",
                        "Successfully overrided the requested %d FSN(s)." %
                        len(fsn_list))
                else:
                    self.alertMessage(
                        "Failed!",
                        "Failed in overriding %d of the %d FSN(s)." %
                        (len(failures), len(fsn_list)))
                self.getOverrideTable()
                self.changedDate()
        else:
            self.alertMessage(
                "No FSNs Provided",
                "You don't seem to have pasted any valid FSNs. Could you try that again?"
            )
        self.override_button.setEnabled(True)
        return True

    def alertMessage(self, title, message):
        QtGui.QMessageBox.about(self, title, message)