got rid of old ide code

This commit is contained in:
Araq 2010-08-17 01:26:35 +02:00
commit 2305a9e88d
5 changed files with 0 additions and 716 deletions

View file

@ -1,93 +0,0 @@
# Does the config parsing for us
import
parsecfg, strtabs, strutils
type
TTokenClass* = enum
gtBackground,
gtNone,
gtWhitespace,
gtDecNumber,
gtBinNumber,
gtHexNumber,
gtOctNumber,
gtFloatNumber,
gtIdentifier,
gtKeyword,
gtStringLit,
gtLongStringLit,
gtCharLit,
gtEscapeSequence,
gtOperator,
gtPunctation,
gtComment,
gtLongComment,
gtRegularExpression,
gtTagStart,
gtTagEnd,
gtKey,
gtValue,
gtRawData,
gtAssembler,
gtPreprocessor,
gtDirective,
gtCommand,
gtRule,
gtHyperlink,
gtLabel,
gtReference,
gtOther,
gtCursor
TColor* = colKeywords, colIdentifiers, colComments
TConfiguration* = object of TObject ## the configuration object
colors*: array [TTokenClass] of TColor ## the colors to use
filelist*: seq[string] ## the filelist
const
colWhite = 0x00ffffff # rgb
colBlack = 0x00000000
colYellow =
proc readConfig(filename: string): TConfiguration =
# fill with reasonable defaults:
result.filelist = []
result.colors[gtBackground] = colWhite
gtNone:
gtWhitespace,
gtDecNumber,
gtBinNumber,
gtHexNumber,
gtOctNumber,
gtFloatNumber,
gtIdentifier,
gtKeyword,
gtStringLit,
gtLongStringLit,
gtCharLit,
gtEscapeSequence,
gtOperator,
gtPunctation,
gtComment,
gtLongComment,
gtRegularExpression,
gtTagStart,
gtTagEnd,
gtKey,
gtValue,
gtRawData,
gtAssembler,
gtPreprocessor,
gtDirective,
gtCommand,
gtRule,
gtHyperlink,
gtLabel,
gtReference,
gtOther
gtCursor
var
p: TCfgParser
if open(p, filename):

View file

@ -1,234 +0,0 @@
# The beginning of an IDE for Nimrod
# (c) 2008 Andreas Rumpf
import os, glib2, gtk2, libglade2, dialogs, parseopt
proc on_window_destroy(obj: PGtkObject, data: pointer) {.cdecl.} =
gtk_main_quit()
const
GuiTemplate = "/media/hda1/Eigenes/nimrod/ide/nimide.glade"
type
TTab = object of TObject
textview: PGtkTextView
filename: string
untitled: bool
TMyTextEditor = object of TObject
window: PGtkWindow
statusbar: PGtkStatusBar
textview: PGtkTextview
statusbarContextId: int
proc on_about_menu_item_activate(menuItem: PGtkMenuItem,
e: var TMyTextEditor) {.cdecl.} =
gtk_show_about_dialog(e.window,
"comments", "A fast and lightweight IDE for Nimrod",
"copyright", "Copyright \xc2\xa9 2010 Andreas Rumpf",
"version", "0.1",
"website", "http://force7.de/nimrod/",
"program-name", "Nimrod IDE",
nil)
proc load_file(e: var TMyTextEditor, filename: string) =
var
err: pointer
status: cstring
text: cstring
result: bool
buffer: PGtkTextBuffer
discard gtk_statusbar_push(e.statusbar, e.statusbar_context_id, "Loading...")
while gtk_events_pending() != 0: discard gtk_main_iteration()
# get the file contents
result = g_file_get_contents(filename, addr(text), nil, addr(err))
if not result:
error(e.window, "Cannot load file")
#g_error_free(err)
# disable the text view while loading the buffer with the text
gtk_widget_set_sensitive(e.text_view, false)
buffer = gtk_text_view_get_buffer(e.text_view)
gtk_text_buffer_set_text(buffer, text, -1)
gtk_text_buffer_set_modified(buffer, false)
gtk_widget_set_sensitive(e.text_view, true)
g_free(text)
e.filename = filename
gtk_statusbar_pop(e.statusbar, e.statusbar_context_id)
reset_default_status(e)
proc write_file(e: var TMyTextEditor, filename: string) =
var
err: ptr GError
status: cstring
text: cstring
result: bool
buffer: PGtkTextBuffer
start, ende: TGtkTextIter
# add Saving message to status bar and ensure GUI is current
gtk_statusbar_push(e.statusbar, e.statusbar_context_id, "Saving...")
while gtk_events_pending(): gtk_main_iteration()
# disable text view and get contents of buffer
gtk_widget_set_sensitive(editor->text_view, FALSE)
buffer = gtk_text_view_get_buffer(e.text_view)
gtk_text_buffer_get_start_iter(buffer, start)
gtk_text_buffer_get_end_iter(buffer, ende)
text = gtk_text_buffer_get_text(buffer, start, ende, FALSE)
gtk_text_buffer_set_modified(buffer, false)
gtk_widget_set_sensitive(e.text_view, true)
# set the contents of the file to the text from the buffer
if filename != "":
result = g_file_set_contents(filename, text, -1, addr(err))
else:
result = g_file_set_contents(editor->filename, text, -1, addr(err))
if not result:
error_message("cannot save")
g_error_free(err)
g_free(text)
if filename != "":
e.filename = filename
gtk_statusbar_pop(e.statusbar, e.statusbar_context_id)
reset_default_status(editor)
proc check_for_save(e: var TMyTextEditor): bool =
GtkTextBuffer *buffer;
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editor->text_view));
if gtk_text_buffer_get_modified(buffer):
GtkWidget *dialog;
const gchar *msg = "Do you want to save the changes you have made?";
dialog = gtk_message_dialog_new (nil,
GTK_DIALOG_MODAL or
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_YES_NO,
msg);
gtk_window_set_title (GTK_WINDOW (dialog), "Save?");
result = gtk_dialog_run(dialog) != GTK_RESPONSE_NO
gtk_widget_destroy(dialog)
proc initApp(e: var TMyTextEditor) =
var
builder: PGladeXML
window: PGtkWidget
fontDesc: PPangoFontDescription
id: int
builder = glade_xml_new(GuiTemplate, nil, nil)
if builder == nil:
error_message("cannot open: " & GuiTemplate)
quit(1)
# get the components:
e.window = GTK_WINDOW(glade_xml_get_widget(builder, "window"))
e.statusbar = GTK_STATUSBAR(glade_xml_get_widget(builder, "statusbar"))
e.textview = GTK_TEXTVIEW(glade_xml_get_widget(builder, "textview"))
# connect the signal handlers:
glade_xml_signal_connect(builder, "on_window_destroy",
GCallback(on_window_destroy))
font_desc = pango_font_description_from_string("monospace 10")
gtk_widget_modify_font(e.textview, font_desc)
pango_font_description_free(font_desc)
gtk_window_set_default_icon_name(GTK_STOCK_EDIT)
id = gtk_statusbar_get_context_id(e.statusbar, "Nimrod IDE")
e.statusbarContextId = id
reset_default_status(e)
e.filename = ""
proc main() =
var
editor: TMyTextEditor
initApp(editor)
gtk_widget_show(editor.window)
gtk_main()
gtk_nimrod_init()
main()
proc on_window_delete_event(widget: PGtkWidget, event: PGdkEvent,
e: TMyTextEditor): bool {.cdecl.} =
if check_for_save(editor):
on_save_menu_item_activate(nil, editor)
result = false
proc on_new_menu_item_activate(GtkMenuItem *menuitem, TutorialTextEditor *editor)
GtkTextBuffer *buffer;
if check_for_save(editor):
on_save_menu_item_activate(nil, editor)
/* clear editor for a new file */
editor->filename = nil;
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (editor->text_view));
gtk_text_buffer_set_text(buffer, "", -1);
gtk_text_buffer_set_modified(buffer, FALSE);
reset_default_status(editor);
proc on_open_menu_item_activate(menuItem: PGtkMenuItem,
TutorialTextEditor *editor) =
gchar *filename;
if check_for_save(editor):
on_save_menu_item_activate(nil, editor)
filename = get_open_filename(editor)
if filename != nil: load_file(editor, filename)
proc on_save_menu_item_activate(menuItem: PGtkMenuItem, TutorialTextEditor *editor) =
gchar *filename;
if (editor->filename == nil)
{
filename = get_save_filename(editor);
if (filename != nil) write_file(editor, filename);
}
else write_file(editor, nil);
proc on_save_as_menu_item_activate(GtkMenuItem *menuitem,
TutorialTextEditor *editor) =
gchar *filename;
filename = get_save_filename(editor)
if filename != nil: write_file(editor, filename)
proc on_quit_menu_item_activate(GtkMenuItem *menuitem, TutorialTextEditor *editor)
if check_for_save(editor):
on_save_menu_item_activate(nil, editor)
gtk_main_quit()
proc on_cut_menu_item_activate(GtkMenuItem *menuitem, TutorialTextEditor *editor) =
GtkTextBuffer *buffer;
GtkClipboard *clipboard;
clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
buffer = gtk_text_view_get_buffer(editor->text_view)
gtk_text_buffer_cut_clipboard(buffer, clipboard, TRUE)
proc on_copy_menu_item_activate(GtkMenuItem *menuitem, TutorialTextEditor *editor) =
GtkTextBuffer *buffer;
GtkClipboard *clipboard;
clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)
buffer = gtk_text_view_get_buffer(editor->text_view)
gtk_text_buffer_copy_clipboard(buffer, clipboard)
proc on_paste_menu_item_activate(GtkMenuItem *menuitem, TutorialTextEditor *editor)
GtkTextBuffer *buffer;
GtkClipboard *clipboard;
clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)
buffer = gtk_text_view_get_buffer(editor->text_view)
gtk_text_buffer_paste_clipboard(buffer, clipboard, nil, TRUE)
proc on_delete_menu_item_activate(GtkMenuItem *menuitem, TutorialTextEditor *editor)
GtkTextBuffer *buffer;
buffer = gtk_text_view_get_buffer(editor->text_view);
gtk_text_buffer_delete_selection(buffer, FALSE, TRUE);

View file

@ -1,192 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--*- mode: xml -*-->
<glade-interface>
<widget class="GtkWindow" id="window">
<property name="extension_events">GDK_EXTENSION_EVENTS_ALL</property>
<signal name="destroy" handler="on_window_destroy" object="destroy"/>
<child>
<widget class="GtkVBox" id="mainvbox">
<property name="width_request">600</property>
<property name="height_request">400</property>
<property name="visible">True</property>
<child>
<widget class="GtkMenuBar" id="menubar">
<property name="visible">True</property>
<child>
<widget class="GtkMenuItem" id="menuitem1">
<property name="visible">True</property>
<property name="label" translatable="yes">_Datei</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="menu1">
<property name="visible">True</property>
<child>
<widget class="GtkImageMenuItem" id="new_menu_item">
<property name="visible">True</property>
<property name="label">gtk-new</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="open_menu_item">
<property name="visible">True</property>
<property name="label">gtk-open</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="save_menu_item">
<property name="visible">True</property>
<property name="label">gtk-save</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="save_as_menu_item">
<property name="visible">True</property>
<property name="label">gtk-save-as</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="quit_menu_item">
<property name="visible">True</property>
<property name="label">gtk-quit</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</widget>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menuitem2">
<property name="visible">True</property>
<property name="label" translatable="yes">_Bearbeiten</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="menu2">
<property name="visible">True</property>
<child>
<widget class="GtkImageMenuItem" id="cut_menu_item">
<property name="visible">True</property>
<property name="label">gtk-cut</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="copy_menu_item">
<property name="visible">True</property>
<property name="label">gtk-copy</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="paste_menu_item">
<property name="visible">True</property>
<property name="label">gtk-paste</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="delete_menu_item">
<property name="visible">True</property>
<property name="label">gtk-delete</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</widget>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menuitem4">
<property name="visible">True</property>
<property name="label" translatable="yes">_Hilfe</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="menu3">
<property name="visible">True</property>
<child>
<widget class="GtkImageMenuItem" id="about_menu_item">
<property name="visible">True</property>
<property name="label">gtk-about</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</widget>
</child>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<widget class="GtkNotebook" id="notebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tab_hborder">10</property>
<property name="tab_vborder">0</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
<packing>
<property name="type">tab</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
<packing>
<property name="type">tab</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
<packing>
<property name="type">tab</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkStatusbar" id="statusbar">
<property name="visible">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

View file

@ -1,8 +0,0 @@
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-project SYSTEM "http://glade.gnome.org/glade-project-2.0.dtd">
<glade-project>
<name></name>
<program_name></program_name>
<gnome_support>FALSE</gnome_support>
</glade-project>

View file

@ -1,189 +0,0 @@
# The beginning of an IDE for Nimrod
# (c) 2008 Andreas Rumpf
import os, glib2, gdk2, gtk2, libglade2, pango, dialogs, parseopt
const
GuiTemplate = "nimide.glade"
dummyConst = ""
type
TTab {.pure, final.} = object
textview: PGtkTextView
filename: string
untitled: bool
hbox: PGtkHBox
e: PEditor
PTab = ptr TTab
TEditor = object of TObject
window: PGtkWindow
statusbar: PGtkStatusBar
menu: PGtkMenuBar
notebook: PGtkNotebook
tabname: int # used for generating tab names
tabs: seq[PTab]
currTab: int
PEditor = ptr TEditor
proc onWindowDestroy(obj: PGtkObject, event: PGdkEvent,
data: pointer): gboolean {.cdecl.} =
gtkMainQuit()
proc onAboutMenuItemActivate(menuItem: PGtkMenuItem, e: PEditor) {.cdecl.} =
gtkShowAboutDialog(e.window,
"comments", "A fast and lightweight IDE for Nimrod",
"copyright", "Copyright \xc2\xa9 2010 Andreas Rumpf",
"version", "0.1",
"website", "http://force7.de/nimrod/",
"program-name", "Nimrod IDE",
nil)
proc getTabIndex(e: PEditor, tab: PTab): int =
var i = 0
while true:
var w = gtkNotebookGetNthPage(e.notebook, i)
if w == nil: return -1
var v = gtkNotebookGetTabLabel(e.notebook, w)
if tab.hbox == v: return i
inc(i)
proc getActiveTab(e: PEditor): PTab =
nil
type
TAnswer = enum
answerYes, answerNo, answerCancel
proc askWhetherToSave(e: PEditor): TAnswer =
var dialog = gtkDialogNewWithButtons("Should the changes be saved?",
e.window, GTK_DIALOG_MODAL, GTK_STOCK_SAVE, 1, "gtk-discard", 2,
GTK_STOCK_CANCEL, 3, nil)
result = TAnswer(gtkDialogRun(dialog)+1)
gtkWidgetDestroy(dialog)
proc saveTab(tab: PTab) =
if tab.untitled:
tab.filename = ChooseFileToSave(tab.e.window, getRoot(tab))
tab.untitled = false
XXX
proc OnCloseTab(button: PGtkButton, tab: PTab) {.cdecl.} =
var idx = -1
for i in 0..high(tab.e.tabs):
if tab.e.tabs[i] == tab:
idx = i
break
if idx >= 0:
if gtkTextBufferGetModified(gtkTextViewGetBuffer(tab.textView)):
case askWhetherToSave(tab.e)
of answerCancel: return
of answerYes: saveTab(tab)
of answerNo: nil
gtkNotebookRemovePage(tab.e.notebook, idx)
if idx < high(tab.e.tabs):
for i in idx..high(tab.e.tabs)-1:
tab.e.tabs[i] = tab.e.tabs[i+1]
else:
dec currTab
GC_unref(tab.filename)
dealloc(tab)
#var idx = getTabIndex(tab.e, tab)
#if idx >= 0: gtk_notebook_remove_page(tab.e.notebook, idx)
proc createTab(e: PEditor, filename: string, untitled: bool) =
var t = cast[PTab](alloc0(sizeof(TTab)))
t.textview = gtkTextViewNewWithBuffer(gtkTextBufferNew(nil))
var fontDesc = pangoFontDescriptionFromString("monospace 10")
gtkWidgetModifyFont(t.textview, fontDesc)
pangoFontDescriptionFree(fontDesc)
t.filename = filename
t.untitled = untitled
gtkWidgetShow(t.textview)
var scroll = gtkScrolledWindowNew(nil, nil)
gtkContainerAdd(scroll, t.textview)
gtkWidgetShow(scroll)
t.e = e
t.hbox = gtkHboxNew(false, 0)
var image = gtkImageNewFromStock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU)
var button = gtkButtonNew()
var lab = gtkLabelNew(filename)
gtkButtonSetImage(button, image)
gtkButtonSetRelief(button, GTK_RELIEF_NONE)
gtkBoxPackStart(t.hbox, lab, false, false, 2)
gtkBoxPackEnd(t.hbox, button, false, false, 0)
discard gSignalConnect(button, "clicked", G_Callback(onCloseTab), t)
gtkWidgetShow(button)
gtkWidgetShow(lab)
var idx = gtkNotebookAppendPage(e.notebook, scroll, t.hbox)
e.currTab = idx
add(e.tabs, t)
gtkNotebookSetCurrentPage(e.notebook, idx)
proc onOpenMenuItemActivate(menuItem: PGtkMenuItem, e: PEditor) {.cdecl.} =
var files = ChooseFilesToOpen(e.window, getRoot(getActiveTab(e)))
for f in items(files): createTab(e, f, untitled=false)
proc onSaveMenuItemActivate(menuItem: PGtkMenuItem, e: PEditor) {.cdecl.} =
var cp = gtkNotebookGetCurrentPage(e.notebook)
proc onSaveAsMenuItemActivate(menuItem: PGtkMenuItem, e: PEditor) {.cdecl.} =
nil
proc onNewMenuItemActivate(menuItem: PGtkMenuItem, e: PEditor) {.cdecl.} =
inc(e.tabname)
createTab(e, "untitled-" & $e.tabname, true)
proc main(e: PEditor) =
var builder = gladeXmlNew(getApplicationDir() / GuiTemplate, nil, nil)
if builder == nil: quit("cannot open: " & GuiTemplate)
# get the components:
e.window = GTK_WINDOW(gladeXmlGetWidget(builder, "window"))
e.statusbar = GTK_STATUSBAR(gladeXmlGetWidget(builder, "statusbar"))
e.notebook = GTK_NOTEBOOK(gladeXmlGetWidget(builder, "notebook"))
e.tabs = @[]
e.currTab = -1
setHomogeneous(e.notebook^, 1)
# connect the signal handlers:
gladeXmlSignalConnect(builder, "on_window_destroy",
GCallback(onWindowDestroy))
var about = GTK_MENU_ITEM(gladeXmlGetWidget(builder, "about_menu_item"))
discard gSignalConnect(about, "activate",
G_CALLBACK(onAboutMenuItemActivate), e)
var newItem = GTK_MENU_ITEM(gladeXmlGetWidget(builder, "new_menu_item"))
discard gSignalConnect(newItem, "activate",
G_CALLBACK(onNewMenuItemActivate), e)
var quitItem = GTK_MENU_ITEM(gladeXmlGetWidget(builder, "quit_menu_item"))
discard gSignalConnect(quitItem, "activate",
G_CALLBACK(onWindowDestroy), e)
var openItem = GTK_MENU_ITEM(gladeXmlGetWidget(builder, "open_menu_item"))
discard gSignalConnect(openItem, "activate",
G_CALLBACK(onOpenMenuItemActivate), e)
var saveItem = GTK_MENU_ITEM(gladeXmlGetWidget(builder, "save_menu_item"))
discard gSignalConnect(saveItem, "activate",
G_CALLBACK(onSaveMenuItemActivate), e)
var saveAsItem = GTK_MENU_ITEM(gladeXmlGetWidget(builder, "save_as_menu_item"))
discard gSignalConnect(saveAsItem, "activate",
G_CALLBACK(onSaveAsMenuItemActivate), e)
gtkWindowSetDefaultIconName(GTK_STOCK_EDIT)
gtkWidgetShow(e.window)
gtkMain()
gtkNimrodInit()
var e = cast[PEditor](alloc0(sizeof(TEditor)))
main(e)