diff --git a/libgraphtheory/editorplugins/assignvalues/assignvaluesplugin.json b/libgraphtheory/editorplugins/assignvalues/assignvaluesplugin.json
index db273232..69eac8b9 100644
--- a/libgraphtheory/editorplugins/assignvalues/assignvaluesplugin.json
+++ b/libgraphtheory/editorplugins/assignvalues/assignvaluesplugin.json
@@ -1,57 +1,60 @@
{
"Encoding": "UTF-8",
"KPlugin": {
"Category": "Plugins",
"Description": "Assign values to graph edges and nodes.",
"Description[ca@valencia]": "Assigna valors a les arestes i nodes del graf.",
"Description[ca]": "Assigna valors a les arestes i nodes del graf.",
"Description[de]": "Werte zu Graphenkanten und -knoten zuweisen.",
+ "Description[en_GB]": "Assign values to graph edges and nodes.",
"Description[es]": "Asignar valores a aristas de grafos y a nodos.",
"Description[et]": "Väärtuste omistamine graafi seostele ja tippudele.",
"Description[fi]": "Sijoita arvot graafin väleihin ja solmuihin.",
"Description[fr]": "Assigne des valeurs aux arêtes et aux sommets d'un graphe.",
"Description[gl]": "Asigna valores ás arestas e vértices do gráfico.",
"Description[it]": "Assegna valori ad archi e nodi di un grafo.",
"Description[nl]": "Waarden toekennen aan randen en knooppunten van grafen.",
"Description[pl]": "Przypisz wartości krawędziom i węzłom grafu",
"Description[pt]": "Atribui valores às arestas e nós do grafo.",
"Description[pt_BR]": "Atribuir valores às bordas e nós do grafo.",
"Description[ru]": "Присваивает значения рёбрам и вершинам графа.",
"Description[sk]": "Priradiť hodnoty k okrajom grafu a uzlom.",
"Description[sl]": "Povezavam in vozliščem grafa dodeli vrednosti.",
"Description[sv]": "Tilldela värden till grafkanter och noder.",
"Description[tr]": "Değerleri grafik kenarlarına ve düğümlerine ata.",
"Description[uk]": "Додавання значень до ребер та вузлів графу.",
"Description[x-test]": "xxAssign values to graph edges and nodes.xx",
+ "Description[zh_TW]": "指定值給圖形邊緣與節點。",
"Id": "rocs_assignvaluesplugin",
"License": "GPL",
"Name": "Assign Values Plugin",
"Name[ast]": "Complementu d'asignación de valores",
"Name[ca@valencia]": "Connector per assignar valors",
"Name[ca]": "Connector per assignar valors",
"Name[cs]": "Modul pro přiřazování hodnot",
"Name[de]": "Wertzuweisungs-Modul",
+ "Name[en_GB]": "Assign Values Plugin",
"Name[es]": "Complemento para asignar valores",
"Name[et]": "Väärtuste omistamise plugin",
"Name[fi]": "Sijoita arvot -liitännäinen",
"Name[fr]": "Module d'extension pour assigner des valeurs",
"Name[gl]": "Complemento de asignar valores",
"Name[it]": "Estensione di assegnazione valori",
"Name[nl]": "Plug-in voor waarden toekennen",
"Name[pl]": "Wtyczka przypisywania wartości",
"Name[pt]": "'Plugin' de Atribuição de Valores",
"Name[pt_BR]": "Plugin de atribuição de valores",
"Name[ru]": "Модуль присвоения значений",
"Name[sk]": "Plugin priradenia hodnôt",
"Name[sl]": "Vstavek za dodeljevanje vrednosti",
"Name[sv]": "Insticksprogram för att tilldela värden",
"Name[tr]": "Değerleri Ata",
"Name[uk]": "Додаток пов’язування значень",
"Name[x-test]": "xxAssign Values Pluginxx",
"Name[zh_TW]": "指定值外掛程式",
"ServiceTypes": [
"rocs/editorplugins"
],
"Version": "0.2"
}
}
\ No newline at end of file
diff --git a/libgraphtheory/editorplugins/generategraph/generategraphplugin.json b/libgraphtheory/editorplugins/generategraph/generategraphplugin.json
index 9ffe8471..b497c370 100644
--- a/libgraphtheory/editorplugins/generategraph/generategraphplugin.json
+++ b/libgraphtheory/editorplugins/generategraph/generategraphplugin.json
@@ -1,73 +1,76 @@
{
"Encoding": "UTF-8",
"KPlugin": {
"Category": "Plugins",
"Description": "This generates a new graph by a pattern.",
"Description[ast]": "Esto xenera un grafu nuevu por un patrón.",
"Description[ca@valencia]": "Això genera un nou graf segons un patró.",
"Description[ca]": "Això genera un nou graf segons un patró.",
"Description[de]": "Erstellt anhand eines Musters einen neuen Graphen.",
+ "Description[en_GB]": "This generates a new graph by a pattern.",
"Description[es]": "Esto genera un nuevo grafo usando un patrón.",
"Description[et]": "Uue graafi genereerimine mustri järgi.",
"Description[fi]": "Tämä generoi uuden graafin mallin perusteella.",
"Description[fr]": "Cette fonction génère un nouveau graphe à l'aide d'un motif.",
"Description[gl]": "Xera un gráfico novo segundo un padrón.",
"Description[it]": "Questo genera un nuovo grafo secondo uno schema.",
"Description[nl]": "Dit genereert een nieuwe graaf naar een patroon.",
"Description[pl]": "Generuje to nowy graf według wzorca.",
"Description[pt]": "Isto gera um novo grafo com base num dado padrão.",
"Description[pt_BR]": "Isto gera um novo grafo de acordo com um padrão.",
"Description[ru]": "Создаёт новый граф по шаблону.",
"Description[sk]": "Toto generuje nový graf podľa vzoru.",
"Description[sl]": "Po vzorcu ustvari nov graf.",
"Description[sv]": "Skapar en ny graf enligt ett mönster.",
"Description[tr]": "Bu, bir desene göre bir grafik oluşturur.",
"Description[uk]": "Створює новий граф за шаблоном.",
"Description[x-test]": "xxThis generates a new graph by a pattern.xx",
+ "Description[zh_TW]": "依樣式產生新的圖形。",
"Id": "rocs_generategraphplugin",
"License": "GPL",
"Name": "Generate Graph",
"Name[ast]": "Xenerar grafu",
"Name[bg]": "Създаване на графика",
"Name[bs]": "Generiši Graf",
"Name[ca@valencia]": "Genera el graf",
"Name[ca]": "Genera el graf",
"Name[cs]": "Vygenerovat graf",
"Name[da]": "Generér graf",
"Name[de]": "Graphen erstellen",
"Name[el]": "Δημιουργία γράφου",
+ "Name[en_GB]": "Generate Graph",
"Name[es]": "Generar grafo",
"Name[et]": "Graafi genereerimine",
"Name[fi]": "Generoi graafi",
"Name[fr]": "Générer un graphe",
"Name[gl]": "Xerar un gráfico",
"Name[hu]": "Gráf készítése",
"Name[it]": "Genera grafo",
"Name[kk]": "Графты құру",
"Name[km]": "បង្កើតក្រាហ្វ",
"Name[ko]": "그래프 생성",
"Name[lt]": "Generuoti grafiką",
"Name[lv]": "Ģenerēt grafu",
"Name[mr]": "आलेख बनवा",
"Name[nb]": "Lag graf",
"Name[nds]": "Diagramm opstellen",
"Name[nl]": "Graaf genereren",
"Name[pl]": "Generuj graf",
"Name[pt]": "Gerar um Grafo",
"Name[pt_BR]": "Gerar o grafo",
"Name[ru]": "Построитель графа",
"Name[sk]": "Generovať graf",
"Name[sl]": "Ustvari graf",
"Name[sv]": "Skapa graf",
"Name[tr]": "Grafik Oluştur",
"Name[ug]": "گرافنى ھاسىل قىل",
"Name[uk]": "Створення графу",
"Name[x-test]": "xxGenerate Graphxx",
"Name[zh_CN]": "生成图",
"Name[zh_TW]": "產生圖形",
"ServiceTypes": [
"rocs/editorplugins"
],
"Version": "0.2"
}
}
\ No newline at end of file
diff --git a/libgraphtheory/editorplugins/transformedges/transformedgesplugin.json b/libgraphtheory/editorplugins/transformedges/transformedgesplugin.json
index 32b0c768..877be4ab 100644
--- a/libgraphtheory/editorplugins/transformedges/transformedgesplugin.json
+++ b/libgraphtheory/editorplugins/transformedges/transformedgesplugin.json
@@ -1,69 +1,72 @@
{
"Encoding": "UTF-8",
"KPlugin": {
"Category": "Plugins",
"Description": "Transform graph edges by a transformation rule.",
"Description[ast]": "Tresforma los berbesos del grafu pente una regla de tresformación.",
"Description[ca@valencia]": "Transforma les arestes del graf seguint una regla de transformació.",
"Description[ca]": "Transforma les arestes del graf seguint una regla de transformació.",
"Description[de]": "Graphenkanten mittels Transformationsregel umformen.",
+ "Description[en_GB]": "Transform graph edges by a transformation rule.",
"Description[es]": "Transforma las aristas del grafo usando una regla de transformación.",
"Description[et]": "Graafi seoste teisendamine vastava reegli järgi.",
"Description[fi]": "Muuntaa graafin välit säännön mukaan.",
"Description[fr]": "Transforme les arêtes d'un graphe à l'aide d'une règle de transformation.",
"Description[gl]": "Transforma as arestas do gráfico segundo unha regra de transformación.",
"Description[it]": "Trasforma gli archi di un grafo con una regola di trasformazione.",
"Description[nl]": "Kanten van de graaf volgens een bepaalde regel transformeren.",
"Description[pl]": "Przekształć krawędzie grafu według reguły przekształcania.",
"Description[pt]": "Transforma as arestas do grafo com base numa regra de transformação.",
"Description[pt_BR]": "Transformar os cantos do grafo de acordo com uma regra de transformação.",
"Description[ru]": "Преобразует рёбра графа по заданному правилу.",
"Description[sk]": "Transformácia hrán grafu podľa transformačného pravidla.",
"Description[sl]": "Po pravilu preoblikuje povezave grafa.",
"Description[sv]": "Transformerar grafernas kanter med en transformeringsregel.",
"Description[tr]": "Grafik kenarlarını bir dönüştürme kuralı ile dönüştür.",
"Description[uk]": "Перетворити ребра графу за правилом перетворення.",
"Description[x-test]": "xxTransform graph edges by a transformation rule.xx",
+ "Description[zh_TW]": "依轉換規則來轉換圖形邊緣。",
"Id": "rocs_transformedges",
"License": "GPL",
"Name": "Transform Edges",
"Name[ast]": "Tresformar berbesos",
"Name[bs]": "Trasformiši ivice",
"Name[ca@valencia]": "Transforma les arestes",
"Name[ca]": "Transforma les arestes",
"Name[da]": "Transformér kanter",
"Name[de]": "Kanten umformen",
"Name[el]": "Μετασχηματισμός ακμών",
+ "Name[en_GB]": "Transform Edges",
"Name[es]": "Transformar aristas",
"Name[et]": "Seoste teisendamine",
"Name[fi]": "Muunna välit",
"Name[fr]": "Transformer des arêtes",
"Name[gl]": "Transformar as arestas",
"Name[hu]": "Élek átalakítása",
"Name[it]": "Trasforma archi",
"Name[kk]": "Қырларын түрлендіру",
"Name[km]": "ប្លែងគែម",
"Name[ko]": "선 변형",
"Name[lt]": "Transformuoti briaunas",
"Name[lv]": "Transformēt šķautnes",
"Name[nb]": "Omform kanter",
"Name[nds]": "Kanten wanneln",
"Name[nl]": "Kanten transformeren",
"Name[pl]": "Przekształć krawędzie",
"Name[pt]": "Transformar as Arestas",
"Name[pt_BR]": "Transformar os cantos",
"Name[ru]": "Преобразование рёбер",
"Name[sk]": "Transformácia hrán",
"Name[sl]": "Preoblikuj povezave",
"Name[sv]": "Transformera kanter",
"Name[tr]": "Kenarları Dönüştür",
"Name[uk]": "Перетворення ребер",
"Name[x-test]": "xxTransform Edgesxx",
"Name[zh_CN]": "转换边",
"Name[zh_TW]": "轉換邊緣",
"ServiceTypes": [
"rocs/editorplugins"
],
"Version": "0.2"
}
}
\ No newline at end of file
diff --git a/libgraphtheory/fileformats/dot/dotfileformat.json b/libgraphtheory/fileformats/dot/dotfileformat.json
index 155f4522..435f013b 100644
--- a/libgraphtheory/fileformats/dot/dotfileformat.json
+++ b/libgraphtheory/fileformats/dot/dotfileformat.json
@@ -1,59 +1,62 @@
{
"Encoding": "UTF-8",
"KPlugin": {
"Category": "Plugins",
"Description": "Read and write Graphviz graph documents (DOT)",
"Description[ast]": "Llee y escribe documentos (DOT) de grafos Graphviz",
"Description[ca@valencia]": "Llig i escriu documents gràfics del Graphviz (DOT).",
"Description[ca]": "Llegeix i escriu documents gràfics del Graphviz (DOT).",
"Description[cs]": "Čte a ukládá soubory grafů Graphviz (DOT)",
"Description[de]": "Graphviz-Graphendokumente (DOT) lesen und schreiben",
+ "Description[en_GB]": "Read and write Graphviz graph documents (DOT)",
"Description[es]": "Leer y escribir documentos de grafos Graphviz (DOT)",
"Description[et]": "Graphvizi graafidokumentide (DOT) lugemine ja kirjutamine.",
"Description[fi]": "Lukee ja kirjoittaa Graphviz-graafitiedostoja (DOT)",
"Description[fr]": "Lit et écrit des documents de graphes « Graphviz » (« DOT »)",
"Description[gl]": "Le e escribe documentos de gráficos de Graphviz (DOT)",
"Description[it]": "Leggi e scrivi i grafi Graphviz (DOT)",
"Description[nl]": "Lezen en schrijven van Graphviz grafiekbestanden (DOT)",
"Description[pl]": "Czytaj i zapisuj dokumenty grafów Graphviz (DOT)",
"Description[pt]": "Lê e grava documentos de grafos no Graphviz (DOT)",
"Description[pt_BR]": "Lê e grava documentos de grafo do Graphviz (DOT)",
"Description[ru]": "Читает и записывает определения графов Graphviz (DOT)",
"Description[sk]": "Čítanie a zápis grafických dokumentov Graphviz (DOT)",
"Description[sl]": "Branje in pisanje dokumentov grafov Graphviz (DOT)",
"Description[sv]": "Läs och skriv Graphviz-grafdokument (DOT)",
"Description[tr]": "Graphviz grafik belgelerini oku ve yaz (DOT)",
"Description[uk]": "Читання і запис файлів документів графів Graphviz (DOT)",
"Description[x-test]": "xxRead and write Graphviz graph documents (DOT)xx",
+ "Description[zh_TW]": "讀寫 Graphviz 圖形檔 (DOT)。",
"Id": "rocs_dotfileformat",
"License": "GPL",
"Name": "DOT Graph File Format",
"Name[ast]": "Formatu de ficheru de grafos DOT",
"Name[ca@valencia]": "Format de fitxer de grafs DOT",
"Name[ca]": "Format de fitxer de grafs DOT",
"Name[cs]": "Formát souborů grafů DOT",
"Name[de]": "DOT-Graphendateiformat",
+ "Name[en_GB]": "DOT Graph File Format",
"Name[es]": "Formato de archivo de grafos DOT",
"Name[et]": "DOT graafifailivorming",
"Name[fi]": "DOT-graafitiedostomuoto",
"Name[fr]": "Format de fichier de graphe « DOT »",
"Name[gl]": "Complemento do formato de ficheiros de gráficos DOT",
"Name[it]": "Formato di file di grafi DOT",
"Name[nl]": "Bestandsformaat voor DOT Graph",
"Name[pl]": "Format plików grafów DOT",
"Name[pt]": "Formato de Ficheiros de Grafos do DOT",
"Name[pt_BR]": "Formato de arquivo de grafo DOT",
"Name[ru]": "Поддержка файлов графов DOT",
"Name[sk]": "Súborový formát grafu DOT",
"Name[sl]": "Vrsta datotek grafov DOT",
"Name[sv]": "DOT-graffilformat",
"Name[tr]": "DOT Grafik Dosya Biçimi",
"Name[uk]": "формат файлів графів DOT",
"Name[x-test]": "xxDOT Graph File Formatxx",
"Name[zh_TW]": "DOT 圖形檔案格式",
"ServiceTypes": [
"rocs/graphtheory/fileformat"
],
"Version": "0.1"
}
}
\ No newline at end of file
diff --git a/libgraphtheory/fileformats/gml/gmlfileformat.json b/libgraphtheory/fileformats/gml/gmlfileformat.json
index 2de0bfcf..a324701c 100644
--- a/libgraphtheory/fileformats/gml/gmlfileformat.json
+++ b/libgraphtheory/fileformats/gml/gmlfileformat.json
@@ -1,59 +1,62 @@
{
"Encoding": "UTF-8",
"KPlugin": {
"Category": "Plugins",
"Description": "Read and write Graph Markup Language documents (GML)",
"Description[ast]": "Llee y escribe documentos del llinguax de marques de grafos (GML)",
"Description[ca@valencia]": "Llig i escriu fitxers escrits en Llenguatge de Marcatge de Gràfics (GML)",
"Description[ca]": "Llegeix i escriu fitxers escrits en Llenguatge de Marcatge de Gràfics (GML)",
"Description[cs]": "Číst a ukládat dokumenty Graph Markup Language (GML)",
"Description[de]": "Dokumente im Format „Graph Markup Language“ (GML) lesen und schreiben",
+ "Description[en_GB]": "Read and write Graph Markup Language documents (GML)",
"Description[es]": "Leer y escribir documentos del lenguaje de marcas de grafos (GML)",
"Description[et]": "GML (Graph Markup Language) dokumentide lugemine ja kirjutamine.",
"Description[fi]": "Lukee ja kirjoittaa Graph Markup Language (GML) -tiedostoja",
"Description[fr]": "Lit et écrit des documents au format « Graph Markup Language » (« GML »)",
"Description[gl]": "Le e escribe documentos na linguaxe de etiquetaxe de gráficos (GML)",
"Description[it]": "Leggi e scrivi i documenti scritti in Graph Markup Language (GML)",
"Description[nl]": "Lezen en schrijven van Graph Markup Language documenten (GML)",
"Description[pl]": "Czytaj i zapisuj dokumenty Graph Markup Language (GML)",
"Description[pt]": "Lê e grava documentos no formato GML (Graph Markup Language)",
"Description[pt_BR]": "Lê e grava documentos no formato Graph Markup Language (GML)",
"Description[ru]": "Читает и записывает документы GML (язык разметки графов)",
"Description[sk]": "Čítanie a zápis dokumentov Graph Markup Language (GML)",
"Description[sl]": "Branje in pisanje dokumentov grafov Graph Markup Language (GML)",
"Description[sv]": "Läs och skriv GML-dokument (Graph Markup Language)",
"Description[tr]": "Graph İşaret Dili belgelerini oku ve yaz (GML)",
"Description[uk]": "Читання і запис файлів у форматі Graph Markup Language (GML).",
"Description[x-test]": "xxRead and write Graph Markup Language documents (GML)xx",
+ "Description[zh_TW]": "讀寫 Graph Markup Language 文件 (GML) 。",
"Id": "rocs_gmlfileformat",
"License": "GPL",
"Name": "GML File Format",
"Name[ast]": "Formatu de ficheru GML",
"Name[ca@valencia]": "Format de fitxer GML",
"Name[ca]": "Format de fitxer GML",
"Name[cs]": "Formát souboru GML",
"Name[de]": "GML-Dateiformat",
+ "Name[en_GB]": "GML File Format",
"Name[es]": "Formato de archivo GML",
"Name[et]": "GML-failivorming",
"Name[fi]": "GML-tiedostomuoto",
"Name[fr]": "Format de fichier GML",
"Name[gl]": "Formato de ficheiro GML",
"Name[it]": "Formato di file GML",
"Name[nl]": "GML-bestandsformaat",
"Name[pl]": "Format pliku GML",
"Name[pt]": "Formato de Ficheiro GML",
"Name[pt_BR]": "Formato de arquivo GML",
"Name[ru]": "Поддержка файлов графов GML",
"Name[sk]": "Formát súborov GML",
"Name[sl]": "Vrsta datotek GML",
"Name[sv]": "GML-filformat",
"Name[tr]": "GML Dosya Biçimi",
"Name[uk]": "формат файлів GML",
"Name[x-test]": "xxGML File Formatxx",
"Name[zh_TW]": "GML 檔案格式",
"ServiceTypes": [
"rocs/graphtheory/fileformat"
],
"Version": "0.1"
}
}
\ No newline at end of file
diff --git a/libgraphtheory/fileformats/rocs1/rocs1fileformat.json b/libgraphtheory/fileformats/rocs1/rocs1fileformat.json
index 00595570..4785d7ca 100644
--- a/libgraphtheory/fileformats/rocs1/rocs1fileformat.json
+++ b/libgraphtheory/fileformats/rocs1/rocs1fileformat.json
@@ -1,59 +1,62 @@
{
"Encoding": "UTF-8",
"KPlugin": {
"Category": "Plugins",
"Description": "Rocs Graph File Format (old)",
"Description[ast]": "Formatu de ficheru de grafos Rocs (vieyu)",
"Description[ca@valencia]": "Format de fitxers de grafs del Rocs (antic)",
"Description[ca]": "Format de fitxers de grafs del Rocs (antic)",
"Description[cs]": "Formát souborů grafů Rocs (starý)",
"Description[de]": "Rocs-Graphendatei-Format (veraltet)",
+ "Description[en_GB]": "Rocs Graph File Format (old)",
"Description[es]": "Formato de archivo de grafos de Rocs (antiguo)",
"Description[et]": "Rocsi graafifaili vorming (vana)",
"Description[fi]": "Rocsin graafitiedostomuoto (vanha)",
"Description[fr]": "Format de fichier de graphe Rocs (ancien)",
"Description[gl]": "Formato de ficheiro de gráficos de Rocs (vello)",
"Description[it]": "Formato di file di grafi di Rocs (vecchio)",
"Description[nl]": "Bestandsformaat voor Rocs Graph (oud)",
"Description[pl]": "Format plików grafów Rocs (stary)",
"Description[pt]": "Formato de Ficheiro de Grafo do Rocs (antigo)",
"Description[pt_BR]": "Formato de arquivo de grafo do Rocs (antigo)",
"Description[ru]": "Формат файлов графов Rocs 1 (старый формат)",
"Description[sk]": "Súborový formát grafu Rocs (starý)",
"Description[sl]": "Vrsta datotek z grafi Rocs (stara)",
"Description[sv]": "Rocs-graffilformat (gammalt)",
"Description[tr]": "Rocs Grafik Dosya Biçimi (eski)",
"Description[uk]": "формат файлів графів Rocs (застарілий)",
"Description[x-test]": "xxRocs Graph File Format (old)xx",
+ "Description[zh_TW]": "Rocs 圖形檔格式(舊式)",
"Id": "rocs_rocs1fileformat",
"License": "GPL",
"Name": "Rocs File Format (old)",
"Name[ast]": "Formatu de ficheru Rocs (vieyu)",
"Name[ca@valencia]": "Format de fitxer del Rocs (antic)",
"Name[ca]": "Format de fitxer del Rocs (antic)",
"Name[cs]": "Formát souborů Rocs (starý)",
"Name[de]": "Rocs-Dateiformat (veraltet)",
+ "Name[en_GB]": "Rocs File Format (old)",
"Name[es]": "Formato de archivo de Rocs (antiguo)",
"Name[et]": "Rocsi failivorming (vana)",
"Name[fi]": "Rocsin tiedostomuoto (vanha)",
"Name[fr]": "Format de fichier Rocs (ancien)",
"Name[gl]": "Formato de ficheiro de Rocs (vello)",
"Name[it]": "Formato di file di Rocs (vecchio)",
"Name[nl]": "Rocs-bestandsformaat (oud)",
"Name[pl]": "Format plików Rocs (stary)",
"Name[pt]": "Formato de Ficheiro do Rocs (antigo)",
"Name[pt_BR]": "Formato de arquivo do Rocs (antigo)",
"Name[ru]": "Поддержка файлов графов Rocs 1 (старый формат)",
"Name[sk]": "Formát súborov Rocs (starý)",
"Name[sl]": "Vrsta datotek Rocs (stara)",
"Name[sv]": "Rocs-filformat (gammalt)",
"Name[tr]": "Rocs Dosya Biçimi (eski)",
"Name[uk]": "формат файлів Rocs (застарілий)",
"Name[x-test]": "xxRocs File Format (old)xx",
"Name[zh_TW]": "Rocs 檔案格式(舊)",
"ServiceTypes": [
"rocs/graphtheory/fileformat"
],
"Version": "0.1"
}
}
\ No newline at end of file
diff --git a/libgraphtheory/fileformats/rocs2/rocs2fileformat.json b/libgraphtheory/fileformats/rocs2/rocs2fileformat.json
index 6a1bd3d2..4566d1bf 100644
--- a/libgraphtheory/fileformats/rocs2/rocs2fileformat.json
+++ b/libgraphtheory/fileformats/rocs2/rocs2fileformat.json
@@ -1,59 +1,62 @@
{
"Encoding": "UTF-8",
"KPlugin": {
"Category": "Plugins",
"Description": "Rocs Graph File Format",
"Description[ast]": "Formatu de ficheru de grafos Rocs",
"Description[ca@valencia]": "Format de fitxers de graf del Rocs",
"Description[ca]": "Format de fitxers de graf del Rocs",
"Description[cs]": "Formát souborů grafů Rocs",
"Description[de]": "Rocs-Graphendatei-Format",
+ "Description[en_GB]": "Rocs Graph File Format",
"Description[es]": "Formato de archivo de grafos de Rocs",
"Description[et]": "Rocsi graafifaili vorming",
"Description[fi]": "Rocsin graafitiedostomuoto",
"Description[fr]": "Format de fichier de graphe Rocs",
"Description[gl]": "Formato de ficheiro de gráficos de Rocs",
"Description[it]": "Formato di file di grafi di Rocs",
"Description[nl]": "Bestandsformaat voor Rocs Graph",
"Description[pl]": "Format plików grafów Rocs",
"Description[pt]": "Formato de Ficheiro de Grafo do Rocs",
"Description[pt_BR]": "Formato de arquivo de grafo do Rocs",
"Description[ru]": "Формат файлов графов Rocs",
"Description[sk]": "Súborový formát grafi Rocs",
"Description[sl]": "Vrsta datotek z grafi Rocs",
"Description[sv]": "Rocs-graffilformat",
"Description[tr]": "Rocs Grafik Dosya Biçimi",
"Description[uk]": "формат файлів графів Rocs",
"Description[x-test]": "xxRocs Graph File Formatxx",
+ "Description[zh_TW]": "Rocs 圖形檔格式",
"Id": "rocs_rocs2fileformat",
"License": "GPL",
"Name": "Rocs File Format",
"Name[ast]": "Formatu de ficheru Rocs",
"Name[ca@valencia]": "Format de fitxer del Rocs",
"Name[ca]": "Format de fitxer del Rocs",
"Name[cs]": "Formát souborů Rocs",
"Name[de]": "Rocs-Dateiformat",
+ "Name[en_GB]": "Rocs File Format",
"Name[es]": "Formato de archivo de Rocs",
"Name[et]": "Rocsi failivorming",
"Name[fi]": "Rocsin tiedostomuoto",
"Name[fr]": "Format de fichier Rocs",
"Name[gl]": "Formato de ficheiro de Rocs",
"Name[it]": "Formato di file di Rocs",
"Name[nl]": "Rocs-bestandsformaat",
"Name[pl]": "Format plików Rocs",
"Name[pt]": "Formato de Ficheiro do Rocs",
"Name[pt_BR]": "Formato de arquivo do Rocs",
"Name[ru]": "Поддержка файлов графов Rocs",
"Name[sk]": "Súborový formát Rocs",
"Name[sl]": "Vrsta datotek Rocs",
"Name[sv]": "Rocs-filformat",
"Name[tr]": "Rocs Dosya Biçimi",
"Name[uk]": "формат файлів Rocs",
"Name[x-test]": "xxRocs File Formatxx",
"Name[zh_TW]": "Rocs 檔案格式",
"ServiceTypes": [
"rocs/graphtheory/fileformat"
],
"Version": "0.1"
}
}
\ No newline at end of file
diff --git a/libgraphtheory/fileformats/tgf/tgffileformat.json b/libgraphtheory/fileformats/tgf/tgffileformat.json
index 2f20f920..3a459976 100644
--- a/libgraphtheory/fileformats/tgf/tgffileformat.json
+++ b/libgraphtheory/fileformats/tgf/tgffileformat.json
@@ -1,58 +1,61 @@
{
"Encoding": "UTF-8",
"KPlugin": {
"Category": "Plugins",
"Description": "Read and write graph documents in Trivial Graph Format (TGF)",
"Description[ast]": "Llee y escribe documentos nel formatu de grafos triviales (TGF)",
"Description[ca@valencia]": "Llig i escriu fitxers escrits en Format Gràfic Trivial (TGF)",
"Description[ca]": "Llegeix i escriu fitxers escrits en Format Gràfic Trivial (TGF)",
"Description[de]": "Dokumente im Format „Trivial Graph“ (TGF) lesen und schreiben",
+ "Description[en_GB]": "Read and write graph documents in Trivial Graph Format (TGF)",
"Description[es]": "Leer y escribir documentos de grafos en el formato de grafos Trivial (TGF)",
"Description[et]": "TGF (Trivial Graph Format) vormingus graafidokumentide lugemine ja kirjutamine",
"Description[fi]": "Lukee ja kirjoittaa Trivial Graph Format (TGF) -muotoisia graafitiedostoja",
"Description[fr]": "Lit et écrit de documents de graphe au format « Trivial Graph Format » (« TGF »)",
"Description[gl]": "Le e escribe documentos gráficos co Trivial Graph Format (TGF)",
"Description[it]": "Leggi e scrivi i documenti scritti in Trivial Graph Format (TGF)",
"Description[nl]": "Lezen en schrijven van Trivial Graph Format documenten (TGF)",
"Description[pl]": "Czytaj i zapisuj dokumenty grafów w Trivial Graph Format (TGF)",
"Description[pt]": "Lê e grava documentos no formato TGF (Trivial Graph Format)",
"Description[pt_BR]": "Lê e grava documentos no formato Trivial Graph Format (TGF)",
"Description[ru]": "Читает и записывает определения графов в формате TGF",
"Description[sk]": "Čítať a zapisovať grafické dokumenty v triviálnom grafickom formáte (TGF)",
"Description[sl]": "Branje in pisanje dokumentov grafov Trivial Graph Format (TGF)",
"Description[sv]": "Läs och skriv grafdokument med Trivial Graph-format (TGF)",
"Description[tr]": "Grafik belgelerini Açık Grafik Biçiminde oku ve yaz (TGF)",
"Description[uk]": "Читання і запис документів графів у форматі звичайного графу (TGF)",
"Description[x-test]": "xxRead and write graph documents in Trivial Graph Format (TGF)xx",
+ "Description[zh_TW]": "讀寫 Trivial Graph Format (TGF) 格式的圖形檔。",
"Id": "rocs_tgffileformat",
"License": "GPL",
"Name": "TGF Graph File Format",
"Name[ast]": "Formatu de ficheru de grafos TGF",
"Name[ca@valencia]": "Format de fitxer de grafs TGF",
"Name[ca]": "Format de fitxer de grafs TGF",
"Name[cs]": "Formát souborů grafů TGF",
"Name[de]": "TGF-Graphendateiformat",
+ "Name[en_GB]": "TGF Graph File Format",
"Name[es]": "Formato de archivo de grafos TGF",
"Name[et]": "TGF graafifailivorming",
"Name[fi]": "TGF-graafitiedostomuoto",
"Name[fr]": "Format de fichier de graphe « TGF »",
"Name[gl]": "Complemento de ficheiros de gráficos TGF",
"Name[it]": "Formato di file di grafi TGF",
"Name[nl]": "Bestandsformaat voor TGF Graph",
"Name[pl]": "Format plików grafów TGF",
"Name[pt]": "Formato de Ficheiro de Grafo TGF",
"Name[pt_BR]": "Formato de arquivo de grafo TGF",
"Name[ru]": "Поддержка файлов графов TGF",
"Name[sk]": "Grafický súborový formát TGF",
"Name[sl]": "Vrsta datotek z grafi TGF",
"Name[sv]": "TGF-graffilformat",
"Name[tr]": "TGF Grafik Dosya Biçimi",
"Name[uk]": "формат файлів графів TGF",
"Name[x-test]": "xxTGF Graph File Formatxx",
"Name[zh_TW]": "TGF 圖形檔案格式",
"ServiceTypes": [
"rocs/graphtheory/fileformat"
],
"Version": "0.1"
}
}
\ No newline at end of file
diff --git a/libgraphtheory/fileformats/tikz/tikzfileformat.json b/libgraphtheory/fileformats/tikz/tikzfileformat.json
index 4243f332..777c66cc 100644
--- a/libgraphtheory/fileformats/tikz/tikzfileformat.json
+++ b/libgraphtheory/fileformats/tikz/tikzfileformat.json
@@ -1,58 +1,61 @@
{
"Encoding": "UTF-8",
"KPlugin": {
"Category": "Plugins",
"Description": "Writes graph documents in PGF/TikZ format for use in LaTeX documents",
"Description[ast]": "Escribe documentos de grafos nel formatu PGF/TikZ pal so usu en documentos LaTeX",
"Description[ca@valencia]": "Escriu documents gràfics en format PGF/TikZ per utilitzar-los en documents LaTeX",
"Description[ca]": "Escriu documents gràfics en format PGF/TikZ per utilitzar-los en documents LaTeX",
"Description[de]": "Exportiert Graphendokumente im Format PGF/TikZ zur Verwendung in LaTeX-Dokumenten",
+ "Description[en_GB]": "Writes graph documents in PGF/TikZ format for use in LaTeX documents",
"Description[es]": "Escribe documentos de grafos en el formato PGF/TikZ para usar en documentos LaTeX",
"Description[et]": "Graafidokumentide kirjutamine PGF/TikZ vormingus kasutamiseks LaTeXi dokumentides",
"Description[fi]": "Kirjoittaa PGF/TikZ-muotoisia graafitiedostoja LaTeX-tiedostoissa käyttämiseen",
"Description[fr]": "Écrit des documents de graphes au format « PGF » / « TikZ » pour utilisation dans des documents LaTeX",
"Description[gl]": "Escribe documentos de gráficos no formato PGF/TikZ para usar en documentos de LaTeX",
"Description[it]": "Scrive grafi in formato PGF/TikZ per usarli nei documenti LaTeX",
"Description[nl]": "Schrijft grafiekdocumenten in PGF/TikZ-formaat die in LaTeX-documenten worden gebruikt.",
"Description[pl]": "Zapisuje dokumenty grafów w formacie PGF/TikZ do wykorzystania w dokumentach LaTeX",
"Description[pt]": "Grava os documentos dos grafos no formato PGF/TikZ para usar nos documentos em LaTeX",
"Description[pt_BR]": "Grava documentos de grafo no formato PGF/TikZ para uso em documentos LaTeX",
"Description[ru]": "Записывает определения графов в формате PGF/TikZ для использования в документах LaTeX",
"Description[sk]": "Zapíše grafické dokumenty do formátu PGF/TikZ na použitie s dokumentmi LaTeX",
"Description[sl]": "Zapiše dokumente grafov v obliki PGF/TikZ za uporabo v dokumentih LaTeX",
"Description[sv]": "Skriver grafdokument med PGF/TikZ-format för användning i Latex-dokument",
"Description[tr]": "LaTeX belgelerinde kullanmak üzere grafik belgelerini PGF/TikZ biçiminde yazar",
"Description[uk]": "Запис документів графів у форматі PGF/TikZ з метою наступного використання у документах LaTeX",
"Description[x-test]": "xxWrites graph documents in PGF/TikZ format for use in LaTeX documentsxx",
+ "Description[zh_TW]": "寫入 PGF/TikZ 格式的圖形文件,以便在 LaTeX 文件中使用",
"Id": "rocs_tikzfileformat",
"License": "GPL",
"Name": "PGF/TikZ Graph File Export Plugin",
"Name[ast]": "Complementu d'esportación de ficheros de grafos PGF/TikZ",
"Name[ca@valencia]": "Connector d'exportació del fitxer de grafs a PGF/TikZ",
"Name[ca]": "Connector d'exportació del fitxer de grafs a PGF/TikZ",
"Name[cs]": "Export souborů grafů PGF/TikZ",
"Name[de]": "PGF/TikZ-Graphendateiexportmodul",
+ "Name[en_GB]": "PGF/TikZ Graph File Export Plugin",
"Name[es]": "Complemento de exportación de archivo de grafos PGF/TikZ",
"Name[et]": "PGF/TikZ graafifaili ekspordiplugin",
"Name[fi]": "PGF/TikZ-graafitiedoston vientiliitännäinen",
"Name[fr]": "Module externe d'exportation de fichiers « PGF / TikZ »",
"Name[gl]": "Complemento de exportación de ficheiros de gráficos PGG/TikZ",
"Name[it]": "Estensione di esportazione a file PGF/TikZ",
"Name[nl]": "Plugin voor exporteren van PGF/TikZ Graph-bestanden",
"Name[pl]": "Wtyczka eksportu plików grafów PGF/TikZ",
"Name[pt]": "'Plugin' de Exportação para Ficheiros de Grafos PGF/TikZ",
"Name[pt_BR]": "Plugin para exportação de arquivo de grafo PGF/TikZ",
"Name[ru]": "Модуль экспорта в файлы графов PGF/TikZ",
"Name[sk]": "Exportný plugin súborov grafu PGF/TikZ",
"Name[sl]": "Vstavek izvoza datotek grafov PGF/TikZ",
"Name[sv]": "Exportinsticksprogram för PGF/TikZ-graffilformat",
"Name[tr]": "PGF/TikZ Grafik Dosya Dışa Aktarma Eklentisi",
"Name[uk]": "Додаток експортування файлів графів PGF/TikZ",
"Name[x-test]": "xxPGF/TikZ Graph File Export Pluginxx",
"Name[zh_TW]": "PGF/TikZ 圖形檔匯出外掛程式",
"ServiceTypes": [
"rocs/graphtheory/fileformat"
],
"Version": "0.1"
}
}
\ No newline at end of file
diff --git a/src/rocsui.rc b/src/rocsui.rc
index 0dc37fad..50c93fad 100644
--- a/src/rocsui.rc
+++ b/src/rocsui.rc
@@ -1,86 +1,66 @@
-
-
- Main Toolbar
-
-
-
-
-
-
-
- Align Toolbar
-
-
-
-
-
-
-
-
-
diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp
index 7d3c2c1d..2a246281 100644
--- a/src/ui/mainwindow.cpp
+++ b/src/ui/mainwindow.cpp
@@ -1,584 +1,584 @@
/*
This file is part of Rocs.
Copyright 2008-2011 Tomaz Canabrava
Copyright 2008 Ugo Sangiori
Copyright 2010-2011 Wagner Reck
Copyright 2011-2014 Andreas Cord-Landwehr
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#include "mainwindow.h"
#include "rocsversion.h"
#include "settings.h"
#include "libgraphtheory/editor.h"
#include "libgraphtheory/editorplugins/editorpluginmanager.h"
#include "libgraphtheory/kernel/kernel.h"
#include "libgraphtheory/view.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "ui/documenttypeswidget.h"
#include "ui/codeeditorwidget.h"
#include "ui/scriptoutputwidget.h"
#include "ui/sidedockwidget.h"
#include "ui/fileformatdialog.h"
#include "ui/journalwidget.h"
#include "grapheditorwidget.h"
#include "plugins/scriptapi/scriptapiwidget.h"
#include "project/project.h"
using namespace GraphTheory;
MainWindow::MainWindow()
: KXmlGuiWindow()
, m_currentProject(0)
, m_kernel(new Kernel)
, m_codeEditorWidget(new CodeEditorWidget(this))
, m_graphEditorWidget(new GraphEditorWidget(this))
, m_outputWidget(new ScriptOutputWidget(this))
{
setObjectName("RocsMainWindow");
m_graphEditor = new GraphTheory::Editor();
setupWidgets();
setupActions();
- setupGUI(ToolBar | Keys | Save | Create);
+ setupGUI(Keys | Save | Create);
setupToolsPluginsAction();
// setup kernel
connect(m_kernel, &Kernel::message, m_outputWidget, &ScriptOutputWidget::processMessage);
// TODO: use welcome widget instead of creating default empty project
createProject();
updateCaption();
// update rocs config version
Settings::setVersion(ROCS_VERSION_STRING);
// disable save action from kpart, since we take care for the editor by global save action
// here "file_save" is the action identifier from katepartui.rc
// note that we may not use that name for our own actions
foreach(KActionCollection *ac, KActionCollection::allCollections()) {
if (ac->action("file_save")) {
ac->action("file_save")->setDisabled(true);
}
}
}
MainWindow::~MainWindow()
{
Settings::setVSplitterSizeTop(m_vSplitter->sizes() [0]);
Settings::setVSplitterSizeBottom(m_vSplitter->sizes() [1]);
Settings::setHSplitterSizeLeft(m_hSplitter->sizes() [0]);
Settings::setHSplitterSizeRight(m_hSplitter->sizes() [1]);
Settings::setHScriptSplitterSizeLeft(m_hScriptSplitter->sizes() [0]);
Settings::setHScriptSplitterSizeRight(m_hScriptSplitter->sizes() [1]);
m_recentProjects->saveEntries(Settings::self()->config()->group("RecentFiles"));
Settings::self()->save();
m_graphEditor->deleteLater();
m_kernel->deleteLater();
}
void MainWindow::closeEvent(QCloseEvent *event)
{
if (queryClose() == true) {
event->accept();
return;
} else {
event->ignore();
return;
}
}
void MainWindow::setupWidgets()
{
// setup main widgets
QWidget *sidePanel = setupSidePanel();
QWidget *scriptPanel = setupScriptPanel();
// splits the main window horizontal
m_vSplitter = new QSplitter(this);
m_vSplitter->setOrientation(Qt::Vertical);
m_vSplitter->addWidget(m_graphEditorWidget);
m_vSplitter->addWidget(scriptPanel);
// horizontal arrangement
m_hSplitter = new QSplitter(this);
m_hSplitter->setOrientation(Qt::Horizontal);
m_hSplitter->addWidget(m_vSplitter);
m_hSplitter->addWidget(sidePanel);
// set sizes for script panel
m_hScriptSplitter->setSizes(QList() << Settings::hScriptSplitterSizeLeft() << Settings::hScriptSplitterSizeRight() << 80);
// set sizes for vertical splitter
m_vSplitter->setSizes(QList() << Settings::vSplitterSizeTop() << Settings::vSplitterSizeBottom());
// set sizes for side panel
// the following solves the setting of the panel width if it was closed at previous session
int panelWidth = Settings::hSplitterSizeRight();
if (panelWidth == 0) {
//FIXME this is only a workaround
// that fixes the wrong saving of hSplitterSizeRight
panelWidth = 400;
}
m_hSplitter->setSizes(QList() << Settings::hSplitterSizeLeft() << panelWidth);
setCentralWidget(m_hSplitter);
}
QWidget* MainWindow::setupScriptPanel()
{
m_hScriptSplitter = new QSplitter(this);
m_hScriptSplitter->setOrientation(Qt::Horizontal);
KToolBar *executeCommands = new KToolBar(this);
executeCommands->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
executeCommands->setOrientation(Qt::Vertical);
m_runScript = new QAction(QIcon::fromTheme("media-playback-start"), i18nc("@action:intoolbar Script Execution", "Run"), this);
m_runScript->setToolTip(i18nc("@info:tooltip", "Execute currently active script on active graph document."));
m_stopScript = new QAction(QIcon::fromTheme("process-stop"), i18nc("@action:intoolbar Script Execution", "Stop"), this);
m_stopScript->setToolTip(i18nc("@info:tooltip", "Stop script execution."));
m_stopScript->setEnabled(false);
executeCommands->addAction(m_runScript);
executeCommands->addAction(m_stopScript);
// add actions to action collection to be able to set shortcuts on them in the ui
actionCollection()->addAction("_runScript", m_runScript);
actionCollection()->addAction("_stopScript", m_stopScript);
connect(m_runScript, &QAction::triggered, this, &MainWindow::executeScript);
connect(m_stopScript, &QAction::triggered, this, &MainWindow::stopScript);
m_hScriptSplitter->addWidget(m_codeEditorWidget);
m_hScriptSplitter->addWidget(m_outputWidget);
QWidget *scriptInterface = new QWidget(this);
scriptInterface->setLayout(new QHBoxLayout);
scriptInterface->layout()->addWidget(m_hScriptSplitter);
scriptInterface->layout()->addWidget(executeCommands);
return scriptInterface;
}
QWidget* MainWindow::setupSidePanel()
{
QWidget *panel = new QWidget(this);
panel->setLayout(new QVBoxLayout);
panel->setVisible(false);
// add sidebar
SidedockWidget* sideDock = new SidedockWidget(panel);
addToolBar(Qt::RightToolBarArea, sideDock->toolbar());
panel->layout()->addWidget(sideDock);
// add widgets to dock
// document property widgets
DocumentTypesWidget *documentTypesWidget = new DocumentTypesWidget(panel);
connect(this, &MainWindow::graphDocumentChanged, documentTypesWidget, &DocumentTypesWidget::setDocument);
sideDock->addDock(documentTypesWidget, i18n("Element Types"), QIcon::fromTheme("document-properties"));
if (m_currentProject && m_currentProject->activeGraphDocument()) {
documentTypesWidget->setDocument(m_currentProject->activeGraphDocument());
}
// Project Journal
m_journalWidget = new JournalEditorWidget(panel);
sideDock->addDock(m_journalWidget, i18nc("@title", "Journal"), QIcon::fromTheme("story-editor"));
// Rocs scripting API documentation
ScriptApiWidget* apiDoc = new ScriptApiWidget(panel);
sideDock->addDock(apiDoc, i18nc("@title", "Scripting API"), QIcon::fromTheme("documentation"));
return panel;
}
void MainWindow::setProject(Project *project)
{
m_codeEditorWidget->setProject(project);
m_graphEditorWidget->setProject(project);
m_journalWidget->openJournal(project);
updateCaption();
if (m_currentProject) {
m_currentProject->disconnect(this);
m_currentProject->deleteLater();
}
connect(project, static_cast(&Project::activeGraphDocumentChanged),
this, &MainWindow::graphDocumentChanged);
connect(project, &Project::modifiedChanged,
this, &MainWindow::updateCaption);
m_currentProject = project;
emit graphDocumentChanged(m_currentProject->activeGraphDocument());
}
void MainWindow::setupActions()
{
KStandardAction::quit(this, SLOT(quit()), actionCollection());
KStandardAction::preferences(this, SLOT(showConfigurationDialog()), actionCollection());
// setup graph visual editor actions and add them to mainwindow action collection
// m_graphEditor->setupActions(actionCollection()); //FIXME add editor actions to main action collection
// Menu actions
QAction *newProjectAction = new QAction(QIcon::fromTheme("document-new"), i18nc("@action:inmenu", "New Project"), this);
newProjectAction->setShortcutContext(Qt::ApplicationShortcut);
actionCollection()->addAction("new-project", newProjectAction);
actionCollection()->setDefaultShortcut(newProjectAction, QKeySequence::New);
connect(newProjectAction, &QAction::triggered, this, &MainWindow::createProject);
QAction *projectSaveAction = new QAction(QIcon::fromTheme("document-save"), i18nc("@action:inmenu", "Save Project"), this);
projectSaveAction->setShortcutContext(Qt::ApplicationShortcut);
actionCollection()->addAction("save-project", projectSaveAction);
actionCollection()->setDefaultShortcut(projectSaveAction, QKeySequence::Save);
connect(projectSaveAction, &QAction::triggered, this, &MainWindow::saveProject);
QAction *projectOpenAction = new QAction(QIcon::fromTheme("document-open"), i18nc("@action:inmenu", "Open Project"), this);
projectOpenAction->setShortcutContext(Qt::ApplicationShortcut);
actionCollection()->addAction("open-project", projectOpenAction);
actionCollection()->setDefaultShortcut(projectOpenAction, QKeySequence::Open);
connect(projectOpenAction, &QAction::triggered, this, [=] () { openProject(); });
m_recentProjects = new KRecentFilesAction(QIcon ("document-open"), i18nc("@action:inmenu","Recent Projects"), this);
connect(m_recentProjects, &KRecentFilesAction::urlSelected,
this, &MainWindow::openProject);
actionCollection()->addAction("recent-project", m_recentProjects);
m_recentProjects->loadEntries(Settings::self()->config()->group("RecentFiles"));
createAction("document-save-as", i18nc("@action:inmenu", "Save Project as"), "save-project-as", SLOT(saveProjectAs()), this);
createAction("document-new", i18nc("@action:inmenu", "New Graph Document"), "new-graph", SLOT(createGraphDocument()), this);
createAction("document-new", i18nc("@action:inmenu", "New Script File"), "new-script", SLOT(createCodeDocument()), this);
createAction("document-import", i18nc("@action:inmenu", "Import Graph"), "import-graph", SLOT(importGraphDocument()), this);
createAction("document-export", i18nc("@action:inmenu", "Export Graph as"), "export-graph-as", SLOT(exportGraphDocument()), this);
createAction("document-import", i18nc("@action:inmenu", "Import Script"), "add-script", SLOT(importCodeDocument()), this);
createAction("document-export", i18nc("@action:inmenu", "Export Script"), "export-script", SLOT(exportCodeDocument()), this);
}
void MainWindow::createAction(const QByteArray& iconName, const QString& actionTitle, const QString& actionName,
const char* slot, QObject *parent)
{
QAction* action = new QAction(QIcon::fromTheme(iconName), actionTitle, parent);
actionCollection()->addAction(actionName, action);
connect(action, SIGNAL(triggered(bool)), parent, slot);
}
void MainWindow::showConfigurationDialog()
{
QPointer dialog = new KConfigDialog(this, "settings", Settings::self());
KTextEditor::Editor *editor = KTextEditor::Editor::instance();
for (int index = 0; index < editor->configPages(); ++index) {
KTextEditor::ConfigPage *page = editor->configPage(index, dialog);
dialog->addPage(page,
page->name(),
page->icon().name(),
page->fullName());
}
dialog->exec();
}
void MainWindow::setupToolsPluginsAction()
{
QList availablePlugins = m_graphEditorPluginManager.plugins();
QList actions;
int count = 0;
for (auto plugin : availablePlugins) {
QAction *action = new QAction(plugin->displayName(), this);
action->setData(count++);
connect(action, &QAction::triggered,
this, &MainWindow::showEditorPluginDialog);
actions << action;
}
unplugActionList("tools_plugins");
plugActionList("tools_plugins", actions);
}
void MainWindow::importCodeDocument()
{
QString startDirectory = Settings::lastOpenedDirectory();
QUrl fileUrl = QUrl::fromLocalFile(QFileDialog::getOpenFileName(this,
i18nc("@title:window", "Import Script into Project"),
startDirectory));
if (fileUrl.isEmpty()) {
return;
}
m_currentProject->importCodeDocument(fileUrl);
Settings::setLastOpenedDirectory(startDirectory);
}
void MainWindow::exportCodeDocument()
{
QString startDirectory = Settings::lastOpenedDirectory();
QUrl fileUrl = QUrl::fromLocalFile(QFileDialog::getSaveFileName(this,
i18nc("@title:window", "Export Script"),
startDirectory,
i18n("JavaScript (*.js)")));
m_codeEditorWidget->activeDocument()->saveAs(fileUrl);
}
void MainWindow::createProject()
{
if (!queryClose()) {
return;
}
Project *project = new Project(m_graphEditor);
project->addCodeDocument(KTextEditor::Editor::instance()->createDocument(nullptr));
project->addGraphDocument(m_graphEditor->createDocument());
project->setModified(false);
setProject(project);
}
void MainWindow::saveProject()
{
if (m_currentProject->projectUrl().isEmpty()) {
saveProjectAs();
return;
} else {
m_currentProject->projectSave();
m_recentProjects->addUrl(m_currentProject->projectUrl());
}
updateCaption();
}
void MainWindow::saveProjectAs()
{
QString startDirectory = Settings::lastOpenedDirectory();
QString file = QFileDialog::getSaveFileName(this,
i18nc("@title:window", "Save Project As"),
startDirectory,
i18n("Rocs Projects (*.rocs)"));
if (file.isEmpty()) {
qCritical() << "Filename is empty and no script file was created.";
return;
}
QFileInfo fi(file);
if (fi.exists()) {
const int btnCode = KMessageBox::warningContinueCancel(
this,
i18nc("@info", "A file named \"%1\" already exists. Are you sure you want to overwrite it?", fi.fileName()),
i18nc("@title:window", "Overwrite File?"),
KStandardGuiItem::overwrite());
if (btnCode == KMessageBox::Cancel) {
return; // cancel saving
}
}
Settings::setLastOpenedDirectory(m_currentProject->projectUrl().path());
m_currentProject->projectSaveAs(QUrl::fromLocalFile(file));
m_recentProjects->addUrl(QUrl::fromLocalFile(file));
updateCaption();
}
void MainWindow::openProject(const QUrl &fileName)
{
if (!queryClose()) {
return;
}
QString startDirectory = Settings::lastOpenedDirectory();
QUrl file = fileName;
if (file.isEmpty()){
// show open dialog
file = QUrl::fromLocalFile(QFileDialog::getOpenFileName(this,
i18nc("@title:window", "Open Project Files"),
startDirectory,
i18n("Rocs projects (*.rocs)")));
if (file.isEmpty()) {
return;
}
}
Project *project = new Project(file, m_graphEditor);
setProject(project);
m_recentProjects->addUrl(file);
updateCaption();
Settings::setLastOpenedDirectory(file.path());
}
void MainWindow::updateCaption()
{
if (!m_currentProject) {
return;
}
QString modified;
if (m_currentProject->isModified()) {
modified = '*';
}
if (m_currentProject->projectUrl().isEmpty()) {
setCaption(i18nc("caption text for temporary project", "[ untitled ]%1", modified));
} else {
setCaption(QString("[ %1 ]%2").arg(m_currentProject->projectUrl().toLocalFile()).arg(modified));
}
}
QString MainWindow::uniqueFilename(const QString &basePrefix, const QString &suffix) {
QFile targetFile;
QString basePath = m_currentProject->projectUrl().path();
QString fullSuffix = '.' + suffix;
QString fullPrefix = basePrefix;
if (fullPrefix.isNull()) {
fullPrefix = m_currentProject->projectUrl().fileName().remove(QRegExp(".rocs*$"));
} else if (fullPrefix.endsWith(fullSuffix)) {
fullPrefix.remove(QRegExp(fullSuffix + '$'));
}
targetFile.setFileName(basePath + fullPrefix + fullSuffix);
for(int i = 1; targetFile.exists(); i++) {
targetFile.setFileName(basePath + fullPrefix + QString::number(i) + fullSuffix);
}
return targetFile.fileName();
}
void MainWindow::createCodeDocument()
{
QString basePrefix = QInputDialog::getText(this,
i18n("ScriptName"),
i18n("Enter the name of your new script"));
if (basePrefix.isNull()) {
qDebug() << "Filename is empty and no script file was created.";
} else {
QString fileName = uniqueFilename(basePrefix, "js"); //TODO this does nothing
KTextEditor::Document *document = KTextEditor::Editor::instance()->createDocument(nullptr);
m_currentProject->addCodeDocument(document);
}
}
void MainWindow::createGraphDocument()
{
GraphDocumentPtr document = m_graphEditor->createDocument();
m_currentProject->addGraphDocument(document);
}
bool MainWindow::queryClose()
{
if (!m_currentProject) {
return true;
}
if (m_currentProject->isModified()) {
const int btnCode = KMessageBox::warningYesNoCancel(this, i18nc(
"@info",
"Changes on your project are unsaved. Do you want to save your changes?"));
if (btnCode == KMessageBox::Yes) {
saveProject();
return true;
}
if (btnCode == KMessageBox::No) {
return true;
}
return false; // do not close
}
return true; // save to close project: no changes
}
void MainWindow::quit()
{
if (queryClose()) {
QApplication::quit();
}
}
void MainWindow::importGraphDocument()
{
FileFormatDialog importer(this);
GraphDocumentPtr document = importer.importFile();
if (!document) {
qWarning() << "No graph document was imported.";
return;
}
m_currentProject->addGraphDocument(document);
}
void MainWindow::exportGraphDocument()
{
FileFormatDialog exporter(this);
exporter.exportFile(m_currentProject->activeGraphDocument());
}
void MainWindow::showEditorPluginDialog()
{
QAction *action = qobject_cast (sender());
if (!action) {
return;
}
if (EditorPluginInterface *plugin = m_graphEditorPluginManager.plugins().value(action->data().toInt())) {
plugin->showDialog(m_currentProject->activeGraphDocument());
}
}
void MainWindow::executeScript()
{
if (m_outputWidget->isOutputClearEnabled()) {
m_outputWidget->clear();
}
QString script = m_codeEditorWidget->activeDocument()->text();
enableStopAction();
m_kernel->execute(m_currentProject->activeGraphDocument(), script);
}
void MainWindow::stopScript()
{
m_kernel->stop();
disableStopAction();
}
void MainWindow::enableStopAction()
{
m_stopScript->setEnabled(true);
}
void MainWindow::disableStopAction()
{
m_stopScript->setEnabled(false);
}