""" 階層構造商品マスターデモアプリケーション 入れ子構造とPDF巨大カッコ表示に対応 """ import flet as ft import signal import sys import logging from components.hierarchical_product_master import create_hierarchical_product_master class HierarchicalProductMasterApp: """階層構造商品マスターデモアプリケーション""" def __init__(self, page: ft.Page): self.page = page # ログ設定 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('app.log'), logging.StreamHandler() ] ) # シグナルハンドラ設定 def signal_handler(signum, frame): print(f"\nシグナル {signum} を受信しました") print("✅ 正常終了処理完了") logging.info("アプリケーション正常終了") sys.exit(0) self.signal_handler = signal_handler signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGTERM, signal_handler) # ウィンドウ設定 page.title = "階層構造商品マスター" page.window_width = 1400 page.window_height = 800 page.theme_mode = ft.ThemeMode.LIGHT # ウィンドウクローズイベント page.on_window_close = lambda _: signal_handler(0, None) # 階層商品マスター作成 self.product_master = create_hierarchical_product_master(page) # ヘッダー self.header = ft.Container( content=ft.Column([ ft.Row([ ft.Icon( ft.Icons.INVENTORY_2, size=40, color=ft.Colors.BLUE_900 ), ft.Column([ ft.Text( "階層構造商品マスター", size=28, weight=ft.FontWeight.BOLD, color=ft.Colors.BLUE_900 ), ft.Text( "入れ子構造とPDF巨大カッコ表示に対応した商品管理システム", size=14, color=ft.Colors.GREY_600 ) ], spacing=5) ], alignment=ft.MainAxisAlignment.START), ft.Divider(height=2, thickness=2) ], spacing=10), padding=20, bgcolor=ft.Colors.BLUE_50, border_radius=10, margin=ft.Margin.only(bottom=20) ) # 操作説明 self.instructions = ft.Container( content=ft.Column([ ft.Text( "操作方法", size=16, weight=ft.FontWeight.BOLD, color=ft.Colors.BLUE_900 ), ft.Text("• 左側のツリーから商品を選択して編集", size=12), ft.Text("• カテゴリの展開/折りたたみ:▶/▼アイコンをクリック", size=12), ft.Text("• 新規追加:選択中のノードの子として追加", size=12), ft.Text("• PDFプレビュー:階層構造をキャラクターベースで表示", size=12), ft.Text("• 巨大カッコ:PDF出力時に階層を視覚的に表現", size=12), ], spacing=5), padding=15, bgcolor=ft.Colors.GREY_50, border_radius=10, margin=ft.Margin.only(bottom=20) ) # メインコンテナ self.main_container = ft.Column([ self.header, self.instructions, self.product_master.build() ], expand=True, spacing=20) # ページに追加 page.add( ft.Container( content=self.main_container, padding=20, bgcolor=ft.Colors.GREY_100, expand=True ) ) logging.info("階層構造商品マスターアプリ起動完了") print("🚀 階層構造商品マスターアプリ起動完了") def main(page: ft.Page): """メイン関数""" try: app = HierarchicalProductMasterApp(page) except Exception as e: logging.error(f"アプリケーション起動エラー: {e}") if __name__ == "__main__": ft.run(main)