Thread: [pygccxml-commit] SF.net SVN: pygccxml: [961] pyplusplus_dev/ide
Brought to you by:
mbaas,
roman_yakovenko
From: <ale...@us...> - 2007-03-30 15:24:53
|
Revision: 961 http://svn.sourceforge.net/pygccxml/?rev=961&view=rev Author: alex_eisen Date: 2007-03-30 08:24:52 -0700 (Fri, 30 Mar 2007) Log Message: ----------- First commit of ide Added Paths: ----------- pyplusplus_dev/ide/__init__.py pyplusplus_dev/ide/controllers/ pyplusplus_dev/ide/controllers/__init__.py pyplusplus_dev/ide/controllers/main.py pyplusplus_dev/ide/ide.py pyplusplus_dev/ide/model/ pyplusplus_dev/ide/model/__init__.py pyplusplus_dev/ide/views/ pyplusplus_dev/ide/views/__init__.py pyplusplus_dev/ide/views/main_frame.py Property Changed: ---------------- pyplusplus_dev/ide/ Property changes on: pyplusplus_dev/ide ___________________________________________________________________ Name: svn:ignore + .settings .project .pydevproject Added: pyplusplus_dev/ide/__init__.py =================================================================== --- pyplusplus_dev/ide/__init__.py (rev 0) +++ pyplusplus_dev/ide/__init__.py 2007-03-30 15:24:52 UTC (rev 961) @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# Copyright 2007 Alexander Eisenhuth +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +""" This package provide access to the py++ ide """ Added: pyplusplus_dev/ide/controllers/__init__.py =================================================================== Added: pyplusplus_dev/ide/controllers/main.py =================================================================== --- pyplusplus_dev/ide/controllers/main.py (rev 0) +++ pyplusplus_dev/ide/controllers/main.py 2007-03-30 15:24:52 UTC (rev 961) @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Copyright 2004 Roman Yakovenko. +# 2007 Alexander Eisenhuth +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +""" Contoller class. Part of MVC +Responsibility: Glue view and model code: +- Handle all events from view (p.e. button) """ +class MainController: + def __init__(self, view): + self._view = view + + # Give controller object to the view + self._view.set_controller(self) + + def GenXmlCode(self): + """ Generate XML code""" + self._appendOutText("Generation of XML code staretd") + + def GenCppCode(self): + """ Generate Boost.Python code""" + self._appendOutText("Generation of C++ code for Boost.Python started") + + def GenPyPPCode(self): + """ Generate Py++ code""" + self._appendOutText("Generation of Py++ code started") + + def _appendOutText(self, text): + self._view.textOutput.AppendText(text + "\n") + + \ No newline at end of file Added: pyplusplus_dev/ide/ide.py =================================================================== --- pyplusplus_dev/ide/ide.py (rev 0) +++ pyplusplus_dev/ide/ide.py 2007-03-30 15:24:52 UTC (rev 961) @@ -0,0 +1,37 @@ +#!/usr/bin/env python +#Boa:App:BoaApp + +# Copyright 2007 Alexander Eisenhuth +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +""" """ + +import wx + +from views.main_frame import create as createMainFrame +from controllers.main import MainController + +modules ={u'main controller': [0, '', u'controllers/main.py'], + u'main view': [1, 'Main frame of ide', u'views/main_frame.py']} + +class BoaApp(wx.App): + def OnInit(self): + + self.main = createMainFrame(None) + + # Instanciate main controller and give it to the main view + controller = MainController(self.main) + self.main.set_controller(controller) + + self.main.Show() + self.SetTopWindow(self.main) + return True + +def main(): + application = BoaApp(0) + application.MainLoop() + +if __name__ == '__main__': + main() Added: pyplusplus_dev/ide/model/__init__.py =================================================================== Added: pyplusplus_dev/ide/views/__init__.py =================================================================== Added: pyplusplus_dev/ide/views/main_frame.py =================================================================== --- pyplusplus_dev/ide/views/main_frame.py (rev 0) +++ pyplusplus_dev/ide/views/main_frame.py 2007-03-30 15:24:52 UTC (rev 961) @@ -0,0 +1,477 @@ +#Boa:Frame:MainFrame + +# Copyright 2004 Roman Yakovenko. +# 2007 Alexander Eisenhuth +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + + +""" Contains the iplementation of the main frame of the application. +Most of the code was build with BOA""" + +import wx + +def create(parent): + return MainFrame(parent) + +[wxID_MAINFRAMEMENUEFILEEXIT, wxID_MAINFRAMEMENUEFILENEW, + wxID_MAINFRAMEMENUEFILEOPEN, wxID_MAINFRAMEMENUEFILERECENT, + wxID_MAINFRAMEMENUEFILESAVE, +] = [wx.NewId() for _init_coll_menueFile_Items in range(5)] + +[wxID_MAINFRAMEMENUINCLUDESADDINC, wxID_MAINFRAMEMENUINCLUDESITEMS1, +] = [wx.NewId() for _init_coll_menuIncludes_Items in range(2)] + +[wxID_MAINFRAMEMENUDEFINESADDDEF, wxID_MAINFRAMEMENUDEFINESREMOVEDEF, +] = [wx.NewId() for _init_coll_menuDefines_Items in range(2)] + +[wxID_MAINFRAME, wxID_MAINFRAMEBUTGCCXML, wxID_MAINFRAMEBUTGENCPP, + wxID_MAINFRAMEBUTGENPYPP, wxID_MAINFRAMEBUTGENXML, wxID_MAINFRAMEBUTHEADERS, + wxID_MAINFRAMELISTDEFINES, wxID_MAINFRAMELISTINCLUDES, + wxID_MAINFRAMENBSETTINGS, wxID_MAINFRAMENOTEBOOK1, + wxID_MAINFRAMEPANELBUTTONS, wxID_MAINFRAMEPANELCODE, wxID_MAINFRAMEPANELMAIN, + wxID_MAINFRAMEPANELNBSETTINGS, wxID_MAINFRAMEPANELSETTINGS, + wxID_MAINFRAMEPANELSHLOW, wxID_MAINFRAMEPANELSHUP, + wxID_MAINFRAMESPLITTERHORIZONTAL, wxID_MAINFRAMESPLITTERVERTICAL, + wxID_MAINFRAMESTATICTEXT1, wxID_MAINFRAMESTATICTEXT2, + wxID_MAINFRAMESTATICTEXT3, wxID_MAINFRAMESTATICTEXT4, + wxID_MAINFRAMESTATICTEXT5, wxID_MAINFRAMESTATUSBAR, wxID_MAINFRAMETEXTCTRL2, + wxID_MAINFRAMETEXTGCCXML, wxID_MAINFRAMETEXTHEADER, wxID_MAINFRAMETEXTOUTPUT, +] = [wx.NewId() for _init_ctrls in range(29)] + +class MainFrame(wx.Frame): + """ Main frame class. Part of MVC """ + + def _init_coll_bsGccXml_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText2, 0, border=5, + flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) + parent.AddWindow(self.textGccXml, 1, border=10, + flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM) + parent.AddWindow(self.butGccXml, 0, border=5, + flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL) + + def _init_coll_bsMURCompile_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.textCtrl2, 1, border=0, flag=wx.EXPAND) + + def _init_coll_bsMain_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.splitterHorizontal, 1, border=5, + flag=wx.ALL | wx.EXPAND) + + def _init_coll_bsIncPath_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText3, 0, border=5, + flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) + parent.AddWindow(self.listIncludes, 1, border=10, + flag=wx.BOTTOM | wx.TOP | wx.EXPAND | wx.ALIGN_CENTER_VERTICAL) + + def _init_coll_bsHeader_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText1, 0, border=5, + flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL) + parent.AddWindow(self.textHeader, 1, border=10, + flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM | wx.TOP) + parent.AddWindow(self.butHeaders, 0, border=5, + flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL) + + def _init_coll_bsUpLeft_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.nbSettings, 1, border=0, flag=wx.ALL | wx.EXPAND) + + def _init_coll_bsMURButtons_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.butGenXml, 0, border=10, + flag=wx.RIGHT | wx.LEFT | wx.ALIGN_CENTER_VERTICAL) + parent.AddWindow(self.butGenCpp, 0, border=10, + flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL) + parent.AddWindow(self.butGenPyPP, 0, border=10, + flag=wx.RIGHT | wx.LEFT | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL) + + def _init_coll_bsMainUpper_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.splitterVertical, 1, border=5, + flag=wx.BOTTOM | wx.EXPAND) + + def _init_coll_bsMainLow_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.notebook1, 1, border=0, flag=wx.EXPAND) + + def _init_coll_bsUpRight_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText5, 0, border=0, flag=0) + parent.AddSizer(self.bsMURCompile, 1, border=4, flag=wx.TOP | wx.EXPAND) + parent.AddWindow(self.panelButtons, 0, border=10, + flag=wx.ALIGN_CENTER_HORIZONTAL | wx.TOP) + + def _init_coll_bsMULSettings_Items(self, parent): + # generated method, don't edit + + parent.AddSpacer((10, 10), border=0, flag=0) + parent.AddSizer(self.bsHeader, 0, border=5, flag=wx.RIGHT | wx.EXPAND) + parent.AddSizer(self.bsGccXml, 0, border=5, flag=wx.RIGHT | wx.EXPAND) + parent.AddSizer(self.bsIncPath, 0, border=5, flag=wx.RIGHT | wx.EXPAND) + parent.AddSizer(self.bsDefines, 0, border=5, flag=wx.RIGHT | wx.EXPAND) + + def _init_coll_bsDefines_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText4, 0, border=5, + flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) + parent.AddWindow(self.listDefines, 1, border=10, + flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND) + + def _init_coll_menuBar1_Menus(self, parent): + # generated method, don't edit + + parent.Append(menu=self.menueFile, title=u'&File') + + def _init_coll_menuIncludes_Items(self, parent): + # generated method, don't edit + + parent.Append(help='', id=wxID_MAINFRAMEMENUINCLUDESADDINC, + kind=wx.ITEM_NORMAL, text=u'Add ...') + parent.Append(help='', id=wxID_MAINFRAMEMENUINCLUDESITEMS1, + kind=wx.ITEM_NORMAL, text=u'Remove') + + def _init_coll_menueFile_Items(self, parent): + # generated method, don't edit + + parent.Append(help=u'Create new Project', id=wxID_MAINFRAMEMENUEFILENEW, + kind=wx.ITEM_NORMAL, text=u'&New Project') + parent.Append(help=u'Open existing Project', + id=wxID_MAINFRAMEMENUEFILEOPEN, kind=wx.ITEM_NORMAL, + text=u'&Open Project') + parent.Append(help=u'Save current Project', + id=wxID_MAINFRAMEMENUEFILESAVE, kind=wx.ITEM_NORMAL, + text=u'&Save Project') + parent.AppendSeparator() + parent.AppendMenu(help=u'Open recently used Project', + id=wxID_MAINFRAMEMENUEFILERECENT, submenu=wx.Menu(), + text=u'Recent Projects') + parent.AppendSeparator() + parent.Append(help='', id=wxID_MAINFRAMEMENUEFILEEXIT, + kind=wx.ITEM_NORMAL, text=u'&Exit') + self.Bind(wx.EVT_MENU, self.OnMenueFileNewMenu, + id=wxID_MAINFRAMEMENUEFILENEW) + self.Bind(wx.EVT_MENU, self.OnMenueFileOpenMenu, + id=wxID_MAINFRAMEMENUEFILEOPEN) + self.Bind(wx.EVT_MENU, self.OnMenueFileSaveMenu, + id=wxID_MAINFRAMEMENUEFILESAVE) + self.Bind(wx.EVT_MENU, self.OnMenueFileExitMenu, + id=wxID_MAINFRAMEMENUEFILEEXIT) + + def _init_coll_menuDefines_Items(self, parent): + # generated method, don't edit + + parent.Append(help='', id=wxID_MAINFRAMEMENUDEFINESADDDEF, + kind=wx.ITEM_NORMAL, text=u'Add ...') + parent.Append(help='', id=wxID_MAINFRAMEMENUDEFINESREMOVEDEF, + kind=wx.ITEM_NORMAL, text=u'Remove') + + def _init_coll_nbSettings_Pages(self, parent): + # generated method, don't edit + + parent.AddPage(imageId=-1, page=self.panelNbSettings, select=True, + text=u'Settings') + + def _init_coll_notebook1_Pages(self, parent): + # generated method, don't edit + + parent.AddPage(imageId=-1, page=self.textOutput, select=True, + text=u'Output') + + def _init_coll_statusBar_Fields(self, parent): + # generated method, don't edit + parent.SetFieldsCount(3) + + parent.SetStatusText(number=0, text=u'<helptextOrStatus>') + parent.SetStatusText(number=1, text=u'<parseTime>') + parent.SetStatusText(number=2, text=u'<compileTime>') + + parent.SetStatusWidths([-1, -1, -1]) + + def _init_sizers(self): + # generated method, don't edit + self.bsMain = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsMainUpper = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsMainLow = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsUpLeft = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsUpRight = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsMULSettings = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsMURCompile = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsMURButtons = wx.BoxSizer(orient=wx.HORIZONTAL) + + self.bsHeader = wx.BoxSizer(orient=wx.HORIZONTAL) + + self.bsGccXml = wx.BoxSizer(orient=wx.HORIZONTAL) + + self.bsIncPath = wx.BoxSizer(orient=wx.HORIZONTAL) + + self.bsDefines = wx.BoxSizer(orient=wx.HORIZONTAL) + + self._init_coll_bsMain_Items(self.bsMain) + self._init_coll_bsMainUpper_Items(self.bsMainUpper) + self._init_coll_bsMainLow_Items(self.bsMainLow) + self._init_coll_bsUpLeft_Items(self.bsUpLeft) + self._init_coll_bsUpRight_Items(self.bsUpRight) + self._init_coll_bsMULSettings_Items(self.bsMULSettings) + self._init_coll_bsMURCompile_Items(self.bsMURCompile) + self._init_coll_bsMURButtons_Items(self.bsMURButtons) + self._init_coll_bsHeader_Items(self.bsHeader) + self._init_coll_bsGccXml_Items(self.bsGccXml) + self._init_coll_bsIncPath_Items(self.bsIncPath) + self._init_coll_bsDefines_Items(self.bsDefines) + + self.panelSHUp.SetSizer(self.bsMainUpper) + self.panelSettings.SetSizer(self.bsUpLeft) + self.panelButtons.SetSizer(self.bsMURButtons) + self.panelSHLow.SetSizer(self.bsMainLow) + self.panelMain.SetSizer(self.bsMain) + self.panelCode.SetSizer(self.bsUpRight) + self.panelNbSettings.SetSizer(self.bsMULSettings) + + def _init_utils(self): + # generated method, don't edit + self.menueFile = wx.Menu(title='') + + self.menuBar1 = wx.MenuBar() + + self.menuIncludes = wx.Menu(title='') + + self.menuDefines = wx.Menu(title='') + + self._init_coll_menueFile_Items(self.menueFile) + self._init_coll_menuBar1_Menus(self.menuBar1) + self._init_coll_menuIncludes_Items(self.menuIncludes) + self._init_coll_menuDefines_Items(self.menuDefines) + + def _init_ctrls(self, prnt): + # generated method, don't edit + wx.Frame.__init__(self, id=wxID_MAINFRAME, name=u'MainFrame', + parent=prnt, pos=wx.Point(0, -2), size=wx.Size(851, 620), + style=wx.DEFAULT_FRAME_STYLE, title=u'Py++ Code generator') + self._init_utils() + self.SetClientSize(wx.Size(843, 586)) + self.SetMenuBar(self.menuBar1) + + self.statusBar = wx.StatusBar(id=wxID_MAINFRAMESTATUSBAR, + name=u'statusBar', parent=self, style=0) + self._init_coll_statusBar_Fields(self.statusBar) + self.SetStatusBar(self.statusBar) + + self.panelMain = wx.Panel(id=wxID_MAINFRAMEPANELMAIN, name=u'panelMain', + parent=self, pos=wx.Point(0, 0), size=wx.Size(843, 543), + style=wx.TAB_TRAVERSAL) + + self.splitterHorizontal = wx.SplitterWindow(id=wxID_MAINFRAMESPLITTERHORIZONTAL, + name=u'splitterHorizontal', parent=self.panelMain, pos=wx.Point(5, + 5), size=wx.Size(833, 533), style=0) + self.splitterHorizontal.SetNeedUpdating(False) + self.splitterHorizontal.SetMinimumPaneSize(0) + + self.panelSHUp = wx.Panel(id=wxID_MAINFRAMEPANELSHUP, name=u'panelSHUp', + parent=self.splitterHorizontal, pos=wx.Point(0, 0), + size=wx.Size(833, 372), style=wx.TAB_TRAVERSAL) + + self.panelSHLow = wx.Panel(id=wxID_MAINFRAMEPANELSHLOW, + name=u'panelSHLow', parent=self.splitterHorizontal, + pos=wx.Point(0, 376), size=wx.Size(833, 157), + style=wx.TAB_TRAVERSAL) + self.splitterHorizontal.SplitHorizontally(self.panelSHUp, + self.panelSHLow, 300) + + self.notebook1 = wx.Notebook(id=wxID_MAINFRAMENOTEBOOK1, + name='notebook1', parent=self.panelSHLow, pos=wx.Point(0, 0), + size=wx.Size(833, 157), style=0) + self.notebook1.SetLabel(u'Label') + + self.textOutput = wx.TextCtrl(id=wxID_MAINFRAMETEXTOUTPUT, + name=u'textOutput', parent=self.notebook1, pos=wx.Point(0, 0), + size=wx.Size(825, 131), style=wx.TE_READONLY | wx.TE_MULTILINE, + value=u'') + + self.splitterVertical = wx.SplitterWindow(id=wxID_MAINFRAMESPLITTERVERTICAL, + name=u'splitterVertical', parent=self.panelSHUp, pos=wx.Point(0, + 0), size=wx.Size(833, 367), style=wx.SP_3D) + self.splitterVertical.SetNeedUpdating(True) + self.splitterVertical.SetMinimumPaneSize(0) + + self.panelSettings = wx.Panel(id=wxID_MAINFRAMEPANELSETTINGS, + name=u'panelSettings', parent=self.splitterVertical, + pos=wx.Point(0, 0), size=wx.Size(235, 367), + style=wx.TAB_TRAVERSAL) + + self.panelCode = wx.Panel(id=wxID_MAINFRAMEPANELCODE, name=u'panelCode', + parent=self.splitterVertical, pos=wx.Point(239, 0), + size=wx.Size(594, 367), style=wx.TAB_TRAVERSAL) + self.splitterVertical.SplitVertically(self.panelSettings, + self.panelCode, 300) + + self.nbSettings = wx.Notebook(id=wxID_MAINFRAMENBSETTINGS, + name=u'nbSettings', parent=self.panelSettings, pos=wx.Point(0, 0), + size=wx.Size(235, 367), style=0) + self.nbSettings.SetLabel(u'Label') + self.nbSettings.SetHelpText(u'') + + self.panelNbSettings = wx.Panel(id=wxID_MAINFRAMEPANELNBSETTINGS, + name=u'panelNbSettings', parent=self.nbSettings, pos=wx.Point(0, + 0), size=wx.Size(227, 341), style=wx.TAB_TRAVERSAL) + self.panelNbSettings.Show(True) + self.panelNbSettings.SetMinSize(wx.Size(100, 100)) + + self.textCtrl2 = wx.TextCtrl(id=wxID_MAINFRAMETEXTCTRL2, + name='textCtrl2', parent=self.panelCode, pos=wx.Point(0, 17), + size=wx.Size(594, 317), style=wx.TE_MULTILINE, value=u'') + + self.panelButtons = wx.Panel(id=wxID_MAINFRAMEPANELBUTTONS, + name=u'panelButtons', parent=self.panelCode, pos=wx.Point(54, + 344), size=wx.Size(486, 23), style=wx.TAB_TRAVERSAL) + + self.butGenXml = wx.Button(id=wxID_MAINFRAMEBUTGENXML, + label=u'Generate XML code', name=u'butGenXml', + parent=self.panelButtons, pos=wx.Point(10, 0), size=wx.Size(140, + 23), style=0) + self.butGenXml.Bind(wx.EVT_BUTTON, self.OnButGenXmlButton, + id=wxID_MAINFRAMEBUTGENXML) + + self.butGenCpp = wx.Button(id=wxID_MAINFRAMEBUTGENCPP, + label=u'Generate C++ code', name=u'butGenCpp', + parent=self.panelButtons, pos=wx.Point(170, 0), size=wx.Size(142, + 23), style=0) + self.butGenCpp.Bind(wx.EVT_BUTTON, self.OnButGenCppButton, + id=wxID_MAINFRAMEBUTGENCPP) + + self.butGenPyPP = wx.Button(id=wxID_MAINFRAMEBUTGENPYPP, + label=u'Generate Py++ code', name=u'butGenPyPP', + parent=self.panelButtons, pos=wx.Point(332, 0), size=wx.Size(144, + 23), style=0) + self.butGenPyPP.Bind(wx.EVT_BUTTON, self.OnButGenPyPPButton, + id=wxID_MAINFRAMEBUTGENPYPP) + + self.textHeader = wx.TextCtrl(id=wxID_MAINFRAMETEXTHEADER, + name=u'textHeader', parent=self.panelNbSettings, pos=wx.Point(56, + 20), size=wx.Size(128, 21), style=0, value=u'') + + self.butHeaders = wx.Button(id=wxID_MAINFRAMEBUTHEADERS, label=u'...', + name=u'butHeaders', parent=self.panelNbSettings, pos=wx.Point(189, + 19), size=wx.Size(28, 23), style=0) + self.butHeaders.Bind(wx.EVT_BUTTON, self.OnButHeadersButton, + id=wxID_MAINFRAMEBUTHEADERS) + + self.staticText1 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT1, + label=u'Header\nFile', name='staticText1', + parent=self.panelNbSettings, pos=wx.Point(5, 15), size=wx.Size(51, + 30), style=wx.ALIGN_CENTRE) + + self.staticText2 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT2, + label=u'GccXml', name='staticText2', parent=self.panelNbSettings, + pos=wx.Point(5, 60), size=wx.Size(51, 23), style=wx.ALIGN_CENTRE) + + self.textGccXml = wx.TextCtrl(id=wxID_MAINFRAMETEXTGCCXML, + name=u'textGccXml', parent=self.panelNbSettings, pos=wx.Point(56, + 61), size=wx.Size(128, 21), style=0, value=u'') + + self.butGccXml = wx.Button(id=wxID_MAINFRAMEBUTGCCXML, label=u'...', + name=u'butGccXml', parent=self.panelNbSettings, pos=wx.Point(189, + 60), size=wx.Size(28, 23), style=0) + self.butGccXml.Bind(wx.EVT_BUTTON, self.OnButGccXmlButton, + id=wxID_MAINFRAMEBUTGCCXML) + + self.staticText3 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT3, + label=u'Include\nPath', name='staticText3', + parent=self.panelNbSettings, pos=wx.Point(5, 116), + size=wx.Size(51, 37), style=wx.ALIGN_CENTRE) + + self.listIncludes = wx.ListCtrl(id=wxID_MAINFRAMELISTINCLUDES, + name=u'listIncludes', parent=self.panelNbSettings, + pos=wx.Point(56, 102), size=wx.Size(166, 66), style=wx.LC_ICON) + self.listIncludes.Bind(wx.EVT_RIGHT_DOWN, self.OnListIncludesRightDown) + + self.staticText4 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT4, + label=u'Defines', name='staticText4', parent=self.panelNbSettings, + pos=wx.Point(5, 209), size=wx.Size(51, 25), + style=wx.ALIGN_CENTRE) + + self.listDefines = wx.ListCtrl(id=wxID_MAINFRAMELISTDEFINES, + name=u'listDefines', parent=self.panelNbSettings, pos=wx.Point(56, + 188), size=wx.Size(166, 68), style=wx.LC_ICON) + self.listDefines.Bind(wx.EVT_RIGHT_DOWN, self.OnListDefinesRightDown) + + self.staticText5 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT5, + label=u'Code', name='staticText5', parent=self.panelCode, + pos=wx.Point(0, 0), size=wx.Size(25, 13), style=0) + + self._init_coll_notebook1_Pages(self.notebook1) + self._init_coll_nbSettings_Pages(self.nbSettings) + + self._init_sizers() + + def __init__(self, parent): + self._init_ctrls(parent) + self.SetSize((self.GetSize()[0]+1,self.GetSize()[1]+1)) + + def OnMenueFileNewMenu(self, event): + event.Skip() + + def OnMenueFileOpenMenu(self, event): + event.Skip() + + def OnMenueFileSaveMenu(self, event): + event.Skip() + + def OnMenueFileRecentMenu(self, event): + event.Skip() + + def OnMenueFileExitMenu(self, event): + event.Skip() + + def OnTextGenCodeRightDown(self, event): + event.Skip() + + def OnListIncludesRightDown(self, event): + self.PopupMenu(self.menuIncludes) + + def OnButHeaderButton(self, event): + event.Skip() + + def OnListDefinesRightDown(self, event): + self.PopupMenu(self.menuDefines) + + def OnButGenXmlButton(self, event): + self._controller.GenXmlCode() + + def OnButGenCppButton(self, event): + self._controller.GenCppCode() + + def OnButGenPyPPButton(self, event): + self._controller.GenPyPPCode() + + def OnButHeadersButton(self, event): + event.Skip() + + def OnButGccXmlButton(self, event): + event.Skip() + + def set_controller(self, controller): + """Set controller of MVC""" + self._controller = controller This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2007-03-30 16:59:57
|
Revision: 962 http://svn.sourceforge.net/pygccxml/?rev=962&view=rev Author: alex_eisen Date: 2007-03-30 09:59:57 -0700 (Fri, 30 Mar 2007) Log Message: ----------- Added file dialogs Modified Paths: -------------- pyplusplus_dev/ide/controllers/main.py pyplusplus_dev/ide/views/main_frame.py Modified: pyplusplus_dev/ide/controllers/main.py =================================================================== --- pyplusplus_dev/ide/controllers/main.py 2007-03-30 15:24:52 UTC (rev 961) +++ pyplusplus_dev/ide/controllers/main.py 2007-03-30 16:59:57 UTC (rev 962) @@ -5,6 +5,8 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) +import wx + """ Contoller class. Part of MVC Responsibility: Glue view and model code: - Handle all events from view (p.e. button) """ @@ -25,8 +27,30 @@ def GenPyPPCode(self): """ Generate Py++ code""" - self._appendOutText("Generation of Py++ code started") + self._appendOutText("Generation of Py++ code started") + def OpenHeaderDlg(self): + """ """ + dialog = wx.FileDialog(self._view, "Choose a Header file", ".", "", + "Header (*.h)|*.h|All Files(*)|*", wx.OPEN) + try: + if dialog.ShowModal() == wx.ID_OK: + self._view.textHeader.Clear() + self._view.textHeader.AppendText(dialog.GetPath()) + finally: + dialog.Destroy() + + def OpenGccXmlDlg(self): + """ """ + dialog = wx.FileDialog(self._view, "Choose GccXml executable", + ".", "", "All Files(*)|*", wx.OPEN) + try: + if dialog.ShowModal() == wx.ID_OK: + self._view.textGccXml.Clear() + self._view.textGccXml.AppendText(dialog.GetPath()) + finally: + dialog.Destroy() + def _appendOutText(self, text): self._view.textOutput.AppendText(text + "\n") Modified: pyplusplus_dev/ide/views/main_frame.py =================================================================== --- pyplusplus_dev/ide/views/main_frame.py 2007-03-30 15:24:52 UTC (rev 961) +++ pyplusplus_dev/ide/views/main_frame.py 2007-03-30 16:59:57 UTC (rev 962) @@ -1,4 +1,5 @@ #Boa:Frame:MainFrame +from Dialog import Dialog # Copyright 2004 Roman Yakovenko. # 2007 Alexander Eisenhuth @@ -50,7 +51,7 @@ flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) parent.AddWindow(self.textGccXml, 1, border=10, flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM) - parent.AddWindow(self.butGccXml, 0, border=5, + parent.AddWindow(self.butGccXml, 0, border=10, flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL) def _init_coll_bsMURCompile_Items(self, parent): @@ -70,7 +71,7 @@ parent.AddWindow(self.staticText3, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) parent.AddWindow(self.listIncludes, 1, border=10, - flag=wx.BOTTOM | wx.TOP | wx.EXPAND | wx.ALIGN_CENTER_VERTICAL) + flag=wx.RIGHT | wx.BOTTOM | wx.TOP | wx.EXPAND | wx.ALIGN_CENTER_VERTICAL) def _init_coll_bsHeader_Items(self, parent): # generated method, don't edit @@ -79,7 +80,7 @@ flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL) parent.AddWindow(self.textHeader, 1, border=10, flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM | wx.TOP) - parent.AddWindow(self.butHeaders, 0, border=5, + parent.AddWindow(self.butHeaders, 0, border=10, flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL) def _init_coll_bsUpLeft_Items(self, parent): @@ -131,7 +132,7 @@ parent.AddWindow(self.staticText4, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) parent.AddWindow(self.listDefines, 1, border=10, - flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND) + flag=wx.RIGHT | wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND) def _init_coll_menuBar1_Menus(self, parent): # generated method, don't edit @@ -291,61 +292,60 @@ self.panelSHUp = wx.Panel(id=wxID_MAINFRAMEPANELSHUP, name=u'panelSHUp', parent=self.splitterHorizontal, pos=wx.Point(0, 0), - size=wx.Size(833, 372), style=wx.TAB_TRAVERSAL) + size=wx.Size(833, 10), style=wx.TAB_TRAVERSAL) self.panelSHLow = wx.Panel(id=wxID_MAINFRAMEPANELSHLOW, name=u'panelSHLow', parent=self.splitterHorizontal, - pos=wx.Point(0, 376), size=wx.Size(833, 157), + pos=wx.Point(0, 14), size=wx.Size(833, 519), style=wx.TAB_TRAVERSAL) self.splitterHorizontal.SplitHorizontally(self.panelSHUp, self.panelSHLow, 300) self.notebook1 = wx.Notebook(id=wxID_MAINFRAMENOTEBOOK1, name='notebook1', parent=self.panelSHLow, pos=wx.Point(0, 0), - size=wx.Size(833, 157), style=0) + size=wx.Size(833, 519), style=0) self.notebook1.SetLabel(u'Label') self.textOutput = wx.TextCtrl(id=wxID_MAINFRAMETEXTOUTPUT, name=u'textOutput', parent=self.notebook1, pos=wx.Point(0, 0), - size=wx.Size(825, 131), style=wx.TE_READONLY | wx.TE_MULTILINE, + size=wx.Size(825, 493), style=wx.TE_READONLY | wx.TE_MULTILINE, value=u'') self.splitterVertical = wx.SplitterWindow(id=wxID_MAINFRAMESPLITTERVERTICAL, name=u'splitterVertical', parent=self.panelSHUp, pos=wx.Point(0, - 0), size=wx.Size(833, 367), style=wx.SP_3D) + 0), size=wx.Size(833, 5), style=wx.SP_3D) self.splitterVertical.SetNeedUpdating(True) self.splitterVertical.SetMinimumPaneSize(0) self.panelSettings = wx.Panel(id=wxID_MAINFRAMEPANELSETTINGS, name=u'panelSettings', parent=self.splitterVertical, - pos=wx.Point(0, 0), size=wx.Size(235, 367), - style=wx.TAB_TRAVERSAL) + pos=wx.Point(0, 0), size=wx.Size(10, 5), style=wx.TAB_TRAVERSAL) self.panelCode = wx.Panel(id=wxID_MAINFRAMEPANELCODE, name=u'panelCode', - parent=self.splitterVertical, pos=wx.Point(239, 0), - size=wx.Size(594, 367), style=wx.TAB_TRAVERSAL) + parent=self.splitterVertical, pos=wx.Point(14, 0), + size=wx.Size(819, 5), style=wx.TAB_TRAVERSAL) self.splitterVertical.SplitVertically(self.panelSettings, self.panelCode, 300) self.nbSettings = wx.Notebook(id=wxID_MAINFRAMENBSETTINGS, name=u'nbSettings', parent=self.panelSettings, pos=wx.Point(0, 0), - size=wx.Size(235, 367), style=0) + size=wx.Size(10, 5), style=0) self.nbSettings.SetLabel(u'Label') self.nbSettings.SetHelpText(u'') self.panelNbSettings = wx.Panel(id=wxID_MAINFRAMEPANELNBSETTINGS, name=u'panelNbSettings', parent=self.nbSettings, pos=wx.Point(0, - 0), size=wx.Size(227, 341), style=wx.TAB_TRAVERSAL) + 0), size=wx.Size(2, 0), style=wx.TAB_TRAVERSAL) self.panelNbSettings.Show(True) self.panelNbSettings.SetMinSize(wx.Size(100, 100)) self.textCtrl2 = wx.TextCtrl(id=wxID_MAINFRAMETEXTCTRL2, name='textCtrl2', parent=self.panelCode, pos=wx.Point(0, 17), - size=wx.Size(594, 317), style=wx.TE_MULTILINE, value=u'') + size=wx.Size(819, 0), style=wx.TE_MULTILINE, value=u'') self.panelButtons = wx.Panel(id=wxID_MAINFRAMEPANELBUTTONS, - name=u'panelButtons', parent=self.panelCode, pos=wx.Point(54, - 344), size=wx.Size(486, 23), style=wx.TAB_TRAVERSAL) + name=u'panelButtons', parent=self.panelCode, pos=wx.Point(166, + -18), size=wx.Size(486, 23), style=wx.TAB_TRAVERSAL) self.butGenXml = wx.Button(id=wxID_MAINFRAMEBUTGENXML, label=u'Generate XML code', name=u'butGenXml', @@ -370,10 +370,10 @@ self.textHeader = wx.TextCtrl(id=wxID_MAINFRAMETEXTHEADER, name=u'textHeader', parent=self.panelNbSettings, pos=wx.Point(56, - 20), size=wx.Size(128, 21), style=0, value=u'') + 20), size=wx.Size(0, 21), style=0, value=u'') self.butHeaders = wx.Button(id=wxID_MAINFRAMEBUTHEADERS, label=u'...', - name=u'butHeaders', parent=self.panelNbSettings, pos=wx.Point(189, + name=u'butHeaders', parent=self.panelNbSettings, pos=wx.Point(-38, 19), size=wx.Size(28, 23), style=0) self.butHeaders.Bind(wx.EVT_BUTTON, self.OnButHeadersButton, id=wxID_MAINFRAMEBUTHEADERS) @@ -389,10 +389,10 @@ self.textGccXml = wx.TextCtrl(id=wxID_MAINFRAMETEXTGCCXML, name=u'textGccXml', parent=self.panelNbSettings, pos=wx.Point(56, - 61), size=wx.Size(128, 21), style=0, value=u'') + 61), size=wx.Size(0, 21), style=0, value=u'') self.butGccXml = wx.Button(id=wxID_MAINFRAMEBUTGCCXML, label=u'...', - name=u'butGccXml', parent=self.panelNbSettings, pos=wx.Point(189, + name=u'butGccXml', parent=self.panelNbSettings, pos=wx.Point(-38, 60), size=wx.Size(28, 23), style=0) self.butGccXml.Bind(wx.EVT_BUTTON, self.OnButGccXmlButton, id=wxID_MAINFRAMEBUTGCCXML) @@ -404,7 +404,7 @@ self.listIncludes = wx.ListCtrl(id=wxID_MAINFRAMELISTINCLUDES, name=u'listIncludes', parent=self.panelNbSettings, - pos=wx.Point(56, 102), size=wx.Size(166, 66), style=wx.LC_ICON) + pos=wx.Point(56, 102), size=wx.Size(0, 66), style=wx.LC_ICON) self.listIncludes.Bind(wx.EVT_RIGHT_DOWN, self.OnListIncludesRightDown) self.staticText4 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT4, @@ -414,7 +414,7 @@ self.listDefines = wx.ListCtrl(id=wxID_MAINFRAMELISTDEFINES, name=u'listDefines', parent=self.panelNbSettings, pos=wx.Point(56, - 188), size=wx.Size(166, 68), style=wx.LC_ICON) + 188), size=wx.Size(0, 68), style=wx.LC_ICON) self.listDefines.Bind(wx.EVT_RIGHT_DOWN, self.OnListDefinesRightDown) self.staticText5 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT5, @@ -451,9 +451,6 @@ def OnListIncludesRightDown(self, event): self.PopupMenu(self.menuIncludes) - def OnButHeaderButton(self, event): - event.Skip() - def OnListDefinesRightDown(self, event): self.PopupMenu(self.menuDefines) @@ -467,9 +464,13 @@ self._controller.GenPyPPCode() def OnButHeadersButton(self, event): + """Callback for button event""" + self._controller.OpenHeaderDlg() event.Skip() def OnButGccXmlButton(self, event): + """Callback for button event""" + self._controller.OpenGccXmlDlg() event.Skip() def set_controller(self, controller): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2007-04-05 15:31:17
|
Revision: 969 http://svn.sourceforge.net/pygccxml/?rev=969&view=rev Author: alex_eisen Date: 2007-04-05 08:31:13 -0700 (Thu, 05 Apr 2007) Log Message: ----------- - Restructured - Added functionality Modified Paths: -------------- pyplusplus_dev/ide/ide.py Added Paths: ----------- pyplusplus_dev/ide/controllers/controller_main.py pyplusplus_dev/ide/views/dialog_macro.py pyplusplus_dev/ide/views/frame_main.py Removed Paths: ------------- pyplusplus_dev/ide/controllers/main.py pyplusplus_dev/ide/views/main_frame.py Added: pyplusplus_dev/ide/controllers/controller_main.py =================================================================== --- pyplusplus_dev/ide/controllers/controller_main.py (rev 0) +++ pyplusplus_dev/ide/controllers/controller_main.py 2007-04-05 15:31:13 UTC (rev 969) @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# Copyright 2004 Roman Yakovenko. +# 2007 Alexander Eisenhuth +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import wx +from views import dialog_macro + +""" Contoller class. Part of MVC +Responsibility: Glue view and model code: +- Handle all events from view (p.e. button) """ +class MainController: + def __init__(self, view): + self._view = view + + # Give controller object to the view + self._view.set_controller(self) + + def GenXmlCode(self): + """ Generate XML code""" + self._appendOutText("Generation of XML code staretd") + + for i in range(0,5): + self._view.listIncludes.InsertStringItem(i, "First Element - this is a long") + + def GenCppCode(self): + """ Generate Boost.Python code""" + self._appendOutText("Generation of C++ code for Boost.Python started") + + def GenPyPPCode(self): + """ Generate Py++ code""" + self._appendOutText("Generation of Py++ code started") + + def OpenDlgHeader(self): + """Open dialog to get header file""" + self._openFileDlgWithRelatedWxText( self._view.textHeader, + "Choose a Header file", + "Header (*.h)|*.h|All Files(*)|*") + + def OpenDlgGccXml(self): + """Open dialog to get GccXml executable""" + self._openFileDlgWithRelatedWxText( self._view.textGccXml, + "Choose GccXml executable", + "All Files(*)|*") + + def OpenDlgAddInclude(self): + """ """ + self._appendOutText("Add inc") + dialog = wx.DirDialog(self._view, "Choose include directory", ".") + try: + if dialog.ShowModal() == wx.ID_OK: + cur_num = self._view.listIncludes.GetItemCount() + self._view.listIncludes.InsertStringItem( + cur_num, dialog.GetPath()) + finally: + dialog.Destroy() + + def OpenDlgAddMacro(self): + """ """ + dialog = dialog_macro.MacroDialog(self._view) + if dialog.ShowModal() == wx.OK: + cur_num = self._view.listDefines.GetItemCount() + self._view.listDefines.InsertStringItem( + cur_num, dialog.textMacro.GetLineText(0)) + + + + def _openFileDlgWithRelatedWxText(self, + related_wx_text, + caption_txt="", + file_filter="All Files(*)|*", + dir_path="."): + """Open file open dialog and insert file in related wxText ctrl""" + dialog = wx.FileDialog(self._view, caption_txt, + dir_path, "", file_filter, wx.OPEN) + try: + if dialog.ShowModal() == wx.ID_OK: + related_wx_text.Clear() + related_wx_text.AppendText(dialog.GetPath()) + finally: + dialog.Destroy() + + def _appendOutText(self, text, type_of_text = 0): + """ append text with different error level""" + text_ctrl = self._view.textOutput + type_txt = "INFO" + # Error + if type_of_text == MainController._text_error: + type_txt = "ERROR" + text_ctrl.SetDefaultStyle(wx.TextAttr(wx.RED)) + # Warning + elif type_of_text == MainController._text_warn: + type_txt = "WARN" + # Orange + text_ctrl.SetDefaultStyle(wx.TextAttr(wx.Color(255, 168, 7))) + # Info + else: + text_ctrl.SetDefaultStyle(wx.TextAttr(wx.BLACK)) + + text_ctrl.AppendText(type_txt + ": " + text + "\n") + + _text_info = 0 # Text has informational character + _text_warn = 1 # Text has warning character + _text_error = 2 # Text has error character + + \ No newline at end of file Deleted: pyplusplus_dev/ide/controllers/main.py =================================================================== --- pyplusplus_dev/ide/controllers/main.py 2007-04-04 21:05:12 UTC (rev 968) +++ pyplusplus_dev/ide/controllers/main.py 2007-04-05 15:31:13 UTC (rev 969) @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2004 Roman Yakovenko. -# 2007 Alexander Eisenhuth -# Distributed under the Boost Software License, Version 1.0. (See -# accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt) - -import wx - -""" Contoller class. Part of MVC -Responsibility: Glue view and model code: -- Handle all events from view (p.e. button) """ -class MainController: - def __init__(self, view): - self._view = view - - # Give controller object to the view - self._view.set_controller(self) - - def GenXmlCode(self): - """ Generate XML code""" - self._appendOutText("Generation of XML code staretd") - - def GenCppCode(self): - """ Generate Boost.Python code""" - self._appendOutText("Generation of C++ code for Boost.Python started") - - def GenPyPPCode(self): - """ Generate Py++ code""" - self._appendOutText("Generation of Py++ code started") - - def OpenHeaderDlg(self): - """ """ - dialog = wx.FileDialog(self._view, "Choose a Header file", ".", "", - "Header (*.h)|*.h|All Files(*)|*", wx.OPEN) - try: - if dialog.ShowModal() == wx.ID_OK: - self._view.textHeader.Clear() - self._view.textHeader.AppendText(dialog.GetPath()) - finally: - dialog.Destroy() - - def OpenGccXmlDlg(self): - """ """ - dialog = wx.FileDialog(self._view, "Choose GccXml executable", - ".", "", "All Files(*)|*", wx.OPEN) - try: - if dialog.ShowModal() == wx.ID_OK: - self._view.textGccXml.Clear() - self._view.textGccXml.AppendText(dialog.GetPath()) - finally: - dialog.Destroy() - - def _appendOutText(self, text): - self._view.textOutput.AppendText(text + "\n") - - \ No newline at end of file Modified: pyplusplus_dev/ide/ide.py =================================================================== --- pyplusplus_dev/ide/ide.py 2007-04-04 21:05:12 UTC (rev 968) +++ pyplusplus_dev/ide/ide.py 2007-04-05 15:31:13 UTC (rev 969) @@ -10,10 +10,11 @@ import wx -from views.main_frame import create as createMainFrame -from controllers.main import MainController +from views.frame_main import create as createMainFrame +from controllers.controller_main import MainController -modules ={u'main controller': [0, '', u'controllers/main.py'], +modules ={u'dialog_macro': [0, '', u'views/dialog_macro.py'], + u'main controller': [0, '', u'controllers/main_controller.py'], u'main view': [1, 'Main frame of ide', u'views/main_frame.py']} class BoaApp(wx.App): Added: pyplusplus_dev/ide/views/dialog_macro.py =================================================================== --- pyplusplus_dev/ide/views/dialog_macro.py (rev 0) +++ pyplusplus_dev/ide/views/dialog_macro.py 2007-04-05 15:31:13 UTC (rev 969) @@ -0,0 +1,69 @@ +#Boa:Dialog:MacroDialog + +import wx + +def create(parent): + return MacroDialog(parent) + +[wxID_MACRODIALOG, wxID_MACRODIALOGBUTTONCANCEL, wxID_MACRODIALOGBUTTONOK, + wxID_MACRODIALOGPANELDOWN, wxID_MACRODIALOGPANELUP, + wxID_MACRODIALOGSTATICLINE1, wxID_MACRODIALOGSTATICTEXT1, + wxID_MACRODIALOGTEXTMACRO, +] = [wx.NewId() for _init_ctrls in range(8)] + +class MacroDialog(wx.Dialog): + def _init_ctrls(self, prnt): + # generated method, don't edit + wx.Dialog.__init__(self, id=wxID_MACRODIALOG, name=u'MacroDialog', + parent=prnt, pos=wx.Point(127, 171), size=wx.Size(376, 231), + style=wx.DEFAULT_DIALOG_STYLE, title=u'Enter new Macro') + self.SetClientSize(wx.Size(368, 197)) + self.SetMaxSize(wx.Size(376, 231)) + self.SetMinSize(wx.Size(376, 231)) + + self.panelUp = wx.Panel(id=wxID_MACRODIALOGPANELUP, name=u'panelUp', + parent=self, pos=wx.Point(0, -8), size=wx.Size(368, 152), + style=wx.TAB_TRAVERSAL) + + self.panelDown = wx.Panel(id=wxID_MACRODIALOGPANELDOWN, + name=u'panelDown', parent=self, pos=wx.Point(0, 144), + size=wx.Size(368, 74), style=wx.TAB_TRAVERSAL) + + self.buttonOk = wx.Button(id=wxID_MACRODIALOGBUTTONOK, label=u'Ok', + name=u'buttonOk', parent=self.panelDown, pos=wx.Point(40, 17), + size=wx.Size(75, 23), style=0) + self.buttonOk.Bind(wx.EVT_BUTTON, self.OnButtonOk, + id=wxID_MACRODIALOGBUTTONOK) + + self.buttonCancel = wx.Button(id=wxID_MACRODIALOGBUTTONCANCEL, + label=u'Cancel', name=u'buttonCancel', parent=self.panelDown, + pos=wx.Point(256, 16), size=wx.Size(75, 23), style=0) + self.buttonCancel.Bind(wx.EVT_BUTTON, self.OnButtonCancel, + id=wxID_MACRODIALOGBUTTONCANCEL) + + self.staticLine1 = wx.StaticLine(id=wxID_MACRODIALOGSTATICLINE1, + name='staticLine1', parent=self.panelDown, pos=wx.Point(9, 0), + size=wx.Size(343, 2), style=0) + + self.textMacro = wx.TextCtrl(id=wxID_MACRODIALOGTEXTMACRO, + name=u'textMacro', parent=self.panelUp, pos=wx.Point(32, 40), + size=wx.Size(304, 88), style=wx.TE_MULTILINE, value=u'') + + self.staticText1 = wx.StaticText(id=wxID_MACRODIALOGSTATICTEXT1, + label=u'Definition of macro (ABS=12)', name='staticText1', + parent=self.panelUp, pos=wx.Point(32, 24), size=wx.Size(140, 13), + style=0) + + def __init__(self, parent): + self._init_ctrls(parent) + + def OnButtonOk(self, event): + """End modal dialog with True""" + self.EndModal(wx.OK) + event.Skip() + + def OnButtonCancel(self, event): + """End modal dialog with False""" + self.EndModal(wx.CANCEL) + event.Skip() + Copied: pyplusplus_dev/ide/views/frame_main.py (from rev 962, pyplusplus_dev/ide/views/main_frame.py) =================================================================== --- pyplusplus_dev/ide/views/frame_main.py (rev 0) +++ pyplusplus_dev/ide/views/frame_main.py 2007-04-05 15:31:13 UTC (rev 969) @@ -0,0 +1,534 @@ +#Boa:Frame:MainFrame + +# Copyright 2004 Roman Yakovenko. +# 2007 Alexander Eisenhuth +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + + +""" Contains the iplementation of the main frame of the application. +Most of the code was build with BOA""" + +import wx + +def create(parent): + return MainFrame(parent) + +[wxID_MAINFRAMEMENUEFILEEXIT, wxID_MAINFRAMEMENUEFILENEW, + wxID_MAINFRAMEMENUEFILEOPEN, wxID_MAINFRAMEMENUEFILERECENT, + wxID_MAINFRAMEMENUEFILESAVE, +] = [wx.NewId() for _init_coll_menueFile_Items in range(5)] + +[wxID_MAINFRAMEMENUINCLUDESADDINC, wxID_MAINFRAMEMENUINCLUDESITEMS1, +] = [wx.NewId() for _init_coll_menuIncludes_Items in range(2)] + +[wxID_MAINFRAMEMENUDEFINESADDDEF, wxID_MAINFRAMEMENUDEFINESREMOVEDEF, +] = [wx.NewId() for _init_coll_menuDefines_Items in range(2)] + +[wxID_MAINFRAME, wxID_MAINFRAMEBUTGCCXML, wxID_MAINFRAMEBUTGENCPP, + wxID_MAINFRAMEBUTGENPYPP, wxID_MAINFRAMEBUTGENXML, wxID_MAINFRAMEBUTHEADERS, + wxID_MAINFRAMELISTDEFINES, wxID_MAINFRAMELISTINCLUDES, + wxID_MAINFRAMENBSETTINGS, wxID_MAINFRAMENOTEBOOK1, + wxID_MAINFRAMEPANELBUTTONS, wxID_MAINFRAMEPANELCODE, wxID_MAINFRAMEPANELMAIN, + wxID_MAINFRAMEPANELNBSETTINGS, wxID_MAINFRAMEPANELSETTINGS, + wxID_MAINFRAMEPANELSHLOW, wxID_MAINFRAMEPANELSHUP, + wxID_MAINFRAMESPLITTERHORIZONTAL, wxID_MAINFRAMESPLITTERVERTICAL, + wxID_MAINFRAMESTATICTEXT1, wxID_MAINFRAMESTATICTEXT2, + wxID_MAINFRAMESTATICTEXT3, wxID_MAINFRAMESTATICTEXT4, + wxID_MAINFRAMESTATICTEXT5, wxID_MAINFRAMESTATUSBAR, wxID_MAINFRAMETEXTCTRL2, + wxID_MAINFRAMETEXTGCCXML, wxID_MAINFRAMETEXTHEADER, wxID_MAINFRAMETEXTOUTPUT, +] = [wx.NewId() for _init_ctrls in range(29)] + +class MainFrame(wx.Frame): + """ Main frame class. Part of MVC """ + + def _init_coll_bsGccXml_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText2, 0, border=5, + flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) + parent.AddWindow(self.textGccXml, 1, border=10, + flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM) + parent.AddWindow(self.butGccXml, 0, border=10, + flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL) + + def _init_coll_bsMURCompile_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.textCtrl2, 1, border=0, flag=wx.EXPAND) + + def _init_coll_bsMain_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.splitterHorizontal, 1, border=5, + flag=wx.ALL | wx.EXPAND) + + def _init_coll_bsIncPath_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText3, 0, border=5, + flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) + parent.AddWindow(self.listIncludes, 1, border=10, + flag=wx.RIGHT | wx.BOTTOM | wx.TOP | wx.EXPAND | wx.ALIGN_CENTER_VERTICAL) + + def _init_coll_bsHeader_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText1, 0, border=5, + flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL) + parent.AddWindow(self.textHeader, 1, border=10, + flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM | wx.TOP) + parent.AddWindow(self.butHeaders, 0, border=10, + flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL) + + def _init_coll_bsUpLeft_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.nbSettings, 1, border=0, flag=wx.ALL | wx.EXPAND) + + def _init_coll_bsMURButtons_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.butGenXml, 0, border=10, + flag=wx.RIGHT | wx.LEFT | wx.ALIGN_CENTER_VERTICAL) + parent.AddWindow(self.butGenCpp, 0, border=10, + flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL) + parent.AddWindow(self.butGenPyPP, 0, border=10, + flag=wx.RIGHT | wx.LEFT | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL) + + def _init_coll_bsMainUpper_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.splitterVertical, 1, border=5, + flag=wx.BOTTOM | wx.EXPAND) + + def _init_coll_bsMainLow_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.notebook1, 1, border=0, flag=wx.EXPAND) + + def _init_coll_bsUpRight_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText5, 0, border=0, flag=0) + parent.AddSizer(self.bsMURCompile, 1, border=4, flag=wx.TOP | wx.EXPAND) + parent.AddWindow(self.panelButtons, 0, border=10, + flag=wx.ALIGN_CENTER_HORIZONTAL | wx.TOP) + + def _init_coll_bsMULSettings_Items(self, parent): + # generated method, don't edit + + parent.AddSpacer((10, 10), border=0, flag=0) + parent.AddSizer(self.bsHeader, 0, border=5, flag=wx.RIGHT | wx.EXPAND) + parent.AddSizer(self.bsGccXml, 0, border=5, flag=wx.RIGHT | wx.EXPAND) + parent.AddSizer(self.bsIncPath, 0, border=5, flag=wx.RIGHT | wx.EXPAND) + parent.AddSizer(self.bsDefines, 0, border=5, flag=wx.RIGHT | wx.EXPAND) + + def _init_coll_bsDefines_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText4, 0, border=5, + flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) + parent.AddWindow(self.listDefines, 1, border=10, + flag=wx.RIGHT | wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND) + + def _init_coll_menuBar_Menus(self, parent): + # generated method, don't edit + + parent.Append(menu=self.menueFile, title=u'&File') + + def _init_coll_menuIncludes_Items(self, parent): + # generated method, don't edit + + parent.Append(help=u'Add new include directory for gcc', + id=wxID_MAINFRAMEMENUINCLUDESADDINC, kind=wx.ITEM_NORMAL, + text=u'Add ...') + parent.Append(help=u'Remove selected include directory', + id=wxID_MAINFRAMEMENUINCLUDESITEMS1, kind=wx.ITEM_NORMAL, + text=u'Remove') + self.Bind(wx.EVT_MENU, self.OnMenueIncludesAdd, + id=wxID_MAINFRAMEMENUINCLUDESADDINC) + self.Bind(wx.EVT_MENU, self.OnMenueIncludesRemove, + id=wxID_MAINFRAMEMENUINCLUDESITEMS1) + + def _init_coll_menueFile_Items(self, parent): + # generated method, don't edit + + parent.Append(help=u'Create new Project', id=wxID_MAINFRAMEMENUEFILENEW, + kind=wx.ITEM_NORMAL, text=u'&New Project') + parent.Append(help=u'Open existing Project', + id=wxID_MAINFRAMEMENUEFILEOPEN, kind=wx.ITEM_NORMAL, + text=u'&Open Project') + parent.Append(help=u'Save current Project', + id=wxID_MAINFRAMEMENUEFILESAVE, kind=wx.ITEM_NORMAL, + text=u'&Save Project') + parent.AppendSeparator() + parent.AppendMenu(help=u'Open recently used Project', + id=wxID_MAINFRAMEMENUEFILERECENT, submenu=wx.Menu(), + text=u'Recent Projects') + parent.AppendSeparator() + parent.Append(help='', id=wxID_MAINFRAMEMENUEFILEEXIT, + kind=wx.ITEM_NORMAL, text=u'&Exit') + self.Bind(wx.EVT_MENU, self.OnMenueFileNewMenu, + id=wxID_MAINFRAMEMENUEFILENEW) + self.Bind(wx.EVT_MENU, self.OnMenueFileOpenMenu, + id=wxID_MAINFRAMEMENUEFILEOPEN) + self.Bind(wx.EVT_MENU, self.OnMenueFileSaveMenu, + id=wxID_MAINFRAMEMENUEFILESAVE) + self.Bind(wx.EVT_MENU, self.OnMenueFileExitMenu, + id=wxID_MAINFRAMEMENUEFILEEXIT) + + def _init_coll_menuDefines_Items(self, parent): + # generated method, don't edit + + parent.Append(help=u'Add new define for gcc', + id=wxID_MAINFRAMEMENUDEFINESADDDEF, kind=wx.ITEM_NORMAL, + text=u'Add ...') + parent.Append(help=u'Remove selected define', + id=wxID_MAINFRAMEMENUDEFINESREMOVEDEF, kind=wx.ITEM_NORMAL, + text=u'Remove') + self.Bind(wx.EVT_MENU, self.OnMenueDefinesAddDefine, + id=wxID_MAINFRAMEMENUDEFINESADDDEF) + self.Bind(wx.EVT_MENU, self.OnMenueDefinesRemoveDefine, + id=wxID_MAINFRAMEMENUDEFINESREMOVEDEF) + + def _init_coll_nbSettings_Pages(self, parent): + # generated method, don't edit + + parent.AddPage(imageId=-1, page=self.panelNbSettings, select=True, + text=u'Settings') + + def _init_coll_notebook1_Pages(self, parent): + # generated method, don't edit + + parent.AddPage(imageId=-1, page=self.textOutput, select=True, + text=u'Output') + + def _init_coll_statusBar_Fields(self, parent): + # generated method, don't edit + parent.SetFieldsCount(3) + + parent.SetStatusText(number=0, text=u'<helptextOrStatus>') + parent.SetStatusText(number=1, text=u'<parseTime>') + parent.SetStatusText(number=2, text=u'<compileTime>') + + parent.SetStatusWidths([-1, -1, -1]) + + def _init_sizers(self): + # generated method, don't edit + self.bsMain = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsMainUpper = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsMainLow = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsUpLeft = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsUpRight = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsMULSettings = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsMURCompile = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsMURButtons = wx.BoxSizer(orient=wx.HORIZONTAL) + + self.bsHeader = wx.BoxSizer(orient=wx.HORIZONTAL) + + self.bsGccXml = wx.BoxSizer(orient=wx.HORIZONTAL) + + self.bsIncPath = wx.BoxSizer(orient=wx.HORIZONTAL) + + self.bsDefines = wx.BoxSizer(orient=wx.HORIZONTAL) + + self._init_coll_bsMain_Items(self.bsMain) + self._init_coll_bsMainUpper_Items(self.bsMainUpper) + self._init_coll_bsMainLow_Items(self.bsMainLow) + self._init_coll_bsUpLeft_Items(self.bsUpLeft) + self._init_coll_bsUpRight_Items(self.bsUpRight) + self._init_coll_bsMULSettings_Items(self.bsMULSettings) + self._init_coll_bsMURCompile_Items(self.bsMURCompile) + self._init_coll_bsMURButtons_Items(self.bsMURButtons) + self._init_coll_bsHeader_Items(self.bsHeader) + self._init_coll_bsGccXml_Items(self.bsGccXml) + self._init_coll_bsIncPath_Items(self.bsIncPath) + self._init_coll_bsDefines_Items(self.bsDefines) + + self.panelSHUp.SetSizer(self.bsMainUpper) + self.panelSettings.SetSizer(self.bsUpLeft) + self.panelButtons.SetSizer(self.bsMURButtons) + self.panelSHLow.SetSizer(self.bsMainLow) + self.panelMain.SetSizer(self.bsMain) + self.panelCode.SetSizer(self.bsUpRight) + self.panelNbSettings.SetSizer(self.bsMULSettings) + + def _init_utils(self): + # generated method, don't edit + self.menueFile = wx.Menu(title='') + + self.menuBar = wx.MenuBar() + + self.menuIncludes = wx.Menu(title='') + + self.menuDefines = wx.Menu(title='') + + self._init_coll_menueFile_Items(self.menueFile) + self._init_coll_menuBar_Menus(self.menuBar) + self._init_coll_menuIncludes_Items(self.menuIncludes) + self._init_coll_menuDefines_Items(self.menuDefines) + + def _init_ctrls(self, prnt): + # generated method, don't edit + wx.Frame.__init__(self, id=wxID_MAINFRAME, name=u'MainFrame', + parent=prnt, pos=wx.Point(0, -2), size=wx.Size(851, 620), + style=wx.DEFAULT_FRAME_STYLE, title=u'Py++ Code generator') + self._init_utils() + self.SetClientSize(wx.Size(843, 586)) + self.SetMenuBar(self.menuBar) + + self.statusBar = wx.StatusBar(id=wxID_MAINFRAMESTATUSBAR, + name=u'statusBar', parent=self, style=0) + self._init_coll_statusBar_Fields(self.statusBar) + self.SetStatusBar(self.statusBar) + + self.panelMain = wx.Panel(id=wxID_MAINFRAMEPANELMAIN, name=u'panelMain', + parent=self, pos=wx.Point(0, 0), size=wx.Size(843, 543), + style=wx.TAB_TRAVERSAL) + + self.splitterHorizontal = wx.SplitterWindow(id=wxID_MAINFRAMESPLITTERHORIZONTAL, + name=u'splitterHorizontal', parent=self.panelMain, pos=wx.Point(5, + 5), size=wx.Size(833, 533), style=0) + self.splitterHorizontal.SetNeedUpdating(False) + self.splitterHorizontal.SetMinimumPaneSize(0) + + self.panelSHUp = wx.Panel(id=wxID_MAINFRAMEPANELSHUP, name=u'panelSHUp', + parent=self.splitterHorizontal, pos=wx.Point(0, 0), + size=wx.Size(833, 10), style=wx.TAB_TRAVERSAL) + + self.panelSHLow = wx.Panel(id=wxID_MAINFRAMEPANELSHLOW, + name=u'panelSHLow', parent=self.splitterHorizontal, + pos=wx.Point(0, 14), size=wx.Size(833, 519), + style=wx.TAB_TRAVERSAL) + self.splitterHorizontal.SplitHorizontally(self.panelSHUp, + self.panelSHLow, 300) + + self.notebook1 = wx.Notebook(id=wxID_MAINFRAMENOTEBOOK1, + name='notebook1', parent=self.panelSHLow, pos=wx.Point(0, 0), + size=wx.Size(833, 519), style=0) + self.notebook1.SetLabel(u'Label') + + self.textOutput = wx.TextCtrl(id=wxID_MAINFRAMETEXTOUTPUT, + name=u'textOutput', parent=self.notebook1, pos=wx.Point(0, 0), + size=wx.Size(825, 493), + style=wx.TE_RICH | wx.TE_READONLY | wx.TE_MULTILINE, value=u'') + + self.splitterVertical = wx.SplitterWindow(id=wxID_MAINFRAMESPLITTERVERTICAL, + name=u'splitterVertical', parent=self.panelSHUp, pos=wx.Point(0, + 0), size=wx.Size(833, 5), style=wx.SP_3D) + self.splitterVertical.SetNeedUpdating(True) + self.splitterVertical.SetMinimumPaneSize(0) + + self.panelSettings = wx.Panel(id=wxID_MAINFRAMEPANELSETTINGS, + name=u'panelSettings', parent=self.splitterVertical, + pos=wx.Point(0, 0), size=wx.Size(10, 5), style=wx.TAB_TRAVERSAL) + + self.panelCode = wx.Panel(id=wxID_MAINFRAMEPANELCODE, name=u'panelCode', + parent=self.splitterVertical, pos=wx.Point(14, 0), + size=wx.Size(819, 5), style=wx.TAB_TRAVERSAL) + self.splitterVertical.SplitVertically(self.panelSettings, + self.panelCode, 300) + + self.nbSettings = wx.Notebook(id=wxID_MAINFRAMENBSETTINGS, + name=u'nbSettings', parent=self.panelSettings, pos=wx.Point(0, 0), + size=wx.Size(10, 5), style=0) + self.nbSettings.SetLabel(u'Label') + self.nbSettings.SetHelpText(u'') + + self.panelNbSettings = wx.Panel(id=wxID_MAINFRAMEPANELNBSETTINGS, + name=u'panelNbSettings', parent=self.nbSettings, pos=wx.Point(0, + 0), size=wx.Size(2, 0), style=wx.TAB_TRAVERSAL) + self.panelNbSettings.Show(True) + self.panelNbSettings.SetMinSize(wx.Size(100, 100)) + + self.textCtrl2 = wx.TextCtrl(id=wxID_MAINFRAMETEXTCTRL2, + name='textCtrl2', parent=self.panelCode, pos=wx.Point(0, 17), + size=wx.Size(819, 0), style=wx.TE_MULTILINE, value=u'') + + self.panelButtons = wx.Panel(id=wxID_MAINFRAMEPANELBUTTONS, + name=u'panelButtons', parent=self.panelCode, pos=wx.Point(166, + -18), size=wx.Size(486, 23), style=wx.TAB_TRAVERSAL) + + self.butGenXml = wx.Button(id=wxID_MAINFRAMEBUTGENXML, + label=u'Generate XML code', name=u'butGenXml', + parent=self.panelButtons, pos=wx.Point(10, 0), size=wx.Size(140, + 23), style=0) + self.butGenXml.Bind(wx.EVT_BUTTON, self.OnButGenXmlButton, + id=wxID_MAINFRAMEBUTGENXML) + + self.butGenCpp = wx.Button(id=wxID_MAINFRAMEBUTGENCPP, + label=u'Generate C++ code', name=u'butGenCpp', + parent=self.panelButtons, pos=wx.Point(170, 0), size=wx.Size(142, + 23), style=0) + self.butGenCpp.Bind(wx.EVT_BUTTON, self.OnButGenCppButton, + id=wxID_MAINFRAMEBUTGENCPP) + + self.butGenPyPP = wx.Button(id=wxID_MAINFRAMEBUTGENPYPP, + label=u'Generate Py++ code', name=u'butGenPyPP', + parent=self.panelButtons, pos=wx.Point(332, 0), size=wx.Size(144, + 23), style=0) + self.butGenPyPP.Bind(wx.EVT_BUTTON, self.OnButGenPyPPButton, + id=wxID_MAINFRAMEBUTGENPYPP) + + self.textHeader = wx.TextCtrl(id=wxID_MAINFRAMETEXTHEADER, + name=u'textHeader', parent=self.panelNbSettings, pos=wx.Point(56, + 20), size=wx.Size(0, 21), style=0, value=u'') + + self.butHeaders = wx.Button(id=wxID_MAINFRAMEBUTHEADERS, label=u'...', + name=u'butHeaders', parent=self.panelNbSettings, pos=wx.Point(-38, + 19), size=wx.Size(28, 23), style=0) + self.butHeaders.Bind(wx.EVT_BUTTON, self.OnButHeadersButton, + id=wxID_MAINFRAMEBUTHEADERS) + + self.staticText1 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT1, + label=u'Header\nFile', name='staticText1', + parent=self.panelNbSettings, pos=wx.Point(5, 15), size=wx.Size(51, + 30), style=wx.ALIGN_CENTRE) + + self.staticText2 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT2, + label=u'GccXml', name='staticText2', parent=self.panelNbSettings, + pos=wx.Point(5, 60), size=wx.Size(51, 23), style=wx.ALIGN_CENTRE) + + self.textGccXml = wx.TextCtrl(id=wxID_MAINFRAMETEXTGCCXML, + name=u'textGccXml', parent=self.panelNbSettings, pos=wx.Point(56, + 61), size=wx.Size(0, 21), style=0, value=u'') + + self.butGccXml = wx.Button(id=wxID_MAINFRAMEBUTGCCXML, label=u'...', + name=u'butGccXml', parent=self.panelNbSettings, pos=wx.Point(-38, + 60), size=wx.Size(28, 23), style=0) + self.butGccXml.Bind(wx.EVT_BUTTON, self.OnButGccXmlButton, + id=wxID_MAINFRAMEBUTGCCXML) + + self.staticText3 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT3, + label=u'Include\nPath', name='staticText3', + parent=self.panelNbSettings, pos=wx.Point(5, 116), + size=wx.Size(51, 37), style=wx.ALIGN_CENTRE) + + self.listIncludes = wx.ListCtrl(id=wxID_MAINFRAMELISTINCLUDES, + name=u'listIncludes', parent=self.panelNbSettings, + pos=wx.Point(56, 102), size=wx.Size(0, 66), + style=wx.LC_HRULES | wx.LC_NO_HEADER | wx.LC_REPORT) + self.listIncludes.Bind(wx.EVT_RIGHT_DOWN, self.OnListIncludesRightDown) + self.listIncludes.Bind(wx.EVT_SIZE, self.OnListIncludesSize) + + self.staticText4 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT4, + label=u'Defines', name='staticText4', parent=self.panelNbSettings, + pos=wx.Point(5, 209), size=wx.Size(51, 25), + style=wx.ALIGN_CENTRE) + + self.listDefines = wx.ListCtrl(id=wxID_MAINFRAMELISTDEFINES, + name=u'listDefines', parent=self.panelNbSettings, pos=wx.Point(56, + 188), size=wx.Size(0, 68), + style=wx.LC_HRULES | wx.LC_NO_HEADER | wx.LC_REPORT) + self.listDefines.Bind(wx.EVT_RIGHT_DOWN, self.OnListDefinesRightDown) + self.listDefines.Bind(wx.EVT_SIZE, self.OnListDefinesSize) + + self.staticText5 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT5, + label=u'Code', name='staticText5', parent=self.panelCode, + pos=wx.Point(0, 0), size=wx.Size(25, 13), style=0) + + self._init_coll_notebook1_Pages(self.notebook1) + self._init_coll_nbSettings_Pages(self.nbSettings) + + self._init_sizers() + + def __init__(self, parent): + self._init_ctrls(parent) + self._setup_ide_ctrls() + self.SetSize((self.GetSize()[0]+1,self.GetSize()[1]+1)) + + def OnMenueFileNewMenu(self, event): + event.Skip() + + def OnMenueFileOpenMenu(self, event): + event.Skip() + + def OnMenueFileSaveMenu(self, event): + event.Skip() + + def OnMenueFileRecentMenu(self, event): + event.Skip() + + def OnMenueFileExitMenu(self, event): + event.Skip() + + def OnTextGenCodeRightDown(self, event): + event.Skip() + + def OnListIncludesRightDown(self, event): + self.PopupMenu(self.menuIncludes) + + def OnListDefinesRightDown(self, event): + self.PopupMenu(self.menuDefines) + + def OnButGenXmlButton(self, event): + self._controller.GenXmlCode() + + def OnButGenCppButton(self, event): + self._controller.GenCppCode() + + def OnButGenPyPPButton(self, event): + self._controller.GenPyPPCode() + + def OnButHeadersButton(self, event): + """Callback for button event""" + self._controller.OpenDlgHeader() + event.Skip() + + def OnButGccXmlButton(self, event): + """Callback for button event""" + self._controller.OpenDlgGccXml() + event.Skip() + + def set_controller(self, controller): + """Set controller of MVC""" + self._controller = controller + + def _setup_ide_ctrls(self): + """Do ide related settings in ctrls""" + list_inc = self.listIncludes + list_def = self.listDefines + + # Init list controls + for list_ctrl in (list_inc, list_def): + list_ctrl.InsertColumn(0, "Path") + + def OnListIncludesSize(self, event): + """Handle resize of listIncludes""" + list_ctrl = self.listIncludes + list_ctrl.SetColumnWidth(0, list_ctrl.GetSize().GetWidth() - 30 ) + event.Skip() + + def OnListDefinesSize(self, event): + """Handle resize of listDefines""" + list_ctrl = self.listDefines + list_ctrl.SetColumnWidth(0, list_ctrl.GetSize().GetWidth() - 30 ) + event.Skip() + + def OnMenueIncludesAdd(self, event): + self._controller.OpenDlgAddInclude() + event.Skip() + + def OnMenueIncludesRemove(self, event): + event.Skip() + + def OnMenueDefinesAddDefine(self, event): + self._controller.OpenDlgAddMacro() + event.Skip() + + def OnMenueDefinesRemoveDefine(self, event): + event.Skip() + + + + + Deleted: pyplusplus_dev/ide/views/main_frame.py =================================================================== --- pyplusplus_dev/ide/views/main_frame.py 2007-04-04 21:05:12 UTC (rev 968) +++ pyplusplus_dev/ide/views/main_frame.py 2007-04-05 15:31:13 UTC (rev 969) @@ -1,478 +0,0 @@ -#Boa:Frame:MainFrame -from Dialog import Dialog - -# Copyright 2004 Roman Yakovenko. -# 2007 Alexander Eisenhuth -# Distributed under the Boost Software License, Version 1.0. (See -# accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt) - - -""" Contains the iplementation of the main frame of the application. -Most of the code was build with BOA""" - -import wx - -def create(parent): - return MainFrame(parent) - -[wxID_MAINFRAMEMENUEFILEEXIT, wxID_MAINFRAMEMENUEFILENEW, - wxID_MAINFRAMEMENUEFILEOPEN, wxID_MAINFRAMEMENUEFILERECENT, - wxID_MAINFRAMEMENUEFILESAVE, -] = [wx.NewId() for _init_coll_menueFile_Items in range(5)] - -[wxID_MAINFRAMEMENUINCLUDESADDINC, wxID_MAINFRAMEMENUINCLUDESITEMS1, -] = [wx.NewId() for _init_coll_menuIncludes_Items in range(2)] - -[wxID_MAINFRAMEMENUDEFINESADDDEF, wxID_MAINFRAMEMENUDEFINESREMOVEDEF, -] = [wx.NewId() for _init_coll_menuDefines_Items in range(2)] - -[wxID_MAINFRAME, wxID_MAINFRAMEBUTGCCXML, wxID_MAINFRAMEBUTGENCPP, - wxID_MAINFRAMEBUTGENPYPP, wxID_MAINFRAMEBUTGENXML, wxID_MAINFRAMEBUTHEADERS, - wxID_MAINFRAMELISTDEFINES, wxID_MAINFRAMELISTINCLUDES, - wxID_MAINFRAMENBSETTINGS, wxID_MAINFRAMENOTEBOOK1, - wxID_MAINFRAMEPANELBUTTONS, wxID_MAINFRAMEPANELCODE, wxID_MAINFRAMEPANELMAIN, - wxID_MAINFRAMEPANELNBSETTINGS, wxID_MAINFRAMEPANELSETTINGS, - wxID_MAINFRAMEPANELSHLOW, wxID_MAINFRAMEPANELSHUP, - wxID_MAINFRAMESPLITTERHORIZONTAL, wxID_MAINFRAMESPLITTERVERTICAL, - wxID_MAINFRAMESTATICTEXT1, wxID_MAINFRAMESTATICTEXT2, - wxID_MAINFRAMESTATICTEXT3, wxID_MAINFRAMESTATICTEXT4, - wxID_MAINFRAMESTATICTEXT5, wxID_MAINFRAMESTATUSBAR, wxID_MAINFRAMETEXTCTRL2, - wxID_MAINFRAMETEXTGCCXML, wxID_MAINFRAMETEXTHEADER, wxID_MAINFRAMETEXTOUTPUT, -] = [wx.NewId() for _init_ctrls in range(29)] - -class MainFrame(wx.Frame): - """ Main frame class. Part of MVC """ - - def _init_coll_bsGccXml_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.staticText2, 0, border=5, - flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) - parent.AddWindow(self.textGccXml, 1, border=10, - flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM) - parent.AddWindow(self.butGccXml, 0, border=10, - flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL) - - def _init_coll_bsMURCompile_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.textCtrl2, 1, border=0, flag=wx.EXPAND) - - def _init_coll_bsMain_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.splitterHorizontal, 1, border=5, - flag=wx.ALL | wx.EXPAND) - - def _init_coll_bsIncPath_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.staticText3, 0, border=5, - flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) - parent.AddWindow(self.listIncludes, 1, border=10, - flag=wx.RIGHT | wx.BOTTOM | wx.TOP | wx.EXPAND | wx.ALIGN_CENTER_VERTICAL) - - def _init_coll_bsHeader_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.staticText1, 0, border=5, - flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL) - parent.AddWindow(self.textHeader, 1, border=10, - flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM | wx.TOP) - parent.AddWindow(self.butHeaders, 0, border=10, - flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL) - - def _init_coll_bsUpLeft_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.nbSettings, 1, border=0, flag=wx.ALL | wx.EXPAND) - - def _init_coll_bsMURButtons_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.butGenXml, 0, border=10, - flag=wx.RIGHT | wx.LEFT | wx.ALIGN_CENTER_VERTICAL) - parent.AddWindow(self.butGenCpp, 0, border=10, - flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL) - parent.AddWindow(self.butGenPyPP, 0, border=10, - flag=wx.RIGHT | wx.LEFT | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL) - - def _init_coll_bsMainUpper_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.splitterVertical, 1, border=5, - flag=wx.BOTTOM | wx.EXPAND) - - def _init_coll_bsMainLow_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.notebook1, 1, border=0, flag=wx.EXPAND) - - def _init_coll_bsUpRight_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.staticText5, 0, border=0, flag=0) - parent.AddSizer(self.bsMURCompile, 1, border=4, flag=wx.TOP | wx.EXPAND) - parent.AddWindow(self.panelButtons, 0, border=10, - flag=wx.ALIGN_CENTER_HORIZONTAL | wx.TOP) - - def _init_coll_bsMULSettings_Items(self, parent): - # generated method, don't edit - - parent.AddSpacer((10, 10), border=0, flag=0) - parent.AddSizer(self.bsHeader, 0, border=5, flag=wx.RIGHT | wx.EXPAND) - parent.AddSizer(self.bsGccXml, 0, border=5, flag=wx.RIGHT | wx.EXPAND) - parent.AddSizer(self.bsIncPath, 0, border=5, flag=wx.RIGHT | wx.EXPAND) - parent.AddSizer(self.bsDefines, 0, border=5, flag=wx.RIGHT | wx.EXPAND) - - def _init_coll_bsDefines_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.staticText4, 0, border=5, - flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) - parent.AddWindow(self.listDefines, 1, border=10, - flag=wx.RIGHT | wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND) - - def _init_coll_menuBar1_Menus(self, parent): - # generated method, don't edit - - parent.Append(menu=self.menueFile, title=u'&File') - - def _init_coll_menuIncludes_Items(self, parent): - # generated method, don't edit - - parent.Append(help='', id=wxID_MAINFRAMEMENUINCLUDESADDINC, - kind=wx.ITEM_NORMAL, text=u'Add ...') - parent.Append(help='', id=wxID_MAINFRAMEMENUINCLUDESITEMS1, - kind=wx.ITEM_NORMAL, text=u'Remove') - - def _init_coll_menueFile_Items(self, parent): - # generated method, don't edit - - parent.Append(help=u'Create new Project', id=wxID_MAINFRAMEMENUEFILENEW, - kind=wx.ITEM_NORMAL, text=u'&New Project') - parent.Append(help=u'Open existing Project', - id=wxID_MAINFRAMEMENUEFILEOPEN, kind=wx.ITEM_NORMAL, - text=u'&Open Project') - parent.Append(help=u'Save current Project', - id=wxID_MAINFRAMEMENUEFILESAVE, kind=wx.ITEM_NORMAL, - text=u'&Save Project') - parent.AppendSeparator() - parent.AppendMenu(help=u'Open recently used Project', - id=wxID_MAINFRAMEMENUEFILERECENT, submenu=wx.Menu(), - text=u'Recent Projects') - parent.AppendSeparator() - parent.Append(help='', id=wxID_MAINFRAMEMENUEFILEEXIT, - kind=wx.ITEM_NORMAL, text=u'&Exit') - self.Bind(wx.EVT_MENU, self.OnMenueFileNewMenu, - id=wxID_MAINFRAMEMENUEFILENEW) - self.Bind(wx.EVT_MENU, self.OnMenueFileOpenMenu, - id=wxID_MAINFRAMEMENUEFILEOPEN) - self.Bind(wx.EVT_MENU, self.OnMenueFileSaveMenu, - id=wxID_MAINFRAMEMENUEFILESAVE) - self.Bind(wx.EVT_MENU, self.OnMenueFileExitMenu, - id=wxID_MAINFRAMEMENUEFILEEXIT) - - def _init_coll_menuDefines_Items(self, parent): - # generated method, don't edit - - parent.Append(help='', id=wxID_MAINFRAMEMENUDEFINESADDDEF, - kind=wx.ITEM_NORMAL, text=u'Add ...') - parent.Append(help='', id=wxID_MAINFRAMEMENUDEFINESREMOVEDEF, - kind=wx.ITEM_NORMAL, text=u'Remove') - - def _init_coll_nbSettings_Pages(self, parent): - # generated method, don't edit - - parent.AddPage(imageId=-1, page=self.panelNbSettings, select=True, - text=u'Settings') - - def _init_coll_notebook1_Pages(self, parent): - # generated method, don't edit - - parent.AddPage(imageId=-1, page=self.textOutput, select=True, - text=u'Output') - - def _init_coll_statusBar_Fields(self, parent): - # generated method, don't edit - parent.SetFieldsCount(3) - - parent.SetStatusText(number=0, text=u'<helptextOrStatus>') - parent.SetStatusText(number=1, text=u'<parseTime>') - parent.SetStatusText(number=2, text=u'<compileTime>') - - parent.SetStatusWidths([-1, -1, -1]) - - def _init_sizers(self): - # generated method, don't edit - self.bsMain = wx.BoxSizer(orient=wx.VERTICAL) - - self.bsMainUpper = wx.BoxSizer(orient=wx.VERTICAL) - - self.bsMainLow = wx.BoxSizer(orient=wx.VERTICAL) - - self.bsUpLeft = wx.BoxSizer(orient=wx.VERTICAL) - - self.bsUpRight = wx.BoxSizer(orient=wx.VERTICAL) - - self.bsMULSettings = wx.BoxSizer(orient=wx.VERTICAL) - - self.bsMURCompile = wx.BoxSizer(orient=wx.VERTICAL) - - self.bsMURButtons = wx.BoxSizer(orient=wx.HORIZONTAL) - - self.bsHeader = wx.BoxSizer(orient=wx.HORIZONTAL) - - self.bsGccXml = wx.BoxSizer(orient=wx.HORIZONTAL) - - self.bsIncPath = wx.BoxSizer(orient=wx.HORIZONTAL) - - self.bsDefines = wx.BoxSizer(orient=wx.HORIZONTAL) - - self._init_coll_bsMain_Items(self.bsMain) - self._init_coll_bsMainUpper_Items(self.bsMainUpper) - self._init_coll_bsMainLow_Items(self.bsMainLow) - self._init_coll_bsUpLeft_Items(self.bsUpLeft) - self._init_coll_bsUpRight_Items(self.bsUpRight) - self._init_coll_bsMULSettings_Items(self.bsMULSettings) - self._init_coll_bsMURCompile_Items(self.bsMURCompile) - self._init_coll_bsMURButtons_Items(self.bsMURButtons) - self._init_coll_bsHeader_Items(self.bsHeader) - self._init_coll_bsGccXml_Items(self.bsGccXml) - self._init_coll_bsIncPath_Items(self.bsIncPath) - self._init_coll_bsDefines_Items(self.bsDefines) - - self.panelSHUp.SetSizer(self.bsMainUpper) - self.panelSettings.SetSizer(self.bsUpLeft) - self.panelButtons.SetSizer(self.bsMURButtons) - self.panelSHLow.SetSizer(self.bsMainLow) - self.panelMain.SetSizer(self.bsMain) - self.panelCode.SetSizer(self.bsUpRight) - self.panelNbSettings.SetSizer(self.bsMULSettings) - - def _init_utils(self): - # generated method, don't edit - self.menueFile = wx.Menu(title='') - - self.menuBar1 = wx.MenuBar() - - self.menuIncludes = wx.Menu(title='') - - self.menuDefines = wx.Menu(title='') - - self._init_coll_menueFile_Items(self.menueFile) - self._init_coll_menuBar1_Menus(self.menuBar1) - self._init_coll_menuIncludes_Items(self.menuIncludes) - self._init_coll_menuDefines_Items(self.menuDefines) - - def _init_ctrls(self, prnt): - # generated method, don't edit - wx.Frame.__init__(self, id=wxID_MAINFRAME, name=u'MainFrame', - parent=prnt, pos=wx.Point(0, -2), size=wx.Size(851, 620), - style=wx.DEFAULT_FRAME_STYLE, title=u'Py++ Code generator') - self._init_utils() - self.SetClientSize(wx.Size(843, 586)) - self.SetMenuBar(self.menuBar1) - - self.statusBar = wx.StatusBar(id=wxID_MAINFRAMESTATUSBAR, - name=u'statusBar', parent=self, style=0) - self._init_coll_statusBar_Fields(self.statusBar) - self.SetStatusBar(self.statusBar) - - self.panelMain = wx.Panel(id=wxID_MAINFRAMEPANELMAIN, name=u'panelMain', - parent=self, pos=wx.Point(0, 0), size=wx.Size(843, 543), - style=wx.TAB_TRAVERSAL) - - self.splitterHorizontal = wx.SplitterWindow(id=wxID_MAINFRAMESPLITTERHORIZONTAL, - name=u'splitterHorizontal', parent=self.panelMain, pos=wx.Point(5, - 5), size=wx.Size(833, 533), style=0) - self.splitterHorizontal.SetNeedUpdating(False) - self.splitterHorizontal.SetMinimumPaneSize(0) - - self.panelSHUp = wx.Panel(id=wxID_MAINFRAMEPANELSHUP, name=u'panelSHUp', - parent=self.splitterHorizontal, pos=wx.Point(0, 0), - size=wx.Size(833, 10), style=wx.TAB_TRAVERSAL) - - self.panelSHLow = wx.Panel(id=wxID_MAINFRAMEPANELSHLOW, - name=u'panelSHLow', parent=self.splitterHorizontal, - pos=wx.Point(0, 14), size=wx.Size(833, 519), - style=wx.TAB_TRAVERSAL) - self.splitterHorizontal.SplitHorizontally(self.panelSHUp, - self.panelSHLow, 300) - - self.notebook1 = wx.Notebook(id=wxID_MAINFRAMENOTEBOOK1, - name='notebook1', parent=self.panelSHLow, pos=wx.Point(0, 0), - size=wx.Size(833, 519), style=0) - self.notebook1.SetLabel(u'Label') - - self.textOutput = wx.TextCtrl(id=wxID_MAINFRAMETEXTOUTPUT, - name=u'textOutput', parent=self.notebook1, pos=wx.Point(0, 0), - size=wx.Size(825, 493), style=wx.TE_READONLY | wx.TE_MULTILINE, - value=u'') - - self.splitterVertical = wx.SplitterWindow(id=wxID_MAINFRAMESPLITTERVERTICAL, - name=u'splitterVertical', parent=self.panelSHUp, pos=wx.Point(0, - 0), size=wx.Size(833, 5), style=wx.SP_3D) - self.splitterVertical.SetNeedUpdating(True) - self.splitterVertical.SetMinimumPaneSize(0) - - self.panelSettings = wx.Panel(id=wxID_MAINFRAMEPANELSETTINGS, - name=u'panelSettings', parent=self.splitterVertical, - pos=wx.Point(0, 0), size=wx.Size(10, 5), style=wx.TAB_TRAVERSAL) - - self.panelCode = wx.Panel(id=wxID_MAINFRAMEPANELCODE, name=u'panelCode', - parent=self.splitterVertical, pos=wx.Point(14, 0), - size=wx.Size(819, 5), style=wx.TAB_TRAVERSAL) - self.splitterVertical.SplitVertically(self.panelSettings, - self.panelCode, 300) - - self.nbSettings = wx.Notebook(id=wxID_MAINFRAMENBSETTINGS, - name=u'nbSettings', parent=self.panelSettings, pos=wx.Point(0, 0), - size=wx.Size(10, 5), style=0) - self.nbSettings.SetLabel(u'Label') - self.nbSettings.SetHelpText(u'') - - self.panelNbSettings = wx.Panel(id=wxID_MAINFRAMEPANELNBSETTINGS, - name=u'panelNbSettings', parent=self.nbSettings, pos=wx.Point(0, - 0), size=wx.Size(2, 0), style=wx.TAB_TRAVERSAL) - self.panelNbSettings.Show(True) - self.panelNbSettings.SetMinSize(wx.Size(100, 100)) - - self.textCtrl2 = wx.TextCtrl(id=wxID_MAINFRAMETEXTCTRL2, - name='textCtrl2', parent=self.panelCode, pos=wx.Point(0, 17), - size=wx.Size(819, 0), style=wx.TE_MULTILINE, value=u'') - - self.panelButtons = wx.Panel(id=wxID_MAINFRAMEPANELBUTTONS, - name=u'panelButtons', parent=self.panelCode, pos=wx.Point(166, - -18), size=wx.Size(486, 23), style=wx.TAB_TRAVERSAL) - - self.butGenXml = wx.Button(id=wxID_MAINFRAMEBUTGENXML, - label=u'Generate XML code', name=u'butGenXml', - parent=self.panelButtons, pos=wx.Point(10, 0), size=wx.Size(140, - 23), style=0) - self.butGenXml.Bind(wx.EVT_BUTTON, self.OnButGenXmlButton, - id=wxID_MAINFRAMEBUTGENXML) - - self.butGenCpp = wx.Button(id=wxID_MAINFRAMEBUTGENCPP, - label=u'Generate C++ code', name=u'butGenCpp', - parent=self.panelButtons, pos=wx.Point(170, 0), size=wx.Size(142, - 23), style=0) - self.butGenCpp.Bind(wx.EVT_BUTTON, self.OnButGenCppButton, - id=wxID_MAINFRAMEBUTGENCPP) - - self.butGenPyPP = wx.Button(id=wxID_MAINFRAMEBUTGENPYPP, - label=u'Generate Py++ code', name=u'butGenPyPP', - parent=self.panelButtons, pos=wx.Point(332, 0), size=wx.Size(144, - 23), style=0) - self.butGenPyPP.Bind(wx.EVT_BUTTON, self.OnButGenPyPPButton, - id=wxID_MAINFRAMEBUTGENPYPP) - - self.textHeader = wx.TextCtrl(id=wxID_MAINFRAMETEXTHEADER, - name=u'textHeader', parent=self.panelNbSettings, pos=wx.Point(56, - 20), size=wx.Size(0, 21), style=0, value=u'') - - self.butHeaders = wx.Button(id=wxID_MAINFRAMEBUTHEADERS, label=u'...', - name=u'butHeaders', parent=self.panelNbSettings, pos=wx.Point(-38, - 19), size=wx.Size(28, 23), style=0) - self.butHeaders.Bind(wx.EVT_BUTTON, self.OnButHeadersButton, - id=wxID_MAINFRAMEBUTHEADERS) - - self.staticText1 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT1, - label=u'Header\nFile', name='staticText1', - parent=self.panelNbSettings, pos=wx.Point(5, 15), size=wx.Size(51, - 30), style=wx.ALIGN_CENTRE) - - self.staticText2 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT2, - label=u'GccXml', name='staticText2', parent=self.panelNbSettings, - pos=wx.Point(5, 60), size=wx.Size(51, 23), style=wx.ALIGN_CENTRE) - - self.textGccXml = wx.TextCtrl(id=wxID_MAINFRAMETEXTGCCXML, - name=u'textGccXml', parent=self.panelNbSettings, pos=wx.Point(56, - 61), size=wx.Size(0, 21), style=0, value=u'') - - self.butGccXml = wx.Button(id=wxID_MAINFRAMEBUTGCCXML, label=u'...', - name=u'butGccXml', parent=self.panelNbSettings, pos=wx.Point(-38, - 60), size=wx.Size(28, 23), style=0) - self.butGccXml.Bind(wx.EVT_BUTTON, self.OnButGccXmlButton, - id=wxID_MAINFRAMEBUTGCCXML) - - self.staticText3 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT3, - label=u'Include\nPath', name='staticText3', - parent=self.panelNbSettings, pos=wx.Point(5, 116), - size=wx.Size(51, 37), style=wx.ALIGN_CENTRE) - - self.listIncludes = wx.ListCtrl(id=wxID_MAINFRAMELISTINCLUDES, - name=u'listIncludes', parent=self.panelNbSettings, - pos=wx.Point(56, 102), size=wx.Size(0, 66), style=wx.LC_ICON) - self.listIncludes.Bind(wx.EVT_RIGHT_DOWN, self.OnListIncludesRightDown) - - self.staticText4 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT4, - label=u'Defines', name='staticText4', parent=self.panelNbSettings, - pos=wx.Point(5, 209), size=wx.Size(51, 25), - style=wx.ALIGN_CENTRE) - - self.listDefines = wx.ListCtrl(id=wxID_MAINFRAMELISTDEFINES, - name=u'listDefines', parent=self.panelNbSettings, pos=wx.Point(56, - 188), size=wx.Size(0, 68), style=wx.LC_ICON) - self.listDefines.Bind(wx.EVT_RIGHT_DOWN, self.OnListDefinesRightDown) - - self.staticText5 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT5, - label=u'Code', name='staticText5', parent=self.panelCode, - pos=wx.Point(0, 0), size=wx.Size(25, 13), style=0) - - self._init_coll_notebook1_Pages(self.notebook1) - self._init_coll_nbSettings_Pages(self.nbSettings) - - self._init_sizers() - - def __init__(self, parent): - self._init_ctrls(parent) - self.SetSize((self.GetSize()[0]+1,self.GetSize()[1]+1)) - - def OnMenueFileNewMenu(self, event): - event.Skip() - - def OnMenueFileOpenMenu(self, event): - event.Skip() - - def OnMenueFileSaveMenu(self, event): - event.Skip() - - def OnMenueFileRecentMenu(self, event): - event.Skip() - - def OnMenueFileExitMenu(self, event): - event.Skip() - - def OnTextGenCodeRightDown(self, event): - event.Skip() - - def OnListIncludesRightDown(self, event): - self.PopupMenu(self.menuIncludes) - - def OnListDefinesRightDown(self, event): - self.PopupMenu(self.menuDefines) - - def OnButGenXmlButton(self, event): - self._controller.GenXmlCode() - - def OnButGenCppButton(self, event): - self._controller.GenCppCode() - - def OnButGenPyPPButton(self, event): - self._controller.GenPyPPCode() - - def OnButHeadersButton(self, event): - """Callback for button event""" - self._controller.OpenHeaderDlg() - event.Skip() - - def OnButGccXmlButton(self, event): - """Callback for button event""" - self._controller.OpenGccXmlDlg() - event.Skip() - - def set_controller(self, controller): - """Set controller of MVC""" - self._controller = controller This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2007-04-20 14:58:11
|
Revision: 1010 http://svn.sourceforge.net/pygccxml/?rev=1010&view=rev Author: alex_eisen Date: 2007-04-20 07:58:08 -0700 (Fri, 20 Apr 2007) Log Message: ----------- Work on GUI functionality Modified Paths: -------------- pyplusplus_dev/ide/controllers/controller_main.py pyplusplus_dev/ide/ide.py pyplusplus_dev/ide/views/dialog_macro.py pyplusplus_dev/ide/views/frame_main.py Added Paths: ----------- pyplusplus_dev/ide/model/ProjectFileTemplatate.xml Modified: pyplusplus_dev/ide/controllers/controller_main.py =================================================================== --- pyplusplus_dev/ide/controllers/controller_main.py 2007-04-19 21:50:46 UTC (rev 1009) +++ pyplusplus_dev/ide/controllers/controller_main.py 2007-04-20 14:58:08 UTC (rev 1010) @@ -17,7 +17,21 @@ # Give controller object to the view self._view.set_controller(self) + + def DoRemoveCurInclude(self): + """Remove current selected Include item""" + cur_num = self._view.currentItemInclude + if None == cur_num: + return + self._view.listIncludes.DeleteItem(cur_num) + def DoRemoveCurMacro(self): + """Remove current selected Macro item""" + cur_num = self._view.currentItemMacro + if None == cur_num: + return + self._view.listMacros.DeleteItem(cur_num) + def GenXmlCode(self): """ Generate XML code""" self._appendOutText("Generation of XML code staretd") @@ -44,29 +58,71 @@ self._openFileDlgWithRelatedWxText( self._view.textGccXml, "Choose GccXml executable", "All Files(*)|*") + + def OpenDlgEditCurInclude(self): + """ """ + cur_num = self._view.currentItemInclude + if None == cur_num: + return + start_dir = self._view.listIncludes.GetItemText(cur_num) + dialog = wx.DirDialog(self._view, "Edit include directory", start_dir) + try: + if dialog.ShowModal() == wx.ID_OK: + self._view.listIncludes.DeleteItem(cur_num) + self._view.listIncludes.InsertStringItem( + cur_num, dialog.GetPath()) + finally: + dialog.Destroy() + + def OpenDlgEditCurMacro(self): + """ """ + cur_num = self._view.currentItemMacro + if None == cur_num: + return + macro = self._view.listMacros.GetItemText(cur_num) + dialog = dialog_macro.MacroDialog(self._view, macro) + try: + if dialog.ShowModal() == wx.OK: + self._view.listMacros.DeleteItem(cur_num) + + new_macro = dialog.textMacro.GetLineText(0) + self._view.listMacros.InsertStringItem(cur_num, new_macro) + finally: + dialog.Destroy() def OpenDlgAddInclude(self): """ """ - self._appendOutText("Add inc") dialog = wx.DirDialog(self._view, "Choose include directory", ".") try: if dialog.ShowModal() == wx.ID_OK: + cur_num = self._view.listIncludes.GetItemCount() - self._view.listIncludes.InsertStringItem( - cur_num, dialog.GetPath()) + dir_path = dialog.GetPath() + + # Check weather path is already in list + if not self._checkItemIsInList(dir_path, + self._view.listIncludes): + + self._view.listIncludes.InsertStringItem( + cur_num, dir_path) finally: dialog.Destroy() def OpenDlgAddMacro(self): """ """ dialog = dialog_macro.MacroDialog(self._view) + if dialog.ShowModal() == wx.OK: - cur_num = self._view.listDefines.GetItemCount() - self._view.listDefines.InsertStringItem( - cur_num, dialog.textMacro.GetLineText(0)) + cur_num = self._view.listMacros.GetItemCount() + new_macro = dialog.textMacro.GetLineText(0) + # Check weather macro is already in list + if not self._checkItemIsInList(new_macro, self._view.listMacros): + self._view.listMacros.InsertStringItem(cur_num, new_macro) + + def _openFileDlgWithRelatedWxText(self, related_wx_text, caption_txt="", @@ -82,6 +138,14 @@ finally: dialog.Destroy() + def _checkItemIsInList(self, item, wx_list): + idx = wx_list.FindItem(0, item) + if idx == -1: + return False + else: + return True + + def _appendOutText(self, text, type_of_text = 0): """ append text with different error level""" text_ctrl = self._view.textOutput Modified: pyplusplus_dev/ide/ide.py =================================================================== --- pyplusplus_dev/ide/ide.py 2007-04-19 21:50:46 UTC (rev 1009) +++ pyplusplus_dev/ide/ide.py 2007-04-20 14:58:08 UTC (rev 1010) @@ -14,8 +14,8 @@ from controllers.controller_main import MainController modules ={u'dialog_macro': [0, '', u'views/dialog_macro.py'], - u'main controller': [0, '', u'controllers/main_controller.py'], - u'main view': [1, 'Main frame of ide', u'views/main_frame.py']} + u'main controller': [0, '', u'controllers/controller_main.py'], + u'main view': [1, 'Main frame of ide', u'views/frame_main.py']} class BoaApp(wx.App): def OnInit(self): Added: pyplusplus_dev/ide/model/ProjectFileTemplatate.xml =================================================================== --- pyplusplus_dev/ide/model/ProjectFileTemplatate.xml (rev 0) +++ pyplusplus_dev/ide/model/ProjectFileTemplatate.xml 2007-04-20 14:58:08 UTC (rev 1010) @@ -0,0 +1,10 @@ +<!-- Template file for pyplusplus IDE --> +<pyPPProject> + <gccXmlSettings + headerPath="" + includePathList="[]" + gccXmlPath="" + macroList="[]" + /> + </gccXmlSettings> +</pyPPProject> \ No newline at end of file Modified: pyplusplus_dev/ide/views/dialog_macro.py =================================================================== --- pyplusplus_dev/ide/views/dialog_macro.py 2007-04-19 21:50:46 UTC (rev 1009) +++ pyplusplus_dev/ide/views/dialog_macro.py 2007-04-20 14:58:08 UTC (rev 1010) @@ -15,22 +15,22 @@ def _init_ctrls(self, prnt): # generated method, don't edit wx.Dialog.__init__(self, id=wxID_MACRODIALOG, name=u'MacroDialog', - parent=prnt, pos=wx.Point(127, 171), size=wx.Size(376, 231), - style=wx.DEFAULT_DIALOG_STYLE, title=u'Enter new Macro') - self.SetClientSize(wx.Size(368, 197)) - self.SetMaxSize(wx.Size(376, 231)) - self.SetMinSize(wx.Size(376, 231)) + parent=prnt, pos=wx.Point(2, 2), size=wx.Size(359, 166), + style=wx.DEFAULT_DIALOG_STYLE, title=u'Enter new macro') + self.SetClientSize(wx.Size(351, 132)) + self.SetMaxSize(wx.Size(-1, -1)) + self.SetMinSize(wx.Size(-1, -1)) self.panelUp = wx.Panel(id=wxID_MACRODIALOGPANELUP, name=u'panelUp', - parent=self, pos=wx.Point(0, -8), size=wx.Size(368, 152), + parent=self, pos=wx.Point(0, 0), size=wx.Size(368, 72), style=wx.TAB_TRAVERSAL) self.panelDown = wx.Panel(id=wxID_MACRODIALOGPANELDOWN, - name=u'panelDown', parent=self, pos=wx.Point(0, 144), - size=wx.Size(368, 74), style=wx.TAB_TRAVERSAL) + name=u'panelDown', parent=self, pos=wx.Point(0, 80), + size=wx.Size(368, 58), style=wx.TAB_TRAVERSAL) self.buttonOk = wx.Button(id=wxID_MACRODIALOGBUTTONOK, label=u'Ok', - name=u'buttonOk', parent=self.panelDown, pos=wx.Point(40, 17), + name=u'buttonOk', parent=self.panelDown, pos=wx.Point(32, 16), size=wx.Size(75, 23), style=0) self.buttonOk.Bind(wx.EVT_BUTTON, self.OnButtonOk, id=wxID_MACRODIALOGBUTTONOK) @@ -42,20 +42,23 @@ id=wxID_MACRODIALOGBUTTONCANCEL) self.staticLine1 = wx.StaticLine(id=wxID_MACRODIALOGSTATICLINE1, - name='staticLine1', parent=self.panelDown, pos=wx.Point(9, 0), - size=wx.Size(343, 2), style=0) + name='staticLine1', parent=self.panelDown, pos=wx.Point(0, 0), + size=wx.Size(359, 2), style=0) self.textMacro = wx.TextCtrl(id=wxID_MACRODIALOGTEXTMACRO, - name=u'textMacro', parent=self.panelUp, pos=wx.Point(32, 40), - size=wx.Size(304, 88), style=wx.TE_MULTILINE, value=u'') + name=u'textMacro', parent=self.panelUp, pos=wx.Point(24, 40), + size=wx.Size(304, 24), style=0, value=u'') self.staticText1 = wx.StaticText(id=wxID_MACRODIALOGSTATICTEXT1, - label=u'Definition of macro (ABS=12)', name='staticText1', - parent=self.panelUp, pos=wx.Point(32, 24), size=wx.Size(140, 13), - style=0) + label=u'Definition of macro (example: max(a,b)=a<b?b:a)', + name='staticText1', parent=self.panelUp, pos=wx.Point(24, 16), + size=wx.Size(241, 13), style=0) - def __init__(self, parent): + def __init__(self, parent, macro=""): self._init_ctrls(parent) + if macro != "": + self.textMacro.SetValue(macro) + def OnButtonOk(self, event): """End modal dialog with True""" Modified: pyplusplus_dev/ide/views/frame_main.py =================================================================== --- pyplusplus_dev/ide/views/frame_main.py 2007-04-19 21:50:46 UTC (rev 1009) +++ pyplusplus_dev/ide/views/frame_main.py 2007-04-20 14:58:08 UTC (rev 1010) @@ -23,41 +23,36 @@ [wxID_MAINFRAMEMENUINCLUDESADDINC, wxID_MAINFRAMEMENUINCLUDESITEMS1, ] = [wx.NewId() for _init_coll_menuIncludes_Items in range(2)] -[wxID_MAINFRAMEMENUDEFINESADDDEF, wxID_MAINFRAMEMENUDEFINESREMOVEDEF, -] = [wx.NewId() for _init_coll_menuDefines_Items in range(2)] +[wxID_MAINFRAMEMENUMACROSADDDEF, wxID_MAINFRAMEMENUMACROSREMOVEDEF, +] = [wx.NewId() for _init_coll_menuMacros_Items in range(2)] [wxID_MAINFRAME, wxID_MAINFRAMEBUTGCCXML, wxID_MAINFRAMEBUTGENCPP, wxID_MAINFRAMEBUTGENPYPP, wxID_MAINFRAMEBUTGENXML, wxID_MAINFRAMEBUTHEADERS, - wxID_MAINFRAMELISTDEFINES, wxID_MAINFRAMELISTINCLUDES, - wxID_MAINFRAMENBSETTINGS, wxID_MAINFRAMENOTEBOOK1, - wxID_MAINFRAMEPANELBUTTONS, wxID_MAINFRAMEPANELCODE, wxID_MAINFRAMEPANELMAIN, - wxID_MAINFRAMEPANELNBSETTINGS, wxID_MAINFRAMEPANELSETTINGS, - wxID_MAINFRAMEPANELSHLOW, wxID_MAINFRAMEPANELSHUP, - wxID_MAINFRAMESPLITTERHORIZONTAL, wxID_MAINFRAMESPLITTERVERTICAL, - wxID_MAINFRAMESTATICTEXT1, wxID_MAINFRAMESTATICTEXT2, - wxID_MAINFRAMESTATICTEXT3, wxID_MAINFRAMESTATICTEXT4, - wxID_MAINFRAMESTATICTEXT5, wxID_MAINFRAMESTATUSBAR, wxID_MAINFRAMETEXTCTRL2, + wxID_MAINFRAMELISTINCLUDES, wxID_MAINFRAMELISTMACROS, wxID_MAINFRAMENBLOW, + wxID_MAINFRAMENBUPLEFT, wxID_MAINFRAMENBUPRIGHT, wxID_MAINFRAMEPANELBUTTONS, + wxID_MAINFRAMEPANELMAIN, wxID_MAINFRAMEPANELNBCODE, + wxID_MAINFRAMEPANELNBSETTINGS, wxID_MAINFRAMEPANELSHLOW, + wxID_MAINFRAMEPANELSHUP, wxID_MAINFRAMEPANELUPLEFT, + wxID_MAINFRAMEPANELUPRIGHT, wxID_MAINFRAMESPLITTERHORIZONTAL, + wxID_MAINFRAMESPLITTERVERTICAL, wxID_MAINFRAMESTATICTEXT1, + wxID_MAINFRAMESTATICTEXT2, wxID_MAINFRAMESTATICTEXT3, + wxID_MAINFRAMESTATICTEXT4, wxID_MAINFRAMESTATUSBAR, wxID_MAINFRAMETEXTCODE, wxID_MAINFRAMETEXTGCCXML, wxID_MAINFRAMETEXTHEADER, wxID_MAINFRAMETEXTOUTPUT, -] = [wx.NewId() for _init_ctrls in range(29)] +] = [wx.NewId() for _init_ctrls in range(30)] class MainFrame(wx.Frame): """ Main frame class. Part of MVC """ - def _init_coll_bsGccXml_Items(self, parent): + def _init_coll_bsHeader_Items(self, parent): # generated method, don't edit - parent.AddWindow(self.staticText2, 0, border=5, - flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) - parent.AddWindow(self.textGccXml, 1, border=10, - flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM) - parent.AddWindow(self.butGccXml, 0, border=10, + parent.AddWindow(self.staticText1, 0, border=5, + flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL) + parent.AddWindow(self.textHeader, 1, border=10, + flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM | wx.TOP) + parent.AddWindow(self.butHeaders, 0, border=10, flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL) - def _init_coll_bsMURCompile_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.textCtrl2, 1, border=0, flag=wx.EXPAND) - def _init_coll_bsMain_Items(self, parent): # generated method, don't edit @@ -72,22 +67,39 @@ parent.AddWindow(self.listIncludes, 1, border=10, flag=wx.RIGHT | wx.BOTTOM | wx.TOP | wx.EXPAND | wx.ALIGN_CENTER_VERTICAL) - def _init_coll_bsHeader_Items(self, parent): + def _init_coll_bsULSettings_Items(self, parent): # generated method, don't edit - parent.AddWindow(self.staticText1, 0, border=5, - flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL) - parent.AddWindow(self.textHeader, 1, border=10, - flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM | wx.TOP) - parent.AddWindow(self.butHeaders, 0, border=10, + parent.AddSpacer((10, 10), border=0, flag=0) + parent.AddSizer(self.bsHeader, 0, border=5, flag=wx.RIGHT | wx.EXPAND) + parent.AddSizer(self.bsGccXml, 0, border=5, flag=wx.RIGHT | wx.EXPAND) + parent.AddSizer(self.bsIncPath, 3, border=5, flag=wx.RIGHT | wx.EXPAND) + parent.AddSizer(self.bsMacros, 2, border=5, flag=wx.RIGHT | wx.EXPAND) + + def _init_coll_bsGccXml_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText2, 0, border=5, + flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) + parent.AddWindow(self.textGccXml, 1, border=10, + flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM) + parent.AddWindow(self.butGccXml, 0, border=10, flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL) + def _init_coll_bsMacros_Items(self, parent): + # generated method, don't edit + + parent.AddWindow(self.staticText4, 0, border=5, + flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) + parent.AddWindow(self.listMacros, 1, border=10, + flag=wx.RIGHT | wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND) + def _init_coll_bsUpLeft_Items(self, parent): # generated method, don't edit - parent.AddWindow(self.nbSettings, 1, border=0, flag=wx.ALL | wx.EXPAND) + parent.AddWindow(self.nbUpLeft, 1, border=0, flag=wx.ALL | wx.EXPAND) - def _init_coll_bsMURButtons_Items(self, parent): + def _init_coll_bsURButtons_Items(self, parent): # generated method, don't edit parent.AddWindow(self.butGenXml, 0, border=10, @@ -106,33 +118,20 @@ def _init_coll_bsMainLow_Items(self, parent): # generated method, don't edit - parent.AddWindow(self.notebook1, 1, border=0, flag=wx.EXPAND) + parent.AddWindow(self.nbLow, 1, border=0, flag=wx.EXPAND) def _init_coll_bsUpRight_Items(self, parent): # generated method, don't edit - parent.AddWindow(self.staticText5, 0, border=0, flag=0) - parent.AddSizer(self.bsMURCompile, 1, border=4, flag=wx.TOP | wx.EXPAND) - parent.AddWindow(self.panelButtons, 0, border=10, - flag=wx.ALIGN_CENTER_HORIZONTAL | wx.TOP) + parent.AddWindow(self.nbUpRight, 1, border=0, flag=wx.EXPAND) - def _init_coll_bsMULSettings_Items(self, parent): + def _init_coll_bsURCode_Items(self, parent): # generated method, don't edit - parent.AddSpacer((10, 10), border=0, flag=0) - parent.AddSizer(self.bsHeader, 0, border=5, flag=wx.RIGHT | wx.EXPAND) - parent.AddSizer(self.bsGccXml, 0, border=5, flag=wx.RIGHT | wx.EXPAND) - parent.AddSizer(self.bsIncPath, 0, border=5, flag=wx.RIGHT | wx.EXPAND) - parent.AddSizer(self.bsDefines, 0, border=5, flag=wx.RIGHT | wx.EXPAND) + parent.AddWindow(self.textCode, 1, border=0, flag=wx.EXPAND) + parent.AddWindow(self.panelButtons, 0, border=5, + flag=wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL) - def _init_coll_bsDefines_Items(self, parent): - # generated method, don't edit - - parent.AddWindow(self.staticText4, 0, border=5, - flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT) - parent.AddWindow(self.listDefines, 1, border=10, - flag=wx.RIGHT | wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND) - def _init_coll_menuBar_Menus(self, parent): # generated method, don't edit @@ -179,32 +178,38 @@ self.Bind(wx.EVT_MENU, self.OnMenueFileExitMenu, id=wxID_MAINFRAMEMENUEFILEEXIT) - def _init_coll_menuDefines_Items(self, parent): + def _init_coll_menuMacros_Items(self, parent): # generated method, don't edit parent.Append(help=u'Add new define for gcc', - id=wxID_MAINFRAMEMENUDEFINESADDDEF, kind=wx.ITEM_NORMAL, + id=wxID_MAINFRAMEMENUMACROSADDDEF, kind=wx.ITEM_NORMAL, text=u'Add ...') parent.Append(help=u'Remove selected define', - id=wxID_MAINFRAMEMENUDEFINESREMOVEDEF, kind=wx.ITEM_NORMAL, + id=wxID_MAINFRAMEMENUMACROSREMOVEDEF, kind=wx.ITEM_NORMAL, text=u'Remove') - self.Bind(wx.EVT_MENU, self.OnMenueDefinesAddDefine, - id=wxID_MAINFRAMEMENUDEFINESADDDEF) - self.Bind(wx.EVT_MENU, self.OnMenueDefinesRemoveDefine, - id=wxID_MAINFRAMEMENUDEFINESREMOVEDEF) + self.Bind(wx.EVT_MENU, self.OnMenueMacroAddMacro, + id=wxID_MAINFRAMEMENUMACROSADDDEF) + self.Bind(wx.EVT_MENU, self.OnMenueMacrosRemoveMacro, + id=wxID_MAINFRAMEMENUMACROSREMOVEDEF) - def _init_coll_nbSettings_Pages(self, parent): + def _init_coll_nbLow_Pages(self, parent): # generated method, don't edit - parent.AddPage(imageId=-1, page=self.panelNbSettings, select=True, - text=u'Settings') + parent.AddPage(imageId=-1, page=self.textOutput, select=True, + text=u'Output') - def _init_coll_notebook1_Pages(self, parent): + def _init_coll_nbUpRight_Pages(self, parent): # generated method, don't edit - parent.AddPage(imageId=-1, page=self.textOutput, select=True, - text=u'Output') + parent.AddPage(imageId=-1, page=self.panelNbCode, select=True, + text=u'Code') + def _init_coll_nbUpLeft_Pages(self, parent): + # generated method, don't edit + + parent.AddPage(imageId=-1, page=self.panelNbSettings, select=True, + text=u'Settings') + def _init_coll_statusBar_Fields(self, parent): # generated method, don't edit parent.SetFieldsCount(3) @@ -225,42 +230,43 @@ self.bsUpLeft = wx.BoxSizer(orient=wx.VERTICAL) - self.bsUpRight = wx.BoxSizer(orient=wx.VERTICAL) + self.bsULSettings = wx.BoxSizer(orient=wx.VERTICAL) - self.bsMULSettings = wx.BoxSizer(orient=wx.VERTICAL) + self.bsURButtons = wx.BoxSizer(orient=wx.HORIZONTAL) - self.bsMURCompile = wx.BoxSizer(orient=wx.VERTICAL) - - self.bsMURButtons = wx.BoxSizer(orient=wx.HORIZONTAL) - self.bsHeader = wx.BoxSizer(orient=wx.HORIZONTAL) self.bsGccXml = wx.BoxSizer(orient=wx.HORIZONTAL) self.bsIncPath = wx.BoxSizer(orient=wx.HORIZONTAL) - self.bsDefines = wx.BoxSizer(orient=wx.HORIZONTAL) + self.bsMacros = wx.BoxSizer(orient=wx.HORIZONTAL) + self.bsUpRight = wx.BoxSizer(orient=wx.VERTICAL) + + self.bsURCode = wx.BoxSizer(orient=wx.VERTICAL) + self._init_coll_bsMain_Items(self.bsMain) self._init_coll_bsMainUpper_Items(self.bsMainUpper) self._init_coll_bsMainLow_Items(self.bsMainLow) self._init_coll_bsUpLeft_Items(self.bsUpLeft) - self._init_coll_bsUpRight_Items(self.bsUpRight) - self._init_coll_bsMULSettings_Items(self.bsMULSettings) - self._init_coll_bsMURCompile_Items(self.bsMURCompile) - self._init_coll_bsMURButtons_Items(self.bsMURButtons) + self._init_coll_bsULSettings_Items(self.bsULSettings) + self._init_coll_bsURButtons_Items(self.bsURButtons) self._init_coll_bsHeader_Items(self.bsHeader) self._init_coll_bsGccXml_Items(self.bsGccXml) self._init_coll_bsIncPath_Items(self.bsIncPath) - self._init_coll_bsDefines_Items(self.bsDefines) + self._init_coll_bsMacros_Items(self.bsMacros) + self._init_coll_bsUpRight_Items(self.bsUpRight) + self._init_coll_bsURCode_Items(self.bsURCode) self.panelSHUp.SetSizer(self.bsMainUpper) - self.panelSettings.SetSizer(self.bsUpLeft) - self.panelButtons.SetSizer(self.bsMURButtons) + self.panelNbCode.SetSizer(self.bsURCode) + self.panelUpLeft.SetSizer(self.bsUpLeft) + self.panelButtons.SetSizer(self.bsURButtons) self.panelSHLow.SetSizer(self.bsMainLow) self.panelMain.SetSizer(self.bsMain) - self.panelCode.SetSizer(self.bsUpRight) - self.panelNbSettings.SetSizer(self.bsMULSettings) + self.panelUpRight.SetSizer(self.bsUpRight) + self.panelNbSettings.SetSizer(self.bsULSettings) def _init_utils(self): # generated method, don't edit @@ -270,20 +276,20 @@ self.menuIncludes = wx.Menu(title='') - self.menuDefines = wx.Menu(title='') + self.menuMacros = wx.Menu(title='') self._init_coll_menueFile_Items(self.menueFile) self._init_coll_menuBar_Menus(self.menuBar) self._init_coll_menuIncludes_Items(self.menuIncludes) - self._init_coll_menuDefines_Items(self.menuDefines) + self._init_coll_menuMacros_Items(self.menuMacros) def _init_ctrls(self, prnt): # generated method, don't edit wx.Frame.__init__(self, id=wxID_MAINFRAME, name=u'MainFrame', - parent=prnt, pos=wx.Point(0, -2), size=wx.Size(851, 620), - style=wx.DEFAULT_FRAME_STYLE, title=u'Py++ Code generator') + parent=prnt, pos=wx.Point(-3, -3), size=wx.Size(800, 600), + style=wx.DEFAULT_FRAME_STYLE, title=u'Py++ IDE') self._init_utils() - self.SetClientSize(wx.Size(843, 586)) + self.SetClientSize(wx.Size(792, 566)) self.SetMenuBar(self.menuBar) self.statusBar = wx.StatusBar(id=wxID_MAINFRAMESTATUSBAR, @@ -292,158 +298,180 @@ self.SetStatusBar(self.statusBar) self.panelMain = wx.Panel(id=wxID_MAINFRAMEPANELMAIN, name=u'panelMain', - parent=self, pos=wx.Point(0, 0), size=wx.Size(843, 543), + parent=self, pos=wx.Point(0, 0), size=wx.Size(792, 523), style=wx.TAB_TRAVERSAL) self.splitterHorizontal = wx.SplitterWindow(id=wxID_MAINFRAMESPLITTERHORIZONTAL, name=u'splitterHorizontal', parent=self.panelMain, pos=wx.Point(5, - 5), size=wx.Size(833, 533), style=0) - self.splitterHorizontal.SetNeedUpdating(False) - self.splitterHorizontal.SetMinimumPaneSize(0) + 5), size=wx.Size(782, 513), style=0) + self.splitterHorizontal.SetMinimumPaneSize(40) self.panelSHUp = wx.Panel(id=wxID_MAINFRAMEPANELSHUP, name=u'panelSHUp', parent=self.splitterHorizontal, pos=wx.Point(0, 0), - size=wx.Size(833, 10), style=wx.TAB_TRAVERSAL) + size=wx.Size(782, 40), style=wx.TAB_TRAVERSAL) self.panelSHLow = wx.Panel(id=wxID_MAINFRAMEPANELSHLOW, name=u'panelSHLow', parent=self.splitterHorizontal, - pos=wx.Point(0, 14), size=wx.Size(833, 519), + pos=wx.Point(0, 44), size=wx.Size(782, 469), style=wx.TAB_TRAVERSAL) self.splitterHorizontal.SplitHorizontally(self.panelSHUp, self.panelSHLow, 300) - self.notebook1 = wx.Notebook(id=wxID_MAINFRAMENOTEBOOK1, - name='notebook1', parent=self.panelSHLow, pos=wx.Point(0, 0), - size=wx.Size(833, 519), style=0) - self.notebook1.SetLabel(u'Label') + self.nbLow = wx.Notebook(id=wxID_MAINFRAMENBLOW, name=u'nbLow', + parent=self.panelSHLow, pos=wx.Point(0, 0), size=wx.Size(782, + 469), style=0) + self.nbLow.SetLabel(u'Label') self.textOutput = wx.TextCtrl(id=wxID_MAINFRAMETEXTOUTPUT, - name=u'textOutput', parent=self.notebook1, pos=wx.Point(0, 0), - size=wx.Size(825, 493), + name=u'textOutput', parent=self.nbLow, pos=wx.Point(0, 0), + size=wx.Size(774, 443), style=wx.TE_RICH | wx.TE_READONLY | wx.TE_MULTILINE, value=u'') self.splitterVertical = wx.SplitterWindow(id=wxID_MAINFRAMESPLITTERVERTICAL, name=u'splitterVertical', parent=self.panelSHUp, pos=wx.Point(0, - 0), size=wx.Size(833, 5), style=wx.SP_3D) - self.splitterVertical.SetNeedUpdating(True) - self.splitterVertical.SetMinimumPaneSize(0) + 0), size=wx.Size(782, 35), style=wx.SP_3D) + self.splitterVertical.SetMinimumPaneSize(40) - self.panelSettings = wx.Panel(id=wxID_MAINFRAMEPANELSETTINGS, - name=u'panelSettings', parent=self.splitterVertical, - pos=wx.Point(0, 0), size=wx.Size(10, 5), style=wx.TAB_TRAVERSAL) + self.panelUpLeft = wx.Panel(id=wxID_MAINFRAMEPANELUPLEFT, + name=u'panelUpLeft', parent=self.splitterVertical, pos=wx.Point(0, + 0), size=wx.Size(40, 35), style=wx.TAB_TRAVERSAL) - self.panelCode = wx.Panel(id=wxID_MAINFRAMEPANELCODE, name=u'panelCode', - parent=self.splitterVertical, pos=wx.Point(14, 0), - size=wx.Size(819, 5), style=wx.TAB_TRAVERSAL) - self.splitterVertical.SplitVertically(self.panelSettings, - self.panelCode, 300) + self.panelUpRight = wx.Panel(id=wxID_MAINFRAMEPANELUPRIGHT, + name=u'panelUpRight', parent=self.splitterVertical, + pos=wx.Point(44, 0), size=wx.Size(738, 35), + style=wx.TAB_TRAVERSAL) + self.splitterVertical.SplitVertically(self.panelUpLeft, + self.panelUpRight, 50) - self.nbSettings = wx.Notebook(id=wxID_MAINFRAMENBSETTINGS, - name=u'nbSettings', parent=self.panelSettings, pos=wx.Point(0, 0), - size=wx.Size(10, 5), style=0) - self.nbSettings.SetLabel(u'Label') - self.nbSettings.SetHelpText(u'') + self.nbUpLeft = wx.Notebook(id=wxID_MAINFRAMENBUPLEFT, name=u'nbUpLeft', + parent=self.panelUpLeft, pos=wx.Point(0, 0), size=wx.Size(40, 35), + style=0) + self.nbUpLeft.SetLabel(u'Label') + self.nbUpLeft.SetHelpText(u'') + self.nbUpRight = wx.Notebook(id=wxID_MAINFRAMENBUPRIGHT, + name=u'nbUpRight', parent=self.panelUpRight, pos=wx.Point(0, 0), + size=wx.Size(738, 35), style=0) + self.panelNbSettings = wx.Panel(id=wxID_MAINFRAMEPANELNBSETTINGS, - name=u'panelNbSettings', parent=self.nbSettings, pos=wx.Point(0, - 0), size=wx.Size(2, 0), style=wx.TAB_TRAVERSAL) + name=u'panelNbSettings', parent=self.nbUpLeft, pos=wx.Point(0, 0), + size=wx.Size(32, 9), style=wx.TAB_TRAVERSAL) self.panelNbSettings.Show(True) self.panelNbSettings.SetMinSize(wx.Size(100, 100)) - self.textCtrl2 = wx.TextCtrl(id=wxID_MAINFRAMETEXTCTRL2, - name='textCtrl2', parent=self.panelCode, pos=wx.Point(0, 17), - size=wx.Size(819, 0), style=wx.TE_MULTILINE, value=u'') + self.panelNbCode = wx.Panel(id=wxID_MAINFRAMEPANELNBCODE, + name=u'panelNbCode', parent=self.nbUpRight, pos=wx.Point(0, 0), + size=wx.Size(730, 9), style=wx.TAB_TRAVERSAL) + self.textCode = wx.TextCtrl(id=wxID_MAINFRAMETEXTCODE, name=u'textCode', + parent=self.panelNbCode, pos=wx.Point(0, 0), size=wx.Size(730, 0), + style=wx.TE_READONLY | wx.TE_MULTILINE, value=u'') + self.textCode.SetToolTipString(u'textCtrl2') + self.panelButtons = wx.Panel(id=wxID_MAINFRAMEPANELBUTTONS, - name=u'panelButtons', parent=self.panelCode, pos=wx.Point(166, - -18), size=wx.Size(486, 23), style=wx.TAB_TRAVERSAL) + name=u'panelButtons', parent=self.panelNbCode, pos=wx.Point(156, + -20), size=wx.Size(418, 24), style=wx.TAB_TRAVERSAL) self.butGenXml = wx.Button(id=wxID_MAINFRAMEBUTGENXML, label=u'Generate XML code', name=u'butGenXml', - parent=self.panelButtons, pos=wx.Point(10, 0), size=wx.Size(140, + parent=self.panelButtons, pos=wx.Point(10, 0), size=wx.Size(120, 23), style=0) self.butGenXml.Bind(wx.EVT_BUTTON, self.OnButGenXmlButton, id=wxID_MAINFRAMEBUTGENXML) self.butGenCpp = wx.Button(id=wxID_MAINFRAMEBUTGENCPP, label=u'Generate C++ code', name=u'butGenCpp', - parent=self.panelButtons, pos=wx.Point(170, 0), size=wx.Size(142, - 23), style=0) + parent=self.panelButtons, pos=wx.Point(150, 0), size=wx.Size(120, + 24), style=0) self.butGenCpp.Bind(wx.EVT_BUTTON, self.OnButGenCppButton, id=wxID_MAINFRAMEBUTGENCPP) self.butGenPyPP = wx.Button(id=wxID_MAINFRAMEBUTGENPYPP, label=u'Generate Py++ code', name=u'butGenPyPP', - parent=self.panelButtons, pos=wx.Point(332, 0), size=wx.Size(144, + parent=self.panelButtons, pos=wx.Point(290, 0), size=wx.Size(118, 23), style=0) self.butGenPyPP.Bind(wx.EVT_BUTTON, self.OnButGenPyPPButton, id=wxID_MAINFRAMEBUTGENPYPP) self.textHeader = wx.TextCtrl(id=wxID_MAINFRAMETEXTHEADER, name=u'textHeader', parent=self.panelNbSettings, pos=wx.Point(56, - 20), size=wx.Size(0, 21), style=0, value=u'') + 20), size=wx.Size(0, 21), style=wx.TE_READONLY, value=u'') self.butHeaders = wx.Button(id=wxID_MAINFRAMEBUTHEADERS, label=u'...', - name=u'butHeaders', parent=self.panelNbSettings, pos=wx.Point(-38, + name=u'butHeaders', parent=self.panelNbSettings, pos=wx.Point(-11, 19), size=wx.Size(28, 23), style=0) self.butHeaders.Bind(wx.EVT_BUTTON, self.OnButHeadersButton, id=wxID_MAINFRAMEBUTHEADERS) + self.textGccXml = wx.TextCtrl(id=wxID_MAINFRAMETEXTGCCXML, + name=u'textGccXml', parent=self.panelNbSettings, pos=wx.Point(56, + 61), size=wx.Size(0, 21), style=wx.TE_READONLY, value=u'') + self.staticText1 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT1, label=u'Header\nFile', name='staticText1', parent=self.panelNbSettings, pos=wx.Point(5, 15), size=wx.Size(51, 30), style=wx.ALIGN_CENTRE) + self.staticText4 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT4, + label=u'Macros', name='staticText4', parent=self.panelNbSettings, + pos=wx.Point(5, 31), size=wx.Size(51, 25), style=wx.ALIGN_CENTRE) + self.staticText2 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT2, label=u'GccXml', name='staticText2', parent=self.panelNbSettings, pos=wx.Point(5, 60), size=wx.Size(51, 23), style=wx.ALIGN_CENTRE) - self.textGccXml = wx.TextCtrl(id=wxID_MAINFRAMETEXTGCCXML, - name=u'textGccXml', parent=self.panelNbSettings, pos=wx.Point(56, - 61), size=wx.Size(0, 21), style=0, value=u'') - self.butGccXml = wx.Button(id=wxID_MAINFRAMEBUTGCCXML, label=u'...', - name=u'butGccXml', parent=self.panelNbSettings, pos=wx.Point(-38, + name=u'butGccXml', parent=self.panelNbSettings, pos=wx.Point(-11, 60), size=wx.Size(28, 23), style=0) self.butGccXml.Bind(wx.EVT_BUTTON, self.OnButGccXmlButton, id=wxID_MAINFRAMEBUTGCCXML) self.staticText3 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT3, label=u'Include\nPath', name='staticText3', - parent=self.panelNbSettings, pos=wx.Point(5, 116), - size=wx.Size(51, 37), style=wx.ALIGN_CENTRE) + parent=self.panelNbSettings, pos=wx.Point(5, 74), size=wx.Size(51, + 37), style=wx.ALIGN_CENTRE) self.listIncludes = wx.ListCtrl(id=wxID_MAINFRAMELISTINCLUDES, name=u'listIncludes', parent=self.panelNbSettings, - pos=wx.Point(56, 102), size=wx.Size(0, 66), + pos=wx.Point(56, 102), size=wx.Size(0, 0), style=wx.LC_HRULES | wx.LC_NO_HEADER | wx.LC_REPORT) self.listIncludes.Bind(wx.EVT_RIGHT_DOWN, self.OnListIncludesRightDown) self.listIncludes.Bind(wx.EVT_SIZE, self.OnListIncludesSize) + self.listIncludes.Bind(wx.EVT_LEFT_DCLICK, + self.OnListIncludesLeftDclick) + self.listIncludes.Bind(wx.EVT_LIST_ITEM_SELECTED, + self.OnListIncludesListItemSelected, + id=wxID_MAINFRAMELISTINCLUDES) + self.listIncludes.Bind(wx.EVT_LIST_ITEM_DESELECTED, + self.OnListIncludesListItemDeselected, + id=wxID_MAINFRAMELISTINCLUDES) - self.staticText4 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT4, - label=u'Defines', name='staticText4', parent=self.panelNbSettings, - pos=wx.Point(5, 209), size=wx.Size(51, 25), - style=wx.ALIGN_CENTRE) - - self.listDefines = wx.ListCtrl(id=wxID_MAINFRAMELISTDEFINES, - name=u'listDefines', parent=self.panelNbSettings, pos=wx.Point(56, - 188), size=wx.Size(0, 68), + self.listMacros = wx.ListCtrl(id=wxID_MAINFRAMELISTMACROS, + name=u'listMacros', parent=self.panelNbSettings, pos=wx.Point(56, + 53), size=wx.Size(0, 0), style=wx.LC_HRULES | wx.LC_NO_HEADER | wx.LC_REPORT) - self.listDefines.Bind(wx.EVT_RIGHT_DOWN, self.OnListDefinesRightDown) - self.listDefines.Bind(wx.EVT_SIZE, self.OnListDefinesSize) + self.listMacros.Bind(wx.EVT_RIGHT_DOWN, self.OnListMacrosRightDown) + self.listMacros.Bind(wx.EVT_SIZE, self.OnListMacrosSize) + self.listMacros.Bind(wx.EVT_LEFT_DCLICK, self.OnListMacrosLeftDclick) + self.listMacros.Bind(wx.EVT_LIST_ITEM_SELECTED, + self.OnListMacrosListItemSelected, id=wxID_MAINFRAMELISTMACROS) + self.listMacros.Bind(wx.EVT_LIST_ITEM_DESELECTED, + self.OnListMacrosListItemDeselected, id=wxID_MAINFRAMELISTMACROS) - self.staticText5 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT5, - label=u'Code', name='staticText5', parent=self.panelCode, - pos=wx.Point(0, 0), size=wx.Size(25, 13), style=0) + self._init_coll_nbLow_Pages(self.nbLow) + self._init_coll_nbUpLeft_Pages(self.nbUpLeft) + self._init_coll_nbUpRight_Pages(self.nbUpRight) - self._init_coll_notebook1_Pages(self.notebook1) - self._init_coll_nbSettings_Pages(self.nbSettings) - self._init_sizers() def __init__(self, parent): + + self.currentItemInclude = None + self.currentItemMacro = None + self._init_ctrls(parent) self._setup_ide_ctrls() + self.splitterVertical.SetSashPosition(300, True) self.SetSize((self.GetSize()[0]+1,self.GetSize()[1]+1)) def OnMenueFileNewMenu(self, event): @@ -467,8 +495,8 @@ def OnListIncludesRightDown(self, event): self.PopupMenu(self.menuIncludes) - def OnListDefinesRightDown(self, event): - self.PopupMenu(self.menuDefines) + def OnListMacrosRightDown(self, event): + self.PopupMenu(self.menuMacros) def OnButGenXmlButton(self, event): self._controller.GenXmlCode() @@ -496,7 +524,7 @@ def _setup_ide_ctrls(self): """Do ide related settings in ctrls""" list_inc = self.listIncludes - list_def = self.listDefines + list_def = self.listMacros # Init list controls for list_ctrl in (list_inc, list_def): @@ -508,9 +536,9 @@ list_ctrl.SetColumnWidth(0, list_ctrl.GetSize().GetWidth() - 30 ) event.Skip() - def OnListDefinesSize(self, event): - """Handle resize of listDefines""" - list_ctrl = self.listDefines + def OnListMacrosSize(self, event): + """Handle resize of listMacros""" + list_ctrl = self.listMacros list_ctrl.SetColumnWidth(0, list_ctrl.GetSize().GetWidth() - 30 ) event.Skip() @@ -519,15 +547,41 @@ event.Skip() def OnMenueIncludesRemove(self, event): + self._controller.DoRemoveCurInclude() event.Skip() - def OnMenueDefinesAddDefine(self, event): + def OnMenueMacroAddMacro(self, event): self._controller.OpenDlgAddMacro() event.Skip() - def OnMenueDefinesRemoveDefine(self, event): + def OnMenueMacrosRemoveMacro(self, event): + self._controller.DoRemoveCurMacro() event.Skip() + def OnListIncludesLeftDclick(self, event): + self._controller.OpenDlgEditCurInclude() + event.Skip() + + def OnListMacrosLeftDclick(self, event): + self._controller.OpenDlgEditCurMacro() + event.Skip() + + def OnListIncludesListItemSelected(self, event): + self.currentItemInclude = event.m_itemIndex + event.Skip() + + def OnListMacrosListItemSelected(self, event): + self.currentItemMacro = event.m_itemIndex + event.Skip() + + def OnListIncludesListItemDeselected(self, event): + self.currentItemInclude = None + event.Skip() + + def OnListMacrosListItemDeselected(self, event): + self.currentItemMacro = None + event.Skip() + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2007-05-04 13:31:21
|
Revision: 1031 http://svn.sourceforge.net/pygccxml/?rev=1031&view=rev Author: alex_eisen Date: 2007-05-04 06:31:21 -0700 (Fri, 04 May 2007) Log Message: ----------- Fixed some complains of Roman Modified Paths: -------------- pyplusplus_dev/ide/controllers/controller_main.py pyplusplus_dev/ide/model/code_generator.py pyplusplus_dev/ide/views/frame_main.py Modified: pyplusplus_dev/ide/controllers/controller_main.py =================================================================== --- pyplusplus_dev/ide/controllers/controller_main.py 2007-05-02 19:22:25 UTC (rev 1030) +++ pyplusplus_dev/ide/controllers/controller_main.py 2007-05-04 13:31:21 UTC (rev 1031) @@ -319,8 +319,8 @@ Open dialog to get header file ''' self._open_file_dlg_text_ctrl( self._view.textHeader, - "Choose a Header file", - "Header (*.h)|*.h|All Files(*)|*") + "Choose a Header file","C/C++ files (*.h,*.hpp,*.hxx,*.c,"\ + "*.cpp,*.cxx)|*.h;*.hpp;*.hxx;*.c;*.cpp;*.cxx|All Files(*)|*") def OpenDlgGccXml(self): ''' @@ -415,7 +415,7 @@ dialog = wx.FileDialog(self._view, "Load existing Py++ project", self.param.last_prj_path.get(), - "", "Project files (*.xml)|*.xml|All Files(*)|*", wx.OPEN) + "", "Project files (*.pypp)|*.pypp|All Files(*)|*", wx.OPEN) try: if dialog.ShowModal() == wx.ID_OK: @@ -544,7 +544,7 @@ dialog = wx.FileDialog(self._view, "Save Py++ project to new file", self.param.last_prj_path.get(), "", - "Project files (*.xml)|*.xml|All Files(*)|*", wx.FD_SAVE) + "Project files (*.pypp)|*.pypp|All Files(*)|*", wx.FD_SAVE) if dialog.ShowModal() == wx.ID_OK: @@ -594,6 +594,12 @@ file_filter="All Files(*)|*", dir_path="."): """Open file open dialog and insert file in related wxText ctrl""" + + cur_file = related_wx_text.GetValue() + + if cur_file != "": + dir_path = os.path.dirname(related_wx_text.GetValue()) + dialog = wx.FileDialog(self._view, caption_txt, dir_path, "", file_filter, wx.OPEN) try: @@ -643,17 +649,23 @@ prj_list.reverse() for prj in prj_list: self._add_to_prj_history(prj) - + + # Change the title string: + # tilte := "<ConstPart> (<prj_name> in <prj_path>) <changedTag>" def _set_prj_filename_in_title(self, filename): - + if filename == self._prjTemplateFile: - filename = "New project" + prj_description = "New project" + else: + prj_name = os.path.basename(filename) + prj_path = os.path.dirname(filename) + prj_description = prj_name + " in " + prj_path title_str = self._view.GetTitle() start_idx = title_str.find("(") end_idx = title_str.find(")") fnamstr = title_str[start_idx:end_idx+1] - title_str = title_str.replace(fnamstr, "(" + filename + ")") + title_str = title_str.replace(fnamstr, "(" + prj_description + ")") self._view.SetTitle(title_str) def _reset_settings_changed(self): Modified: pyplusplus_dev/ide/model/code_generator.py =================================================================== --- pyplusplus_dev/ide/model/code_generator.py 2007-05-02 19:22:25 UTC (rev 1030) +++ pyplusplus_dev/ide/model/code_generator.py 2007-05-04 13:31:21 UTC (rev 1031) @@ -64,7 +64,7 @@ , working_directory=os.path.split( header_file )[0] , include_paths=include_paths , define_symbols=params[2] ) - + mb.build_code_creator( "pyplusplus" ) mb.code_creator.user_defined_directories.extend( include_paths ) code = mb.code_creator.create() Modified: pyplusplus_dev/ide/views/frame_main.py =================================================================== --- pyplusplus_dev/ide/views/frame_main.py 2007-05-02 19:22:25 UTC (rev 1030) +++ pyplusplus_dev/ide/views/frame_main.py 2007-05-04 13:31:21 UTC (rev 1031) @@ -318,69 +318,71 @@ self.panelSHUp = wx.Panel(id=wxID_MAINFRAMEPANELSHUP, name=u'panelSHUp', parent=self.splitterHorizontal, pos=wx.Point(0, 0), - size=wx.Size(782, 40), style=wx.TAB_TRAVERSAL) + size=wx.Size(782, 290), style=wx.TAB_TRAVERSAL) self.panelSHLow = wx.Panel(id=wxID_MAINFRAMEPANELSHLOW, name=u'panelSHLow', parent=self.splitterHorizontal, - pos=wx.Point(0, 44), size=wx.Size(782, 469), + pos=wx.Point(0, 294), size=wx.Size(782, 219), style=wx.TAB_TRAVERSAL) self.splitterHorizontal.SplitHorizontally(self.panelSHUp, self.panelSHLow, 300) self.nbLow = wx.Notebook(id=wxID_MAINFRAMENBLOW, name=u'nbLow', parent=self.panelSHLow, pos=wx.Point(0, 0), size=wx.Size(782, - 469), style=0) + 219), style=0) self.nbLow.SetLabel(u'Label') self.textOutput = wx.TextCtrl(id=wxID_MAINFRAMETEXTOUTPUT, name=u'textOutput', parent=self.nbLow, pos=wx.Point(0, 0), - size=wx.Size(774, 443), + size=wx.Size(774, 193), style=wx.TE_RICH | wx.TE_READONLY | wx.TE_MULTILINE, value=u'') self.splitterVertical = wx.SplitterWindow(id=wxID_MAINFRAMESPLITTERVERTICAL, name=u'splitterVertical', parent=self.panelSHUp, pos=wx.Point(0, - 0), size=wx.Size(782, 35), style=wx.SP_3D) + 0), size=wx.Size(782, 285), style=wx.SP_3D) self.splitterVertical.SetMinimumPaneSize(40) self.panelUpLeft = wx.Panel(id=wxID_MAINFRAMEPANELUPLEFT, name=u'panelUpLeft', parent=self.splitterVertical, pos=wx.Point(0, - 0), size=wx.Size(40, 35), style=wx.TAB_TRAVERSAL) + 0), size=wx.Size(298, 285), style=wx.TAB_TRAVERSAL) self.panelUpRight = wx.Panel(id=wxID_MAINFRAMEPANELUPRIGHT, name=u'panelUpRight', parent=self.splitterVertical, - pos=wx.Point(44, 0), size=wx.Size(738, 35), + pos=wx.Point(302, 0), size=wx.Size(480, 285), style=wx.TAB_TRAVERSAL) self.splitterVertical.SplitVertically(self.panelUpLeft, self.panelUpRight, 50) self.nbUpLeft = wx.Notebook(id=wxID_MAINFRAMENBUPLEFT, name=u'nbUpLeft', - parent=self.panelUpLeft, pos=wx.Point(0, 0), size=wx.Size(40, 35), - style=0) + parent=self.panelUpLeft, pos=wx.Point(0, 0), size=wx.Size(298, + 285), style=0) self.nbUpLeft.SetLabel(u'Label') self.nbUpLeft.SetHelpText(u'') self.nbUpRight = wx.Notebook(id=wxID_MAINFRAMENBUPRIGHT, name=u'nbUpRight', parent=self.panelUpRight, pos=wx.Point(0, 0), - size=wx.Size(738, 35), style=0) + size=wx.Size(480, 285), style=0) self.panelNbSettings = wx.Panel(id=wxID_MAINFRAMEPANELNBSETTINGS, name=u'panelNbSettings', parent=self.nbUpLeft, pos=wx.Point(0, 0), - size=wx.Size(32, 9), style=wx.TAB_TRAVERSAL) + size=wx.Size(290, 259), style=wx.TAB_TRAVERSAL) self.panelNbSettings.Show(True) self.panelNbSettings.SetMinSize(wx.Size(100, 100)) self.panelNbCode = wx.Panel(id=wxID_MAINFRAMEPANELNBCODE, name=u'panelNbCode', parent=self.nbUpRight, pos=wx.Point(0, 0), - size=wx.Size(730, 9), style=wx.TAB_TRAVERSAL) + size=wx.Size(472, 259), style=wx.TAB_TRAVERSAL) self.textCode = wx.TextCtrl(id=wxID_MAINFRAMETEXTCODE, name=u'textCode', - parent=self.panelNbCode, pos=wx.Point(0, 0), size=wx.Size(730, 0), - style=wx.TE_READONLY | wx.TE_MULTILINE, value=u'') + parent=self.panelNbCode, pos=wx.Point(0, 0), size=wx.Size(472, + 225), + style=wx.VSCROLL | wx.HSCROLL | wx.TE_READONLY | wx.TE_MULTILINE, + value=u'') self.textCode.SetHelpText(u'') self.panelButtons = wx.Panel(id=wxID_MAINFRAMEPANELBUTTONS, - name=u'panelButtons', parent=self.panelNbCode, pos=wx.Point(156, - -20), size=wx.Size(418, 24), style=wx.TAB_TRAVERSAL) + name=u'panelButtons', parent=self.panelNbCode, pos=wx.Point(27, + 230), size=wx.Size(418, 24), style=wx.TAB_TRAVERSAL) self.butGenXml = wx.Button(id=wxID_MAINFRAMEBUTGENXML, label=u'Generate XML code', name=u'butGenXml', @@ -407,17 +409,17 @@ self.textHeader = wx.TextCtrl(id=wxID_MAINFRAMETEXTHEADER, name=u'textHeader', parent=self.panelNbSettings, pos=wx.Point(56, - 20), size=wx.Size(0, 21), style=wx.TE_READONLY, value=u'') + 20), size=wx.Size(181, 21), style=wx.TE_READONLY, value=u'') self.butHeaders = wx.Button(id=wxID_MAINFRAMEBUTHEADERS, label=u'...', - name=u'butHeaders', parent=self.panelNbSettings, pos=wx.Point(-11, + name=u'butHeaders', parent=self.panelNbSettings, pos=wx.Point(247, 19), size=wx.Size(28, 23), style=0) self.butHeaders.Bind(wx.EVT_BUTTON, self.OnButHeadersButton, id=wxID_MAINFRAMEBUTHEADERS) self.textGccXml = wx.TextCtrl(id=wxID_MAINFRAMETEXTGCCXML, name=u'textGccXml', parent=self.panelNbSettings, pos=wx.Point(56, - 61), size=wx.Size(0, 21), style=wx.TE_READONLY, value=u'') + 61), size=wx.Size(181, 21), style=wx.TE_READONLY, value=u'') self.staticText1 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT1, label=u'Header\nFile', name='staticText1', @@ -426,26 +428,27 @@ self.staticText4 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT4, label=u'Macros', name='staticText4', parent=self.panelNbSettings, - pos=wx.Point(5, 31), size=wx.Size(51, 25), style=wx.ALIGN_CENTRE) + pos=wx.Point(5, 212), size=wx.Size(51, 25), + style=wx.ALIGN_CENTRE) self.staticText2 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT2, label=u'GccXml', name='staticText2', parent=self.panelNbSettings, pos=wx.Point(5, 60), size=wx.Size(51, 23), style=wx.ALIGN_CENTRE) self.butGccXml = wx.Button(id=wxID_MAINFRAMEBUTGCCXML, label=u'...', - name=u'butGccXml', parent=self.panelNbSettings, pos=wx.Point(-11, + name=u'butGccXml', parent=self.panelNbSettings, pos=wx.Point(247, 60), size=wx.Size(28, 23), style=0) self.butGccXml.Bind(wx.EVT_BUTTON, self.OnButGccXmlButton, id=wxID_MAINFRAMEBUTGCCXML) self.staticText3 = wx.StaticText(id=wxID_MAINFRAMESTATICTEXT3, label=u'Include\nPath', name='staticText3', - parent=self.panelNbSettings, pos=wx.Point(5, 74), size=wx.Size(51, - 37), style=wx.ALIGN_CENTRE) + parent=self.panelNbSettings, pos=wx.Point(5, 123), + size=wx.Size(51, 37), style=wx.ALIGN_CENTRE) self.listIncludes = wx.ListCtrl(id=wxID_MAINFRAMELISTINCLUDES, name=u'listIncludes', parent=self.panelNbSettings, - pos=wx.Point(56, 102), size=wx.Size(0, 0), + pos=wx.Point(56, 102), size=wx.Size(219, 80), style=wx.LC_HRULES | wx.LC_NO_HEADER | wx.LC_REPORT) self.listIncludes.Bind(wx.EVT_RIGHT_DOWN, self.OnListIncludesRightDown) self.listIncludes.Bind(wx.EVT_SIZE, self.OnListIncludesSize) @@ -460,7 +463,7 @@ self.listMacros = wx.ListCtrl(id=wxID_MAINFRAMELISTMACROS, name=u'listMacros', parent=self.panelNbSettings, pos=wx.Point(56, - 53), size=wx.Size(0, 0), + 202), size=wx.Size(219, 46), style=wx.LC_HRULES | wx.LC_NO_HEADER | wx.LC_REPORT) self.listMacros.Bind(wx.EVT_RIGHT_DOWN, self.OnListMacrosRightDown) self.listMacros.Bind(wx.EVT_SIZE, self.OnListMacrosSize) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2007-05-02 14:59:12
|
Revision: 1029 http://svn.sourceforge.net/pygccxml/?rev=1029&view=rev Author: alex_eisen Date: 2007-05-02 07:58:58 -0700 (Wed, 02 May 2007) Log Message: ----------- Working ide without code generation Modified Paths: -------------- pyplusplus_dev/ide/controllers/__init__.py pyplusplus_dev/ide/controllers/controller_main.py pyplusplus_dev/ide/ide.py pyplusplus_dev/ide/model/__init__.py pyplusplus_dev/ide/views/frame_main.py Added Paths: ----------- pyplusplus_dev/ide/IdeTemplate.xml pyplusplus_dev/ide/ProjectTemplate.xml pyplusplus_dev/ide/doc/ pyplusplus_dev/ide/doc/EnterpriseArchitectModel.eap pyplusplus_dev/ide/doc/IdeInBoa.png pyplusplus_dev/ide/doc/PackageOverview.png pyplusplus_dev/ide/doc/ReadmeForDevelopment.odt pyplusplus_dev/ide/model/code_generator.py pyplusplus_dev/ide/model/etree_extension.py pyplusplus_dev/ide/model/settings.py pyplusplus_dev/ide/test/ pyplusplus_dev/ide/test/test_attrib_finder.py Removed Paths: ------------- pyplusplus_dev/ide/model/ProjectFileTemplatate.xml Added: pyplusplus_dev/ide/IdeTemplate.xml =================================================================== --- pyplusplus_dev/ide/IdeTemplate.xml (rev 0) +++ pyplusplus_dev/ide/IdeTemplate.xml 2007-05-02 14:58:58 UTC (rev 1029) @@ -0,0 +1,9 @@ +<!-- Template file for pyplusplus IDE --> +<pyPPIde> + <project + maxNumInMenue="6" + recentProjects="[]" + lastPrjPath="." + lastIncPath="." + /> +</pyPPIde> \ No newline at end of file Added: pyplusplus_dev/ide/ProjectTemplate.xml =================================================================== --- pyplusplus_dev/ide/ProjectTemplate.xml (rev 0) +++ pyplusplus_dev/ide/ProjectTemplate.xml 2007-05-02 14:58:58 UTC (rev 1029) @@ -0,0 +1,11 @@ +<pyPPProject> + <gccXmlSettings + gccXmlPath="" + headerPath="" + includePathList="[]" + macroList="[]" /> + <guiGeometry + horizontalSplitter="350" + size="(0, 0, 800, 600)" + verticalSplitter="300" /> +</pyPPProject> \ No newline at end of file Modified: pyplusplus_dev/ide/controllers/__init__.py =================================================================== --- pyplusplus_dev/ide/controllers/__init__.py 2007-05-01 18:06:08 UTC (rev 1028) +++ pyplusplus_dev/ide/controllers/__init__.py 2007-05-02 14:58:58 UTC (rev 1029) @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# Copyright 2004 Roman Yakovenko. +# 2007 Alexander Eisenhuth +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) Modified: pyplusplus_dev/ide/controllers/controller_main.py =================================================================== --- pyplusplus_dev/ide/controllers/controller_main.py 2007-05-01 18:06:08 UTC (rev 1028) +++ pyplusplus_dev/ide/controllers/controller_main.py 2007-05-02 14:58:58 UTC (rev 1029) @@ -4,63 +4,338 @@ # Distributed under the Boost Software License, Version 1.0. (See # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) - +from threading import Timer +from Queue import Queue, Empty +import os import wx from views import dialog_macro +from model.settings import ProjectSettings, IdeSettings, ParameterContainer +import model.code_generator as code_generator -""" Contoller class. Part of MVC -Responsibility: Glue view and model code: -- Handle all events from view (p.e. button) """ +class MainParameter(object): + ''' + Abstract main parameters + ''' + def __init__(self): + + object.__init__(self) + + # Following attributes are parameters of the ide (realized as properties) + self.max_num_recent_projects = ParameterContainer(int, 0) + self.recent_prj_list = ParameterContainer(list, []) + self.last_prj_path = ParameterContainer(unicode, "") + self.last_inc_path = ParameterContainer(unicode, "") + +class AsyncExecHandler(wx.EvtHandler): + ''' + This class handles async execution. It exec the callable given in the + constructor. There are some callbacs for misc. issues + ''' + + def __init__(self, async_callable, args): + wx.EvtHandler.__init__(self) + self._async_callable = async_callable + self._args = args + self._cur_timer_calls = 0 + self._ui_eventhanler = None + self._timer_res = 100 # 100 msec + + def GetRunning(self): + ''' + Return boolean if async execution is running + ''' + return not self._thread.finished.isSet() + + def Start(self): + ''' + Start async execution + ''' + self._start_in_thread() + + def SetErrorOutput(self, err_cb): + ''' + Set callback for error output + @param err_cb: callback + ''' + self._err_cb = err_cb + + def SetResultOutput(self, result_cb): + ''' + Set callback for result + @param result_cb: callback + ''' + self._result_cb = result_cb + + def SetProgressCb(self, progress_cb, progress_tm_100msec): + ''' + Set callback for progress. Param progress_tm_100msec defines the time + to call the callback while async execution is running + @param progress_cb: callback + @param progress_tm_100msec: time in 100 msec + ''' + assert(isinstance(progress_tm_100msec, int)) + self._progress_cb = progress_cb + self._num_timer_calls = progress_tm_100msec + + def SetFinishedCb(self, finished_cb): + ''' + Set callback, when async execution has finished + @param finished_cb: callback + ''' + self.finished_cb = finished_cb + + def _notify(self, event): + # Read from result queue and error queue + for que_obj, cb_obj in zip( \ + [self._q_err, self._q_result], + [self._err_cb, self._result_cb]): + + try: + txt_element = que_obj.get(False) + cb_obj(txt_element) + except Empty: + pass + + if self._thread.finished.isSet(): + self._wxtimer.Stop() + self.finished_cb() + else: + pass + + self._cur_timer_calls += 1 + + # self._num_timer_calls is set in SetProgressCb + if self._cur_timer_calls % self._num_timer_calls == 0: + self._progress_cb() + + event.Skip() + + def _start_in_thread(self): + # Start python thread and wx timer + self._q_result = Queue() + self._q_err = Queue() + + self._thread = Timer(0, self._async_callable, [self._args, + self._q_result, self._q_err]) + self._thread.start() + + self._wxtimer = wx.Timer(self) + self._wxtimer.SetOwner(self) + self.Bind(wx.EVT_TIMER, self._notify) + self._wxtimer.Start(self._timer_res) + + class MainController: + """ Contoller class. Part of MVC + Responsibility: Glue view and model code: + - Handle all events from view (p.e. button) + """ def __init__(self, view): self._view = view # Give controller object to the view self._view.set_controller(self) - + + # Template file for new project + self._prjTemplateFile = "./ProjectTemplate.xml" + + # Tag to appera in title of main window + self._changedTag = " [changed]" + + # Dict with id's of recent projects + self._recentPrjDict = {} + + # Parameters + self.param = MainParameter() + + # To access prj settings (settings are related to view) + self._prj_settings = ProjectSettings(self._view, None) + + # To access ide settings (settings are related to MainParameter) + self._ide_settings = IdeSettings(None, self.param) + + # To count code generation durance + self._tm_code_gen = 0 + + # Object to control async execution + self._async_runner = None + + self._setup_ide_settings() + + def ExitIde(self): + ''' + Exit IDE. Exit can be canceled. + @return: False if exit is canceled else True + ''' + if not self._check_and_save_project(): + return False + + if self._async_runner != None: + if self._async_runner.GetRunning(): + self.OutputWarning("Cannot exit. "\ + "Ide is doing async execution ...") + return False + + new_list = [] + + # build list with max max_num_recent_projects elements + last_idxs = self._recentPrjDict.keys() + last_idxs.reverse() # Last added should be saved + for idx in last_idxs: + new_list.append(self._recentPrjDict[idx]) + if len(new_list) >= self.param.max_num_recent_projects.get(): + break + + self.param.recent_prj_list.set(new_list) + + self._ide_settings.save() + + self._view.Destroy() + + return True + + def OnRecentPrjLoad(self, event): + ''' + Callback from the file menue. (Recent projects) + @param event: wx event. + ''' + project_file_name = self._recentPrjDict[event.GetId()] + self._load_project(project_file_name) + def DoRemoveCurInclude(self): - """Remove current selected Include item""" + ''' + Remove current selected Include item + ''' + cur_num = self._view.currentItemInclude if None == cur_num: return self._view.listIncludes.DeleteItem(cur_num) + self._set_settings_changed() def DoRemoveCurMacro(self): - """Remove current selected Macro item""" + ''' + Remove current selected Macro item + ''' + cur_num = self._view.currentItemMacro if None == cur_num: return self._view.listMacros.DeleteItem(cur_num) + self._set_settings_changed() + + + def CountCodeGenSec(self, reset=False): + ''' + Count the time of code generation. Must be called once per second. + Update UI + @param reset: Boolean to reset the counter + ''' + if reset: + self._tm_code_gen = 0 + else: + self._tm_code_gen += 1 + self._view.statusBar.SetStatusText(number=1, text=u'Time: %d sec' % \ + self._tm_code_gen) - def GenXmlCode(self): - """ Generate XML code""" - self._appendOutText("Generation of XML code staretd") + def OutputError(self, err_txt): + ''' + Print error text in output window + @param err_txt: Text to display + ''' + self._append_out_text(err_txt, self._text_error) - for i in range(0,5): - self._view.listIncludes.InsertStringItem(i, "First Element - this is a long") - + def OutputWarning(self, err_txt): + ''' + Print warning text in output window + @param err_txt: Text to display + ''' + self._append_out_text(err_txt, self._text_warn) + + def OutputInfo(self, inf_txt): + ''' + Print info text in output window + @param inf_txt: + ''' + self._append_out_text(inf_txt, self._text_info) + + def OutputCode(self, code_txt): + ''' + Append text in the code window + @param code_txt: Text to append + ''' + self._view.textCode.AppendText(code_txt) + + def GenCodeFinished(self): + ''' + Inform that code generation has finished + ''' + self._enable_generation_widgets(True) + + def GenCppCode(self): - """ Generate Boost.Python code""" - self._appendOutText("Generation of C++ code for Boost.Python started") + ''' + Generate Boost.Python code + ''' + self._enable_generation_widgets(False) + self._view.textCode.SetValue("") + self._append_out_text("Generation of C++ code for Boost.Python started") + self.CountCodeGenSec(reset=True) + params = self._get_gccxml_params(False) + + gen_xml_obj = AsyncExecHandler(code_generator.gen_cpp, params) + self._start_async_exec(gen_xml_obj) + def GenPyPPCode(self): - """ Generate Py++ code""" - self._appendOutText("Generation of Py++ code started") + ''' + Generate Py++ code + ''' + self._enable_generation_widgets(False) + self._view.textCode.SetValue("") + self._append_out_text("Generation of Py++ code started") + self.CountCodeGenSec(reset=True) + params = self._get_gccxml_params(False) + + gen_xml_obj = AsyncExecHandler(code_generator.gen_pypp, params) + self._start_async_exec(gen_xml_obj) + + def GenXmlCode(self): + ''' + Generate XML code + ''' + self._enable_generation_widgets(False) + self._append_out_text("Generation of XML code started") + self._view.textCode.SetValue("") + self.CountCodeGenSec(reset=True) + + params = self._get_gccxml_params(False) + + gen_xml_obj = AsyncExecHandler(code_generator.gen_xml, params) + self._start_async_exec(gen_xml_obj) + def OpenDlgHeader(self): - """Open dialog to get header file""" - self._openFileDlgWithRelatedWxText( self._view.textHeader, + ''' + Open dialog to get header file + ''' + self._open_file_dlg_text_ctrl( self._view.textHeader, "Choose a Header file", "Header (*.h)|*.h|All Files(*)|*") def OpenDlgGccXml(self): - """Open dialog to get GccXml executable""" - self._openFileDlgWithRelatedWxText( self._view.textGccXml, + ''' + Open dialog to get GccXml executable + ''' + + self._open_file_dlg_text_ctrl( self._view.textGccXml, "Choose GccXml executable", "All Files(*)|*") def OpenDlgEditCurInclude(self): - """ """ + ''' + Open dialog to edit current include + ''' cur_num = self._view.currentItemInclude if None == cur_num: return @@ -71,11 +346,14 @@ self._view.listIncludes.DeleteItem(cur_num) self._view.listIncludes.InsertStringItem( cur_num, dialog.GetPath()) + self._set_settings_changed() finally: dialog.Destroy() def OpenDlgEditCurMacro(self): - """ """ + ''' + Open dialog to edit current macro + ''' cur_num = self._view.currentItemMacro if None == cur_num: return @@ -87,12 +365,16 @@ new_macro = dialog.textMacro.GetLineText(0) self._view.listMacros.InsertStringItem(cur_num, new_macro) + self._set_settings_changed() finally: dialog.Destroy() def OpenDlgAddInclude(self): - """ """ - dialog = wx.DirDialog(self._view, "Choose include directory", ".") + ''' + Open Dialog to add a include path + ''' + dialog = wx.DirDialog(self._view, "Choose include directory", + self.param.last_inc_path.get()) try: if dialog.ShowModal() == wx.ID_OK: @@ -100,16 +382,20 @@ dir_path = dialog.GetPath() # Check weather path is already in list - if not self._checkItemIsInList(dir_path, + if not self._check_item_in_list(dir_path, self._view.listIncludes): self._view.listIncludes.InsertStringItem( cur_num, dir_path) + self.param.last_inc_path.set(str(dir_path)) + self._set_settings_changed() finally: dialog.Destroy() def OpenDlgAddMacro(self): - """ """ + ''' + Open dialog to add a macro + ''' dialog = dialog_macro.MacroDialog(self._view) if dialog.ShowModal() == wx.OK: @@ -118,12 +404,192 @@ new_macro = dialog.textMacro.GetLineText(0) # Check weather macro is already in list - if not self._checkItemIsInList(new_macro, self._view.listMacros): + if not self._check_item_in_list(new_macro, self._view.listMacros): self._view.listMacros.InsertStringItem(cur_num, new_macro) + self._set_settings_changed() + + def OpenDlgLoadProject(self): + ''' + Open dialog to load a project + ''' + from xml.parsers.expat import ExpatError + + dialog = wx.FileDialog(self._view, "Load existing Py++ project", + self.param.last_prj_path.get(), + "", "Project files (*.xml)|*.xml|All Files(*)|*", wx.OPEN) + + try: + if dialog.ShowModal() == wx.ID_OK: + self.ClearUi() + project_file_name = dialog.GetPath() + self._load_project(project_file_name) + + except ExpatError: + self._append_out_text("XML parser error in file:%s" % \ + dialog.GetPath(), self._text_error) + except Exception: + self._append_out_text("Error loading file:%s" % \ + dialog.GetPath(), self._text_error) + raise + + finally: + dialog.Destroy() + + def OpenDlgSaveProject(self, new_file=False): + ''' + Open dialog to save a project + @param new_file: Boolean weather to use a new file + @return: False if project save was canceled + ''' + # Is current file prj template? + if self._prj_settings.get_file_name() == self._prjTemplateFile: + project_file_name = self._open_new_prj_file() + else: + if new_file: + project_file_name = self._open_new_prj_file() + else: + project_file_name = self._prj_settings.get_file_name() + + try: + if project_file_name == None: + return False # prior dialog skipped + + if not self._save_project(project_file_name): + return False + except Exception: + self._append_out_text("Error saving file:%s" % \ + project_file_name, self._text_error) + raise + + return True + + def DoProjectNew(self): + ''' + Open dialog for new Project + ''' + self._load_project(self._prjTemplateFile) + + def ClearUi(self): + ''' + Clear all controls of UI + ''' + + # Clear text ctrls + for textCtrl in [self._view.textHeader, self._view.textGccXml, + self._view.textOutput, self._view.textCode]: + textCtrl.Clear() + + # clear list ctrls + for listCtrl in [self._view.listMacros, self._view.listIncludes]: + tot_num = listCtrl.GetItemCount() + for cur_num in range(tot_num, 0, -1): + listCtrl.DeleteItem(cur_num-1) + def _cancel_if_file_exist(self, project_file_name, parent_dlg=None): + # check for overwriting of file + if os.path.exists(project_file_name): + dialog = wx.MessageDialog(parent_dlg, + "%s exists. Should it be overwritten?" % \ + (project_file_name), pos=self._view.GetPosition()) + + if dialog.ShowModal() == wx.ID_CANCEL: + return True + else: + return False - def _openFileDlgWithRelatedWxText(self, + # Return True if successfull + def _check_and_save_project(self): + if self._prj_settings.get_changed(): + + # Anyhow pos is working + dialog = wx.MessageDialog(self._view, "Current project changed. "\ + "Should project be saved?", style = (wx.YES_NO), + pos=self._view.GetPosition()) + + user_input = dialog.ShowModal() + dialog.Destroy() + + if user_input == wx.ID_NO: + return True + elif user_input == wx.ID_YES: + return self.OpenDlgSaveProject() + else: + return True + + def _load_project(self, project_file_name): + self._check_and_save_project() + self.ClearUi() + self._prj_settings.load(project_file_name) + self._set_prj_filename_in_title(project_file_name) + + if project_file_name != self._prjTemplateFile: + self.param.last_prj_path.set(unicode(os.path.dirname(project_file_name))) + + self._add_to_prj_history(project_file_name) + + def _save_project(self, project_file_name): + + self._prj_settings.save(project_file_name) + self._reset_settings_changed() + self.param.last_prj_path.set(os.path.dirname(project_file_name)) + self._set_prj_filename_in_title(project_file_name) + self._add_to_prj_history(project_file_name) + + return True + + + def _open_new_prj_file(self): + + project_file_name = None + + dialog = wx.FileDialog(self._view, + "Save Py++ project to new file", self.param.last_prj_path.get(), "", + "Project files (*.xml)|*.xml|All Files(*)|*", wx.FD_SAVE) + + if dialog.ShowModal() == wx.ID_OK: + + project_file_name = dialog.GetPath() + + if self._cancel_if_file_exist(project_file_name, dialog): + project_file_name = None + + dialog.Destroy() + + return project_file_name + + def _add_to_prj_history(self, prj_filename): + +# This don't work, see below +# max_num_history = self.param.max_num_recent_projects.get() + + + if prj_filename in self._recentPrjDict.values(): + return + + if prj_filename == self._prjTemplateFile: + return + + file_name = os.path.split(prj_filename)[1] + + menue = self._view.menueRecentPrj + new_item_id = id=wx.NewId() + new_item = wx.MenuItem(menue, help=prj_filename, + id=new_item_id, + kind=wx.ITEM_NORMAL, text=file_name) + + menue.PrependItem(new_item) + + self._view.Bind(wx.EVT_MENU, self.OnRecentPrjLoad, + id=new_item_id) + + self._recentPrjDict[new_item_id] = prj_filename + +# Doesn't work. Dont know why +# if menue.GetMenuItemCount() > max_num_history: +# menue.Remove(max_num_history) + + def _open_file_dlg_text_ctrl(self, related_wx_text, caption_txt="", file_filter="All Files(*)|*", @@ -135,10 +601,67 @@ if dialog.ShowModal() == wx.ID_OK: related_wx_text.Clear() related_wx_text.AppendText(dialog.GetPath()) + self._set_settings_changed() finally: dialog.Destroy() - def _checkItemIsInList(self, item, wx_list): + def _set_settings_changed(self): + self._prj_settings.set_changed() + title_str = self._view.GetTitle() + if not self._changedTag in title_str: + title_str += self._changedTag + self._view.SetTitle(title_str) + + def _enable_generation_widgets(self, state): + ctrls = [self._view.butGenCpp, self._view.butGenXml, \ + self._view.butGenPyPP] + + for ctrl in ctrls: + ctrl.Enable(state) + + def _get_gccxml_params(self, verbose): + + gcc_xml = self._prj_settings.get_param('gccXmlSettings.gccXmlPath') + inc_path_list = eval(self._prj_settings.get_param( + 'gccXmlSettings.includePathList')) + macro_list = eval(self._prj_settings.get_param( + 'gccXmlSettings.macroList')) + + if verbose: + self._append_out_text(" "+ gcc_xml) + self._append_out_text(" "+ str(inc_path_list)) + self._append_out_text(" "+ str(macro_list)) + + + return (gcc_xml, inc_path_list, macro_list) + + def _setup_ide_settings(self): + + # load ide settings + self._ide_settings.load() + prj_list = self.param.recent_prj_list.get() + prj_list.reverse() + for prj in prj_list: + self._add_to_prj_history(prj) + + def _set_prj_filename_in_title(self, filename): + + if filename == self._prjTemplateFile: + filename = "New project" + + title_str = self._view.GetTitle() + start_idx = title_str.find("(") + end_idx = title_str.find(")") + fnamstr = title_str[start_idx:end_idx+1] + title_str = title_str.replace(fnamstr, "(" + filename + ")") + self._view.SetTitle(title_str) + + def _reset_settings_changed(self): + title_str = self._view.GetTitle() + title_str = title_str.replace(self._changedTag, "") + self._view.SetTitle(title_str) + + def _check_item_in_list(self, item, wx_list): idx = wx_list.FindItem(0, item) if idx == -1: return False @@ -146,7 +669,7 @@ return True - def _appendOutText(self, text, type_of_text = 0): + def _append_out_text(self, text, type_of_text = 0): """ append text with different error level""" text_ctrl = self._view.textOutput type_txt = "INFO" @@ -164,7 +687,16 @@ text_ctrl.SetDefaultStyle(wx.TextAttr(wx.BLACK)) text_ctrl.AppendText(type_txt + ": " + text + "\n") + # Start async execution + def _start_async_exec(self, async_runner): + self._async_runner = async_runner + self._async_runner.SetErrorOutput(self.OutputError) + self._async_runner.SetResultOutput(self.OutputCode) + self._async_runner.SetFinishedCb(self.GenCodeFinished) + self._async_runner.SetProgressCb(self.CountCodeGenSec, 10) + self._async_runner.Start() + # levels _text_info = 0 # Text has informational character _text_warn = 1 # Text has warning character _text_error = 2 # Text has error character Added: pyplusplus_dev/ide/doc/EnterpriseArchitectModel.eap =================================================================== (Binary files differ) Property changes on: pyplusplus_dev/ide/doc/EnterpriseArchitectModel.eap ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: pyplusplus_dev/ide/doc/IdeInBoa.png =================================================================== (Binary files differ) Property changes on: pyplusplus_dev/ide/doc/IdeInBoa.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: pyplusplus_dev/ide/doc/PackageOverview.png =================================================================== (Binary files differ) Property changes on: pyplusplus_dev/ide/doc/PackageOverview.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: pyplusplus_dev/ide/doc/ReadmeForDevelopment.odt =================================================================== (Binary files differ) Property changes on: pyplusplus_dev/ide/doc/ReadmeForDevelopment.odt ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: pyplusplus_dev/ide/ide.py =================================================================== --- pyplusplus_dev/ide/ide.py 2007-05-01 18:06:08 UTC (rev 1028) +++ pyplusplus_dev/ide/ide.py 2007-05-02 14:58:58 UTC (rev 1029) @@ -28,6 +28,9 @@ self.main.Show() self.SetTopWindow(self.main) + + controller.DoProjectNew() + return True def main(): Deleted: pyplusplus_dev/ide/model/ProjectFileTemplatate.xml =================================================================== --- pyplusplus_dev/ide/model/ProjectFileTemplatate.xml 2007-05-01 18:06:08 UTC (rev 1028) +++ pyplusplus_dev/ide/model/ProjectFileTemplatate.xml 2007-05-02 14:58:58 UTC (rev 1029) @@ -1,10 +0,0 @@ -<!-- Template file for pyplusplus IDE --> -<pyPPProject> - <gccXmlSettings - headerPath="" - includePathList="[]" - gccXmlPath="" - macroList="[]" - /> - </gccXmlSettings> -</pyPPProject> \ No newline at end of file Modified: pyplusplus_dev/ide/model/__init__.py =================================================================== --- pyplusplus_dev/ide/model/__init__.py 2007-05-01 18:06:08 UTC (rev 1028) +++ pyplusplus_dev/ide/model/__init__.py 2007-05-02 14:58:58 UTC (rev 1029) @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# Copyright 2004 Roman Yakovenko. +# 2007 Alexander Eisenhuth +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) Added: pyplusplus_dev/ide/model/code_generator.py =================================================================== --- pyplusplus_dev/ide/model/code_generator.py (rev 0) +++ pyplusplus_dev/ide/model/code_generator.py 2007-05-02 14:58:58 UTC (rev 1029) @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Copyright 2004 Roman Yakovenko. +# 2007 Alexander Eisenhuth +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +''' +Code generation is started in a own thread. To exchange data, queues +are used. +''' + +import time + +def gen_xml(params, q_result, q_error): + ''' + Generate XML code + @param params: List of parameters [gccxml,incPath,macros] + @param q_result: python queue to put result in + @param q_error: python queue to put error in + @return None (isn't evaluated) + ''' + + gcc_xml = params[0] + inc_path_list = params[1] + macro_list = params[2] + + time.sleep(1) + q_result.put("This is dummy data of gen_xml\n") + q_error.put("This is dummy error gen_xml") + time.sleep(4) + q_result.put("This is dummy data of gen_xml") + q_error.put("This is dummy error of gen_xml") + +def gen_cpp(params, q_result, q_error): + ''' + Generate cpp (Boost.Python) code + @param params: List of parameters [gccxml,incPath,macros] + @param q_result: python queue to put result in + @param q_error: python queue to put error in + @return None (isn't evaluated) + ''' + pass + +def gen_pypp(params, q_result, q_error): + ''' + Generate Python (Py++) code + @param params: List of parameters [gccxml,incPath,macros] + @param q_result: python queue to put result in + @param q_error: python queue to put error in + @return None (isn't evaluated) + ''' + pass + + \ No newline at end of file Added: pyplusplus_dev/ide/model/etree_extension.py =================================================================== --- pyplusplus_dev/ide/model/etree_extension.py (rev 0) +++ pyplusplus_dev/ide/model/etree_extension.py 2007-05-02 14:58:58 UTC (rev 1029) @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# Copyright 2004 Roman Yakovenko. +# 2007 Alexander Eisenhuth +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +from xml.etree.ElementTree import ElementTree + +class ElNotFound(Exception): + ''' + Exception element not found + ''' + pass + +class AttribNotFound(Exception): + ''' + Execption attribute not found + ''' + pass + +class XmlElFinder: + ''' + Find a element in a Tree (xml.etree.ElementTree) + ''' + def __init__(self, root_el): + self._root = root_el # Must be of typ xml.etree.ElementTree + self._finder = None + + def get_obj(self, element_text): + ''' + Find and return XML element object (Element) + @param element_text: Textual description of element to find. Hirarchie + is seperated by '.' Ex.: 'rootNode.childNode.element' + @return: Element object + ''' + + child_el = None + self._finder = self._root + + for el_name in element_text.split("."): + child_el = self._finder.find(el_name) + + # Child not found + if child_el == None: + raise ElNotFound, "Cannot find Element %s in %s" % \ + (el_name, element_text) + + self._finder = ElementTree(child_el) + + return child_el + +class XmlAttribFinder: + '''Find a attribute in a Tree (xml.etree.ElementTree)''' + def __init__(self, root_el): + self._el_finder = XmlElFinder(root_el) + + def get_obj(self, attrib_text): + ''' + Find and return attribute as tuple + @param attrib_text: Textual description of attribute to find. Hirarchie + is seperated by '.' Ex.: 'rootNode.childNode.element.attrib1' + @return: (<allAttribDict>, <relatedAttribName>) This means a tuple + cintaining all attributes of parent element and name of attribute. + ''' + el_text = attrib_text[0 : attrib_text.rfind(".")] + attrib_name = attrib_text[attrib_text.rfind(".") + 1 : ] + element = self._el_finder.get_obj(el_text) + return (element.attrib, attrib_name) + + def get_val(self, attrib_text): + ''' + Find and return attribute value + @param attrib_text: Textual description of attribute to find. Hirarchie + is seperated by '.' Ex.: 'rootNode.childNode.element.attrib1' + @return Attribute value + ''' + attrib_value = None + + el_text = attrib_text[0 : attrib_text.rfind(".")] + attrib_name = attrib_text[attrib_text.rfind(".") + 1 : ] + element = self._el_finder.get_obj(el_text) + + try: + attrib_value = element.attrib[attrib_name] + + except KeyError: + raise AttribNotFound, "Cannot find attribute '%s' in element '%s'" \ + % (attrib_name, el_text) + + return attrib_value + + + \ No newline at end of file Added: pyplusplus_dev/ide/model/settings.py =================================================================== --- pyplusplus_dev/ide/model/settings.py (rev 0) +++ pyplusplus_dev/ide/model/settings.py 2007-05-02 14:58:58 UTC (rev 1029) @@ -0,0 +1,383 @@ +# -*- coding: utf-8 -*- +# Copyright 2004 Roman Yakovenko. +# 2007 Alexander Eisenhuth +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +''' +This module contains classes for settings and parameters +''' +from model.etree_extension import XmlAttribFinder +from shutil import copyfile +# Python 2.5 +from xml.etree.ElementTree import ElementTree +import os +import wx + +class BaseSettings: + ''' + Base class for settings as a collection of parameters + ''' + def __init__(self, ide_ui, param_obj): + self._file_name = None # filename of settings + self._ide_ui = ide_ui + self._param_obj = param_obj + + def set_changed(self): + ''' + Inform, that any parameter has changed + ''' + self._changed = True + + def get_changed(self): + ''' + Access changed information + ''' + return self._changed + + def get_file_name(self): + ''' + Return file path of settings + ''' + return self._file_name + + def get_param(self, xml_attrib_name): + ''' + Return parameter as string + @param xml_attrib_name: Name of parameter + ''' + + ide_ui = self._ide_ui #@UnusedVariable + param_obj = self._param_obj #@UnusedVariable + + for cur_name, rel_obj_str in self._param_list: + if cur_name == xml_attrib_name: + param = ParameterAccess(eval(rel_obj_str)) + return param.get_related_object_value() + + raise RuntimeError, "Parameter:%s not defined" % xml_attrib_name + + def _load(self, file_name):#@UnusedVariable + ''' + Load settings from given file + @param file_name: path of file. Format is XML. + @param ide_ui: wxPython ctrl of ide + @param param_obj: object holding parameters + ''' + self._file_name = file_name + + ide_ui = self._ide_ui #@UnusedVariable + param_obj = self._param_obj #@UnusedVariable + + root_element = ElementTree(file=file_name).getroot() + attrib_finder = XmlAttribFinder(root_element) + + # Loop through our parameter list + for xml_attrib_name, rel_obj_str in self._param_list: + # In eval we need ide_ui and param_obj + # print "XML:%s obj_str:%s" % (xml_attrib_name, rel_obj_str) + param = ParameterAccess(eval(rel_obj_str)) + attrib_val = attrib_finder.get_val(xml_attrib_name) + param.update_related_object(attrib_val) + + def _save(self, file_name): + ''' + Save settings into the given file + @param file_name: path of file. Format is XML. + @param ide_ui: wxPython ctrl of ide + @param param_obj: object holding parameters + ''' + + self._file_name = file_name + + ide_ui = self._ide_ui #@UnusedVariable + param_obj = self._param_obj #@UnusedVariable + + etree = ElementTree(file=file_name) + root_element = etree.getroot() + + attrib_finder = XmlAttribFinder(root_element) + + for xml_attrib_name, rel_obj_str in self._param_list: + # In eval we need ide_ui and param_obj + param = ParameterAccess(eval(rel_obj_str)) + attrib, attrib_key = attrib_finder.get_obj(xml_attrib_name) + attrib[attrib_key] = param.get_related_object_value() + + # Write XML-File + etree.write(file_name) + + self._changed = False + + +class IdeSettings(BaseSettings): + ''' + Abstracts the settings of the ide + ''' + def __init__(self, ide_ui, param_obj): + + self._param_list = [ + ('project.maxNumInMenue', + 'param_obj.max_num_recent_projects'), + + ('project.recentProjects', + 'param_obj.recent_prj_list'), + + ('project.lastPrjPath', + 'param_obj.last_prj_path'), + + ('project.lastIncPath', + 'param_obj.last_inc_path') + + ] + + BaseSettings.__init__(self, ide_ui, param_obj) + + def load(self): + ''' + Load ide settings + ''' + ide_file_name = self._get_ide_file_name() + self._load(ide_file_name) + + def save(self): + ''' + Save settings + + ''' + ide_file_name = self._get_ide_file_name() + self._save(ide_file_name) + + def _get_ide_file_name(self): + ''' + Get the file name of the ide settings filE. If the file doesen't exist + we copy a template fiel into the location + @param file_path: File path to check + ''' + try: + home_dir = os.environ['HOME'] + except KeyError: + home_dir = os.getcwd() + + file_path = os.path.join(home_dir, self._ide_file_name ) + + if not os.path.exists(file_path): + print "File copied !!" + copyfile(self._ide_template_path, file_path) + + return file_path + + # Project template file + _ide_template_path = "./IdeTemplate.xml" + _ide_file_name = ".pyplusplus_ide" + +class ProjectSettings(BaseSettings): + ''' + Abstracts the settings of a project + ''' + def __init__(self, ide_ui, param_obj): + + BaseSettings.__init__(self, ide_ui, param_obj) + + # This list contains tuples of ui elements and the related + # attribute of the project file + self._param_list = [ + ('gccXmlSettings.headerPath', + 'ide_ui.textHeader'), + + ('gccXmlSettings.gccXmlPath', + 'ide_ui.textGccXml'), + + ('gccXmlSettings.includePathList', + 'ide_ui.listIncludes'), + + ('gccXmlSettings.macroList', + 'ide_ui.listMacros'), + + ('guiGeometry.size', + 'ide_ui'), + + ('guiGeometry.horizontalSplitter', + 'ide_ui.splitterHorizontal'), + + ('guiGeometry.verticalSplitter', + 'ide_ui.splitterVertical') + ] + + self._changed = False + + def load(self, file_name): + ''' + Load settings from given file + @param file_name: path of file. Format is XML. + ''' + self._load(file_name) + + def save(self, file_name): + ''' + Save settings into the given file + @param file_name: path of file. Format is XML. + ''' + # Assert new prj file + self._assert_prj_file(file_name) + self._save(file_name) + + def _assert_prj_file(self, file_path): + ''' + Assert that the given file exists. If not we copy the template + @param file_path: File path to check + ''' + if not os.path.exists(file_path): + copyfile(self._prj_template_path, file_path) + + # Project template file + _prj_template_path = "./ProjectTemplate.xml" + +class ParameterContainer: + ''' + Abstracts one parameter with getter and setter + ''' + def __init__(self, p_type, init_val=None): + self._type = p_type + self._val = init_val + + def set(self, val): + ''' + Set the related parameter + @param val: new value + ''' + self._val = self._type(val) + + def get(self): + ''' + Get the related parameter + ''' + + return self._val + + def get_type(self): + ''' + Get the (python) type of the parameter + ''' + return self._type + + +class ParameterAccess: + ''' + Abstracts the access (setting and getting) of a parameter. This class + has knowledge of wxPython controls (and know how to handle them). + Currently we support: + - wxTextCtrl + - wxListCtrl + - wxFrame + - wxSplitterWindow + - ParameterContainer + ''' + def __init__(self, related_object): + self._rel_obj = related_object + + def update_related_object(self, param_value): + ''' + Set the value of the related object with given param_value + @param param_value: parameter value to use + ''' + + #print ">>> rel obj:", self._rel_obj, "val:", param_value + + # Handle wxTextCtrl + if isinstance(self._rel_obj, wx.TextCtrl): + # We need a string + str_param_value = str(param_value) + self._rel_obj.SetValue(str_param_value) + + # Handle wxListCtrl + elif isinstance(self._rel_obj, wx.ListCtrl): + list_param_value = eval(param_value) + assert(isinstance(list_param_value, list)) + cur_num = 0 + for list_el in list_param_value: + self._rel_obj.InsertStringItem(cur_num, list_el) + cur_num += 1 + + # Handle wxFrame + elif isinstance(self._rel_obj, wx.Frame): + tup_size = eval(param_value) + assert(isinstance(tup_size, tuple)) + x = tup_size[0] + y = tup_size[1] + wid = tup_size[2] + high = tup_size[3] + self._rel_obj.SetDimensions(x, y, wid, high) + + # SplitterWindow + elif isinstance(self._rel_obj, wx.SplitterWindow): + int_sash_pos = int(param_value) + self._rel_obj.SetSashPosition(int_sash_pos, True) + + # ParameterContainer + elif isinstance(self._rel_obj, ParameterContainer): + if self._rel_obj.get_type() == list: + eval_param_value = eval(param_value) + elif self._rel_obj.get_type() == int: + eval_param_value = eval(param_value) + elif self._rel_obj.get_type() == str: + eval_param_value = param_value + elif self._rel_obj.get_type() == unicode: + eval_param_value = unicode(param_value) + else: + raise RuntimeError, "Unupported typ found", \ + self._rel_obj.get_type() + + cnv_param_val = self._rel_obj.get_type()(eval_param_value) + self._rel_obj.set(cnv_param_val) + + else: + raise RuntimeError, "Unsupported type %s" % self._rel_obj.__class__ + + def get_related_object_value(self): + ''' + Get value of the related object + @return value as string + ''' + + #print ">>>", self._rel_obj + + str_param_value = "Value not specified" + + # Handle wxTextCtrl + if isinstance(self._rel_obj, wx.TextCtrl): + # We need a string + str_param_value = self._rel_obj.GetValue() + + # Handle wxListCtrl + elif isinstance(self._rel_obj, wx.ListCtrl): + + list_of_ctrl = [] + + for cur_num in range(self._rel_obj.GetItemCount()): + list_el = self._rel_obj.GetItemText(cur_num) + list_of_ctrl.append(list_el) + cur_num += 1 + str_param_value = str(list_of_ctrl) + + # Handle wxFrame + elif isinstance(self._rel_obj, wx.Frame): + x,y = self._rel_obj.GetPositionTuple() + wid, high = self._rel_obj.GetSizeTuple() + dim = (x,y,wid,high) + str_param_value = str(dim) + + # SplitterWindow + elif isinstance(self._rel_obj, wx.SplitterWindow): + sash_pos = self._rel_obj.GetSashPosition() + str_param_value = str(sash_pos) + + # Handle ParameterContainer + elif isinstance(self._rel_obj, ParameterContainer): + str_param_value = str(self._rel_obj.get()) + + else: + raise RuntimeError, "Unsupported type %s" % self._rel_obj.__class__ + + return str_param_value + \ No newline at end of file Added: pyplusplus_dev/ide/test/test_attrib_finder.py =================================================================== --- pyplusplus_dev/ide/test/test_attrib_finder.py (rev 0) +++ pyplusplus_dev/ide/test/test_attrib_finder.py 2007-05-02 14:58:58 UTC (rev 1029) @@ -0,0 +1,41 @@ +import sys +import unittest +# Python 2.5 +from xml.etree.ElementTree import ElementTree + +if ".." not in sys.path: + sys.path.append("..") + +from model.etree_extension import XmlAttribFinder, AttribNotFound +prj_template_file = "../model/ProjectTemplate.xml" + + +class TestAttribFinder(unittest.TestCase): + + def setUp(self): + ''' Executed before each test ''' + self._root_el_prj_file = ElementTree(file=prj_template_file).getroot() + + def test_find(self): + '''Test get_val methode with project template''' + af_obj = XmlAttribFinder(self._root_el_prj_file) + + header_path = af_obj.get_val('gccXmlSettings.headerPath') + self.assertEqual(header_path, "") + + inc_path_list = af_obj.get_val('gccXmlSettings.includePathList') + self.assertEqual(eval(inc_path_list), []) + + inc_path_list_obj = af_obj.get_obj('gccXmlSettings.includePathList') + + self.assertTrue(inc_path_list_obj[1], []) + + self.assertRaises(AttribNotFound, af_obj.get_val, + ('gccXmlSettings.xxx')) + + def tearDown(self): + ''' Executed after each test ''' + del self._root_el_prj_file + +if __name__ == "__main__": + unittest.main() Modified: pyplusplus_dev/ide/views/frame_main.py =================================================================== --- pyplusplus_dev/ide/views/frame_main.py 2007-05-01 18:06:08 UTC (rev 1028) +++ pyplusplus_dev/ide/views/frame_main.py 2007-05-02 14:58:58 UTC (rev 1029) @@ -15,10 +15,10 @@ def create(parent): return MainFrame(parent) -[wxID_MAINFRAMEMENUEFILEEXIT, wxID_MAINFRAMEMENUEFILENEW, - wxID_MAINFRAMEMENUEFILEOPEN, wxID_MAINFRAMEMENUEFILERECENT, - wxID_MAINFRAMEMENUEFILESAVE, -] = [wx.NewId() for _init_coll_menueFile_Items in range(5)] +[wxID_MAINFRAMEMENUEFILEEXIT, wxID_MAINFRAMEMENUEFILEITEMS7, + wxID_MAINFRAMEMENUEFILENEW, wxID_MAINFRAMEMENUEFILEOPEN, + wxID_MAINFRAMEMENUEFILERECENT, wxID_MAINFRAMEMENUEFILESAVE, +] = [wx.NewId() for _init_coll_menueFile_Items in range(6)] [wxID_MAINFRAMEMENUINCLUDESADDINC, wxID_MAINFRAMEMENUINCLUDESITEMS1, ] = [wx.NewId() for _init_coll_menuIncludes_Items in range(2)] @@ -154,20 +154,24 @@ def _init_coll_menueFile_Items(self, parent): # generated method, don't edit - parent.Append(help=u'Create new Project', id=wxID_MAINFRAMEMENUEFILENEW, - kind=wx.ITEM_NORMAL, text=u'&New Project') - parent.Append(help=u'Open existing Project', + parent.Append(help=u'Create new project with default settings', + id=wxID_MAINFRAMEMENUEFILENEW, kind=wx.ITEM_NORMAL, + text=u'&New project') + parent.Append(help=u'Open existing project', id=wxID_MAINFRAMEMENUEFILEOPEN, kind=wx.ITEM_NORMAL, - text=u'&Open Project') - parent.Append(help=u'Save current Project', + text=u'&Open project') + parent.Append(help=u'Save current project', id=wxID_MAINFRAMEMENUEFILESAVE, kind=wx.ITEM_NORMAL, - text=u'&Save Project') + text=u'&Save project') + parent.Append(help=u'Save current project under a different filename', + id=wxID_MAINFRAMEMENUEFILEITEMS7, kind=wx.ITEM_NORMAL, + text=u'S&ave as ...') parent.AppendSeparator() - parent.AppendMenu(help=u'Open recently used Project', - id=wxID_MAINFRAMEMENUEFILERECENT, submenu=wx.Menu(), - text=u'Recent Projects') + parent.AppendMenu(help=u'Open recently used project', + id=wxID_MAINFRAMEMENUEFILERECENT, submenu=self.menueRecentPrj, + text=u'&Recent projects') parent.AppendSeparator() - parent.Append(help='', id=wxID_MAINFRAMEMENUEFILEEXIT, + parent.Append(help=u'Exit IDE', id=wxID_MAINFRAMEMENUEFILEEXIT, kind=wx.ITEM_NORMAL, text=u'&Exit') self.Bind(wx.EVT_MENU, self.OnMenueFileNewMenu, id=wxID_MAINFRAMEMENUEFILENEW) @@ -177,6 +181,10 @@ id=wxID_MAINFRAMEMENUEFILESAVE) self.Bind(wx.EVT_MENU, self.OnMenueFileExitMenu, id=wxID_MAINFRAMEMENUEFILEEXIT) + self.Bind(wx.EVT_MENU, self.OnMenueFileSaveAsMenu, + id=wxID_MAINFRAMEMENUEFILEITEMS7) + self.Bind(wx.EVT_MENU, self.OnMenueFileRecentMenu, + id=wxID_MAINFRAMEMENUEFILERECENT) def _init_coll_menuMacros_Items(self, parent): # generated method, don't edit @@ -212,13 +220,12 @@ def _init_coll_statusBar_Fields(self, parent): # generated method, don't edit - parent.SetFieldsCount(3) + parent.SetFieldsCount(2) - parent.SetStatusText(number=0, text=u'<helptextOrStatus>') - parent.SetStatusText(number=1, text=u'<parseTime>') - parent.SetStatusText(number=2, text=u'<compileTime>') + parent.SetStatusText(number=0, text=u'') + parent.SetStatusText(number=1, text=u'') - parent.SetStatusWidths([-1, -1, -1]) + parent.SetStatusWidths([-1, -1]) def _init_sizers(self): # generated method, don't edit @@ -278,6 +285,8 @@ self.menuMacros = wx.Menu(title='') + self.menueRecentPrj = wx.Menu(title=u'') + self._init_coll_menueFile_Items(self.menueFile) self._init_coll_menuBar_Menus(self.menuBar) self._init_coll_menuIncludes_Items(self.menuIncludes) @@ -286,11 +295,12 @@ def _init_ctrls(self, prnt): # generated method, don't edit wx.Frame.__init__(self, id=wxID_MAINFRAME, name=u'MainFrame', - parent=prnt, pos=wx.Point(-3, -3), size=wx.Size(800, 600), - style=wx.DEFAULT_FRAME_STYLE, title=u'Py++ IDE') + parent=prnt, pos=wx.Point(0, 0), size=wx.Size(800, 600), + style=wx.DEFAULT_FRAME_STYLE, title=u'Py++ IDE ()') self._init_utils() self.SetClientSize(wx.Size(792, 566)) self.SetMenuBar(self.menuBar) + self.Bind(wx.EVT_CLOSE, self.OnMainFrameClose) self.statusBar = wx.StatusBar(id=wxID_MAINFRAMESTATUSBAR, name=u'statusBar', parent=self, style=0) @@ -366,7 +376,7 @@ self.textCode = wx.TextCtrl(id=wxID_MAINFRAMETEXTCODE, name=u'textCode', parent=self.panelNbCode, pos=wx.Point(0, 0), size=wx.Size(730, 0), style=wx.TE_READONLY | wx.TE_MULTILINE, value=u'') - self.textCode.SetToolTipString(u'textCtrl2') + self.textCode.SetHelpText(u'') self.panelButtons = wx.Panel(id=wxID_MAINFRAMEPANELBUTTONS, name=u'panelButtons', parent=self.panelNbCode, pos=wx.Point(156, @@ -376,6 +386,8 @@ label=u'Generate XML code', name=u'butGenXml', parent=self.panelButtons, pos=wx.Point(10, 0), size=wx.Size(120, 23), style=0) + self.butGenXml.SetToolTipString(u'') + self.butGenXml.SetHelpText(u'Help for button') self.butGenXml.Bind(wx.EVT_BUTTON, self.OnButGenXmlButton, id=wxID_MAINFRAMEBUTGENXML) @@ -465,28 +477,34 @@ self._init_sizers() def __init__(self, parent): - + self.currentItemInclude = None self.currentItemMacro = None self._init_ctrls(parent) - self._setup_ide_ctrls() - self.splitterVertical.SetSashPosition(300, True) - self.SetSize((self.GetSize()[0]+1,self.GetSize()[1]+1)) + self._setup_ide_ctrls() def OnMenueFileNewMenu(self, event): + self._controller.DoProjectNew() event.Skip() def OnMenueFileOpenMenu(self, event): + self._controller.OpenDlgLoadProject() event.Skip() def OnMenueFileSaveMenu(self, event): + self._controller.OpenDlgSaveProject() event.Skip() + + def OnMenueFileSaveAsMenu(self, event): + self._controller.OpenDlgSaveProject(new_file=True) + event.Skip() def OnMenueFileRecentMenu(self, event): event.Skip() def OnMenueFileExitMenu(self, event): + self._controller.ExitIde() event.Skip() def OnTextGenCodeRightDown(self, event): @@ -582,6 +600,17 @@ self.currentItemMacro = None event.Skip() + def OnMenueRecentPrjItems0Menu(self, event): + print "OnMenueRecentPrjItems0Menu" + event.Skip() + + def OnMainFrameClose(self, event): + if not self._controller.ExitIde(): + return() # Don't close + else: + event.Skip() + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2007-05-02 19:22:32
|
Revision: 1030 http://svn.sourceforge.net/pygccxml/?rev=1030&view=rev Author: roman_yakovenko Date: 2007-05-02 12:22:25 -0700 (Wed, 02 May 2007) Log Message: ----------- adding generate xml, code functionality Modified Paths: -------------- pyplusplus_dev/ide/controllers/controller_main.py pyplusplus_dev/ide/model/code_generator.py Added Paths: ----------- pyplusplus_dev/ide/_dev_run_ide_.py Added: pyplusplus_dev/ide/_dev_run_ide_.py =================================================================== --- pyplusplus_dev/ide/_dev_run_ide_.py (rev 0) +++ pyplusplus_dev/ide/_dev_run_ide_.py 2007-05-02 19:22:25 UTC (rev 1030) @@ -0,0 +1,11 @@ +import sys + +sys.path.append( '..' ) +sys.path.append( '../../pygccxml_dev' ) + +import pygccxml +import pyplusplus + +import ide + +ide.main() \ No newline at end of file Modified: pyplusplus_dev/ide/controllers/controller_main.py =================================================================== --- pyplusplus_dev/ide/controllers/controller_main.py 2007-05-02 14:58:58 UTC (rev 1029) +++ pyplusplus_dev/ide/controllers/controller_main.py 2007-05-02 19:22:25 UTC (rev 1030) @@ -311,7 +311,6 @@ self.CountCodeGenSec(reset=True) params = self._get_gccxml_params(False) - gen_xml_obj = AsyncExecHandler(code_generator.gen_xml, params) self._start_async_exec(gen_xml_obj) @@ -626,14 +625,15 @@ 'gccXmlSettings.includePathList')) macro_list = eval(self._prj_settings.get_param( 'gccXmlSettings.macroList')) - + header_file = self._prj_settings.get_param('gccXmlSettings.headerPath') if verbose: self._append_out_text(" "+ gcc_xml) self._append_out_text(" "+ str(inc_path_list)) self._append_out_text(" "+ str(macro_list)) + self._append_out_text(" "+ header_file) - return (gcc_xml, inc_path_list, macro_list) + return (gcc_xml, inc_path_list, macro_list, header_file) def _setup_ide_settings(self): Modified: pyplusplus_dev/ide/model/code_generator.py =================================================================== --- pyplusplus_dev/ide/model/code_generator.py 2007-05-02 14:58:58 UTC (rev 1029) +++ pyplusplus_dev/ide/model/code_generator.py 2007-05-02 19:22:25 UTC (rev 1030) @@ -10,7 +10,10 @@ are used. ''' +import os import time +from pygccxml import parser +from pyplusplus import module_builder def gen_xml(params, q_result, q_error): ''' @@ -20,17 +23,26 @@ @param q_error: python queue to put error in @return None (isn't evaluated) ''' - - gcc_xml = params[0] - inc_path_list = params[1] - macro_list = params[2] + try: + config = parser.config_t( gccxml_path=params[0] + , include_paths=params[1] + , define_symbols=params[2]) - time.sleep(1) - q_result.put("This is dummy data of gen_xml\n") - q_error.put("This is dummy error gen_xml") - time.sleep(4) - q_result.put("This is dummy data of gen_xml") - q_error.put("This is dummy error of gen_xml") + header_file = params[3] + config.include_paths.append( os.path.split( header_file )[0] ) + config.working_directory = os.path.split( header_file )[0] + reader = parser.source_reader_t( config=config ) + xml_file = reader.create_xml_file( header_file ) + + xml_file_obj = file( xml_file ) + q_result.put( xml_file_obj.read() ) + xml_file_obj.close() + os.remove( xml_file ) + #self._statistics.set_parse_time( parsed_time ) + #self._statistics.set_code_generation_time( 0 ) + except Exception, error: + q_result.put(str( error )) + q_error.put(str( error )) def gen_cpp(params, q_result, q_error): ''' @@ -40,8 +52,30 @@ @param q_error: python queue to put error in @return None (isn't evaluated) ''' - pass + try: + header_file = params[3] + + include_paths = params[1] + include_paths.append( os.path.split( header_file )[0] ) + + mb = module_builder.module_builder_t( + [ header_file ] + , gccxml_path=params[0] + , working_directory=os.path.split( header_file )[0] + , include_paths=include_paths + , define_symbols=params[2] ) + mb.build_code_creator( "pyplusplus" ) + mb.code_creator.user_defined_directories.extend( include_paths ) + code = mb.code_creator.create() + code = code.replace( '\n\r', '\n' ) + code = code.replace( '\r\n', '\n' ) + + q_result.put( code ) + except Exception, error: + q_result.put(str( error )) + q_error.put(str( error )) + def gen_pypp(params, q_result, q_error): ''' Generate Python (Py++) code This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |