Exemplo n.º 1
0
 def exif_data(self, filen):
     paint_screen(gl.BLACK)
     close_button(self.screen)
     if not self.show_exif:
         gl.SHOW_EXIFBUTTON = 0
         return
     exif_info = []
     filename = gl.files[filen]
     try:
         file = open(filename, "rb")
     except:
         exif_info.append("%s unreadable" % filename)
         gl.SHOW_EXIFBUTTON = 0
         return
     data = exif.process_file(file)
     if not data:
         font_size = 13
         font = pygame.font.Font(gl.FONT_NAME, font_size)
         no_exif_msg = "No Exif information found"
         show_message(
             no_exif_msg,
             ((self.screen.get_width() / 2) - (font.size(no_exif_msg)[0] / 2), self.screen.get_height() / 2),
             font_size,
             ("bold", "transparent"),
         )
         gl.SHOW_EXIFBUTTON = 0
         return
     x = data.keys()
     x.sort()
     for i in x:
         if i in ("JPEGThumbnail", "TIFFThumbnail"):
             continue
         try:
             exif_info.append("%s:  %s" % (i, data[i].printable))
         except:
             exif_info.append("error", i, '"', data[i], '"')
     gl.SHOW_EXIFBUTTON = 0
     pos = 25
     show_message("Exif Information", "top", 13, ("underline", "bold", "transparent"))
     try:
         for line in exif_info:
             if type(line) is StringType and len(line) <= 250:  # parachutes on long lines without this
                 exif_font = pygame.font.Font(gl.FONT_NAME, 9)
                 ren = exif_font.render(line, 1, gl.MENU_COLOR)
                 ren_rect = ren.get_rect()
                 ren_rect[0] = 14
                 ren_rect[1] = pos
                 self.screen.blit(ren, ren_rect)
                 pos = pos + 9
     except:
         print "Couldn't exif"
         # pass
     flip()
Exemplo n.º 2
0
def do_view_tagged(screen, num_imgs, file):
    "show all tagged dir names"
    paint_screen(screen, gl.BLACK)
    (esc_rect, close_font) = close_button(screen)
    line = 5
    if len(gl.MULT_DIRS) == 0:
        show_message(screen, "[No directories are currently tagged]", "bottom", 12)
    for d in gl.MULT_DIRS:
        font = pygame.font.Font(gl.FONT_NAME, 9)
        ren = font.render(d, 1, (255, 255, 255), (0, 0, 0))
        ren_rect = ren.get_rect()
        ren_rect[0] = 5
        ren_rect[1] = line
        screen.blit(ren, ren_rect)
        line = line + 12
        update(ren_rect)
    pygame.event.set_allowed(MOUSEMOTION)
    while 1:
        ev = pygame.event.wait()
        check_quit(ev)
        hover_cursor(pygame.mouse.get_pos(), (esc_rect,))
        if ev.type == KEYDOWN and ev.key not in (K_LALT, K_RALT, K_TAB, K_LCTRL, K_RCTRL) or ev.type == MOUSEBUTTONDOWN:
            gl.ADDED_DIR_NUMS = 0
            (num_imgs, file) = show_dirs(screen, num_imgs, file)
            break # break event loop
Exemplo n.º 3
0
def verbose_info(screen, new_img, file, num_imgs):
    # main engine
    wait_cursor()
    paint_screen(screen, gl.BLACK)
    try:
        (uniquecolors_rect, total_colors, row, font, im, verb) = print_verbose_info(screen, new_img, file, num_imgs)
    except:
        print 'print verbose'
        #(uniquecolors_rect, total_colors, row, font, im, verb) = junk_rect()#
       # uniquecolors_rect = junk_rect()#
       # total_colors = ""#
        verb = verbose(screen, file)#
        (uniquecolors_rect, total_colors, row, font, im) = verb.colors()
        #return
    if gl.SHOW_EXIFBUTTON:
        exif_rect = imgv_button(screen, " Exif Data ", 5, gl.ROW_SEP + 435, None)
    (esc_rect, close_font) = close_button(screen)
    normal_cursor()
    transparency = 0
    while 1:
        event = pygame.event.poll()
        pygame.time.wait(1)
        check_quit(event)
        cursor = pygame.mouse.get_pos()
        hover_cursor(cursor, (esc_rect, exif_rect, uniquecolors_rect))
        if gl.SHOW_EXIFBUTTON:
            hover_button(exif_rect, cursor, screen, " Exif Data ", 5, gl.ROW_SEP + 435, None)
        if gl.UNIQUE_COLORS == None and gl.SHOW_EXIFBUTTON and total_colors != "":
            hover_button(uniquecolors_rect, cursor, screen, " Unique colors ", (font.size(total_colors)[0] + 230), row, None)

        show_message(screen, convert_times(ctime(), 0), "bottom", 15, ("transparent"))

        if event.type == MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0]:
            if uniquecolors_rect != junk_rect():
                if uniquecolors_rect.collidepoint(cursor):
                    wait_cursor()
                    gl.UNIQUE_COLORS = comma_it(len(dict.fromkeys(im.getdata()))) # determine unique colors
                    before_color = gl.MSG_COLOR
                    if gl.MSG_COLOR == gl.SILVER:
                        gl.MSG_COLOR = (142, 142, 142)
                    else:
                        gl.MSG_COLOR = gl.SILVER
                    show_message(screen,  "Unique colors: %s%s" % (gl.UNIQUE_COLORS, ' ' * 12), ((font.size(total_colors)[0] + 235), row), 12, (""), (14, before_color))
                    gl.MSG_COLOR = before_color
                    normal_cursor()
            if exif_rect.collidepoint(cursor):
                wait_cursor()
                try:
                    verb.exif_data(file)
                except:
                    break
                normal_cursor()
            if esc_rect.collidepoint(cursor):
                before_exit()
                break
        if event.type == KEYDOWN and event.key not in (K_LALT, K_RALT, K_LCTRL, K_RCTRL, K_TAB):
            before_exit()
            break
Exemplo n.º 4
0
Arquivo: edit.py Projeto: rkulla/imgv
def edit_menu(screen, file, menu_items):
    font = pygame.font.Font(gl.FONT_NAME, 18)
    font.set_bold(1)
    men_ops = ["1) Delete image", "2) Set as wallpaper", "3) Open in external viewer", "4) Preferences"]
    line = 65
    col = 20
    for m in men_ops:
        ren_name = m
        ren = font.render(ren_name, 1, gl.BLUE)
        ren_rect = ren.get_rect()
        ren_rect[0] = col
        ren_rect[1] = line
        menu_items.append((ren_rect, m))
        screen.blit(ren, ren_rect)
        line = line + 30
        update(ren_rect)
    close_button(screen)
    return (menu_items, men_ops)
Exemplo n.º 5
0
def file_master(screen, file_names, place, marker, menu_items, msg, down, button_op):
    paint_screen(gl.BLACK)
    show_message(msg, down, 10, ("bold", "transparent"))
    font = pygame.font.Font(gl.FONT_NAME, 9)
    font.set_bold(1)
    (esc_rect, esc_font) = close_button(screen)
    font_height = font.size(file_names[0])[1]
    screen_height = screen.get_height()
    name_max = 16
    max_file_width = 116
    line = 65 # leave room at top of screen for other stuff
    col = 5
    count = 0
    back_rect = forward_rect = sort_rect = junk_rect()
    for name in file_names[place:]:
        count = count + 1
        place = place + 1
        marker = marker + 1
        if count >= gl.MAX_SCREEN_FILES or place >= len(file_names):
            ren_name = os.path.basename(name)
            if len(ren_name) > name_max:
                ren_name = ren_name[:name_max] + '...' # truncate
                if ren_name[-4:] == '....':
                    ren_name = ren_name[:-1] # 3 .'s are enough
            ren = font.render(ren_name, 1, gl.MSG_COLOR, gl.BLACK)
            if (place + 1) < len(file_names):
                forward_rect = imgv_button(screen, " Next ", 10, 18, "topright")
            if (((place + 1) - gl.MAX_SCREEN_FILES) > 1):
                back_rect = imgv_button(screen, " Previous ", 10, 18, "topleft")
            if not gl.SORT_HIT:
                sort_rect = imgv_button(screen, " Sort ", 13, 42, "midtop")
            ren_rect = ren.get_rect()
            ren_rect[0] = col
            ren_rect[1] = line
            menu_items.append((ren_rect, name))
            screen.blit(ren, ren_rect)
            update(ren_rect)
            return (file_names, menu_items, 1, place, marker, forward_rect, back_rect, sort_rect)
        ren_name = os.path.basename(name)
        if len(ren_name) > name_max:
            ren_name = ren_name[:name_max] + '...'
            if ren_name[-4:] == '....':
                ren_name = ren_name[:-1]
        ren = font.render(ren_name, 1, gl.MSG_COLOR, gl.BLACK)
        ren_rect = ren.get_rect()
        ren_rect[0] = col
        ren_rect[1] = line
        menu_items.append((ren_rect, name))
        screen.blit(ren, ren_rect)
        line = line + 12
        if (line + font_height) >= (screen_height - 15):
            line = 65
            col = col + max_file_width
        update(ren_rect)
    return (file_names, menu_items, 0, place, marker, forward_rect, back_rect, sort_rect)
Exemplo n.º 6
0
def ask(screen, question, hist_list=[''], count=0):
    current_string = []
    (esc_rect, font) = close_button(screen)
    if question in ("Password", "New password"):
        paint_screen(screen, gl.BLACK, esc_rect) # Erase the close button, no need for it 
    if gl.ISURL:
        display_box(screen, "%s%s_" % (question, "".join(current_string)))
    else:
        display_box(screen, "%s: %s_" % (question, "".join(current_string)))
    while 1:
        (inkey, value) = get_key(esc_rect)
        if inkey == K_BACKSPACE:
            if len(current_string) == 1:
                # allows backspacing to work on the "readline" strings
                current_string = list(current_string[0])
            current_string = current_string[0:-1]
        elif inkey == K_RETURN:
            gl.SKIP = 0 # reset to render message properly
            show_message(screen, ' ' * 40, "bottom", 12) # erase message
            break
        elif inkey == K_ESCAPE:
            gl.ISURL = 0
            if gl.WAS_IN_CHANGE_DRIVES:
                gl.ADDED_DIR_NUMS = 0
            paint_screen(screen, gl.BLACK, Rect(0, 255, screen.get_width(), 100)) # erase box from screen
            show_message(screen, ' ' * 40, "bottom", 12) # erase message
            return None
        elif inkey == K_UP:
            if count < len(hist_list):
                current_string = current_string[1:]
                current_string.insert(0, hist_list[-count - 1])
                count = count + 1
        elif inkey == K_DOWN:
            if count > 0:
                count = count - 1
                current_string = current_string[1:]
                current_string.insert(0, hist_list[-count])
        elif inkey <= 127:
            current_string.append(value)
        if gl.ISURL:
            display_box(screen, "%s%s_" % (question, "".join(current_string)))
        else:
            display_box(screen, "%s: %s_" % (question, "".join(current_string)))

    current_string = "".join(current_string)
    hist_list.append(current_string)
    if gl.ISURL:
        gl.ISURL = 0
        return "%s%s" % ("http://", current_string)
    else:
        return current_string
Exemplo n.º 7
0
def hover_square(screen, show_img_one, show_img_two, show_img_three, show_img_four,\
img_one_rect, img_two_rect, img_three_rect, img_four_rect, img_one_name, img_two_name,\
img_three_name, img_four_name, img_one_file, img_two_file, img_three_file, img_four_file, rect, event):
    "display image name in title bar or on the screen on a mouse over"
    num_imgs = len(gl.files)
    cursor = pygame.mouse.get_pos()
    (esc_rect, font) = close_button(screen)
    hover_cursor(cursor, (esc_rect, img_one_rect, img_two_rect, img_three_rect, img_four_rect))
    if left_click(event):
        if esc_rect.collidepoint(cursor):
            gl.ESCAPED = 1
            return (None, None, None, None, None)
    if show_img_one == 0:
        if img_one_rect:
            if img_one_rect.collidepoint(cursor):
                name = img_one_name
                set_caption("%s - imgv" % name)
                show_img_one = 1
                (show_img_two, show_img_three, show_img_four) = (0, 0, 0)
    if show_img_two == 0:
        if img_two_rect:
            if img_two_rect.collidepoint(cursor):
                name = img_two_name
                set_caption("%s - imgv" % name)
                show_img_two = 1
                (show_img_one, show_img_three, show_img_four) = (0, 0, 0)
    if show_img_three == 0:
        if img_three_rect:
            if img_three_rect.collidepoint(cursor):
                name = img_three_name
                set_caption("%s - imgv" % name)
                show_img_three = 1
                (show_img_one, show_img_two, show_img_four) = (0, 0, 0)
    if show_img_four == 0:
        if img_four_rect:
            if img_four_rect.collidepoint(cursor):
                name = img_four_name
                set_caption("%s - imgv" % name)
                show_img_four = 1
                (show_img_one, show_img_two, show_img_three) = (0, 0, 0)
    return (show_img_one, show_img_two, show_img_three, show_img_four, rect)
Exemplo n.º 8
0
def four(screen, file, new_img, ns):
    paint_screen(screen, gl.IMGV_COLOR) # so transparent status bars don't mess up on VIDEOEXPOSE repaints
    old_file = file
    (img_one_rect, img_two_rect, img_three_rect, img_four_rect) = (0, 0, 0, 0)
    (img_one_name, img_two_name, img_three_name, img_four_name) = (0, 0, 0, 0)
    (show_img_one, show_img_two, show_img_three, show_img_four) = (0, 0, 0, 0)

    rect = show_message(screen, "", "bottom", 9, ("bold")) # needed to not paint on esc_rect first time
    (file, img_one_rect, img_one_name, img_one_file) = square_one(screen, file)
    (file, img_two_rect, img_two_name, img_two_file) = square_two(screen, file)
    (file, img_three_rect, img_three_name, img_three_file) = square_three(screen, file)
    (file, img_four_rect, img_four_name, img_four_file) = square_four(screen, file)

    (esc_rect, close_font) = close_button(screen)
    start = ns
    while 1:
        flag = 0
        event = pygame.event.poll()
        pygame.time.wait(1)
        cursor = pygame.mouse.get_pos()

        if event.type == VIDEORESIZE:
            pygame.event.set_blocked(VIDEOEXPOSE)
            screen = pygame.display.set_mode(event.dict['size'], RESIZABLE)
            file = file - 4
            pygame.event.set_allowed(VIDEOEXPOSE)
            (file, new_img, start) = four(screen, file, new_img, ns)
            flag = 1
            break

        if hit_key(event, K_ESCAPE):
            gl.ESCAPED = 1
            file = old_file
            break
        check_quit(event)
        if hit_key(event, K_SPACE) or hit_key(event, K_n) or hit_key(event, K_4) or right_click(event): # show next 4 images
            paint_screen(screen, gl.IMGV_COLOR)
            flag = 1
        if hit_key(event, K_BACKSPACE) or hit_key(event, K_b) or middle_click(event): # show previous 4 images
            paint_screen(screen, gl.IMGV_COLOR)
            file = file - 8
            flag = 1

        if flag == 1:
            (file, img_one_rect, img_one_name, img_one_file) = square_one(screen, file)
        if flag == 1:
            (file, img_two_rect, img_two_name, img_two_file) = square_two(screen, file)
        if flag == 1:
            (file, img_three_rect, img_three_name, img_three_file) = square_three(screen,\
            file)
        if flag == 1:
            (file, img_four_rect, img_four_name, img_four_file) = square_four(screen, file)
        (show_img_one, show_img_two, show_img_three, show_img_four, rect) = hover_square(\
         screen, show_img_one, show_img_two, show_img_three, show_img_four, img_one_rect,\
        img_two_rect, img_three_rect, img_four_rect, img_one_name, img_two_name, img_three_name,\
        img_four_name, img_one_file, img_two_file, img_three_file, img_four_file, rect, event)

        hover_fx(screen, img_one_name, img_two_name, img_three_name, img_four_name, img_one_rect, img_two_rect, img_three_rect, img_four_rect, cursor)

        if show_img_one == None:
            file = old_file
            break
        if hit_key(event, K_w): 
            if len(gl.files) <= 1: # nothin to slideshow
                file = old_file
                break # kick 'em out
            (file, img_one_file, img_two_file, img_three_file, img_four_file) =\
            my_fourslideshow(screen, new_img, rect, gl.files[file], file - 4,\
            len(gl.files), img_one_file, img_two_file, img_three_file, img_four_file, ns)
            paint_screen(screen, gl.IMGV_COLOR)
            (file, new_img, start) = four(screen, file - 4, new_img, ns)
            flag = 1
            break
        if left_click(event):
            start = start_timer()
            if img_one_rect.collidepoint(cursor):
                wait_cursor()
                new_img = load_img(gl.files[img_one_file], screen)
                return (img_one_file, new_img, start)
            if img_two_rect.collidepoint(cursor):
                wait_cursor()
                new_img = load_img(gl.files[img_two_file], screen)
                return (img_two_file, new_img, start)
            if img_three_rect.collidepoint(cursor):
                wait_cursor()
                new_img = load_img(gl.files[img_three_file], screen)
                return (img_three_file, new_img, start)
            if img_four_rect.collidepoint(cursor):
                wait_cursor()
                new_img = load_img(gl.files[img_four_file], screen)
                return (img_four_file, new_img, start)
            if esc_rect.collidepoint(cursor):
                file = old_file
                gl.ESCAPED = 1
                break
        if event.type == VIDEOEXPOSE:
       # if event.type == VIDEOEXPOSE and not pygame.mouse.get_focused():#
            # repaint the screen in case other windows painted over it:
            file = file - 4
            (file, new_img, start) = four(screen, file, new_img, ns)
            flag = 1
            break
    return (file, new_img, start)
Exemplo n.º 9
0
def command_get_filter_info(screen):
    paint_screen(screen, gl.BLACK)
    set_caption("imgv")
    menu_items = []
    (esc_rect, font) = close_button(screen)
    
    show_message(screen, 'To build a search filter click as many options below as you need and then click "Done"', (21, 15), 12, ("bold"))
    show_message(screen, 'Example: If you don\'t want to view movies then just choose "Do not end with" and input:  .mpg, .mpeg', (21, 45), 12)
    show_message(screen, "Option number: _", "bottom", 12)
    (menu_items, filt_ops) = get_filter_info(screen, menu_items)
    pygame.event.set_blocked(MOUSEMOTION)
    while 1:
        event = pygame.event.poll()
        pygame.time.wait(1)
        check_quit(event)
        if hit_key(event, K_ESCAPE):
            gl.ADDED_DIR_NUMS = 0
            return
        if event.type == KEYDOWN and event.key in (K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_KP1, K_KP2, K_KP3, K_KP4, K_KP5, K_KP6, K_KP7, K_KP8, K_KP9):
            if hit_key(event, K_1) or hit_key(event, K_KP1):
                do_startwith(screen)
            if hit_key(event, K_2) or hit_key(event, K_KP2):
                do_donot_startwith(screen)
            if hit_key(event, K_3) or hit_key(event, K_KP3):
                do_endwith(screen)
            if hit_key(event, K_4) or hit_key(event, K_KP4):
                do_donot_endwith(screen)
            if hit_key(event, K_5) or hit_key(event, K_KP5):
                do_contain(screen)
            if hit_key(event, K_6) or hit_key(event, K_KP6):
                do_donot_contain(screen)
            if hit_key(event, K_7) or hit_key(event, K_KP7):
                do_view_filter(screen)
            if hit_key(event, K_8) or hit_key(event, K_KP8):
                do_erase_filter(screen)
            if hit_key(event, K_9) or hit_key(event, K_KP9):
                gl.ADDED_DIR_NUMS = 0
                return
            break
        
        cursor = pygame.mouse.get_pos()

        if left_click(event):
            if esc_rect.collidepoint(cursor):
                gl.ADDED_DIR_NUMS = 0
                return 
        
        hover_fx(screen, menu_items, cursor, font)
        hover_cursor(cursor, [esc_rect] + [x[0] for x in menu_items])
        if gl.NOT_HOVERED:
            show_message(screen, "%sOption number: _%s" % (" " * 100, " " * 100), "bottom", 12)
            blank_fx(screen, 0)
        if event.type == MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0]:
            for it in menu_items:
                if it[0].collidepoint(cursor) and it[1] in filt_ops:
                    if it[1] == "1) Start with":
                        do_startwith(screen)
                    if it[1] == "2) Do not start with":
                        do_donot_startwith(screen)
                    if it[1] == "3) End with":
                        do_endwith(screen)
                    if it[1] == "4) Do not end with":
                        do_donot_endwith(screen)
                    if it[1] == "5) Contain":
                        do_contain(screen)
                    if it[1] == "6) Do not contain":
                        do_donot_contain(screen)
                    if it[1] == "7) View filter":
                        do_view_filter(screen)
                    if it[1] == "8) Erase filter":
                        do_erase_filter(screen)
                    if it[1] == "9) Done":
                        gl.ADDED_DIR_NUMS = 0
                        return
                    break
            else:
                continue
            break
        gl.NOT_HOVERED = 1
Exemplo n.º 10
0
def command_show_res_modes(screen, new_img, file, num_imgs, rect):
    paint_screen(screen, gl.BLACK)
    set_caption("Resize Options - imgv")
    menu_items = []
    (esc_rect, font) = close_button(screen)
    res_font = pygame.font.Font(gl.FONT_NAME, 18)
    res_font.set_bold(1)
    show_message(screen, "Choose a preset or custom window size for imgv", "top", 12, ("underline", "bold"))
    show_message(screen, "Use current window size as fullscreen resolution?", (170, 192), 10)
    show_message(screen, "No  Yes", (430, 182), 10)
    show_message(screen, "Option: _", "bottom", 12)
    (menu_items, men_ops) = show_res_modes(screen, menu_items, res_font)
    pygame.event.set_blocked(MOUSEMOTION)
    while 1:
       event = pygame.event.poll()
       pygame.time.wait(35) # don't use 100% CPU
       cursor = pygame.mouse.get_pos()
       hover_fx(screen, menu_items, cursor, res_font)
       if gl.NOT_HOVERED:
           show_message(screen, "%sOption: _%s" % (" " * 100, " " * 100), "bottom", 12)
           blank_fx(screen, 0)
       check_quit(event)

       if event.type == VIDEORESIZE:
            screen = pygame.display.set_mode(event.dict['size'], RESIZABLE)
            rect = get_center(screen, new_img)
            command_show_res_modes(screen, new_img, file, num_imgs, rect)
            break

       # draw checked box:
       checked_img = load_img(gl.CHECKED_BOX, screen, False)
       checked_img_rect = checked_img.get_rect()
       if gl.FULLSCREEN_SPECIAL == 0:
           checked_img_rect[0] = 432
       else:
           checked_img_rect[0] = 455
       checked_img_rect[1] = 195
       screen.blit(checked_img, checked_img_rect)
       update(checked_img_rect)

       # draw unchecked box:
       unchecked_img = load_img(gl.UNCHECKED_BOX, screen, False)
       unchecked_img_rect = unchecked_img.get_rect()
       if gl.FULLSCREEN_SPECIAL == 0:
           unchecked_img_rect[0] = 455
       else:
           unchecked_img_rect[0] = 432
       unchecked_img_rect[1] = 195
       screen.blit(unchecked_img, unchecked_img_rect)
       update(unchecked_img_rect)

       hover_cursor(cursor, [esc_rect, checked_img_rect, unchecked_img_rect] + [x[0] for x in menu_items])

       if hit_key(event, K_ESCAPE):
           update_res_screen(screen, file, new_img)
           return rect
       if event.type == KEYDOWN and event.key in (K_F2, K_F3, K_F4, K_F5, K_F6, K_c):
           if hit_key(event, K_F2):
               rect = command_640x480(new_img, file, num_imgs, rect)
           if hit_key(event, K_F3):
               rect = command_800x600(new_img, file, num_imgs, rect)
           if hit_key(event, K_F4):
               rect = command_1024x768(new_img, file, num_imgs, rect)
           if hit_key(event, K_F5):
               rect = command_1280x1024(new_img, file, num_imgs, rect)
           if hit_key(event, K_F6):
               screen = command_fullscreen(screen, new_img, file, num_imgs, rect)
               rect = get_center(screen, new_img)
               my_update_screen(new_img, screen, rect, file, num_imgs)
           if hit_key(event, K_c):
               rect = do_custom(screen, new_img, file, num_imgs, rect)
           return rect
       if left_click(event):
           if esc_rect.collidepoint(cursor):
               gl.ESCAPED = 1
               update_res_screen(screen, file, new_img)
               return rect
           if unchecked_img_rect.collidepoint(cursor):
               gl.FULLSCREEN_SPECIAL ^= 1 # toggle
           for it in menu_items:
               if it[0].collidepoint(cursor) and it[1] in men_ops:
                   if it[1] == "F2) 640x480":
                       rect = command_640x480(new_img, file, num_imgs, rect)
                   elif it[1] == "F3) 800x600":
                       rect = command_800x600(new_img, file, num_imgs, rect)
                   elif it[1] == "F4) 1024x768":
                       rect = command_1024x768(new_img, file, num_imgs, rect)
                   elif it[1] == "F5) 1280x1024":
                       rect = command_1280x1024(new_img, file, num_imgs, rect)
                   elif it[1] == "F6) Fullscreen":
                       screen = command_fullscreen(screen, new_img, file, num_imgs, rect)
                       rect = get_center(screen, new_img)
                       my_update_screen(new_img, screen, rect, file, num_imgs)
                   elif it[1] == "C) Custom":
                       rect = do_custom(screen, new_img, file, num_imgs, rect)
                   return rect
       gl.NOT_HOVERED = 1
    return rect
Exemplo n.º 11
0
def command_file_master(screen, file_names, msg, down, button_op, disable_right_click, again):
    set_caption("Image Browser - imgv")
    screen_pause = place = marker = 0
    menu_items = []
    edit_rect = back_rect = forward_rect = sort_rect = junk_rect()
    (esc_rect, font) = close_button(screen)
    create_rect = imgv_button(screen, " Create New List ", 0, 18, "midtop")
    if len(file_names) < 1:
        my_string = ask(screen, "Create playlist first (Enter a name)")
        if my_string == None or my_string == []:
            return ([], [], [], []) # don't create a list
        if my_string != []: # create list
            if (len(my_string) > 0) and my_string != "\n":
                return (file_names, None, None, my_string)
    pygame.event.set_blocked(MOUSEMOTION)
    while 1:
        event = pygame.event.poll()
        pygame.time.wait(1)
        if screen_pause == 1:
            while 1:
                event = pygame.event.poll()
                pygame.time.wait(1)
                cursor = pygame.mouse.get_pos()
                hover_fx(screen, menu_items, cursor)
                hover_cursor(cursor, [esc_rect, edit_rect, sort_rect, back_rect, forward_rect, create_rect] + [x[0] for x in menu_items])
                if button_op:
                    hover_button(create_rect, cursor, screen, " Create New List ", 0, 18, "midtop")
                if (place + 1) < len(file_names):
                    hover_button(forward_rect, cursor, screen, " Next ", 10, 18, "topright")
                if (((place + 1) - gl.MAX_SCREEN_FILES) > 1):
                    hover_button(back_rect, cursor, screen, " Previous ", 10, 18, "topleft")
                if not gl.SORT_HIT:
                    hover_button(sort_rect, cursor, screen, " Sort ", 13, 42, "midtop")
                check_quit(event)
                if hit_key(event, K_ESCAPE):
                    return (None, None, None, None)
                if left_click(event):
                    if esc_rect.collidepoint(cursor):
                        return (None, None, None, None)
                if left_click(event):
                    for item in menu_items:
                        if item[0].collidepoint(cursor):
                            if pygame.mouse.get_pressed()[0] and (pygame.key.get_pressed()[K_LCTRL] or\
                               pygame.key.get_pressed()[K_RCTRL]):
                                return (file_names, item[1], "deleteit", None)
                            if again == "do again":
                                return (file_names, item[1], "do again", None)
                            return (file_names, item[1], menu_items, None)
                if right_click(event):
                    if not disable_right_click:
                        for item in menu_items:
                            if item[0].collidepoint(cursor):
                                if not os.path.isfile(gl.DATA_DIR + item[1]):
                                    if edit_rect != junk_rect():
                                        paint_screen(gl.BLACK)
                                    edit_rect = show_message(
                                    "%s doesn't exist in %s" % (item[1], gl.DATA_DIR), "top", 9, ("bold", "transparent"))
                                else:
                                    return (None, item[1], "rclicked", None)
                if hit_key(event, K_SPACE) or right_click(event):
                    if not place >= len(file_names):
                        screen_pause = 0
                        marker = 0
                        menu_items = []
                        break
                if left_click(event):
                    if forward_rect.collidepoint(cursor):
                        if not place >= len(file_names):
                            screen_pause = 0
                            marker = 0
                            menu_items = []
                            break
                if hit_key(event, K_BACKSPACE) or middle_click(event):
                    if ((place - marker) > 0):
                        paint_screen(gl.BLACK)
                        screen_pause = 0
                        place = place - (gl.MAX_SCREEN_FILES + marker)
                        marker = 0
                        menu_items = []
                        break
                if left_click(event):
                    if back_rect.collidepoint(cursor):
                        if ((place - marker) > 0):
                            paint_screen(gl.BLACK)
                            screen_pause = 0
                            place = place - (gl.MAX_SCREEN_FILES + marker)
                            marker = 0
                            menu_items = []
                            break
                if left_click(event):
                    if sort_rect.collidepoint(cursor):
                        gl.SORT_HIT = 1
                        file_names = basename_sort(file_names)
                        (file_names, menu_items, screen_pause, place, marker, forward_rect, back_rect, sort_rect) = file_master(screen, file_names, place, marker, menu_items, msg, down, button_op)
                        screen_pause = place = marker = 0
                        menu_items = []
                        break
                if left_click(event):
                    if create_rect.collidepoint(cursor):
                        my_string = ask(screen, "Enter name of list")
                        if my_string != None:
                            if (len(my_string) > 0) and my_string != "\n":
                                return (file_names, None, menu_items, my_string)
        (file_names, menu_items, screen_pause, place, marker, forward_rect, back_rect, sort_rect) =\
            file_master(screen, file_names, place, marker, menu_items, msg, down, button_op)
        pygame.time.delay(5)
Exemplo n.º 12
0
Arquivo: thumb.py Projeto: rkulla/imgv
def thumbs_engine(screen, new_img, file):
    screen_pause = 0
    SPACER = 5
    x = []
    place = file  # start thumbing from current image position
    marker = 0
    (i, j) = (SPACER, SPACER)
    (esc_rect, close_font) = close_button(screen)
    font_size = 9
    font = pygame.font.Font(gl.FONT_NAME, font_size)
    pygame.event.set_blocked(MOUSEMOTION)
    while 1:
        event = pygame.event.poll()
        pygame.time.wait(1)
        check_quit(event)
        cursor = pygame.mouse.get_pos()
        hover_cursor(cursor, (esc_rect,))
        gl.PAUSED = 0  # critical
        if hit_key(event, K_ESCAPE):
            gl.ESCAPED = 1
            return (new_img, new_img, new_img, file)
        if left_click(event):
            if esc_rect.collidepoint(cursor):
                gl.ESCAPED = 1
                break
        if hit_key(event, K_t) or hit_key(event, K_p) or hit_key(event, K_PAUSE):
            # pause
            set_caption("Thumbnails [Paused]")
            try:
                if place % gl.MAX_THUMBS_SET != 0:
                    # only pause if it's not the last thumbnail on the page
                    gl.PAUSED = 1
                    screen_pause = 1
            except:
                gl.PAUSED = 1
                screen_pause = 1
        if screen_pause == 1:
            normal_cursor()
            while 1:
                event = pygame.event.poll()
                pygame.time.wait(1)
                cursor = pygame.mouse.get_pos()
                (esc_rect, close_font) = close_button(screen)
                hover_fx(screen, x, cursor, marker)
                hover_cursor(cursor, [esc_rect] + [y[0] for y in x])
                if left_click(event):
                    if esc_rect.collidepoint(cursor):
                        gl.ESCAPED = 1
                        return (new_img, new_img, new_img, file)
                    for item in x:  # load clicked image:
                        if item[0].collidepoint(cursor):
                            wait_cursor()
                            new_img = load_img(item[1])
                            file = gl.files.index(item[1])
                            return (new_img, new_img, new_img, file)
                check_quit(event)
                if (
                    hit_key(event, K_SPACE)
                    or hit_key(event, K_t)
                    or hit_key(event, K_n)
                    or hit_key(event, K_p)
                    or hit_key(event, K_PAUSE)
                    or right_click(event)
                ):
                    if not place >= len(gl.files):
                        if not gl.PAUSED:  # go to next thumb page:
                            paint_screen(gl.IMGV_COLOR)
                            close_button(screen)
                            set_caption("Thumbnails [Paused]")
                            x = []
                            screen_pause = 0
                            marker = 0
                            break
                        # unpause:
                        gl.PAUSED = 0
                        screen_pause = 0
                        break
                if hit_key(event, K_BACKSPACE) or hit_key(event, K_b) or middle_click(event):
                    # go back to previous thumb page, even if paused:
                    if (place - marker) > 0:
                        i = j = SPACER
                        if gl.PAUSED:
                            gl.PAUSED = 0
                        paint_screen(gl.IMGV_COLOR)
                        close_button(screen)
                        screen_pause = 0
                        place = place - (marker + gl.MAX_THUMBS)
                        marker = 0
                        x = []
                        break
                if hit_key(event, K_ESCAPE):
                    gl.ESCAPED = 1
                    return (new_img, new_img, new_img, file)
        else:
            set_caption("Loading Thumbnails [%d] - imgv" % marker)
            (x, i, j, place, screen_pause, marker) = show_thumbs(
                screen, SPACER, x, i, j, place, marker, font, font_size
            )
        pygame.time.delay(5)
    return (new_img, new_img, new_img, file)
Exemplo n.º 13
0
def get_speed(screen, new_img, rect, filename, file, num_imgs):
    "get input from keyboard (including number pad) and only accept/display digits"
    paint_screen(screen, gl.BLACK)
    normal_cursor()
    DEFAULT_SPEED = 5
    MAX_SPEED = 100000
    speed_msg = " Enter number of seconds to delay between images (Default=5): _ "
    speed = ['0']
    char_space = 0
    screen_midtop = (screen.get_rect().midtop[0], screen.get_rect().midtop[1] + 20)
    font = pygame.font.Font(gl.FONT_NAME, 13)
    ren_speed_msg = font.render(speed_msg, 1, gl.MSG_COLOR)
    ren_speed_msg_rect = ren_speed_msg.get_rect()
    ren_speed_msg_width = ren_speed_msg.get_width()
    ren_speed_msg_rect.midtop = screen_midtop
    screen.blit(ren_speed_msg, ren_speed_msg_rect)
    update(ren_speed_msg_rect)
    (esc_rect, close_font) = close_button(screen)
    my_digits = [] # keypad number list.
    dirty_rects = []
    for num in range(10):
        my_digits.append('[%d]' % num) # [0],[1]...[9]
    pygame.event.set_allowed(MOUSEMOTION)
    while 1:
        event = pygame.event.wait()
        cursor = pygame.mouse.get_pos()
        hover_cursor(cursor, (esc_rect,))
        if event.type == KEYDOWN and not event.key == K_RETURN:
            speed_input = pygame.key.name(event.key)
            try:
                check_quit(event)
                if speed_input in my_digits or speed_input in digits:
                    # only echo digits (0-9)
                    for i in speed_input:
                        # extract n from brackets, [n]
                        if i in digits:
                            speed_input = i
                    speed.append(speed_input)
                    ren_speed = font.render(speed_input, 1, gl.MSG_COLOR, gl.BLACK)
                    ren_speed_rect = ren_speed.get_rect()
                    ren_speed_rect.midtop = screen_midtop
                    # dividing by 2.12 allows to overwrite the "_" fake cursor marker:
                    ren_speed_rect[0] = ren_speed_rect[0] + (char_space + (ren_speed_msg_width / 2.12) + 5)
                    dirty_rects.append(ren_speed_rect)
                    screen.blit(ren_speed, ren_speed_rect)
                    update(ren_speed_rect)
                    char_space = char_space + ren_speed.get_width()
            except TypeError:
                # don't crash if user hits Backspace, Esc, etc.
                pass
        if hit_key(event, K_RETURN) or hit_key(event, K_KP_ENTER):
            break
        if left_click(event):
            if esc_rect.collidepoint(cursor):
                wait_cursor()
                my_update_screen(new_img, screen, rect, file, num_imgs)
                normal_cursor()
                return -1
        if hit_key(event, K_ESCAPE):
            wait_cursor()
            my_update_screen(new_img, screen, rect, file, num_imgs)
            normal_cursor()
            return -1
        if hit_key(event, K_BACKSPACE) or hit_key(event, K_DELETE) or hit_key(event, K_KP_PERIOD):
            # erase whatever text was inputed
            speed = ['0']
            try:
                for rect in dirty_rects:
                    paint_screen(screen, gl.BLACK, rect)
                char_space = ren_speed.get_width()
            except:
                pass
    # convert to a valid speed
    if not len(speed) > 1:
        speed.append(str(DEFAULT_SPEED))
    speed = int(''.join(speed))
    if speed > MAX_SPEED:
        speed = DEFAULT_SPEED
    return speed
Exemplo n.º 14
0
def help(screen):
    paint_screen(screen, gl.BLACK)
    (screen_width, screen_height) = (screen.get_width(), screen.get_height())
    (esc_rect, font) = close_button(screen)
    show_message(screen, "Main Keyboard Commands", "top", 11, ("bold", "underline", "transparent"))
    key_list = [" Space/N/Ctrl+Tab=Next image, Backspace/B=Previous Image. Ctrl+B=Toggle Image Border ", 
                " D=Change Directory ", 
                " I=Image Browser ", 
                " T=Thumbnails (Space/N/Right-Click=Next. Backspace/B/Middle-Click=Prev. P/Pause=Pause), Ctrl+T=Transparent font ", 
                " 4=View four images at a time (Space/N/Right-Click=Next. Backspace/B/Middle-Click=Previous. W=Slideshow) ", 
                " W=Slideshow (Space=Skip forward. Backspace=Skip backward. P/Pause=Pause) ", 
                " P=Add to Playlist, Ctrl+P=Playlist Options ", 
                " C=Close Menu ",
                " F=First Image (Jump to the first image), L=Last Image (Jump to the last image), Ctrl+L=Lock Zoom ", 
                " '+'=Zoom In. '-'=Zoom Out. Ctrl+'+'=Zoom In (Double). Ctrl+'-'=Zoom Out (Double). Ctrl+Alt+'+'=Zoom In (Scale2X) ", 
                " R=Rotate Right. Ctrl+R=Rotate Left ",
                " Escape=Refresh (Reverts images to original state or reloads after directory changes) ",
                " M=Flip Horizontal (Mirror), V=Flip Vertical ", 
                " S=Shuffle, U=Unshuffle ", 
                " A=Download Image (Saves remote images to your imgv download directory) ", 
                " Delete/Ctrl+W=Close Image, Ctrl+Delete=Permanently delete image from harddisk", 
                " X=Hide Image, Ctrl+X=Toggle displaying the main and on-the-fly-Exif status bars ", 
                " O=Open URL to extract images from a Website ",
                " F1=Help, F2=640x480, F3=800x600, F4=1024x768, F5=1280x1024, F6/Alt+Enter=Fullscreen, F7=Resize Options ", 
                " H=Hand Tool (Allows you to pan/move images on the screen) ", 
                " Q=Exit imgv at any time (except when prompted for input) ", 
                " Arrow keys=Scroll the image left/right/up/down. PgUp/PgDown/Home/End=full up/full down/full left/full right, (Mouse Wheel=up/down) ", 
                " E=Edit ", 
                " Z=Image Properties ",
                " 1=Toggle scaling large images to fit the window ",
                " Ctrl+Zero=Fit image to the window, Alt+Zero=Actual Size (Show image at its real size) "]
    key_list.sort()
    if screen_width == 640:
        linesep = 13 
        font_size = 9
    else:
        linesep =15
        font_size = 11
    pos = linesep
    for line in key_list:
        show_message(screen, line, (2, pos), font_size, ("transparent"))
        pos += linesep 
 
    mouse_msg = "Main Mouse Commands"
    show_message(screen, mouse_msg, ((screen_width / 2) - (font.size(mouse_msg)[0] / 2), pos, 0, 0), 11, ("bold", "underline", "transparent"))
    mouse_list = [" Left-Click=Select menu options/Load images in Four at a Time, Thumbnail and Image browser/Click buttons and links/Change directories ", " Right-Click=Open or move the main menu/Go forward a page in Four at a Time, Thumbnail and Image Browser/Tag directories ", " Middle-Click=Close the main menu/Go back a page in Four at a Time, Thumbnail and Image Browser ", " Mouse Scroll Wheel=Scroll images that are larger than the screen up or down/Activate the Hand Tool "]
    pos += linesep
    for line in mouse_list:
        show_message(screen, line, (2, pos), font_size, ("transparent"))
        pos += linesep

    gl.MSG_COLOR = gl.BLUE
    doc_msg = "View imgv's online documentation"
    doc_rect = show_message(screen, doc_msg, ((screen_width / 2) - (font.size(doc_msg)[0] / 2), screen_height - 20, 0, 0), 12, ("underline", "bold"))

    donate_msg = "Donate!"
    donate_rect = show_message(screen, donate_msg, ((screen_width) - (font.size(donate_msg)[0] + 70), screen_height - 35, 0, 0), 12, ("bold", "underline"))

    gl.MSG_COLOR = gl.SILVER
    author_msg = "Author: Ryan Kulla"
    show_message(screen, author_msg, ((screen_width) - (font.size(author_msg)[0] - 10), screen_height - 15, 0, 0), 9, ("bold", "transparent"), (7, gl.WHITE))

    normal_cursor()
    print_version(screen, screen_height)
    pygame.event.set_blocked(MOUSEMOTION)
    while 1:
        event = pygame.event.poll()
        pygame.time.wait(1)
        cursor = pygame.mouse.get_pos()
        check_quit(event)
        hover_cursor(cursor, (doc_rect, esc_rect, donate_rect))
        if hit_key(event, K_ESCAPE) or hit_key(event, K_SPACE):
           gl.ESCAPED = 1
           gl.MSG_COLOR = gl.MENU_COLOR
           break
        if left_click(event):
            wait_cursor()
            if doc_rect.collidepoint(cursor):
                webbrowser.open("http://imgv.sourceforge.net/doc/", 1, 1)
            if donate_rect.collidepoint(cursor):
                webbrowser.open("http://imgv.sourceforge.net/donate.html", 1, 1)
            elif esc_rect.collidepoint(cursor):
                gl.ESCAPED = 1
                gl.MSG_COLOR = gl.MENU_COLOR
                break
Exemplo n.º 15
0
def show_dirs(screen, num_imgs, file):
    wait_cursor()
    if platform == 'win32':
        try:
            os.chdir(gl.DRIVE + ":")
        except:
            pass # Probably an OSError from not having a cd in the drive
    slash, get_curdir = os.sep, os.getcwd()
    fg_color = gl.SILVER
    font_size = 10
    font = pygame.font.Font(gl.FONT_NAME, font_size)
    font.set_bold(1) # very important
    line = 55
    name_max = 16 # dir name max
    menu_items = []
    if get_curdir[-1] == slash:
        curdir = get_curdir 
    else:
        curdir = get_curdir + slash
    paint_screen(screen, gl.BLACK)
    screen_height = screen.get_height()

    if not gl.BEEN_THERE_DONE_THAT:
        show_message(screen, "You can type in a directory number or shortcut (L/T/A/D/C/V/S/Q) instead of clicking: _", "bottom", 11)
    else:
        show_message(screen, "Directory number or shortcut: _", "bottom", 11)

    curdir_msg = check_truncate(screen.get_width(), curdir)
    all_files = os.listdir('.')
    all_files.sort()
    n_dirs = len([d for d in all_files if os.path.isdir(d)])
    all_files = [f for f in all_files if not os.path.isdir(f)]
    n_files = len(all_files)
    all_images = get_imgs(os.getcwd(), 0)
    n_images = len(all_images)
    get_movies = lambda x, y: [i.upper().endswith(y) for i in all_images].count(True)
    n_movies = get_movies(all_images, ".MPG") + get_movies(all_images, ".MPEG")
    dirs_text = "Directories"
    files_text = "Files"
    images_text = "Images"
    movies_text = "MPEGs"
    if n_dirs == 1: dirs_text = "Directory" # unplural
    if n_files == 1: files_text = "File"
    if n_images == 1: images_text = "Image"
    if n_movies == 1: movies_text = "MPEG"
    files_msg = "[%d %s. %d %s. %d %s. %d %s]" % (n_dirs, dirs_text, n_files, files_text, n_images - n_movies, images_text, n_movies, movies_text)
    curdir_msg_wpos = (screen.get_width() / 2 - font.size(curdir_msg)[0] / 2) - font.size(files_msg)[0] / 2 + 10
    files_msg_wpos = screen.get_width() / 2 + font.size(curdir_msg)[0] / 2 - font.size(files_msg)[0] / 2 + 20

    if not gl.REFRESH_IMG_COUNT and gl.CACHE_DIR_OK:
        dirs = gl.CACHE_DIRS
        gl.REFRESH_IMG_COUNT = 1
        set_caption(curdir)
        show_message(screen, curdir_msg, (curdir_msg_wpos, 4), 10, ("bold"))
        show_message(screen, files_msg, (files_msg_wpos, 4), 10)
    else:
        show_message(screen, curdir_msg, (curdir_msg_wpos, 4), 10, ("bold"))
        show_message(screen, files_msg, (files_msg_wpos, 4), 10)
        set_caption(curdir)
        dirs = os.listdir(curdir)
        dirs.sort()
        dirs = strip_dirs(dirs)
        # ensure the root dir and last dir items go at top
        dirs.insert(0, "..")
        dirs.insert(0, slash)
        gl.CACHE_DIRS = dirs
    ren_load_rect = imgv_button(screen, " (L)oad ", 0, 18, "topleft")
    ren_load_subdirs_rect = imgv_button(screen, " Subdirs (T)oo ", 62, 18, "topleft")
    if platform == 'win32':
        ren_drive_rect = imgv_button(screen, " Change (D)rive ", 271, 18, "topleft")
    dirpl_rect = imgv_button(screen, " (A)dd To Playlist ", 160, 18, "topleft")
    untag_all_rect = imgv_button(screen, " (C)lear Tags ", 380, 18, "topleft")
    view_tagged_rect = imgv_button(screen, " (V)iew Tags ", 472, 18, "topleft")
    filter_rect = imgv_button(screen, " (S)earch ", 559, 18, "topleft")
    col = 10
    show_message(screen, "Right-Click directories to tag multiple directories to load. Ctrl+Left-Click to untag.", (10, 40), 10)
    if gl.MULT_DIRS != []:
        show_message(screen, "[Dirs tagged: %s]" % len(gl.MULT_DIRS), (440, 40), 10, "bold")

    if gl.FILTER_COMMAND != {}:
        show_message(screen, "[Filter: on]", (560, 40), 10, "bold")

    # add numbers to directory names
    if gl.ADDED_DIR_NUMS == 0 and dirs[0] != '*':
        gl.ADDED_DIR_NUMS = 1
        for i, d in enumerate(dirs):
            dirs[i] = '*' + str(i) + gl.DIRNUMSEP + d
    for d in dirs:
        d = d[1:] # strip out the '*' marker
        if d[3:] == slash:
            if gl.DIRNUM_COLORS:
                dmsg = d
            else:
                ren = font.render(d, 1, gl.MSG_COLOR)
        else:
            if len(d) > name_max:
                if gl.DIRNUM_COLORS:
                    dmsg = truncate_name(d, name_max)
                else:
                    ren = font.render(truncate_name(d, name_max), 1, gl.MSG_COLOR)
            else:
                if gl.DIRNUM_COLORS:
                    dmsg = d + slash
                else:
                    ren = font.render(d + slash, 1, gl.MSG_COLOR)
            
        # print directory names on screen, wrapping if necessary
        font_height = font.size(' '.join(d.split(' ')[1:]))[1]
        if (line + font_height) >= (screen_height - 10):
            line = 55 # reset to beginning of screen
            col = col + (name_max + 130) # go to next column

        if gl.DIRNUM_COLORS:
            before_color = gl.MSG_COLOR
            if gl.MSG_COLOR == gl.SILVER:
                gl.MSG_COLOR = (142, 142, 142)
            else:
                gl.MSG_COLOR = gl.SILVER
            if before_color == gl.WHITE:
                ren_rect = show_message(screen, dmsg, (col, line), font_size, ("bold"), (len(dmsg[:dmsg.index(gl.DIRNUMSEP) + 1]), gl.SILVER))
            else:
                ren_rect = show_message(screen, dmsg, (col, line), font_size, ("bold"), (len(dmsg[:dmsg.index(gl.DIRNUMSEP) + 1]), before_color))
        else:
            ren_rect = ren.get_rect()
            ren_rect[0] = col
            ren_rect[1] = line
            screen.blit(ren, ren_rect)
            update(ren_rect)
        line = line + 12
        menu_items.append((ren_rect, d))
        if gl.DIRNUM_COLORS:
            gl.MSG_COLOR = before_color

    normal_cursor()
    pygame.event.set_blocked(MOUSEMOTION)
    while 1:
        event = pygame.event.poll()
        pygame.time.wait(1)
        cursor = pygame.mouse.get_pos()
        (esc_rect, close_font) = close_button(screen)
        hover_fx(screen, curdir, menu_items, cursor)
        if platform == 'win32':#
            hover_cursor(cursor, [ren_load_rect, ren_load_subdirs_rect, ren_drive_rect, dirpl_rect, untag_all_rect, view_tagged_rect, filter_rect, esc_rect] + [x[0] for x in menu_items])
        hover_button(ren_load_rect, cursor, screen, " (L)oad ", 0, 18, "topleft")
        hover_button(ren_load_subdirs_rect, cursor, screen, " Subdirs (T)oo ", 62, 18, "topleft")
        if platform == 'win32':
            hover_button(ren_drive_rect, cursor, screen, " Change (D)rive ", 271, 18, "topleft")
        hover_button(dirpl_rect, cursor, screen, " (A)dd To Playlist ", 160, 18, "topleft")
        hover_button(untag_all_rect, cursor, screen, " (C)lear Tags ", 380, 18, "topleft")
        hover_button(view_tagged_rect, cursor, screen, " (V)iew Tags ", 472, 18, "topleft")
        hover_button(filter_rect, cursor, screen, " (S)earch ", 559, 18, "topleft")
        if left_click(event):
            for item in menu_items:
                if item[0].collidepoint(cursor):
                    if pygame.mouse.get_pressed()[0] and (pygame.key.get_pressed()[K_LCTRL] or\
                       pygame.key.get_pressed()[K_RCTRL]): 
                        try: # untag directory
                            gl.MULT_DIRS.remove(os.getcwd() + slash + ' '.join(item[1].split(' ')[1:]))
                            show_message(screen, " " * 30, (440, 40), 10, ("bold"))
                            show_message(screen, "[Dirs tagged: %s]" % len(gl.MULT_DIRS), (440, 40), 10, "bold")
                        except:
                            pass
                    else: # (normal mode) change to a single directory and load its images
                        (num_imgs, file) = do_change_dir(screen, num_imgs, file, item[1])
                        return (num_imgs, file)
        if right_click(event):
            for item in menu_items:
                if item[0].collidepoint(cursor):
                    # tag directory
                    if os.getcwd()[-1] != slash:
                        gl.MULT_DIRS.append(os.getcwd() + slash + ' '.join(item[1].split(' ')[1:]))
                    else:
                        gl.MULT_DIRS.append(os.getcwd() + ' '.join(item[1].split(' ')[1:]))
                    show_message(screen, " " * 30, (440, 40), 10, ("bold"))
                    show_message(screen, "[Dirs tagged: %s]" % len(gl.MULT_DIRS), (440, 40), 10, "bold")
                    
        # allow number keys to be used to change directories
        dirnum = None
        if event.type == KEYDOWN and event.key in (K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_0, K_KP1, K_KP2, K_KP3, K_KP4, K_KP5, K_KP6, K_KP7, K_KP8, K_KP9, K_KP0):
            dirnum = get_dirnum(screen, event.key)
            if dirnum != 'backspaced':
                for item in menu_items:
                    if item[1].startswith(str(dirnum)):
                        (num_imgs, file) = do_change_dir(screen, num_imgs, file, item[1])
                        return (num_imgs, file)
                break

        if hit_key(event, K_RETURN) or hit_key(event, K_SPACE) or hit_key(event, K_l):
            (num_imgs, file) = do_load_dir()
            break
        if hit_key(event, K_t): # load subdirs on keypress 't'
            (num_imgs, file) = do_subdirs_too()
            break
        if hit_key(event, K_s): # search
           command_get_filter_info(screen)
           (num_imgs, file) = show_dirs(screen, num_imgs, file)
           break
        if hit_key(event, K_d): # change drives
           if platform == 'win32':
               gl.WAS_IN_CHANGE_DRIVES = 1
               (num_imgs, file) = do_change_drive(screen, num_imgs, file)
               gl.WAS_IN_CHANGE_DRIVES = 0
               break
        if hit_key(event, K_c): # clear tag list
            do_untag(screen)
        if hit_key(event, K_v): # view tagged dirs
           do_view_tagged(screen, num_imgs, file)
           break # break main loop to display properly
        if hit_key(event, K_a): # add curdir to playlist
           command_add_to_play_list(screen, curdir)
           return (num_imgs, file) 
        if hit_key(event, K_ESCAPE):
            gl.ESCAPED = 1
            gl.ADDED_DIR_NUMS = 0
            break
        if left_click(event):
            if esc_rect.collidepoint(cursor):
                gl.ESCAPED = 1
                gl.ADDED_DIR_NUMS = 0
                break
            if ren_load_rect.collidepoint(cursor): # load current dir
                (num_imgs, file) = do_load_dir()
                break
            if ren_load_subdirs_rect.collidepoint(cursor): # load subdirs too
                (num_imgs, file) = do_subdirs_too()
                break
            if platform == 'win32':
                if ren_drive_rect.collidepoint(cursor):
                    gl.WAS_IN_CHANGE_DRIVES = 1
                    (num_imgs, file) = do_change_drive(screen, num_imgs, file)
                    gl.WAS_IN_CHANGE_DRIVES = 0
                    break
            if dirpl_rect.collidepoint(cursor):
                command_add_to_play_list(screen, curdir)
                return (num_imgs, file)
            if untag_all_rect.collidepoint(cursor):
                do_untag(screen)
            if view_tagged_rect.collidepoint(cursor): 
                do_view_tagged(screen, num_imgs, file)
                break # break main loop to display properly
            if filter_rect.collidepoint(cursor):
                command_get_filter_info(screen)
                (num_imgs, file) = show_dirs(screen, num_imgs, file)
                break
        check_quit(event)
    gl.CACHE_DIR_OK = 1 
    return (num_imgs, file)
Exemplo n.º 16
0
Arquivo: edit.py Projeto: rkulla/imgv
def pref_options(screen):
    yes_wpos = 280
    no_wpos = yes_wpos + 50
    cbox_wpos1 = yes_wpos + 30
    cbox_wpos2 = cbox_wpos1 + 47
    change_wpos = yes_wpos
    change_msg_wpos = change_wpos + 60

    # travel down printing each message option 16 pixels as at time (same value as row_sep in print_preferences())
    show_message("Yes:", (yes_wpos, 13), 10, ("transparent"))
    show_message("No:", (no_wpos, 13), 10, ("transparent"))
    main_statusbar_crect, main_statusbar_ucrect = check_boxes(screen, (15, cbox_wpos1, cbox_wpos2), "main_statusbar")

    show_message("Yes", (yes_wpos, 29), 10, ("transparent"))
    show_message("No:", (no_wpos, 29), 10, ("transparent"))
    four_statusbars_crect, four_statusbars_ucrect = check_boxes(screen, (31, cbox_wpos1, cbox_wpos2), "four_statusbars")

    show_message("Yes:", (yes_wpos, 45), 10, ("transparent"))
    show_message("No:", (no_wpos, 45), 10, ("transparent"))
    exif_statusbar_crect, exif_statusbar_ucrect = check_boxes(screen, (47, cbox_wpos1, cbox_wpos2), "exif_statusbar")

    show_message("Yes:", (yes_wpos, 61), 10, ("transparent"))
    show_message("No:", (no_wpos, 61), 10, ("transparent"))
    thumb_statusbars_crect, thumb_statusbars_ucrect = check_boxes(screen, (63, cbox_wpos1, cbox_wpos2), "thumb_statusbars")

    show_message("Yes:", (yes_wpos, 77), 10, ("transparent"))
    show_message("No:", (no_wpos, 77), 10, ("transparent"))
    transparent_text_crect, transparent_text_ucrect = check_boxes(screen, (79, cbox_wpos1, cbox_wpos2), "transparent_text")

    show_message("Yes:", (yes_wpos, 93), 10, ("transparent"))
    show_message("No:", (no_wpos, 93), 10, ("transparent"))
    image_border_crect, image_border_ucrect = check_boxes(screen, (95, cbox_wpos1, cbox_wpos2), "image_border")

    show_message("Yes:", (yes_wpos, 109), 10, ("transparent"))
    show_message("No:", (no_wpos, 109), 10, ("transparent"))
    lock_zoom_crect, lock_zoom_ucrect = check_boxes(screen, (110, cbox_wpos1, cbox_wpos2), "lock_zoom")

    show_message("Yes:", (yes_wpos, 125), 10, ("transparent"))
    show_message("No:", (no_wpos, 125), 10, ("transparent"))
    wrap_crect, wrap_ucrect = check_boxes(screen, (126, cbox_wpos1, cbox_wpos2), "wrap")

    show_message("Yes:", (yes_wpos, 141), 10, ("transparent"))
    show_message("No:", (no_wpos, 141), 10, ("transparent"))
    wrap_slideshow_crect, wrap_slideshow_ucrect = check_boxes(screen, (142, cbox_wpos1, cbox_wpos2), "wrap_slideshow")

    show_message("Yes:", (yes_wpos, 157), 10, ("transparent"))
    show_message("No:", (no_wpos, 157), 10, ("transparent"))
    start_fullscreen_crect, start_fullscreen_ucrect = check_boxes(screen, (158, cbox_wpos1, cbox_wpos2), "start_fullscreen")

    show_message("Yes:", (yes_wpos, 173), 10, ("transparent"))
    show_message("No:", (no_wpos, 173), 10, ("transparent"))
    thumb_border_crect, thumb_border_ucrect = check_boxes(screen, (174, cbox_wpos1, cbox_wpos2), "thumb_border")

    show_message("Yes:", (yes_wpos, 189), 10, ("transparent"))
    show_message("No:", (no_wpos, 189), 10, ("transparent"))
    dirnum_colors_crect, dirnum_colors_ucrect = check_boxes(screen, (190, cbox_wpos1, cbox_wpos2), "dirnum_colors")

    show_message("Yes:", (yes_wpos, 205), 10, ("transparent"))
    show_message("No:", (no_wpos, 205), 10, ("transparent"))
    show_movies_crect, show_movies_ucrect = check_boxes(screen, (206, cbox_wpos1, cbox_wpos2), "show_movies")

    paint_screen(gl.WHITE, (change_msg_wpos, 223, 12, 10))
    paint_screen(gl.IMGV_COLOR, (change_msg_wpos+1, 224, 10, 8))
    screen_bgcolor_rect = change_box(screen, (224, change_wpos))

    paint_screen(gl.WHITE, (change_msg_wpos, 239, 12, 10))
    paint_screen(gl.MSG_COLOR, (change_msg_wpos+1, 240, 10, 8))
    font_color_rect = change_box(screen, (240, change_wpos))

    paint_screen(gl.WHITE, (change_msg_wpos, 255, 12, 10))
    paint_screen(gl.FONT_BG, (change_msg_wpos+1, 256, 10, 8))
    font_bgcolor_rect = change_box(screen, (256, change_wpos))

    paint_screen(gl.WHITE, (change_msg_wpos, 271, 12, 10))
    paint_screen(gl.IMG_BORDER_COLOR, (change_msg_wpos+1, 272, 10, 8))
    img_border_color_rect = change_box(screen, (272, change_wpos))

    paint_screen(gl.WHITE, (change_msg_wpos, 287, 12, 10))
    paint_screen(gl.THUMB_BORDER_COLOR, (change_msg_wpos+1, 288, 10, 8))
    thumb_border_color_rect = change_box(screen, (288, change_wpos))

    paint_screen(gl.WHITE, (change_msg_wpos, 303, 12, 10))
    paint_screen(gl.THUMB_BG_COLOR_VAL, (change_msg_wpos+1, 304, 10, 8))
    thumb_bgcolor_rect = change_box(screen, (304, change_wpos))

    paint_screen(gl.WHITE, (change_msg_wpos, 320, 12, 10))
    paint_screen(gl.FOUR_DIV_COLOR, (change_msg_wpos+1, 321, 10, 8))
    four_divcolor_rect = change_box(screen, (321, change_wpos))

    paint_screen(gl.WHITE, (change_msg_wpos, 336, 12, 10))
    paint_screen(gl.BUTTON_BGCOLOR, (change_msg_wpos+1, 337, 10, 8))
    button_bgcolor_rect = change_box(screen, (337, change_wpos))

    paint_screen(gl.WHITE, (change_msg_wpos, 352, 12, 10))
    paint_screen(gl.BUTTON_HOVERCOLOR, (change_msg_wpos+1, 353, 10, 8))
    button_hover_color_rect = change_box(screen, (353, change_wpos))

    paint_screen(gl.WHITE, (change_msg_wpos, 368, 12, 10))
    paint_screen(gl.BUTTON_TEXTCOLOR, (change_msg_wpos+1, 369, 10, 8))
    button_textcolor_rect = change_box(screen, (369, change_wpos))

    paint_screen(gl.WHITE, (change_msg_wpos, 384, 12, 10))
    paint_screen(gl.BUTTON_TEXTHOVERCOLOR, (change_msg_wpos+1, 385, 10, 8))
    button_texthovercolor_rect = change_box(screen, (385, change_wpos))

    paint_screen(gl.WHITE, (change_msg_wpos, 400, 12, 10))
    paint_screen(gl.CLOSE_BUTTONCOLOR, (change_msg_wpos+1, 401, 10, 8))
    close_button_color_rect = change_box(screen, (401, change_wpos))

    show_message("%s" % ('Fit nothing', 'Fit large images', 'Fit all images', 'Fit window to image')[gl.FIT_IMAGE_VAL], (change_msg_wpos, 416), 10, ("transparent"))
    fit_image_rect = change_box(screen, (417, change_wpos))

    show_message(gl.CURRENT_GAMMA, (change_msg_wpos, 432), 10, ("transparent"))
    gamma_rect = change_box(screen, (433, change_wpos))

    show_message("%sx%s" % (gl.IMGV_RESOLUTION[0], gl.IMGV_RESOLUTION[1]), (change_wpos+60, 448), 10, ("transparent"))
    winsize_rect = change_box(screen, (449, change_wpos))

    show_message(gl.THUMB_VAL, (change_wpos+60, 464), 10, ("transparent"))
    thumbsize_rect = change_box(screen, (465, change_wpos))

    show_message(gl.TRANS_FX, (change_wpos+60, 480), 10, ("transparent"))
    transeffect_rect = change_box(screen, (481, change_wpos))

    show_message(gl.START_DIRECTORY_VAL, (change_wpos+60, 496), 10, ("transparent"))
    startdir_rect = change_box(screen, (497, change_wpos))

    show_message(gl.EXTERNAL_EDITOR, (change_wpos+60, 512), 10, ("transparent"))
    external_editor_rect = change_box(screen, (513, change_wpos))

    show_message("%s" % ('Fit nothing', 'Fit large images', 'Fit all images', 'Fit window to image')[gl.FIT_IMAGE_SLIDESHOW_VAL], (change_msg_wpos, 528), 10, ("transparent"))
    fit_slideshow_rect = change_box(screen, (529, change_wpos))

    if gl.CORRECT_PASSWORD.lower() == "none":
        show_message(gl.CORRECT_PASSWORD , (change_msg_wpos, 544), 10, ("transparent"))
    else:
        show_message('*' * len(gl.CORRECT_PASSWORD), (change_msg_wpos, 544), 10, ("transparent"))
    passwd_rect = change_box(screen, (545, change_wpos))

    close_button(screen)

    return (transparent_text_crect, transparent_text_ucrect, main_statusbar_crect, main_statusbar_ucrect, four_statusbars_crect, four_statusbars_ucrect, exif_statusbar_crect, exif_statusbar_ucrect, thumb_statusbars_crect, thumb_statusbars_ucrect, image_border_crect, image_border_ucrect, fit_image_rect, dirnum_colors_crect, dirnum_colors_ucrect, screen_bgcolor_rect, lock_zoom_crect, lock_zoom_ucrect, wrap_crect, wrap_ucrect, wrap_slideshow_crect, wrap_slideshow_ucrect, start_fullscreen_crect, start_fullscreen_ucrect, thumb_border_crect, thumb_border_ucrect, show_movies_crect, show_movies_ucrect, font_color_rect, font_bgcolor_rect, img_border_color_rect, thumb_border_color_rect, thumb_bgcolor_rect, four_divcolor_rect, button_bgcolor_rect, button_hover_color_rect, button_textcolor_rect, button_texthovercolor_rect, close_button_color_rect, gamma_rect, winsize_rect, thumbsize_rect, transeffect_rect, startdir_rect, external_editor_rect, fit_slideshow_rect, passwd_rect)
Exemplo n.º 17
0
Arquivo: edit.py Projeto: rkulla/imgv
def command_edit_menu(screen, file, new_img, rect):
    menu_items = []
    paint_screen(gl.BLACK)
    (esc_rect, font) = close_button(screen)
    show_message("%s" % os.path.basename(gl.files[file]), "top", 12, "bold")
    show_message("Option number: _", "bottom", 12)
    pygame.event.set_blocked(MOUSEMOTION)
    (menu_items, men_ops) = edit_menu(screen, file, menu_items)
    while 1:
       event = pygame.event.poll()
       pygame.time.wait(1)
       check_quit(event)
       cursor = pygame.mouse.get_pos()
       hover_fx(screen, menu_items, men_ops, cursor, font)
       hover_cursor(cursor, [esc_rect] + [x[0] for x in menu_items])
       if gl.NOT_HOVERED:
           show_message("%sOption number: _%s" % (" " * 100, " " * 100), "bottom", 12)
           blank_fx(screen, -1)

       if hit_key(event, K_ESCAPE):
           gl.USING_SCROLL_MENU = 0
           update_edit_screen(screen, file, new_img)
           return (new_img, new_img, new_img, file, rect)
       if left_click(event):
           if esc_rect.collidepoint(cursor):
               gl.USING_SCROLL_MENU = 0
               update_edit_screen(screen, file, new_img)
               return (new_img, new_img, new_img, file, rect)

       if event.type == KEYDOWN and event.key in (K_1, K_2, K_3, K_4, K_KP1, K_KP2, K_KP3, K_KP4):
           if hit_key(event, K_1) or hit_key(event, K_KP1):
               (new_img, img, refresh_img, file, rect) = do_delete_image(screen, new_img, file, rect)
               paint_screen(gl.BLACK)
               (menu_items, men_ops) = edit_menu(screen, file, menu_items)
           if hit_key(event, K_2) or hit_key(event, K_KP2):
               do_set_wallpaper(screen, file, new_img, rect)
               paint_screen(gl.BLACK)
               (menu_items, men_ops) = edit_menu(screen, file, menu_items)
           if hit_key(event, K_3) or hit_key(event, K_KP3):
                if gl.EXTERNAL_EDITOR not in ('"None"', '"none"', '"NONE"', ''):
                    do_external_viewer(screen, file, new_img)
                paint_screen(gl.BLACK)
                (menu_items, men_ops) = edit_menu(screen, file, menu_items)
           if hit_key(event, K_4) or hit_key(event, K_KP4):
               preferences(screen)
               (menu_items, men_ops) = edit_menu(screen, file, menu_items)

       if event.type == MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0]:
           for it in menu_items:
               if it[0].collidepoint(cursor) and it[1] in men_ops:
                   if it[1] == "1) Delete image":
                       (new_img, new_img, new_img, file, rect) = do_delete_image(screen, new_img, file, rect)
                       paint_screen(gl.BLACK)
                       (menu_items, men_ops) = edit_menu(screen, file, menu_items)
                       break
                   if it[1] == "2) Set as wallpaper":
                       do_set_wallpaper(screen, file, new_img, rect)
                       paint_screen(gl.BLACK)
                       (menu_items, men_ops) = edit_menu(screen, file, menu_items)
                       break
                   if it[1] == "3) Open in external viewer":
                        do_external_viewer(screen, file, new_img)
                        paint_screen(gl.BLACK)
                        (menu_items, men_ops) = edit_menu(screen, file, menu_items)
                        break
                   if it[1] == "4) Preferences":
                       preferences(screen)
                       (menu_items, men_ops) = edit_menu(screen, file, menu_items)
                       break
                   return (new_img, new_img, new_img, file, rect)
       gl.NOT_HOVERED = 1
    return (new_img, new_img, new_img, file, rect)
Exemplo n.º 18
0
Arquivo: edit.py Projeto: rkulla/imgv
def preferences(screen):
    paint_screen(gl.BLACK)
    set_caption("imgv preferences")
    font_size = 12
    font = pygame.font.Font(gl.FONT_NAME, font_size)
    (esc_rect, font) = close_button(screen)
    pref_items = print_preferences(screen)

    (transparent_text_crect, transparent_text_ucrect, main_statusbar_crect, main_statusbar_ucrect, four_statusbars_crect, four_statusbars_ucrect, exif_statusbar_crect, exif_statusbar_ucrect, thumb_statusbars_crect, thumb_statusbars_ucrect, image_border_crect, image_border_ucrect, fit_image_rect, dirnum_colors_crect, dirnum_colors_ucrect, screen_bgcolor_rect, lock_zoom_crect, lock_zoom_ucrect, wrap_crect, wrap_ucrect, wrap_slideshow_crect, wrap_slideshow_ucrect, start_fullscreen_crect, start_fullscreen_ucrect, thumb_border_crect, thumb_border_ucrect, show_movies_crect, show_movies_ucrect, font_color_rect, font_bgcolor_rect, img_border_color_rect, thumb_border_color_rect, thumb_bgcolor_rect, four_divcolor_rect, button_bgcolor_rect, button_hover_color_rect, button_textcolor_rect, button_texthovercolor_rect, close_button_color_rect, gamma_rect, winsize_rect, thumbsize_rect, transeffect_rect, startdir_rect, external_editor_rect, fit_slideshow_rect, passwd_rect) = pref_options(screen)

    while 1:
        event = pygame.event.poll()
        pygame.time.wait(1)
        check_quit(event)
        cursor = pygame.mouse.get_pos()
        prefs_hover_fx(screen, pref_items, cursor, font)

        hover_cursor(cursor, [esc_rect, transparent_text_crect, transparent_text_ucrect, main_statusbar_crect, main_statusbar_ucrect, four_statusbars_crect, four_statusbars_ucrect, exif_statusbar_crect, exif_statusbar_ucrect, thumb_statusbars_crect, thumb_statusbars_ucrect, image_border_crect, image_border_ucrect, fit_image_rect, dirnum_colors_crect, dirnum_colors_ucrect, screen_bgcolor_rect, lock_zoom_crect, lock_zoom_ucrect, wrap_crect, wrap_ucrect, wrap_slideshow_crect, wrap_slideshow_ucrect, start_fullscreen_crect, start_fullscreen_ucrect, thumb_border_crect, thumb_border_ucrect, show_movies_crect, show_movies_ucrect, font_color_rect, font_bgcolor_rect, img_border_color_rect, thumb_border_color_rect, thumb_bgcolor_rect, four_divcolor_rect, button_bgcolor_rect, button_hover_color_rect, button_textcolor_rect, button_texthovercolor_rect, close_button_color_rect, gamma_rect, winsize_rect, thumbsize_rect, transeffect_rect, startdir_rect, external_editor_rect, fit_slideshow_rect, passwd_rect])

        if gl.NOT_HOVERED:
            show_message("%s%s" % (" " * 100, " " * 100), "bottom", 12, ("transparent"))
            prefs_blank_fx(screen, -1)
        if hit_key(event, K_ESCAPE):
            gl.ESCAPED = 1
            paint_screen(gl.BLACK)
            return
        if left_click(event):
            if esc_rect.collidepoint(cursor):
                gl.ESCAPED = 1
                paint_screen(gl.BLACK)
                return
            if transparent_text_ucrect.collidepoint(cursor):
                gl.TOGGLE_TRANSPARENT ^= 1
                write_cfg("TRANSPARENT_TEXT")
            if main_statusbar_ucrect.collidepoint(cursor):
                gl.TOGGLE_STATUS_BAR ^= 1
                write_cfg("MAIN_STATUS_BAR")
            if four_statusbars_ucrect.collidepoint(cursor):
                gl.FOUR_STATUS_BARS ^= 1
                write_cfg("FOUR_AT_A_TIME_STATUS_BARS")
            if exif_statusbar_ucrect.collidepoint(cursor):
                gl.ON_FLY_EXIF_STATUS_BAR ^= 1
                write_cfg("ON_THE_FLY_EXIF_STATUS_BAR")
            if thumb_statusbars_ucrect.collidepoint(cursor):
                gl.THUMB_STATUS_BARS ^= 1
                write_cfg("THUMBNAIL_STATUS_BARS")
            if image_border_ucrect.collidepoint(cursor):
                gl.IMG_BORDER ^= 1
                write_cfg("IMAGE_BORDER")
            if lock_zoom_ucrect.collidepoint(cursor):
                gl.PERSISTENT_ZOOM_VAL ^= 1
                write_cfg("PERSISTENT_ZOOM")
            if wrap_ucrect.collidepoint(cursor):
                gl.WRAP ^= 1
                write_cfg("WRAP")
            if wrap_slideshow_ucrect.collidepoint(cursor):
                gl.WRAP_SLIDESHOW ^= 1
                write_cfg("WRAP_SLIDESHOW")
            if start_fullscreen_ucrect.collidepoint(cursor):
                gl.START_FULLSCREEN ^= 1
                write_cfg("FULLSCREEN")
            if thumb_border_ucrect.collidepoint(cursor):
                gl.THUMB_BORDER_VAL ^= 1
                write_cfg("THUMB_BORDER")
            if show_movies_ucrect.collidepoint(cursor):
                gl.MOVIES_VAL ^= 1
                show_message("(You must restart imgv for this change to take effect)", (375, 204), 10, ("bold", "transparent"))
                write_cfg("MOVIES")
            if fit_image_rect.collidepoint(cursor):
                paint_screen(gl.BLACK)
                show_message("Enter an option letter and press enter", (15, 20), 13, ("bold", "transparent"))
                show_message("A = Fit nothing.", (15, 60), 13, ("bold", "transparent"))
                show_message("B = Fit only large images to the window.", (15, 80), 13, ("bold", "transparent"))
                show_message("C = Fit all images to the window. (both in normal mode and Four-at-a-Time mode)", (15, 100), 13, ("bold", "transparent"))
                show_message("D = Fit the window to images.", (15, 120), 13, ("bold", "transparent"))
                answer = ask(screen, "Option")
                if answer != None and answer in ('a','A', 'b','B', 'c','C', 'd','D'):
                    dmap = {'a':0, 'b':1, 'c':2, 'd':3}
                    gl.FIT_IMAGE_VAL = dmap[answer.lower()]
                    write_cfg("FIT_IMAGE", str(gl.FIT_IMAGE_VAL))
                clean_prefs(screen)
            if fit_slideshow_rect.collidepoint(cursor):
                paint_screen(gl.BLACK)
                show_message("Enter an option letter and press enter", (15, 20), 13, ("bold", "transparent"))
                show_message("A = Fit nothing.", (15, 60), 13, ("bold", "transparent"))
                show_message("B = Fit only large images to the window.", (15, 80), 13, ("bold", "transparent"))
                show_message("C = Fit all images to the window. (both in normal mode and Four-at-a-Time mode)", (15, 100), 13, ("bold", "transparent"))
                show_message("D = Fit the window to images.", (15, 120), 13, ("bold", "transparent"))
                answer = ask(screen, "Option")
                if answer != None and answer in ('a','A', 'b','B', 'c','C', 'd','D'):
                    dmap = {'a':0, 'b':1, 'c':2, 'd':3}
                    gl.FIT_IMAGE_SLIDESHOW_VAL = dmap[answer.lower()]
                    write_cfg("FIT_IMAGE_SLIDESHOW", str(gl.FIT_IMAGE_SLIDESHOW_VAL))
                clean_prefs(screen)
            if gamma_rect.collidepoint(cursor):
                new_gamma = do_gamma(screen)
                if new_gamma != None:
                    try:
                        set_gamma(float(new_gamma))
                    except:
                        print 'invalid gamma value: %s' % new_gamma
                clean_prefs(screen)
            if dirnum_colors_ucrect.collidepoint(cursor):
                gl.DIRNUM_COLORS ^= 1
                write_cfg("COLOR_DIRECTORY_NUMBERS")
            if screen_bgcolor_rect.collidepoint(cursor):
                answer = color_msg(screen, "Set this to the color you want the background in imgv to be. (Default is BLACK)")
                (gl.IMGV_COLOR, cfg_str) = color_change(answer, gl.IMGV_COLOR)
                color_clean(screen, "IMGV_COLOR", cfg_str)
            if font_color_rect.collidepoint(cursor):
                answer = color_msg(screen, "Set this to the font color you want. (Default is WHITE)")
                (gl.MSG_COLOR, cfg_str) = color_change(answer, gl.MSG_COLOR)
                gl.MENU_COLOR = gl.MSG_COLOR
                color_clean(screen, "FONT_COLOR", cfg_str)
            if font_bgcolor_rect.collidepoint(cursor):
                answer = color_msg(screen, "Font background color you want. (Default is BLACK)")
                (gl.FONT_BG, cfg_str) = color_change(answer, gl.FONT_BG)
                gl.MENU_COLOR = gl.MSG_COLOR
                color_clean(screen, "FONT_BGCOLOR", cfg_str)
            if img_border_color_rect.collidepoint(cursor):
                answer = color_msg(screen, "Set this to the color you want the image border to be when it's activated. (Default is LIGHT_GREEN)")
                (gl.IMG_BORDER_COLOR, cfg_str) = color_change(answer, gl.IMG_BORDER_COLOR)
                color_clean(screen, "IMAGE_BORDER_COLOR", cfg_str)
            if thumb_border_color_rect.collidepoint(cursor):
                answer = color_msg(screen, "Set this to the color you want the image divider to be in Four-at-a-Time mode. (Default is WHITE)")
                (gl.THUMB_BORDER_COLOR, cfg_str) = color_change(answer, gl.THUMB_BORDER_COLOR)
                color_clean(screen, "THUMB_BORDER_COLOR", cfg_str)
            if thumb_bgcolor_rect.collidepoint(cursor):
                answer = color_msg(screen, "Set this to the color you want the background of individual thumbnails to be. (Default is BLACK)")
                (gl.THUMB_BG_COLOR_VAL, cfg_str) = color_change(answer, gl.THUMB_BG_COLOR_VAL)
                color_clean(screen, "THUMB_BG_COLOR", cfg_str)
            if four_divcolor_rect.collidepoint(cursor):
                answer = color_msg(screen, "Set this to the color you want the image divider to be in Four-at-a-Time mode. (Default is WHITE)")
                (gl.FOUR_DIV_COLOR, cfg_str) = color_change(answer, gl.FOUR_DIV_COLOR)
                color_clean(screen, "FOUR_AT_A_TIME_DIVIDER_COLOR", cfg_str)
            if button_bgcolor_rect.collidepoint(cursor):
                answer = color_msg(screen, "Background color of buttons. (Default is IMGV_LOGO_BLUE)")
                (gl.BUTTON_BGCOLOR, cfg_str) = color_change(answer, gl.BUTTON_BGCOLOR)
                color_clean(screen, "BUTTON_BGCOLOR", cfg_str)
            if button_hover_color_rect.collidepoint(cursor):
                answer = color_msg(screen, "Color of buttons when your mouse cursor hovers over them. (Default is SKY_BLUE)")
                (gl.BUTTON_HOVERCOLOR, cfg_str) = color_change(answer, gl.BUTTON_HOVERCOLOR)
                color_clean(screen, "BUTTON_HOVERCOLOR", cfg_str)
            if button_textcolor_rect.collidepoint(cursor):
                answer = color_msg(screen, "Color of text on buttons. (Default is BLACK)")
                (gl.BUTTON_TEXTCOLOR, cfg_str) = color_change(answer, gl.BUTTON_TEXTCOLOR)
                color_clean(screen, "BUTTON_TEXTCOLOR", cfg_str)
            if button_texthovercolor_rect.collidepoint(cursor):
                answer = color_msg(screen, "Color of text on buttons when mouse cursor hovers over them. (Default is BLACK)")
                (gl.BUTTON_TEXTHOVERCOLOR, cfg_str) = color_change(answer, gl.BUTTON_TEXTHOVERCOLOR)
                color_clean(screen, "BUTTON_TEXTHOVERCOLOR", cfg_str)
            if close_button_color_rect.collidepoint(cursor):
                answer = color_msg(screen, "Color of the close/cancel buttons, the 'X' in the top/right corner of the screen. (Default is SADDLE_BROWN)")
                (gl.CLOSE_BUTTONCOLOR, cfg_str) = color_change(answer, gl.CLOSE_BUTTONCOLOR)
                color_clean(screen, "CLOSE_BUTTONCOLOR", cfg_str)
            if winsize_rect.collidepoint(cursor):
                paint_screen(gl.BLACK)
                show_message("Default Window Size or resolution of imgv (in the format: width x height. Default is: 800x600)", (15, 80), 13, ("bold", "transparent"))
                answer = ask(screen, "New window size")
                if answer != None:
                    x = None
                    if answer.find('x') != -1:
                        x = 'x'
                    elif answer.find('X') != -1:
                        x = 'X'
                    if x != None:
                        gl.IMGV_RESOLUTION = int(answer.split(x)[0]), int(answer.split(x)[1])
                    write_cfg("IMGV_WINDOW_SIZE", answer)
                clean_prefs(screen)
            if thumbsize_rect.collidepoint(cursor):
                paint_screen(gl.BLACK)
                show_message("The size you set will be used as the size of the thumbnail border/box, not the images themselves.", (15, 60), 13, ("bold", "transparent"))
                show_message("Values are in the format: width x height. Example: 100x100", (15, 100), 13, ("transparent"))
                show_message("To have imgv choose the best thumb size for a given default screen size use the default value of: AUTO", (15, 120), 13, ("transparent"))
                answer = ask(screen, "New thumbnail size")
                if answer != None:
                    gl.THUMB_VAL = answer
                    write_cfg("THUMB_SIZE", answer)
                clean_prefs(screen)
            if transeffect_rect.collidepoint(cursor):
                paint_screen(gl.BLACK)
                show_message("Valid values: NONE (default), MELT, FADE_IN", (15, 60), 13, ("bold", "transparent"))
                show_message("You can also apply multiple effects by separating them with |'s such as: MELT|FADE_IN", (15, 90), 13, ("transparent"))
                answer = ask(screen, "Transitional effect")
                if answer != None:
                    gl.TRANS_FX = answer
                    write_cfg("TRANSITIONAL_EFFECT", answer)
                clean_prefs(screen)
            if startdir_rect.collidepoint(cursor):
                paint_screen(gl.BLACK)
                show_message("Set this to an already existing directory that you want imgv to initially load images from.", (15, 60), 13, ("bold", "transparent"))
                if platform == 'win32':
                    show_message("For example: C:\photos\\", (15, 80), 13, ("transparent"))
                else:
                     show_message("For example: /home/photos/", (15, 80), 13, ("transparent"))
                show_message("Set to / (default) to have imgv load images from the root directory.", (15, 110), 13, ("transparent"))
                show_message("You an also specify a single image name.", (15, 150), 13, ("transparent"))
                show_message("For example: C:\pics\dog.jpg", (15, 170), 13, ("transparent"))
                answer = ask(screen, "Start directory")
                if answer != None:
                    gl.START_DIRECTORY_VAL = answer
                    write_cfg("START_DIRECTORY", answer)
                clean_prefs(screen)
            if external_editor_rect.collidepoint(cursor):
                paint_screen(gl.BLACK)
                show_message("Path to an external image editing application (You must put quotes around the value)", (15, 60), 13, ("bold", "transparent"))
                show_message("For example, if you want to use Adobe Photoshop with imgv you might put:", (15, 80), 13, ("transparent"))
                show_message("\"C:\\Program Files\\Adobe\\Photoshop CS2\\Photoshop.exe\"", (15, 100), 13, ("transparent"))
                show_message("Set to \"None\" (default) if you don't need this feature.", (15, 130), 13, ("transparent"))
                answer = ask(screen, "External editor")
                if answer != None:
                    gl.EXTERNAL_EDITOR = answer
                    write_cfg("EXTERNAL_EDITOR", answer)
                clean_prefs(screen)
            if passwd_rect.collidepoint(cursor):
                paint_screen(gl.BLACK)
                show_message("Set this to the password you want to be used in the 'Hide Image' feature.", (15, 60), 13, ("bold", "transparent"))
                show_message("It's case sensitive and don't use quotes.", (15, 90), 13, ("transparent"))
                show_message("Set to None (default) if you don't want to be prompted for a password.", (15, 110), 13, ("transparent"))
                answer = ask(screen, "New password")
                if answer != None:
                    gl.CORRECT_PASSWORD = answer
                    write_cfg("PASSWORD", answer)
                clean_prefs(screen)
            (transparent_text_crect, transparent_text_ucrect, main_statusbar_crect, main_statusbar_ucrect, four_statusbars_crect, four_statusbars_ucrect, exif_statusbar_crect, exif_statusbar_ucrect, thumb_statusbars_crect, thumb_statusbars_ucrect, image_border_crect, image_border_ucrect, fit_image_rect, dirnum_colors_crect, dirnum_colors_ucrect, screen_bgcolor_rect, lock_zoom_crect, lock_zoom_ucrect, wrap_crect, wrap_ucrect, wrap_slideshow_crect, wrap_slideshow_ucrect, start_fullscreen_crect, start_fullscreen_ucrect, thumb_border_crect, thumb_border_ucrect, show_movies_crect, show_movies_ucrect, font_color_rect, font_bgcolor_rect, img_border_color_rect, thumb_border_color_rect, thumb_bgcolor_rect, four_divcolor_rect, button_bgcolor_rect, button_hover_color_rect, button_textcolor_rect, button_texthovercolor_rect, close_button_color_rect, gamma_rect, winsize_rect, thumbsize_rect, transeffect_rect, startdir_rect, external_editor_rect, fit_slideshow_rect, passwd_rect) = pref_options(screen)
        gl.NOT_HOVERED = 1