Allow to export plain text file from a file path.

FileViewer design fix.
Fix colors.
This commit is contained in:
Julien Wadel 2023-01-17 11:41:34 +01:00
parent 769c843e4d
commit 69dbe28e92
6 changed files with 159 additions and 86 deletions

View file

@ -27,6 +27,8 @@
#include "components/settings/SettingsModel.hpp"
#include "utils/Utils.hpp"
#include <linphone++/linphone.hh>
// =============================================================================
using namespace std;
@ -39,23 +41,43 @@ TemporaryFile::~TemporaryFile () {
deleteFile();
}
void TemporaryFile::createFileFromContent(ContentModel * contentModel, const bool& exportPlainFile){
if(contentModel){
void TemporaryFile::createFileFromContent(std::shared_ptr<linphone::Content> content, const bool& exportPlainFile){
if(content){
QString filePath;
if( exportPlainFile || CoreManager::getInstance()->getSettingsModel()->getVfsEncrypted() )
filePath = Utils::coreStringToAppString(contentModel->getContent()->exportPlainFile());
if( exportPlainFile || (CoreManager::getInstance()->getSettingsModel()->getVfsEncrypted() && content->isFileEncrypted()) )
filePath = Utils::coreStringToAppString(content->exportPlainFile());
bool toDelete = true;
if(filePath.isEmpty()){
filePath = contentModel->getFilePath();
filePath = Utils::coreStringToAppString(content->getFilePath());
toDelete = false;
}
if(content->isFileEncrypted())// filePath was empty while the file is encrypted : it couldn't be decoded.
setIsReadable(false);
else
setIsReadable(true);
}else
setIsReadable(true);
setFilePath(filePath, toDelete);
}
}
void TemporaryFile::createFileFromContentModel(ContentModel * contentModel, const bool& exportPlainFile){
if(contentModel)
createFileFromContent(contentModel->getContent());
}
void TemporaryFile::createFile(const QString& openFilePath, const bool& exportPlainFile){
createFileFromContent(linphone::Factory::get()->createContentFromFile(Utils::appStringToCoreString(openFilePath)), exportPlainFile);
}
QString TemporaryFile::getFilePath () const{
return mFilePath;
}
bool TemporaryFile::isReadable() const{
return mIsReadable;
}
void TemporaryFile::setFilePath(const QString& path, const bool& toDelete){
if(path != mFilePath) {
deleteFile();
@ -65,6 +87,13 @@ void TemporaryFile::setFilePath(const QString& path, const bool& toDelete){
}
}
void TemporaryFile::setIsReadable(const bool& isReadable){
if(isReadable != mIsReadable) {
mIsReadable = isReadable;
emit isReadableChanged();
}
}
void TemporaryFile::deleteFile(){
if(mDeleteFile && !mFilePath.isEmpty())
QFile::remove(mFilePath);

View file

@ -22,6 +22,7 @@
#define TEMPORARY_FILE_H_
#include <QFile>
#include <linphone++/linphone.hh>
// =============================================================================
@ -34,20 +35,28 @@ public:
~TemporaryFile ();
Q_PROPERTY(QString filePath READ getFilePath NOTIFY filePathChanged)// not changeable from QML as it comes from a ContentModel
Q_PROPERTY(bool isReadable READ isReadable NOTIFY isReadableChanged)
Q_INVOKABLE void createFileFromContent(ContentModel * contentModel, const bool& exportPlainFile = true);
void createFileFromContent(std::shared_ptr<linphone::Content> content, const bool& exportPlainFile = true);
Q_INVOKABLE void createFileFromContentModel(ContentModel * contentModel, const bool& exportPlainFile = true);
Q_INVOKABLE void createFile(const QString& filePath, const bool& exportPlainFile = true);
QString getFilePath () const;
bool isReadable() const;
void setFilePath(const QString& path, const bool& toDelete);
void setIsReadable(const bool& isReadable);
void deleteFile();
signals :
void filePathChanged();
void isReadableChanged();
private:
QString mFilePath;
bool mDeleteFile = false;
bool mIsReadable = false;
};
#endif

View file

@ -25,16 +25,26 @@ DialogPlus{
property bool isAnimatedImage : filePath && UtilsCpp.isAnimatedImage(filePath)
property bool isVideo: filePath && UtilsCpp.isVideo(filePath)
property bool isImage: filePath && UtilsCpp.isImage(filePath)
property bool isSupportedForDisplay: filePath && UtilsCpp.isSupportedForDisplay(filePath)
property bool isSupportedForDisplay: filePath && tempFile.isReadable && UtilsCpp.isSupportedForDisplay(filePath)
showCloseCross: true
showButtons: !isVideo
buttonsAlignment: Qt.AlignRight
buttons: [
buttons: [/*
ActionButton{
Layout.preferredHeight: iconSize
Layout.preferredWidth: iconSize
Layout.preferredHeight: 3*iconSize/2
Layout.preferredWidth: 3*iconSize/2
isCustom: true
backgroundRadius: width
colorSet: FileViewDialogStyle.exportFile
onClicked: {
loadAsDialog.open()
}
},*/
ActionButton{
Layout.preferredHeight: 3*iconSize/2
Layout.preferredWidth: 3*iconSize/2
isCustom: true
backgroundRadius: width
colorSet: FileViewDialogStyle.exportFile
@ -48,7 +58,7 @@ DialogPlus{
radius: 10
onContentModelChanged: if(contentModel){
tempFile.createFileFromContent(contentModel, false);
tempFile.createFileFromContentModel(contentModel, false);
}
onExitStatus: if(loader.sourceComponent == videoComponent) loader.item.stop();
@ -70,24 +80,42 @@ DialogPlus{
}
return files
}, [])
contentModel.saveAs(files[0])
contentModel.saveAs(files[0])
}
}
FileDialog {
id: loadAsDialog
folder: shortcuts.documents
//: "Load": Title of a file dialog to export a file.
title: 'Load'
selectExisting: true
//defaultSuffix: Utils.getExtension(mainItem.filePath)// Doesn't seems to work on all platforms
onAccepted: {
var files = fileUrls.reduce(function (files, file) {
if (file.startsWith('file:')) {
files.push(Utils.getSystemPathFromUri(file))
}
return files
}, [])
tempFile.createFile(files[0], false);
}
}
Loader{
id: loader
anchors.fill: parent
active: true
sourceComponent: isVideo
? videoComponent
: mainItem.isAnimatedImage
? animatedImageComponent
: mainItem.isImage
? imageComponent
: isSupportedForDisplay
? fileTextComponent
: placeholderComponent
sourceComponent: isSupportedForDisplay
? isVideo
? videoComponent
: mainItem.isAnimatedImage
? animatedImageComponent
: mainItem.isImage
? imageComponent
: fileTextComponent
: placeholderComponent
//--------------------------------------------------------------------------------------------------
// VIDEOS
//--------------------------------------------------------------------------------------------------
@ -114,7 +142,7 @@ DialogPlus{
anchors.centerIn: parent
height: 50
width: 50
color: BusyIndicatorStyle.alternateColor
color: BusyIndicatorStyle.alternateColor.color
}
HoveringMouseArea{
@ -152,10 +180,10 @@ DialogPlus{
stopAtEnd: false
resetAtEnd: false
blockValueAtEnd: false
backgroundColor: ChatAudioMessageStyle.backgroundColor
progressLineBackgroundColor: FileViewDialogStyle.progression.backgroundColor
backgroundColor: ChatAudioMessageStyle.backgroundColor.color
progressLineBackgroundColor: FileViewDialogStyle.progression.backgroundColor.color
colorSet: FileViewDialogStyle.progression
durationTextColor: ChatStyle.entry.message.outgoing.text.color
durationTextColor: ChatStyle.entry.message.outgoing.text.colorModel.color
progressSize: 10
customActions: [
ActionButton{
@ -265,6 +293,10 @@ DialogPlus{
//idContentListView.positionViewAtEnd()
}
Component.onCompleted: updateText()
Connections{
target: tempFile
onFilePathChanged: idContentListView.updateText()
}
}
}
//--------------------------------------------------------------------------------------------------
@ -272,11 +304,14 @@ DialogPlus{
//--------------------------------------------------------------------------------------------------
Component {
id: placeholderComponent
Icon{
id: fileIcon
Item{
Layout.alignment: Qt.AlignCenter
icon: FileViewDialogStyle.extension.unknownIcon
iconSize: FileViewDialogStyle.extension.iconSize
Icon{
id: fileIcon
anchors.centerIn: parent
icon: FileViewDialogStyle.extension.unknownIcon
iconSize: FileViewDialogStyle.extension.iconSize
}
}
}
}

View file

@ -16,76 +16,76 @@ QtObject {
property string name : 'progression'
property string icon : ''
property color backgroundColor: ColorsList.addImageColor(sectionName+'_'+name+'_bg', icon, 'c80').color
property var backgroundColor: ColorsList.addImageColor(sectionName+'_'+name+'_bg', icon, 'c80')
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'w_n_b_bg').color
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'w_h_b_bg').color
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'w_p_b_bg').color
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'w_n_b_fg').color
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'w_h_b_fg').color
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'w_p_b_fg').color
property var backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'w_n_b_bg')
property var backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'w_h_b_bg')
property var backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'w_p_b_bg')
property var foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'w_n_b_fg')
property var foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'w_h_b_fg')
property var foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'w_p_b_fg')
property color backgroundHiddenPartNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_n', icon, 'l_n_b_bg').color
property color backgroundHiddenPartHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_h', icon, 'l_h_b_bg').color
property color backgroundHiddenPartPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_p', icon, 'l_p_b_bg').color
property var backgroundHiddenPartNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_n', icon, 'l_n_b_bg')
property var backgroundHiddenPartHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_h', icon, 'l_h_b_bg')
property var backgroundHiddenPartPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_p', icon, 'l_p_b_bg')
property color foregroundHiddenPartNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_n', icon, 'l_n_b_fg').color
property color foregroundHiddenPartHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_h', icon, 'l_h_b_fg').color
property color foregroundHiddenPartPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_p', icon, 'l_p_b_fg').color
property var foregroundHiddenPartNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_n', icon, 'l_n_b_fg')
property var foregroundHiddenPartHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_h', icon, 'l_h_b_fg')
property var foregroundHiddenPartPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_p', icon, 'l_p_b_fg')
}
property QtObject pauseAction: QtObject {
property int iconSize: 25
property string name : 'pause'
property string icon : 'chat_audio_pause_custom'
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_h_b_bg').color
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg').color
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg').color
property color backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg').color
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg').color
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg').color
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg').color
property color foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg').color
property var backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_h_b_bg')
property var backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg')
property var backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg')
property var backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg')
property var foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg')
property var foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg')
property var foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg')
property var foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg')
}
property QtObject playAction: QtObject {
property int iconSize: 25
property string name : 'play'
property string icon : 'chat_audio_play_custom'
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_h_b_bg').color
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg').color
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg').color
property color backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg').color
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg').color
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg').color
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg').color
property color foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg').color
property var backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_h_b_bg')
property var backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg')
property var backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg')
property var backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg')
property var foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg')
property var foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg')
property var foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg')
property var foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg')
}
property QtObject speakerOn: QtObject {
property int iconSize: 25
property string icon : 'speaker_on_custom'
property string name : 'speakerOn'
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_h_b_bg').color
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg').color
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg').color
property color backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg').color
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg').color
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg').color
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg').color
property color foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg').color
property var backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_h_b_bg')
property var backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg')
property var backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg')
property var backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg')
property var foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg')
property var foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg')
property var foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg')
property var foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg')
}
property QtObject speakerOff: QtObject {
property int iconSize: 25
property string icon : 'speaker_off_custom'
property string name : 'speakerOff'
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_h_b_bg').color
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg').color
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg').color
property color backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg').color
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg').color
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg').color
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg').color
property color foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg').color
property var backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_h_b_bg')
property var backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg')
property var backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg')
property var backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg')
property var foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg')
property var foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg')
property var foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg')
property var foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg')
}
property QtObject exportFile: QtObject{
property string icon: 'download_custom'
@ -93,14 +93,14 @@ QtObject {
property int height: 20
property int pointSize: Units.dp * 8
property int iconSize: 25
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_h_b_bg').color
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg').color
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg').color
property color backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg').color
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg').color
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg').color
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg').color
property color foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg').color
property var backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 's_h_b_bg')
property var backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg')
property var backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg')
property var backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg')
property var foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg')
property var foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg')
property var foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg')
property var foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg')
}
property QtObject extension: QtObject {
property string unknownIcon: 'file_unknown_custom'

View file

@ -37,7 +37,7 @@ Loader{
active: contentModel && contentModel.isVoiceRecording()
onContentModelChanged: if(contentModel){
tempFile.createFileFromContent(contentModel, false);
tempFile.createFileFromContentModel(contentModel, false);
}
TemporaryFile {

View file

@ -72,7 +72,7 @@ DialogPlus {
Text {
elide: Text.ElideRight
font.pointSize: AboutStyle.copyrightBlock.url.pointSize
linkColor: AboutStyle.copyrightBlock.url.color
linkColor: AboutStyle.copyrightBlock.url.colorModel.color
text: '<a href="'+applicationUrl+'">'+applicationUrl+'</a>'
width: parent.width