pMizdZddlZddlmZmZmZmZmZmZm Z m Z m Z ddl m Z mZddlmZddlmZGddeZy) z;Splitter tab for extracting files from aggregated markdown.N) QWidget QVBoxLayout QHBoxLayoutQLabel QLineEdit QPushButton QProgressBar QFileDialog QMessageBox)QtQCoreApplication)Splitter)ObsidianToolExceptioncFeZdZdZfdZdZdZdZdZde fdZ xZ S) SplitterTabz,Tab for splitting aggregated markdown files.c`t|t|_|j y)zInitialize the splitter tab.N)super__init__rsplitterinit_ui)self __class__s =/mnt/ssd/data/python-lab/ObsidianTool/src/gui/splitter_tab.pyrzSplitterTab.__init__s     c4t|}|jd|jdddd|jt dt }t |_|jjd|jjd|j|jtd|_ |jjd|jjj|j|j|j|j!||jt dt }t |_|j"jd|j"jd |j|j"td|_|j$jd|j$jj|j&|j|j$|j!||j)dtd |_|j*j-d |j*jj|j.|j|j*t1|_|j2j5d |j|j2t d |_|j6j9t:j<j>|j6jAd|j|j6|jCy)zInitialize the user interface.zAggregated File:Tz Select an aggregated .md file...z Browse...dzOutput Directory:zSelect output directory...z Split Files(rReadyz color: #666; font-style: italic;N)"r setSpacingsetContentsMargins addWidgetrrr file_edit setReadOnlysetPlaceholderTextrfile_btnsetMaximumWidthclickedconnect browse_file addLayout output_edit output_btn browse_output addSpacing split_btnsetMinimumHeight split_filesr progress_barsetValue status_label setAlignmentr AlignmentFlag AlignCenter setStyleSheet addStretch)rlayout file_layout output_layouts rrzSplitterTab.init_uisT""!!"b"b1  9:;!m " ""4( ))*LMdnn-#K0  %%c* %%d&6&67dmm,%  :;<# $; $$T* ++,HI 0 01%k2 '', ''(:(:;0' "%]3 ''+ &&t'7'78()N ""1%**+#7O &&r'7'7'C'CD ''(JK**+ rctj|dtjj dd\}}|r7|j j ||jj dyy)z&Open dialog to select aggregated file.zSelect Aggregated File~z$Markdown Files (*.md);;All Files (*)zAggregated file selectedN)r getOpenFileNameospath expanduserr$setTextr6)r file_path_s rr+zSplitterTab.browse_fileSsb"22  $ GG  s # 2  1  NN " "9 -    % %&@ A rctj|dtjj d}|r7|j j ||jj dyy)z'Open dialog to select output directory.zSelect Output Directoryr@zOutput directory selectedN)r getExistingDirectoryrBrCrDr-rEr6)r directorys rr/zSplitterTab.browse_output`s]44  % GG  s #     $ $Y /    % %&A B rc jj}jj}|stjddy|stjddyt j j|rt j|rtjddtjjtjjztjj}|tjjk(ryjdjjdj j#d  fd }j$j'|||}tj(d d |d d|dd|dj j#djdy#t*$rc}tj,ddt/|j j#djjdYd}~yd}~wt0$rc}tj,ddt/|j j#djjdYd}~d}~wwxYw#jdwxYw)zPerform the split operation.zInput Requiredz!Please select an aggregated file.Nz"Please select an output directory.zDirectory Not EmptyzVThe output directory is not empty. Files may be overwritten. Do you want to continue?FrzSplitting files...cjj|jj|t j y)N)r4r5r6rEr processEvents) percentagemessagers rupdate_progressz0SplitterTab.split_files..update_progresss7!!**:6!!))'2 ..0rSuccessz Split complete! Files created: files_createdz Directories created: directories_createdz Output directory: output_dirzSplit completed successfullyErrorzSplit failed: z Split failedzUnexpected ErrorzAn unexpected error occurred: T)r$textr-r warningrBrCexistslistdirquestionStandardButtonYesNoset_ui_enabledr4r5r6rErsplit informationrcriticalstr Exception)raggregated_filerTreplyrPresultes` rr3zSplitterTab.split_filesls..--/%%**,     3      4   77>>* %"**Z*@((%+**..1K1K1N1NN**-- E 22555 E" ""1% !!"67. & 1 ]]((F  # #""("9!:;((./D(E'FG%%+L%9$:<     % %&D E,    %)% *  #CF8,     % %n 5    & &q ) ) *  "3CF8<     % %n 5    & &q ) ) *    %s?(A&G J6)AIJ9 J6AJ1,J91J66J99K enabledc|jj||jj||jj|y)z/Enable or disable UI elements during operation.N)r' setEnabledr.r1)rrhs rr^zSplitterTab.set_ui_enableds8   ) ""7+ !!'*r) __name__ __module__ __qualname____doc__rrr+r/r3boolr^ __classcell__)rs@rrr s06 ;z B CV&p+d+rr)rnrBPyQt6.QtWidgetsrrrrrrr r r PyQt6.QtCorer r core.splitterrcore.exceptionsrrrrrvs3A ."1{+'{+r