跨平台编辑器控制

时间:2008-10-13 06:02:46

标签: c user-interface editor cross-platform

我需要一个跨平台编辑器控件才能在内部工具中用作GUI部件。控制可能是商业性的,但价格合理。

必备功能:

  • 平台:Win32,OS X,Linux
  • UTF-8支持
  • 对文本样式(或至少颜色)进行细粒度的运行时控制
  • 漂亮的低级普通C API,没有通常可怕的膨胀
  • 不应该阻止我拥有这些功能(即使我必须自己实现):
    • 撤消/重做
    • 复制/粘贴
    • 上下文菜单,取决于文本中的点击位置
    • 工具栏,取决于文本中的光标位置
    • 侧边栏面板,取决于文本中的光标位置

实际上上面不需要简单的控制,而是整个跨平台的GUI库。

弃用选项:

  • Scintilla和后代
  • FLTK
  • 福克斯的工具包
  • gtksourceview

更新:

注意:我在这里写了一些半写的丢弃推理,我道歉。 Scintilla确实可以在OS X上运行。但是,如果我能正确使用它,Scintilla的API就是用C ++编写的。

使用情况:

我的用例是编写自定义的“半刚性”逻辑编辑器,用户可以自由地复制粘贴,在他希望的地方添加注释,甚至可以直接输入文本。但是文本结构是逻辑树的一种严格的自然语言表示(在某种程度上类似于AST)。我打算写一些类似intellisense(或类似代码模板)的东西作为主要的创作工具(而不是手工输入逻辑)。

顺便说一句,存储格式不是纯文本,而是内部表示所提到的逻辑树(带有注释和空格等元数据)。

因此,我拥有自己渲染所需颜色文本的所有必要信息。我不需要任何外部词法分析器等。

4 个答案:

答案 0 :(得分:3)

正如约翰所写,已知Scintilla可以在OS X上运行 现在,它不是一个富文本组件,如果这是你正在寻找的。它是一个源代码编辑器:你不能将任意颜色应用于任意文本段,它使用词法分析器来设置内容的样式。

您没有告诉我们您的用例是什么。

[编辑]感谢您添加用例。

免责声明1:我不试图“出售”Scintilla,我只是试图向您提供有关我熟悉的组件的信息,希望能帮助您... :-D
请注意,Related Sites页面列出了许多可能有趣的替代编辑组件(或者不是,其中很多仅适用于Win32)。
免责声明2:我没有在Win32平台之外使用Scintilla的经验。

但是看一下源代码树,我看到了一个scintilla / macosx文件夹。除此之外,它还有一个带有main.cpp文件的SciTest子文件夹。尽管有它的延伸,它对我来说看起来很像纯C。所以它可以是如何在C中使用Scintilla的一个例子。

请注意,根据设计,Scintilla API非常有限:它最初通过向其发送消息而被用作大多数传统的Win32组件。 Scintilla Documentation页面仅列出这些消息及其参数。 main.cpp示例使用MacOS X样式的组件创建窗口,并使用scintilla->WndProc(SCI_STYLESETFORE, 0, 0x808080);

等行发送命令

我不会声称它可以满足你所需的一切,或者即使它在MacOS X上完美运行,你必须试验(或询问改编的作者)才能确定。
此外,Scintilla不会提供工具栏或侧边栏面板(这更多地属于应用程序本身)。但我认为它可以提供足够的通知来帮助您将这些侧面组件保留在上下文中 您还需要为您的语法编写特定词法分析器(此处为C ++)。如果你看看其他词法分析者是如何运作的并不难。也许你会找到一种足够接近的语言作为起点 也许有趣的是将文档的某些部分设置为只读的功能,尽管我认为这还没有经过彻底的测试。

HTH。

答案 1 :(得分:2)

  

Scintilla和后代(没有OS X)

但是,scintilla可以在OS X上运行。


您可以使用GtkTextView或Qt QTextEdit尝试GTK +。

答案 2 :(得分:2)

FLTK的TextEditor小部件就是您所需要的。它简单,直观,易于使用,具有utf8,您可以轻松拥有文本样式。只需几行就可以拥有一个编辑器。检查/test/editor.cxx示例。它也适用于OSX。此外,您需要的只是:http://www.fltk.org/doc-1.1/editor.html

答案 3 :(得分:1)

那么, 你可以使用tk - 文本小部件应该是好的和灵活的 - 在the tcl/tk wiki有一个外观。

或者你可以选择一些嵌入式/游戏工具包(比如Agar) - 但是我想,有一个带编辑功能的文本小部件会比较麻烦。

但是说你想要做一个跨平台的C GUI然后注销GTK对我来说似乎浪费了很多时间和精力。您可能最终会切换语言或使用GTK。