FreeCAD

Форк
0
/
SymbolChooser.cpp 
143 строки · 5.2 Кб
1
/***************************************************************************
2
 *   Copyright (c) 2019 WandererFan <wandererfan@gmail.com>                *
3
 *                                                                         *
4
 *   This file is part of the FreeCAD CAx development system.              *
5
 *                                                                         *
6
 *   This library is free software; you can redistribute it and/or         *
7
 *   modify it under the terms of the GNU Library General Public           *
8
 *   License as published by the Free Software Foundation; either          *
9
 *   version 2 of the License, or (at your option) any later version.      *
10
 *                                                                         *
11
 *   This library  is distributed in the hope that it will be useful,      *
12
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
13
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
14
 *   GNU Library General Public License for more details.                  *
15
 *                                                                         *
16
 *   You should have received a copy of the GNU Library General Public     *
17
 *   License along with this library; see the file COPYING.LIB. If not,    *
18
 *   write to the Free Software Foundation, Inc., 59 Temple Place,         *
19
 *   Suite 330, Boston, MA  02111-1307, USA                                *
20
 *                                                                         *
21
 ***************************************************************************/
22

23
#include "PreCompiled.h"
24
#ifndef _PreComp_
25
# include <QListWidget>
26
#endif
27

28
#include <App/Application.h>
29

30
#include "SymbolChooser.h"
31
#include "ui_SymbolChooser.h"
32

33

34
using namespace Gui;
35
using namespace TechDrawGui;
36

37
SymbolChooser::SymbolChooser(QWidget *parent,
38
                             QString startDir,
39
                             QString source) :
40
    QDialog(parent),
41
    ui(new Ui_SymbolChooser),
42
    m_symbolDir(startDir),
43
    m_source(source)
44
{
45
    ui->setupUi(this);
46
    connect(ui->fcSymbolDir, &FileChooser::fileNameChanged,
47
            this, &SymbolChooser::onDirectoryChanged);
48
    connect(ui->lwSymbols, &QListWidget::itemClicked,    //double click?
49
            this, &SymbolChooser::onItemClicked);
50

51
    setUiPrimary();
52
}
53

54
SymbolChooser::~SymbolChooser()
55
{
56
}
57

58
void SymbolChooser::setUiPrimary()
59
{
60
    // Base::Console().Message("SC::setUiPrimary()\n");
61
    setWindowTitle(QObject::tr("Select a symbol"));
62
    resize(QSize(700, 500));
63
    if (!m_symbolDir.isEmpty()) {
64
        ui->fcSymbolDir->setFileName(m_symbolDir);
65
        loadSymbolNames(m_symbolDir);
66
    } else {
67
        std::string resourceDir = App::Application::getResourceDir();
68
        std::string defPath = "Mod/TechDraw/Symbols/Welding/AWS/";
69
        resourceDir = resourceDir + defPath;
70
        QString m_symbolDir = QString::fromUtf8(resourceDir.c_str());
71
        ui->fcSymbolDir->setFileName(m_symbolDir);
72
        loadSymbolNames(m_symbolDir);
73
    }
74

75
    ui->lwSymbols->setViewMode(QListView::IconMode);
76
    ui->lwSymbols->setFlow(QListView::LeftToRight);
77
    ui->lwSymbols->setWrapping(true);
78
    ui->lwSymbols->setSelectionMode(QAbstractItemView::SingleSelection);
79
    ui->lwSymbols->setGridSize(QSize(75, 85));
80
    ui->lwSymbols->setIconSize(QSize(45, 45));
81
    ui->lwSymbols->setResizeMode(QListView::Adjust);
82
}
83

84
void SymbolChooser::onOKClicked()
85
{
86
    QDialog::accept();
87
    QListWidgetItem* sourceItem = ui->lwSymbols->currentItem();
88
    if (!sourceItem)
89
        return;
90
    QString targetText = sourceItem->text();
91
    m_symbolPath = m_symbolDir +
92
                   targetText +
93
                   QString::fromUtf8(".svg");
94

95
    Q_EMIT symbolSelected(m_symbolPath, m_source);
96
}
97

98
void SymbolChooser::onCancelClicked()
99
{
100
    QDialog::reject();
101
}
102

103
void SymbolChooser::onItemClicked(QListWidgetItem* item)
104
{
105
    Q_UNUSED(item);
106
    // Base::Console().Message("SCS::onItemClicked(%s)\n", qPrintable(item->text()));
107
    // Are item and currentItem() the same? Should use item?
108
    QListWidgetItem* sourceItem = ui->lwSymbols->currentItem();
109
    QString targetText = sourceItem->text();
110
    m_symbolPath = m_symbolDir +
111
                   targetText +
112
                   QString::fromUtf8(".svg");
113
    Q_EMIT symbolSelected(m_symbolPath, m_source);
114

115
    // Base::Console().Message("SC::onOKClicked - symbol: %s\n", qPrintable(m_symbolPath));
116
    accept();
117
}
118

119
void SymbolChooser::onDirectoryChanged(const QString& newDir)
120
{
121
    ui->lwSymbols->clear(); // Remove all previous symbols
122
    // Base::Console().Message("SC::onDirectoryChanged(%s)\n", qPrintable(newDir));
123
    m_symbolDir = newDir + QString::fromUtf8("/");
124
    loadSymbolNames(m_symbolDir);
125
}
126

127
void SymbolChooser::loadSymbolNames(QString pathToSymbols)
128
{
129
    // Fill selection list with names and icons
130
    QDir symbolDir(pathToSymbols);
131
    symbolDir.setFilter(QDir::Files);
132
    QStringList fileNames = symbolDir.entryList();
133

134
    for (auto& fn: fileNames) {
135
        QString text = (new QFileInfo(fn))->baseName();
136
        QIcon icon(pathToSymbols + fn);
137

138
        // Create a symbol in the QListWidget lwSymbols
139
        new QListWidgetItem(icon, text, ui->lwSymbols);
140
    }
141
}
142

143
#include <Mod/TechDraw/Gui/moc_SymbolChooser.cpp>
144

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.