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 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()
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 renameFile(self, NewFileName_): """ Переименовать файл хранилища. """ if NewFileName_ and ic_file.Exists(self._FileName): self.closeFile() ic_file.Rename(self._FileName, NewFileName_)
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
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)]
def makeNodeDir(self, NodeDir_=None): """ Создать папку-узел. """ if NodeDir_: self._NodeDir = NodeDir_ if not ic_file.Exists(self._NodeDir): ic_file.MakeDirs(self._NodeDir)
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)
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)
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
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
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
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_)
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
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
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()
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)
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()
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)
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_)
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))
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