Arch: recoded Git tool - fixes #2599

This commit is contained in:
Yorik van Havre 2016-06-28 17:36:43 -03:00
parent fa315d2553
commit 09e9c8966f
5 changed files with 239 additions and 170 deletions

View File

@ -54,7 +54,7 @@ class _CommandBimserver:
try: try:
import requests import requests
except: except:
FreeCAD.Console.PrintError("requests python module not found, aborting.\n") FreeCAD.Console.PrintError(translate("Arch","requests python module not found, aborting. Please install python-requests\n"))
else: else:
FreeCADGui.Control.showDialog(_BimServerTaskPanel()) FreeCADGui.Control.showDialog(_BimServerTaskPanel())
@ -87,7 +87,6 @@ class _BimServerTaskPanel:
return int(QtGui.QDialogButtonBox.Close) return int(QtGui.QDialogButtonBox.Close)
def accept(self): def accept(self):
FreeCADGui.Selection.removeObserver(self.observer)
FreeCADGui.Control.closeDialog() FreeCADGui.Control.closeDialog()
def getPrefs(self): def getPrefs(self):
@ -135,8 +134,8 @@ class _BimServerTaskPanel:
try: try:
resp = requests.post(url2,json = data) resp = requests.post(url2,json = data)
except: except:
FreeCAD.Console.PrintError("Unable to connect to BimServer at "+url+"\n") FreeCAD.Console.PrintError(translate("Arch","Unable to connect to BimServer at")+" "+url+"\n")
self.form.labelStatus.setText("Connection failed.") self.form.labelStatus.setText(translate("Arch","Connection failed."))
return return
if resp.ok: if resp.ok:
try: try:
@ -170,14 +169,14 @@ class _BimServerTaskPanel:
import requests import requests
url,token = self.getPrefs() url,token = self.getPrefs()
if url and token: if url and token:
self.form.labelStatus.setText("Getting projects list...") self.form.labelStatus.setText(translate("Arch","Getting projects list..."))
url += "/json" url += "/json"
data = { "token": token, "request": { "interface": "SettingsInterface", "method": "getServerSettings", "parameters": { } } } data = { "token": token, "request": { "interface": "SettingsInterface", "method": "getServerSettings", "parameters": { } } }
try: try:
resp = requests.post(url,json = data) resp = requests.post(url,json = data)
except: except:
FreeCAD.Console.PrintError("Unable to connect to BimServer at "+url[:-5]+"\n") FreeCAD.Console.PrintError(translate("Arch","Unable to connect to BimServer at")+" "+url[:-5]+"\n")
self.form.labelStatus.setText("Connection failed.") self.form.labelStatus.setText(translate("Arch","Connection failed."))
return return
if resp.ok: if resp.ok:
try: try:
@ -192,7 +191,7 @@ class _BimServerTaskPanel:
try: try:
projects = resp.json()["response"]["result"] projects = resp.json()["response"]["result"]
except: except:
FreeCAD.Console.PrintError("Unable to get projects list from BimServer\n") FreeCAD.Console.PrintError(translate("Arch","Unable to get projects list from BimServer\n"))
else: else:
self.setLogged(True) self.setLogged(True)
self.form.comboProjects.clear() self.form.comboProjects.clear()
@ -213,7 +212,7 @@ class _BimServerTaskPanel:
url += "/json" url += "/json"
if (index >= 0) and (len(self.Projects) > index): if (index >= 0) and (len(self.Projects) > index):
p = self.Projects[index] p = self.Projects[index]
self.form.labelStatus.setText("Getting revisions...") self.form.labelStatus.setText(translate("Arch","Getting revisions..."))
for rev in p["revisions"]: for rev in p["revisions"]:
data = { "token": token, "request": { "interface": "ServiceInterface", "method": "getRevision", "parameters": { "roid": rev } } } data = { "token": token, "request": { "interface": "ServiceInterface", "method": "getRevision", "parameters": { "roid": rev } } }
resp = requests.post(url,json = data) resp = requests.post(url,json = data)
@ -236,8 +235,8 @@ class _BimServerTaskPanel:
import requests import requests
url,token = self.getPrefs() url,token = self.getPrefs()
if url and token: if url and token:
FreeCAD.Console.PrintMessage("Downloading file from Bimserver...\n") FreeCAD.Console.PrintMessage(translate("Arch","Downloading file from Bimserver...\n"))
self.form.labelStatus.setText("Checking available serializers...") self.form.labelStatus.setText(translate("Arch","Checking available serializers..."))
url += "/json" url += "/json"
serializer = None serializer = None
for s in ["Ifc2x3tc1"]: # Ifc4 seems unreliable ATM, let's stick with good old Ifc2x3... for s in ["Ifc2x3tc1"]: # Ifc4 seems unreliable ATM, let's stick with good old Ifc2x3...
@ -252,19 +251,19 @@ class _BimServerTaskPanel:
serializer = srl serializer = srl
break break
if not serializer: if not serializer:
FreeCAD.Console.PrintError("Unable to get a valid serializer from the BimServer\n") FreeCAD.Console.PrintError(translate("Arch","Unable to get a valid serializer from the BimServer\n"))
return return
tf = QtGui.QFileDialog.getSaveFileName(QtGui.qApp.activeWindow(), "Save the downloaded IFC file?", None, "IFC files (*.ifc)") tf = QtGui.QFileDialog.getSaveFileName(QtGui.qApp.activeWindow(), "Save the downloaded IFC file?", None, "IFC files (*.ifc)")
if tf: if tf:
tf = tf[0] tf = tf[0]
self.form.labelStatus.setText("Downloading file...") self.form.labelStatus.setText(translate("Arch","Downloading file..."))
data = { "token": token, "request": { "interface": "ServiceInterface", "method": "downloadRevisions", "parameters": { "roids": [rev["oid"]], "serializerOid": serializer["oid"], "sync": "false" } } } data = { "token": token, "request": { "interface": "ServiceInterface", "method": "downloadRevisions", "parameters": { "roids": [rev["oid"]], "serializerOid": serializer["oid"], "sync": "false" } } }
resp = requests.post(url,json = data) resp = requests.post(url,json = data)
if resp.ok: if resp.ok:
try: try:
downloadid = resp.json()["response"]["result"] downloadid = resp.json()["response"]["result"]
except: except:
FreeCAD.Console.PrintError("Unable to obtain a valid download for this revision from the BimServer\n") FreeCAD.Console.PrintError(translate("Arch","Unable to obtain a valid download for this revision from the BimServer\n"))
return return
data = { "token": token, "request": { "interface": "ServiceInterface", "method": "getDownloadData", "parameters": { "topicId": downloadid } } } data = { "token": token, "request": { "interface": "ServiceInterface", "method": "getDownloadData", "parameters": { "topicId": downloadid } } }
resp = requests.post(url,json = data) resp = requests.post(url,json = data)
@ -272,11 +271,11 @@ class _BimServerTaskPanel:
try: try:
downloaddata = resp.json()["response"]["result"]["file"] downloaddata = resp.json()["response"]["result"]["file"]
except: except:
FreeCAD.Console.PrintError("Unable to download the data for this revision.\n") FreeCAD.Console.PrintError(translate("Arch","Unable to download the data for this revision.\n"))
return return
else: else:
FreeCAD.Console.PrintMessage("Opening file...\n") FreeCAD.Console.PrintMessage(translate("Arch","Opening file...\n"))
self.form.labelStatus.setText("Opening file...") self.form.labelStatus.setText(translate("Arch","Opening file..."))
if not tf: if not tf:
tf = tempfile.mkstemp(suffix=".ifc")[1] tf = tempfile.mkstemp(suffix=".ifc")[1]
f = open(tf,"wb") f = open(tf,"wb")
@ -295,8 +294,8 @@ class _BimServerTaskPanel:
if url and token: if url and token:
url += "/json" url += "/json"
deserializer = None deserializer = None
FreeCAD.Console.PrintMessage("Saving file...\n") FreeCAD.Console.PrintMessage(translate("Arch","Saving file...\n"))
self.form.labelStatus.setText("Checking available deserializers...") self.form.labelStatus.setText(translate("Arch","Checking available deserializers..."))
import ifcopenshell import ifcopenshell
schema = ifcopenshell.schema_identifier.lower() schema = ifcopenshell.schema_identifier.lower()
data = { "token": token, "request": { "interface": "PluginInterface", "method": "getAllDeserializers", "parameters": { "onlyEnabled": "true" } } } data = { "token": token, "request": { "interface": "PluginInterface", "method": "getAllDeserializers", "parameters": { "onlyEnabled": "true" } } }
@ -310,143 +309,170 @@ class _BimServerTaskPanel:
except: except:
pass pass
if not deserializer: if not deserializer:
FreeCAD.Console.PrintError("Unable to get a valid deserializer for the "+schema+" schema\n") FreeCAD.Console.PrintError(translate("Arch","Unable to get a valid deserializer for the schema")+" "+schema+"\n")
return return
tf = QtGui.QFileDialog.getSaveFileName(QtGui.qApp.activeWindow(), "Save the IFC file before uploading?", None, "IFC files (*.ifc)") tf = QtGui.QFileDialog.getSaveFileName(QtGui.qApp.activeWindow(), translate("Arch","Save the IFC file before uploading?"), None, translate("Arch","IFC files (*.ifc)"))
if tf: if tf:
tf = tf[0] tf = tf[0]
if not tf: if not tf:
tf = os.path.join(tempfile._get_default_tempdir(),next(tempfile._get_candidate_names())+".ifc") tf = os.path.join(tempfile._get_default_tempdir(),next(tempfile._get_candidate_names())+".ifc")
import importIFC import importIFC
self.form.labelStatus.setText("Saving file...") self.form.labelStatus.setText(translate("Arch","Saving file..."))
importIFC.export([self.RootObjects[self.form.comboRoot.currentIndex()]],tf) importIFC.export([self.RootObjects[self.form.comboRoot.currentIndex()]],tf)
f = open(tf,"rb") f = open(tf,"rb")
ifcdata = base64.b64encode(f.read()) ifcdata = base64.b64encode(f.read())
f.close() f.close()
FreeCAD.Console.PrintMessage("Uploading file to Bimserver...\n") FreeCAD.Console.PrintMessage(translate("Arch","Uploading file to Bimserver...\n"))
self.form.labelStatus.setText("Uploading file...") self.form.labelStatus.setText(translate("Arch","Uploading file..."))
data = { "token": token, "request": { "interface": "ServiceInterface", "method": "checkin", "parameters": { "poid": project["oid"], "comment": self.form.editComment.text(), "deserializerOid": deserializer["oid"], "fileSize": os.path.getsize(tf), "fileName": os.path.basename(tf), "data": ifcdata, "merge": "false", "sync": "true" } } } data = { "token": token, "request": { "interface": "ServiceInterface", "method": "checkin", "parameters": { "poid": project["oid"], "comment": self.form.editComment.text(), "deserializerOid": deserializer["oid"], "fileSize": os.path.getsize(tf), "fileName": os.path.basename(tf), "data": ifcdata, "merge": "false", "sync": "true" } } }
resp = requests.post(url,json = data) resp = requests.post(url,json = data)
if resp.ok: if resp.ok:
if resp.json()["response"]["result"]: if resp.json()["response"]["result"]:
FreeCAD.Console.PrintMessage("File upload successful\n") FreeCAD.Console.PrintMessage(translate("Arch","File upload successful\n"))
self.getRevisions(self.form.comboProjects.currentIndex()) self.getRevisions(self.form.comboProjects.currentIndex())
else: else:
FreeCAD.Console.PrintError("File upload failed\n") FreeCAD.Console.PrintError(translate("Arch","File upload failed\n"))
self.form.labelStatus.setText("") self.form.labelStatus.setText("")
# GIT ###########################################################
class _CommandGit: class _CommandGit:
"the Arch Git Commit command definition" "the Arch Git Commit command definition"
def GetResources(self): def GetResources(self):
return {'Pixmap' : 'Git', return {'Pixmap' : 'Git',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Git","Commit with Git"), 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Git","Git"),
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Git","Commits the current document")} 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Git","Manages the current document with Git")}
def Activated(self): def Activated(self):
f = FreeCAD.ActiveDocument.FileName f = FreeCAD.ActiveDocument.FileName
if not f: if not f:
FreeCAD.Console.PrintError(translate("Arch","This document is not saved. Please save it first")) FreeCAD.Console.PrintError(translate("Arch","This document is not saved. Please save it first.\n"))
return return
try: try:
import git import git
except: except:
FreeCAD.Console.PrintError(translate("Arch","The Python Git module was not found. Please install the python-git package.")) FreeCAD.Console.PrintError(translate("Arch","The Python Git module was not found. Please install the python-git package.\n"))
return return
try: try:
repo = git.Repo(os.path.dirname(f)) repo = git.Repo(os.path.dirname(f))
except: except:
FreeCAD.Console.PrintError(translate("Arch","This document doesn't appear to be part of a Git repository.")) FreeCAD.Console.PrintError(translate("Arch","This document doesn't appear to be part of a Git repository.\n"))
return return
pushOK = True
if not repo.remotes:
FreeCAD.Console.PrintWarning(translate("Arch","Warning: no remote repositories. Unable to push"))
pushOK = False
modified_files = repo.git.diff("--name-only").split()
untracked_files = repo.git.ls_files("--other","--exclude-standard").split()
if not os.path.basename(f) in modified_files:
if not os.path.basename(f) in untracked_files:
FreeCAD.Console.PrintError(translate("Arch","The Git repository cannot handle this document."))
return
d = _ArchGitDialog()
if not pushOK:
d.checkBox.setChecked(False)
d.checkBox.setEnabled(False)
d.label.setText(str(len(modified_files)+len(untracked_files))+" modified file(s)")
d.lineEdit.setText("Changed " + os.path.basename(f))
r = d.exec_()
if r:
if d.radioButton_2.isChecked():
for o in modified_files + untracked_files:
repo.git.add(o)
else: else:
repo.git.add(os.path.basename(f)) FreeCADGui.Control.showDialog(_GitTaskPanel(repo))
repo.git.commit(m=d.lineEdit.text())
if d.checkBox.isChecked():
repo.git.push()
class _GitTaskPanel:
'''The TaskPanel for the Git command'''
def __init__(self,repo):
self.form = FreeCADGui.PySideUic.loadUi(":/ui/GitTaskPanel.ui")
self.form.setWindowIcon(QtGui.QIcon(":/icons/Git.svg"))
self.form.labelStatus.setText("")
QtCore.QObject.connect(self.form.buttonRefresh, QtCore.SIGNAL("clicked()"), self.getFiles)
QtCore.QObject.connect(self.form.buttonLog, QtCore.SIGNAL("clicked()"), self.getLog)
QtCore.QObject.connect(self.form.buttonSelectAll, QtCore.SIGNAL("clicked()"), self.form.listFiles.selectAll)
QtCore.QObject.connect(self.form.buttonDiff, QtCore.SIGNAL("clicked()"), self.getDiff)
QtCore.QObject.connect(self.form.buttonCommit, QtCore.SIGNAL("clicked()"), self.commit)
QtCore.QObject.connect(self.form.buttonPush, QtCore.SIGNAL("clicked()"), self.push)
QtCore.QObject.connect(self.form.buttonPull, QtCore.SIGNAL("clicked()"), self.pull)
self.repo = repo
self.getRemotes()
self.getFiles()
class _ArchGitDialog(QtGui.QDialog): def getStandardButtons(self):
def __init__(self): return int(QtGui.QDialogButtonBox.Close)
QtGui.QDialog.__init__(self)
self.setObjectName("ArchGitOptions")
self.resize(370, 200)
self.verticalLayout = QtGui.QVBoxLayout(self)
self.verticalLayout.setObjectName("verticalLayout")
self.groupBox = QtGui.QGroupBox(self)
self.groupBox.setObjectName("groupBox")
self.vl3 = QtGui.QVBoxLayout(self.groupBox)
self.vl3.setObjectName("vl3")
self.label = QtGui.QLabel(self.groupBox)
self.label.setObjectName("label")
self.vl3.addWidget(self.label)
self.horizontalLayout = QtGui.QHBoxLayout()
self.vl3.addLayout(self.horizontalLayout)
self.horizontalLayout.setObjectName("horizontalLayout")
self.radioButton_2 = QtGui.QRadioButton(self.groupBox)
self.radioButton_2.setChecked(True)
self.radioButton_2.setObjectName("radioButton_2")
self.horizontalLayout.addWidget(self.radioButton_2)
self.radioButton = QtGui.QRadioButton(self.groupBox)
self.radioButton.setObjectName("radioButton")
self.horizontalLayout.addWidget(self.radioButton)
self.verticalLayout.addWidget(self.groupBox)
self.groupBox_2 = QtGui.QGroupBox(self)
self.groupBox_2.setObjectName("groupBox_2")
self.verticalLayout_2 = QtGui.QVBoxLayout(self.groupBox_2)
self.verticalLayout_2.setObjectName("horizontalLayout_2")
self.lineEdit = QtGui.QLineEdit(self.groupBox_2)
self.lineEdit.setObjectName("lineEdit")
self.verticalLayout_2.addWidget(self.lineEdit)
self.checkBox = QtGui.QCheckBox(self.groupBox_2)
self.checkBox.setChecked(True)
self.checkBox.setObjectName("checkBox")
self.verticalLayout_2.addWidget(self.checkBox)
self.verticalLayout.addWidget(self.groupBox_2)
self.buttonBox = QtGui.QDialogButtonBox(self)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.verticalLayout.addWidget(self.buttonBox)
self.retranslateUi() def accept(self):
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), self.accept) FreeCADGui.Control.closeDialog()
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), self.reject)
QtCore.QMetaObject.connectSlotsByName(self)
def retranslateUi(self): def getFiles(self):
self.setWindowTitle(QtGui.QApplication.translate("ArchGitOptions", "Git Options", None, QtGui.QApplication.UnicodeUTF8)) self.form.labelStatus.setText("")
self.groupBox.setTitle(QtGui.QApplication.translate("ArchGitOptions", "What to commit", None, QtGui.QApplication.UnicodeUTF8)) self.form.listFiles.clear()
self.radioButton_2.setText(QtGui.QApplication.translate("ArchGitOptions", "All files in folder", None, QtGui.QApplication.UnicodeUTF8)) self.modified = self.repo.git.diff("--name-only").split()
self.radioButton.setText(QtGui.QApplication.translate("ArchGitOptions", "Only this .FcStd file", None, QtGui.QApplication.UnicodeUTF8)) self.untracked = self.repo.git.ls_files("--other","--exclude-standard").split()
self.groupBox_2.setTitle(QtGui.QApplication.translate("ArchGitOptions", "Commit message", None, QtGui.QApplication.UnicodeUTF8)) for f in self.modified:
self.lineEdit.setText(QtGui.QApplication.translate("ArchGitOptions", "commit", None, QtGui.QApplication.UnicodeUTF8)) self.form.listFiles.addItem(f)
self.checkBox.setText(QtGui.QApplication.translate("ArchGitOptions", "Push to default remote repository", None, QtGui.QApplication.UnicodeUTF8)) for f in self.untracked:
self.form.listFiles.addItem(f+" *")
self.form.labelStatus.setText(translate("Arch","Branch")+": "+self.repo.active_branch.name)
def getLog(self):
textform = FreeCADGui.PySideUic.loadUi(":/ui/DialogDisplayText.ui")
textform.setWindowTitle("Git log")
textform.browserText.setPlainText(self.repo.git.log())
textform.exec_()
def getDiff(self):
if (self.form.listFiles.currentRow() >= 0):
f = (self.modified+self.untracked)[self.form.listFiles.currentRow()]
textform = FreeCADGui.PySideUic.loadUi(":/ui/DialogDisplayText.ui")
textform.setWindowTitle("Diff: "+f)
textform.browserText.setPlainText(self.repo.git.diff(f))
textform.exec_()
def getRemotes(self):
self.form.listRepos.clear()
if self.repo.remotes:
for r in self.repo.remotes:
self.form.listRepos.addItem(r.name+": "+r.url)
else:
FreeCAD.Console.PrintWarning(translate("Arch","Warning: no remote repositories.\n"))
def commit(self):
if not self.form.listFiles.selectedItems():
FreeCAD.Console.PrintError(translate("Arch","Please select file(s) to commit.\n"))
self.form.labelStatus.setText(translate("Arch","No file selected"))
return
if not self.form.editMessage.text():
FreeCAD.Console.PrintError(translate("Arch","Please write a commit message.\n"))
self.form.labelStatus.setText(translate("Arch","No commit message"))
return
for it in self.form.listFiles.selectedItems():
f = it.text()
if f[-2:] == " *":
f = f[:-2]
self.repo.git.add(f)
s = self.repo.git.commit(m=self.form.editMessage.text())
FreeCAD.Console.PrintMessage(translate("Arch","Successfully committed %i files.\n") % len(self.form.listFiles.selectedItems()))
self.form.labelStatus.setText(translate("Arch","Files committed."))
if s:
FreeCAD.Console.PrintMessage(s+"\n")
self.getFiles()
def push(self):
if len(self.form.listRepos.selectedItems()) != 1:
FreeCAD.Console.PrintError(translate("Arch","Please select a repo to push to.\n"))
self.form.labelStatus.setText(translate("Arch","No repo selected"))
return
self.form.labelStatus.setText(translate("Arch","Pushing files..."))
r = self.form.listRepos.selectedItems()[0].text().split(":")[0]
s = self.repo.git.push(r)
FreeCAD.Console.PrintMessage(translate("Arch","Successfully pushed to")+" "+r+"\n")
self.form.labelStatus.setText(translate("Arch","Files pushed."))
if s:
FreeCAD.Console.PrintMessage(s+"\n")
self.getFiles()
def pull(self):
if len(self.form.listRepos.selectedItems()) != 1:
FreeCAD.Console.PrintError(translate("Arch","Please select a repo to pull from.\n"))
self.form.labelStatus.setText(translate("Arch","No repo selected"))
return
self.form.labelStatus.setText(translate("Arch","Pulling files..."))
r = self.form.listRepos.selectedItems()[0].text().split(":")[0]
s = self.repo.git.pull(r)
FreeCAD.Console.PrintMessage(translate("Arch","Successfully pulled from")+" "+r+"\n")
self.form.labelStatus.setText(translate("Arch","Files pulled."))
if s:
FreeCAD.Console.PrintMessage(s+"\n")
if os.path.basename(FreeCAD.ActiveDocument.FileName) in s:
FreeCAD.Console.PrintWarning(translate("Arch","Warning: the current document file has been changed by this pull. Please save your document to keep your changes.\n"))

View File

@ -505,6 +505,7 @@ class _ViewProviderStructure(ArchComponent.ViewProviderComponent):
def getIcon(self): def getIcon(self):
import Arch_rc import Arch_rc
if hasattr(self,"Object"): if hasattr(self,"Object"):
if hasattr(self.Object,"CloneOf"):
if self.Object.CloneOf: if self.Object.CloneOf:
return ":/icons/Arch_Structure_Clone.svg" return ":/icons/Arch_Structure_Clone.svg"
return ":/icons/Arch_Structure_Tree.svg" return ":/icons/Arch_Structure_Tree.svg"

View File

@ -80,6 +80,7 @@
<file>ui/BimServerTaskPanel.ui</file> <file>ui/BimServerTaskPanel.ui</file>
<file>ui/GitTaskPanel.ui</file> <file>ui/GitTaskPanel.ui</file>
<file>ui/DialogBimServerLogin.ui</file> <file>ui/DialogBimServerLogin.ui</file>
<file>ui/DialogDisplayText.ui</file>
<file>translations/Arch_af.qm</file> <file>translations/Arch_af.qm</file>
<file>translations/Arch_de.qm</file> <file>translations/Arch_de.qm</file>
<file>translations/Arch_fi.qm</file> <file>translations/Arch_fi.qm</file>

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>372</width>
<height>286</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTextBrowser" name="browserText"/>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>Dialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>Dialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -6,12 +6,12 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>228</width> <width>255</width>
<height>494</height> <height>516</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string>Git</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item> <item>
@ -21,53 +21,9 @@
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>
<widget class="QLabel" name="labelWarning"> <widget class="QLabel" name="labelStatus">
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>103</red>
<green>103</green>
<blue>103</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="text"> <property name="text">
<string>Warning</string> <string/>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>List of files to be committed:</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -103,7 +59,18 @@
</layout> </layout>
</item> </item>
<item> <item>
<widget class="QListWidget" name="listFiles"/> <widget class="QLabel" name="label">
<property name="text">
<string>List of files to be committed:</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="listFiles">
<property name="selectionMode">
<enum>QAbstractItemView::MultiSelection</enum>
</property>
</widget>
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
@ -120,6 +87,13 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item>
<widget class="QPushButton" name="buttonDiff">
<property name="text">
<string>Diff</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="buttonSelectAll"> <widget class="QPushButton" name="buttonSelectAll">
<property name="text"> <property name="text">