Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- """
- Moduo sadrži baznu implementaciju alata za kriptovanje.
- """
- import curses
- import copy
- from setuptools.command.easy_install import easy_install
- import Const
- import sys
- from list import DoublyLinkedList
- from stack import Stack
- from najnovije import Cezarbrat
- class CryptoCore(object):
- """
- Klasa predstavlja alat za kriptovanje.
- """
- def __init__(self, screen):
- self._screen = screen#sluzi da bi mogao da prosledim svoj tekst na ekran
- self.undoStack = Stack()
- self.redoStack = Stack()
- # dimenzije prikaza
- self._height, self._width = self._screen.getmaxyx()
- # trenutna pozicija kursora
- self._current_x = 0
- self._current_y = 0
- # pomeraji po x i y osi
- self._offset_x = 0
- self._offset_y = 0
- # sadržaj koji se prikazuje)
- self._content = DoublyLinkedList()
- self._content.append("PROJEKAT")
- def _refresh(self):
- """
- Metoda vrši osvežavanje ekrana.
- """
- self._height, self._width = self._screen.getmaxyx()
- self._screen.clear()
- lines = self._content.values()
- for line_index, line in enumerate(lines):
- diff = line_index-self._offset_y
- # izdvajanje vidljivog dela sadržaja
- if diff >= 0 and diff < self._height:
- visible = line[self._offset_x:self._width + self._offset_x - 1]
- self._screen.addstr(diff, 0, visible)
- self._screen.move(self._current_y-self._offset_y,
- self._current_x-self._offset_x)
- def _up(self):
- """
- Metoda vrši pomeraj kursora za jedan red naviše.
- """
- if self._current_y > 0:
- # provera izlaska iz vidljivog opsega po y-osi
- if self._offset_y == self._current_y:
- self._offset_y -= 1
- self._current_y -= 1
- # postavljanje kursora na kraj poslednje linije
- line = self._content[self._current_y]
- while self._current_x > len(line):
- self._left()
- def _down(self):
- """
- Metoda vrši pomeraj kursora za jedan red naniže.
- """
- if self._current_y < len(self._content)-1:
- # provera izlaska iz vidljivog opsega po y-osi
- if self._current_y-self._offset_y == self._height-1:
- self._offset_y += 1
- self._current_y += 1
- # postavljanje kursora na kraj poslednje linije
- line = self._content[self._current_y]
- while self._current_x > len(line):
- self._left()
- def _left(self):
- """
- Metoda vrši pomeraj kursora za jedno mesto ulevo.
- """
- if self._current_x > 0:
- # provera izlaska iz vidljivog opsega po x-osi
- if self._current_x == self._offset_x:
- self._offset_x -= 1
- self._current_x -= 1
- def _right(self):
- """
- Metoda vrši pomeraj kursora za jedno mesto udesno.
- """
- line = self._content[self._current_y]
- if line == None:
- return
- if line and self._current_x < len(line):
- # provera izlaska iz vidljivog opsega po x-osi
- if self._current_x-self._offset_x == self._width-1:
- self._offset_x += 1
- self._current_x += 1
- def load(self):
- f = open('recenice.txt', 'r')
- sadrzaj = f.readlines()
- for i in range(0, self._content.br):
- self._content.remove()
- for line in sadrzaj:
- self._content.append(line)
- f.close()
- def save (self):
- f = open('recenice.txt', 'w')
- sadrzaj = self._content.values()
- f.writelines(sadrzaj)
- f.close()
- def undo (self):
- lines = self.undoStack.pop()
- self.redoStack.push(self._content.copyValues()) #cuvanje sadrzaja pre undo-a
- self._content.clear() # praznjenje dvos, spregnute liste
- for line in lines:
- self._content.append(line)
- def redo (self):
- lines = self.redoStack.pop()
- self.undoStack.push(self._content.copyValues())
- self._content.clear() # praznjenje dvos, spregnute liste,zbog ponovnog punjenja
- for line in lines:
- self._content.append(line)
- def encrypt(self):
- '''
- self._screen.addstr(7,1, "Broj reda?")
- self._screen.refresh()
- brReda = self._screen.getstr(7, 2+len("Broj reda?"), 2)
- brReda = int(brReda)
- '''
- self._screen.addstr(8,1, "Korak?")
- self._screen.refresh()
- korak = self._screen.getstr(8, 2+len("Korak?"), 2)
- korak = int(korak)
- self._screen.addstr(8,1, "Odakle?")
- self._screen.refresh()
- odakle = self._screen.getstr(8, 2+len("Odakle?"), 2)
- odakle = int(odakle)
- self.redoStack.stack.clear()
- self._screen.addstr(8,1, "Dokle?")
- self._screen.refresh()
- dokle = self._screen.getstr(8, 2+len("Dokle?"), 2)
- dokle = int(dokle)
- cezar = Cezarbrat(korak)
- ######################################################
- self.undoStack.push(self._content.copyValues())
- ######################################################
- for i in range(odakle, dokle+1):
- self._content[i] = cezar.encrypt(self._content[i])
- def decrypt(self):
- self._screen.addstr(7,1, "Broj reda?")
- self._screen.refresh()
- brReda = self._screen.getstr(7, 2+len("Broj reda?"), 2)
- brReda = int(brReda)
- self._screen.addstr(8,1, "Korak?")
- self._screen.refresh()
- korak = self._screen.getstr(8, 2+len("Korak?"), 2)
- korak = int(brReda)
- shift = Cezarbrat(int(korak))
- self.undoStack.push(self._content.copyValues())
- self._content[brReda] = shift.decrypt(self._content[brReda])
- def process(self):#na istu foru refresh enkript za neko dugme, undo redo save load novog fajla
- """pri
- Metoda održava interakciju sa korisnikom.
- """
- while True:
- self._refresh()
- c = self._screen.getch()
- if c == curses.KEY_UP:
- self._up()
- elif c == curses.KEY_DOWN:
- self._down()
- elif c == curses.KEY_LEFT:
- self._left()
- elif c == curses.KEY_RIGHT:
- self._right()
- elif c == ord('q'):
- break
- elif c == Const.LOAD:
- self.load()
- elif c == Const.SAVE:
- self.save()
- elif c == Const.ENCRYPT:
- self.encrypt()
- elif c == Const.DECRYPT:
- self.decrypt()
- elif c == Const.REDO:
- self.redo()
- elif c == Const.UNDO:
- self.undo()
- def _content_values(self):
- f = open ('recenice.txt', 'r')
- for line in f.readlines():
- self._content.append(line)
- f.close()
- return self._content.values()
- def init(screen):
- instance = CryptoCore(screen)
- instance.process()
- if __name__ == '__main__':
- curses.wrapper(init)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement