VirtualBox

Ignore:
Timestamp:
May 4, 2016 1:23:50 PM (9 years ago)
Author:
vboxsync
Message:

FE/Qt: ​​​​​​​​​bugref:6769: Rework/cleanup file-path selector widget (part 04): Coding-style.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/widgets
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIFilePathSelector.cpp

    r60827 r60828  
    5353
    5454/** Returns first position of difference between passed strings. */
    55 static int differFrom (const QString &aS1, const QString &aS2)
    56 {
    57     if (aS1 == aS2)
     55static int differFrom(const QString &str1, const QString &str2)
     56{
     57    if (str1 == str2)
    5858        return -1;
    5959
    60     int minLength = qMin (aS1.size(), aS2.size());
    61     int index = 0;
    62     for (index = 0; index < minLength ; ++ index)
    63         if (aS1 [index] != aS2 [index])
    64             break;
    65     return index;
    66 }
    67 
    68 UIFilePathSelector::UIFilePathSelector (QWidget *aParent)
    69     : QIWithRetranslateUI<QComboBox> (aParent)
    70     , mCopyAction (new QAction (this))
    71     , mMode (Mode_Folder)
    72     , mHomeDir (QDir::current().absolutePath())
    73     , mIsEditable (true)
    74     , mIsEditableMode (false)
    75     , mIsMouseAwaited (false)
    76     , mModified (false)
    77 {
    78     /* Populate items */
    79     insertItem (PathId, "");
    80     insertItem (SelectId, "");
    81     insertItem (ResetId, "");
    82 
    83     /* Attaching known icons */
     60    int iMinLength = qMin(str1.size(), str2.size());
     61    int iIndex = 0;
     62    for (iIndex = 0; iIndex < iMinLength; ++iIndex)
     63        if (str1[iIndex] != str2[iIndex])
     64            break;
     65    return iIndex;
     66}
     67
     68UIFilePathSelector::UIFilePathSelector(QWidget *pParent /* = 0 */)
     69    : QIWithRetranslateUI<QComboBox>(pParent)
     70    , m_pCopyAction(new QAction(this))
     71    , m_enmMode(Mode_Folder)
     72    , m_strHomeDir(QDir::current().absolutePath())
     73    , m_fEditable(true)
     74    , m_fEditableMode(false)
     75    , m_fMouseAwaited(false)
     76    , m_fModified(false)
     77{
     78    /* Populate items: */
     79    insertItem(PathId, "");
     80    insertItem(SelectId, "");
     81    insertItem(ResetId, "");
     82
     83    /* Attaching known icons: */
    8484    setItemIcon(SelectId, UIIconPool::iconSet(":/select_file_16px.png"));
    8585    setItemIcon(ResetId, UIIconPool::iconSet(":/eraser_16px.png"));
    8686
    87     /* Setup context menu */
    88     addAction (mCopyAction);
    89     mCopyAction->setShortcut (QKeySequence (QKeySequence::Copy));
    90     mCopyAction->setShortcutContext (Qt::WidgetShortcut);
    91 
    92     /* Initial Setup */
    93     setInsertPolicy (QComboBox::NoInsert);
    94     setContextMenuPolicy (Qt::ActionsContextMenu);
    95     setMinimumWidth (200);
    96 
    97     /* Setup connections */
    98     connect (this, SIGNAL (activated (int)), this, SLOT (onActivated (int)));
    99     connect (mCopyAction, SIGNAL (triggered (bool)), this, SLOT (copyToClipboard()));
    100 
    101     /* Editable by default */
    102     setEditable (true);
    103 
    104     /* Applying language settings */
     87    /* Setup context menu: */
     88    addAction(m_pCopyAction);
     89    m_pCopyAction->setShortcut(QKeySequence(QKeySequence::Copy));
     90    m_pCopyAction->setShortcutContext(Qt::WidgetShortcut);
     91
     92    /* Initial setup: */
     93    setInsertPolicy(QComboBox::NoInsert);
     94    setContextMenuPolicy(Qt::ActionsContextMenu);
     95    setMinimumWidth(200);
     96
     97    /* Setup connections: */
     98    connect(this, SIGNAL(activated(int)), this, SLOT(onActivated(int)));
     99    connect(m_pCopyAction, SIGNAL(triggered(bool)), this, SLOT(copyToClipboard()));
     100
     101    /* Editable by default: */
     102    setEditable(true);
     103
     104    /* Applying language settings: */
    105105    retranslateUi();
    106106}
     
    110110}
    111111
    112 void UIFilePathSelector::setMode (Mode aMode)
    113 {
    114     mMode = aMode;
     112void UIFilePathSelector::setMode(Mode enmMode)
     113{
     114    m_enmMode = enmMode;
    115115}
    116116
    117117UIFilePathSelector::Mode UIFilePathSelector::mode() const
    118118{
    119     return mMode;
    120 }
    121 
    122 void UIFilePathSelector::setEditable (bool aOn)
    123 {
    124     mIsEditable = aOn;
    125 
    126     if (mIsEditable)
    127     {
    128         QComboBox::setEditable (true);
    129         Assert (lineEdit());
    130         connect (lineEdit(), SIGNAL (textEdited (const QString &)),
    131                  this, SLOT (onTextEdited (const QString &)));
    132 
    133         /* Installing necessary event filters */
    134         lineEdit()->installEventFilter (this);
     119    return m_enmMode;
     120}
     121
     122void UIFilePathSelector::setEditable(bool fEditable)
     123{
     124    m_fEditable = fEditable;
     125
     126    if (m_fEditable)
     127    {
     128        QComboBox::setEditable(true);
     129        Assert(lineEdit());
     130        connect(lineEdit(), SIGNAL(textEdited(const QString &)),
     131                this, SLOT(onTextEdited(const QString &)));
     132
     133        /* Installing necessary event filters: */
     134        lineEdit()->installEventFilter(this);
    135135    }
    136136    else
     
    138138        if (lineEdit())
    139139        {
    140             /* Installing necessary event filters */
    141             lineEdit()->installEventFilter (this);
    142             disconnect (lineEdit(), SIGNAL (textEdited (const QString &)),
    143                         this, SLOT (onTextEdited (const QString &)));
    144         }
    145         QComboBox::setEditable (false);
     140            /* Installing necessary event filters: */
     141            lineEdit()->installEventFilter(this);
     142            disconnect(lineEdit(), SIGNAL(textEdited(const QString &)),
     143                       this, SLOT(onTextEdited(const QString &)));
     144        }
     145        QComboBox::setEditable(false);
    146146    }
    147147}
     
    149149bool UIFilePathSelector::isEditable() const
    150150{
    151     return mIsEditable;
    152 }
    153 
    154 void UIFilePathSelector::setResetEnabled (bool aEnabled)
    155 {
    156     if (!aEnabled && count() - 1 == ResetId)
    157         removeItem (ResetId);
    158     else if (aEnabled && count() - 1 == ResetId - 1)
    159     {
    160         insertItem (ResetId, "");
     151    return m_fEditable;
     152}
     153
     154void UIFilePathSelector::setResetEnabled(bool fEnabled)
     155{
     156    if (!fEnabled && count() - 1 == ResetId)
     157        removeItem(ResetId);
     158    else if (fEnabled && count() - 1 == ResetId - 1)
     159    {
     160        insertItem(ResetId, "");
    161161        setItemIcon(ResetId, UIIconPool::iconSet(":/eraser_16px.png"));
    162162    }
     
    171171void UIFilePathSelector::resetModified()
    172172{
    173     mModified = false;
     173    m_fModified = false;
    174174}
    175175
    176176bool UIFilePathSelector::isModified() const
    177177{
    178     return mModified;
    179 }
    180 
    181 void UIFilePathSelector::setFileDialogTitle (const QString& aTitle)
    182 {
    183     mFileDialogTitle = aTitle;
     178    return m_fModified;
     179}
     180
     181void UIFilePathSelector::setFileDialogTitle(const QString& strTitle)
     182{
     183    m_strFileDialogTitle = strTitle;
    184184}
    185185
    186186QString UIFilePathSelector::fileDialogTitle() const
    187187{
    188     return mFileDialogTitle;
    189 }
    190 
    191 void UIFilePathSelector::setFileFilters (const QString& aFilters)
    192 {
    193     mFileFilters = aFilters;
    194 }
    195 
    196 QString UIFilePathSelector::fileFilters() const
    197 {
    198     return mFileFilters;
    199 }
    200 
    201 void UIFilePathSelector::setDefaultSaveExt (const QString &aExt)
    202 {
    203     mDefaultSaveExt = aExt;
    204 }
    205 
    206 QString UIFilePathSelector::defaultSaveExt() const
    207 {
    208     return mDefaultSaveExt;
     188    return m_strFileDialogTitle;
     189}
     190
     191void UIFilePathSelector::setFileDialogFilters(const QString& strFilters)
     192{
     193    m_strFileDialogFilters = strFilters;
     194}
     195
     196QString UIFilePathSelector::fileDialogFilters() const
     197{
     198    return m_strFileDialogFilters;
     199}
     200
     201void UIFilePathSelector::setFileDialogDefaultSaveExtension(const QString &strDefaultSaveExtension)
     202{
     203    m_strFileDialogDefaultSaveExtension = strDefaultSaveExtension;
     204}
     205
     206QString UIFilePathSelector::fileDialogDefaultSaveExtension() const
     207{
     208    return m_strFileDialogDefaultSaveExtension;
    209209}
    210210
     
    216216QString UIFilePathSelector::path() const
    217217{
    218     return mPath;
    219 }
    220 
    221 void UIFilePathSelector::setPath (const QString &aPath, bool aRefreshText /* = true */)
    222 {
    223     mPath = aPath.isEmpty() ? QString::null :
    224             QDir::toNativeSeparators (aPath);
    225     if (aRefreshText)
     218    return m_strPath;
     219}
     220
     221void UIFilePathSelector::setPath(const QString &strPath, bool fRefreshText /* = true */)
     222{
     223    m_strPath = strPath.isEmpty() ? QString::null :
     224            QDir::toNativeSeparators(strPath);
     225    if (fRefreshText)
    226226        refreshText();
    227227}
    228228
    229 void UIFilePathSelector::setHomeDir (const QString &aHomeDir)
    230 {
    231     mHomeDir = aHomeDir;
    232 }
    233 
    234 void UIFilePathSelector::resizeEvent (QResizeEvent *aEvent)
    235 {
    236     QIWithRetranslateUI<QComboBox>::resizeEvent (aEvent);
     229void UIFilePathSelector::setHomeDir(const QString &strHomeDir)
     230{
     231    m_strHomeDir = strHomeDir;
     232}
     233
     234void UIFilePathSelector::resizeEvent(QResizeEvent *pEvent)
     235{
     236    QIWithRetranslateUI<QComboBox>::resizeEvent(pEvent);
    237237    refreshText();
    238238}
    239239
    240 void UIFilePathSelector::focusInEvent (QFocusEvent *aEvent)
     240void UIFilePathSelector::focusInEvent(QFocusEvent *pEvent)
    241241{
    242242    if (isPathSelected())
    243243    {
    244         if (mIsEditable)
    245             mIsEditableMode = true;
    246         if (aEvent->reason() == Qt::MouseFocusReason)
    247             mIsMouseAwaited = true;
     244        if (m_fEditable)
     245            m_fEditableMode = true;
     246        if (pEvent->reason() == Qt::MouseFocusReason)
     247            m_fMouseAwaited = true;
    248248        else
    249249            refreshText();
    250250    }
    251     QIWithRetranslateUI<QComboBox>::focusInEvent (aEvent);
    252 }
    253 
    254 void UIFilePathSelector::focusOutEvent (QFocusEvent *aEvent)
     251    QIWithRetranslateUI<QComboBox>::focusInEvent(pEvent);
     252}
     253
     254void UIFilePathSelector::focusOutEvent(QFocusEvent *pEvent)
    255255{
    256256    if (isPathSelected())
    257257    {
    258         mIsEditableMode = false;
     258        m_fEditableMode = false;
    259259        refreshText();
    260260    }
    261     QIWithRetranslateUI<QComboBox>::focusOutEvent (aEvent);
    262 }
    263 
    264 bool UIFilePathSelector::eventFilter (QObject *aObj, QEvent *aEv)
    265 {
    266     if (mIsMouseAwaited && (aEv->type() == QEvent::MouseButtonPress))
    267         QTimer::singleShot (0, this, SLOT (refreshText()));
    268 
    269     return QIWithRetranslateUI<QComboBox>::eventFilter (aObj, aEv);
     261    QIWithRetranslateUI<QComboBox>::focusOutEvent(pEvent);
     262}
     263
     264bool UIFilePathSelector::eventFilter(QObject *pObject, QEvent *pEvent)
     265{
     266    if (m_fMouseAwaited && (pEvent->type() == QEvent::MouseButtonPress))
     267        QTimer::singleShot(0, this, SLOT(refreshText()));
     268
     269    return QIWithRetranslateUI<QComboBox>::eventFilter(pObject, pEvent);
    270270}
    271271
     
    275275    if (isResetEnabled())
    276276    {
    277         mNoneStr = tr ("<reset to default>");
    278         mNoneTip = tr ("The actual default path value will be displayed after "
    279                        "accepting the changes and opening this window again.");
     277        m_strNoneText = tr("<reset to default>");
     278        m_strNoneToolTip = tr("The actual default path value will be displayed after "
     279                              "accepting the changes and opening this window again.");
    280280    }
    281281    else
    282282    {
    283         mNoneStr = tr ("<not selected>");
    284         mNoneTip = tr ("Please use the <b>Other...</b> item from the drop-down "
    285                        "list to select a path.");
    286     }
    287 
    288     /* Retranslate 'path' item */
    289     if (mPath.isNull())
    290     {
    291         setItemText (PathId, mNoneStr);
    292         setItemData (PathId, mNoneTip, Qt::ToolTipRole);
    293         setToolTip (mNoneTip);
    294     }
    295 
    296     /* Retranslate 'select' item */
    297     setItemText (SelectId, tr ("Other..."));
    298 
    299     /* Retranslate 'reset' item */
     283        m_strNoneText = tr("<not selected>");
     284        m_strNoneToolTip = tr("Please use the <b>Other...</b> item from the drop-down "
     285                              "list to select a path.");
     286    }
     287
     288    /* Retranslate 'path' item: */
     289    if (m_strPath.isNull())
     290    {
     291        setItemText(PathId, m_strNoneText);
     292        setItemData(PathId, m_strNoneToolTip, Qt::ToolTipRole);
     293        setToolTip(m_strNoneToolTip);
     294    }
     295
     296    /* Retranslate 'select' item: */
     297    setItemText(SelectId, tr("Other..."));
     298
     299    /* Retranslate 'reset' item: */
    300300    if (count() - 1 == ResetId)
    301         setItemText (ResetId, tr ("Reset"));
    302 
    303     /* Set tooltips of the above two items based on the mode */
    304     switch (mMode)
     301        setItemText(ResetId, tr("Reset"));
     302
     303    /* Set tooltips of the above two items based on the mode: */
     304    switch (m_enmMode)
    305305    {
    306306        case Mode_Folder:
    307             setItemData (SelectId,
    308                          tr ("Displays a window to select a different folder."),
    309                          Qt::ToolTipRole);
    310             setItemData (ResetId,
    311                          tr ("Resets the folder path to the default value."),
    312                          Qt::ToolTipRole);
     307            setItemData(SelectId,
     308                        tr("Displays a window to select a different folder."),
     309                        Qt::ToolTipRole);
     310            setItemData(ResetId,
     311                        tr("Resets the folder path to the default value."),
     312                        Qt::ToolTipRole);
    313313            break;
    314314        case Mode_File_Open:
    315315        case Mode_File_Save:
    316             setItemData (SelectId,
    317                          tr ("Displays a window to select a different file."),
    318                          Qt::ToolTipRole);
    319             setItemData (ResetId,
    320                          tr ("Resets the file path to the default value."),
    321                          Qt::ToolTipRole);
     316            setItemData(SelectId,
     317                        tr("Displays a window to select a different file."),
     318                        Qt::ToolTipRole);
     319            setItemData(ResetId,
     320                        tr("Resets the file path to the default value."),
     321                        Qt::ToolTipRole);
    322322            break;
    323323        default:
     
    325325    }
    326326
    327     /* Retranslate copy action */
    328     mCopyAction->setText (tr ("&Copy"));
    329 }
    330 
    331 void UIFilePathSelector::onActivated (int aIndex)
    332 {
    333     switch (aIndex)
     327    /* Retranslate copy action: */
     328    m_pCopyAction->setText(tr("&Copy"));
     329}
     330
     331void UIFilePathSelector::onActivated(int iIndex)
     332{
     333    switch (iIndex)
    334334    {
    335335        case SelectId:
     
    340340        case ResetId:
    341341        {
    342             changePath (QString::null);
     342            changePath(QString::null);
    343343            break;
    344344        }
     
    346346            break;
    347347    }
    348     setCurrentIndex (PathId);
     348    setCurrentIndex(PathId);
    349349    setFocus();
    350350}
    351351
    352 void UIFilePathSelector::onTextEdited (const QString &aPath)
    353 {
    354     changePath (aPath, false /* refresh text? */);
     352void UIFilePathSelector::onTextEdited(const QString &strPath)
     353{
     354    changePath(strPath, false /* refresh text? */);
    355355}
    356356
    357357void UIFilePathSelector::copyToClipboard()
    358358{
    359     QString text (fullPath());
     359    QString text(fullPath());
    360360    /* Copy the current text to the selection and global clipboard. */
    361361    if (QApplication::clipboard()->supportsSelection())
    362         QApplication::clipboard()->setText (text, QClipboard::Selection);
    363     QApplication::clipboard()->setText (text, QClipboard::Clipboard);
    364 }
    365 
    366 void UIFilePathSelector::changePath (const QString &aPath,
    367                                              bool aRefreshText /* = true */)
    368 {
    369     QString oldPath = mPath;
    370     setPath (aPath, aRefreshText);
    371     if (!mModified && mPath != oldPath)
    372         mModified = true;
    373     emit pathChanged (aPath);
     362        QApplication::clipboard()->setText(text, QClipboard::Selection);
     363    QApplication::clipboard()->setText(text, QClipboard::Clipboard);
     364}
     365
     366void UIFilePathSelector::changePath(const QString &strPath,
     367                                    bool fRefreshText /* = true */)
     368{
     369    const QString strOldPath = m_strPath;
     370    setPath(strPath, fRefreshText);
     371    if (!m_fModified && m_strPath != strOldPath)
     372        m_fModified = true;
     373    emit pathChanged(strPath);
    374374}
    375375
     
    377377{
    378378    /* Preparing initial directory. */
    379     QString initDir = mPath.isNull() ? mHomeDir :
    380         QIFileDialog::getFirstExistingDir (mPath);
    381     if (initDir.isNull())
    382         initDir = mHomeDir;
    383 
    384     QString selPath;
    385     switch (mMode)
     379    QString strInitDir = m_strPath.isNull() ? m_strHomeDir :
     380                         QIFileDialog::getFirstExistingDir(m_strPath);
     381    if (strInitDir.isNull())
     382        strInitDir = m_strHomeDir;
     383
     384    QString strSelPath;
     385    switch (m_enmMode)
    386386    {
    387387        case Mode_File_Open:
    388             selPath = QIFileDialog::getOpenFileName (initDir, mFileFilters, parentWidget(), mFileDialogTitle); break;
     388            strSelPath = QIFileDialog::getOpenFileName(strInitDir, m_strFileDialogFilters, parentWidget(), m_strFileDialogTitle); break;
    389389        case Mode_File_Save:
    390             {
    391                 selPath = QIFileDialog::getSaveFileName (initDir, mFileFilters, parentWidget(), mFileDialogTitle);
    392                 if (!selPath.isEmpty() && QFileInfo (selPath).suffix().isEmpty())
    393                     selPath = QString ("%1.%2").arg (selPath).arg (mDefaultSaveExt);
    394                 break;
    395             }
     390        {
     391            strSelPath = QIFileDialog::getSaveFileName(strInitDir, m_strFileDialogFilters, parentWidget(), m_strFileDialogTitle);
     392            if (!strSelPath.isEmpty() && QFileInfo(strSelPath).suffix().isEmpty())
     393                strSelPath = QString("%1.%2").arg(strSelPath).arg(m_strFileDialogDefaultSaveExtension);
     394            break;
     395        }
    396396        case Mode_Folder:
    397             selPath = QIFileDialog::getExistingDirectory (initDir, parentWidget(), mFileDialogTitle); break;
    398     }
    399 
    400     if (selPath.isNull())
     397            strSelPath = QIFileDialog::getExistingDirectory(strInitDir, parentWidget(), m_strFileDialogTitle); break;
     398    }
     399
     400    if (strSelPath.isNull())
    401401        return;
    402402
    403     selPath.remove (QRegExp ("[\\\\/]$"));
    404     changePath (selPath);
     403    strSelPath.remove(QRegExp("[\\\\/]$"));
     404    changePath(strSelPath);
    405405}
    406406
    407407QIcon UIFilePathSelector::defaultIcon() const
    408408{
    409     if (mMode == Mode_Folder)
     409    if (m_enmMode == Mode_Folder)
    410410        return vboxGlobal().icon(QFileIconProvider::Folder);
    411411    else
     
    413413}
    414414
    415 QString UIFilePathSelector::fullPath (bool aAbsolute /* = true */) const
    416 {
    417     if (mPath.isNull())
    418         return mPath;
    419 
    420     QString result;
    421     switch (mMode)
     415QString UIFilePathSelector::fullPath(bool fAbsolute /* = true */) const
     416{
     417    if (m_strPath.isNull())
     418        return m_strPath;
     419
     420    QString strResult;
     421    switch (m_enmMode)
    422422    {
    423423        case Mode_Folder:
    424             result = aAbsolute ? QDir (mPath).absolutePath() :
    425                                  QDir (mPath).path();
     424            strResult = fAbsolute ? QDir(m_strPath).absolutePath() :
     425                                    QDir(m_strPath).path();
    426426            break;
    427427        case Mode_File_Open:
    428428        case Mode_File_Save:
    429             result = aAbsolute ? QFileInfo (mPath).absoluteFilePath() :
    430                                  QFileInfo (mPath).filePath();
     429            strResult = fAbsolute ? QFileInfo(m_strPath).absoluteFilePath() :
     430                                    QFileInfo(m_strPath).filePath();
    431431            break;
    432432        default:
    433433            AssertFailedBreak();
    434434    }
    435     return QDir::toNativeSeparators (result);
    436 }
    437 
    438 QString UIFilePathSelector::shrinkText (int aWidth) const
    439 {
    440     QString fullText (fullPath (false));
    441     if (fullText.isEmpty())
    442         return fullText;
    443 
    444     int oldSize = fontMetrics().width (fullText);
    445     int indentSize = fontMetrics().width ("x...x");
    446 
    447     /* Compress text */
    448     int start = 0;
    449     int finish = 0;
    450     int position = 0;
    451     int textWidth = 0;
     435    return QDir::toNativeSeparators(strResult);
     436}
     437
     438QString UIFilePathSelector::shrinkText(int iWidth) const
     439{
     440    QString strFullText(fullPath(false));
     441    if (strFullText.isEmpty())
     442        return strFullText;
     443
     444    int iOldSize = fontMetrics().width(strFullText);
     445    int iIndentSize = fontMetrics().width("x...x");
     446
     447    /* Compress text: */
     448    int iStart = 0;
     449    int iFinish = 0;
     450    int iPosition = 0;
     451    int iTextWidth = 0;
    452452    do {
    453         textWidth = fontMetrics().width (fullText);
    454         if (textWidth + indentSize > aWidth)
    455         {
    456             start = 0;
    457             finish = fullText.length();
    458 
    459             /* Selecting remove position */
    460             QRegExp regExp ("([\\\\/][^\\\\^/]+[\\\\/]?$)");
    461             int newFinish = regExp.indexIn (fullText);
    462             if (newFinish != -1)
    463                 finish = newFinish;
    464             position = (finish - start) / 2;
    465 
    466             if (position == finish)
     453        iTextWidth = fontMetrics().width(strFullText);
     454        if (iTextWidth + iIndentSize > iWidth)
     455        {
     456            iStart = 0;
     457            iFinish = strFullText.length();
     458
     459            /* Selecting remove position: */
     460            QRegExp regExp("([\\\\/][^\\\\^/]+[\\\\/]?$)");
     461            int iNewFinish = regExp.indexIn(strFullText);
     462            if (iNewFinish != -1)
     463                iFinish = iNewFinish;
     464            iPosition = (iFinish - iStart) / 2;
     465
     466            if (iPosition == iFinish)
    467467               break;
    468468
    469             fullText.remove (position, 1);
    470         }
    471     } while (textWidth + indentSize > aWidth);
    472 
    473     fullText.insert (position, "...");
    474     int newSize = fontMetrics().width (fullText);
    475 
    476     return newSize < oldSize ? fullText : fullPath (false);
     469            strFullText.remove(iPosition, 1);
     470        }
     471    } while (iTextWidth + iIndentSize > iWidth);
     472
     473    strFullText.insert(iPosition, "...");
     474    int newSize = fontMetrics().width(strFullText);
     475
     476    return newSize < iOldSize ? strFullText : fullPath(false);
    477477}
    478478
    479479void UIFilePathSelector::refreshText()
    480480{
    481     if (mIsEditable && mIsEditableMode)
    482     {
    483         /* Cursor positioning variables */
    484         int curPos = -1;
    485         int diffPos = -1;
    486         int fromRight = -1;
    487 
    488         if (mIsMouseAwaited)
    489         {
    490             /* Store the cursor position */
    491             curPos = lineEdit()->cursorPosition();
    492             diffPos = differFrom (lineEdit()->text(), mPath);
    493             fromRight = lineEdit()->text().size() - curPos;
     481    if (m_fEditable && m_fEditableMode)
     482    {
     483        /* Cursor positioning variables: */
     484        int iCurPos = -1;
     485        int iDiffPos = -1;
     486        int iFromRight = -1;
     487
     488        if (m_fMouseAwaited)
     489        {
     490            /* Store the cursor position: */
     491            iCurPos = lineEdit()->cursorPosition();
     492            iDiffPos = differFrom(lineEdit()->text(), m_strPath);
     493            iFromRight = lineEdit()->text().size() - iCurPos;
    494494        }
    495495
     
    497497         * and text have be corresponding real stored path
    498498         * which can be absolute or relative. */
    499         if (lineEdit()->text() != mPath)
    500             setItemText (PathId, mPath);
    501         setItemIcon (PathId, QIcon());
    502         setToolTip (mMode == Mode_Folder ?
    503             tr ("Holds the folder path.") :
    504             tr ("Holds the file path."));
    505 
    506         if (mIsMouseAwaited)
    507         {
    508             mIsMouseAwaited = false;
    509 
    510             /* Restore the position to the right of dots */
    511             if (diffPos != -1 && curPos >= diffPos + 3)
    512                 lineEdit()->setCursorPosition (lineEdit()->text().size() -
    513                                                fromRight);
    514             /* Restore the position to the center of text */
    515             else if (diffPos != -1 && curPos > diffPos)
    516                 lineEdit()->setCursorPosition (lineEdit()->text().size() / 2);
    517             /* Restore the position to the left of dots */
     499        if (lineEdit()->text() != m_strPath)
     500            setItemText(PathId, m_strPath);
     501        setItemIcon(PathId, QIcon());
     502        setToolTip(m_enmMode == Mode_Folder ?
     503                   tr("Holds the folder path.") :
     504                   tr("Holds the file path."));
     505
     506        if (m_fMouseAwaited)
     507        {
     508            m_fMouseAwaited = false;
     509
     510            /* Restore the position to the right of dots: */
     511            if (iDiffPos != -1 && iCurPos >= iDiffPos + 3)
     512                lineEdit()->setCursorPosition(lineEdit()->text().size() -
     513                                              iFromRight);
     514            /* Restore the position to the center of text: */
     515            else if (iDiffPos != -1 && iCurPos > iDiffPos)
     516                lineEdit()->setCursorPosition(lineEdit()->text().size() / 2);
     517            /* Restore the position to the left of dots: */
    518518            else
    519                 lineEdit()->setCursorPosition (curPos);
    520         }
    521     }
    522     else if (mPath.isNull())
     519                lineEdit()->setCursorPosition(iCurPos);
     520        }
     521    }
     522    else if (m_strPath.isNull())
    523523    {
    524524        /* If we are not in editable mode and no path is
    525525         * stored here - show the translated 'none' string. */
    526         if (itemText (PathId) != mNoneStr)
    527         {
    528             setItemText (PathId, mNoneStr);
    529             setItemIcon (PathId, QIcon());
    530             setItemData (PathId, mNoneTip, Qt::ToolTipRole);
    531             setToolTip (mNoneTip);
     526        if (itemText(PathId) != m_strNoneText)
     527        {
     528            setItemText(PathId, m_strNoneText);
     529            setItemIcon(PathId, QIcon());
     530            setItemData(PathId, m_strNoneToolTip, Qt::ToolTipRole);
     531            setToolTip(m_strNoneToolTip);
    532532        }
    533533    }
    534534    else
    535535    {
    536         /* Compress text in combobox */
     536        /* Compress text in combobox: */
    537537        QStyleOptionComboBox options;
    538         options.initFrom (this);
    539         QRect rect = QApplication::style()->subControlRect (
     538        options.initFrom(this);
     539        QRect rect = QApplication::style()->subControlRect(
    540540            QStyle::CC_ComboBox, &options, QStyle::SC_ComboBoxEditField);
    541         setItemText (PathId, shrinkText (rect.width() - iconSize().width()));
    542 
    543         /* Attach corresponding icon */
    544         setItemIcon (PathId, QFileInfo (mPath).exists() ?
    545                              vboxGlobal().icon(QFileInfo (mPath)) :
    546                              defaultIcon());
    547 
    548         /* Set the tooltip */
    549         setToolTip (fullPath());
    550         setItemData (PathId, toolTip(), Qt::ToolTipRole);
    551     }
    552 }
    553 
     541        setItemText(PathId, shrinkText(rect.width() - iconSize().width()));
     542
     543        /* Attach corresponding icon: */
     544        setItemIcon(PathId, QFileInfo(m_strPath).exists() ?
     545                            vboxGlobal().icon(QFileInfo(m_strPath)) :
     546                            defaultIcon());
     547
     548        /* Set the tooltip: */
     549        setToolTip(fullPath());
     550        setItemData(PathId, toolTip(), Qt::ToolTipRole);
     551    }
     552}
     553
  • trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIFilePathSelector.h

    r60827 r60828  
    4949    };
    5050
    51     /** Constructs file-path selector passing @a aParent to QComboBox base-class. */
    52     UIFilePathSelector (QWidget *aParent);
     51    /** Constructs file-path selector passing @a pParent to QComboBox base-class. */
     52    UIFilePathSelector(QWidget *pParent = 0);
    5353    /** Destructs file-path selector. */
    54    ~UIFilePathSelector();
     54    ~UIFilePathSelector();
    5555
    56     /** Defines the @a aMode to operate in. */
    57     void setMode (Mode aMode);
     56    /** Defines the @a enmMode to operate in. */
     57    void setMode(Mode enmMode);
    5858    /** Returns the mode to operate in. */
    5959    Mode mode() const;
    6060
    61     /** Defines whether the possibility to edit the path is @a aOn. */
    62     void setEditable (bool aOn);
     61    /** Defines whether the path is @a fEditable. */
     62    void setEditable(bool fEditable);
    6363    /** Returns whether the path is editable. */
    6464    bool isEditable() const;
    6565
    66     /** Defines whether the reseting to defauilt path is @a aEnabled. */
    67     void setResetEnabled (bool aEnabled);
     66    /** Defines whether the reseting to defauilt path is @a fEnabled. */
     67    void setResetEnabled(bool fEnabled);
    6868    /** Returns whether the reseting to defauilt path is enabled. */
    69     bool isResetEnabled () const;
     69    bool isResetEnabled() const;
    7070
    71     /** Defines the file-dialog @a aTitle. */
    72     void setFileDialogTitle (const QString& aTitle);
     71    /** Defines the file-dialog @a strTitle. */
     72    void setFileDialogTitle(const QString &strTitle);
    7373    /** Returns the file-dialog title. */
    7474    QString fileDialogTitle() const;
    7575
    76     /** Defines the file-dialog @a aFilters. */
    77     void setFileFilters (const QString& aFilters);
     76    /** Defines the file-dialog @a strFilters. */
     77    void setFileDialogFilters(const QString &strFilters);
    7878    /** Returns the file-dialog filters. */
    79     QString fileFilters() const;
     79    QString fileDialogFilters() const;
    8080
    81     /** Defines the file-dialog default save @a aExt. */
    82     void setDefaultSaveExt (const QString &aExt);
     81    /** Defines the file-dialog @a strDefaultSaveExtension. */
     82    void setFileDialogDefaultSaveExtension(const QString &strDefaultSaveExtension);
    8383    /** Returns the file-dialog default save extension. */
    84     QString defaultSaveExt() const;
     84    QString fileDialogDefaultSaveExtension() const;
    8585
    8686    /** Resets path modified state to false. */
     
    9696signals:
    9797
    98     /** Notify listeners about path changed. */
    99     void pathChanged (const QString &);
     98    /** Notify listeners about @a strPath changed. */
     99    void pathChanged(const QString &strPath);
    100100
    101101public slots:
    102102
    103     /** Defines the @a aPath and @a aRefreshText after that. */
    104     void setPath (const QString &aPath, bool aRefreshText = true);
     103    /** Defines the @a strPath and @a fRefreshText after that. */
     104    void setPath(const QString &strPath, bool fRefreshText = true);
    105105
    106     /** Defines the @a aHomeDir. */
    107     void setHomeDir (const QString &aHomeDir);
     106    /** Defines the @a strHomeDir. */
     107    void setHomeDir(const QString &strHomeDir);
    108108
    109109protected:
    110110
    111     /** Handles resize @a aEvent. */
    112     void resizeEvent (QResizeEvent *aEvent);
     111    /** Handles resize @a pEvent. */
     112    void resizeEvent(QResizeEvent *pEvent);
    113113
    114     /** Handles focus-in @a aEvent. */
    115     void focusInEvent (QFocusEvent *aEvent);
    116     /** Handles focus-out @a aEvent. */
    117     void focusOutEvent (QFocusEvent *aEvent);
     114    /** Handles focus-in @a pEvent. */
     115    void focusInEvent(QFocusEvent *pEvent);
     116    /** Handles focus-out @a pEvent. */
     117    void focusOutEvent(QFocusEvent *pEvent);
    118118
    119     /** Preprocesses every @a aEv sent to @a aObj. */
    120     bool eventFilter (QObject *aObj, QEvent *aEv);
     119    /** Preprocesses every @a pEvent sent to @a pObject. */
     120    bool eventFilter(QObject *pObject, QEvent *pEvent);
    121121
    122122    /** Handles translation event. */
     
    125125private slots:
    126126
    127     /** Handles combo-box activation. */
    128     void onActivated (int aIndex);
     127    /** Handles combo-box @a iIndex activation. */
     128    void onActivated(int iIndex);
    129129
    130     /** Handles combo-box text editing. */
    131     void onTextEdited (const QString &aPath);
     130    /** Handles combo-box @a strText editing. */
     131    void onTextEdited(const QString &strText);
    132132
    133133    /** Handles combo-box text copying. */
     
    139139private:
    140140
    141     /** Provokes change to @a aPath and @a aRefreshText after that. */
    142     void changePath (const QString &aPath, bool aRefreshText = true);
     141    /** Provokes change to @a strPath and @a fRefreshText after that. */
     142    void changePath(const QString &strPath, bool fRefreshText = true);
    143143
    144144    /** Call for file-dialog to choose path. */
     
    148148    QIcon defaultIcon() const;
    149149
    150     /** Returns full path @a aAbsolute if necessary. */
    151     QString fullPath (bool aAbsolute = true) const;
     150    /** Returns full path @a fAbsolute if necessary. */
     151    QString fullPath(bool fAbsolute = true) const;
    152152
    153     /** Shrinks the reflected text to @a aWidth pixels. */
    154     QString shrinkText (int aWidth) const;
     153    /** Shrinks the reflected text to @a iWidth pixels. */
     154    QString shrinkText(int iWidth) const;
    155155
    156156    /** Holds the copy action instance. */
    157     QAction *mCopyAction;
     157    QAction *m_pCopyAction;
    158158
    159159    /** Holds the mode to operate in. */
    160     Mode mMode;
     160    Mode     m_enmMode;
    161161
    162162    /** Holds the path. */
    163     QString mPath;
    164     /** Holds the home directory. */
    165     QString mHomeDir;
     163    QString  m_strPath;
     164    /** Holds the home dir. */
     165    QString  m_strHomeDir;
    166166
    167167    /** Holds the file-dialog filters. */
    168     QString mFileFilters;
     168    QString  m_strFileDialogFilters;
    169169    /** Holds the file-dialog default save extension. */
    170     QString mDefaultSaveExt;
     170    QString  m_strFileDialogDefaultSaveExtension;
    171171    /** Holds the file-dialog title. */
    172     QString mFileDialogTitle;
     172    QString  m_strFileDialogTitle;
    173173
    174174    /** Holds the cached text for empty path. */
    175     QString mNoneStr;
     175    QString  m_strNoneText;
    176176    /** Holds the cached tool-tip for empty path. */
    177     QString mNoneTip;
     177    QString  m_strNoneToolTip;
    178178
    179179    /** Holds whether the path is editable. */
    180     bool mIsEditable;
     180    bool     m_fEditable;
    181181
    182182    /** Holds whether we are in editable mode. */
    183     bool mIsEditableMode;
     183    bool     m_fEditableMode;
    184184    /** Holds whether we are expecting mouse events. */
    185     bool mIsMouseAwaited;
     185    bool     m_fMouseAwaited;
    186186
    187187    /** Holds whether the path is modified. */
    188     bool mModified;
     188    bool     m_fModified;
    189189};
    190190
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette