Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add a circular status indicator #275

Merged
merged 3 commits into from
Apr 11, 2024
Merged

Conversation

Andy-AO
Copy link
Contributor

@Andy-AO Andy-AO commented Apr 11, 2024

在高级模式的段落编辑器右下角添加指示圆圈指示器,用颜色来说明当前段落的状态。

灰色 - 未翻译
绿色 - 已翻译
黄色 - 未对齐

当前段落的状态感觉不太清晰,有个圆圈信号灯,状态就一目了然了。

图和视频

image

image

image

bandicam.2024-04-11.11-04-40-875.mp4

@Andy-AO
Copy link
Contributor Author

Andy-AO commented Apr 11, 2024

如果翻译出错,可以标红,这样能与单纯的未翻译区分开,后面可以实现。

@bookfere
Copy link
Owner

感谢 PR。不过,感觉这个功能和当前已有的功能有重叠。原因是,左侧已经有条目的状态显示,包括是否翻译和是否对齐,当在左侧选择某个条目时,就已经知道这个条目的状态了,不必要重复提示。另外,是否已翻译还可以在右侧通过查看是否有内容直观判断,不必要重复提示。是否对齐是在有无翻译基础上进行提示的,将他们平级用颜色表示三种状态其实是不太直观的。

@Andy-AO
Copy link
Contributor Author

Andy-AO commented Apr 11, 2024

@bookfere

的确是这样的,这个功能所展示出的信息,都是能看到的。

想要添加这个功能,是因为在实际使用中的需要,我发现自己经常误认为某个未对齐条目已经被修复,点击下一条才发现原来还是黄色的,其实没有修复,然后又重新点击回来,浪费了时间。

加上指示灯之后这个情况就没有了,或许是因为虽然那些信息虽然都可以被解读出来,但比起单纯的灯来说,那些信息周围的元素太多了,因此需要额外的认知成本进行区分,在有的时候问题不,但在人心里比较紧张或者比较疲倦的时候,注意力不太集中,那么就不容易察觉到变化。

我有注意力方面的问题,所以这个影响比平均情况可能更大些。

指示灯是一个简单元素,只有颜色信息,这样变化就很清楚。

@Andy-AO
Copy link
Contributor Author

Andy-AO commented Apr 11, 2024

@bookfere
你提到是否对其可以在有无翻译的基础上提示,没有对齐可以看做是已翻译的一种,同时它是特殊的,因为在很多时候不能直接使用,需要额外处理,在我的实际使用中,经常和它打交道,浪费大量时间,因此很看重这个状态。

另外,你觉得翻译失败是否应该作为一个单独的状态来提示?我感觉有这个必要,因为翻译失败虽然从结果上来看属于未翻译,但是从过程上来看属于已翻译但失败,还是有明显区别的。

@bookfere
Copy link
Owner

bookfere commented Apr 11, 2024

现在问题明了了一些,主要是“行对齐的提示”和“翻译失败的提示”。对齐一定是在已翻译条目上体现的,因此它不应和翻译状态混合在一起。添加翻译错误提示的意义应该是想要知道某条目到底是为何出错,而非单纯是否出错过。下面是具体点的想法。

关于行对齐的提示。虽然高亮选中之后,背景颜色变成了蓝色,但是头部序号的背景色已经起到了提示作用,这和此 PR 添加的指示灯作用其实是一样的。也就是说,你可以通过高亮显示定位到这个条目,修改后也可通过序号背景色判断是否对齐。

screenshot

如果认为蓝色的高亮影响判断,对未对齐的高亮做特殊处理,比如改成深黄色,可以更有效的解决识别问题。

另外,根据 #223 这个功能请求,通过行号功能来增强未对齐的提示功能(包括行数、行背景颜色等)可能效果更好一些。

关于翻译失败的提示。从你后一条回复的描述看,是想给条目添加一个“翻译失败”状态。如果你比较关注是导致翻译失败的原因,并且认为在右侧“错误”中出现的错误日志不太直观,那为条目提供详细的错误信息要比单纯的颜色指示更有用(比如以某种形式在“状态”中添加相应的错误信息)。如果只是单纯的提示是否曾翻译出错,就不太有意义,因为翻译出错等同于未翻译。

总的来说,翻译和对齐的两种状态不太适合体现在“校对”功能上,由于它里面的信息必定是经过选中条目才会出现的,把状态放在条目上更合理一些,也就是说增强“状态”那一列中的信息更为可取,这样就可以把注意力集中在一处查看条目的所有状态了。

@Andy-AO
Copy link
Contributor Author

Andy-AO commented Apr 11, 2024

@bookfere

谢谢,这里说一下我的看法。

关于行对齐的提示。虽然高亮选中之后,背景颜色变成了蓝色,但是头部序号的背景色已经起到了提示作用,这和此 PR 添加的指示灯作用其实是一样的。也就是说,你可以通过高亮显示定位到这个条目,修改后也可通过序号背景色判断是否对齐。

总的来说,翻译和对齐的两种状态不太适合体现在“校对”功能上,由于它里面的信息必定是经过选中条目才会出现的,把状态放在条目上更合理一些,也就是说增强“状态”那一列中的信息更为可取,这样就可以把注意力集中在一处查看条目的所有状态了。

头部序号和右侧编辑器并不总是同时出现的,在有些情况下,编辑器可见而头部序号不可见,比如在筛选中筛除掉了,又比如滑动出了当前的视野,这些情况都可以发生。在这种情况下,如果项目比较多,那么想要找到对应的地方地方并不容易。

可是右侧的指示灯和编辑器是绝对关联的,它位置永远确定,永远可见,永远指示当前编辑器的状态。

通过行号功能来增强未对齐的提示功能(包括行数、行背景颜色等)可能效果更好一些。

是很好,但如果文本很长,仍然有不可见的问题,况且该功能默认不开启,且可能会判断错误。

现在问题明了了一些,主要是“行对齐的提示”和“翻译失败的提示”。对齐一定是在已翻译条目上体现的,因此它不应和翻译状态混合在一起。添加翻译错误提示的意义应该是想要知道某条目到底是为何出错,而非单纯是否出错过。下面是具体点的想法。

关于翻译失败的提示。从你后一条回复的描述看,是想给条目添加一个“翻译失败”状态。如果你比较关注是导致翻译失败的原因,并且认为在右侧“错误”中出现的错误日志不太直观,那为条目提供详细的错误信息要比单纯的颜色指示更有用(比如以某种形式在“状态”中添加相应的错误信息)。如果只是单纯的提示是否曾翻译出错,就不太有意义,因为翻译出错等同于未翻译。

先注意到出现了问题①,然后再了解是为何出错②,增加醒目的提示是为了解决①,如果没有①则②无从谈起,醒目的提示即使有冗余,也可以减少粗心的错误。

比如很多交通信号灯实际上是有倒计时的,那么圆形的指示器实际上就是冗余,因为可以通过倒计时的颜色来判断通行的状态,但很多信号灯都是有圆形指示器的,因为它醒目,不容易看错。

image

image

现在错误的提示就不醒目,项目一多就容易搞不清楚到底是出错了,还是根本没翻译,标注颜色可以一目了然。知道有问题了,那么才意识到要看问题细节。

现在这个标注颜色不仅在信号灯上没有,在列表上也没有,私以为目前未对齐是黄色,错误可以是红色。

至于你说的②,我认为也有必要,比如现在的日志好像不是特定的,而且不保存,可以改进。

@Andy-AO
Copy link
Contributor Author

Andy-AO commented Apr 11, 2024

现在的指示灯在位置和大小上可能不是最佳的,似乎占用了过多的空间,减小直径,应该可以不用单独占一行,而是巧妙的放在其他元素周围。

@Andy-AO
Copy link
Contributor Author

Andy-AO commented Apr 11, 2024

除了添加指示灯之外,更改「校对」选项卡的颜色也是可选的方案,这样的话不需要额外元素,依然能起到作用。
对于错误来说可以更改「错误」选项卡的颜色为红色。

@bookfere
Copy link
Owner

目前没有针对条目的错误信息。可以为请求出错的条目做标记(比如红色),并以某种形式添加查看相应错误信息的功能。

对于对齐,我还是感觉没太必要额外添加一个元素去指示。序号滑出视野的情况算是个边缘用例,在需要编辑某个条目时,好像都没有要滑动和筛选条目的必要。即便需要,如前所述,可通过 #223 这个功能请求,用行号功能来增强对未对齐行的提示,提示不一定你所担心会出问题的行背景颜色,比如行序号背景颜色与条目背景颜色统一,或只在行未对齐的情况下出现行号都可以。

@bookfere
Copy link
Owner

non-alignment

仔细考虑了一下,虽然我个人感觉没必要,但若实在需要这个冗余提示,可以把原来默认隐藏的保存按钮区域持久显示,并将提示放在其上。这个编辑器的功能将来可能会有扩充,相关的提示也可以有地方显示。

我看你的代码重新定义了一些颜色,我想需要把它们和列表提示颜色统一一下。还有就是插件目前兼容 Python 2.x 和 Python 3.x,这会限制使用较新的语法,建议同时用 Calibre 3 和最新版本的 Calibre 测试。再有就是所有文本请使用英文。

这个 PR 会在合并后针对这些做些修改。再次感谢你的时间和付出 👍

@bookfere bookfere merged commit 8a094f1 into bookfere:master Apr 11, 2024
1 check passed
@Andy-AO
Copy link
Contributor Author

Andy-AO commented Apr 12, 2024

@bookfere

  1. 建议同时用 Calibre 3 和最新版本的 Calibre 测试
  2. 所有文本请使用英文

这两点看到了,会注意。

你说的「新语法」我的代码中是否存在?如果有请指出,我学习下,python不熟,所以不清楚。

你选的新位置比之前好很多。

编辑器我打算更换下,现在这个太简陋,新的至少要有行号和行高亮功能,可以换用Calibre电子书编辑器的控件。

image

@bookfere
Copy link
Owner

bookfere commented Apr 12, 2024

比如 f'...'super().__init__(),2.x 需要用 '...'.format()ParentCassName.__init__(self)。不过这些在测试时通常很容易发现,然后对比一下 2.x 和 3.x 的文档就可以解决。如果实在想用较新的语法,也可以给 2.x 做一个回退方案。

行号功能我原打算重新写一下,如果你能直接调用现成的组件,就更省事了。

@Andy-AO
Copy link
Contributor Author

Andy-AO commented Apr 12, 2024

@bookfere

请教下「给 2.x 做一个回退方案」,不太理解,是检查到版本太低然后做某种操作吗?

@bookfere
Copy link
Owner

你可以根据根据实际情况和你的喜好决定兼容方式。判断 PyQt 或 Python 的版本是一个方法,也可以用 try 语句兼容某些函数或方法,获取不同版本 PyQt 的某些类的属性时,可能需要用像下面这样的方式兼容一下。

getattr(QTextCursor, 'End', None) or QTextCursor.MoveOperation.End

@Andy-AO
Copy link
Contributor Author

Andy-AO commented Apr 12, 2024

@bookfere
请教下在Calibre 3上测试的问题。
下载calibre-portable-installer-3.48.0.exe,然后解压,执行calibre-portable.exe,运行失败,感觉可能是python版本问题,更换版本之后还是不行。

D:\software\green\Calibre3_portable> pyenv global 2.7.18
D:\software\green\Calibre3_portable> py
Python 2.7.18 (v2.7.18:8d21aa21f2, Apr 20 2020, 13:25:05) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
D:\software\green\Calibre3_portable> & .\calibre-portable.exe

image

Python function terminated unexpectedly
  'NoneType' object has no attribute 'send' (Error Code: 1)

换了3.0.0版本,依然是这个问题。

你的Calibre 3运行上遇到问题了吗?怎么解决的?

@bookfere
Copy link
Owner

我在 macOS 系统上是通过切换环境变量调用不同 Calibre 版本的。现在手边没有 Windows 系统不好测试。看 Calibre Portable 的描述它是“self contained”的,应该是不需要额外 Python 环境的。这有个帖子,看看是否有帮助。

@Andy-AO
Copy link
Contributor Author

Andy-AO commented Apr 12, 2024

使用calibre-64bit-3.48.0.msi问题依旧,看来和便携没有关系。便携版的python的确是内嵌的,和外部python版本无关。

执行calibre-debug获取更多信息,错误发生在site-packages\calibre\utils\ipc_init_.py文件的第81行以及site-packages\calibre\gui2\main.py文件的第496行。这指向了Calibre内部与进程间通信(IPC)和主界面启动相关的代码出现问题。
这些代码中有个对象本来应该是有内容的,但当前是空的。

C:\Users\Andy> & 'D:\software\green\Calibre3.48.0_portable\Calibre\calibre-debug.exe' -g
calibre 3.48  embedded-python: True is64bit: False
Windows-10-10.0.19041-SP0 Windows ('32bit', 'WindowsPE')
32bit process running on 64bit windows
('Windows', '10', '10.0.19041')
Python 2.7.15+
Windows: ('10', '10.0.19041', 'SP0', u'Multiprocessor Free')
Interface language: en_GB
Registering with default programs...
Turning on automatic hidpi scaling
devicePixelRatio: 1.0
logicalDpi: 120.0 x 120.0
physicalDpi: 102.453781513 x 102.358208955
Using calibre Qt style: True
Failed to connect to address {}
Exception in thread Thread-1:
Traceback (most recent call last):
  File "threading.py", line 801, in __bootstrap_inner
  File "site-packages\calibre\utils\ipc\__init__.py", line 81, in run
AttributeError: 'NoneType' object has no attribute 'format'

Registered with default programs in 0.7 seconds
Python function terminated unexpectedly
  'NoneType' object has no attribute 'send' (Error Code: 1)
Traceback (most recent call last):
  File "site.py", line 101, in main
  File "site.py", line 78, in run_entry_point
  File "site-packages\calibre\debug.py", line 269, in main
  File "site-packages\calibre\gui_launch.py", line 73, in calibre
  File "site-packages\calibre\gui2\main.py", line 562, in main
  File "site-packages\calibre\gui2\main.py", line 496, in communicate
AttributeError: 'NoneType' object has no attribute 'send'

准备在虚拟机里面运行下看看是不是根本不兼容windows10。

@Andy-AO
Copy link
Contributor Author

Andy-AO commented Apr 12, 2024

在sandbox里面运行成功了,感觉是环境出现问题了。
那么,在sandbox运行就行了,这样问题就解决了。

image
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants