2020년 12월 5일 토요일

[IronPython] WPF Label

WPF Label

import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore");
clr.AddReference('System.Data')
clr.AddReference('System.Windows.Forms')

import System
from System import *
from System.Data import *
from System.Type import GetType
from System.Threading.Tasks import Task
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Controls.Primitives import *
from System.Windows.Media import *
from System.Windows.Media.Imaging import *
from System.Windows.Media.Effects import *
from System.Windows.Shapes import Rectangle
from System.Windows.Shapes import Rectangle
from System.Windows.Data import Binding
from System.Windows.Ink import Stroke
from System.Windows.Forms import ( FolderBrowserDialog, DialogResult )
from Microsoft.Win32 import ( OpenFileDialog, SaveFileDialog )

import ctrl

class WpfLabel(ctrl.WpfCtrl):
    def __init__(self,text=None,background=None,**kwargs):
        self.ctrl = Label()
        self.init(**kwargs)
        if text: self.ctrl.Content = text
        if background: self.ctrl.Background = background
        self.ctrl.HorizontalAlignment = HorizontalAlignment.Stretch
        self.ctrl.VerticalAlignment = VerticalAlignment.Center   

if __name__ == "__main__":
    import win
    app = win.Win("Button Demo",320,240)
    b = WpfLabel("Hello World",Brushes.SkyBlue)
    app.set_content(b.ctrl)
    app.run()

[IronPython] WPF Image Box

WPF Image Box

import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore");
clr.AddReference('System.Data')
clr.AddReference('System.Windows.Forms')

import System
from System import *
from System.Data import *
from System.Type import GetType
from System.Threading.Tasks import Task
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Controls.Primitives import *
from System.Windows.Media import *
from System.Windows.Media.Imaging import *
from System.Windows.Media.Effects import *
from System.Windows.Shapes import Rectangle
from System.Windows.Shapes import Rectangle
from System.Windows.Data import Binding
from System.Windows.Ink import Stroke
from System.Windows.Forms import ( FolderBrowserDialog, DialogResult )
from Microsoft.Win32 import ( OpenFileDialog, SaveFileDialog )

import ctrl

class WpfImage(ctrl.WpfCtrl):
    def __init__(self,imagefile,stretch=None,scroll=True,multiple=False,**kwargs):
        self.ctrl = Label()
        self.init(**kwargs)
        self.image = Image()
        self.image.HorizontalAlignment = HorizontalAlignment.Center
        self.image.VerticalAlignment = VerticalAlignment.Center
        if imagefile: self.image.Source = BitmapImage(System.Uri(imagefile,System.UriKind.Relative))
        if stretch: self.stretch(stretch)
        else: self.StretchUniform()
        '''if size: 
            self.image.Height = float(size); 
            self.image.Width = float(size)'''
        if scroll:
            scroll = ScrollViewer()
            scroll.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto
            scroll.Content = self.image
            self.ctrl.Content = scroll
        elif multiple:
            stack = StackPanel()
            stack.Orientation = Orientation.Horizontal
            stack.Children.Add(self.image)
            self.ctrl.Content = stack 
        else:
            self.ctrl.Content = self.image       
    def stretch_none(self): self.image.Stretch = Stretch.None
    def stretch_fill(self): self.image.Stretch = Stretch.Fill
    def stretch_uniform(self): self.image.Stretch = Stretch.Uniform
    def stretch_uniform_to_fill(self): self.image.Stretch = Stretch.UniformToFill
    def stretch(self,stretch):
        if stretch == 'none': self.stretch_none()
        elif stretch == 'fill': self.stretch_fill()
        elif stretch == 'uniform': self.stretch_uniform()
        elif stretch == 'uniformfill': self.stretch_uniform_to_fill()

if __name__ == "__main__":
    import win
    app = win.Win("Button Demo",320,240)
    b = WpfImage("Lenna.png","fill")
    app.set_content(b.ctrl)
    app.run()

[IronPython] WPF Group Box

WPF Group Box


import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore");
clr.AddReference('System.Data')
clr.AddReference('System.Windows.Forms')

import System
from System import *
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Forms import ( FolderBrowserDialog, DialogResult )
from Microsoft.Win32 import ( OpenFileDialog, SaveFileDialog )

import ctrl
import vbox

class WpfGroup(ctrl.WpfCtrl):
    def __init__(self,text=None):
        self.ctrl = GroupBox()
        if text: self.ctrl.Header = text
    def add_item(self,item):
        self.ctrl.AddChild(item)
        
if __name__ == "__main__":
    import win
    app = win.Win("GroupBox Demo",320,240)
    g = WpfGroup("Buttons")
    b1 = Button(); b1.Content = "Button1"
    b2 = Button(); b2.Content = "Button2"
    vb = vbox.WpfVBox(); 
    vb.add_item(b1)
    vb.add_item(b2)
    g.add_item(vb.ctrl)
    app.set_content(g.ctrl)
    app.run()

[IronPython] WPF Edit (Text Box)

WPF Edit (Text Box)


import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore");
clr.AddReference('System.Data')
clr.AddReference('System.Windows.Forms')

import System
from System import *
from System.Data import *
from System.Type import GetType
from System.Threading.Tasks import Task
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Controls.Primitives import *
from System.Windows.Media import *
from System.Windows.Media.Imaging import *
from System.Windows.Media.Effects import *
from System.Windows.Shapes import Rectangle
from System.Windows.Data import Binding
from System.Windows.Ink import Stroke
from System.Windows.Forms import ( FolderBrowserDialog, DialogResult )
from Microsoft.Win32 import ( OpenFileDialog, SaveFileDialog )

import ctrl
import vbox
import hbox

def ClipboardGetTextData():
    return Clipboard.GetData(DataFormats.Text)

def ClipboardSetTextData(text):
    Clipboard.SetData(DataFormats.Text, text)

def ClipboardGetHtmlData():
    return Clipboard.GetData(DataFormats.Html)

def ClipboardSetHtmlData(text):
    Clipboard.SetData(DataFormats.Html, text)

def ClipboardGetText():
    return Clipboard.GetText()

def ClipboardSetText(text):
    Clipboard.SetText(text)
       
class WpfEdit(ctrl.WpfCtrl):
    def __init__(self,text=None,multiline=True,tool=False,handler=None,image=None,size=None,vert=True,**kwargs):
        self.text = TextBox()
        self.ctrl = self.text
        self.init(**kwargs)
        if multiline: 
            self.ctrl.AcceptsReturn = True
            self.ctrl.AcceptsTab = True
            self.ctrl.TextWrapping = TextWrapping.NoWrap
            self.ctrl.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto
            self.ctrl.VerticalScrollBarVisibility   = ScrollBarVisibility.Auto
        if handler: self.ctrl.Click += handler
        if tool:
            self.vbox = vbox.WpfVBox()
            self.hbox = hbox.WpfHBox()
            self.hbox.add_item(self.get_button("Clear", self.clear_handler))
            self.hbox.add_item(self.get_button("Copy", self.copy_handler))
            self.hbox.add_item(self.get_button("CopyAll", self.copy_all_handler))
            self.hbox.add_item(self.get_button("Paste", self.paste_handler))
            self.hbox.add_item(self.get_button("PasteHtml", self.paste_html_handler))
            self.vbox.add_item(self.hbox.ctrl)
            self.vbox.add_item(self.text,expand=True)
            self.ctrl = self.vbox.ctrl

    def clear(self):
        self.text.Text = ""
    def get_value(self):
        return self.text.Text
    def set_value(self,text):
        self.text.Text = text
    def append_text(self,text):
        self.text.Text += text
    def set_width(self,width):
        self.text.Width = width
    def scroll_to_end(self):
        self.text.ScrollToEnd()
    def set_wrap(self,wrap):
        self.text.TextWrapping = TextWrapping.Wrap if wrap else TextWrapping.NoWrap

    def get_button(self,label,handler):
        b = Button()
        b.Content = label
        b.Click += handler
        return b
    def clear_handler(self,sender,args):
        self.text.Clear()
    def copy_handler(self,sender,args):
        self.text.Copy()
    def copy_all_handler(self,sender,args):
        self.text.SelectAll()
        self.text.Copy()
    def paste_handler(self,sender,args):
        self.text.Paste()
    def paste_html_handler(self,sender,args):
        self.text.Text = ClipboardGetHtmlData()
        
if __name__ == "__main__":
    import win
    app = win.Win("Edit Demo",320,240)
    b = WpfEdit("Exit", multiline=True, tool=True)
    app.set_content(b.ctrl)
    app.run()

[IronPython] WPF Date Picker

WPF Date Picker

import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore");
clr.AddReference('System.Data')
clr.AddReference('System.Windows.Forms')

import System
from System import *
from System.Data import *
from System.Type import GetType
from System.Threading.Tasks import Task
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Controls.Primitives import *
from System.Windows.Media import *
from System.Windows.Media.Imaging import *
from System.Windows.Media.Effects import *
from System.Windows.Shapes import Rectangle
from System.Windows.Shapes import Rectangle
from System.Windows.Data import Binding
from System.Windows.Ink import Stroke
from System.Windows.Forms import ( FolderBrowserDialog, DialogResult )
from Microsoft.Win32 import ( OpenFileDialog, SaveFileDialog )

import ctrl

class WpfDate(ctrl.WpfCtrl):
    def __init__(self,handler=None,**kwargs):   
        self.ctrl = DatePicker()
        self.init(**kwargs)
        if handler: self.ctrl.SelectedDateChanged += handler
    def get_value(self):
        return self.ctrl.Text
    def set_value(self,v):
        self.ctrl.Text = v

date_ctrl = None

if __name__ == "__main__":
    def date_handler(s,e): print(s.Text)
    def button_handler(s,e):print( date_ctrl.set_value("1900-01-31" ) )
    import win
    app = win.Win("Date Picker Demo",320,240)
    date_ctrl = WpfDate(date_handler)
    app.set_content(date_ctrl.ctrl)
    b = Button(); b.Content = "Button"; b.Click += button_handler
    app.add_statusbar(b)    
    app.run()

[IronPython] WPF Combo Box

WPF Combo Box

import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore");
clr.AddReference('System.Data')
clr.AddReference('System.Windows.Forms')

import System
from System import *
from System.Data import *
from System.Type import GetType
from System.Threading.Tasks import Task
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Controls.Primitives import *
from System.Windows.Media import *
from System.Windows.Media.Imaging import *
from System.Windows.Media.Effects import *
from System.Windows.Shapes import Rectangle
from System.Windows.Data import Binding
from System.Windows.Ink import Stroke
from System.Windows.Forms import ( FolderBrowserDialog, DialogResult )
from Microsoft.Win32 import ( OpenFileDialog, SaveFileDialog )

import ctrl

class WpfCombo(ctrl.WpfCtrl):
    def __init__(self,handler=None,items=None,selected=0,**kwargs):
        self.ctrl = ComboBox()
        self.ctrl.IsEditable=True
        self.ctrl.IsReadOnly=False        
        self.init(**kwargs)
        if handler: self.ctrl.SelectionChanged += handler
        if items:
            self.ctrl.ItemsSource = items
            self.ctrl.SelectedIndex = selected     
    def get_value(self): return ctrl.Text
    def get_added_item(self,args): return args.AddedItems[0]

choice_ctrl = None

if __name__ == "__main__":
    def combo_handler(s,e):
        if len(e.AddedItems) > 0:
            print( e.AddedItems[0] )
    def button_handler(s,e):print( choice_ctrl.ctrl.Text )
    import win
    app = win.Win("Button Demo",320,240)
    choice_ctrl = WpfCombo(items=("1st","2nd","3rd"),selected=0, handler=combo_handler)
    app.set_content(choice_ctrl.ctrl)
    b = Button(); b.Content = "Button"; b.Click += button_handler
    app.add_statusbar(b)
    app.run()

[IronPython] WPF Choice Box

WPF Choice Box


import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore");
clr.AddReference('System.Data')
clr.AddReference('System.Windows.Forms')

import System
from System import *
from System.Data import *
from System.Type import GetType
from System.Threading.Tasks import Task
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Controls.Primitives import *
from System.Windows.Media import *
from System.Windows.Media.Imaging import *
from System.Windows.Media.Effects import *
from System.Windows.Shapes import Rectangle
from System.Windows.Data import Binding
from System.Windows.Ink import Stroke
from System.Windows.Forms import ( FolderBrowserDialog, DialogResult )
from Microsoft.Win32 import ( OpenFileDialog, SaveFileDialog )

import ctrl

class WpfChoice(ctrl.WpfCtrl):
    def __init__(self,handler=None,items=None,selected=0,**kwargs):
        self.ctrl = ComboBox()
        self.init(**kwargs)
        if handler: self.ctrl.SelectionChanged += handler
        if items:
            self.ctrl.ItemsSource = items
            self.ctrl.SelectedIndex = selected     
    def get_value(self): return ctrl.Text
    def get_added_item(self,args): return args.AddedItems[0]

choice_ctrl = None

if __name__ == "__main__":
    def choice_handler(s,e):print( e.AddedItems[0] )
    def button_handler(s,e):print( choice_ctrl.ctrl.Text )
    import win
    app = win.Win("Button Demo",320,240)
    choice_ctrl = WpfChoice(items=("1st","2nd","3rd"),selected=0, handler=choice_handler)
    app.set_content(choice_ctrl.ctrl)
    b = Button(); b.Content = "Button"; b.Click += button_handler
    app.add_statusbar(b)
    app.run()

[IronPython] WPF Check Box

WPF Check Box


import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore");
clr.AddReference('System.Data')
clr.AddReference('System.Windows.Forms')

import System
from System import *
from System.Data import *
from System.Type import GetType
from System.Threading.Tasks import Task
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Controls.Primitives import *
from System.Windows.Media import *
from System.Windows.Media.Imaging import *
from System.Windows.Media.Effects import *
from System.Windows.Shapes import Rectangle
from System.Windows.Data import Binding
from System.Windows.Ink import Stroke
from System.Windows.Forms import ( FolderBrowserDialog, DialogResult )
from Microsoft.Win32 import ( OpenFileDialog, SaveFileDialog )

import ctrl

class WpfCheck(ctrl.WpfCtrl):
    def __init__(self,text=None,handler=None,**kwargs):
        self.ctrl = CheckBox()
        self.ctrl.VerticalAlignment = VerticalAlignment.Center
        self.ctrl.VerticalContentAlignment = VerticalAlignment.Center
        self.init(**kwargs)
        if text: self.ctrl.Content = text
        if handler: self.ctrl.Click += handler        
    def get_value(self): return self.ctrl.IsChecked

if __name__ == "__main__":
    def check_handler(s,e):
        print( s.IsChecked )
    import win
    app = win.Win("Check Demo",320,240)
    b = WpfCheck("Exit", handler=check_handler)
    app.set_content(b.ctrl)
    app.run()
    
    

[IronPython] WPF Button Control

WPF Button Control

import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore");
clr.AddReference('System.Data')
clr.AddReference('System.Windows.Forms')

import System
from System import *
from System.Data import *
from System.Type import GetType
from System.Threading.Tasks import Task
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Controls.Primitives import *
from System.Windows.Media import *
from System.Windows.Media.Imaging import *
from System.Windows.Media.Effects import *
from System.Windows.Shapes import Rectangle
from System.Windows.Data import Binding
from System.Windows.Ink import Stroke
from System.Windows.Forms import ( FolderBrowserDialog, DialogResult )
from Microsoft.Win32 import ( OpenFileDialog, SaveFileDialog )

import ctrl

class WpfButton(ctrl.WpfCtrl):
    def __init__(self,text=None,handler=None,image=None,size=None,vert=True,**kwargs):
        self.ctrl = Button()
        self.init(**kwargs)
        stack = StackPanel()
        if vert: stack.Orientation = Orientation.Vertical
        else: stack.Orientation = Orientation.Horizontal
        self.ctrl.Content = stack
        if image:
            img = Image()
            img.Source = BitmapImage(System.Uri(image,System.UriKind.Relative))
            img.VerticalAlignment = VerticalAlignment.Center
            img.Stretch = Stretch.Fill #Stretch.None
            if size: img.Width = size; img.Height = size
            stack.Children.Add(img)
        if text: 
            txt = TextBlock()
            txt.Text = text
            txt.TextAlignment = TextAlignment.Center
            stack.Children.Add(txt)         
        if handler: self.ctrl.Click += handler

if __name__ == "__main__":
    import win
    app = win.Win("Button Demo",320,240)
    b = WpfButton("Exit", handler=lambda s,e: app.Close())
    app.set_content(b.ctrl)
    app.run()

[IronPython] WPF Control Base

WPF Control Base

import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore");
clr.AddReference('WindowsBase')
clr.AddReference('System.Data')
clr.AddReference('System.ComponentModel')

import System
from System import *
from System.Data import *
from System.Threading.Tasks import *
from System.ComponentModel import *
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Controls.Primitives import *
from System.Windows.Media import *
from System.Windows.Media.Imaging import *
from System.Windows.Media.Effects import *
from System.Windows.Shapes import *
from System.Windows.Data import *
from System.Windows.Ink import *
from Microsoft.Win32 import ( OpenFileDialog, SaveFileDialog )

class WpfCtrl():
    def init(self):
        self.ctrl.Margin  = Thickness(5)
        self.ctrl.Padding = Thickness(1)
    def set_width(self,v): self.ctrl.Width = v
    def set_height(self,v): self.ctrl.Height = v
    def set_margin(self,l,t,r,b): self.ctrl.Margin = System.Windows.Thickness(l,t,r,b)
    def shadow_effect(self):
        from System.Windows.Media.Effects import DropShadowBitmapEffect
        self.ctrl.BitmapEffect = DropShadowBitmapEffect()
    def set_fontsize(self,size):
        self.ctrl.FontSize = size
    def set_tooltip(self,tooltip):
        tip = ToolTip()
        tip.Content = tooltip
        self.ctrl.ToolTip = tip
    def set_menu(self,menu):
        #menu = ContextMenu()      
        self.ctrl.ContextMenu = menu
    def set_filedrop(self,handler):
        SetFileDropHandler(self.ctrl,handler)