Vig\RddlZddlZddlmZddlmZddlmZmZm Z m Z m Z m Z m Z mZmZmZddlmZmZmZddlmZmZmZddlmZddlmZmZmZdd lm Z dd l!m"Z"dd l#m$Z$dd l%m&Z&dd l'm(Z)ddl*m+Z,ddl-m.Z.ddl/m0Z0ddl1m+Z2ddl3m4Z4ddl5m6Z6ddl7m+Z8GddeZ9dS)N)Path)partial) QMainWindowQWidgetQStackedWidgetQLabel QMessageBox QVBoxLayout QHBoxLayout QPushButtonQFrame QApplication)QtQTimer QThreadPool)QActionQFont QCloseEvent)logger)is_debug get_app_rootget_sync_config)LoadingPageWidget)NavigationPage)Worker)DashboardTipologiePage) FilterPanel)FullScreenTablePage)DashboardEmPivotPage)FilterPanelEmPivot)DashboardDirittiPage)FilterPanelDirittic eZdZfdZdZdefdZdZdZdZ dZ d Z d(d e d e de de fdZdZdZdZdZd)d e defdZde d e de fdZde fdZde fdZdefdZdZdZd*d!e d"e d#efd$Zd e fd%Zd e d e de d&efd'ZxZ S)+ MainWindowc nttdddtddtjdt ddtjdtddtjdtd d td d td d d |_ ||_|jd i|_i|_i|_i|_d |_d|_t-|_d|_t3jd|jd|dS)Ncoreu 🏠 Home)classtypetitle containerzDashboard Tipologie)r'r(r) async_loaderzDashboard Pivot EmissionizDashboard Diritti sub-container)r'r()navigation_pagedash_tipologie dash_em_pivot dash_dirittifullscreen_tipologiefullscreen_pivotfullscreen_dirittithemerz!Multithreading con un massimo di z thread.)super__init__rrFilterPanelTipologieget_filter_datarr r!r"FullScreenTipologieFullScreenPivotFullScreenDiritti page_registryconfiggetr4 open_pages tab_widgets tab_buttons page_countercurrent_page_widgetr threadpoolmediatrack_processrinfomaxThreadCountinit_ui)selfr= __class__s (C:\PYTHON\MyICR_Suite\app\main_window.pyr6zMainWindow.__init__"s> *8R]^^/Od 4 D .{Mh 2 B .#, 2 B  0CO$]$]+:O U U->"Y"Y%  * [__Wb11 #' %--"& b8V8V8X8Xbbbccc cddlm}|}|rd|nd}tr|dn|}|||dd|||_|jd| t}| |t|}| dddd|dt|_|jj|jt|_t+|j|_|j d d d d |jd |jt0jj|jd ||jd ||j|ddddS)Nr) get_versionz MyICR Suite vz MyICR Suitez - Developmenti@iz padding: 3px;z9background-color: #E1E1E1; border-top: 1px solid #C6C6C6;)stretchr-TF) is_singleton is_closable)app.config_loaderrNrsetWindowTitleresize_create_main_menu_bar statusBar status_bar setStyleSheet_add_environment_indicatorrsetCentralWidgetr setContentsMargins setSpacingrcentral_stacked_widgetcurrentChangedconnect_on_current_page_changedtab_bar_widgetr tab_bar_layout setAlignmentr AlignmentFlag AlignLeft addWidget open_page)rIrN_ver base_title window_titlecentral_widget main_layouts rKrHzMainWindow.init_uiFs%111111{}}/3F+T+++ 8@ R*4444  L))) D$ ""$$$..** %%o666 '')))  n---!.11 &&q!Q222q!!!&4&6&6# #2::4;XYYY%ii)$*=>> ..q!Q::: &&q))) (()9)CDDD ))*efffd91EEEd1222 (tOOOOOrLeventc|j}|s|dS|d}|j|o6t |j|tddk}t |j dkrD|rBtj d|| || dStj|ddtjjtjjztjj}|tjjkrtj d|j|jtj d |j |jd tj d nB#t.j$r0tjd |jYnwxYw|dStj d| dS)Npage_idxrrQz5Evento di chiusura intercettato. Chiusura della tab: zConferma Uscitaz,Sei sicuro di voler chiudere l'applicazione?z-Chiusura applicazione confermata dall'utente.z#Terminazione processo MediaTrack...)timeoutz+Processo MediaTrack terminato correttamentez.Processo MediaTrack non risponde, forzatura...z,Chiusura applicazione annullata dall'utente.)r` currentWidgetacceptpropertyr@r>len findChildrenr r?rrF close_pageignorer questionStandardButtonYesNorEpoll terminatewait subprocessTimeoutExpiredwarningkill)rIrpcurrent_widgetrrrTreplys rK closeEventzMainWindow.closeEventms24BBDD  LLNNN F )))44&**733yDr[addMenur triggeredrbclose addActionshow_about_dialog) rImenu_barrprimary_hover_colorr file_menu exit_action help_menu about_actions rKrXz MainWindow._create_main_menu_barsD<<>>  BB "jnn_iHHZ^^L)<<  #0  #  $7      .$$W-- fd++ %%dj111K((($$X.. 3T:: &&t'=>>>L)))))rLct}|dds@td}|d|j|dSdS)u:Mostra SYNC OFF nella status bar se push_enabled è False. push_enabledTz SYNC OFF a# QLabel { background-color: #FF8C00; color: white; padding: 2px 8px; border-radius: 3px; font-weight: bold; font-size: 11px; } N)rr>rr[rZaddPermanentWidget)rI sync_config sync_labels rKr\z%MainWindow._add_environment_indicatorsu%'' ~t44 ; --J  $ $ &    O . .z : : : : : ; ;rLc2tj|dddS)NzInformazioni su MyICR SuitezMyICR Suite
Versione 1.0.0 (build fittizia)

Applicazione desktop per l'analisi dati.
Sviluppata internamente.)r aboutrIs rKrzMainWindow.show_about_dialogs+$75 6 6 6 6 6rLcd |jL|j,tjdt j|dddSd|_t jtj j | ddttjdz d z }|d z }|d z }|sEtjd |t jt j|d d|dS|rtjdtjd|t)jdz dz dz }|r|}ngtt*jj}|dz }|s0tt*j}tjd|tjd|tjd|t*jdkrMd}t1j|t5|gt5||t0jt0jd nIt1j|t5|gt5|t0jt0jd |_tjd jddl} fd} || d} | t j| d dd!"dS#t@$rP} tjd#| d$t jt j!|d%d&| Yd} ~ dSd} ~ wwxYw)'z(Lancia MediaTrack come modulo integrato.NuMediaTrack già in esecuzioneuMediaTrack già apertouYMediaTrack è già in esecuzione. Controlla le finestre aperte o attendi che si carichi.zAvvio MediaTrack in corso...F) is_temporarymodules mediatrackzrun.pyzrequirements.txtzScript MediaTrack non trovato: zMediaTrack non disponibileuCL'applicazione MediaTrack non è stata trovata. Percorso cercato: z!Verifico dipendenze MediaTrack...zLancio MediaTrack da: venvScriptsz python.exez,python.exe non trovato, uso sys.executable: zPython executable: zWorking directory: win32iT)cwd creationflagsstdoutstderrtext)rrrrz%Processo MediaTrack avviato con PID: rc jD]?}|r)tjd|@dS#t$rYdSwxYw)Nz[MediaTrack stderr] )rstriprerror Exception)lineprocesss rKmonitor_stderrz4MainWindow.launch_mediatrack..monitor_stderr0s~ 'PP::<<P"L)N )N)NOOOPP!DDsAA AA)targetdaemonzMediaTrack avviatoi)r duration_msz(Errore durante il lancio di MediaTrack: exc_infoErrorez)Impossibile avviare MediaTrack. Errore: )"rErrrFr informationrsetOverrideCursorr CursorShape WaitCursorshow_status_messager__file__resolveparentexistsrrestoreOverrideCursorrrsys executableplatformrPopenstrPIPEpid threadingThreadstartrcritical) rImediatrack_path run_scriptrequirements_file venv_python python_exe python_dirCREATE_NO_WINDOWrr stderr_threaders @rKlaunch_mediatrackzMainWindow.launch_mediatracks&q &2*//119K ?@@@+0Q F/3D+  *2>+D E E E  $ $%CRW $ X X X#8nn4466= ILXO(83J /2D D $$&&  KzKKLLL2444#06)366 !'')) A ?@@@ K=== > > >'../&89D|SK!!## `( !#.118 ',6 !((**`!%cn!5!5JN#^R\#^#^___ K:j:: ; ; ; K?o?? @ @ @|w&&$. $*Z1O,,"2%?%?%*Z1O,,%?%? '.D # KM MM N N N         &,,N4,PPM    ! ! !  . 0 0 0  $ $%9Z^ $ _ _ _ _ _    LGAGGRV W W W W  . 0 0 0  AaAA           s'A MCM$H/M N/AN**N/c*ddlm}||dS)z(Lancia Linker come QMainWindow floating.r)launch_linker_window)rN)app.modules.linker.launcherr)rIrs rK launch_linkerzMainWindow.launch_linkerIs.DDDDDDD))))))rLNTpage_id_prefixr)rSrTc|dkr|dS|dkr|dS|}|r ||jvr||dS|s|xjdz c_|d|j}|j|}|s3tjd|tj |dd|ddS|p;|d | dd  }|d r| ||||dS|||} | r|| |||dSdS) NrlinkerrQ_z/Tentativo di aprire una pagina non registrata: uFunzionalità non disponibilez La pagina 'u0' non è stata ancora implementata o registrata.r) r+)rrr? focus_pagerBr<r>rrr rreplacer)_open_async_page_create_page_instance_add_page_to_tabs) rIrr)rSrTdatarr page_info display_title page_widgets rKrjzMainWindow.open_pageNs \ ) )  " " $ $ $ F X % %    F   Gt66 OOG $ $ $ F >    "  '==$*;==G&**>::   L[>[[ \ \ \  &EHVUcHVHVHV W W W Faw8N8NsTW8X8X8^8^8`8`!a!a == ( ( Y  ! !'>=+ V V V V V44^TJJK Y&&{G]KXXXXX Y YrLctd}|d|j}|d}|sdddfdSt |}|jjfd|jj fdj |dS) NzAggiornamento in corso...)rz (loading...)r+z!Configurazione async loader per 'z ' mancante.c4|SN)_on_async_page_loaded)drrrrIr)s rKz-MainWindow._open_async_page..vs0J0J1gWegl0m0mrLc0|Sr)_on_async_page_error)rrrrIs rKrz-MainWindow._open_async_page..wst/H/HG/T/TrL) rrr<r>rrsignalsresultrbrrDr) rIrrrr)rT loading_pager loader_funcworkers ```` rKrzMainWindow._open_async_pagems(.IJJJ  |W6M6M6M{[[[&**>:: mmN33    % %t-lQ_-l-l-l&mov w w w F $$%%&m&m&m&m&m&m&mnnn$$%T%T%T%T%TUUU f%%%%%rLctjd|d|j|d}|r.|j|||||}|rl|j |}|r| ||j |||j|<| |dS| |dS)NzDati caricati per z, creo pagina.)rrFr?popr` removeWidget deleteLaterrrAr>setTextrirr{)rIrrrrr)loading_widgetr tab_buttons rKrz MainWindow._on_async_page_loadedzs @@@@AAA,,Wd;;  )  ' 4 4^ D D D  & & ( ( (00FF  %)--g66J *""5)))  ' 1 1+ > > >'2DOG $ OOG $ $ $ $ $ OOG $ $ $ $ $rLct|dkr|dnd}tjd|d|||t j|dd|dS)NrQzErrore sconosciutozErrore caricamento pagina : zErrore Caricamentoz*Impossibile caricare i dati necessari.\n\n)ryrrr{r r)rI error_tuplerr error_msgs rKrzMainWindow._on_async_page_errors{&)+&6&6&:&:KNN@T  H'HHYHHIII    T#79shq9s9stttttrLcz|d|t|dr|j|j|j|||j|<|||||j |j || |dS)Nrrstatus_updated) setPropertyhasattrrrbrr`rir?_create_tab_button_widgetrer@r)rIrrrr)rTs rKrzMainWindow._add_page_to_tabss 7333 ; 0 1 1 I  & . .t/G H H H #--k:::#.  &&w{CCC %%d&6w&?@@@      rLreturnc Zj|}|d} |ddkr |}nj|ddkr||}nP|ddkr:|d|vrtjd |d dS||dj }n |}t |d r|jjt |d r|j fdt|tr|dn|d|}|r| ||S#t$rC}tjd|d|dtjdd|d|Yd}~dSd}~wwxYw)Nr'r(r&) main_windowr*)r  filter_datar, dataframezLa pagina sub-container 'z!' richiede un dataframe nei dati.)r rr4open_new_tab_requestedsection_selectedc2|dS)NT)rS)rj)rrIs rKrz2MainWindow._create_page_instance..sdnnS_cn>d>drLr)z&Errore durante l'istanza della pagina rTrzErrore Creazione PaginazImpossibile creare la pagina 'z'.\n\n)r<r>rrr4r rrbon_open_new_tab_requestedr isinstancedictrVrr r)rIrrr PageClassinstancerrs` rKrz MainWindow._create_page_instances&**>:: g&   F**$96666"k11$94HHH6"o55<;d#:#:L!n^!n!n!nooo4$9D.sT__W-E-ErLrsc.Sr)r{rsrKrz6MainWindow._create_tab_button_widget..s1I1IrLzRQPushButton { border: none; font-weight: bold; } QPushButton:hover { color: red; }a' QPushButton { text-align: center; padding: 6px 10px; border: 1px solid #C6C6C6; border-top: none; background-color: #E1E1E1; } QPushButton:hover { background-color: #CACACA; } QPushButton:checked { background-color: #FFFFFF; border-color: #C6C6C6; } )rr r^r_r setCheckablesetAutoExclusiveclickedrbr@rAri setObjectName setFixedSizer[)rIrrr)rT tab_widget tab_layout title_button close_buttons`` rKr z$MainWindow._create_tab_button_widgetsYY  ,, %%aAq111a   "5)) !!$'''%%d+++$$%E%E%E%E%EFFF$.!$0!\***  }&s++L  & &s + + +  % %b" - - -  ( ()I)I)I)I)I J J J   . . .  & &'{ | | |""$      rLc||jvr%|j|j|||jvr"|j|ddSdS)NT)r?r`setCurrentWidgetrA setChecked)rIrrs rKrzMainWindow.focus_pagese do % %  ' 8 89Q R R R d& & &  W % 0 0 6 6 6 6 6 ' &rLc<||jvrdStjd||j|d}|j|d}|j|d|r.|j|||r.|j |||jrA| t|j ddSdS)NzChiusura pagina: ) r?rrFrr@rAr`rrrerlistkeys)rIrrrr"s rKr{zMainWindow.close_pages $/ ) )66 111222o))'488 %))'488  Wd+++  &  ' 4 4[ A A A  # # % % %  %   , ,Z 8 8 8  " " $ $ $ ? > OOD!5!5!7!788< = = = = = > >rLindexc|j|}|jr.t|jdr|j|r$t|dr|||_dS)Npage_deactivatedpage_activated)r`widgetrCr r/r0)rIr- new_widgets rKrcz#MainWindow._on_current_page_changeds077>>  # 80HJ\(](] 8  $ 5 5 7 7 7  ('*.>?? (  % % ' ' '#-   rLcdSrrs rK show_toolbarzMainWindow.show_toolbar rLcdSrr4rs rK hide_toolbarzMainWindow.hide_toolbarr6rLFmessagerrc||r|j||dS|j|dSr)rY clearMessagerZ showMessage)rIr:rrs rKrzMainWindow.show_status_messages` %%'''  1 O ' ' = = = = = O ' ' 0 0 0 0 0rLcNtd|dtjj}|S)Nz

z$

Contenuto in sviluppo...

) alignment)rrrg AlignCenter)rIr)labels rKcreate_placeholder_widgetz$MainWindow.create_placeholder_widgets,IeIIIUWUeUqrrr rLrcrtjd|d|du||||d|dS)Nz(Ricevuta richiesta di apertura tab per 'z ' con dati: T)rr)rSrTr)rrFrj)rIrr)rSrs rKrz$MainWindow.on_open_new_tab_requesteds^ m~mm[_gk[kmmnnn )%      rL)NTTNr)Fr9)!__name__ __module__ __qualname__r6rHrrrXr\rrrrboolrjrrrrrrr rr{intrcr5r8rrBrr __classcell__)rJs@rKr$r$ sq"""""H%P%P%PN% %%%%N%*%*%*N;;;"666sssj*** YYYCYdYhlYYYY> & & &%%%"uuu !!!Cw8  S t    27#7777 ># > > > >.c....      1131d1Y\1111s  C W[ cg        rLr$):rrpathlibr functoolsrPyQt6.QtWidgetsrrrrr r r r r r PyQt6.QtCorerrr PyQt6.QtGuirrrlogururrUrrrapp.widgets.loading_pagerapp.features.navigationrapp.utils.workerrapp.features.dash_tipologier/app.features.dash_tipologie.filter_panel_widgetrr7+app.features.dash_tipologie.fullscreen_pagerr9app.features.dash_em_pivotr.app.features.dash_em_pivot.filter_panel_widgetr *app.features.dash_em_pivot.fullscreen_pager:app.features.dash_dirittir!-app.features.dash_diritti.filter_panel_widgetr")app.features.dash_diritti.fullscreen_pager;r$r4rLrKr\s< 10000000003333333333EEEEEEEEEE666666222222######>>>>>>______bbbbbb;;;;;;MMMMMM]]]]]]::::::LLLLLL^^^^^^f f f f f f f f f f rL