예제 #1
0
    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()
예제 #2
0
    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
예제 #3
0
파일: PrjRes.py 프로젝트: XHermitOne/defis
 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
예제 #4
0
    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()
예제 #5
0
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)
예제 #6
0
    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
예제 #7
0
 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
예제 #8
0
    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()
예제 #9
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
예제 #10
0
    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