def _get_ini_file_name(self): """ Определить полное имя файла настроек из имени проекта. """ prj_dir = ic_user.icGet('PRJ_DIR') if prj_dir: ini_file_name = prj_dir + '/' + self._cur_settings_list[0] + '.ini' else: prj_name = self._cur_settings_list[0] ini_file_name = ic_file.DirName( ic_file.DirName(ic_file.DirName(__file__)) ) + '/%s/%s/%s.ini' % (prj_name, prj_name, prj_name) return ini_file_name
def _selectedPassport(self): """ Определить какой паспорт выбран. """ type_name = None obj_name = None interface = None res_name = None subsys_name = None prj_node = self._prj_viewer.getSelectionNode() res_viewer = self._splitter.GetWindow2() if res_viewer is None: res_object = None else: res_object = res_viewer.getSelectedObject() res_file_name = None if res_object: type_name = res_object['type'] obj_name = res_object['name'] res_file_name = res_viewer.getNodeResFileName() else: res_file_name = prj_node.getFullResFileName() if res_file_name: # Это нужно чтобы мы точно были уверены что выбираем рут prj = prj_node.getRoot() if prj.isPrjRoot(): prj_path = prj.getPath() else: prj_path = prj.getParentRoot().getPath() root_prj_path = ic_file.DirName(prj_path) res_dirname = ic_file.DirName(res_file_name) # Заменить в пути файла ресурса путь до проекта if prj_path in res_file_name: # Ресурс находиться в этом же проекте res_name = res_file_name.replace(prj_path, '') subsys_name = ic_file.BaseName(prj_path) elif root_prj_path in res_dirname: # Ресурс находиться в подсистеме res_name = res_file_name.replace(res_dirname, '') subsys_name = ic_file.BaseName(res_dirname) if res_name[0] == '/': res_name = res_name[1:] unicode_psp = ((type_name, obj_name, interface, res_name, subsys_name), ) self._passport = ic_util.encode_unicode_struct(unicode_psp)
def addImg(self, sImgFileName=None): """ Добавить новый образ в библиотеку. """ if self._img_lib_res.isEmpty(): ic_dlg.icMsgBox(u'ОШИБКА', u'Не определена библиотека образов!', self.getObject()) return None dlg = self.GetNameObj('ImgLibDlg') if sImgFileName is None: sImgFileName = ic_dlg.icImageDlg(dlg, self._img_dir) # Сохранить выбранную папку как папку картинок self.setImgDir(ic_file.DirName(sImgFileName)) self.saveImgDir() if sImgFileName: # Серилизовать и добавить образ self._img_lib_res.addImg(sImgFileName) self._img_lib_res.saveImgLib() # Добавить в словарь образов img_name = ic_file.SplitExt(ic_file.BaseName(sImgFileName))[0] # Заменить все минусы на подчеркивание # иначе в генерирумом фалйе будут имена объектов с минусами (SyntaxisError) img_name = img_name.replace('-', '_') img = ic_bmp.createBitmap(sImgFileName) self._img_dict[img_name] = img return img_name return None
def Clone(self, CloneName_): """ Клонировать узел. @param CloneName_: Имя клона. """ new_dir_name = ic_file.DirName(self._NodeDir) + '/' + CloneName_ # Клонировать только если такого директория нет if not ic_file.Exists(new_dir_name): self.closeAllFiles() ic_file.CloneDir(self._NodeDir, new_dir_name, False) # Установить имя в файле свойств file = None try: file = shelve.open(new_dir_name + '/' + DIR_STORAGE_PROPERTY_FILE_NAME, protocol=FILE_STORAGE_PROTOCOL, writeback=self._cache) file['name'] = CloneName_ file.sync() file.close() except: if file: file.close() if self._ParentNode: self._ParentNode.ReLoad()
def Clone(self, CloneName_): """ Клонировать узел. @param CloneName_: Имя клона. """ new_file_name = ic_file.DirName( self._FileName) + '/' + CloneName_ + FILE_STORAGE_EXT # Клонировать только если такого файла нет if not ic_file.Exists(new_file_name): self.closeFile() ic_file.icCopyFile(self._FileName, new_file_name, False) # Заменить имя узла в файле file = None try: file = shelve.open(new_file_name, protocol=FILE_STORAGE_PROTOCOL, writeback=self._cache) property = dict(file['property']) property['name'] = CloneName_ file['property'] = property file.sync() file.close() except: if file: file.close() if self._ParentNode: self._ParentNode.ReLoad()
def runPublicWizard(Parent_, PrjResFileName_): """ Запуск визарда создания пакета публикации. @param Parent_: Родительское окно. @param PrjResFileName_: Имя ресурса проекта. """ public_maker = zipPublicSystem(ic_file.DirName(PrjResFileName_)) wiz = wizard.Wizard(Parent_, -1, u'Создание пакета публикации', imglib.imgInstallWizard) page = PublicPage(wiz, u'Атрибуты пакета публикации', public_maker) wiz.FitToPage(page) if wiz.RunWizard(page): # Сохранить атрибуты проекта public_maker.setPrjName(page.sizer.evalSpace['_dict_obj']['TextPrjName'].GetValue()) public_maker.setAutoVer(page.sizer.evalSpace['_dict_obj']['AutoVerCheckBox'].GetValue()) public_maker.setPrjVersion(page.sizer.evalSpace['_dict_obj']['TextVersion'].GetValue()) public_maker.setArchivator(page.sizer.evalSpace['_dict_obj']['TextArchiveSys'].GetValue()) public_maker.makeInstallPackage() ic_dlg.icMsgBox(u'ВНИМАНИЕ', u'Создан пакет публикации.') else: ic_dlg.icMsgBox(u'ВЫХОД', u'Выход из визарда создания пакета публикации')
def setPrjResFileName(self, PrjResFileName_): self._PrjResFileName = PrjResFileName_ if self._PrjResFileName is None: self._PrjResDir = ic_user.icGet('PRJ_DIR') self._PrjResFileName = self._PrjResDir + '/%s.pro' % self._PrjName else: self._PrjResDir = ic_file.DirName(self._PrjResFileName)
def ProccessFunc(Parent_, Msg_, Func_, FuncArgs_=(), FuncKW_={}, Frames_=None, bDoubleLine=False, bAutoIncr=False): """ Окно ожидания. @param Parent_: Ссылка на окно. @param Msg_: Текст диалога. @param Func_: Функция, которую необходимо подождать. @param FuncArgs_: Аргументы функции. @param FuncKW_: Именованные аргументы функции. @param Frames_: Файлы-кадры. """ global ic_proccess_dlg if ic_proccess_dlg: return Func_(*FuncArgs_, **FuncKW_) wait_result = [None] if not Frames_: # Определить кадры по умолчанию wait_dir = ic_file.DirName(__file__) + '/Wait/' Frames_ = [ wait_dir + 'Wait1.png', wait_dir + 'Wait2.png', wait_dir + 'Wait3.png', wait_dir + 'Wait4.png', wait_dir + 'Wait5.png', wait_dir + 'Wait6.png', wait_dir + 'Wait7.png', wait_dir + 'Wait8.png', wait_dir + 'Wait9.png', wait_dir + 'Wait10.png', wait_dir + 'Wait11.png', wait_dir + 'Wait12.png', wait_dir + 'Wait13.png', wait_dir + 'Wait14.png', wait_dir + 'Wait15.png' ] if bDoubleLine: ic_proccess_dlg = wait_box = icThreadMessageBox(Parent_, Frames_, Msg_, Msg2_='', min2=0, max2=100, bAutoIncr=bAutoIncr) else: ic_proccess_dlg = wait_box = icThreadMessageBox(Parent_, Frames_, Msg_, bAutoIncr=bAutoIncr) wait_box.SetResultList(wait_result) # Запустить функцию ожидания thread.start_new(wait_box.Run, (Func_, FuncArgs_, FuncKW_)) wait_box.ShowModal() wait_box.Destroy() ic_proccess_dlg = None return wait_result[0]
def _save_prj(self, PrjFileName_, Prj_=None): """ Непосредственное сохранение проекта. @param PrjFileName_: Имя файла проекта. @param Prj_: Структура проекта. @return: Возвращает результат выполнения True/False. """ if Prj_ is None: Prj_ = self._prepareDataPrj(self._prj) ok = ic_res.SaveResourcePickle(PrjFileName_.strip(), Prj_) # Кроме того, что сохраняем проект, еще делаем его пакетом ic_res.CreateInitFile(ic_file.DirName(PrjFileName_.strip())) return ok
def LoadProjectProccess(Parent_, Msg_, Func_, FuncArgs_=(), FuncKW_={}, Frames_=None, bAutoIncr=False): """ Окно ожидания. @param Parent_: Ссылка на окно. @param Msg_: Текст диалога. @param Func_: Функция, которую необходимо подождать. @param FuncArgs_: Аргументы функции. @param FuncKW_: Именованные аргументы функции. @param Frames_: Файлы-кадры. """ global ic_proccess_dlg if ic_proccess_dlg: return Func_(*FuncArgs_, **FuncKW_) wait_result = [None] if not Frames_: # Определить кадры по умолчанию wait_dir = ic_file.DirName(__file__) + '/Wait/' Frames_ = [wait_dir + 'logo.jpg'] ic_proccess_dlg = wait_box = icThreadLoadProjectDlg(Parent_, Frames_, Msg_, bAutoIncr=bAutoIncr) wait_box.SetResultList(wait_result) # Запустить функцию ожидания thread.start_new(wait_box.Run, (Func_, FuncArgs_, FuncKW_)) wait_box.ShowModal() wait_box.Destroy() ic_proccess_dlg = None return wait_result[0]
def openPrj(self, PrjFileName_=None): """ Открыть проект. """ tree_prj = self.getParent() if PrjFileName_ is None: prj_file = ic_dlg.icFileDlg(tree_prj, _('Open project'), _('Project file (*.pro)|*.pro')) else: prj_file = PrjFileName_ if prj_file and os.path.exists(prj_file): # Проверка тот ли мы проект загрузили prj_name, sub_sys_name = self.getPrjSubsys(prj_file) if prj_name != sub_sys_name: ic_dlg.icMsgBox( u'ВНИМАНИЕ!', u'Load subsystem <%s> to project <%s>! After load all changes will lost. subsys: <%s>, project: <%s>!' % (sub_sys_name, prj_name, sub_sys_name, prj_name), tree_prj) self.delMyLocks() # Удалить блокировки из старого проекта self.logout() # Определить окружение проекта # ВНИМАНИЕ! При инициализации окружения после открытия в контексте ядра # должен отразиться актуальный проект------------------------------+ # Иначе дерево проекта для выбора паспорта не обновляется | # Поэтому явно задаем корень проекта в окружении v ic_user.InitEnv(ic_file.DirName(prj_file), PrjName=prj_name, PRJ_ROOT=self) # Регистрация программиста if not self.login(prj_filename=prj_file): return # Удалить все из дерева tree_prj.DeleteAllItems() # Закрыть все tree_prj.res_editor.CloseResource() if tree_prj.ide: tree_prj.ide.CloseFile(None) # Построить дерево узлов по ресурсному файлу self.prj_res_manager.openPrj(prj_file) self.imp_prj_file_name = prj_file self._openDefault() # Сохранить время и размер до следующей синхронизации self.prj_res_time = ic_file.GetMakeFileTime(prj_file) self.prj_res_size = ic_file.GetFileSize(prj_file) # определить папку блокировок self.lock_dir = ic_file.DirName( ic_file.DirName(prj_file)) + '/lock' log.debug(u'Init LOCK DIR: <%s>' % self.lock_dir) self.delMyLocks() # Удалить блокировки из вновь открытого проекта # Создание ресурсов for cur_res in self.prj_res_manager.getPrjRoot(): self.buildPrjRes(self.getResources(), cur_res.values()[0], cur_res.keys()[0]) # Создание дерева функционала self.getModules().buildPrjPy(os.path.dirname(prj_file)) # Создание дерева импортируемых систем self.getImpSystems().buildSubSystemsTree( self.prj_res_manager.getImportSystems()) # Когда уже все определено сделать дополнительные # действия по инсталяции проекта в редакторе self._install() # Обновить дерево пользовательских компонентов tree_prj.res_editor.InitObjectsInfo() # Установить в дереве корень tree_prj.setRoot(self) self._is_opened_prj = True