def onCFFileChoiceButtonMouseClick(self, event): """ Обработчик кнопки выбора CF файла конфигурации 1с. """ default_dir = os.getcwd() cf_file_name = ic_dlg.icFileDlg(self, u'Выберите файл конфигурации 1с', u'Файл конфигурации 1с(*.cf)|*.cf', default_dir) if cf_file_name: self.cfFileTxt.SetValue(cf_file_name) default_dir = os.path.join( os.path.dirname(cf_file_name), os.path.basename(cf_file_name).replace('.', '_').replace(' ', '_')) default_dir = os.path.abspath(default_dir) self.cfDirTxt.SetValue(default_dir) if not self.cfFileTxt.GetValue() or not self.cfDirTxt.GetValue(): wizard = self.GetParent().GetParent() self.GetParent().SetNext(wizard.getFinishPage()) else: wizard = self.GetParent().GetParent() self.GetParent().SetNext(wizard.getNextPage(self.GetParent())) event.Skip()
def openImgLib(self, sImgLibFileName=None): """ Открыть библиотеку образов. @param sImgLibFileName: Имя файла библиотеки образов. """ dlg = self.GetNameObj('ImgLibDlg') if sImgLibFileName is None: sImgLibFileName = ic_dlg.icFileDlg( dlg, u'', u'Библиотеки образов (*.py)|*.py') if sImgLibFileName: self._img_lib_res.loadImgLib(sImgLibFileName) self._img_dict = self._img_lib_res.getImages() return True return False
def savePrj(self): """ Сохранить проект. """ if not self.prj_file_name: self.prj_file_name = ic_dlg.icFileDlg( None, u'Создание проекта', u'Project file (*.pro)|*.pro') if self.prj_file_name: prj_path = os.path.dirname(self.prj_file_name.strip()) if (not os.path.isdir(prj_path)) or \ (not self._prj[0]['__py__']): # Если директории проекта не существует, то # сохранить ее в __py__ self._prj[0]['__py__'] = prj_path return self._save_prj(self.prj_file_name.strip(), self._prepareDataPrj(self._prj)) return False
def OnImportResource(self, event): """ Импортировать ресурс. """ tree_prj = self._Parent.getRoot().getParent() res_file_name = ic_dlg.icFileDlg(tree_prj, u'Выберите ресурсный файл', self.import_res_filter) if res_file_name: node = self._Parent.importChild(res_file_name) # Добавить объект в отображаемом дереве new_item = tree_prj.AddBranchInSelection(node) tree_prj.SelectItem(new_item) node.edit() # Обновление дерева проектов tree_prj.Refresh()
def gen_wxfb_prj(parent=None, resource=None, fbp_filename=None): """ Функция запуска генерации форм wxFormBuilder бизнес объекта/документа. @param parent: Родительское окно. @param resource: Ресурс, по которому происходит генерация @param fbp_filename: Файл проекта wxFormBuilder для сохранения. @return: True - генерация прошла успешно. False - Возникла какая-то ошибка. """ if parent is None: app = wx.GetApp() parent = app.GetTopWindow() if resource is None: log.warning(u'Не определен ресурс генерации форм wxFormBuilder') return False if fbp_filename is None: fbp_filename = ic_dlg.icFileDlg(parent, u'Выбор файла проекта wxFormBuilder для генерации', u'wxFormBuilder project (*.fbp)|*.fbp') if not fbp_filename: log.warning(u'Не определен файл проекта wxFormBuilder для генерации форм') return False if os.path.exists(fbp_filename): if not ic_dlg.icAskBox(u'ВНИМАНИЕ', u'Файл <%s> уже существует. Перезаписать его?' % fbp_filename): # Не надо перезаписывать, # тогда нет смысла и генерировать его return False generator = icWxFBPrjGenerator() if not generator.isParsed(resource): ic_dlg.icWarningBox(u'ОШИБКА', u'Тип ресурса не поддерживается генератором форм wxFormBuilder') return False generator.setResource(resource) generator.setGenFilename(fbp_filename) txt = generator.genPrj() return generator.savePrj(txt)
def saveAs(self, ResFileName_=None): """ Сохранить как... @param ResFileName_: Имя ресурсного файла, если None, то сделать его запрос. @return: Функция возвращает результат выполнения операции сохранения True/False. """ self._user_res_file_name = ResFileName_ if self._user_res_file_name is None: self._user_res_file_name = ic_dlg.icFileDlg( None, u'Create user access file', u'User access file (*.acc)|*.acc') if self._user_res_file_name: # Создать путь к файлу ic_file.MakeDirs(ic_file.Split(self._user_res_file_name)[0]) # Сохранить сам файл return ic_res.SaveResourceText(self._user_res_file_name, self._user_res) return False
def load(self, ResFileName_=None): """ Загрузить из ресурсного файла. @param ResFileName_: Имя ресурсного файла, если None, то сделать его запрос. """ self._user_res_file_name = ResFileName_ if self._user_res_file_name is None: self._user_res_file_name = ic_dlg.icFileDlg( None, u'Create user access file', u'User access file (*.acc)|*.acc') self._user_res = None if self._user_res_file_name and \ os.path.exists(self._user_res_file_name): # Обновить ресурс? refresh = self._res_maker_time != ic_file.GetMakeFileTime( self._user_res_file_name) self._user_res = ic_res.ReadAndEvalFile(self._user_res_file_name, bRefresh=refresh) self._res_maker_time = ic_file.GetMakeFileTime( self._user_res_file_name) return self._user_res
def newImpSys(self): """ Добавить новую подсистему в словарь. @return: Возвращает в случае неудачи None, в случае успеха сформированный список. """ prj_data = None # диалог выбора файла *.pro prj_file_name = ic_dlg.icFileDlg( self.getParentRoot().getParent().getIDEFrame(), u'Выберите подсистему', u'Project file (*.pro)|*.pro') if prj_file_name: # открыть файл *.pro prj_data = self.openPrjFile(prj_file_name) new_name = self.readPrjName(prj_data) if self.getParentRoot().prj_res_manager.isImpSubSys(new_name): ic_dlg.icMsgBox( u'ВНИМАНИЕ', u'Подсистема с таким наименованием уже сеществует!') return None else: # Скопировать в папку текущего проекта prj_dir = self._Parent.copySubSys(prj_file_name) self.imp_prj_file_name = ic_file.GetFilesByExt( prj_dir, '.pro')[0] # добавить в список if self.imp_prj_file_name: self.name = new_name self.getParentRoot().prj_res_manager.newSubSys( self.name, prj_file_name, prj_data[0]['__py__']) # Инициализировать self.Default() # И инсталлировать self._install() return self.getParentRoot().prj_res_manager.getImportSystems()
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
def login(self, User_=None, Password_=None, prj_filename=None): """ Открыть регистрацию программиста в режиме редактирования. @param User_: Имя пользователя. @param Password_: Пароль. Если имя или пароль не указаны, то выводится окно входа в систему. @param prj_filename: Имя файла проекта, который пытаемся открыть. Необходимо для снятия блокировки пользователя. """ # ВНИМАНИЕ! # Меняется проект, меняется и файл ресурса ограничения доступа # поэтому объект управления правами пользователей необходимо # создавать каждый раз заново при открытии проекта result = False try: result = ic_user.getKernel().Login(User_, Password_) except icexceptions.LoginInvalidException: ic_dlg.icMsgBox( u'Вход в систему', u'Неправильный пользователь или пароль. Доступ запрещен.') except icexceptions.LoginErrorException: if ic_dlg.icAskBox( u'Вход в систему', u'Пользователь уже зарегистрирован в системе. Снять регистрацию пользователя?' ): from ic.engine import icusermanager user_mngr = icusermanager.icUserManager() tree_ctrl = self.getParent() pro_file_name = prj_filename if not os.path.exists(pro_file_name): pro_file_name = ic_dlg.icFileDlg( tree_ctrl, u'Удаление регистрационной информации о пользователе из проекта', _('Project file (*.pro)|*.pro')) if pro_file_name: prj_dir = os.path.dirname(os.path.dirname(pro_file_name)) if os.path.exists(prj_dir): user_mngr.unregisterUser(prj_dir) except icexceptions.LoginDBExclusiveException: ic_dlg.icMsgBox( u'Вход в систему', u'БД открыта в монопольном режиме другим пользователем. Вход в систему запрещен.' ) except icexceptions.LoginWorkTimeException: ic_dlg.icMsgBox( u'Вход в систему', u'Попытка входа в систему в не регламентированное время пользователем. Вход в систему запрещен.' ) except: log.fatal(u'Ошибка регистрации пользователя') if result: from ic.kernel import icsettings icsettings.setProjectSettingsToEnvironment(self.name, ReDefine_=True) if result: self._prj_user = ic_user.getKernel().getUser() else: self._prj_user = None return result