Browse Source

clone-project patch

pull/41/head
rhetr 12 years ago
parent
commit
1f933bc7fa
4 changed files with 101 additions and 29 deletions
  1. BIN
      resources/16x16/edit-copy.png
  2. +1
    -0
      resources/resources.qrc
  3. +59
    -29
      resources/ui/claudia.ui
  4. +41
    -0
      src/claudia.py

BIN
resources/16x16/edit-copy.png View File

Before After
Width: 16  |  Height: 16  |  Size: 475B

+ 1
- 0
resources/resources.qrc View File

@@ -19,6 +19,7 @@
<file>16x16/document-save.png</file> <file>16x16/document-save.png</file>
<file>16x16/document-save-as.png</file> <file>16x16/document-save-as.png</file>
<file>16x16/edit-clear.png</file> <file>16x16/edit-clear.png</file>
<file>16x16/edit-copy.png</file>
<file>16x16/edit-delete.png</file> <file>16x16/edit-delete.png</file>
<file>16x16/edit-rename.png</file> <file>16x16/edit-rename.png</file>
<file>16x16/list-add.png</file> <file>16x16/list-add.png</file>


+ 59
- 29
resources/ui/claudia.ui View File

@@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>877</width>
<width>982</width>
<height>566</height> <height>566</height>
</rect> </rect>
</property> </property>
@@ -167,8 +167,8 @@
<property name="title"> <property name="title">
<string>Project</string> <string>Project</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QPushButton" name="b_project_new"> <widget class="QPushButton" name="b_project_new">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
@@ -188,7 +188,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<item row="0" column="1">
<widget class="QPushButton" name="b_project_load"> <widget class="QPushButton" name="b_project_load">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
@@ -208,7 +208,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<item row="0" column="2">
<widget class="QPushButton" name="b_project_save"> <widget class="QPushButton" name="b_project_save">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
@@ -228,7 +228,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<item row="0" column="3">
<widget class="QPushButton" name="b_project_save_as"> <widget class="QPushButton" name="b_project_save_as">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
@@ -248,6 +248,26 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="4">
<widget class="QPushButton" name="b_project_clone">
<property name="maximumSize">
<size>
<width>23</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Clone Project</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/16x16/edit-copy.png</normaloff>:/16x16/edit-copy.png</iconset>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@@ -769,8 +789,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>877</width>
<height>19</height>
<width>982</width>
<height>25</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menu_Studio"> <widget class="QMenu" name="menu_Studio">
@@ -825,27 +845,6 @@
<addaction name="act_room_create"/> <addaction name="act_room_create"/>
<addaction name="menu_room_delete"/> <addaction name="menu_room_delete"/>
</widget> </widget>
<widget class="QMenu" name="menu_Project">
<property name="title">
<string>&amp;Project</string>
</property>
<widget class="QMenu" name="menu_project_load">
<property name="title">
<string>Load Project</string>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/16x16/document-open.png</normaloff>:/16x16/document-open.png</iconset>
</property>
</widget>
<addaction name="act_project_new"/>
<addaction name="menu_project_load"/>
<addaction name="act_project_save"/>
<addaction name="act_project_save_as"/>
<addaction name="act_project_unload"/>
<addaction name="separator"/>
<addaction name="act_project_properties"/>
</widget>
<widget class="QMenu" name="menu_Application"> <widget class="QMenu" name="menu_Application">
<property name="title"> <property name="title">
<string>&amp;Application</string> <string>&amp;Application</string>
@@ -919,6 +918,28 @@
<addaction name="act_canvas_print"/> <addaction name="act_canvas_print"/>
<addaction name="act_canvas_save_image"/> <addaction name="act_canvas_save_image"/>
</widget> </widget>
<widget class="QMenu" name="menu_Project">
<property name="title">
<string>&amp;Project</string>
</property>
<widget class="QMenu" name="menu_project_load">
<property name="title">
<string>Load Project</string>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/16x16/document-open.png</normaloff>:/16x16/document-open.png</iconset>
</property>
</widget>
<addaction name="act_project_new"/>
<addaction name="menu_project_load"/>
<addaction name="act_project_save"/>
<addaction name="act_project_save_as"/>
<addaction name="act_project_clone"/>
<addaction name="act_project_unload"/>
<addaction name="separator"/>
<addaction name="act_project_properties"/>
</widget>
<addaction name="menu_Studio"/> <addaction name="menu_Studio"/>
<addaction name="menu_Room"/> <addaction name="menu_Room"/>
<addaction name="menu_Project"/> <addaction name="menu_Project"/>
@@ -1431,6 +1452,15 @@
<string>Export Hardware Ports...</string> <string>Export Hardware Ports...</string>
</property> </property>
</action> </action>
<action name="act_project_clone">
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/16x16/edit-copy.png</normaloff>:/16x16/edit-copy.png</iconset>
</property>
<property name="text">
<string>Clone Project</string>
</property>
</action>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>


+ 41
- 0
src/claudia.py View File

@@ -20,6 +20,7 @@
# Imports (Global) # Imports (Global)


from time import ctime from time import ctime
import shutil
from PyQt4.QtCore import QPointF from PyQt4.QtCore import QPointF
from PyQt4.QtGui import QAction, QApplication, QVBoxLayout, QTableWidgetItem, QTreeWidgetItem from PyQt4.QtGui import QAction, QApplication, QVBoxLayout, QTableWidgetItem, QTreeWidgetItem


@@ -314,6 +315,7 @@ class CreateRoomW(QDialog, ui_claudia_createroom.Ui_CreateRoomW):
class ProjectNameW(QDialog, ui_claudia_projectname.Ui_ProjectNameW): class ProjectNameW(QDialog, ui_claudia_projectname.Ui_ProjectNameW):
NEW = 1 NEW = 1
SAVE_AS = 2 SAVE_AS = 2
CLONE = 3


def __init__(self, parent, mode, proj_folder, path="", name=""): def __init__(self, parent, mode, proj_folder, path="", name=""):
QDialog.__init__(self, parent) QDialog.__init__(self, parent)
@@ -328,6 +330,11 @@ class ProjectNameW(QDialog, ui_claudia_projectname.Ui_ProjectNameW):
self.le_path.setText(path) self.le_path.setText(path)
self.le_name.setText(name) self.le_name.setText(name)
self.checkText(path, name) self.checkText(path, name)
elif mode == self.CLONE:
self.setWindowTitle(self.tr("Clone project"))
self.le_path.setText(path)
self.le_name.setText(name)
self.checkText(path, name)


self.m_proj_folder = proj_folder self.m_proj_folder = proj_folder


@@ -622,12 +629,14 @@ class ClaudiaMainW(AbstractCanvasJackClass):
self.ui.menu_project_load.setIcon(getIcon("document-open")) self.ui.menu_project_load.setIcon(getIcon("document-open"))
self.ui.act_project_save.setIcon(getIcon("document-save")) self.ui.act_project_save.setIcon(getIcon("document-save"))
self.ui.act_project_save_as.setIcon(getIcon("document-save-as")) self.ui.act_project_save_as.setIcon(getIcon("document-save-as"))
self.ui.act_project_clone.setIcon(getIcon("edit-copy"))
self.ui.act_project_unload.setIcon(getIcon("window-close")) self.ui.act_project_unload.setIcon(getIcon("window-close"))
self.ui.act_project_properties.setIcon(getIcon("edit-rename")) self.ui.act_project_properties.setIcon(getIcon("edit-rename"))
self.ui.b_project_new.setIcon(getIcon("document-new")) self.ui.b_project_new.setIcon(getIcon("document-new"))
self.ui.b_project_load.setIcon(getIcon("document-open")) self.ui.b_project_load.setIcon(getIcon("document-open"))
self.ui.b_project_save.setIcon(getIcon("document-save")) self.ui.b_project_save.setIcon(getIcon("document-save"))
self.ui.b_project_save_as.setIcon(getIcon("document-save-as")) self.ui.b_project_save_as.setIcon(getIcon("document-save-as"))
self.ui.b_project_clone.setIcon(getIcon("edit-copy"))


self.ui.act_app_add_new.setIcon(getIcon("list-add")) self.ui.act_app_add_new.setIcon(getIcon("list-add"))
self.ui.act_app_run_custom.setIcon(getIcon("system-run")) self.ui.act_app_run_custom.setIcon(getIcon("system-run"))
@@ -806,12 +815,14 @@ class ClaudiaMainW(AbstractCanvasJackClass):
self.connect(self.ui.act_project_new, SIGNAL("triggered()"), SLOT("slot_project_new()")) self.connect(self.ui.act_project_new, SIGNAL("triggered()"), SLOT("slot_project_new()"))
self.connect(self.ui.act_project_save, SIGNAL("triggered()"), SLOT("slot_project_save()")) self.connect(self.ui.act_project_save, SIGNAL("triggered()"), SLOT("slot_project_save()"))
self.connect(self.ui.act_project_save_as, SIGNAL("triggered()"), SLOT("slot_project_save_as()")) self.connect(self.ui.act_project_save_as, SIGNAL("triggered()"), SLOT("slot_project_save_as()"))
self.connect(self.ui.act_project_clone, SIGNAL("triggered()"), SLOT("slot_project_clone()"))
self.connect(self.ui.act_project_unload, SIGNAL("triggered()"), SLOT("slot_project_unload()")) self.connect(self.ui.act_project_unload, SIGNAL("triggered()"), SLOT("slot_project_unload()"))
self.connect(self.ui.act_project_properties, SIGNAL("triggered()"), SLOT("slot_project_properties()")) self.connect(self.ui.act_project_properties, SIGNAL("triggered()"), SLOT("slot_project_properties()"))
self.connect(self.ui.b_project_new, SIGNAL("clicked()"), SLOT("slot_project_new()")) self.connect(self.ui.b_project_new, SIGNAL("clicked()"), SLOT("slot_project_new()"))
self.connect(self.ui.b_project_load, SIGNAL("clicked()"), SLOT("slot_project_load()")) self.connect(self.ui.b_project_load, SIGNAL("clicked()"), SLOT("slot_project_load()"))
self.connect(self.ui.b_project_save, SIGNAL("clicked()"), SLOT("slot_project_save()")) self.connect(self.ui.b_project_save, SIGNAL("clicked()"), SLOT("slot_project_save()"))
self.connect(self.ui.b_project_save_as, SIGNAL("clicked()"), SLOT("slot_project_save_as()")) self.connect(self.ui.b_project_save_as, SIGNAL("clicked()"), SLOT("slot_project_save_as()"))
self.connect(self.ui.b_project_clone, SIGNAL("clicked()"), SLOT("slot_project_clone()"))
self.connect(self.ui.menu_project_load, SIGNAL("aboutToShow()"), SLOT("slot_updateMenuProjectList()")) self.connect(self.ui.menu_project_load, SIGNAL("aboutToShow()"), SLOT("slot_updateMenuProjectList()"))


self.connect(self.ui.act_app_add_new, SIGNAL("triggered()"), SLOT("slot_app_add_new()")) self.connect(self.ui.act_app_add_new, SIGNAL("triggered()"), SLOT("slot_app_add_new()"))
@@ -1710,6 +1721,27 @@ class ClaudiaMainW(AbstractCanvasJackClass):
else: else:
self.slot_project_new() self.slot_project_new()


@pyqtSlot()
def slot_project_clone(self):
project_graph_version, project_properties = gDBus.ladish_room.GetProjectProperties()

if len(project_properties) > 0:
path = str(project_properties['dir'])
name = str(project_properties['name'])
dialog = ProjectNameW(self, ProjectNameW.CLONE, self.fSavedSettings["Main/DefaultProjectFolder"], path, name)

if dialog.exec_():
if os.listdir(dialog.ret_project_path):
shutil.move(dialog.ret_project_path, dialog.ret_project_path+"_old")
else:
os.rmdir(dialog.ret_project_path)
shutil.copytree(path, dialog.ret_project_path)
gDBus.ladish_room.SaveProject(dialog.ret_project_path, dialog.ret_project_name)

else:
self.slot_project_new()

@pyqtSlot() @pyqtSlot()
def slot_project_unload(self): def slot_project_unload(self):
gDBus.ladish_room.UnloadProject() gDBus.ladish_room.UnloadProject()
@@ -1809,10 +1841,12 @@ class ClaudiaMainW(AbstractCanvasJackClass):
has_project = bool(len(project_properties) > 0) has_project = bool(len(project_properties) > 0)
self.ui.act_project_save.setEnabled(has_project) self.ui.act_project_save.setEnabled(has_project)
self.ui.act_project_save_as.setEnabled(has_project) self.ui.act_project_save_as.setEnabled(has_project)
self.ui.act_project_clone.setEnabled(has_project)
self.ui.act_project_unload.setEnabled(has_project) self.ui.act_project_unload.setEnabled(has_project)
self.ui.act_project_properties.setEnabled(has_project) self.ui.act_project_properties.setEnabled(has_project)
self.ui.b_project_save.setEnabled(has_project) self.ui.b_project_save.setEnabled(has_project)
self.ui.b_project_save_as.setEnabled(has_project) self.ui.b_project_save_as.setEnabled(has_project)
self.ui.b_project_clone.setEnabled(has_project)
self.ui.menu_Application.setEnabled(has_project) self.ui.menu_Application.setEnabled(has_project)


else: else:
@@ -1944,6 +1978,7 @@ class ClaudiaMainW(AbstractCanvasJackClass):
cMenu.addMenu(self.ui.menu_project_load) cMenu.addMenu(self.ui.menu_project_load)
act_x_save = cMenu.addAction(self.tr("Save Project")) act_x_save = cMenu.addAction(self.tr("Save Project"))
act_x_save_as = cMenu.addAction(self.tr("Save Project As...")) act_x_save_as = cMenu.addAction(self.tr("Save Project As..."))
act_x_clone = cMenu.addAction(self.tr("Clone Project"))
act_x_unload = cMenu.addAction(self.tr("Unload Project")) act_x_unload = cMenu.addAction(self.tr("Unload Project"))
cMenu.addSeparator() cMenu.addSeparator()
act_x_properties = cMenu.addAction(self.tr("Project Properties...")) act_x_properties = cMenu.addAction(self.tr("Project Properties..."))
@@ -1955,6 +1990,7 @@ class ClaudiaMainW(AbstractCanvasJackClass):
act_x_new.setIcon(QIcon.fromTheme("document-new", QIcon(":/16x16/document-new.png"))) act_x_new.setIcon(QIcon.fromTheme("document-new", QIcon(":/16x16/document-new.png")))
act_x_save.setIcon(QIcon.fromTheme("document-save", QIcon(":/16x16/document-save.png"))) act_x_save.setIcon(QIcon.fromTheme("document-save", QIcon(":/16x16/document-save.png")))
act_x_save_as.setIcon(QIcon.fromTheme("document-save-as", QIcon(":/16x16/document-save-as.png"))) act_x_save_as.setIcon(QIcon.fromTheme("document-save-as", QIcon(":/16x16/document-save-as.png")))
act_x_clone.setIcon(QIcon.fromTheme("edit-copy", QIcon(":/16x16/edit-copy.png")))
act_x_unload.setIcon(QIcon.fromTheme("window-close", QIcon(":/16x16/dialog-close.png"))) act_x_unload.setIcon(QIcon.fromTheme("window-close", QIcon(":/16x16/dialog-close.png")))
act_x_properties.setIcon(QIcon.fromTheme("edit-rename", QIcon(":/16x16/edit-rename.png"))) act_x_properties.setIcon(QIcon.fromTheme("edit-rename", QIcon(":/16x16/edit-rename.png")))
act_x_delete_room.setIcon(QIcon.fromTheme("edit-delete", QIcon(":/16x16/edit-delete.png"))) act_x_delete_room.setIcon(QIcon.fromTheme("edit-delete", QIcon(":/16x16/edit-delete.png")))
@@ -1967,6 +2003,7 @@ class ClaudiaMainW(AbstractCanvasJackClass):
act_x_run_custom.setEnabled(False) act_x_run_custom.setEnabled(False)
act_x_save.setEnabled(False) act_x_save.setEnabled(False)
act_x_save_as.setEnabled(False) act_x_save_as.setEnabled(False)
act_x_clone.setEnabled(False)
act_x_unload.setEnabled(False) act_x_unload.setEnabled(False)
act_x_properties.setEnabled(False) act_x_properties.setEnabled(False)


@@ -2013,6 +2050,8 @@ class ClaudiaMainW(AbstractCanvasJackClass):
self.slot_project_save() self.slot_project_save()
elif act_x_sel == act_x_save_as: elif act_x_sel == act_x_save_as:
self.slot_project_save_as() self.slot_project_save_as()
elif act_x_sel == act_x_clone:
self.slot_project_clone()
elif act_x_sel == act_x_unload: elif act_x_sel == act_x_unload:
self.slot_project_unload() self.slot_project_unload()
elif act_x_sel == act_x_properties: elif act_x_sel == act_x_properties:
@@ -2314,10 +2353,12 @@ class ClaudiaMainW(AbstractCanvasJackClass):


self.ui.act_project_save.setEnabled(has_project) self.ui.act_project_save.setEnabled(has_project)
self.ui.act_project_save_as.setEnabled(has_project) self.ui.act_project_save_as.setEnabled(has_project)
self.ui.act_project_clone.setEnabled(has_project)
self.ui.act_project_unload.setEnabled(has_project) self.ui.act_project_unload.setEnabled(has_project)
self.ui.act_project_properties.setEnabled(has_project) self.ui.act_project_properties.setEnabled(has_project)
self.ui.b_project_save.setEnabled(has_project) self.ui.b_project_save.setEnabled(has_project)
self.ui.b_project_save_as.setEnabled(has_project) self.ui.b_project_save_as.setEnabled(has_project)
self.ui.b_project_clone.setEnabled(has_project)
self.ui.menu_Application.setEnabled(has_project) self.ui.menu_Application.setEnabled(has_project)


if path == "/org/ladish/Studio": if path == "/org/ladish/Studio":


Loading…
Cancel
Save