diff --git a/src/builder/include/create_gif_page.h b/src/builder/include/create_gif_page.h index 8e407a7d..313b62ed 100644 --- a/src/builder/include/create_gif_page.h +++ b/src/builder/include/create_gif_page.h @@ -23,6 +23,8 @@ #include "batch_output_widget.h" #include "batch_mode_helper.h" #include "resolution_widget.h" +#include "progress_widget.h" +#include "converter_runner.h" #include #include #include @@ -30,10 +32,6 @@ #include #include -class Converter; -class EncodeParameter; -class ProcessParameter; - class CreateGifPage : public BasePage { Q_OBJECT @@ -52,6 +50,7 @@ private slots: void OnInputFileSelected(const QString &filePath); void OnOutputFileSelected(const QString &filePath); void OnConvertClicked(); + void OnConvertFinished(bool success); void OnFpsChanged(int value); private: @@ -76,11 +75,10 @@ private slots: // UI Components - Action Section QPushButton *convertButton; + ProgressWidget *progressWidget; // Backend - EncodeParameter *encodeParameter; - ProcessParameter *processParameter; - Converter *converter; + ConverterRunner *converterRunner; // Batch mode helper BatchModeHelper *batchModeHelper; diff --git a/src/builder/src/create_gif_page.cpp b/src/builder/src/create_gif_page.cpp index 193e5913..34013c7b 100644 --- a/src/builder/src/create_gif_page.cpp +++ b/src/builder/src/create_gif_page.cpp @@ -28,18 +28,11 @@ #include #include -CreateGifPage::CreateGifPage(QWidget *parent) : BasePage(parent) { - encodeParameter = new EncodeParameter(); - processParameter = new ProcessParameter(); - converter = new Converter(processParameter, encodeParameter); - +CreateGifPage::CreateGifPage(QWidget *parent) : BasePage(parent), converterRunner(nullptr) { SetupUI(); } CreateGifPage::~CreateGifPage() { - delete converter; - delete encodeParameter; - delete processParameter; } QString CreateGifPage::GetPageTitle() const { @@ -119,6 +112,20 @@ void CreateGifPage::SetupUI() { connect(convertButton, &QPushButton::clicked, this, &CreateGifPage::OnConvertClicked); mainLayout->addWidget(convertButton); + // Progress Section (placed after button to avoid blank space) + progressWidget = new ProgressWidget(this); + mainLayout->addWidget(progressWidget); + + // Create conversion runner + converterRunner = new ConverterRunner( + progressWidget->GetProgressBar(), progressWidget->GetProgressLabel(), convertButton, + tr("Creating GIF..."), tr("Create GIF / Add to Queue"), + tr("Success"), tr("GIF created successfully!"), + tr("Error"), tr("Failed to create GIF."), + this + ); + connect(converterRunner, &ConverterRunner::ConversionFinished, this, &CreateGifPage::OnConvertFinished); + // Create batch mode helper batchModeHelper = new BatchModeHelper( inputFileSelector, batchOutputWidget, convertButton, @@ -199,37 +206,21 @@ void CreateGifPage::OnConvertClicked() { return; } - // Get encode parameters - EncodeParameter *tempParam = CreateEncodeParameter(); - if (tempParam->get_width() > 0) - encodeParameter->set_width(tempParam->get_width()); - if (tempParam->get_height() > 0) - encodeParameter->set_height(tempParam->get_height()); - delete tempParam; + // Create parameters + EncodeParameter *encodeParam = CreateEncodeParameter(); + ProcessParameter *processParam = new ProcessParameter(); // Get current transcoder from main window QString transcoderName = TranscoderHelper::GetCurrentTranscoderName(this); - // Set transcoder - if (!converter->set_transcoder(transcoderName.toStdString())) { - QMessageBox::critical(this, "Error", "Failed to initialize transcoder."); - return; - } - - // Perform conversion - convertButton->setEnabled(false); - convertButton->setText(tr("Creating GIF...")); - - bool result = converter->convert_format(inputPath.toStdString(), outputPath.toStdString()); - - convertButton->setEnabled(true); - convertButton->setText(tr("Create GIF")); + // Run conversion using ConverterRunner + converterRunner->RunConversion(inputPath, outputPath, encodeParam, processParam, transcoderName); +} - if (result) { - QMessageBox::information(this, "Success", "GIF created successfully!"); - } else { - QMessageBox::critical(this, "Error", "Failed to create GIF."); - } +void CreateGifPage::OnConvertFinished(bool success) { + Q_UNUSED(success); + // ConverterRunner handles all UI updates and message boxes + // This slot is kept for potential custom post-processing } void CreateGifPage::OnFpsChanged(int value) { diff --git a/src/resources/lang_chinese.qm b/src/resources/lang_chinese.qm index 491d9426..8c1004b9 100644 Binary files a/src/resources/lang_chinese.qm and b/src/resources/lang_chinese.qm differ diff --git a/src/resources/lang_chinese.ts b/src/resources/lang_chinese.ts index 0e5837bc..2975ea1e 100644 --- a/src/resources/lang_chinese.ts +++ b/src/resources/lang_chinese.ts @@ -722,14 +722,14 @@ You can install it later by returning to this page. CreateGifPage - - + + Input File 输入文件 - - + + Select a video or image sequence... 选择视频或图片序列... @@ -738,8 +738,8 @@ You can install it later by returning to this page. 浏览... - - + + GIF Settings GIF 设置 @@ -756,80 +756,100 @@ You can install it later by returning to this page. 高度(0=自动): - - + + Output 输出 - - + + Output file path will be generated automatically... 输出文件路径将自动生成... - - + Create GIF 创建 GIF - + Select Video File 选择视频文件 - + Video Files (*.mp4 *.avi *.mkv *.mov *.flv *.wmv *.webm);;All Files (*.*) 视频文件 (*.mp4 *.avi *.mkv *.mov *.flv *.wmv *.webm);;所有文件 (*.*) - - + + Resolution: 分辨率: - + GIF Files (*.gif);;All Files (*.*) GIF 文件 (*.gif);;所有文件 (*.*) - + Save GIF File 保存 GIF 文件 - - - + + + + Create GIF / Add to Queue 创建 GIF / 添加到队列 - - + + Success + 成功 + + + + GIF created successfully! + GIF 创建成功! + + + + Error + 错误 + + + + Failed to create GIF. + GIF 创建失败。 + + + + Add to Queue 添加到队列 - - + + Warning 警告 - + Please select an input file. 请选择输入文件。 - + Please specify an output file. 请指定输出文件。 - + Creating GIF... 正在创建 GIF...