Resell1/modules/app_manager.py

107 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# modules/app_manager.py
import flet as ft
import logging
from modules import logger, setting_manager, db_manager, project_info, login_page, market_page, product_page, forbidden_page, category_page, app_state
class AppManager:
def __init__(self, page: ft.Page):
self.page = page
self.logger = logger.get_logger()
self.project_info = project_info.get_project_info()
# 창 제목은 project_info의 window_title 사용
self.page.title = self.project_info.get("window_title", "Modern Market Manager")
self.page.theme_mode = ft.ThemeMode.LIGHT
# 앱 상태 관리 객체
self.state = app_state.AppState()
# 초기 관리자 객체 생성
self.settings_mgr = setting_manager.SettingsManager(self.project_info)
self.db_mgr = db_manager.DBManager(self.logger)
def start(self):
self.logger.debug("AppManager.start() - 시작, 로그인 페이지 표시")
from modules.login_page import LoginPage
login_pg = LoginPage(
self.page,
self.logger,
self.settings_mgr,
self.db_mgr,
on_login_success=self.on_login_success,
project_info=self.project_info
)
login_pg.show()
def on_login_success(self):
self.logger.debug("AppManager.on_login_success() 호출됨")
# 예를 들어, 로그인 성공 시 AppState에 사용자 정보를 저장할 수 있음.
# 전환 후 메인 UI (탭 + 로그 영역) 표시
self.show_main_ui()
def show_main_ui(self):
self.logger.debug("AppManager.show_main_ui() 호출됨")
self.page.controls.clear()
# 각 페이지 인스턴스 생성
from modules.market_page import MarketPage
from modules.product_page import ProductPage
from modules.forbidden_page import ForbiddenPage
from modules.category_page import CategoryPage
market_pg = MarketPage(self.page, self.logger, self.db_mgr)
product_pg = ProductPage(self.page, self.logger)
forbidden_pg = ForbiddenPage(self.page, self.logger)
category_pg = CategoryPage(self.page, self.logger)
# "팔린상품 가져오기" 버튼 클릭 시 호출될 콜백 (상품 페이지 업데이트 및 탭 전환)
def on_products_fetched(products):
self.logger.debug(f"AppManager.on_products_fetched() 호출됨, 상품 수: {len(products)}")
product_pg.set_products(products)
tabs.selected_index = 1 # 두 번째 탭으로 전환 (상품 페이지)
self.page.update()
market_pg.on_products_fetched_callback = on_products_fetched
# 탭 컨트롤 구성
tabs = ft.Tabs(
selected_index=0,
tabs=[
ft.Tab(text="마켓", content=market_pg.get_content()),
ft.Tab(text="상품", content=product_pg.get_content()),
ft.Tab(text="금지어 관리", content=forbidden_pg.get_content()),
ft.Tab(text="카테고리 관리", content=category_pg.get_content()),
],
on_change=self.on_tab_change
)
# 로그 영역: 스크롤 가능한 컨테이너에 Text 컨트롤 배치
log_text = ft.Text("", size=12, color="black")
log_container = ft.Container(
content=log_text,
height=150,
scroll=ft.ScrollMode.AUTO,
border=ft.border.all(1, "lightgray"),
padding=10,
bgcolor="white",
)
main_layout = ft.Column([tabs, log_container], expand=True, spacing=10)
# 창 크기 및 중앙 배치 (1400×800)
self.page.window.width = 1400
self.page.window.height = 800
self.page.window.center()
self.page.add(main_layout)
self.page.update()
# Logger의 GUI 콜백 설정하여 로그가 log_text에 출력되도록 함
def gui_log_callback(message: str):
log_text.value += message + "\n"
self.page.update()
self.logger.gui_callback = gui_log_callback
def on_tab_change(self, e: ft.ControlEvent):
self.logger.debug(f"탭 전환됨, 인덱스: {e.control.selected_index}")
self.page.update()