示例#1
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()
示例#2
0
    def delete(self):
        """
        Удалить модуль.
        """
        # ВОЗМОЖНО ЭТОТ МОДУЛЬ ПРОПИСАН КАК РЕСУРС!!!
        # Сначала удалить из файла *.pro
        self.getRoot().prj_res_manager.delRes(self.name, 'py')
        # Затем удалить из дерева
        prj_node.PrjNode.delete(self)

        module_name = os.path.join(self.getModulePath(), self.name + self.ext)

        # Выгрузить из редакторов
        self.getRoot().getParent().ide.CloseFile(module_name)
        res_file_name = self.getRoot().getParent().res_editor.GetResFileName()
        if res_file_name and ic_file.SamePathWin(module_name, res_file_name):
            self.getRoot().getParent().res_editor.CloseResource()

        # Удалить все блокировки
        self.getRoot().unlockAllPyFilesInIDE()

        # И в конце удалить папку пакета, если она есть
        if ic_file.Exists(module_name):
            # ВНИМАНИЕ! Удаляем файл, но оставляем его бекапную версию
            # для возможного восстановления!
            ic_file.icCreateBAKFile(module_name)
            ic_file.Remove(module_name)
        # Для синхронизации дерева проекта
        self.getRoot().save()
示例#3
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()
示例#4
0
 def renameFile(self, NewFileName_):
     """
     Переименовать файл хранилища.
     """
     if NewFileName_ and ic_file.Exists(self._FileName):
         self.closeFile()
         ic_file.Rename(self._FileName, NewFileName_)
示例#5
0
 def unregisterUser(self, CurDirPrj_=None):
     """
     Сброс блокирующих записей пользователей при некорректном завершении программы.
     @param CurDirPrj_: Текущая папка проекта.
     """
     try:
         if CurDirPrj_ is None:
             CurDirPrj_ = ic_file.getCurDirPrj()
         reg_user_journal_file_name = CurDirPrj_+'/log/reg_user_journal.ini'
         if ic_file.Exists(reg_user_journal_file_name):
             reg_user_journal = ini.INI2Dict(reg_user_journal_file_name)
             if reg_user_journal and 'CURRENT_USERS' in reg_user_journal:
                 users = [(True, usr) for usr in reg_user_journal['CURRENT_USERS'].keys()]
                 parent_win = ic_user.getMainWin()
                 selected_users = ic_dlg.icMultiChoiceDlg(parent_win,
                                                          u'Зарегистрированные пользователи',
                                                          u'Снятие регистрации пользователей',
                                                          tuple(users))
                 if selected_users:
                     for is_select, usr in selected_users:
                         if not is_select:
                             del reg_user_journal['CURRENT_USERS'][usr]
                     if not reg_user_journal['CURRENT_USERS']:
                         del reg_user_journal['CURRENT_USERS']
                     print(reg_user_journal)
                     # Сохранить изменения
                     return ini.Dict2INI(reg_user_journal,
                                         reg_user_journal_file_name, rewrite=True)
     except:
         io_prnt.outErr(u'Ошибка в функции управления регистрационной информацией пользователей.')
     return False
示例#6
0
    def __delitem__(self, key):
        if not self.isOpen():
            self.Open()

        if issubclass(self._StorageDB[str(key)].__class__, icFileStorage):
            # Проверка на удаление файла
            self._StorageDB[str(key)].closeFile()
            file_name = self._StorageDB[str(key)].getFileName()
            if ic_file.Exists(file_name) and ic_file.IsFile(file_name):
                ic_file.Remove(file_name)
        elif issubclass(self._StorageDB[str(key)].__class__, icDirStorage):
            # Проверка на удаление директории
            self._StorageDB[str(key)].closeAllFiles()
            dir_name = self._StorageDB[str(key)].getNodeDir()
            if ic_file.Exists(dir_name) and ic_file.IsDir(dir_name):
                ic_file.RemoveTreeDir(dir_name, 1)
        if str(key) in self._StorageDB:
            del self._StorageDB[str(key)]
示例#7
0
    def makeNodeDir(self, NodeDir_=None):
        """
        Создать папку-узел.
        """
        if NodeDir_:
            self._NodeDir = NodeDir_

        if not ic_file.Exists(self._NodeDir):
            ic_file.MakeDirs(self._NodeDir)
示例#8
0
 def edit(self):
     """
     Запуск редактирования INI файла настроек
     """
     ini_file_name = self._get_ini_file_name()
     if ic_file.Exists(ini_file_name):
         cmd = 'gedit %s &' % ini_file_name
         ic_exec.icSysCmd(cmd)
     else:
         io_prnt.outWarning(u'INI файл <%s> не найден' % ini_file_name)
示例#9
0
 def openPrj(self, PrjFileName_):
     """
     Открыть файл проекта.
     """
     path, name = os.path.split(PrjFileName_)
     ic.set_ini_file(path)
     self.prj_file_name = PrjFileName_
     if ic_file.IsFile(self.prj_file_name) and \
        ic_file.Exists(self.prj_file_name):
         prj = util.readAndEvalFile(self.prj_file_name, bRefresh=True)
         self._prj = self._prepareDataPrj(prj)
示例#10
0
 def getRes(self):
     """
     Определение ресурса.
     """
     if self._user_res is None:
         if self._user_res_file_name:
             if ic_file.Exists(self._user_res_file_name):
                 self._user_res = ic_res.ReadAndEvalFile(
                     self._user_res_file_name)
             else:
                 self._user_res = {'admin': self.newDefaultUser()}
                 self._user_res['admin']['name'] = 'admin'
     return self._user_res
示例#11
0
 def copyNodeDir(self, NewNodeDir_):
     """
     Скопировать папку.
     @param NewNodeDir_: Новая папка узла.
     """
     try:
         if not ic_file.SamePathWin(NewNodeDir_, self._NodeDir):
             if NewNodeDir_ and ic_file.Exists(self._NodeDir):
                 self.closeAllFiles()
                 ic_file.CopyTreeDir(self._NodeDir, NewNodeDir_)
     except:
         print('icDirStorage copyNodeDir ERROR')
         raise
示例#12
0
def property_editor_ctrl(attr, value, propEdt, *arg, **kwarg):
    """
    Стандартная функция контроля.
    """
    if attr == 'file_name':
        if value and ic_file.Exists(value):
            # Серилизованная строка
            srlz_string = icimg2py.getImgFileData(value)
            # Т.к. функция создания серилизованной строки
            # создает строку для вставки ее в код
            # надо сделать над ней eval
            body = eval(srlz_string)
            propEdt.setPropertyValue('_body', body, False)
            return coderror.IC_CTRL_OK
示例#13
0
 def clearStorageDir(self, StorageDir_=None):
     """
     Полное очищение главной папки.
     """
     if StorageDir_ is None:
         StorageDir_ = self._NodeDir
     if ic_file.Exists(StorageDir_):
         try:
             ic_file.RemoveTreeDir(StorageDir_, True)
             ic_file.MakeDirs(StorageDir_)
         except:
             io_prnt.outErr(
                 u'Ошибка очистки папки объектного хранилища <%s>' %
                 StorageDir_)
示例#14
0
 def renameNodeDir(self, NewNodeDir_):
     """
     Переименовать папку.
     @param NewNodeDir_: Новая папка узла.
     """
     try:
         if not ic_file.SamePathWin(NewNodeDir_, self._NodeDir):
             if NewNodeDir_ and ic_file.Exists(self._NodeDir):
                 self.closeAllFiles()
                 ic_file.Rename(self._NodeDir, NewNodeDir_)
                 # Переименовать имя узла
     except:
         print('icDirStorage renameNodeDir ERROR')
         raise
示例#15
0
    def getData(self):
        """
        Получить данные.
        """
        data = None
        if self._file is not None:
            data = self._get_data(self._children)
        else:
            # Если файл БД существует, то он может быть
            # просто не открыт
            if ic_file.Exists(self.getFileName()):
                self.Open()
                data = self._get_data(self._children)

        return data
示例#16
0
    def save(self):
        """
        Сорхранить изменения в хранилище.
        """
        if self._mode == DIR_STORAGE_TRANSACT_MODE:
            # Автоматическое сохранение отключено
            return

        # Сохранить свои свойства
        if self._NodeDir and (not ic_file.Exists(self._NodeDir)):
            self.makeNodeDir()
        if self.property:
            self.property.save()
        # Сохранить все дочерние узлы
        for child in self._StorageDB.values():
            child.save()
示例#17
0
 def setMiddleIcon(self, ICOFileName_):
     """
     Иконка в центре поля.
     @param ICOFileName_: Имя файла *.ico.
     """
     if ICOFileName_:
         ico_file_name = ic_file.AbsolutePath(ICOFileName_)
         if ic_file.Exists(ico_file_name):
             icon = wx.Icon(ico_file_name, wx.BITMAP_TYPE_ICO)
             icon.SetWidth(24)
             icon.SetHeight(24)
             if icon.Ok():
                 self.SetMiddleIcon(icon)
             else:
                 log.warning(u'Компонент Speedmeter. Некорректная иконка <%s>' % ico_file_name)
         else:
             log.warning(u'Компонент Speedmeter. Файл иконки <%s> не существует' % ico_file_name)
示例#18
0
    def delete(self):
        """
        Удалить пакет.
        """
        # Затем удалить из дерева
        prj_node.PrjNode.delete(self)
        # И в конце удалить папку пакета, если она есть
        package = self.getPath()
        # Выгрузить из редакторов
        self.getRoot().getParent().ide.CloseFile(package + '/__init__.py')

        # Удалить все блокировки
        self.getRoot().unlockAllPyFilesInIDE()

        if ic_file.Exists(package):
            ic_file.RemoveTreeDir(package, 1)
        # Для синхронизации дерева проекта
        self.getRoot().save()
示例#19
0
 def OnHelp(self, event):
     """
     Помощь...
     """
     import ic
     hlp_file_name = os.path.join(os.path.dirname(ic.__file__), 'doc', 'index.html')
     if ic_file.Exists(hlp_file_name):
         if wx.Platform == '__WXMSW__':
             hlp_file_name = os.path.normpath(hlp_file_name)
             ic_exec.icSysCmd('start explorer ' + hlp_file_name)
         elif wx.Platform == '__WXGTK__':
             try:
                 www_browser = os.environ.get('BROWSER', DEFAULT_WWW_BROWSER)
                 ic_exec.icSysCmd(www_browser + ' ' + hlp_file_name)
             except:
                 io_prnt.outErr()
     else:
         ic_dlg.icWarningBox(u'ПОМОЩЬ',
                             u'Файл помощи <%s> не найден. Запустите генерацию документации :-)' % hlp_file_name)
示例#20
0
def runImageLibraryBrowser(ParentWin_, PrjIniFile_=None, ImgLibFileName_=None):
    """
    Запуск браузера библиотеки образов.
    @param ParentWin_: РОдительское окно.
    @param PrjIniFile_: Файл настроек проекта.
    @param ImgLibFileName_: Имя файла библиотеки образов.
    """
    img_lib_browser = icImageLibraryBrowser(ParentWin_)
    if PrjIniFile_:
        img_lib_browser.loadImgDir(PrjIniFile_)

    if ImgLibFileName_ and ic_file.Exists(ImgLibFileName_):
        result = img_lib_browser.openImgLib(ImgLibFileName_)
        if result:
            img_lib_browser.refreshImgGrid()

            # Прописть в заголовке диалогового окна имя файла библиотеки образов
            dlg = img_lib_browser.GetNameObj('ImgLibDlg')
            dlg.SetTitle(u'Библиотека образов ' + ImgLibFileName_)
示例#21
0
 def setMiddleIcon(self,ICOFileName_):
     """
     Иконка в центре поля.
     @param ICOFileName_: Имя файла *.ico.
     """
     print('####',ICOFileName_)
     if ICOFileName_:
         ico_file_name=ic_file.AbsolutePath(ICOFileName_)
         if ic_file.Exists(ico_file_name):
             icon=wx.Icon(ico_file_name,wx.BITMAP_TYPE_ICO)
             icon.SetWidth(24)
             icon.SetHeight(24)
             print('!!!!!!!!!!!!!!!!11',icon.Ok())
             if icon.Ok():
                 print('!!!!!!!!!!!!!!!!11')
                 self.SetMiddleIcon(icon)
             else:
                 ic_log.icToLog(u'Компонент Speedometer. Некорректная иконка')
         else:
             ic_log.icToLog(u'Компонент Speedometer. Файл иконки %s не существует'%(ico_file_name))
示例#22
0
 def createNewImgLibFile(self):
     """
     Создание нового файла библиотеки образов.
     """
     dlg = self.GetNameObj('ImgLibDlg')
     img_lib_name = ic_dlg.icTextEntryDlg(
         dlg, u'Имя библиотеки образов', u'Введите имя библиотеки образов:',
         'default')
     img_lib_dir = ic_dlg.icDirDlg(dlg,
                                   u'Папка размещения библиотеки образов')
     if img_lib_dir and img_lib_name:
         img_lib_file_name = img_lib_dir + '/' + img_lib_name + '.py'
         if ic_file.Exists(img_lib_file_name):
             ic_dlg.icMsgBox(u'ОШИБКА',
                             u'Файл %s уже существует!' % img_lib_file_name,
                             dlg)
             return False
         # Создать новый файл
         self._img_lib_res.createNewImgLib()
         return self._img_lib_res.saveImgLib(img_lib_file_name)
     return False