示例#1
0
 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
示例#2
0
    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)
示例#3
0
    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
示例#4
0
 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()
示例#5
0
 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()
示例#6
0
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'Выход из визарда создания пакета публикации')
示例#7
0
 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)
示例#8
0
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]
示例#9
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
示例#10
0
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]
示例#11
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