summaryrefslogtreecommitdiff
path: root/ldmicro/lib/linuxUI/linuxUI.cpp
diff options
context:
space:
mode:
authorakshay-c2019-01-30 12:23:44 +0530
committerakshay-c2019-01-30 12:23:44 +0530
commit4196481f74afb84e5cc59cdf00c06c1ca1becab7 (patch)
treeb531deb0466897691f08f9076b7012592f026664 /ldmicro/lib/linuxUI/linuxUI.cpp
downloadLDmicroQt-4196481f74afb84e5cc59cdf00c06c1ca1becab7.tar.gz
LDmicroQt-4196481f74afb84e5cc59cdf00c06c1ca1becab7.tar.bz2
LDmicroQt-4196481f74afb84e5cc59cdf00c06c1ca1becab7.zip
First commit
Diffstat (limited to 'ldmicro/lib/linuxUI/linuxUI.cpp')
-rw-r--r--ldmicro/lib/linuxUI/linuxUI.cpp542
1 files changed, 542 insertions, 0 deletions
diff --git a/ldmicro/lib/linuxUI/linuxUI.cpp b/ldmicro/lib/linuxUI/linuxUI.cpp
new file mode 100644
index 0000000..e8a8ab5
--- /dev/null
+++ b/ldmicro/lib/linuxUI/linuxUI.cpp
@@ -0,0 +1,542 @@
+#include "linuxUI.h"
+
+/// Global variables to hole mouse click positions
+int GLOBAL_mouse_last_clicked_x;
+int GLOBAL_mouse_last_clicked_y;
+
+/// Brushes
+const COLORREF BLACK_BR(0, 0, 0);
+const COLORREF WHITE_BR(255, 255, 255);
+const COLORREF GRAY_BR(128, 128, 128);
+const COLORREF LTGRAY_BR(211, 211, 211);
+const COLORREF DKGRAY_BR(169, 169, 169);
+
+/// Variable to current text color
+COLORREF HdcCurrentTextColor;
+
+/// Variable to hold timers
+std::vector<TimerRecord> timerRecords;
+
+/// EnableMenuItem Variables
+const UINT MF_ENABLED = 0;
+const UINT MF_GRAYED = 1;
+const UINT MF_CHECKED = 2;
+const UINT MF_UNCHECKED = 3;
+
+/// Accelerators (keyboard shortcuts)
+GtkAccelGroup* AccelGroup;
+GClosure* closure;
+
+/// ListStore
+HWID view;
+HTVC column;
+
+/// Wraper function for gtk_window_has_toplevel_focus
+BOOL GetFocus(HWID window)
+{
+ // return (BOOL) gtk_window_has_toplevel_focus(GTK_WINDOW(window));
+ return TRUE;
+}
+
+COLORREF RGB(int red, int green, int blue)
+{
+ COLORREF col(red, green, blue);
+ // col.red = red/255.0;
+ // col.green = green/255.0;
+ // col.blue = blue/255.0;
+ // col.alpha = 1.0;
+
+ return col;
+}
+
+int MessageBox(HWID pWindow, char* message, char* title, UINT mFlags)
+ {
+/* GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT;
+ GtkMessageType mType;
+
+ if ((mFlags & MB_ICONERROR) == MB_ICONERROR)
+ mType = GTK_MESSAGE_ERROR;
+ else if ((mFlags & MB_ICONQUESTION) == MB_ICONQUESTION)
+ mType = GTK_MESSAGE_QUESTION;
+ else if ((mFlags & MB_ICONWARNING) == MB_ICONWARNING)
+ mType = GTK_MESSAGE_WARNING;
+ else if ((mFlags & MB_ICONINFORMATION) == MB_ICONINFORMATION)
+ mType = GTK_MESSAGE_INFO;
+ else
+ mType = GTK_MESSAGE_OTHER;
+
+ mType = GTK_MESSAGE_ERROR;
+ HWID dialog = gtk_message_dialog_new (GTK_WINDOW(pWindow),
+ flags,
+ mType,
+ GTK_BUTTONS_NONE,
+ message);
+
+ if ((mFlags & MB_OKCANCEL) == MB_OKCANCEL)
+ {
+ gtk_dialog_add_button(GTK_DIALOG(dialog), "_OK", IDOK);
+ gtk_dialog_add_button(GTK_DIALOG(dialog), "_CANCEL", IDCANCEL);
+ }
+ else if ((mFlags & MB_YESNO) == MB_YESNO)
+ {
+ gtk_dialog_add_button(GTK_DIALOG(dialog), "_YES", IDYES);
+ gtk_dialog_add_button(GTK_DIALOG(dialog), "_NO", IDNO);
+ }
+ else if ((mFlags & MB_YESNOCANCEL) == MB_YESNOCANCEL)
+ {
+ gtk_dialog_add_button(GTK_DIALOG(dialog), "_YES", IDYES);
+ gtk_dialog_add_button(GTK_DIALOG(dialog), "_NO", IDNO);
+ gtk_dialog_add_button(GTK_DIALOG(dialog), "_CANCEL", IDCANCEL);
+ }
+ else
+ gtk_dialog_add_button(GTK_DIALOG(dialog), "OK", IDOK);
+
+ gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG(dialog),
+ title);
+ gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog), message);
+ int result = gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+*/
+ // return result;
+ return TRUE;
+ }
+
+
+BOOL GetSaveFileName(OPENFILENAME *ofn)
+{
+ /*GtkWidget *dialog;
+ GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
+
+ dialog = gtk_file_chooser_dialog_new (ofn->lpstrTitle,
+ GTK_WINDOW(ofn->parentWindow),
+ action,
+ "_Cancel",
+ GTK_RESPONSE_CANCEL,
+ "_Save",
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+ char filename[15] = "Untitled";
+
+ if (ofn->lpstrDefExt != NULL)
+ sprintf(filename, "Untitled.%s", ofn->lpstrDefExt);
+
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER(dialog), filename);
+
+ if (ofn->Flags & OFN_OVERWRITEPROMPT)
+ gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
+
+ GtkFileFilter *filter = gtk_file_filter_new ();
+ char* strFilter = new char[strlen(ofn->lpstrFilter)];
+ DWORD strFilterLen = 0;
+ BOOL filterResetFlag = FALSE;
+
+ for (int i = 0; !(ofn->lpstrFilter[i] == '\0' && ofn->lpstrFilter[i-1] == '\0'); ++i)
+ {
+ memcpy (strFilter + strFilterLen, &ofn->lpstrFilter[i], 1 );
+ ++strFilterLen;
+ if (ofn->lpstrFilter[i] == '\0')
+ if (filterResetFlag)
+ {
+ gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), strFilter);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter);
+ filter = gtk_file_filter_new ();
+ strFilterLen = 0;
+ filterResetFlag = FALSE;
+ }
+ else
+ {
+ gtk_file_filter_set_name (GTK_FILE_FILTER(filter), strFilter);
+ strFilterLen = 0;
+ filterResetFlag = TRUE;
+ }
+ }
+
+ sprintf(strFilter, "*.%s", ofn->lpstrDefExt);
+ gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), strFilter);
+ gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(dialog), filter);
+
+ delete strFilter;
+
+ BOOL exitStatus = gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT;
+ if (exitStatus)
+ {
+ char* str;
+ str = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog));
+
+ strcpy(ofn->lpstrFile, str);
+ g_free(str);
+ }
+
+ gtk_widget_destroy (dialog);
+
+ return exitStatus;*/
+ return TRUE;
+}
+
+BOOL GetOpenFileName(OPENFILENAME *ofn)
+{
+/* GtkWidget *dialog;
+ GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
+
+ dialog = gtk_file_chooser_dialog_new (ofn->lpstrTitle,
+ GTK_WINDOW(ofn->parentWindow),
+ action,
+ "_Cancel",
+ GTK_RESPONSE_CANCEL,
+ "_Open",
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ GtkFileFilter *filter = gtk_file_filter_new ();
+ char* strFilter = new char[strlen(ofn->lpstrFilter)];
+ DWORD strFilterLen = 0;
+ BOOL filterResetFlag = FALSE;
+
+ for (int i = 0; !(ofn->lpstrFilter[i] == '\0' && ofn->lpstrFilter[i-1] == '\0'); ++i)
+ {
+ memcpy (strFilter + strFilterLen, &ofn->lpstrFilter[i], 1 );
+ ++strFilterLen;
+ if (ofn->lpstrFilter[i] == '\0')
+ if (filterResetFlag)
+ {
+ gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), strFilter);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter);
+ filter = gtk_file_filter_new ();
+ strFilterLen = 0;
+ filterResetFlag = FALSE;
+ }
+ else
+ {
+ gtk_file_filter_set_name (GTK_FILE_FILTER(filter), strFilter);
+ strFilterLen = 0;
+ filterResetFlag = TRUE;
+ }
+ }
+
+ sprintf(strFilter, "*.%s", ofn->lpstrDefExt);
+ gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), strFilter);
+ //gtk_file_filter_set_name (filter, "int files");
+ gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(dialog), filter);
+
+ delete strFilter;
+
+ BOOL exitStatus = gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT;
+ if (exitStatus)
+ {
+ char* str;
+ str = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog));
+ strcpy(ofn->lpstrFile, str);
+ g_free(str);
+ }
+
+ gtk_widget_destroy (dialog);
+
+ return exitStatus;*/
+ return TRUE;
+}
+
+
+void EnableMenuItem(HMENU MenuName, HMENU MenuItem, UINT CheckEnabledItem)
+{
+ /*switch (CheckEnabledItem){
+ case MF_ENABLED :
+ gtk_widget_set_sensitive (MenuItem, true);
+ break;
+ case MF_GRAYED :
+ gtk_widget_set_sensitive (MenuItem, false);
+ break;
+ }*/
+}
+
+void CheckMenuItem(HMENU MenuName, HMENU MenuItem, UINT Check)
+{
+ /*switch (Check){
+ case MF_CHECKED :
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(MenuItem), true);
+ break;
+ case MF_UNCHECKED :
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(MenuItem), false);
+ break;
+ }*/
+}
+
+HANDLE GetStockObject(int fnObject)
+{
+ switch(fnObject)
+ {
+ case BLACK_BRUSH:
+ return (HANDLE)&BLACK_BR;
+ break;
+ case WHITE_BRUSH:
+ return (HANDLE)&WHITE_BR;
+ break;
+ case GRAY_BRUSH:
+ return (HANDLE)&GRAY_BR;
+ break;
+ case LTGRAY_BRUSH:
+ return (HANDLE)&LTGRAY_BR;
+ break;
+ case DKGRAY_BRUSH:
+ return (HANDLE)&DKGRAY_BR;
+ break;
+ default:
+ return (HANDLE)&WHITE_BR;
+ }
+}
+
+void SelectObject(HCRDC hcr, HFONT hfont)
+{
+ if (hcr ==NULL)
+ return;
+
+ cairo_select_font_face(hcr, hfont->lpszFace,
+ hfont->fdwItalic ? CAIRO_FONT_SLANT_ITALIC : CAIRO_FONT_SLANT_NORMAL,
+ hfont->fnWeight == FW_BOLD ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL);
+
+ cairo_rotate(hcr, hfont->nOrientation);
+ // cairo_text_extents_t extents;
+ // cairo_text_extents (hcr, "Z", &extents);
+ // cairo_matrix_t matrix;
+ // cairo_matrix_init_scale (&matrix,
+ // (double)hfont->nWidth,
+ // (double)hfont->nHeight);
+
+ // cairo_set_font_matrix (hcr, &matrix);
+
+ cairo_set_font_size(hcr, 10);
+}
+
+HBRUSH CreateBrushIndirect(PLOGBRUSH plb)
+{
+ COLORREF* brush = new COLORREF;
+ brush->setRgb( plb->lbColor.red(),
+ plb->lbColor.green(),
+ plb->lbColor.blue(),
+ (plb->lbStyle == BS_SOLID) ? 255 : 51);
+
+ return brush;
+}
+
+HFONT CreateFont(int nHeight, int nWidth, int nOrientation, int fnWeight,
+ DWORD fdwItalic, LPCTSTR lpszFace)
+{
+ HFONT font = (HFONT)malloc(strlen(lpszFace) + 1 + sizeof(FONT));
+ font->nHeight = nHeight;
+ font->nWidth = nWidth;
+ font->nOrientation = nOrientation;
+ font->fnWeight = fnWeight;
+ font->fdwItalic = fdwItalic;
+ font->lpszFace = (char*)malloc(strlen(lpszFace)+1);
+ strcpy(font->lpszFace, lpszFace);
+
+ return font;
+}
+
+void SetBkColor(HWID widget, HCRDC hcr, COLORREF bkCol)
+{
+/* if (hcr == NULL)
+ return;
+
+ gtk_widget_override_background_color(GTK_WIDGET(widget),
+ GTK_STATE_FLAG_NORMAL, &bkCol);
+
+ gint width = gtk_widget_get_allocated_width (widget);
+ gint height = gtk_widget_get_allocated_height (widget);
+
+ // COLORREF col;
+ // GtkStyleContext *context;
+
+ // context = gtk_widget_get_style_context (widget);
+
+ // gtk_style_context_get_color (context,
+ // gtk_style_context_get_state (context),
+ // &col);
+ gdk_cairo_set_source_rgba (hcr, &bkCol);
+ // cairo_rectangle(hcr, 0, 0, width, height);
+ // cairo_stroke_preserve(hcr);
+
+ cairo_fill (hcr);*/
+}
+
+void SetTextColor(HCRDC hcr, COLORREF color)
+{
+ if (hcr == NULL)
+ return;
+
+ HdcCurrentTextColor = color;
+ // gdk_cairo_set_source_rgba (hcr, &color);
+}
+
+void TextOut(HWID hWid, HCRDC hcr, int nXStart, int nYStart, LPCTSTR lpString, int cchString)
+{
+ /*if (hcr == NULL)
+ return;
+
+ nYStart += 30;
+
+ cairo_text_extents_t extents;
+ cairo_text_extents (hcr, lpString, &extents);
+ int width = gtk_widget_get_allocated_width (hWid);
+ int height= gtk_widget_get_allocated_height (hWid);
+ BOOL resize_flag = FALSE;
+
+ if(nYStart+(extents.height/2.0) >= height)
+ {
+ height += extents.height + 50;
+ resize_flag = TRUE;
+ }
+
+ if (nXStart+(extents.width/2.0) >= width)
+ {
+ width += extents.width;
+ resize_flag = TRUE;
+ }
+
+ if (resize_flag)
+ gtk_widget_set_size_request(hWid, width, height);
+
+ char* text = (char*)malloc(cchString);
+ strncpy(text, lpString, cchString);
+ text[cchString] = '\0';
+
+ cairo_move_to(hcr, nXStart, nYStart);
+ cairo_show_text(hcr, text);
+
+ cairo_fill (hcr);*/
+}
+
+COLORREF GetTextColor(HCRDC Hdc)
+{
+ // COLORREF col;
+ // gtk_style_context_get_color (Hdc,
+ // gtk_style_context_get_state (Hdc),
+ // &col);
+
+ return HdcCurrentTextColor;
+}
+
+BOOL InvalidateRect(HWID hWid, const RECT *lpRect, BOOL bErase)
+{
+ /*if(!GDK_IS_WINDOW(hWid))
+ return FALSE;
+
+ if (lpRect == NULL)
+ {
+ gdk_window_invalidate_rect (gtk_widget_get_window (hWid), NULL, FALSE);
+ return TRUE;
+ }
+
+ GDRECT Gdrect;
+ RECT_to_GDRECT(lpRect, &Gdrect);
+ // gtk_widget_queue_draw(hWid);
+ gdk_window_invalidate_rect (gtk_widget_get_window (hWid), &Gdrect, FALSE);
+ */
+ return TRUE;
+}
+
+int FillRect(HCRDC hDC, const RECT *lprc, HBRUSH hbr)
+{
+ if (hDC == NULL)
+ return -1;
+ /*
+ GDRECT gdrc;
+ RECT_to_GDRECT(lprc, &gdrc);
+
+ cairo_set_source_rgb(hDC, hbr->red, hbr->green, hbr->blue);
+ cairo_rectangle(hDC, gdrc.x, gdrc.y, gdrc.width, gdrc.height);
+ cairo_stroke_preserve(hDC);
+ cairo_fill(hDC);*/
+
+ return 0;
+}
+
+BOOL PatBlt(HCRDC hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, DWORD dwRop, HBRUSH hbr)
+{
+ if (hdc == NULL)
+ return FALSE;
+
+ //cairo_set_source_rgb(hdc, hbr->red, hbr->green, hbr->blue);
+ //cairo_rectangle(hdc, nXLeft, nYLeft + 20, nWidth, nHeight);
+ //cairo_stroke_preserve(hdc);
+
+ //cairo_fill(hdc);
+
+ return TRUE;
+}
+
+BOOL GetClientRect(HWID hWid, PRECT pRect)
+{
+ /* GtkAllocation allocation;
+ gtk_widget_get_allocation (hWid, &allocation);
+
+ pRect->top = allocation.x;
+ pRect->left = allocation.y;
+ pRect->right = allocation.width;
+ pRect->bottom = allocation.height;
+*/
+ return TRUE;
+}
+
+BOOL MoveWindow(HWID hWid, int X, int Y, int nWidth, int nHeight, BOOL bRepaint)
+{
+ /* gtk_window_move(GTK_WINDOW(hWid), X, Y);
+ gtk_window_resize(GTK_WINDOW(hWid), nWidth, nHeight);
+
+ if (bRepaint)
+ gdk_window_invalidate_rect (gtk_widget_get_window (hWid), NULL, FALSE);
+ */
+ return TRUE;
+}
+
+
+BOOL GetWindowRect(HWID hWid, PRECT pRect)
+{
+ /*GtkAllocation allocation;
+ gtk_widget_get_allocation (hWid, &allocation);
+
+ pRect->top = allocation.x;
+ pRect->left = allocation.y;
+ pRect->right = allocation.width;
+ pRect->bottom = allocation.height;
+*/
+ return TRUE;
+}
+
+
+UINT SetTimer(HWID hWid, UINT nIDEvent, UINT uElapse, BOOL (*lpTimerFunc)(BOOL) )
+{
+ auto record_it = std::find_if(timerRecords.begin(), timerRecords.end(), [&nIDEvent](TimerRecord &Record) { return Record.ufID == nIDEvent; });
+
+ if (record_it != timerRecords.end())
+ return 0;
+
+ TimerRecord tr;
+ tr.pfun = lpTimerFunc;
+ tr.ufID = nIDEvent;
+ tr.utID = g_timeout_add(uElapse, (GSourceFunc)lpTimerFunc, FALSE);
+
+ timerRecords.push_back(tr);
+ return tr.utID;
+}
+
+BOOL KillTimer(HWID hWid, UINT uIDEvent)
+{
+ auto record_it = std::find_if(timerRecords.begin(), timerRecords.end(), [&uIDEvent](TimerRecord &Record) { return Record.ufID == uIDEvent; });
+
+ if (record_it == timerRecords.end())
+ return FALSE;
+
+ record_it->pfun(TRUE);
+ g_source_remove (record_it->utID);
+ timerRecords.erase(record_it);
+
+ return TRUE;
+}
+
+void DestroyWindow (HWID widget)
+{
+ /*if (GTK_IS_WIDGET(widget))
+ {
+ gtk_widget_destroy (widget);
+ }*/
+}