Funções de sistema

O AppStudio AppFramework contém vários componentes que fornecem acesso às funções de sistema padrão e bem conhecidas. Embora estes componentes não sejam necessários para utilizar estas funções em seu aplicativo, a implementação de componentes deve ser considerada quando planejar o uso destas funções.

Área de transferência

Por padrão, não há nada que impeça um aplicativo do AppStudio de acessar as funções de cortar, copiar e colar da área de transferência do sistema, e você não precisa escrever nenhum código se esta for sua intenção. Para fluxos de trabalhos mais complexos envolvendo a área de transferência, incluindo copiar itens como cores e objetos JavaScript, o componente Clipboard fornece o acesso mais detalhado para a área de transferência do sistema.

O componente Clipboard contém múltiplas propriedades e métodos para retornar o conteúdo da área de transferência do sistema, dependendo do tipo de dados armazenados nele. A propriedade text retorna o conteúdo como uma string de texto se possível, sem formatação e potencialmente com HTML visíveis, dependendo do conteúdo da área de transferência.

TextArea {
    id: textArea
                    
    Layout.fillWidth: true
    Layout.fillHeight: true
                    
    text: AppFramework.clipboard.text
    readOnly: true
}

A propriedade html , no entanto, destina-se principalmente a ler e exibir conteúdo HTML. Esta propriedade também é capaz de ler e recuperar a formatação de texto mais complexa, que a seguinte amostra de código utiliza anexando a propriedadea uma área de texto com formato de rich texto ativado.

TextArea {
    id: htmlTextArea                        Layout.fillWidth: true    Layout.fillHeight: true                        text: AppFramework.clipboard.html    textFormat: Text.RichText    readOnly: true
}

Os valores de cores são armazenados como um tipo application/x-color MIME e podem somente ser gravados ou retornados pela propriedade color .

O componente Clipboard não tem interação com imagens na área de transferência do sistema (embora, dependendo da fonte, a propriedade text pode retornar uma URL). Ao contrário, o componente ImageObject fornece os métodos copyFromClipboard e pasteFromClipboard para interação.

Flow {
    Layout.fillWidth: true                ImageObject {
        id: imageObject    }
                Button {
        text: "Clear Image"
        enabled: !imageObject.empty                        onClicked: {
            imageObject.clear();
        }
    }
                Button {
        text: "Copy"
        enabled: !imageObject.empty                        onClicked: {
            imageObject.copyToClipboard();
        }
    }
                Button {
        text: "Paste"
        enabled: imageObject.canPasteFromClipboard                        onClicked: {
            imageObject.pasteFromClipboard();
        }
    }
}

Funcionalidade de compartilhamento

Você pode compartilhar texto, URLs ou arquivos para outros aplicativos utilizando a funcionalidade de compartilhamento fornecida pela Área de Transferência do AppFramework. O método share de componente da Área de Trabalho é utilizado para compartilhar qualquer texto ou URL de entrada. Se compartilhar um arquivo, o método share precisa que você forneça a URL de localização do arquivo. O seguinte snippet de código mostra como utilizar este método, compartilhando o texto inserido em um campo de texto.

property url shareURL
TextField {
    id: inputText    placeholderText: "Enter something to share"
}
Button {
    text: "Share as text"
    onClicked: {
        AppFramework.clipboard.share(inputText.text)    }
}
Button {
    text: "Share as Url"
    onClicked: {
        shareURL = inputText.text        AppFramework.clipboard.share(shareURL)    }
}

Atualmente, esta funcionalidade é suportada somente nas plataformas MacOS, iOS e Android.

Para um exemplo desta funcionalidade em uso, consulte o aplicativo de amostra disponível em ArcGIS AppStudio ou no repositório de GitHub das amostras do AppStudio.

Informações locais

Um local é um valor padronizado que descreve um idioma ou dialeto, incluindo detalhes como alfabeto utilizado, marcadores decimais e formato de data. Ao utilizar um código local válido, você pode substituir o local padrão do seu sistema e fornecer uma série de maneiras importantes que as informações em seu aplicativo serão exibidas.

Estes locais podem ser passados no aplicativo pelo uso do componente LocaleInfo , que contém propriedades para definir um local, assim como mapear o local constantemente através dos padrões e outras seções do seu aplicativo. No AppStudio, um exemplo é utilizar LocaleInfo para determinar o idioma de uma caixa de diálogo de registro do OAuth no ArcGIS Online. Para fazer isto, primeiro instancie LocaleInfo, e informe o local inicial e quando o local foi alterado.

property string localeName
property string oauthUrlFormat: "https://www.arcgis.com/sharing/rest/oauth2/authorize?client_id=arcgisonline&redirect_uri=http://www.arcgis.com&response_type=token&locale=%1"
property url oauthUrl
    
Component.onCompleted: {
    // Get the current Locale from the system's locale settings
    localeName = Qt.locale().name;
}
LocaleInfo {
    id: localeInfo
    name: localeName
    //  update the properties and the OAuth page when the app Locale is changed
    onLocaleChanged: {
        localeInfoModel.update(localeInfo);
        oauthUrl = oauthUrlFormat.arg(esriName);
        if (oauthTab.item) {
            oauthTab.item.url = oauthUrl;
        }
    }
}

Para atualizar o local do aplicativo, adicione um campo de texto para exibir e editar o local.

Text {
    text: "Locale search"
}
// locale Name provided by the user for the app e.g. fr-Fr, en-GB, de_DE TextField {
    id: localeField    Layout.fillWidth: true    text: localeName    placeholderText: "Locale"
    onEditingFinished: {
        localeName = text;
    }
    function update(name) {
        text = name;
        editingFinished();
    }
}

Já que as outras propriedades do LocaleInfo não serão atualizados durante a sincronização, é necessário uma função atualizá-las. Para os propósitos deste fluxo de trabalho, a função também estará em uma lista de modelos que pode ser exposta na interface do usuário.

// Model to list the properties associated with the LocaleInfo ListModel {
    id: localeInfoModel    // function to update the properties when the Locale is changed in the textbox    function update(localeInfo) {
        clear();
        add("name",                 localeInfo.name);
        add("ietfName",             localeInfo.ietfName);
        add("esriName",             localeInfo.esriName);
        add("languageName",         localeInfo.languageName);
        add("languageCode",         localeInfo.languageCode);
        add("countryName",          localeInfo.countryName);
        add("countryCode",          localeInfo.countryCode);
        add("scriptName",           localeInfo.scriptName);
        add("scriptCode",           localeInfo.scriptCode);
    }
    function add(name, value) {
        append({
            name: name,            value: value.toString()        });
    }
}

Após o modelo de lista ser configurado, você pode adicionar uma visualização da web a um registro do OAuth, que será exibido no local declarado no campo de texto anterior. Neste caso, a visualização da web é exibida como parte de uma visualização de tabela ao lado da lista de propriedades do LocaleInfo acima.

TabView {
    Layout.fillWidth: true    Layout.fillHeight: true
    Tab {
        id: localeInfoTab        title: "LocaleInfo"
        TableView {
            model: localeInfoModel
            TableViewColumn {
                role: "name"
                title: "Property"
            }
            TableViewColumn {
                role: "value"
                title: "Value"
            }
        }
    }
    Tab {
        id: oauthTab        title: "Sign In Page"
        WebView {
            // Load the OAuth url in the webView.            Component.onCompleted: {
                url = oauthUrl;
            }
        }
    }
}

Esteja ciente que controlar o código de local e alterar a apresentação do seu aplicativo que depende disto são somente parte do processo de localização. Para mais informações, consulte Globalizar seu aplicativo.

URLs

Para executar operações complexas com URLs, o componente UrlInfo fornece propriedades e métodos para construir e desconstruir URLs. Estas propriedades e métodos podem ser utilizados para construir dinamicamente uma URL ou derivar componentes individuais de um. A seção seguinte do código mostra como utilizar UrlInfo para extrair os parâmetros de uma consulta a partir de uma URL, neste caso, um serviço de feição. A edições realizadas para a consulta extraída quando o aplicativo de amostra for executado são então juntados e apresentados como uma nova URL.

Column {
    id: cl    width: parent.width    spacing: 5
    UrlInfo {
        id: urlInfo    }
    Text {
        text: "Your initial URL:"
        wrapMode: Text.WrapAnywhere        width: parent.width    }
    TextArea {
        id: urlField        selectByMouse: true        cursorPosition: 1        wrapMode: "Wrap"
        width: parent.width        font.pixelSize: 10        horizontalAlignment :TextInput.AlignLeft        text:"https://csmgisweb.smgov.net/csmgis01/rest/services/admin_boundaries/zoning/MapServer/0/query?objectIds=99,100&time=&geometry=&geometryType=esriGeometryPoint&inSR=&spatialRel=esriSpatialRelContains&f=html"
        onTextChanged: {
            urlInfo.fromUserInput(text);
        }
    }
    CheckBox {
        text: "<b>Is a query present?</b>"
        checked: urlInfo.hasQuery        enabled: false        padding: 0    }
    Text {
        text: "<b>The query for your URL</b>: "
        wrapMode: Text.WrapAnywhere        width: parent.width    }
    Text {
        text: "Edit the query, and the URL below it will update with your changes."
        wrapMode: Text.WrapAnywhere        width: parent.width    }
    TextArea {
        id: queryField        text: JSON.stringify(urlInfo.queryParameters, undefined, 2)        wrapMode: Text.WrapAnywhere        width: parent.width
        onTextChanged: {
            urlInfo.queryParameters = JSON.parse(text);
        }
    }
    Text {
        text: "<b>Your URL with updated query:<b>"
        wrapMode: Text.WrapAnywhere        width: parent.width    }
    TextField {
        id: reQueried        text: urlInfo.url        wrapMode: Text.WrapAnywhere        width: parent.width    }
}