Skip to content

Commit

Permalink
Add textview for cp 27
Browse files Browse the repository at this point in the history
  • Loading branch information
Enderbyte09 authored Sep 4, 2023
1 parent 17f2ac0 commit be8c8da
Show file tree
Hide file tree
Showing 9 changed files with 102 additions and 14 deletions.
13 changes: 5 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,15 @@ to provide the basic curses functionality

## What's New?

### Version 2.6.1
### Version 2.7

-Add maximum, minimum, and prefilnum for numericinput()
-Add textview() function

### Version 2.6: Numericinput
-Can be used for license agreements or file displays

-Add numericinput() function

-Configurable to allow negatives and decimals

-Number input
-Is resize friendly

-Supports file and text

curses-plus offers many utilities to make writing TUI applications easy. (TUI stands for Terminal User Interface)

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "cursesplus"
version = "2.6.1"
version = "2.7.0"
authors = [{name="Enderbyte Programs",email="enderbyte09@gmail.com"},]
description = "An extension program to curses that offers option menus, message boxes, file dialogs and more"
readme = "README.md"
Expand Down
23 changes: 21 additions & 2 deletions src/__cptest.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,30 @@
import cursesplus.messagebox
from time import sleep


message = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae ultricies leo integer malesuada. Dui id ornare arcu odio ut. Massa placerat duis ultricies lacus sed. Eu nisl nunc mi ipsum faucibus. Vulputate ut pharetra sit amet aliquam id diam. Enim nulla aliquet porttitor lacus luctus accumsan tortor. Malesuada bibendum arcu vitae elementum curabitur vitae. Diam sit amet nisl suscipit adipiscing bibendum est. Ipsum consequat nisl vel pretium lectus quam id leo. Viverra nam libero justo laoreet sit amet cursus. Justo eget magna fermentum iaculis eu non diam. Sapien nec sagittis aliquam malesuada bibendum arcu. Blandit cursus risus at ultrices mi tempus imperdiet. Enim nunc faucibus a pellentesque sit amet porttitor. Ac odio tempor orci dapibus ultrices in iaculis. Bibendum enim facilisis gravida neque convallis a cras semper. Non consectetur a erat nam at lectus urna. Molestie a iaculis at erat pellentesque.
Pellentesque eu tincidunt tortor aliquam nulla facilisi. Faucibus turpis in eu mi. Vestibulum lectus mauris ultrices eros in cursus turpis massa. Duis ut diam quam nulla porttitor massa. Ac tincidunt vitae semper quis. Tincidunt arcu non sodales neque sodales ut. Egestas maecenas pharetra convallis posuere morbi leo urna molestie. Velit ut tortor pretium viverra suspendisse. Ut sem nulla pharetra diam sit amet nisl suscipit adipiscing. Et tortor consequat id porta nibh. Sagittis id consectetur purus ut faucibus. Tellus in metus vulputate eu scelerisque felis. Sollicitudin nibh sit amet commodo nulla facilisi nullam vehicula ipsum. Mi ipsum faucibus vitae aliquet nec ullamcorper. Risus viverra adipiscing at in tellus integer feugiat scelerisque.
Sed faucibus turpis in eu. Amet commodo nulla facilisi nullam vehicula ipsum a arcu. Egestas integer eget aliquet nibh praesent tristique. Consequat semper viverra nam libero justo laoreet sit amet cursus. A condimentum vitae sapien pellentesque habitant morbi tristique. Pharetra pharetra massa massa ultricies. Malesuada pellentesque elit eget gravida cum sociis natoque. Purus faucibus ornare suspendisse sed nisi. Urna porttitor rhoncus dolor purus. Et tortor at risus viverra. In arcu cursus euismod quis viverra nibh. Sed ullamcorper morbi tincidunt ornare massa eget egestas purus. Urna neque viverra justo nec. Maecenas accumsan lacus vel facilisis. Duis tristique sollicitudin nibh sit. Arcu dictum varius duis at consectetur lorem. Dolor morbi non arcu risus quis. Sed libero enim sed faucibus turpis in eu mi bibendum. Posuere urna nec tincidunt praesent semper feugiat nibh sed. Interdum varius sit amet mattis vulputate enim.
Nunc non blandit massa enim nec dui. Aliquam vestibulum morbi blandit cursus. Vulputate enim nulla aliquet porttitor lacus luctus accumsan tortor posuere. Sit amet nulla facilisi morbi tempus iaculis urna id. Eget aliquet nibh praesent tristique magna sit. Nulla aliquet enim tortor at auctor urna nunc. Id interdum velit laoreet id donec ultrices tincidunt arcu non. Mollis aliquam ut porttitor leo a. Elit ut aliquam purus sit amet luctus venenatis. Condimentum vitae sapien pellentesque habitant morbi. Aliquam sem et tortor consequat id porta. At auctor urna nunc id cursus. Gravida rutrum quisque non tellus orci ac. Amet aliquam id diam maecenas ultricies mi eget mauris pharetra. Malesuada fames ac turpis egestas sed tempus urna et. Tincidunt lobortis feugiat vivamus at augue eget arcu. Duis convallis convallis tellus id interdum velit laoreet id. Sagittis nisl rhoncus mattis rhoncus urna neque viverra justo nec. Dui vivamus arcu felis bibendum ut tristique et. Molestie at elementum eu facilisis sed odio morbi quis commodo.
Faucibus turpis in eu mi bibendum. Et magnis dis parturient montes nascetur ridiculus. Tempor commodo ullamcorper a lacus vestibulum. Turpis in eu mi bibendum neque egestas congue. Sollicitudin ac orci phasellus egestas tellus. Consectetur adipiscing elit pellentesque habitant. Nisi vitae suscipit tellus mauris. At lectus urna duis convallis. Euismod nisi porta lorem mollis aliquam ut porttitor leo. Elit at imperdiet dui accumsan sit amet nulla. Augue eget arcu dictum varius duis at consectetur lorem. Molestie ac feugiat sed lectus vestibulum mattis. Neque viverra justo nec ultrices dui sapien eget mi. Amet consectetur adipiscing elit ut aliquam purus. Consequat nisl vel pretium lectus quam id leo in. Turpis massa tincidunt dui ut ornare lectus. Tristique nulla aliquet enim tortor at auctor. Porttitor lacus luctus accumsan tortor.
"""
e = ""
def __test__(stdscr):
global e
#e = cursesinput(stdscr,"Hello",5,50,prefiltext="This is a single line prefil",retremptylines=True).splitlines()
e = numericinput(stdscr,"What is your favourite number?",False,False,10,1000)
cursesplus.textview(stdscr,file="src/cursesplus/cp.py",message="LICENSE",isagreement=True,requireyes=True)

if __name__ == "__main__":
#Testing things
Expand Down
2 changes: 1 addition & 1 deletion src/cursesplus/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"""

__version__ = "2.0.0"
__version__ = "2.7.0"
__author__ = "Enderbyte Programs"
__package__ = "cursesplus"

Expand Down
Binary file modified src/cursesplus/__pycache__/__init__.cpython-311.pyc
Binary file not shown.
Binary file modified src/cursesplus/__pycache__/cp.cpython-311.pyc
Binary file not shown.
Binary file modified src/cursesplus/__pycache__/filedialog.cpython-311.pyc
Binary file not shown.
Binary file modified src/cursesplus/__pycache__/messagebox.cpython-311.pyc
Binary file not shown.
76 changes: 74 additions & 2 deletions src/cursesplus/cp.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import curses#Depends on windows-curses on win32
from curses.textpad import rectangle, Textbox
from curses.textpad import rectangle
from . import messagebox
import os
from time import sleep
import random
from datetime import datetime
import textwrap
import threading

#DEFINE SOME CONSTANTS
Expand All @@ -18,6 +19,14 @@

_C_INIT = False

class ArgumentError(Exception):
def __init__(self, message, errors):
# Call the base class constructor with the parameters it needs
super().__init__(message)

# Now for your custom code...
self.errors = errors

def cursestransition(stdscr,func_to_call=None,args=(),type=0):
"""
Generate a fancy transition with curses. Type 0 is a wipe transition with lines. Type 1 is a more powerful random block pixel transition.
Expand Down Expand Up @@ -408,6 +417,69 @@ def numericinput(stdscr,message="Please input a number",allowdecimals=False,allo
curses.beep()
continue

def textview(stdscr,file=None,text=None,isagreement=False,requireyes=True,message="") -> bool:
"""
## View Text interactively
This function is resize-friendly
Set either file or text to not none to use mode. Set isagreement to true if you want this to be a license agreement
Returns true if isagreement is false or if user agreed. Returns false if the user did not agree
"""
offset = 0
if file is None and text is None:
raise ArgumentError("Please specify a file or text to display")
elif file is not None and os.path.isfile(file):
with open(file) as f:
text = f.read()
elif text is not None:
text = text

zltext = text.splitlines()
while True:
stdscr.clear()
stdscr.refresh()
#Segment text
mx,my = os.get_terminal_size()
n = mx - 1
broken_text = []
for text in zltext:
if text.replace(" ","") == "":
broken_text += [""]
else:
broken_text += textwrap.wrap(text,n)
filline(stdscr,0,set_colour(WHITE,BLACK))
stdscr.addstr(0,0,message[0:mx-8],set_colour(WHITE,BLACK))
stdscr.addstr(0,mx-6,f"{offset}/{len(broken_text)}",set_colour(WHITE,BLACK))
filline(stdscr,my-1,set_colour(WHITE,BLACK))
if isagreement:
stdscr.addstr(my-1,0,"A: Agree | D: Disagree",set_colour(WHITE,BLACK))
else:
stdscr.addstr(my-1,0,"Press enter to exit",set_colour(WHITE,BLACK))
li = 1
for line in broken_text[offset:offset+(my-2)]:
try:
stdscr.addstr(li,0,line)
li += 1
except:
pass

ch = stdscr.getch()
if ch == curses.KEY_DOWN:
offset += 1
elif ch == curses.KEY_UP and offset > 0:
offset -= 1
elif ch == curses.KEY_HOME:
offset = 0
elif (ch == 10 or ch == 13 or ch == curses.KEY_ENTER) and not isagreement:
return True
elif ch == 97 and isagreement:
return True
elif ch == 100 and isagreement:
if not requireyes:
return False
else:
messagebox.showwarning(stdscr,["You must agree to the license to proceed"])

class PleaseWaitScreen:
def __init__(self,stdscr,message=["Please Wait"]):
self.message = message + [""]
Expand Down

0 comments on commit be8c8da

Please sign in to comment.