extracted the ItemSelection from athmos and created a parent class
This commit is contained in:
40
athmos.py
40
athmos.py
@ -1,50 +1,30 @@
|
||||
from .fonts import *
|
||||
from .colors import *
|
||||
from .item_selection import ItemSelection
|
||||
import pygame
|
||||
import math
|
||||
|
||||
MAX_COUNT = 9
|
||||
|
||||
class Athmos:
|
||||
class Athmos(ItemSelection):
|
||||
|
||||
def __init__(self, screen):
|
||||
self.index = 0
|
||||
self.filenames = []
|
||||
self.screen = screen
|
||||
self.show_list = True
|
||||
self.surface = pygame.Surface((0,0), pygame.SRCALPHA)
|
||||
self.max_name_width = 350
|
||||
super().__init__(self.surface, self.max_name_width, MAX_COUNT)
|
||||
|
||||
def set_filenames(self,filenames):
|
||||
self.filenames = filenames
|
||||
self.surface = pygame.Surface(
|
||||
(self.screen.get_width()*2/3, self.get_display_count()*40),
|
||||
pygame.SRCALPHA)
|
||||
super().set_items(filenames)
|
||||
|
||||
def get_display_count(self):
|
||||
return min(MAX_COUNT, len(self.filenames))
|
||||
def get_name_by_index(self, index):
|
||||
return self.items[index]
|
||||
|
||||
def get_count(self):
|
||||
return len(self.items)
|
||||
|
||||
def update(self):
|
||||
if self.show_list:
|
||||
self.surface.fill("black")
|
||||
for i in range(self.get_display_count()):
|
||||
text = self.filenames[(i+self.index-math.floor(self.get_display_count()/2))%len(self.filenames)]
|
||||
if len(text)> math.floor(self.max_name_width/10):
|
||||
text = text[0:math.floor(self.max_name_width/10)-2]
|
||||
text += '...'
|
||||
#text = self.filenames[i]
|
||||
if i == math.floor(self.get_display_count()/2):
|
||||
#if i == self.index:
|
||||
text_surface = font_helvetica16.render(text, False, color_primary_light)
|
||||
else:
|
||||
text_surface = font_helvetica16.render(text, False, color_primary)
|
||||
opacity = -20 + math.floor((i+1) * 2 * 255 / MAX_COUNT
|
||||
if i < MAX_COUNT/2
|
||||
else (MAX_COUNT-i) * 2 * 255 / MAX_COUNT)
|
||||
text_surface.set_alpha(opacity)
|
||||
#if text_surface.get_width() > self.max_name_width: self.max_name_width = text_surface.get_width()
|
||||
self.surface.blit(text_surface, ((10, self.surface.get_height()/self.get_display_count()*i)))
|
||||
pygame.draw.rect(self.surface, color_primary_light, (0, self.surface.get_height()/2-25, self.max_name_width+20, 40), 2)
|
||||
|
||||
super().update()
|
||||
self.screen.blit(self.surface, ((self.screen.get_width()-self.max_name_width)/2,
|
||||
(self.screen.get_height() - self.surface.get_height())/2))
|
||||
44
item_selection.py
Normal file
44
item_selection.py
Normal file
@ -0,0 +1,44 @@
|
||||
from .fonts import *
|
||||
from .colors import *
|
||||
import pygame
|
||||
import math
|
||||
|
||||
class ItemSelection:
|
||||
|
||||
def __init__(self, surface, max_item_width, max_count):
|
||||
self.index = 0
|
||||
self.items = []
|
||||
self.surface = surface
|
||||
self.max_item_width = max_item_width
|
||||
self.max_count = max_count
|
||||
|
||||
def set_items(self, items):
|
||||
self.items = items
|
||||
self.surface = pygame.Surface(
|
||||
(self.max_item_width+50, self.get_display_count()*40),
|
||||
pygame.SRCALPHA)
|
||||
|
||||
def get_display_count(self):
|
||||
return min(self.max_count, len(self.items))
|
||||
|
||||
def update(self):
|
||||
self.surface.fill("black")
|
||||
for i in range(self.get_display_count()):
|
||||
text = self.items[(i+self.index-math.floor(self.get_display_count()/2))%len(self.items)]
|
||||
if len(text)> math.floor(self.max_item_width/10):
|
||||
text = text[0:math.floor(self.max_item_width/10)-2]
|
||||
text += '...'
|
||||
#text = self.items[i]
|
||||
if i == math.floor(self.get_display_count()/2):
|
||||
#if i == self.index:
|
||||
text_surface = font_helvetica16.render(text, False, color_primary_light)
|
||||
else:
|
||||
text_surface = font_helvetica16.render(text, False, color_primary)
|
||||
opacity = -20 + math.floor((i+1) * 2 * 255 / self.max_count
|
||||
if i < self.max_count/2
|
||||
else (self.max_count-i) * 2 * 255 / self.max_count)
|
||||
text_surface.set_alpha(opacity)
|
||||
#if text_surface.get_width() > self.max_item_width: self.max_item_width = text_surface.get_width()
|
||||
self.surface.blit(text_surface, ((10, self.surface.get_height()/self.get_display_count()*i)))
|
||||
pygame.draw.rect(self.surface, color_primary_light, (0, self.surface.get_height()/2-25, self.max_item_width+20, 40), 2)
|
||||
|
||||
7
main.py
7
main.py
@ -116,7 +116,8 @@ class GuiMain:
|
||||
self.athmos.index = index
|
||||
|
||||
def set_selected_athmo(self):
|
||||
self.selected_athmo_srf = font_helvetica16.render(self.athmos.filenames[self.athmos.index], False, color_primary)
|
||||
self.selected_athmo_srf = font_helvetica16.render(
|
||||
self.athmos.get_name_by_index(self.athmos.index), False, color_primary)
|
||||
|
||||
def set_athmo_filenames(self, filenames):
|
||||
self.athmos.set_filenames(filenames)
|
||||
@ -185,11 +186,11 @@ class GuiMain:
|
||||
if event.key == pygame.K_UP:
|
||||
if self.athmos.show_list:
|
||||
self.athmos.index -= 1
|
||||
self.athmos.index %= len(self.athmos.filenames)
|
||||
self.athmos.index %= self.athmos.get_count()
|
||||
if event.key == pygame.K_DOWN:
|
||||
if self.athmos.show_list:
|
||||
self.athmos.index += 1
|
||||
self.athmos.index %= len(self.athmos.filenames)
|
||||
self.athmos.index %= self.athmos.get_count()
|
||||
elif event.type == pygame.QUIT:
|
||||
self.running = False
|
||||
elif event.type == pygame.MOUSEBUTTONDOWN:
|
||||
|
||||
Reference in New Issue
Block a user