File indexing completed on 2024-04-14 15:51:32

0001 /***************************************************************************
0002                insertpartfilenamedlg.cpp  -  description
0003                              -------------------
0004     begin                : Sat Jun 30 2007
0005     copyright            : (C) 2007 by Dominik Seichter
0006     email                : domseichter@web.de
0007 ***************************************************************************/
0008 
0009 /***************************************************************************
0010  *                                                                         *
0011  *   This program is free software; you can redistribute it and/or modify  *
0012  *   it under the terms of the GNU General Public License as published by  *
0013  *   the Free Software Foundation; either version 2 of the License, or     *
0014  *   (at your option) any later version.                                   *
0015  *                                                                         *
0016  ***************************************************************************/
0017 
0018 #include "insertpartfilenamedlg.h"
0019 
0020 #include <QDialogButtonBox>
0021 #include <QVBoxLayout>
0022 
0023 InsertPartFilenameDlg::InsertPartFilenameDlg(const QString &filename, QWidget *parent)
0024     : QDialog(parent), m_start(-1), m_end(0)
0025 {
0026     QVBoxLayout *layout = new QVBoxLayout(this);
0027     QWidget     *widget = new QWidget(this);
0028 
0029     m_widget.setupUi(widget);
0030     m_buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Close, Qt::Horizontal, this);
0031 
0032     m_widget.textFilename->setText(filename);
0033     m_widget.textFilename->setCursorPosition(0);
0034 
0035     layout->addWidget(widget);
0036     layout->addWidget(m_buttons);
0037 
0038     connect(m_buttons, &QDialogButtonBox::accepted,
0039             this, &InsertPartFilenameDlg::accept);
0040     connect(m_buttons, &QDialogButtonBox::rejected,
0041             this, &InsertPartFilenameDlg::reject);
0042 
0043     connect(m_widget.checkInvert, &QCheckBox::clicked,
0044             this, &InsertPartFilenameDlg::slotUpdateKRenameCommand);
0045     connect(m_widget.textFilename, &SelectionSafeLineEdit::selectionChanged,
0046             this, &InsertPartFilenameDlg::slotSelectionChanged);
0047     connect(m_widget.comboConvert, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
0048             this, &InsertPartFilenameDlg::slotSelectionChanged);
0049 
0050     this->slotUpdateKRenameCommand();
0051 }
0052 
0053 void InsertPartFilenameDlg::slotSelectionChanged()
0054 {
0055     m_start      = m_widget.textFilename->selectionStart();
0056     QString text = m_widget.textFilename->selectedText();
0057     m_end        = m_start + text.length();
0058 
0059     slotUpdateKRenameCommand();
0060 }
0061 
0062 void InsertPartFilenameDlg::slotUpdateKRenameCommand()
0063 {
0064     m_command        = "";
0065     bool hasSelected = m_start != -1;
0066     int  cursorPos   = m_widget.textFilename->cursorPosition();
0067     int  end         = m_end;
0068     int  start       = m_start;
0069 
0070     char conversionflag = '$';
0071     if (m_widget.comboConvert->currentIndex() == 1) {
0072         conversionflag = '%';
0073     } else if (m_widget.comboConvert->currentIndex() == 2) {
0074         conversionflag = '&';
0075     } else if (m_widget.comboConvert->currentIndex() == 3) {
0076         conversionflag = '*';
0077     }
0078 
0079     if (!m_widget.textFilename->text().isEmpty()) {
0080         if (m_widget.checkInvert->isChecked() && hasSelected) {
0081             // inverted
0082             if (end) {
0083                 start++;
0084                 end++;
0085                 if (start > 1) {
0086                     m_command = QString("[%1;%2]").arg(conversionflag).arg(start - 1);
0087                 }
0088 
0089                 if (end <= (signed int)m_widget.textFilename->text().length()) {
0090                     m_command.append(QString("[%1%2-[length]]").arg(conversionflag).arg(end));
0091                 }
0092             }
0093         } else if (m_widget.checkInvert->isChecked() && !hasSelected) {
0094             m_command = QString("[%1").arg(conversionflag) + QString("1;%1][%3%2-[length]]").arg(cursorPos).arg(cursorPos + 1);
0095         } else if (!m_widget.checkInvert->isChecked() && hasSelected) {
0096             if (end) {
0097                 start++;
0098                 end++;
0099                 if (end <= (signed int)m_widget.textFilename->text().length()) {
0100                     m_command = QString("[%1%2;%3]").arg(conversionflag).arg(start).arg(end - start);
0101                 } else {
0102                     m_command = QString("[%1%2-[length]]").arg(conversionflag).arg(start);
0103                 }
0104             }
0105         } else if (!m_widget.checkInvert->isChecked() && !hasSelected) {
0106             m_command = QString("[%1%2-[length]]").arg(conversionflag).arg(cursorPos);
0107         }
0108 
0109     }
0110 
0111     m_widget.labelPreview->setText(m_command);
0112 }